payload 2.23.1 → 2.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/admin/components/elements/Dropzone/index.d.ts +2 -1
  2. package/dist/admin/components/elements/Dropzone/index.d.ts.map +1 -1
  3. package/dist/admin/components/elements/Dropzone/index.js +15 -10
  4. package/dist/admin/components/elements/EditUpload/index.d.ts.map +1 -1
  5. package/dist/admin/components/elements/EditUpload/index.js +1 -1
  6. package/dist/admin/components/utilities/Auth/index.d.ts.map +1 -1
  7. package/dist/admin/components/utilities/Auth/index.js +64 -61
  8. package/dist/admin/components/utilities/Auth/types.d.ts +3 -1
  9. package/dist/admin/components/utilities/Auth/types.d.ts.map +1 -1
  10. package/dist/admin/components/utilities/Locale/index.d.ts.map +1 -1
  11. package/dist/admin/components/utilities/Locale/index.js +31 -20
  12. package/dist/admin/components/utilities/UploadEdits/index.d.ts +1 -0
  13. package/dist/admin/components/utilities/UploadEdits/index.d.ts.map +1 -1
  14. package/dist/admin/components/utilities/UploadEdits/index.js +6 -1
  15. package/dist/admin/components/views/Unauthorized/index.d.ts.map +1 -1
  16. package/dist/admin/components/views/Unauthorized/index.js +6 -4
  17. package/dist/admin/components/views/collections/Edit/Upload/index.d.ts.map +1 -1
  18. package/dist/admin/components/views/collections/Edit/Upload/index.js +105 -27
  19. package/dist/admin/components/views/collections/Edit/Upload/index.scss +6 -3
  20. package/dist/fields/hooks/beforeValidate/promise.d.ts +2 -1
  21. package/dist/fields/hooks/beforeValidate/promise.d.ts.map +1 -1
  22. package/dist/fields/hooks/beforeValidate/promise.js +18 -6
  23. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts +2 -1
  24. package/dist/fields/hooks/beforeValidate/traverseFields.d.ts.map +1 -1
  25. package/dist/fields/hooks/beforeValidate/traverseFields.js +18 -3
  26. package/dist/translations/ar.json +3 -1
  27. package/dist/translations/az.json +3 -1
  28. package/dist/translations/bg.json +3 -1
  29. package/dist/translations/cs.json +3 -1
  30. package/dist/translations/de.json +3 -1
  31. package/dist/translations/en.json +2 -0
  32. package/dist/translations/es.json +3 -1
  33. package/dist/translations/fa.json +3 -1
  34. package/dist/translations/fr.json +3 -1
  35. package/dist/translations/hr.json +3 -1
  36. package/dist/translations/hu.json +3 -1
  37. package/dist/translations/index.d.ts +60 -0
  38. package/dist/translations/index.d.ts.map +1 -1
  39. package/dist/translations/it.json +3 -1
  40. package/dist/translations/ja.json +3 -1
  41. package/dist/translations/ko.json +3 -1
  42. package/dist/translations/my.json +3 -1
  43. package/dist/translations/nb.json +3 -1
  44. package/dist/translations/nl.json +3 -1
  45. package/dist/translations/pl.json +3 -1
  46. package/dist/translations/pt.json +3 -1
  47. package/dist/translations/ro.json +3 -1
  48. package/dist/translations/rs-latin.json +3 -1
  49. package/dist/translations/rs.json +3 -1
  50. package/dist/translations/ru.json +3 -1
  51. package/dist/translations/sv.json +3 -1
  52. package/dist/translations/th.json +3 -1
  53. package/dist/translations/tr.json +3 -1
  54. package/dist/translations/translation-schema.json +6 -0
  55. package/dist/translations/ua.json +3 -1
  56. package/dist/translations/vi.json +3 -1
  57. package/dist/translations/zh-tw.json +3 -1
  58. package/dist/translations/zh.json +3 -1
  59. package/dist/uploads/generateFileData.js +4 -4
  60. package/package.json +1 -1
@@ -24,6 +24,7 @@ _export(exports, {
24
24
  });
25
25
  const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
26
26
  const _reacti18next = require("react-i18next");
27
+ const _reacttoastify = require("react-toastify");
27
28
  const _isImage = /*#__PURE__*/ _interop_require_default(require("../../../../../../uploads/isImage"));
28
29
  const _Button = /*#__PURE__*/ _interop_require_default(require("../../../../elements/Button"));
29
30
  const _Drawer = require("../../../../elements/Drawer");
@@ -37,6 +38,7 @@ const _reduceFieldsToValues = /*#__PURE__*/ _interop_require_default(require("..
37
38
  const _shared = require("../../../../forms/field-types/shared");
38
39
  const _useField = /*#__PURE__*/ _interop_require_default(require("../../../../forms/useField"));
39
40
  const _DocumentInfo = require("../../../../utilities/DocumentInfo");
41
+ const _UploadEdits = require("../../../../utilities/UploadEdits");
40
42
  require("./index.scss");
41
43
  function _interop_require_default(obj) {
42
44
  return obj && obj.__esModule ? obj : {
@@ -106,21 +108,48 @@ const UploadActions = ({ canEdit, showSizePreviews })=>{
106
108
  }, t('upload:editImage')));
107
109
  };
108
110
  const Upload = (props)=>{
109
- const { collection, internalState, onChange, updatedAt } = props;
111
+ const { collection, internalState, onChange } = props;
110
112
  const [replacingFile, setReplacingFile] = (0, _react.useState)(false);
111
113
  const [fileSrc, setFileSrc] = (0, _react.useState)(null);
112
114
  const { t } = (0, _reacti18next.useTranslation)([
113
115
  'upload',
114
116
  'general'
115
117
  ]);
118
+ const { resetUploadEdits } = (0, _UploadEdits.useUploadEdits)();
116
119
  const [doc, setDoc] = (0, _react.useState)((0, _reduceFieldsToValues.default)(internalState || {}, true));
117
120
  const { docPermissions } = (0, _DocumentInfo.useDocumentInfo)();
118
121
  const { errorMessage, setValue, showError, value } = (0, _useField.default)({
119
122
  path: 'file',
120
123
  validate
121
124
  });
125
+ const [showUrlInput, setShowUrlInput] = (0, _react.useState)(false);
126
+ const [fileUrl, setFileUrl] = (0, _react.useState)('');
127
+ const cursorPositionRef = (0, _react.useRef)(null);
128
+ const urlInputRef = (0, _react.useRef)(null);
129
+ const handleFileChange = (0, _react.useCallback)((newFile)=>{
130
+ if (newFile instanceof File) {
131
+ const fileReader = new FileReader();
132
+ fileReader.onload = (e)=>{
133
+ const imgSrc = e.target?.result;
134
+ if (typeof imgSrc === 'string') {
135
+ setFileSrc(imgSrc);
136
+ }
137
+ };
138
+ fileReader.readAsDataURL(newFile);
139
+ }
140
+ setValue(newFile);
141
+ setShowUrlInput(false);
142
+ if (typeof onChange === 'function') {
143
+ onChange(newFile);
144
+ }
145
+ }, [
146
+ onChange,
147
+ setValue
148
+ ]);
122
149
  const handleFileNameChange = (e)=>{
123
150
  const updatedFileName = e.target.value;
151
+ const cursorPosition = e.target.selectionStart;
152
+ cursorPositionRef.current = cursorPosition;
124
153
  if (value) {
125
154
  const fileValue = value;
126
155
  // Creating a new File object with updated properties
@@ -129,23 +158,58 @@ const Upload = (props)=>{
129
158
  ], updatedFileName, {
130
159
  type: fileValue.type
131
160
  });
132
- setValue(newFile) // Updating the state with the new File object
133
- ;
161
+ handleFileChange(newFile);
134
162
  }
135
163
  };
164
+ (0, _react.useEffect)(()=>{
165
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
166
+ const inputElement = document.querySelector(`.${baseClass}__filename`);
167
+ if (inputElement && cursorPositionRef.current !== null) {
168
+ inputElement.setSelectionRange(cursorPositionRef.current, cursorPositionRef.current);
169
+ }
170
+ }, [
171
+ value
172
+ ]);
136
173
  const handleFileSelection = _react.default.useCallback((files)=>{
137
174
  const fileToUpload = files?.[0];
138
- setValue(fileToUpload);
175
+ handleFileChange(fileToUpload);
139
176
  }, [
140
- setValue
177
+ handleFileChange
141
178
  ]);
142
179
  const handleFileRemoval = (0, _react.useCallback)(()=>{
143
180
  setReplacingFile(true);
144
- setValue(null);
181
+ handleFileChange(null);
145
182
  setFileSrc('');
183
+ setFileUrl('');
184
+ setDoc({});
185
+ resetUploadEdits();
186
+ setShowUrlInput(false);
146
187
  }, [
147
- setValue
188
+ handleFileChange,
189
+ resetUploadEdits
148
190
  ]);
191
+ const handlePasteUrlClick = ()=>{
192
+ setShowUrlInput((prev)=>!prev);
193
+ };
194
+ const handleUrlSubmit = async ()=>{
195
+ if (fileUrl) {
196
+ try {
197
+ const response = await fetch(fileUrl);
198
+ const data = await response.blob();
199
+ // Extract the file name from the URL
200
+ const fileName = fileUrl.split('/').pop();
201
+ // Create a new File object from the Blob data
202
+ const file = new File([
203
+ data
204
+ ], fileName, {
205
+ type: data.type
206
+ });
207
+ handleFileChange(file);
208
+ } catch (e) {
209
+ _reacttoastify.toast.error(e.message);
210
+ }
211
+ }
212
+ };
149
213
  (0, _react.useEffect)(()=>{
150
214
  setDoc((0, _reduceFieldsToValues.default)(internalState || {}, true));
151
215
  setReplacingFile(false);
@@ -153,23 +217,12 @@ const Upload = (props)=>{
153
217
  internalState
154
218
  ]);
155
219
  (0, _react.useEffect)(()=>{
156
- if (value instanceof File) {
157
- const fileReader = new FileReader();
158
- fileReader.onload = (e)=>{
159
- const imgSrc = e.target?.result;
160
- if (typeof imgSrc === 'string') {
161
- setFileSrc(imgSrc);
162
- }
163
- };
164
- fileReader.readAsDataURL(value);
165
- }
166
- if (typeof onChange === 'function') {
167
- onChange(value);
220
+ if (showUrlInput && urlInputRef.current) {
221
+ urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true
222
+ ;
168
223
  }
169
224
  }, [
170
- value,
171
- onChange,
172
- updatedAt
225
+ showUrlInput
173
226
  ]);
174
227
  const canRemoveUpload = docPermissions?.update?.permission && 'delete' in docPermissions && docPermissions?.delete?.permission;
175
228
  const hasImageSizes = collection?.upload?.imageSizes?.length > 0;
@@ -195,11 +248,36 @@ const Upload = (props)=>{
195
248
  imageCacheTag: doc.updatedAt
196
249
  }), (!doc.filename || replacingFile) && /*#__PURE__*/ _react.default.createElement("div", {
197
250
  className: `${baseClass}__upload`
198
- }, !value && /*#__PURE__*/ _react.default.createElement(_Dropzone.Dropzone, {
251
+ }, !value && !showUrlInput && /*#__PURE__*/ _react.default.createElement(_Dropzone.Dropzone, {
199
252
  className: `${baseClass}__dropzone`,
200
253
  mimeTypes: collection?.upload?.mimeTypes,
201
- onChange: handleFileSelection
202
- }), value && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement("div", {
254
+ onChange: handleFileSelection,
255
+ onPasteUrlClick: handlePasteUrlClick
256
+ }), showUrlInput && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement("div", {
257
+ className: `${baseClass}__remote-file-wrap`
258
+ }, /*#__PURE__*/ _react.default.createElement("input", {
259
+ className: `${baseClass}__remote-file`,
260
+ onChange: (e)=>{
261
+ setFileUrl(e.target.value);
262
+ },
263
+ ref: urlInputRef,
264
+ type: "text",
265
+ value: fileUrl
266
+ }), /*#__PURE__*/ _react.default.createElement("div", {
267
+ className: `${baseClass}__add-file-wrap`
268
+ }, /*#__PURE__*/ _react.default.createElement("button", {
269
+ className: `${baseClass}__add-file`,
270
+ onClick: handleUrlSubmit,
271
+ type: "button"
272
+ }, t('upload:addImage')))), /*#__PURE__*/ _react.default.createElement(_Button.default, {
273
+ buttonStyle: "icon-label",
274
+ className: `${baseClass}__remove`,
275
+ icon: "x",
276
+ iconStyle: "with-border",
277
+ onClick: handleFileRemoval,
278
+ round: true,
279
+ tooltip: t('general:cancel')
280
+ })), value && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement("div", {
203
281
  className: `${baseClass}__thumbnail-wrap`
204
282
  }, /*#__PURE__*/ _react.default.createElement(_Thumbnail.default, {
205
283
  fileSrc: (0, _isImage.default)(value.type) ? fileSrc : null
@@ -227,7 +305,7 @@ const Upload = (props)=>{
227
305
  }, /*#__PURE__*/ _react.default.createElement(_EditUpload.EditUpload, {
228
306
  doc: doc || undefined,
229
307
  fileName: value?.name || doc?.filename,
230
- fileSrc: fileSrc || doc?.url,
308
+ fileSrc: doc?.url || fileSrc,
231
309
  imageCacheTag: doc.updatedAt,
232
310
  showCrop: showCrop,
233
311
  showFocalPoint: showFocalPoint
@@ -245,4 +323,4 @@ const Upload = (props)=>{
245
323
  })));
246
324
  };
247
325
 
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL2NvbGxlY3Rpb25zL0VkaXQvVXBsb2FkL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcblxuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4vdHlwZXMnXG5cbmltcG9ydCBpc0ltYWdlIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3VwbG9hZHMvaXNJbWFnZSdcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vLi4vLi4vLi4vZWxlbWVudHMvQnV0dG9uJ1xuaW1wb3J0IHsgRHJhd2VyLCBEcmF3ZXJUb2dnbGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vZWxlbWVudHMvRHJhd2VyJ1xuaW1wb3J0IHsgRHJvcHpvbmUgfSBmcm9tICcuLi8uLi8uLi8uLi9lbGVtZW50cy9Ecm9wem9uZSdcbmltcG9ydCB7IEVkaXRVcGxvYWQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbGVtZW50cy9FZGl0VXBsb2FkJ1xuaW1wb3J0IEZpbGVEZXRhaWxzIGZyb20gJy4uLy4uLy4uLy4uL2VsZW1lbnRzL0ZpbGVEZXRhaWxzJ1xuaW1wb3J0IFByZXZpZXdTaXplcyBmcm9tICcuLi8uLi8uLi8uLi9lbGVtZW50cy9QcmV2aWV3U2l6ZXMnXG5pbXBvcnQgVGh1bWJuYWlsIGZyb20gJy4uLy4uLy4uLy4uL2VsZW1lbnRzL1RodW1ibmFpbCdcbmltcG9ydCBFcnJvciBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9FcnJvcidcbmltcG9ydCByZWR1Y2VGaWVsZHNUb1ZhbHVlcyBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9Gb3JtL3JlZHVjZUZpZWxkc1RvVmFsdWVzJ1xuaW1wb3J0IHsgZmllbGRCYXNlQ2xhc3MgfSBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9maWVsZC10eXBlcy9zaGFyZWQnXG5pbXBvcnQgdXNlRmllbGQgZnJvbSAnLi4vLi4vLi4vLi4vZm9ybXMvdXNlRmllbGQnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXRpZXMvRG9jdW1lbnRJbmZvJ1xuaW1wb3J0ICcuL2luZGV4LnNjc3MnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdmaWxlLWZpZWxkJ1xuZXhwb3J0IGNvbnN0IGVkaXREcmF3ZXJTbHVnID0gJ2VkaXQtdXBsb2FkJ1xuZXhwb3J0IGNvbnN0IHNpemVQcmV2aWV3U2x1ZyA9ICdwcmV2aWV3LXNpemVzJ1xuXG5jb25zdCB2YWxpZGF0ZSA9ICh2YWx1ZSkgPT4ge1xuICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ0EgZmlsZSBpcyByZXF1aXJlZC4nXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQgY29uc3QgVXBsb2FkQWN0aW9ucyA9ICh7IGNhbkVkaXQsIHNob3dTaXplUHJldmlld3MgfSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCd1cGxvYWQnKVxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWxlLW11dGF0aW9uYH0+XG4gICAgICB7c2hvd1NpemVQcmV2aWV3cyAmJiAoXG4gICAgICAgIDxEcmF3ZXJUb2dnbGVyIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcHJldmlld1NpemVzYH0gc2x1Zz17c2l6ZVByZXZpZXdTbHVnfT5cbiAgICAgICAgICB7dCgndXBsb2FkOnByZXZpZXdTaXplcycpfVxuICAgICAgICA8L0RyYXdlclRvZ2dsZXI+XG4gICAgICApfVxuICAgICAge2NhbkVkaXQgJiYgKFxuICAgICAgICA8RHJhd2VyVG9nZ2xlciBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2VkaXRgfSBzbHVnPXtlZGl0RHJhd2VyU2x1Z30+XG4gICAgICAgICAge3QoJ3VwbG9hZDplZGl0SW1hZ2UnKX1cbiAgICAgICAgPC9EcmF3ZXJUb2dnbGVyPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgVXBsb2FkOiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBjb2xsZWN0aW9uLCBpbnRlcm5hbFN0YXRlLCBvbkNoYW5nZSwgdXBkYXRlZEF0IH0gPSBwcm9wc1xuICBjb25zdCBbcmVwbGFjaW5nRmlsZSwgc2V0UmVwbGFjaW5nRmlsZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2ZpbGVTcmMsIHNldEZpbGVTcmNdID0gdXNlU3RhdGU8bnVsbCB8IHN0cmluZz4obnVsbClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbJ3VwbG9hZCcsICdnZW5lcmFsJ10pXG4gIGNvbnN0IFtkb2MsIHNldERvY10gPSB1c2VTdGF0ZShyZWR1Y2VGaWVsZHNUb1ZhbHVlcyhpbnRlcm5hbFN0YXRlIHx8IHt9LCB0cnVlKSlcbiAgY29uc3QgeyBkb2NQZXJtaXNzaW9ucyB9ID0gdXNlRG9jdW1lbnRJbmZvKClcbiAgY29uc3QgeyBlcnJvck1lc3NhZ2UsIHNldFZhbHVlLCBzaG93RXJyb3IsIHZhbHVlIH0gPSB1c2VGaWVsZDxGaWxlPih7XG4gICAgcGF0aDogJ2ZpbGUnLFxuICAgIHZhbGlkYXRlLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVOYW1lQ2hhbmdlID0gKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgdXBkYXRlZEZpbGVOYW1lID0gZS50YXJnZXQudmFsdWVcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbGVWYWx1ZSA9IHZhbHVlXG4gICAgICAvLyBDcmVhdGluZyBhIG5ldyBGaWxlIG9iamVjdCB3aXRoIHVwZGF0ZWQgcHJvcGVydGllc1xuICAgICAgY29uc3QgbmV3RmlsZSA9IG5ldyBGaWxlKFtmaWxlVmFsdWVdLCB1cGRhdGVkRmlsZU5hbWUsIHsgdHlwZTogZmlsZVZhbHVlLnR5cGUgfSlcbiAgICAgIHNldFZhbHVlKG5ld0ZpbGUpIC8vIFVwZGF0aW5nIHRoZSBzdGF0ZSB3aXRoIHRoZSBuZXcgRmlsZSBvYmplY3RcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVGaWxlU2VsZWN0aW9uID0gUmVhY3QudXNlQ2FsbGJhY2soXG4gICAgKGZpbGVzOiBGaWxlTGlzdCkgPT4ge1xuICAgICAgY29uc3QgZmlsZVRvVXBsb2FkID0gZmlsZXM/LlswXVxuICAgICAgc2V0VmFsdWUoZmlsZVRvVXBsb2FkKVxuICAgIH0sXG4gICAgW3NldFZhbHVlXSxcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVSZW1vdmFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFJlcGxhY2luZ0ZpbGUodHJ1ZSlcbiAgICBzZXRWYWx1ZShudWxsKVxuICAgIHNldEZpbGVTcmMoJycpXG4gIH0sIFtzZXRWYWx1ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXREb2MocmVkdWNlRmllbGRzVG9WYWx1ZXMoaW50ZXJuYWxTdGF0ZSB8fCB7fSwgdHJ1ZSkpXG4gICAgc2V0UmVwbGFjaW5nRmlsZShmYWxzZSlcbiAgfSwgW2ludGVybmFsU3RhdGVdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gKGUpID0+IHtcbiAgICAgICAgY29uc3QgaW1nU3JjID0gZS50YXJnZXQ/LnJlc3VsdFxuXG4gICAgICAgIGlmICh0eXBlb2YgaW1nU3JjID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHNldEZpbGVTcmMoaW1nU3JjKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwodmFsdWUpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvbkNoYW5nZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb25DaGFuZ2UodmFsdWUpXG4gICAgfVxuICB9LCBbdmFsdWUsIG9uQ2hhbmdlLCB1cGRhdGVkQXRdKVxuXG4gIGNvbnN0IGNhblJlbW92ZVVwbG9hZCA9XG4gICAgZG9jUGVybWlzc2lvbnM/LnVwZGF0ZT8ucGVybWlzc2lvbiAmJlxuICAgICdkZWxldGUnIGluIGRvY1Blcm1pc3Npb25zICYmXG4gICAgZG9jUGVybWlzc2lvbnM/LmRlbGV0ZT8ucGVybWlzc2lvblxuXG4gIGNvbnN0IGhhc0ltYWdlU2l6ZXMgPSBjb2xsZWN0aW9uPy51cGxvYWQ/LmltYWdlU2l6ZXM/Lmxlbmd0aCA+IDBcbiAgY29uc3QgaGFzUmVzaXplT3B0aW9ucyA9IEJvb2xlYW4oY29sbGVjdGlvbj8udXBsb2FkPy5yZXNpemVPcHRpb25zKVxuICAvLyBFeHBsaWNpdGx5IGNoZWNrIGlmIHNldCB0byB0cnVlLCBkZWZhdWx0IGlzIHVuZGVmaW5lZFxuICBjb25zdCBmb2NhbFBvaW50RW5hYmxlZCA9IGNvbGxlY3Rpb24/LnVwbG9hZD8uZm9jYWxQb2ludCA9PT0gdHJ1ZVxuXG4gIGNvbnN0IHsgY29sbGVjdGlvbjogeyB1cGxvYWQ6IHsgY3JvcDogc2hvd0Nyb3AgPSB0cnVlLCBmb2NhbFBvaW50ID0gdHJ1ZSB9IH0gPSB7fSB9ID0gcHJvcHNcblxuICBjb25zdCBzaG93Rm9jYWxQb2ludCA9IGZvY2FsUG9pbnQgJiYgKGhhc0ltYWdlU2l6ZXMgfHwgaGFzUmVzaXplT3B0aW9ucyB8fCBmb2NhbFBvaW50RW5hYmxlZClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtbZmllbGRCYXNlQ2xhc3MsIGJhc2VDbGFzc10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX0+XG4gICAgICA8RXJyb3IgbWVzc2FnZT17ZXJyb3JNZXNzYWdlfSBzaG93RXJyb3I9e3Nob3dFcnJvcn0gLz5cblxuICAgICAge2RvYy5maWxlbmFtZSAmJiAhcmVwbGFjaW5nRmlsZSAmJiAoXG4gICAgICAgIDxGaWxlRGV0YWlsc1xuICAgICAgICAgIGNhbkVkaXQ9e3Nob3dDcm9wIHx8IHNob3dGb2NhbFBvaW50fVxuICAgICAgICAgIGNvbGxlY3Rpb249e2NvbGxlY3Rpb259XG4gICAgICAgICAgZG9jPXtkb2N9XG4gICAgICAgICAgaGFuZGxlUmVtb3ZlPXtjYW5SZW1vdmVVcGxvYWQgPyBoYW5kbGVGaWxlUmVtb3ZhbCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBoYXNJbWFnZVNpemVzPXtoYXNJbWFnZVNpemVzfVxuICAgICAgICAgIGltYWdlQ2FjaGVUYWc9e2RvYy51cGRhdGVkQXR9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7KCFkb2MuZmlsZW5hbWUgfHwgcmVwbGFjaW5nRmlsZSkgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdXBsb2FkYH0+XG4gICAgICAgICAgeyF2YWx1ZSAmJiAoXG4gICAgICAgICAgICA8RHJvcHpvbmVcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kcm9wem9uZWB9XG4gICAgICAgICAgICAgIG1pbWVUeXBlcz17Y29sbGVjdGlvbj8udXBsb2FkPy5taW1lVHlwZXN9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlU2VsZWN0aW9ufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge3ZhbHVlICYmIChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RodW1ibmFpbC13cmFwYH0+XG4gICAgICAgICAgICAgICAgPFRodW1ibmFpbCBmaWxlU3JjPXtpc0ltYWdlKHZhbHVlLnR5cGUpID8gZmlsZVNyYyA6IG51bGx9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZmlsZS1hZGp1c3RtZW50c2B9PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWxlbmFtZWB9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZU5hbWVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWUubmFtZX1cbiAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAge2lzSW1hZ2UodmFsdWUudHlwZSkgJiYgdmFsdWUudHlwZSAhPT0gJ2ltYWdlL3N2Zyt4bWwnICYmIChcbiAgICAgICAgICAgICAgICAgIDxVcGxvYWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNhbkVkaXQ9e3Nob3dDcm9wIHx8IHNob3dGb2NhbFBvaW50fVxuICAgICAgICAgICAgICAgICAgICBzaG93U2l6ZVByZXZpZXdzPXtoYXNJbWFnZVNpemVzICYmIGRvYy5maWxlbmFtZSAmJiAhcmVwbGFjaW5nRmlsZX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cImljb24tbGFiZWxcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcmVtb3ZlYH1cbiAgICAgICAgICAgICAgICBpY29uPVwieFwiXG4gICAgICAgICAgICAgICAgaWNvblN0eWxlPVwid2l0aC1ib3JkZXJcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUZpbGVSZW1vdmFsfVxuICAgICAgICAgICAgICAgIHJvdW5kXG4gICAgICAgICAgICAgICAgdG9vbHRpcD17dCgnZ2VuZXJhbDpjYW5jZWwnKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7KHZhbHVlIHx8IGRvYy5maWxlbmFtZSkgJiYgKFxuICAgICAgICA8RHJhd2VyIGhlYWRlcj17bnVsbH0gc2x1Zz17ZWRpdERyYXdlclNsdWd9PlxuICAgICAgICAgIDxFZGl0VXBsb2FkXG4gICAgICAgICAgICBkb2M9e2RvYyB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICBmaWxlTmFtZT17dmFsdWU/Lm5hbWUgfHwgZG9jPy5maWxlbmFtZX1cbiAgICAgICAgICAgIGZpbGVTcmM9e2ZpbGVTcmMgfHwgZG9jPy51cmx9XG4gICAgICAgICAgICBpbWFnZUNhY2hlVGFnPXtkb2MudXBkYXRlZEF0fVxuICAgICAgICAgICAgc2hvd0Nyb3A9e3Nob3dDcm9wfVxuICAgICAgICAgICAgc2hvd0ZvY2FsUG9pbnQ9e3Nob3dGb2NhbFBvaW50fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvRHJhd2VyPlxuICAgICAgKX1cbiAgICAgIHtkb2MgJiYgaGFzSW1hZ2VTaXplcyAmJiAoXG4gICAgICAgIDxEcmF3ZXJcbiAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3ByZXZpZXdEcmF3ZXJgfVxuICAgICAgICAgIGhvdmVyVGl0bGVcbiAgICAgICAgICBzbHVnPXtzaXplUHJldmlld1NsdWd9XG4gICAgICAgICAgdGl0bGU9e3QoJ3VwbG9hZDpzaXplc0ZvcicsIHsgbGFiZWw6IGRvYz8uZmlsZW5hbWUgfSl9XG4gICAgICAgID5cbiAgICAgICAgICA8UHJldmlld1NpemVzIGNvbGxlY3Rpb249e2NvbGxlY3Rpb259IGRvYz17ZG9jfSBpbWFnZUNhY2hlVGFnPXtkb2MudXBkYXRlZEF0fSAvPlxuICAgICAgICA8L0RyYXdlcj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cbiJdLCJuYW1lcyI6WyJVcGxvYWQiLCJVcGxvYWRBY3Rpb25zIiwiZWRpdERyYXdlclNsdWciLCJzaXplUHJldmlld1NsdWciLCJiYXNlQ2xhc3MiLCJ2YWxpZGF0ZSIsInZhbHVlIiwidW5kZWZpbmVkIiwiY2FuRWRpdCIsInNob3dTaXplUHJldmlld3MiLCJ0IiwidXNlVHJhbnNsYXRpb24iLCJkaXYiLCJjbGFzc05hbWUiLCJEcmF3ZXJUb2dnbGVyIiwic2x1ZyIsInByb3BzIiwiY29sbGVjdGlvbiIsImludGVybmFsU3RhdGUiLCJvbkNoYW5nZSIsInVwZGF0ZWRBdCIsInJlcGxhY2luZ0ZpbGUiLCJzZXRSZXBsYWNpbmdGaWxlIiwidXNlU3RhdGUiLCJmaWxlU3JjIiwic2V0RmlsZVNyYyIsImRvYyIsInNldERvYyIsInJlZHVjZUZpZWxkc1RvVmFsdWVzIiwiZG9jUGVybWlzc2lvbnMiLCJ1c2VEb2N1bWVudEluZm8iLCJlcnJvck1lc3NhZ2UiLCJzZXRWYWx1ZSIsInNob3dFcnJvciIsInVzZUZpZWxkIiwicGF0aCIsImhhbmRsZUZpbGVOYW1lQ2hhbmdlIiwiZSIsInVwZGF0ZWRGaWxlTmFtZSIsInRhcmdldCIsImZpbGVWYWx1ZSIsIm5ld0ZpbGUiLCJGaWxlIiwidHlwZSIsImhhbmRsZUZpbGVTZWxlY3Rpb24iLCJSZWFjdCIsInVzZUNhbGxiYWNrIiwiZmlsZXMiLCJmaWxlVG9VcGxvYWQiLCJoYW5kbGVGaWxlUmVtb3ZhbCIsInVzZUVmZmVjdCIsImZpbGVSZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiaW1nU3JjIiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsImNhblJlbW92ZVVwbG9hZCIsInVwZGF0ZSIsInBlcm1pc3Npb24iLCJkZWxldGUiLCJoYXNJbWFnZVNpemVzIiwidXBsb2FkIiwiaW1hZ2VTaXplcyIsImxlbmd0aCIsImhhc1Jlc2l6ZU9wdGlvbnMiLCJCb29sZWFuIiwicmVzaXplT3B0aW9ucyIsImZvY2FsUG9pbnRFbmFibGVkIiwiZm9jYWxQb2ludCIsImNyb3AiLCJzaG93Q3JvcCIsInNob3dGb2NhbFBvaW50IiwiZmllbGRCYXNlQ2xhc3MiLCJmaWx0ZXIiLCJqb2luIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmlsZW5hbWUiLCJGaWxlRGV0YWlscyIsImhhbmRsZVJlbW92ZSIsImltYWdlQ2FjaGVUYWciLCJEcm9wem9uZSIsIm1pbWVUeXBlcyIsIkZyYWdtZW50IiwiVGh1bWJuYWlsIiwiaXNJbWFnZSIsImlucHV0IiwibmFtZSIsIkJ1dHRvbiIsImJ1dHRvblN0eWxlIiwiaWNvbiIsImljb25TdHlsZSIsIm9uQ2xpY2siLCJyb3VuZCIsInRvb2x0aXAiLCJEcmF3ZXIiLCJoZWFkZXIiLCJFZGl0VXBsb2FkIiwiZmlsZU5hbWUiLCJ1cmwiLCJob3ZlclRpdGxlIiwidGl0bGUiLCJsYWJlbCIsIlByZXZpZXdTaXplcyJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFrRGFBLE1BQU07ZUFBTkE7O0lBbEJBQyxhQUFhO2VBQWJBOztJQVhBQyxjQUFjO2VBQWRBOztJQUNBQyxlQUFlO2VBQWZBOzs7K0RBdEIyQzs4QkFDekI7Z0VBSVg7K0RBQ0Q7d0JBQ21COzBCQUNiOzRCQUNFO29FQUNIO3FFQUNDO2tFQUNIOzhEQUNKOzZFQUNlO3dCQUNGO2lFQUNWOzhCQUNXO1FBQ3pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVQLE1BQU1D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
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL2NvbGxlY3Rpb25zL0VkaXQvVXBsb2FkL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdyZWFjdC10b2FzdGlmeSdcblxuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4vdHlwZXMnXG5cbmltcG9ydCBpc0ltYWdlIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3VwbG9hZHMvaXNJbWFnZSdcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vLi4vLi4vLi4vZWxlbWVudHMvQnV0dG9uJ1xuaW1wb3J0IHsgRHJhd2VyLCBEcmF3ZXJUb2dnbGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vZWxlbWVudHMvRHJhd2VyJ1xuaW1wb3J0IHsgRHJvcHpvbmUgfSBmcm9tICcuLi8uLi8uLi8uLi9lbGVtZW50cy9Ecm9wem9uZSdcbmltcG9ydCB7IEVkaXRVcGxvYWQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbGVtZW50cy9FZGl0VXBsb2FkJ1xuaW1wb3J0IEZpbGVEZXRhaWxzIGZyb20gJy4uLy4uLy4uLy4uL2VsZW1lbnRzL0ZpbGVEZXRhaWxzJ1xuaW1wb3J0IFByZXZpZXdTaXplcyBmcm9tICcuLi8uLi8uLi8uLi9lbGVtZW50cy9QcmV2aWV3U2l6ZXMnXG5pbXBvcnQgVGh1bWJuYWlsIGZyb20gJy4uLy4uLy4uLy4uL2VsZW1lbnRzL1RodW1ibmFpbCdcbmltcG9ydCBFcnJvciBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9FcnJvcidcbmltcG9ydCByZWR1Y2VGaWVsZHNUb1ZhbHVlcyBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9Gb3JtL3JlZHVjZUZpZWxkc1RvVmFsdWVzJ1xuaW1wb3J0IHsgZmllbGRCYXNlQ2xhc3MgfSBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9maWVsZC10eXBlcy9zaGFyZWQnXG5pbXBvcnQgdXNlRmllbGQgZnJvbSAnLi4vLi4vLi4vLi4vZm9ybXMvdXNlRmllbGQnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEluZm8gfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXRpZXMvRG9jdW1lbnRJbmZvJ1xuaW1wb3J0IHsgdXNlVXBsb2FkRWRpdHMgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsaXRpZXMvVXBsb2FkRWRpdHMnXG5pbXBvcnQgJy4vaW5kZXguc2NzcydcblxuY29uc3QgYmFzZUNsYXNzID0gJ2ZpbGUtZmllbGQnXG5leHBvcnQgY29uc3QgZWRpdERyYXdlclNsdWcgPSAnZWRpdC11cGxvYWQnXG5leHBvcnQgY29uc3Qgc2l6ZVByZXZpZXdTbHVnID0gJ3ByZXZpZXctc2l6ZXMnXG5cbmNvbnN0IHZhbGlkYXRlID0gKHZhbHVlKSA9PiB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnQSBmaWxlIGlzIHJlcXVpcmVkLidcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCBVcGxvYWRBY3Rpb25zID0gKHsgY2FuRWRpdCwgc2hvd1NpemVQcmV2aWV3cyB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ3VwbG9hZCcpXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ZpbGUtbXV0YXRpb25gfT5cbiAgICAgIHtzaG93U2l6ZVByZXZpZXdzICYmIChcbiAgICAgICAgPERyYXdlclRvZ2dsZXIgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19wcmV2aWV3U2l6ZXNgfSBzbHVnPXtzaXplUHJldmlld1NsdWd9PlxuICAgICAgICAgIHt0KCd1cGxvYWQ6cHJldmlld1NpemVzJyl9XG4gICAgICAgIDwvRHJhd2VyVG9nZ2xlcj5cbiAgICAgICl9XG4gICAgICB7Y2FuRWRpdCAmJiAoXG4gICAgICAgIDxEcmF3ZXJUb2dnbGVyIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZWRpdGB9IHNsdWc9e2VkaXREcmF3ZXJTbHVnfT5cbiAgICAgICAgICB7dCgndXBsb2FkOmVkaXRJbWFnZScpfVxuICAgICAgICA8L0RyYXdlclRvZ2dsZXI+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBVcGxvYWQ6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNvbGxlY3Rpb24sIGludGVybmFsU3RhdGUsIG9uQ2hhbmdlIH0gPSBwcm9wc1xuICBjb25zdCBbcmVwbGFjaW5nRmlsZSwgc2V0UmVwbGFjaW5nRmlsZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2ZpbGVTcmMsIHNldEZpbGVTcmNdID0gdXNlU3RhdGU8bnVsbCB8IHN0cmluZz4obnVsbClcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbJ3VwbG9hZCcsICdnZW5lcmFsJ10pXG4gIGNvbnN0IHsgcmVzZXRVcGxvYWRFZGl0cyB9ID0gdXNlVXBsb2FkRWRpdHMoKVxuICBjb25zdCBbZG9jLCBzZXREb2NdID0gdXNlU3RhdGUocmVkdWNlRmllbGRzVG9WYWx1ZXMoaW50ZXJuYWxTdGF0ZSB8fCB7fSwgdHJ1ZSkpXG4gIGNvbnN0IHsgZG9jUGVybWlzc2lvbnMgfSA9IHVzZURvY3VtZW50SW5mbygpXG4gIGNvbnN0IHsgZXJyb3JNZXNzYWdlLCBzZXRWYWx1ZSwgc2hvd0Vycm9yLCB2YWx1ZSB9ID0gdXNlRmllbGQ8RmlsZT4oe1xuICAgIHBhdGg6ICdmaWxlJyxcbiAgICB2YWxpZGF0ZSxcbiAgfSlcblxuICBjb25zdCBbc2hvd1VybElucHV0LCBzZXRTaG93VXJsSW5wdXRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtmaWxlVXJsLCBzZXRGaWxlVXJsXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpXG5cbiAgY29uc3QgY3Vyc29yUG9zaXRpb25SZWYgPSB1c2VSZWYobnVsbClcbiAgY29uc3QgdXJsSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG5ld0ZpbGU6IEZpbGUpID0+IHtcbiAgICAgIGlmIChuZXdGaWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW1nU3JjID0gZS50YXJnZXQ/LnJlc3VsdFxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBpbWdTcmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzZXRGaWxlU3JjKGltZ1NyYylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMKG5ld0ZpbGUpXG4gICAgICB9XG5cbiAgICAgIHNldFZhbHVlKG5ld0ZpbGUpXG4gICAgICBzZXRTaG93VXJsSW5wdXQoZmFsc2UpXG5cbiAgICAgIGlmICh0eXBlb2Ygb25DaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25DaGFuZ2UobmV3RmlsZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgc2V0VmFsdWVdLFxuICApXG5cbiAgY29uc3QgaGFuZGxlRmlsZU5hbWVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB1cGRhdGVkRmlsZU5hbWUgPSBlLnRhcmdldC52YWx1ZVxuICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gZS50YXJnZXQuc2VsZWN0aW9uU3RhcnRcblxuICAgIGN1cnNvclBvc2l0aW9uUmVmLmN1cnJlbnQgPSBjdXJzb3JQb3NpdGlvblxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaWxlVmFsdWUgPSB2YWx1ZVxuICAgICAgLy8gQ3JlYXRpbmcgYSBuZXcgRmlsZSBvYmplY3Qgd2l0aCB1cGRhdGVkIHByb3BlcnRpZXNcbiAgICAgIGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbZmlsZVZhbHVlXSwgdXBkYXRlZEZpbGVOYW1lLCB7IHR5cGU6IGZpbGVWYWx1ZS50eXBlIH0pXG4gICAgICBoYW5kbGVGaWxlQ2hhbmdlKG5ld0ZpbGUpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LXR5cGUtYXNzZXJ0aW9uXG4gICAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7YmFzZUNsYXNzfV9fZmlsZW5hbWVgKSBhcyBIVE1MSW5wdXRFbGVtZW50XG4gICAgaWYgKGlucHV0RWxlbWVudCAmJiBjdXJzb3JQb3NpdGlvblJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBpbnB1dEVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoY3Vyc29yUG9zaXRpb25SZWYuY3VycmVudCwgY3Vyc29yUG9zaXRpb25SZWYuY3VycmVudClcbiAgICB9XG4gIH0sIFt2YWx1ZV0pXG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKFxuICAgIChmaWxlczogRmlsZUxpc3QpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVUb1VwbG9hZCA9IGZpbGVzPy5bMF1cbiAgICAgIGhhbmRsZUZpbGVDaGFuZ2UoZmlsZVRvVXBsb2FkKVxuICAgIH0sXG4gICAgW2hhbmRsZUZpbGVDaGFuZ2VdLFxuICApXG5cbiAgY29uc3QgaGFuZGxlRmlsZVJlbW92YWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UmVwbGFjaW5nRmlsZSh0cnVlKVxuICAgIGhhbmRsZUZpbGVDaGFuZ2UobnVsbClcbiAgICBzZXRGaWxlU3JjKCcnKVxuICAgIHNldEZpbGVVcmwoJycpXG4gICAgc2V0RG9jKHt9KVxuICAgIHJlc2V0VXBsb2FkRWRpdHMoKVxuICAgIHNldFNob3dVcmxJbnB1dChmYWxzZSlcbiAgfSwgW2hhbmRsZUZpbGVDaGFuZ2UsIHJlc2V0VXBsb2FkRWRpdHNdKVxuXG4gIGNvbnN0IGhhbmRsZVBhc3RlVXJsQ2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1VybElucHV0KChwcmV2KSA9PiAhcHJldilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVVybFN1Ym1pdCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoZmlsZVVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmaWxlVXJsKVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpXG5cbiAgICAgICAgLy8gRXh0cmFjdCB0aGUgZmlsZSBuYW1lIGZyb20gdGhlIFVSTFxuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGZpbGVVcmwuc3BsaXQoJy8nKS5wb3AoKVxuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBGaWxlIG9iamVjdCBmcm9tIHRoZSBCbG9iIGRhdGFcbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtkYXRhXSwgZmlsZU5hbWUsIHsgdHlwZTogZGF0YS50eXBlIH0pXG4gICAgICAgIGhhbmRsZUZpbGVDaGFuZ2UoZmlsZSlcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdG9hc3QuZXJyb3IoZS5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0RG9jKHJlZHVjZUZpZWxkc1RvVmFsdWVzKGludGVybmFsU3RhdGUgfHwge30sIHRydWUpKVxuICAgIHNldFJlcGxhY2luZ0ZpbGUoZmFsc2UpXG4gIH0sIFtpbnRlcm5hbFN0YXRlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG93VXJsSW5wdXQgJiYgdXJsSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgdXJsSW5wdXRSZWYuY3VycmVudC5mb2N1cygpIC8vIEZvY3VzIG9uIHRoZSByZW1vdGUtdXJsIGlucHV0IGZpZWxkIHdoZW4gc2hvd1VybElucHV0IGlzIHRydWVcbiAgICB9XG4gIH0sIFtzaG93VXJsSW5wdXRdKVxuXG4gIGNvbnN0IGNhblJlbW92ZVVwbG9hZCA9XG4gICAgZG9jUGVybWlzc2lvbnM/LnVwZGF0ZT8ucGVybWlzc2lvbiAmJlxuICAgICdkZWxldGUnIGluIGRvY1Blcm1pc3Npb25zICYmXG4gICAgZG9jUGVybWlzc2lvbnM/LmRlbGV0ZT8ucGVybWlzc2lvblxuXG4gIGNvbnN0IGhhc0ltYWdlU2l6ZXMgPSBjb2xsZWN0aW9uPy51cGxvYWQ/LmltYWdlU2l6ZXM/Lmxlbmd0aCA+IDBcbiAgY29uc3QgaGFzUmVzaXplT3B0aW9ucyA9IEJvb2xlYW4oY29sbGVjdGlvbj8udXBsb2FkPy5yZXNpemVPcHRpb25zKVxuICAvLyBFeHBsaWNpdGx5IGNoZWNrIGlmIHNldCB0byB0cnVlLCBkZWZhdWx0IGlzIHVuZGVmaW5lZFxuICBjb25zdCBmb2NhbFBvaW50RW5hYmxlZCA9IGNvbGxlY3Rpb24/LnVwbG9hZD8uZm9jYWxQb2ludCA9PT0gdHJ1ZVxuXG4gIGNvbnN0IHsgY29sbGVjdGlvbjogeyB1cGxvYWQ6IHsgY3JvcDogc2hvd0Nyb3AgPSB0cnVlLCBmb2NhbFBvaW50ID0gdHJ1ZSB9IH0gPSB7fSB9ID0gcHJvcHNcblxuICBjb25zdCBzaG93Rm9jYWxQb2ludCA9IGZvY2FsUG9pbnQgJiYgKGhhc0ltYWdlU2l6ZXMgfHwgaGFzUmVzaXplT3B0aW9ucyB8fCBmb2NhbFBvaW50RW5hYmxlZClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtbZmllbGRCYXNlQ2xhc3MsIGJhc2VDbGFzc10uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKX0+XG4gICAgICA8RXJyb3IgbWVzc2FnZT17ZXJyb3JNZXNzYWdlfSBzaG93RXJyb3I9e3Nob3dFcnJvcn0gLz5cblxuICAgICAge2RvYy5maWxlbmFtZSAmJiAhcmVwbGFjaW5nRmlsZSAmJiAoXG4gICAgICAgIDxGaWxlRGV0YWlsc1xuICAgICAgICAgIGNhbkVkaXQ9e3Nob3dDcm9wIHx8IHNob3dGb2NhbFBvaW50fVxuICAgICAgICAgIGNvbGxlY3Rpb249e2NvbGxlY3Rpb259XG4gICAgICAgICAgZG9jPXtkb2N9XG4gICAgICAgICAgaGFuZGxlUmVtb3ZlPXtjYW5SZW1vdmVVcGxvYWQgPyBoYW5kbGVGaWxlUmVtb3ZhbCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBoYXNJbWFnZVNpemVzPXtoYXNJbWFnZVNpemVzfVxuICAgICAgICAgIGltYWdlQ2FjaGVUYWc9e2RvYy51cGRhdGVkQXR9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgeyghZG9jLmZpbGVuYW1lIHx8IHJlcGxhY2luZ0ZpbGUpICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3VwbG9hZGB9PlxuICAgICAgICAgIHshdmFsdWUgJiYgIXNob3dVcmxJbnB1dCAmJiAoXG4gICAgICAgICAgICA8RHJvcHpvbmVcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kcm9wem9uZWB9XG4gICAgICAgICAgICAgIG1pbWVUeXBlcz17Y29sbGVjdGlvbj8udXBsb2FkPy5taW1lVHlwZXN9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlU2VsZWN0aW9ufVxuICAgICAgICAgICAgICBvblBhc3RlVXJsQ2xpY2s9e2hhbmRsZVBhc3RlVXJsQ2xpY2t9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge3Nob3dVcmxJbnB1dCAmJiAoXG4gICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19yZW1vdGUtZmlsZS13cmFwYH0+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3JlbW90ZS1maWxlYH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRGaWxlVXJsKGUudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHJlZj17dXJsSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17ZmlsZVVybH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19hZGQtZmlsZS13cmFwYH0+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fYWRkLWZpbGVgfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVVcmxTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7dCgndXBsb2FkOmFkZEltYWdlJyl9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cImljb24tbGFiZWxcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcmVtb3ZlYH1cbiAgICAgICAgICAgICAgICBpY29uPVwieFwiXG4gICAgICAgICAgICAgICAgaWNvblN0eWxlPVwid2l0aC1ib3JkZXJcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUZpbGVSZW1vdmFsfVxuICAgICAgICAgICAgICAgIHJvdW5kXG4gICAgICAgICAgICAgICAgdG9vbHRpcD17dCgnZ2VuZXJhbDpjYW5jZWwnKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7dmFsdWUgJiYgKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdGh1bWJuYWlsLXdyYXBgfT5cbiAgICAgICAgICAgICAgICA8VGh1bWJuYWlsIGZpbGVTcmM9e2lzSW1hZ2UodmFsdWUudHlwZSkgPyBmaWxlU3JjIDogbnVsbH0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWxlLWFkanVzdG1lbnRzYH0+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX2ZpbGVuYW1lYH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlTmFtZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZS5uYW1lfVxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICB7aXNJbWFnZSh2YWx1ZS50eXBlKSAmJiB2YWx1ZS50eXBlICE9PSAnaW1hZ2Uvc3ZnK3htbCcgJiYgKFxuICAgICAgICAgICAgICAgICAgPFVwbG9hZEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgY2FuRWRpdD17c2hvd0Nyb3AgfHwgc2hvd0ZvY2FsUG9pbnR9XG4gICAgICAgICAgICAgICAgICAgIHNob3dTaXplUHJldmlld3M9e2hhc0ltYWdlU2l6ZXMgJiYgZG9jLmZpbGVuYW1lICYmICFyZXBsYWNpbmdGaWxlfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGJ1dHRvblN0eWxlPVwiaWNvbi1sYWJlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19yZW1vdmVgfVxuICAgICAgICAgICAgICAgIGljb249XCJ4XCJcbiAgICAgICAgICAgICAgICBpY29uU3R5bGU9XCJ3aXRoLWJvcmRlclwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRmlsZVJlbW92YWx9XG4gICAgICAgICAgICAgICAgcm91bmRcbiAgICAgICAgICAgICAgICB0b29sdGlwPXt0KCdnZW5lcmFsOmNhbmNlbCcpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHsodmFsdWUgfHwgZG9jLmZpbGVuYW1lKSAmJiAoXG4gICAgICAgIDxEcmF3ZXIgaGVhZGVyPXtudWxsfSBzbHVnPXtlZGl0RHJhd2VyU2x1Z30+XG4gICAgICAgICAgPEVkaXRVcGxvYWRcbiAgICAgICAgICAgIGRvYz17ZG9jIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgIGZpbGVOYW1lPXt2YWx1ZT8ubmFtZSB8fCBkb2M/LmZpbGVuYW1lfVxuICAgICAgICAgICAgZmlsZVNyYz17ZG9jPy51cmwgfHwgZmlsZVNyY31cbiAgICAgICAgICAgIGltYWdlQ2FjaGVUYWc9e2RvYy51cGRhdGVkQXR9XG4gICAgICAgICAgICBzaG93Q3JvcD17c2hvd0Nyb3B9XG4gICAgICAgICAgICBzaG93Rm9jYWxQb2ludD17c2hvd0ZvY2FsUG9pbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9EcmF3ZXI+XG4gICAgICApfVxuICAgICAge2RvYyAmJiBoYXNJbWFnZVNpemVzICYmIChcbiAgICAgICAgPERyYXdlclxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcHJldmlld0RyYXdlcmB9XG4gICAgICAgICAgaG92ZXJUaXRsZVxuICAgICAgICAgIHNsdWc9e3NpemVQcmV2aWV3U2x1Z31cbiAgICAgICAgICB0aXRsZT17dCgndXBsb2FkOnNpemVzRm9yJywgeyBsYWJlbDogZG9jPy5maWxlbmFtZSB9KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxQcmV2aWV3U2l6ZXMgY29sbGVjdGlvbj17Y29sbGVjdGlvbn0gZG9jPXtkb2N9IGltYWdlQ2FjaGVUYWc9e2RvYy51cGRhdGVkQXR9IC8+XG4gICAgICAgIDwvRHJhd2VyPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl0sIm5hbWVzIjpbIlVwbG9hZCIsIlVwbG9hZEFjdGlvbnMiLCJlZGl0RHJhd2VyU2x1ZyIsInNpemVQcmV2aWV3U2x1ZyIsImJhc2VDbGFzcyIsInZhbGlkYXRlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJjYW5FZGl0Iiwic2hvd1NpemVQcmV2aWV3cyIsInQiLCJ1c2VUcmFuc2xhdGlvbiIsImRpdiIsImNsYXNzTmFtZSIsIkRyYXdlclRvZ2dsZXIiLCJzbHVnIiwicHJvcHMiLCJjb2xsZWN0aW9uIiwiaW50ZXJuYWxTdGF0ZSIsIm9uQ2hhbmdlIiwicmVwbGFjaW5nRmlsZSIsInNldFJlcGxhY2luZ0ZpbGUiLCJ1c2VTdGF0ZSIsImZpbGVTcmMiLCJzZXRGaWxlU3JjIiwicmVzZXRVcGxvYWRFZGl0cyIsInVzZVVwbG9hZEVkaXRzIiwiZG9jIiwic2V0RG9jIiwicmVkdWNlRmllbGRzVG9WYWx1ZXMiLCJkb2NQZXJtaXNzaW9ucyIsInVzZURvY3VtZW50SW5mbyIsImVycm9yTWVzc2FnZSIsInNldFZhbHVlIiwic2hvd0Vycm9yIiwidXNlRmllbGQiLCJwYXRoIiwic2hvd1VybElucHV0Iiwic2V0U2hvd1VybElucHV0IiwiZmlsZVVybCIsInNldEZpbGVVcmwiLCJjdXJzb3JQb3NpdGlvblJlZiIsInVzZVJlZiIsInVybElucHV0UmVmIiwiaGFuZGxlRmlsZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwibmV3RmlsZSIsIkZpbGUiLCJmaWxlUmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImUiLCJpbWdTcmMiLCJ0YXJnZXQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwiaGFuZGxlRmlsZU5hbWVDaGFuZ2UiLCJ1cGRhdGVkRmlsZU5hbWUiLCJjdXJzb3JQb3NpdGlvbiIsInNlbGVjdGlvblN0YXJ0IiwiY3VycmVudCIsImZpbGVWYWx1ZSIsInR5cGUiLCJ1c2VFZmZlY3QiLCJpbnB1dEVsZW1lbnQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImhhbmRsZUZpbGVTZWxlY3Rpb24iLCJSZWFjdCIsImZpbGVzIiwiZmlsZVRvVXBsb2FkIiwiaGFuZGxlRmlsZVJlbW92YWwiLCJoYW5kbGVQYXN0ZVVybENsaWNrIiwicHJldiIsImhhbmRsZVVybFN1Ym1pdCIsInJlc3BvbnNlIiwiZmV0Y2giLCJkYXRhIiwiYmxvYiIsImZpbGVOYW1lIiwic3BsaXQiLCJwb3AiLCJmaWxlIiwidG9hc3QiLCJlcnJvciIsIm1lc3NhZ2UiLCJmb2N1cyIsImNhblJlbW92ZVVwbG9hZCIsInVwZGF0ZSIsInBlcm1pc3Npb24iLCJkZWxldGUiLCJoYXNJbWFnZVNpemVzIiwidXBsb2FkIiwiaW1hZ2VTaXplcyIsImxlbmd0aCIsImhhc1Jlc2l6ZU9wdGlvbnMiLCJCb29sZWFuIiwicmVzaXplT3B0aW9ucyIsImZvY2FsUG9pbnRFbmFibGVkIiwiZm9jYWxQb2ludCIsImNyb3AiLCJzaG93Q3JvcCIsInNob3dGb2NhbFBvaW50IiwiZmllbGRCYXNlQ2xhc3MiLCJmaWx0ZXIiLCJqb2luIiwiRXJyb3IiLCJmaWxlbmFtZSIsIkZpbGVEZXRhaWxzIiwiaGFuZGxlUmVtb3ZlIiwiaW1hZ2VDYWNoZVRhZyIsInVwZGF0ZWRBdCIsIkRyb3B6b25lIiwibWltZVR5cGVzIiwib25QYXN0ZVVybENsaWNrIiwiRnJhZ21lbnQiLCJpbnB1dCIsInJlZiIsImJ1dHRvbiIsIm9uQ2xpY2siLCJCdXR0b24iLCJidXR0b25TdHlsZSIsImljb24iLCJpY29uU3R5bGUiLCJyb3VuZCIsInRvb2x0aXAiLCJUaHVtYm5haWwiLCJpc0ltYWdlIiwibmFtZSIsIkRyYXdlciIsImhlYWRlciIsIkVkaXRVcGxvYWQiLCJ1cmwiLCJob3ZlclRpdGxlIiwidGl0bGUiLCJsYWJlbCIsIlByZXZpZXdTaXplcyJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFvRGFBLE1BQU07ZUFBTkE7O0lBbEJBQyxhQUFhO2VBQWJBOztJQVhBQyxjQUFjO2VBQWRBOztJQUNBQyxlQUFlO2VBQWZBOzs7K0RBeEJtRDs4QkFDakM7K0JBQ1Q7Z0VBSUY7K0RBQ0Q7d0JBQ21COzBCQUNiOzRCQUNFO29FQUNIO3FFQUNDO2tFQUNIOzhEQUNKOzZFQUNlO3dCQUNGO2lFQUNWOzhCQUNXOzZCQUNEO1FBQ3hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -35,7 +35,8 @@
35
35
  place-self: flex-start;
36
36
  }
37
37
 
38
- &__file-adjustments {
38
+ &__file-adjustments,
39
+ &__remote-file-wrap {
39
40
  padding: $baseline;
40
41
  width: 100%;
41
42
  display: flex;
@@ -43,12 +44,14 @@
43
44
  gap: calc(var(--base) / 2);
44
45
  }
45
46
 
46
- &__filename {
47
+ &__filename,
48
+ &__remote-file {
47
49
  @include formInput;
48
50
  background-color: var(--theme-bg);
49
51
  }
50
52
 
51
- &__file-mutation {
53
+ &__file-mutation,
54
+ &__add-file-wrap {
52
55
  display: flex;
53
56
  gap: calc(var(--base) / 2);
54
57
  flex-wrap: wrap;
@@ -15,7 +15,8 @@ type Args<T> = {
15
15
  req: PayloadRequest;
16
16
  siblingData: Record<string, unknown>;
17
17
  siblingDoc: Record<string, unknown>;
18
+ siblingDocKeys: Set<string>;
18
19
  };
19
- export declare const promise: <T>({ id, collection, context, data, doc, field, global, operation, overrideAccess, req, siblingData, siblingDoc, }: Args<T>) => Promise<void>;
20
+ export declare const promise: <T>({ id, collection, context, data, doc, field, global, operation, overrideAccess, req, siblingData, siblingDoc, siblingDocKeys, }: Args<T>) => Promise<void>;
20
21
  export {};
21
22
  //# sourceMappingURL=promise.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/promise.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAQ3D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC,CAAA;AASD,eAAO,MAAM,OAAO,mIAaP,QAAQ,IAAI,CA+XxB,CAAA"}
1
+ {"version":3,"file":"promise.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/promise.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAQ3D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,EAAE,CAAC,CAAA;IACN,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC5B,CAAA;AASD,eAAO,MAAM,OAAO,mJAcP,QAAQ,IAAI,CA8YxB,CAAA"}
@@ -18,8 +18,16 @@ function _interop_require_default(obj) {
18
18
  default: obj
19
19
  };
20
20
  }
21
- const promise = async ({ id, collection, context, data, doc, field, global, operation, overrideAccess, req, siblingData, siblingDoc })=>{
21
+ const promise = async ({ id, collection, context, data, doc, field, global, operation, overrideAccess, req, siblingData, siblingDoc, siblingDocKeys })=>{
22
22
  if ((0, _types.fieldAffectsData)(field)) {
23
+ // Remove the key from siblingDocKeys
24
+ // the goal is to keep any existing data present
25
+ // before updating, for users that want to maintain
26
+ // external data in the same collections as Payload manages,
27
+ // without having fields defined for them
28
+ if (siblingDocKeys.has(field.name)) {
29
+ siblingDocKeys.delete(field.name);
30
+ }
23
31
  if (field.name === 'id') {
24
32
  if (field.type === 'number' && typeof siblingData[field.name] === 'string') {
25
33
  const value = siblingData[field.name];
@@ -286,7 +294,8 @@ const promise = async ({ id, collection, context, data, doc, field, global, oper
286
294
  overrideAccess,
287
295
  req,
288
296
  siblingData,
289
- siblingDoc
297
+ siblingDoc,
298
+ siblingDocKeys
290
299
  });
291
300
  break;
292
301
  }
@@ -294,7 +303,8 @@ const promise = async ({ id, collection, context, data, doc, field, global, oper
294
303
  {
295
304
  let tabSiblingData;
296
305
  let tabSiblingDoc;
297
- if ((0, _types.tabHasName)(field)) {
306
+ const isNamedTab = (0, _types.tabHasName)(field);
307
+ if (isNamedTab) {
298
308
  if (typeof siblingData[field.name] !== 'object') siblingData[field.name] = {};
299
309
  if (typeof siblingDoc[field.name] !== 'object') siblingDoc[field.name] = {};
300
310
  tabSiblingData = siblingData[field.name];
@@ -315,7 +325,8 @@ const promise = async ({ id, collection, context, data, doc, field, global, oper
315
325
  overrideAccess,
316
326
  req,
317
327
  siblingData: tabSiblingData,
318
- siblingDoc: tabSiblingDoc
328
+ siblingDoc: tabSiblingDoc,
329
+ siblingDocKeys: isNamedTab ? undefined : siblingDocKeys
319
330
  });
320
331
  break;
321
332
  }
@@ -336,7 +347,8 @@ const promise = async ({ id, collection, context, data, doc, field, global, oper
336
347
  overrideAccess,
337
348
  req,
338
349
  siblingData,
339
- siblingDoc
350
+ siblingDoc,
351
+ siblingDocKeys
340
352
  });
341
353
  break;
342
354
  }
@@ -347,4 +359,4 @@ const promise = async ({ id, collection, context, data, doc, field, global, oper
347
359
  }
348
360
  };
349
361
 
350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9maWVsZHMvaG9va3MvYmVmb3JlVmFsaWRhdGUvcHJvbWlzZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCwgUmVxdWVzdENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9leHByZXNzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRHbG9iYWxDb25maWcgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICcuLi8uLi9jb25maWcvdHlwZXMnXG5cbmltcG9ydCB7IGZpZWxkQWZmZWN0c0RhdGEsIHRhYkhhc05hbWUsIHZhbHVlSXNWYWx1ZVdpdGhSZWxhdGlvbiB9IGZyb20gJy4uLy4uL2NvbmZpZy90eXBlcydcbmltcG9ydCBnZXRWYWx1ZVdpdGhEZWZhdWx0IGZyb20gJy4uLy4uL2dldERlZmF1bHRWYWx1ZSdcbmltcG9ydCB7IGNsb25lRGF0YUZyb21PcmlnaW5hbERvYyB9IGZyb20gJy4uL2JlZm9yZUNoYW5nZS9jbG9uZURhdGFGcm9tT3JpZ2luYWxEb2MnXG5pbXBvcnQgeyBnZXRFeGlzdGluZ1Jvd0RvYyB9IGZyb20gJy4uL2JlZm9yZUNoYW5nZS9nZXRFeGlzdGluZ1Jvd0RvYydcbmltcG9ydCB7IHRyYXZlcnNlRmllbGRzIH0gZnJvbSAnLi90cmF2ZXJzZUZpZWxkcydcblxudHlwZSBBcmdzPFQ+ID0ge1xuICBjb2xsZWN0aW9uOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIHwgbnVsbFxuICBjb250ZXh0OiBSZXF1ZXN0Q29udGV4dFxuICBkYXRhOiBUXG4gIGRvYzogVFxuICBmaWVsZDogRmllbGQgfCBUYWJBc0ZpZWxkXG4gIGdsb2JhbDogU2FuaXRpemVkR2xvYmFsQ29uZmlnIHwgbnVsbFxuICBpZD86IG51bWJlciB8IHN0cmluZ1xuICBvcGVyYXRpb246ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgb3ZlcnJpZGVBY2Nlc3M6IGJvb2xlYW5cbiAgcmVxOiBQYXlsb2FkUmVxdWVzdFxuICBzaWJsaW5nRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgc2libGluZ0RvYzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGZvbGxvd2luZyBhY3Rpb25zLCBpbiBvcmRlcjpcbi8vIC0gU2FuaXRpemUgaW5jb21pbmcgZGF0YVxuLy8gLSBFeGVjdXRlIGZpZWxkIGhvb2tzXG4vLyAtIEV4ZWN1dGUgZmllbGQgYWNjZXNzIGNvbnRyb2xcbi8vIC0gTWVyZ2Ugb3JpZ2luYWwgZG9jdW1lbnQgZGF0YSBpbnRvIGluY29taW5nIGRhdGFcbi8vIC0gQ29tcHV0ZSBkZWZhdWx0IHZhbHVlcyBmb3IgdW5kZWZpbmVkIGZpZWxkc1xuXG5leHBvcnQgY29uc3QgcHJvbWlzZSA9IGFzeW5jIDxUPih7XG4gIGlkLFxuICBjb2xsZWN0aW9uLFxuICBjb250ZXh0LFxuICBkYXRhLFxuICBkb2MsXG4gIGZpZWxkLFxuICBnbG9iYWwsXG4gIG9wZXJhdGlvbixcbiAgb3ZlcnJpZGVBY2Nlc3MsXG4gIHJlcSxcbiAgc2libGluZ0RhdGEsXG4gIHNpYmxpbmdEb2MsXG59OiBBcmdzPFQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGlmIChmaWVsZEFmZmVjdHNEYXRhKGZpZWxkKSkge1xuICAgIGlmIChmaWVsZC5uYW1lID09PSAnaWQnKSB7XG4gICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdIGFzIHN0cmluZ1xuXG4gICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBmaWVsZC50eXBlID09PSAndGV4dCcgJiZcbiAgICAgICAgdHlwZW9mIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdPy50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2Ygc2libGluZ0RhdGFbZmllbGQubmFtZV0gIT09ICdzdHJpbmcnXG4gICAgICApIHtcbiAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXS50b1N0cmluZygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2FuaXRpemUgaW5jb21pbmcgZGF0YVxuICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzoge1xuICAgICAgICBpZiAodHlwZW9mIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gc2libGluZ0RhdGFbZmllbGQubmFtZV0gYXMgc3RyaW5nXG4gICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKVxuICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gdHJpbW1lZC5sZW5ndGggPT09IDAgPyBudWxsIDogcGFyc2VGbG9hdCh0cmltbWVkKVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncG9pbnQnOiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdKSkge1xuICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gKHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdIGFzIHN0cmluZ1tdKS5tYXAoKGNvb3JkaW5hdGUsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29vcmRpbmF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXVtpXSBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IHZhbHVlLnRyaW0oKVxuICAgICAgICAgICAgICByZXR1cm4gdHJpbW1lZC5sZW5ndGggPT09IDAgPyBudWxsIDogcGFyc2VGbG9hdCh0cmltbWVkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvb3JkaW5hdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnY2hlY2tib3gnOiB7XG4gICAgICAgIGlmIChzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9PT0gJ3RydWUnKSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9IHRydWVcbiAgICAgICAgaWYgKHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSAnZmFsc2UnKSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9IGZhbHNlXG4gICAgICAgIGlmIChzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9PT0gJycpIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gZmFsc2VcblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdyaWNoVGV4dCc6IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmljaFRleHRKU09OID0gSlNPTi5wYXJzZShzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSBhcyBzdHJpbmcpXG4gICAgICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9IHJpY2hUZXh0SlNPTlxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gRGlzcmVnYXJkIHRoaXMgZGF0YSBhcyBpdCBpcyBub3QgdmFsaWQuXG4gICAgICAgICAgICAvLyBXaWxsIGJlIHJlcG9ydGVkIHRvIHVzZXIgYnkgZmllbGQgdmFsaWRhdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3JlbGF0aW9uc2hpcCc6XG4gICAgICBjYXNlICd1cGxvYWQnOiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9PT0gJycgfHxcbiAgICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9PT0gJ25vbmUnIHx8XG4gICAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPT09ICdudWxsJyB8fFxuICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAncmVsYXRpb25zaGlwJyAmJiBmaWVsZC5oYXNNYW55ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9IFtdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZhbHVlID0gc2libGluZ0RhdGFbZmllbGQubmFtZV1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5yZWxhdGlvblRvKSkge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgocmVsYXRlZERvYzogeyByZWxhdGlvblRvOiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0sIGkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb24gPSByZXEucGF5bG9hZC5jb25maWcuY29sbGVjdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAoY29sbGVjdGlvbikgPT4gY29sbGVjdGlvbi5zbHVnID09PSByZWxhdGVkRG9jLnJlbGF0aW9uVG8sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwSURGaWVsZCA9IHJlbGF0ZWRDb2xsZWN0aW9uLmZpZWxkcy5maW5kKFxuICAgICAgICAgICAgICAgIChjb2xsZWN0aW9uRmllbGQpID0+XG4gICAgICAgICAgICAgICAgICBmaWVsZEFmZmVjdHNEYXRhKGNvbGxlY3Rpb25GaWVsZCkgJiYgY29sbGVjdGlvbkZpZWxkLm5hbWUgPT09ICdpZCcsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcElERmllbGQ/LnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV1baV0gPSB7XG4gICAgICAgICAgICAgICAgICAuLi5yZWxhdGVkRG9jLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHBhcnNlRmxvYXQocmVsYXRlZERvYy52YWx1ZSBhcyBzdHJpbmcpLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZmllbGQudHlwZSA9PT0gJ3JlbGF0aW9uc2hpcCcgJiZcbiAgICAgICAgICAgIGZpZWxkLmhhc01hbnkgIT09IHRydWUgJiZcbiAgICAgICAgICAgIHZhbHVlSXNWYWx1ZVdpdGhSZWxhdGlvbih2YWx1ZSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRDb2xsZWN0aW9uID0gcmVxLnBheWxvYWQuY29uZmlnLmNvbGxlY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAgIChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLnNsdWcgPT09IHZhbHVlLnJlbGF0aW9uVG8sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBJREZpZWxkID0gcmVsYXRlZENvbGxlY3Rpb24uZmllbGRzLmZpbmQoXG4gICAgICAgICAgICAgIChjb2xsZWN0aW9uRmllbGQpID0+XG4gICAgICAgICAgICAgICAgZmllbGRBZmZlY3RzRGF0YShjb2xsZWN0aW9uRmllbGQpICYmIGNvbGxlY3Rpb25GaWVsZC5uYW1lID09PSAnaWQnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcElERmllbGQ/LnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0geyAuLi52YWx1ZSwgdmFsdWU6IHBhcnNlRmxvYXQodmFsdWUudmFsdWUgYXMgc3RyaW5nKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgocmVsYXRlZERvYzogdW5rbm93biwgaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZWxhdGVkQ29sbGVjdGlvbiA9IHJlcS5wYXlsb2FkLmNvbmZpZy5jb2xsZWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgIChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLnNsdWcgPT09IGZpZWxkLnJlbGF0aW9uVG8sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwSURGaWVsZCA9IHJlbGF0ZWRDb2xsZWN0aW9uLmZpZWxkcy5maW5kKFxuICAgICAgICAgICAgICAgIChjb2xsZWN0aW9uRmllbGQpID0+XG4gICAgICAgICAgICAgICAgICBmaWVsZEFmZmVjdHNEYXRhKGNvbGxlY3Rpb25GaWVsZCkgJiYgY29sbGVjdGlvbkZpZWxkLm5hbWUgPT09ICdpZCcsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcElERmllbGQ/LnR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV1baV0gPSBwYXJzZUZsb2F0KHJlbGF0ZWREb2MgYXMgc3RyaW5nKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gJ3JlbGF0aW9uc2hpcCcgJiYgZmllbGQuaGFzTWFueSAhPT0gdHJ1ZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb24gPSByZXEucGF5bG9hZC5jb25maWcuY29sbGVjdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvbGxlY3Rpb24pID0+IGNvbGxlY3Rpb24uc2x1ZyA9PT0gZmllbGQucmVsYXRpb25UbyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcElERmllbGQgPSByZWxhdGVkQ29sbGVjdGlvbi5maWVsZHMuZmluZChcbiAgICAgICAgICAgICAgKGNvbGxlY3Rpb25GaWVsZCkgPT5cbiAgICAgICAgICAgICAgICBmaWVsZEFmZmVjdHNEYXRhKGNvbGxlY3Rpb25GaWVsZCkgJiYgY29sbGVjdGlvbkZpZWxkLm5hbWUgPT09ICdpZCcsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAocmVsYXRpb25zaGlwSURGaWVsZD8udHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSBwYXJzZUZsb2F0KHZhbHVlIGFzIHN0cmluZylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnYmxvY2tzJzoge1xuICAgICAgICAvLyBIYW5kbGUgY2FzZXMgb2YgYXJyYXlzIGJlaW5nIGludGVudGlvbmFsbHkgc2V0IHRvIDBcbiAgICAgICAgaWYgKHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSAnMCcgfHwgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPT09IDApIHtcbiAgICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9IFtdXG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSBob29rc1xuICAgIGlmIChmaWVsZC5ob29rcz8uYmVmb3JlVmFsaWRhdGUpIHtcbiAgICAgIGF3YWl0IGZpZWxkLmhvb2tzLmJlZm9yZVZhbGlkYXRlLnJlZHVjZShhc3luYyAocHJpb3JIb29rLCBjdXJyZW50SG9vaykgPT4ge1xuICAgICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgICBjb25zdCBob29rZWRWYWx1ZSA9IGF3YWl0IGN1cnJlbnRIb29rKHtcbiAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBnbG9iYWwsXG4gICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgIG9yaWdpbmFsRG9jOiBkb2MsXG4gICAgICAgICAgcmVxLFxuICAgICAgICAgIHNpYmxpbmdEYXRhLFxuICAgICAgICAgIHZhbHVlOiBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoaG9va2VkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gaG9va2VkVmFsdWVcbiAgICAgICAgfVxuICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpXG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSBhY2Nlc3MgY29udHJvbFxuICAgIGlmIChmaWVsZC5hY2Nlc3MgJiYgZmllbGQuYWNjZXNzW29wZXJhdGlvbl0pIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IG92ZXJyaWRlQWNjZXNzXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGF3YWl0IGZpZWxkLmFjY2Vzc1tvcGVyYXRpb25dKHsgaWQsIGRhdGEsIGRvYywgcmVxLCBzaWJsaW5nRGF0YSB9KVxuXG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICBkZWxldGUgc2libGluZ0RhdGFbZmllbGQubmFtZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gSWYgbm8gaW5jb21pbmcgZGF0YSwgYnV0IGV4aXN0aW5nIGRvY3VtZW50IGRhdGEgaXMgZm91bmQsIG1lcmdlIGl0IGluXG4gICAgICBpZiAodHlwZW9mIHNpYmxpbmdEb2NbZmllbGQubmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gY2xvbmVEYXRhRnJvbU9yaWdpbmFsRG9jKHNpYmxpbmdEb2NbZmllbGQubmFtZV0pXG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGNvbXB1dGUgZGVmYXVsdCB2YWx1ZVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmllbGQuZGVmYXVsdFZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9IGF3YWl0IGdldFZhbHVlV2l0aERlZmF1bHQoe1xuICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZmllbGQuZGVmYXVsdFZhbHVlLFxuICAgICAgICAgIGxvY2FsZTogcmVxLmxvY2FsZSxcbiAgICAgICAgICB1c2VyOiByZXEudXNlcixcbiAgICAgICAgICB2YWx1ZTogc2libGluZ0RhdGFbZmllbGQubmFtZV0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVHJhdmVyc2Ugc3ViZmllbGRzXG4gIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgIGNhc2UgJ2dyb3VwJzoge1xuICAgICAgaWYgKHR5cGVvZiBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSAhPT0gJ29iamVjdCcpIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0ge31cbiAgICAgIGlmICh0eXBlb2Ygc2libGluZ0RvY1tmaWVsZC5uYW1lXSAhPT0gJ29iamVjdCcpIHNpYmxpbmdEb2NbZmllbGQubmFtZV0gPSB7fVxuXG4gICAgICBjb25zdCBncm91cERhdGEgPSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgY29uc3QgZ3JvdXBEb2MgPSBzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICAgIGF3YWl0IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRvYyxcbiAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgIGdsb2JhbCxcbiAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgcmVxLFxuICAgICAgICBzaWJsaW5nRGF0YTogZ3JvdXBEYXRhLFxuICAgICAgICBzaWJsaW5nRG9jOiBncm91cERvYyxcbiAgICAgIH0pXG5cbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnYXJyYXknOiB7XG4gICAgICBjb25zdCByb3dzID0gc2libGluZ0RhdGFbZmllbGQubmFtZV1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm93cykpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBkb2MsXG4gICAgICAgICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICAgICAgICBnbG9iYWwsXG4gICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICAgICAgICAgIHJlcSxcbiAgICAgICAgICAgICAgc2libGluZ0RhdGE6IHJvdyxcbiAgICAgICAgICAgICAgc2libGluZ0RvYzogZ2V0RXhpc3RpbmdSb3dEb2Mocm93LCBzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICB9XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ2Jsb2Nrcyc6IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dzKSkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm93U2libGluZ0RvYyA9IGdldEV4aXN0aW5nUm93RG9jKHJvdywgc2libGluZ0RvY1tmaWVsZC5uYW1lXSlcbiAgICAgICAgICBjb25zdCBibG9ja1R5cGVUb01hdGNoID0gcm93LmJsb2NrVHlwZSB8fCByb3dTaWJsaW5nRG9jLmJsb2NrVHlwZVxuICAgICAgICAgIGNvbnN0IGJsb2NrID0gZmllbGQuYmxvY2tzLmZpbmQoKGJsb2NrVHlwZSkgPT4gYmxvY2tUeXBlLnNsdWcgPT09IGJsb2NrVHlwZVRvTWF0Y2gpXG5cbiAgICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgIHJvdy5ibG9ja1R5cGUgPSBibG9ja1R5cGVUb01hdGNoXG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgICAgIHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICBkb2MsXG4gICAgICAgICAgICAgICAgZmllbGRzOiBibG9jay5maWVsZHMsXG4gICAgICAgICAgICAgICAgZ2xvYmFsLFxuICAgICAgICAgICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgICAgICAgICByZXEsXG4gICAgICAgICAgICAgICAgc2libGluZ0RhdGE6IHJvdyxcbiAgICAgICAgICAgICAgICBzaWJsaW5nRG9jOiByb3dTaWJsaW5nRG9jLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgfVxuXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ3Jvdyc6XG4gICAgY2FzZSAnY29sbGFwc2libGUnOiB7XG4gICAgICBhd2FpdCB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgIGlkLFxuICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBkYXRhLFxuICAgICAgICBkb2MsXG4gICAgICAgIGZpZWxkczogZmllbGQuZmllbGRzLFxuICAgICAgICBnbG9iYWwsXG4gICAgICAgIG9wZXJhdGlvbixcbiAgICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICAgIHJlcSxcbiAgICAgICAgc2libGluZ0RhdGEsXG4gICAgICAgIHNpYmxpbmdEb2MsXG4gICAgICB9KVxuXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ3RhYic6IHtcbiAgICAgIGxldCB0YWJTaWJsaW5nRGF0YVxuICAgICAgbGV0IHRhYlNpYmxpbmdEb2NcbiAgICAgIGlmICh0YWJIYXNOYW1lKGZpZWxkKSkge1xuICAgICAgICBpZiAodHlwZW9mIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdICE9PSAnb2JqZWN0Jykgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSB7fVxuICAgICAgICBpZiAodHlwZW9mIHNpYmxpbmdEb2NbZmllbGQubmFtZV0gIT09ICdvYmplY3QnKSBzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdID0ge31cblxuICAgICAgICB0YWJTaWJsaW5nRGF0YSA9IHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgIHRhYlNpYmxpbmdEb2MgPSBzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWJTaWJsaW5nRGF0YSA9IHNpYmxpbmdEYXRhXG4gICAgICAgIHRhYlNpYmxpbmdEb2MgPSBzaWJsaW5nRG9jXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRvYyxcbiAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgIGdsb2JhbCxcbiAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgcmVxLFxuICAgICAgICBzaWJsaW5nRGF0YTogdGFiU2libGluZ0RhdGEsXG4gICAgICAgIHNpYmxpbmdEb2M6IHRhYlNpYmxpbmdEb2MsXG4gICAgICB9KVxuXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ3RhYnMnOiB7XG4gICAgICBhd2FpdCB0cmF2ZXJzZUZpZWxkcyh7XG4gICAgICAgIGlkLFxuICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBkYXRhLFxuICAgICAgICBkb2MsXG4gICAgICAgIGZpZWxkczogZmllbGQudGFicy5tYXAoKHRhYikgPT4gKHsgLi4udGFiLCB0eXBlOiAndGFiJyB9KSksXG4gICAgICAgIGdsb2JhbCxcbiAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgcmVxLFxuICAgICAgICBzaWJsaW5nRGF0YSxcbiAgICAgICAgc2libGluZ0RvYyxcbiAgICAgIH0pXG5cbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgZGVmYXVsdDoge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJwcm9taXNlIiwiaWQiLCJjb2xsZWN0aW9uIiwiY29udGV4dCIsImRhdGEiLCJkb2MiLCJmaWVsZCIsImdsb2JhbCIsIm9wZXJhdGlvbiIsIm92ZXJyaWRlQWNjZXNzIiwicmVxIiwic2libGluZ0RhdGEiLCJzaWJsaW5nRG9jIiwiZmllbGRBZmZlY3RzRGF0YSIsIm5hbWUiLCJ0eXBlIiwidmFsdWUiLCJwYXJzZUZsb2F0IiwidG9TdHJpbmciLCJ0cmltbWVkIiwidHJpbSIsImxlbmd0aCIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImNvb3JkaW5hdGUiLCJpIiwicmljaFRleHRKU09OIiwiSlNPTiIsInBhcnNlIiwiaGFzTWFueSIsInJlbGF0aW9uVG8iLCJmb3JFYWNoIiwicmVsYXRlZERvYyIsInJlbGF0ZWRDb2xsZWN0aW9uIiwicGF5bG9hZCIsImNvbmZpZyIsImNvbGxlY3Rpb25zIiwiZmluZCIsInNsdWciLCJyZWxhdGlvbnNoaXBJREZpZWxkIiwiZmllbGRzIiwiY29sbGVjdGlvbkZpZWxkIiwidmFsdWVJc1ZhbHVlV2l0aFJlbGF0aW9uIiwiaG9va3MiLCJiZWZvcmVWYWxpZGF0ZSIsInJlZHVjZSIsInByaW9ySG9vayIsImN1cnJlbnRIb29rIiwiaG9va2VkVmFsdWUiLCJvcmlnaW5hbERvYyIsInVuZGVmaW5lZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiYWNjZXNzIiwicmVzdWx0IiwiY2xvbmVEYXRhRnJvbU9yaWdpbmFsRG9jIiwiZGVmYXVsdFZhbHVlIiwiZ2V0VmFsdWVXaXRoRGVmYXVsdCIsImxvY2FsZSIsInVzZXIiLCJncm91cERhdGEiLCJncm91cERvYyIsInRyYXZlcnNlRmllbGRzIiwicm93cyIsInByb21pc2VzIiwicm93IiwicHVzaCIsImdldEV4aXN0aW5nUm93RG9jIiwiYWxsIiwicm93U2libGluZ0RvYyIsImJsb2NrVHlwZVRvTWF0Y2giLCJibG9ja1R5cGUiLCJibG9jayIsImJsb2NrcyIsInRhYlNpYmxpbmdEYXRhIiwidGFiU2libGluZ0RvYyIsInRhYkhhc05hbWUiLCJ0YWJzIiwidGFiIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7Ozs7K0JBa0N2QkE7OztlQUFBQTs7O3VC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
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9maWVsZHMvaG9va3MvYmVmb3JlVmFsaWRhdGUvcHJvbWlzZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCwgUmVxdWVzdENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9leHByZXNzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRHbG9iYWxDb25maWcgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICcuLi8uLi9jb25maWcvdHlwZXMnXG5cbmltcG9ydCB7IGZpZWxkQWZmZWN0c0RhdGEsIHRhYkhhc05hbWUsIHZhbHVlSXNWYWx1ZVdpdGhSZWxhdGlvbiB9IGZyb20gJy4uLy4uL2NvbmZpZy90eXBlcydcbmltcG9ydCBnZXRWYWx1ZVdpdGhEZWZhdWx0IGZyb20gJy4uLy4uL2dldERlZmF1bHRWYWx1ZSdcbmltcG9ydCB7IGNsb25lRGF0YUZyb21PcmlnaW5hbERvYyB9IGZyb20gJy4uL2JlZm9yZUNoYW5nZS9jbG9uZURhdGFGcm9tT3JpZ2luYWxEb2MnXG5pbXBvcnQgeyBnZXRFeGlzdGluZ1Jvd0RvYyB9IGZyb20gJy4uL2JlZm9yZUNoYW5nZS9nZXRFeGlzdGluZ1Jvd0RvYydcbmltcG9ydCB7IHRyYXZlcnNlRmllbGRzIH0gZnJvbSAnLi90cmF2ZXJzZUZpZWxkcydcblxudHlwZSBBcmdzPFQ+ID0ge1xuICBjb2xsZWN0aW9uOiBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIHwgbnVsbFxuICBjb250ZXh0OiBSZXF1ZXN0Q29udGV4dFxuICBkYXRhOiBUXG4gIGRvYzogVFxuICBmaWVsZDogRmllbGQgfCBUYWJBc0ZpZWxkXG4gIGdsb2JhbDogU2FuaXRpemVkR2xvYmFsQ29uZmlnIHwgbnVsbFxuICBpZD86IG51bWJlciB8IHN0cmluZ1xuICBvcGVyYXRpb246ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgb3ZlcnJpZGVBY2Nlc3M6IGJvb2xlYW5cbiAgcmVxOiBQYXlsb2FkUmVxdWVzdFxuICBzaWJsaW5nRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgc2libGluZ0RvYzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgc2libGluZ0RvY0tleXM6IFNldDxzdHJpbmc+XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBmb2xsb3dpbmcgYWN0aW9ucywgaW4gb3JkZXI6XG4vLyAtIFNhbml0aXplIGluY29taW5nIGRhdGFcbi8vIC0gRXhlY3V0ZSBmaWVsZCBob29rc1xuLy8gLSBFeGVjdXRlIGZpZWxkIGFjY2VzcyBjb250cm9sXG4vLyAtIE1lcmdlIG9yaWdpbmFsIGRvY3VtZW50IGRhdGEgaW50byBpbmNvbWluZyBkYXRhXG4vLyAtIENvbXB1dGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHVuZGVmaW5lZCBmaWVsZHNcblxuZXhwb3J0IGNvbnN0IHByb21pc2UgPSBhc3luYyA8VD4oe1xuICBpZCxcbiAgY29sbGVjdGlvbixcbiAgY29udGV4dCxcbiAgZGF0YSxcbiAgZG9jLFxuICBmaWVsZCxcbiAgZ2xvYmFsLFxuICBvcGVyYXRpb24sXG4gIG92ZXJyaWRlQWNjZXNzLFxuICByZXEsXG4gIHNpYmxpbmdEYXRhLFxuICBzaWJsaW5nRG9jLFxuICBzaWJsaW5nRG9jS2V5cyxcbn06IEFyZ3M8VD4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYgKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSBzaWJsaW5nRG9jS2V5c1xuICAgIC8vIHRoZSBnb2FsIGlzIHRvIGtlZXAgYW55IGV4aXN0aW5nIGRhdGEgcHJlc2VudFxuICAgIC8vIGJlZm9yZSB1cGRhdGluZywgZm9yIHVzZXJzIHRoYXQgd2FudCB0byBtYWludGFpblxuICAgIC8vIGV4dGVybmFsIGRhdGEgaW4gdGhlIHNhbWUgY29sbGVjdGlvbnMgYXMgUGF5bG9hZCBtYW5hZ2VzLFxuICAgIC8vIHdpdGhvdXQgaGF2aW5nIGZpZWxkcyBkZWZpbmVkIGZvciB0aGVtXG4gICAgaWYgKHNpYmxpbmdEb2NLZXlzLmhhcyhmaWVsZC5uYW1lKSkge1xuICAgICAgc2libGluZ0RvY0tleXMuZGVsZXRlKGZpZWxkLm5hbWUpXG4gICAgfVxuXG4gICAgaWYgKGZpZWxkLm5hbWUgPT09ICdpZCcpIHtcbiAgICAgIGlmIChmaWVsZC50eXBlID09PSAnbnVtYmVyJyAmJiB0eXBlb2Ygc2libGluZ0RhdGFbZmllbGQubmFtZV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gc2libGluZ0RhdGFbZmllbGQubmFtZV0gYXMgc3RyaW5nXG5cbiAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpZWxkLnR5cGUgPT09ICd0ZXh0JyAmJlxuICAgICAgICB0eXBlb2Ygc2libGluZ0RhdGFbZmllbGQubmFtZV0/LnRvU3RyaW5nID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgIHR5cGVvZiBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSAhPT0gJ3N0cmluZydcbiAgICAgICkge1xuICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9IHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdLnRvU3RyaW5nKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTYW5pdGl6ZSBpbmNvbWluZyBkYXRhXG4gICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICBjYXNlICdudW1iZXInOiB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2libGluZ0RhdGFbZmllbGQubmFtZV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSBhcyBzdHJpbmdcbiAgICAgICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpXG4gICAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSB0cmltbWVkLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBwYXJzZUZsb2F0KHRyaW1tZWQpXG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdwb2ludCc6IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2libGluZ0RhdGFbZmllbGQubmFtZV0pKSB7XG4gICAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSAoc2libGluZ0RhdGFbZmllbGQubmFtZV0gYXMgc3RyaW5nW10pLm1hcCgoY29vcmRpbmF0ZSwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjb29yZGluYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdW2ldIGFzIHN0cmluZ1xuICAgICAgICAgICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpXG4gICAgICAgICAgICAgIHJldHVybiB0cmltbWVkLmxlbmd0aCA9PT0gMCA/IG51bGwgOiBwYXJzZUZsb2F0KHRyaW1tZWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29vcmRpbmF0ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdjaGVja2JveCc6IHtcbiAgICAgICAgaWYgKHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSAndHJ1ZScpIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gdHJ1ZVxuICAgICAgICBpZiAoc2libGluZ0RhdGFbZmllbGQubmFtZV0gPT09ICdmYWxzZScpIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gZmFsc2VcbiAgICAgICAgaWYgKHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSAnJykgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSBmYWxzZVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3JpY2hUZXh0Jzoge1xuICAgICAgICBpZiAodHlwZW9mIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByaWNoVGV4dEpTT04gPSBKU09OLnBhcnNlKHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdIGFzIHN0cmluZylcbiAgICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gcmljaFRleHRKU09OXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBEaXNyZWdhcmQgdGhpcyBkYXRhIGFzIGl0IGlzIG5vdCB2YWxpZC5cbiAgICAgICAgICAgIC8vIFdpbGwgYmUgcmVwb3J0ZWQgdG8gdXNlciBieSBmaWVsZCB2YWxpZGF0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsYXRpb25zaGlwJzpcbiAgICAgIGNhc2UgJ3VwbG9hZCc6IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSAnJyB8fFxuICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID09PSAnbm9uZScgfHxcbiAgICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9PT0gJ251bGwnIHx8XG4gICAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdyZWxhdGlvbnNoaXAnICYmIGZpZWxkLmhhc01hbnkgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gW11cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLnJlbGF0aW9uVG8pKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKChyZWxhdGVkRG9jOiB7IHJlbGF0aW9uVG86IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSwgaSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZWxhdGVkQ29sbGVjdGlvbiA9IHJlcS5wYXlsb2FkLmNvbmZpZy5jb2xsZWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAgIChjb2xsZWN0aW9uKSA9PiBjb2xsZWN0aW9uLnNsdWcgPT09IHJlbGF0ZWREb2MucmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBJREZpZWxkID0gcmVsYXRlZENvbGxlY3Rpb24uZmllbGRzLmZpbmQoXG4gICAgICAgICAgICAgICAgKGNvbGxlY3Rpb25GaWVsZCkgPT5cbiAgICAgICAgICAgICAgICAgIGZpZWxkQWZmZWN0c0RhdGEoY29sbGVjdGlvbkZpZWxkKSAmJiBjb2xsZWN0aW9uRmllbGQubmFtZSA9PT0gJ2lkJyxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAocmVsYXRpb25zaGlwSURGaWVsZD8udHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXVtpXSA9IHtcbiAgICAgICAgICAgICAgICAgIC4uLnJlbGF0ZWREb2MsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogcGFyc2VGbG9hdChyZWxhdGVkRG9jLnZhbHVlIGFzIHN0cmluZyksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWVsZC50eXBlID09PSAncmVsYXRpb25zaGlwJyAmJlxuICAgICAgICAgICAgZmllbGQuaGFzTWFueSAhPT0gdHJ1ZSAmJlxuICAgICAgICAgICAgdmFsdWVJc1ZhbHVlV2l0aFJlbGF0aW9uKHZhbHVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgcmVsYXRlZENvbGxlY3Rpb24gPSByZXEucGF5bG9hZC5jb25maWcuY29sbGVjdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvbGxlY3Rpb24pID0+IGNvbGxlY3Rpb24uc2x1ZyA9PT0gdmFsdWUucmVsYXRpb25UbyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcElERmllbGQgPSByZWxhdGVkQ29sbGVjdGlvbi5maWVsZHMuZmluZChcbiAgICAgICAgICAgICAgKGNvbGxlY3Rpb25GaWVsZCkgPT5cbiAgICAgICAgICAgICAgICBmaWVsZEFmZmVjdHNEYXRhKGNvbGxlY3Rpb25GaWVsZCkgJiYgY29sbGVjdGlvbkZpZWxkLm5hbWUgPT09ICdpZCcsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAocmVsYXRpb25zaGlwSURGaWVsZD8udHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSB7IC4uLnZhbHVlLCB2YWx1ZTogcGFyc2VGbG9hdCh2YWx1ZS52YWx1ZSBhcyBzdHJpbmcpIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKChyZWxhdGVkRG9jOiB1bmtub3duLCBpKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlbGF0ZWRDb2xsZWN0aW9uID0gcmVxLnBheWxvYWQuY29uZmlnLmNvbGxlY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgKGNvbGxlY3Rpb24pID0+IGNvbGxlY3Rpb24uc2x1ZyA9PT0gZmllbGQucmVsYXRpb25UbyxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBJREZpZWxkID0gcmVsYXRlZENvbGxlY3Rpb24uZmllbGRzLmZpbmQoXG4gICAgICAgICAgICAgICAgKGNvbGxlY3Rpb25GaWVsZCkgPT5cbiAgICAgICAgICAgICAgICAgIGZpZWxkQWZmZWN0c0RhdGEoY29sbGVjdGlvbkZpZWxkKSAmJiBjb2xsZWN0aW9uRmllbGQubmFtZSA9PT0gJ2lkJyxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAocmVsYXRpb25zaGlwSURGaWVsZD8udHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXVtpXSA9IHBhcnNlRmxvYXQocmVsYXRlZERvYyBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSAncmVsYXRpb25zaGlwJyAmJiBmaWVsZC5oYXNNYW55ICE9PSB0cnVlICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCByZWxhdGVkQ29sbGVjdGlvbiA9IHJlcS5wYXlsb2FkLmNvbmZpZy5jb2xsZWN0aW9ucy5maW5kKFxuICAgICAgICAgICAgICAoY29sbGVjdGlvbikgPT4gY29sbGVjdGlvbi5zbHVnID09PSBmaWVsZC5yZWxhdGlvblRvLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwSURGaWVsZCA9IHJlbGF0ZWRDb2xsZWN0aW9uLmZpZWxkcy5maW5kKFxuICAgICAgICAgICAgICAoY29sbGVjdGlvbkZpZWxkKSA9PlxuICAgICAgICAgICAgICAgIGZpZWxkQWZmZWN0c0RhdGEoY29sbGVjdGlvbkZpZWxkKSAmJiBjb2xsZWN0aW9uRmllbGQubmFtZSA9PT0gJ2lkJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXBJREZpZWxkPy50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9IHBhcnNlRmxvYXQodmFsdWUgYXMgc3RyaW5nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdibG9ja3MnOiB7XG4gICAgICAgIC8vIEhhbmRsZSBjYXNlcyBvZiBhcnJheXMgYmVpbmcgaW50ZW50aW9uYWxseSBzZXQgdG8gMFxuICAgICAgICBpZiAoc2libGluZ0RhdGFbZmllbGQubmFtZV0gPT09ICcwJyB8fCBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9PT0gMCkge1xuICAgICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gW11cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIGhvb2tzXG4gICAgaWYgKGZpZWxkLmhvb2tzPy5iZWZvcmVWYWxpZGF0ZSkge1xuICAgICAgYXdhaXQgZmllbGQuaG9va3MuYmVmb3JlVmFsaWRhdGUucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGN1cnJlbnRIb29rKSA9PiB7XG4gICAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICAgIGNvbnN0IGhvb2tlZFZhbHVlID0gYXdhaXQgY3VycmVudEhvb2soe1xuICAgICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGdsb2JhbCxcbiAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgb3JpZ2luYWxEb2M6IGRvYyxcbiAgICAgICAgICByZXEsXG4gICAgICAgICAgc2libGluZ0RhdGEsXG4gICAgICAgICAgdmFsdWU6IHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChob29rZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSBob29rZWRWYWx1ZVxuICAgICAgICB9XG4gICAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlIGFjY2VzcyBjb250cm9sXG4gICAgaWYgKGZpZWxkLmFjY2VzcyAmJiBmaWVsZC5hY2Nlc3Nbb3BlcmF0aW9uXSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gb3ZlcnJpZGVBY2Nlc3NcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogYXdhaXQgZmllbGQuYWNjZXNzW29wZXJhdGlvbl0oeyBpZCwgZGF0YSwgZG9jLCByZXEsIHNpYmxpbmdEYXRhIH0pXG5cbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIGRlbGV0ZSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2libGluZ0RhdGFbZmllbGQubmFtZV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBJZiBubyBpbmNvbWluZyBkYXRhLCBidXQgZXhpc3RpbmcgZG9jdW1lbnQgZGF0YSBpcyBmb3VuZCwgbWVyZ2UgaXQgaW5cbiAgICAgIGlmICh0eXBlb2Ygc2libGluZ0RvY1tmaWVsZC5uYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSBjbG9uZURhdGFGcm9tT3JpZ2luYWxEb2Moc2libGluZ0RvY1tmaWVsZC5uYW1lXSlcblxuICAgICAgICAvLyBPdGhlcndpc2UgY29tcHV0ZSBkZWZhdWx0IHZhbHVlXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWVsZC5kZWZhdWx0VmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdID0gYXdhaXQgZ2V0VmFsdWVXaXRoRGVmYXVsdCh7XG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBmaWVsZC5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgbG9jYWxlOiByZXEubG9jYWxlLFxuICAgICAgICAgIHVzZXI6IHJlcS51c2VyLFxuICAgICAgICAgIHZhbHVlOiBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBUcmF2ZXJzZSBzdWJmaWVsZHNcbiAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgY2FzZSAnZ3JvdXAnOiB7XG4gICAgICBpZiAodHlwZW9mIHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdICE9PSAnb2JqZWN0Jykgc2libGluZ0RhdGFbZmllbGQubmFtZV0gPSB7fVxuICAgICAgaWYgKHR5cGVvZiBzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdICE9PSAnb2JqZWN0Jykgc2libGluZ0RvY1tmaWVsZC5uYW1lXSA9IHt9XG5cbiAgICAgIGNvbnN0IGdyb3VwRGF0YSA9IHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICBjb25zdCBncm91cERvYyA9IHNpYmxpbmdEb2NbZmllbGQubmFtZV0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICAgICAgYXdhaXQgdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICBpZCxcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZG9jLFxuICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgZ2xvYmFsLFxuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICByZXEsXG4gICAgICAgIHNpYmxpbmdEYXRhOiBncm91cERhdGEsXG4gICAgICAgIHNpYmxpbmdEb2M6IGdyb3VwRG9jLFxuICAgICAgfSlcblxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBjYXNlICdhcnJheSc6IHtcbiAgICAgIGNvbnN0IHJvd3MgPSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dzKSkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgIHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIGRvYyxcbiAgICAgICAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgICAgICAgIGdsb2JhbCxcbiAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgICAgICAgcmVxLFxuICAgICAgICAgICAgICBzaWJsaW5nRGF0YTogcm93LFxuICAgICAgICAgICAgICBzaWJsaW5nRG9jOiBnZXRFeGlzdGluZ1Jvd0RvYyhyb3csIHNpYmxpbmdEb2NbZmllbGQubmFtZV0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbiAgICAgIH1cbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAnYmxvY2tzJzoge1xuICAgICAgY29uc3Qgcm93cyA9IHNpYmxpbmdEYXRhW2ZpZWxkLm5hbWVdXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd3MpKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICAgICAgcm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCByb3dTaWJsaW5nRG9jID0gZ2V0RXhpc3RpbmdSb3dEb2Mocm93LCBzaWJsaW5nRG9jW2ZpZWxkLm5hbWVdKVxuICAgICAgICAgIGNvbnN0IGJsb2NrVHlwZVRvTWF0Y2ggPSByb3cuYmxvY2tUeXBlIHx8IHJvd1NpYmxpbmdEb2MuYmxvY2tUeXBlXG4gICAgICAgICAgY29uc3QgYmxvY2sgPSBmaWVsZC5ibG9ja3MuZmluZCgoYmxvY2tUeXBlKSA9PiBibG9ja1R5cGUuc2x1ZyA9PT0gYmxvY2tUeXBlVG9NYXRjaClcblxuICAgICAgICAgIGlmIChibG9jaykge1xuICAgICAgICAgICAgcm93LmJsb2NrVHlwZSA9IGJsb2NrVHlwZVRvTWF0Y2hcblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIGRvYyxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IGJsb2NrLmZpZWxkcyxcbiAgICAgICAgICAgICAgICBnbG9iYWwsXG4gICAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICAgICAgICAgIHJlcSxcbiAgICAgICAgICAgICAgICBzaWJsaW5nRGF0YTogcm93LFxuICAgICAgICAgICAgICAgIHNpYmxpbmdEb2M6IHJvd1NpYmxpbmdEb2MsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICB9XG5cbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAncm93JzpcbiAgICBjYXNlICdjb2xsYXBzaWJsZSc6IHtcbiAgICAgIGF3YWl0IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRvYyxcbiAgICAgICAgZmllbGRzOiBmaWVsZC5maWVsZHMsXG4gICAgICAgIGdsb2JhbCxcbiAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgcmVxLFxuICAgICAgICBzaWJsaW5nRGF0YSxcbiAgICAgICAgc2libGluZ0RvYyxcbiAgICAgICAgc2libGluZ0RvY0tleXMsXG4gICAgICB9KVxuXG4gICAgICBicmVha1xuICAgIH1cblxuICAgIGNhc2UgJ3RhYic6IHtcbiAgICAgIGxldCB0YWJTaWJsaW5nRGF0YVxuICAgICAgbGV0IHRhYlNpYmxpbmdEb2NcblxuICAgICAgY29uc3QgaXNOYW1lZFRhYiA9IHRhYkhhc05hbWUoZmllbGQpXG5cbiAgICAgIGlmIChpc05hbWVkVGFiKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2libGluZ0RhdGFbZmllbGQubmFtZV0gIT09ICdvYmplY3QnKSBzaWJsaW5nRGF0YVtmaWVsZC5uYW1lXSA9IHt9XG4gICAgICAgIGlmICh0eXBlb2Ygc2libGluZ0RvY1tmaWVsZC5uYW1lXSAhPT0gJ29iamVjdCcpIHNpYmxpbmdEb2NbZmllbGQubmFtZV0gPSB7fVxuXG4gICAgICAgIHRhYlNpYmxpbmdEYXRhID0gc2libGluZ0RhdGFbZmllbGQubmFtZV0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgdGFiU2libGluZ0RvYyA9IHNpYmxpbmdEb2NbZmllbGQubmFtZV0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhYlNpYmxpbmdEYXRhID0gc2libGluZ0RhdGFcbiAgICAgICAgdGFiU2libGluZ0RvYyA9IHNpYmxpbmdEb2NcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdHJhdmVyc2VGaWVsZHMoe1xuICAgICAgICBpZCxcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZG9jLFxuICAgICAgICBmaWVsZHM6IGZpZWxkLmZpZWxkcyxcbiAgICAgICAgZ2xvYmFsLFxuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICByZXEsXG4gICAgICAgIHNpYmxpbmdEYXRhOiB0YWJTaWJsaW5nRGF0YSxcbiAgICAgICAgc2libGluZ0RvYzogdGFiU2libGluZ0RvYyxcbiAgICAgICAgc2libGluZ0RvY0tleXM6IGlzTmFtZWRUYWIgPyB1bmRlZmluZWQgOiBzaWJsaW5nRG9jS2V5cyxcbiAgICAgIH0pXG5cbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgY2FzZSAndGFicyc6IHtcbiAgICAgIGF3YWl0IHRyYXZlcnNlRmllbGRzKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRvYyxcbiAgICAgICAgZmllbGRzOiBmaWVsZC50YWJzLm1hcCgodGFiKSA9PiAoeyAuLi50YWIsIHR5cGU6ICd0YWInIH0pKSxcbiAgICAgICAgZ2xvYmFsLFxuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICByZXEsXG4gICAgICAgIHNpYmxpbmdEYXRhLFxuICAgICAgICBzaWJsaW5nRG9jLFxuICAgICAgICBzaWJsaW5nRG9jS2V5cyxcbiAgICAgIH0pXG5cbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgZGVmYXVsdDoge1xuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJwcm9taXNlIiwiaWQiLCJjb2xsZWN0aW9uIiwiY29udGV4dCIsImRhdGEiLCJkb2MiLCJmaWVsZCIsImdsb2JhbCIsIm9wZXJhdGlvbiIsIm92ZXJyaWRlQWNjZXNzIiwicmVxIiwic2libGluZ0RhdGEiLCJzaWJsaW5nRG9jIiwic2libGluZ0RvY0tleXMiLCJmaWVsZEFmZmVjdHNEYXRhIiwiaGFzIiwibmFtZSIsImRlbGV0ZSIsInR5cGUiLCJ2YWx1ZSIsInBhcnNlRmxvYXQiLCJ0b1N0cmluZyIsInRyaW1tZWQiLCJ0cmltIiwibGVuZ3RoIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiY29vcmRpbmF0ZSIsImkiLCJyaWNoVGV4dEpTT04iLCJKU09OIiwicGFyc2UiLCJoYXNNYW55IiwicmVsYXRpb25UbyIsImZvckVhY2giLCJyZWxhdGVkRG9jIiwicmVsYXRlZENvbGxlY3Rpb24iLCJwYXlsb2FkIiwiY29uZmlnIiwiY29sbGVjdGlvbnMiLCJmaW5kIiwic2x1ZyIsInJlbGF0aW9uc2hpcElERmllbGQiLCJmaWVsZHMiLCJjb2xsZWN0aW9uRmllbGQiLCJ2YWx1ZUlzVmFsdWVXaXRoUmVsYXRpb24iLCJob29rcyIsImJlZm9yZVZhbGlkYXRlIiwicmVkdWNlIiwicHJpb3JIb29rIiwiY3VycmVudEhvb2siLCJob29rZWRWYWx1ZSIsIm9yaWdpbmFsRG9jIiwidW5kZWZpbmVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhY2Nlc3MiLCJyZXN1bHQiLCJjbG9uZURhdGFGcm9tT3JpZ2luYWxEb2MiLCJkZWZhdWx0VmFsdWUiLCJnZXRWYWx1ZVdpdGhEZWZhdWx0IiwibG9jYWxlIiwidXNlciIsImdyb3VwRGF0YSIsImdyb3VwRG9jIiwidHJhdmVyc2VGaWVsZHMiLCJyb3dzIiwicHJvbWlzZXMiLCJyb3ciLCJwdXNoIiwiZ2V0RXhpc3RpbmdSb3dEb2MiLCJhbGwiLCJyb3dTaWJsaW5nRG9jIiwiYmxvY2tUeXBlVG9NYXRjaCIsImJsb2NrVHlwZSIsImJsb2NrIiwiYmxvY2tzIiwidGFiU2libGluZ0RhdGEiLCJ0YWJTaWJsaW5nRG9jIiwiaXNOYW1lZFRhYiIsInRhYkhhc05hbWUiLCJ0YWJzIiwidGFiIl0sInJhbmdlTWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OyIsIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7Ozs7K0JBbUN2QkE7OztlQUFBQTs7O3VCQTdCMEQ7d0VBQ3ZDOzBDQUNTO21DQUNQO2dDQUNIOzs7Ozs7QUF5QnhCLE1BQU1BLFVBQVUsT0FBVSxFQUMvQkMsRUFBRSxFQUNGQyxVQUFVLEVBQ1ZDLE9BQU8sRUFDUEMsSUFBSSxFQUNKQyxHQUFHLEVBQ0hDLEtBQUssRUFDTEMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLGNBQWMsRUFDZEMsR0FBRyxFQUNIQyxXQUFXLEVBQ1hDLFVBQVUsRUFDVkMsY0FBYyxFQUNOO0lBQ1IsSUFBSUMsSUFBQUEsdUJBQWdCLEVBQUNSLFFBQVE7UUFDM0IscUNBQXFDO1FBQ3JDLGdEQUFnRDtRQUNoRCxt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
@@ -15,7 +15,8 @@ type Args<T> = {
15
15
  req: PayloadRequest;
16
16
  siblingData: Record<string, unknown>;
17
17
  siblingDoc: Record<string, unknown>;
18
+ siblingDocKeys?: Set<string>;
18
19
  };
19
- export declare const traverseFields: <T>({ id, collection, context, data, doc, fields, global, operation, overrideAccess, req, siblingData, siblingDoc, }: Args<T>) => Promise<void>;
20
+ export declare const traverseFields: <T>({ id, collection, context, data, doc, fields, global, operation, overrideAccess, req, siblingData, siblingDoc, siblingDocKeys: incomingSiblingDocKeys, }: Args<T>) => Promise<void>;
20
21
  export {};
21
22
  //# sourceMappingURL=traverseFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAI3D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,EAAE,CAAC,CAAA;IACN,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACpC,CAAA;AAED,eAAO,MAAM,cAAc,oIAad,QAAQ,IAAI,CAqBxB,CAAA"}
1
+ {"version":3,"file":"traverseFields.d.ts","sourceRoot":"","sources":["../../../../src/fields/hooks/beforeValidate/traverseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAI3D,KAAK,IAAI,CAAC,CAAC,IAAI;IACb,UAAU,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,OAAO,EAAE,cAAc,CAAA;IACvB,IAAI,EAAE,CAAC,CAAA;IACP,GAAG,EAAE,CAAC,CAAA;IACN,MAAM,EAAE,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAA;IAC9B,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACpC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC9B,cAAc,EAAE,OAAO,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,cAAc,4KAcd,QAAQ,IAAI,CAkCxB,CAAA"}
@@ -9,8 +9,9 @@ Object.defineProperty(exports, "traverseFields", {
9
9
  }
10
10
  });
11
11
  const _promise = require("./promise");
12
- const traverseFields = async ({ id, collection, context, data, doc, fields, global, operation, overrideAccess, req, siblingData, siblingDoc })=>{
12
+ const traverseFields = async ({ id, collection, context, data, doc, fields, global, operation, overrideAccess, req, siblingData, siblingDoc, siblingDocKeys: incomingSiblingDocKeys })=>{
13
13
  const promises = [];
14
+ const siblingDocKeys = incomingSiblingDocKeys || new Set(Object.keys(siblingDoc));
14
15
  fields.forEach((field)=>{
15
16
  promises.push((0, _promise.promise)({
16
17
  id,
@@ -24,10 +25,24 @@ const traverseFields = async ({ id, collection, context, data, doc, fields, glob
24
25
  overrideAccess,
25
26
  req,
26
27
  siblingData,
27
- siblingDoc
28
+ siblingDoc,
29
+ siblingDocKeys
28
30
  }));
29
31
  });
30
32
  await Promise.all(promises);
33
+ // For any siblingDocKeys that have not been deleted,
34
+ // we will move the data to the siblingData object
35
+ // to preserve it
36
+ siblingDocKeys.forEach((key)=>{
37
+ if (![
38
+ 'createdAt',
39
+ 'globalType',
40
+ 'id',
41
+ 'updatedAt'
42
+ ].includes(key)) {
43
+ siblingData[key] = siblingDoc[key];
44
+ }
45
+ });
31
46
  };
32
47
 
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9maWVsZHMvaG9va3MvYmVmb3JlVmFsaWRhdGUvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCwgUmVxdWVzdENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9leHByZXNzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRHbG9iYWxDb25maWcgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICcuLi8uLi9jb25maWcvdHlwZXMnXG5cbmltcG9ydCB7IHByb21pc2UgfSBmcm9tICcuL3Byb21pc2UnXG5cbnR5cGUgQXJnczxUPiA9IHtcbiAgY29sbGVjdGlvbjogU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB8IG51bGxcbiAgY29udGV4dDogUmVxdWVzdENvbnRleHRcbiAgZGF0YTogVFxuICBkb2M6IFRcbiAgZmllbGRzOiAoRmllbGQgfCBUYWJBc0ZpZWxkKVtdXG4gIGdsb2JhbDogU2FuaXRpemVkR2xvYmFsQ29uZmlnIHwgbnVsbFxuICBpZD86IG51bWJlciB8IHN0cmluZ1xuICBvcGVyYXRpb246ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgb3ZlcnJpZGVBY2Nlc3M6IGJvb2xlYW5cbiAgcmVxOiBQYXlsb2FkUmVxdWVzdFxuICBzaWJsaW5nRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgc2libGluZ0RvYzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbn1cblxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlRmllbGRzID0gYXN5bmMgPFQ+KHtcbiAgaWQsXG4gIGNvbGxlY3Rpb24sXG4gIGNvbnRleHQsXG4gIGRhdGEsXG4gIGRvYyxcbiAgZmllbGRzLFxuICBnbG9iYWwsXG4gIG9wZXJhdGlvbixcbiAgb3ZlcnJpZGVBY2Nlc3MsXG4gIHJlcSxcbiAgc2libGluZ0RhdGEsXG4gIHNpYmxpbmdEb2MsXG59OiBBcmdzPFQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHByb21pc2VzID0gW11cbiAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIHByb21pc2Uoe1xuICAgICAgICBpZCxcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZG9jLFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgZ2xvYmFsLFxuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICByZXEsXG4gICAgICAgIHNpYmxpbmdEYXRhLFxuICAgICAgICBzaWJsaW5nRG9jLFxuICAgICAgfSksXG4gICAgKVxuICB9KVxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cbiJdLCJuYW1lcyI6WyJ0cmF2ZXJzZUZpZWxkcyIsImlkIiwiY29sbGVjdGlvbiIsImNvbnRleHQiLCJkYXRhIiwiZG9jIiwiZmllbGRzIiwiZ2xvYmFsIiwib3BlcmF0aW9uIiwib3ZlcnJpZGVBY2Nlc3MiLCJyZXEiLCJzaWJsaW5nRGF0YSIsInNpYmxpbmdEb2MiLCJwcm9taXNlcyIsImZvckVhY2giLCJmaWVsZCIsInB1c2giLCJwcm9taXNlIiwiUHJvbWlzZSIsImFsbCJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwibWFwcGluZ3MiOiI7Ozs7K0JBc0JhQTs7O2VBQUFBOzs7eUJBakJXO0FBaUJqQixNQUFNQSxpQkFBaUIsT0FBVSxFQUN0Q0MsRUFBRSxFQUNGQyxVQUFVLEVBQ1ZDLE9BQU8sRUFDUEMsSUFBSSxFQUNKQyxHQUFHLEVBQ0hDLE1BQU0sRUFDTkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLGNBQWMsRUFDZEMsR0FBRyxFQUNIQyxXQUFXLEVBQ1hDLFVBQVUsRUFDRjtJQUNSLE1BQU1DLFdBQVcsRUFBRTtJQUNuQlAsT0FBT1EsT0FBTyxDQUFDLENBQUNDO1FBQ2RGLFNBQVNHLElBQUksQ0FDWEMsSUFBQUEsZ0JBQU8sRUFBQztZQUNOaEI7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQVU7WUFDQVI7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7UUFDRjtJQUVKO0lBQ0EsTUFBTU0sUUFBUUMsR0FBRyxDQUFDTjtBQUNwQiJ9
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9maWVsZHMvaG9va3MvYmVmb3JlVmFsaWRhdGUvdHJhdmVyc2VGaWVsZHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRDb2xsZWN0aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vY29sbGVjdGlvbnMvY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCwgUmVxdWVzdENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9leHByZXNzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBTYW5pdGl6ZWRHbG9iYWxDb25maWcgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxzL2NvbmZpZy90eXBlcydcbmltcG9ydCB0eXBlIHsgRmllbGQsIFRhYkFzRmllbGQgfSBmcm9tICcuLi8uLi9jb25maWcvdHlwZXMnXG5cbmltcG9ydCB7IHByb21pc2UgfSBmcm9tICcuL3Byb21pc2UnXG5cbnR5cGUgQXJnczxUPiA9IHtcbiAgY29sbGVjdGlvbjogU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZyB8IG51bGxcbiAgY29udGV4dDogUmVxdWVzdENvbnRleHRcbiAgZGF0YTogVFxuICBkb2M6IFRcbiAgZmllbGRzOiAoRmllbGQgfCBUYWJBc0ZpZWxkKVtdXG4gIGdsb2JhbDogU2FuaXRpemVkR2xvYmFsQ29uZmlnIHwgbnVsbFxuICBpZD86IG51bWJlciB8IHN0cmluZ1xuICBvcGVyYXRpb246ICdjcmVhdGUnIHwgJ3VwZGF0ZSdcbiAgb3ZlcnJpZGVBY2Nlc3M6IGJvb2xlYW5cbiAgcmVxOiBQYXlsb2FkUmVxdWVzdFxuICBzaWJsaW5nRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgc2libGluZ0RvYzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgc2libGluZ0RvY0tleXM/OiBTZXQ8c3RyaW5nPlxufVxuXG5leHBvcnQgY29uc3QgdHJhdmVyc2VGaWVsZHMgPSBhc3luYyA8VD4oe1xuICBpZCxcbiAgY29sbGVjdGlvbixcbiAgY29udGV4dCxcbiAgZGF0YSxcbiAgZG9jLFxuICBmaWVsZHMsXG4gIGdsb2JhbCxcbiAgb3BlcmF0aW9uLFxuICBvdmVycmlkZUFjY2VzcyxcbiAgcmVxLFxuICBzaWJsaW5nRGF0YSxcbiAgc2libGluZ0RvYyxcbiAgc2libGluZ0RvY0tleXM6IGluY29taW5nU2libGluZ0RvY0tleXMsXG59OiBBcmdzPFQ+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHByb21pc2VzID0gW11cbiAgY29uc3Qgc2libGluZ0RvY0tleXMgPSBpbmNvbWluZ1NpYmxpbmdEb2NLZXlzIHx8IG5ldyBTZXQoT2JqZWN0LmtleXMoc2libGluZ0RvYykpXG5cbiAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIHByb21pc2Uoe1xuICAgICAgICBpZCxcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZG9jLFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgZ2xvYmFsLFxuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICByZXEsXG4gICAgICAgIHNpYmxpbmdEYXRhLFxuICAgICAgICBzaWJsaW5nRG9jLFxuICAgICAgICBzaWJsaW5nRG9jS2V5cyxcbiAgICAgIH0pLFxuICAgIClcbiAgfSlcblxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcblxuICAvLyBGb3IgYW55IHNpYmxpbmdEb2NLZXlzIHRoYXQgaGF2ZSBub3QgYmVlbiBkZWxldGVkLFxuICAvLyB3ZSB3aWxsIG1vdmUgdGhlIGRhdGEgdG8gdGhlIHNpYmxpbmdEYXRhIG9iamVjdFxuICAvLyB0byBwcmVzZXJ2ZSBpdFxuICBzaWJsaW5nRG9jS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoIVsnY3JlYXRlZEF0JywgJ2dsb2JhbFR5cGUnLCAnaWQnLCAndXBkYXRlZEF0J10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgc2libGluZ0RhdGFba2V5XSA9IHNpYmxpbmdEb2Nba2V5XVxuICAgIH1cbiAgfSlcbn1cbiJdLCJuYW1lcyI6WyJ0cmF2ZXJzZUZpZWxkcyIsImlkIiwiY29sbGVjdGlvbiIsImNvbnRleHQiLCJkYXRhIiwiZG9jIiwiZmllbGRzIiwiZ2xvYmFsIiwib3BlcmF0aW9uIiwib3ZlcnJpZGVBY2Nlc3MiLCJyZXEiLCJzaWJsaW5nRGF0YSIsInNpYmxpbmdEb2MiLCJzaWJsaW5nRG9jS2V5cyIsImluY29taW5nU2libGluZ0RvY0tleXMiLCJwcm9taXNlcyIsIlNldCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiZmllbGQiLCJwdXNoIiwicHJvbWlzZSIsIlByb21pc2UiLCJhbGwiLCJrZXkiLCJpbmNsdWRlcyJdLCJyYW5nZU1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7IiwibWFwcGluZ3MiOiI7Ozs7K0JBdUJhQTs7O2VBQUFBOzs7eUJBbEJXO0FBa0JqQixNQUFNQSxpQkFBaUIsT0FBVSxFQUN0Q0MsRUFBRSxFQUNGQyxVQUFVLEVBQ1ZDLE9BQU8sRUFDUEMsSUFBSSxFQUNKQyxHQUFHLEVBQ0hDLE1BQU0sRUFDTkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLGNBQWMsRUFDZEMsR0FBRyxFQUNIQyxXQUFXLEVBQ1hDLFVBQVUsRUFDVkMsZ0JBQWdCQyxzQkFBc0IsRUFDOUI7SUFDUixNQUFNQyxXQUFXLEVBQUU7SUFDbkIsTUFBTUYsaUJBQWlCQywwQkFBMEIsSUFBSUUsSUFBSUMsT0FBT0MsSUFBSSxDQUFDTjtJQUVyRU4sT0FBT2EsT0FBTyxDQUFDLENBQUNDO1FBQ2RMLFNBQVNNLElBQUksQ0FDWEMsSUFBQUEsZ0JBQU8sRUFBQztZQUNOckI7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQWU7WUFDQWI7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7WUFDQUM7UUFDRjtJQUVKO0lBRUEsTUFBTVUsUUFBUUMsR0FBRyxDQUFDVDtJQUVsQixxREFBcUQ7SUFDckQsa0RBQWtEO0lBQ2xELGlCQUFpQjtJQUNqQkYsZUFBZU0sT0FBTyxDQUFDLENBQUNNO1FBQ3RCLElBQUksQ0FBQztZQUFDO1lBQWE7WUFBYztZQUFNO1NBQVksQ0FBQ0MsUUFBUSxDQUFDRCxNQUFNO1lBQ2pFZCxXQUFXLENBQUNjLElBQUksR0FBR2IsVUFBVSxDQUFDYSxJQUFJO1FBQ3BDO0lBQ0Y7QUFDRiJ9