single-scripture-rcl 3.4.0 → 3.4.1-beta
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.
- package/dist/components/ScriptureCard/ScriptureCard.js +702 -392
- package/dist/components/ScripturePane/ScripturePane.js +59 -29
- package/dist/components/VerseSelectorPopup/index.js +1 -1
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/useScripture.js +388 -112
- package/dist/hooks/useScriptureAlignmentEdit.js +88 -74
- package/dist/hooks/useScriptureResources.js +20 -18
- package/dist/hooks/useScriptureSelector.js +12 -12
- package/dist/hooks/useScriptureSettings.js +35 -39
- package/dist/utils/ScriptureSettings.js +11 -6
- package/dist/utils/index.js +2 -1
- package/dist/utils/maps.js +41 -0
- package/package.json +5 -4
|
@@ -2,16 +2,23 @@ import "core-js/modules/es.array.concat.js";
|
|
|
2
2
|
import "core-js/modules/es.array.every.js";
|
|
3
3
|
import "core-js/modules/es.array.filter.js";
|
|
4
4
|
import "core-js/modules/es.array.find-index.js";
|
|
5
|
+
import "core-js/modules/es.array.for-each.js";
|
|
5
6
|
import "core-js/modules/es.array.includes.js";
|
|
6
7
|
import "core-js/modules/es.array.is-array.js";
|
|
8
|
+
import "core-js/modules/es.array.iterator.js";
|
|
7
9
|
import "core-js/modules/es.array.join.js";
|
|
8
10
|
import "core-js/modules/es.array.map.js";
|
|
11
|
+
import "core-js/modules/es.map.js";
|
|
9
12
|
import "core-js/modules/es.object.keys.js";
|
|
13
|
+
import "core-js/modules/es.object.to-string.js";
|
|
10
14
|
import "core-js/modules/es.object.values.js";
|
|
11
15
|
import "core-js/modules/es.parse-int.js";
|
|
12
16
|
import "core-js/modules/es.regexp.exec.js";
|
|
13
17
|
import "core-js/modules/es.string.includes.js";
|
|
18
|
+
import "core-js/modules/es.string.iterator.js";
|
|
14
19
|
import "core-js/modules/es.string.split.js";
|
|
20
|
+
import "core-js/modules/web.dom-collections.for-each.js";
|
|
21
|
+
import "core-js/modules/web.dom-collections.iterator.js";
|
|
15
22
|
import "regenerator-runtime/runtime.js";
|
|
16
23
|
|
|
17
24
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
@@ -50,19 +57,24 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
50
57
|
|
|
51
58
|
import * as React from 'react';
|
|
52
59
|
import * as PropTypes from 'prop-types';
|
|
53
|
-
import { core } from 'scripture-resources-rcl';
|
|
60
|
+
import { core, SelectionsContextProvider } from 'scripture-resources-rcl';
|
|
54
61
|
import usfmjs from 'usfm-js';
|
|
55
62
|
import { useEdit } from 'gitea-react-toolkit';
|
|
56
63
|
import { MdUpdate, MdUpdateDisabled } from 'react-icons/md';
|
|
57
64
|
import { FiShare } from 'react-icons/fi';
|
|
58
65
|
import { IconButton } from '@mui/material';
|
|
59
66
|
import { RxLink2, RxLinkBreak2 } from 'react-icons/rx';
|
|
60
|
-
import { Card,
|
|
67
|
+
import { Card, ErrorDialog, ERROR_STATE, MANIFEST_NOT_LOADED_ERROR, UpdateBranchButton, useBranchMerger, useCardState, useContentUpdateProps, useUserBranch } from 'translation-helps-rcl'; // @ts-ignore
|
|
68
|
+
|
|
69
|
+
import { getQuoteMatchesInBookRef } from 'uw-quote-helpers';
|
|
61
70
|
import { AlignmentHelpers, UsfmFileConversionHelpers } from 'word-aligner-rcl';
|
|
62
71
|
import * as isEqual from 'deep-equal';
|
|
72
|
+
import { getVerses } from 'bible-reference-range';
|
|
63
73
|
import { ScripturePane, ScriptureSelector } from '..';
|
|
64
74
|
import { useScriptureSettings } from '../../hooks/useScriptureSettings';
|
|
65
|
-
import { getResourceLink, getResourceMessage, getScriptureVersionSettings, isOriginalBible } from '../../utils/ScriptureSettings';
|
|
75
|
+
import { cleanupVerseObjects, fixOccurrence, getResourceLink, getResourceMessage, getScriptureVersionSettings, isOriginalBible } from '../../utils/ScriptureSettings';
|
|
76
|
+
import { delay } from '../../utils/delay';
|
|
77
|
+
import { areMapsTheSame } from '../../utils/maps';
|
|
66
78
|
import { Title } from '../ScripturePane/styled';
|
|
67
79
|
import { NT_ORIG_LANG, ORIGINAL_SOURCE, OT_ORIG_LANG } from '../../utils';
|
|
68
80
|
import { VerseSelectorPopup } from '../VerseSelectorPopup';
|
|
@@ -72,79 +84,140 @@ var style = {
|
|
|
72
84
|
marginTop: '16px',
|
|
73
85
|
width: '500px'
|
|
74
86
|
};
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
87
|
+
/**
|
|
88
|
+
* create a short comparison verse ref object without all the verseData
|
|
89
|
+
* @param verseRef
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
function compareObject(verseRef) {
|
|
93
|
+
var _verseData$verseObjec;
|
|
94
|
+
|
|
95
|
+
var _ref = verseRef || {},
|
|
96
|
+
chapter = _ref.chapter,
|
|
97
|
+
verse = _ref.verse,
|
|
98
|
+
verseData = _ref.verseData;
|
|
99
|
+
|
|
100
|
+
var verseObjects = (verseData === null || verseData === void 0 ? void 0 : (_verseData$verseObjec = verseData.verseObjects) === null || _verseData$verseObjec === void 0 ? void 0 : _verseData$verseObjec.length) || 0;
|
|
101
|
+
return {
|
|
102
|
+
chapter: chapter,
|
|
103
|
+
verse: verse,
|
|
104
|
+
verseObjects: verseObjects
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* compare two verse refs to see if they are substantially similar
|
|
109
|
+
* @param versesForRef1
|
|
110
|
+
* @param versesForRef2
|
|
111
|
+
*/
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
function areVersesSame(versesForRef1, versesForRef2) {
|
|
115
|
+
versesForRef1 = versesForRef1 || [];
|
|
116
|
+
versesForRef2 = versesForRef2 || [];
|
|
117
|
+
var areSame = false;
|
|
118
|
+
|
|
119
|
+
if (versesForRef1.length === versesForRef2.length) {
|
|
120
|
+
areSame = true;
|
|
121
|
+
|
|
122
|
+
for (var i = 0, l = versesForRef1.length; i < l; i++) {
|
|
123
|
+
var verse1 = compareObject(versesForRef1[i]);
|
|
124
|
+
var verse2 = compareObject(versesForRef2[i]);
|
|
125
|
+
areSame = isEqual(verse1, verse2);
|
|
126
|
+
|
|
127
|
+
if (!areSame) {
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
return areSame;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export default function ScriptureCard(_ref2) {
|
|
137
|
+
var _scriptureConfig$reso, _scriptureConfig$reso2, _scriptureConfig$reso3, _scriptureConfig$reso4, _authentication$token, _scriptureConfig$reso6, _scriptureConfig$reso7, _scriptureConfig$reso8, _httpConfig, _httpConfig2, _versesForRef3, _versesForRef4;
|
|
138
|
+
|
|
139
|
+
var appRef = _ref2.appRef,
|
|
140
|
+
authentication = _ref2.authentication,
|
|
141
|
+
bookIndex = _ref2.bookIndex,
|
|
142
|
+
cardNum = _ref2.cardNum,
|
|
143
|
+
classes = _ref2.classes,
|
|
144
|
+
disableWordPopover = _ref2.disableWordPopover,
|
|
145
|
+
getLanguage = _ref2.getLanguage,
|
|
146
|
+
getLexiconData = _ref2.getLexiconData,
|
|
147
|
+
greekRepoUrl = _ref2.greekRepoUrl,
|
|
148
|
+
hebrewRepoUrl = _ref2.hebrewRepoUrl,
|
|
149
|
+
httpConfig = _ref2.httpConfig,
|
|
150
|
+
id = _ref2.id,
|
|
151
|
+
isNT = _ref2.isNT,
|
|
152
|
+
loggedInUser = _ref2.loggedInUser,
|
|
153
|
+
onMinimize = _ref2.onMinimize,
|
|
154
|
+
onResourceError = _ref2.onResourceError,
|
|
155
|
+
originalScriptureBookObjects = _ref2.originalScriptureBookObjects,
|
|
156
|
+
reference = _ref2.reference,
|
|
157
|
+
_ref2$resource = _ref2.resource,
|
|
158
|
+
owner = _ref2$resource.owner,
|
|
159
|
+
languageId = _ref2$resource.languageId,
|
|
160
|
+
resourceId = _ref2$resource.resourceId,
|
|
161
|
+
originalLanguageOwner = _ref2$resource.originalLanguageOwner,
|
|
162
|
+
resourceLink = _ref2.resourceLink,
|
|
163
|
+
selectedQuote = _ref2.selectedQuote,
|
|
164
|
+
server = _ref2.server,
|
|
165
|
+
setCardsLoading = _ref2.setCardsLoading,
|
|
166
|
+
setCardsSaving = _ref2.setCardsSaving,
|
|
167
|
+
setSavedChanges = _ref2.setSavedChanges,
|
|
168
|
+
setWordAlignerStatus = _ref2.setWordAlignerStatus,
|
|
169
|
+
translate = _ref2.translate,
|
|
170
|
+
title = _ref2.title,
|
|
171
|
+
useUserLocalStorage = _ref2.useUserLocalStorage,
|
|
172
|
+
updateMergeState = _ref2.updateMergeState;
|
|
173
|
+
var bookId = reference === null || reference === void 0 ? void 0 : reference.projectId;
|
|
115
174
|
|
|
116
175
|
var _React$useState = React.useState({
|
|
176
|
+
checkForEditBranch: 0,
|
|
177
|
+
currentReference: null,
|
|
178
|
+
editBranchReady: false,
|
|
117
179
|
haveUnsavedChanges: false,
|
|
180
|
+
lastSelectedQuote: null,
|
|
181
|
+
readyForFetch: false,
|
|
118
182
|
ref: appRef,
|
|
119
183
|
saveClicked: false,
|
|
120
184
|
saveContent: null,
|
|
185
|
+
selections: new Map(),
|
|
121
186
|
sha: null,
|
|
187
|
+
showAlignmentPopup: false,
|
|
122
188
|
startSave: false,
|
|
123
189
|
urlError: null,
|
|
124
190
|
usingUserBranch: false,
|
|
125
191
|
unsavedChangesList: {},
|
|
192
|
+
versesAlignmentStatus: null,
|
|
126
193
|
versesForRef: null,
|
|
127
|
-
|
|
128
|
-
verseSelectedForAlignment: null
|
|
129
|
-
versesAlignmentStatus: null
|
|
194
|
+
verseObjectsMap: new Map(),
|
|
195
|
+
verseSelectedForAlignment: null
|
|
130
196
|
}),
|
|
131
197
|
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
132
198
|
state = _React$useState2[0],
|
|
133
199
|
setState_ = _React$useState2[1];
|
|
134
200
|
|
|
135
|
-
var
|
|
201
|
+
var checkForEditBranch = state.checkForEditBranch,
|
|
202
|
+
currentReference = state.currentReference,
|
|
203
|
+
editBranchReady = state.editBranchReady,
|
|
204
|
+
haveUnsavedChanges = state.haveUnsavedChanges,
|
|
205
|
+
lastSelectedQuote = state.lastSelectedQuote,
|
|
206
|
+
readyForFetch = state.readyForFetch,
|
|
207
|
+
ref = state.ref,
|
|
136
208
|
saveClicked = state.saveClicked,
|
|
137
209
|
saveContent = state.saveContent,
|
|
210
|
+
selections = state.selections,
|
|
138
211
|
sha = state.sha,
|
|
212
|
+
showAlignmentPopup = state.showAlignmentPopup,
|
|
139
213
|
startSave = state.startSave,
|
|
140
214
|
urlError = state.urlError,
|
|
141
215
|
usingUserBranch = state.usingUserBranch,
|
|
142
216
|
unsavedChangesList = state.unsavedChangesList,
|
|
143
|
-
|
|
144
|
-
versesForRef = state.versesForRef,
|
|
145
|
-
showAlignmentPopup = state.showAlignmentPopup,
|
|
217
|
+
verseObjectsMap = state.verseObjectsMap,
|
|
146
218
|
verseSelectedForAlignment = state.verseSelectedForAlignment,
|
|
147
|
-
versesAlignmentStatus = state.versesAlignmentStatus
|
|
219
|
+
versesAlignmentStatus = state.versesAlignmentStatus,
|
|
220
|
+
versesForRef = state.versesForRef;
|
|
148
221
|
|
|
149
222
|
var _useUserLocalStorage = useUserLocalStorage(KEY_FONT_SIZE_BASE + cardNum, 100),
|
|
150
223
|
_useUserLocalStorage2 = _slicedToArray(_useUserLocalStorage, 2),
|
|
@@ -163,34 +236,34 @@ export default function ScriptureCard(_ref) {
|
|
|
163
236
|
httpConfig = _objectSpread(_objectSpread({}, httpConfig), {}, {
|
|
164
237
|
cache: {
|
|
165
238
|
maxAge: 0
|
|
166
|
-
}
|
|
239
|
+
},
|
|
240
|
+
noCache: true
|
|
167
241
|
}); // disable http caching
|
|
168
242
|
}
|
|
169
243
|
|
|
170
244
|
var _useScriptureSettings = useScriptureSettings({
|
|
171
|
-
isNT: isNT,
|
|
172
|
-
title: title,
|
|
173
|
-
verse: verse,
|
|
174
|
-
owner: owner,
|
|
175
|
-
bookId: bookId,
|
|
176
245
|
appRef: ref,
|
|
177
|
-
server: server,
|
|
178
246
|
cardNum: cardNum,
|
|
179
|
-
|
|
247
|
+
disableWordPopover: disableWordPopover,
|
|
248
|
+
greekRepoUrl: greekRepoUrl,
|
|
249
|
+
hebrewRepoUrl: hebrewRepoUrl,
|
|
250
|
+
httpConfig: httpConfig,
|
|
251
|
+
isNT: isNT,
|
|
180
252
|
languageId: languageId,
|
|
253
|
+
originalLanguageOwner: originalLanguageOwner,
|
|
254
|
+
owner: owner,
|
|
255
|
+
readyForFetch: readyForFetch,
|
|
256
|
+
reference: currentReference || reference,
|
|
181
257
|
resourceId: resourceId,
|
|
182
258
|
resourceLink: resourceLink,
|
|
183
|
-
useUserLocalStorage: useUserLocalStorage,
|
|
184
|
-
disableWordPopover: disableWordPopover,
|
|
185
|
-
originalLanguageOwner: originalLanguageOwner,
|
|
186
259
|
setUrlError: function setUrlError(error) {
|
|
187
260
|
return setState({
|
|
188
261
|
urlError: error
|
|
189
262
|
});
|
|
190
263
|
},
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
264
|
+
server: server,
|
|
265
|
+
title: title,
|
|
266
|
+
useUserLocalStorage: useUserLocalStorage,
|
|
194
267
|
wholeBook: true
|
|
195
268
|
}),
|
|
196
269
|
isNewTestament = _useScriptureSettings.isNewTestament,
|
|
@@ -204,14 +277,23 @@ export default function ScriptureCard(_ref) {
|
|
|
204
277
|
var repo = "".concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso = scriptureConfig.resource) === null || _scriptureConfig$reso === void 0 ? void 0 : _scriptureConfig$reso.languageId, "_").concat(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso2 = scriptureConfig.resource) === null || _scriptureConfig$reso2 === void 0 ? void 0 : _scriptureConfig$reso2.projectId);
|
|
205
278
|
var reference_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.reference) || null;
|
|
206
279
|
React.useEffect(function () {
|
|
207
|
-
var _fetchResp_$data;
|
|
280
|
+
var _fetchResp_$data, _fetchResp_$data2;
|
|
208
281
|
|
|
209
282
|
// get the _sha from last scripture download
|
|
210
283
|
var _sha = (fetchResp_ === null || fetchResp_ === void 0 ? void 0 : (_fetchResp_$data = fetchResp_.data) === null || _fetchResp_$data === void 0 ? void 0 : _fetchResp_$data.sha) || null;
|
|
211
284
|
|
|
212
|
-
|
|
285
|
+
var url = (fetchResp_ === null || fetchResp_ === void 0 ? void 0 : (_fetchResp_$data2 = fetchResp_.data) === null || _fetchResp_$data2 === void 0 ? void 0 : _fetchResp_$data2.download_url) || null;
|
|
286
|
+
var validBranch = true;
|
|
287
|
+
|
|
288
|
+
if (_sha) {
|
|
289
|
+
// TRICKY: since this fetch may be delayed - make sure it was for the current branch before using the sha
|
|
290
|
+
var parts = (url || '').split('/');
|
|
291
|
+
var fetchBranch = parts.length > 7 ? parts[7] : '';
|
|
292
|
+
validBranch = fetchBranch === ref;
|
|
293
|
+
}
|
|
213
294
|
|
|
214
|
-
if (_sha !== sha) {
|
|
295
|
+
if (validBranch && _sha !== sha) {
|
|
296
|
+
console.log("ScriptureCard: for ".concat(url, " ").concat(JSON.stringify(reference_), " new sha is ").concat(_sha));
|
|
215
297
|
setState({
|
|
216
298
|
sha: _sha
|
|
217
299
|
});
|
|
@@ -221,24 +303,28 @@ export default function ScriptureCard(_ref) {
|
|
|
221
303
|
var cardResourceId = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso3 = scriptureConfig.resource) === null || _scriptureConfig$reso3 === void 0 ? void 0 : _scriptureConfig$reso3.projectId) || resourceId; // @ts-ignore
|
|
222
304
|
|
|
223
305
|
var ref_ = (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : (_scriptureConfig$reso4 = scriptureConfig.resource) === null || _scriptureConfig$reso4 === void 0 ? void 0 : _scriptureConfig$reso4.ref) || appRef;
|
|
224
|
-
var canUseEditBranch = loggedInUser && authentication && resourceId !== ORIGINAL_SOURCE && (
|
|
306
|
+
var canUseEditBranch = !!(loggedInUser && authentication && resourceId !== ORIGINAL_SOURCE && ( // TRICKY if not original language and we have login data, then we can use the edit branch
|
|
307
|
+
ref_ === 'master' || ref_.includes(loggedInUser))); // also make sure not a version tag
|
|
225
308
|
|
|
226
309
|
var _useUserBranch = useUserBranch({
|
|
227
|
-
owner: owner,
|
|
228
|
-
server: server,
|
|
229
310
|
appRef: appRef,
|
|
230
|
-
languageId: languageId,
|
|
231
|
-
cardId: id,
|
|
232
|
-
loggedInUser: canUseEditBranch ? loggedInUser : null,
|
|
233
311
|
authentication: canUseEditBranch ? authentication : null,
|
|
312
|
+
bookId: bookId,
|
|
313
|
+
cardId: id,
|
|
234
314
|
cardResourceId: cardResourceId,
|
|
315
|
+
checkForEditBranch: checkForEditBranch,
|
|
316
|
+
languageId: languageId,
|
|
317
|
+
loggedInUser: canUseEditBranch ? loggedInUser : null,
|
|
318
|
+
owner: owner,
|
|
235
319
|
onResourceError: onResourceError,
|
|
320
|
+
server: server,
|
|
236
321
|
useUserLocalStorage: useUserLocalStorage
|
|
237
322
|
}),
|
|
238
323
|
_useUserBranch$state = _useUserBranch.state,
|
|
239
|
-
|
|
324
|
+
branchDetermined = _useUserBranch$state.branchDetermined,
|
|
240
325
|
userEditBranchName = _useUserBranch$state.userEditBranchName,
|
|
241
|
-
|
|
326
|
+
_usingUserBranch = _useUserBranch$state.usingUserBranch,
|
|
327
|
+
workingResourceBranch = _useUserBranch$state.workingResourceBranch,
|
|
242
328
|
startEditBranch = _useUserBranch.actions.startEdit;
|
|
243
329
|
|
|
244
330
|
var _useBranchMerger = useBranchMerger({
|
|
@@ -288,24 +374,57 @@ export default function ScriptureCard(_ref) {
|
|
|
288
374
|
}, [isLoading]);
|
|
289
375
|
var workingRef = canUseEditBranch ? workingResourceBranch : appRef;
|
|
290
376
|
var scriptureTitle;
|
|
377
|
+
|
|
378
|
+
if (!canUseEditBranch && !readyForFetch) {
|
|
379
|
+
// if bible not eligible for user branch, make sure it's ready
|
|
380
|
+
setState({
|
|
381
|
+
readyForFetch: true
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
|
|
291
385
|
React.useEffect(function () {
|
|
292
|
-
|
|
293
|
-
|
|
386
|
+
console.log("ScriptureCard book changed", {
|
|
387
|
+
bookId: bookId,
|
|
388
|
+
owner: owner,
|
|
389
|
+
languageId: languageId,
|
|
390
|
+
resourceId: resourceId
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
if (canUseEditBranch) {
|
|
394
|
+
// if bible eligible for user branch, refresh it
|
|
294
395
|
setState({
|
|
295
|
-
|
|
396
|
+
readyForFetch: false,
|
|
397
|
+
checkForEditBranch: checkForEditBranch + 1
|
|
296
398
|
});
|
|
297
399
|
}
|
|
298
|
-
}, [
|
|
400
|
+
}, [bookId, owner, languageId, resourceId]);
|
|
299
401
|
React.useEffect(function () {
|
|
300
|
-
|
|
301
|
-
|
|
402
|
+
if (!isEqual(reference, currentReference)) {
|
|
403
|
+
// console.log(`ScriptureCard reference changed`, reference)
|
|
404
|
+
setState({
|
|
405
|
+
currentReference: reference
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
}, [reference]);
|
|
409
|
+
React.useEffect(function () {
|
|
410
|
+
// waiting for branch fetch to complete
|
|
411
|
+
console.log("ScriptureCard branchDetermined is ".concat(branchDetermined, " and workingRef is ").concat(workingRef, " and readyForFetch is ").concat(readyForFetch));
|
|
302
412
|
|
|
303
|
-
if (
|
|
413
|
+
if (!readyForFetch && branchDetermined) {
|
|
304
414
|
setState({
|
|
305
|
-
|
|
415
|
+
readyForFetch: true,
|
|
416
|
+
ref: workingRef
|
|
306
417
|
});
|
|
307
418
|
}
|
|
308
|
-
}, [
|
|
419
|
+
}, [branchDetermined]);
|
|
420
|
+
React.useEffect(function () {
|
|
421
|
+
// select correct working ref - could be master, user branch, or release
|
|
422
|
+
if (_usingUserBranch !== usingUserBranch) {
|
|
423
|
+
setState({
|
|
424
|
+
usingUserBranch: _usingUserBranch
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
}, [_usingUserBranch, usingUserBranch]);
|
|
309
428
|
React.useEffect(function () {
|
|
310
429
|
var _scriptureConfig$reso5;
|
|
311
430
|
|
|
@@ -360,7 +479,7 @@ export default function ScriptureCard(_ref) {
|
|
|
360
479
|
});
|
|
361
480
|
var direction = (language === null || language === void 0 ? void 0 : language.direction) || 'ltr';
|
|
362
481
|
|
|
363
|
-
var
|
|
482
|
+
var _reference = currentReference || reference;
|
|
364
483
|
|
|
365
484
|
var isHebrew = languageId_ === 'hbo';
|
|
366
485
|
var fontFactor = isHebrew ? 1.4 : 1; // we automatically scale up font size for Hebrew
|
|
@@ -402,66 +521,13 @@ export default function ScriptureCard(_ref) {
|
|
|
402
521
|
disableWordPopover_ = !usingOriginalBible;
|
|
403
522
|
}
|
|
404
523
|
|
|
405
|
-
React.useEffect(function () {
|
|
406
|
-
// pre-cache glosses on verse change
|
|
407
|
-
var fetchGlossDataForVerse = /*#__PURE__*/function () {
|
|
408
|
-
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
409
|
-
var _verseObjects2;
|
|
410
|
-
|
|
411
|
-
var verseObjects, _iterator, _step, _verseRef$verseData, verseRef, _verseObjects;
|
|
412
|
-
|
|
413
|
-
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
414
|
-
while (1) {
|
|
415
|
-
switch (_context.prev = _context.next) {
|
|
416
|
-
case 0:
|
|
417
|
-
verseObjects = []; // get verse objects of all the verses
|
|
418
|
-
|
|
419
|
-
_iterator = _createForOfIteratorHelper((scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef) || []);
|
|
420
|
-
|
|
421
|
-
try {
|
|
422
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
423
|
-
verseRef = _step.value;
|
|
424
|
-
_verseObjects = verseRef === null || verseRef === void 0 ? void 0 : (_verseRef$verseData = verseRef.verseData) === null || _verseRef$verseData === void 0 ? void 0 : _verseRef$verseData.verseObjects;
|
|
425
|
-
verseObjects = verseObjects.concat(_verseObjects);
|
|
426
|
-
}
|
|
427
|
-
} catch (err) {
|
|
428
|
-
_iterator.e(err);
|
|
429
|
-
} finally {
|
|
430
|
-
_iterator.f();
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
if (!(!disableWordPopover && (_verseObjects2 = verseObjects) !== null && _verseObjects2 !== void 0 && _verseObjects2.length && fetchGlossesForVerse)) {
|
|
434
|
-
_context.next = 6;
|
|
435
|
-
break;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
_context.next = 6;
|
|
439
|
-
return fetchGlossesForVerse(verseObjects, languageId_);
|
|
440
|
-
|
|
441
|
-
case 6:
|
|
442
|
-
case "end":
|
|
443
|
-
return _context.stop();
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
}, _callee);
|
|
447
|
-
}));
|
|
448
|
-
|
|
449
|
-
return function fetchGlossDataForVerse() {
|
|
450
|
-
return _ref2.apply(this, arguments);
|
|
451
|
-
};
|
|
452
|
-
}();
|
|
453
|
-
|
|
454
|
-
if (usingOriginalBible) {
|
|
455
|
-
fetchGlossDataForVerse();
|
|
456
|
-
}
|
|
457
|
-
}, [versesForRef, languageId_]);
|
|
458
524
|
var enableEdit = !usingOriginalBible;
|
|
459
525
|
var enableAlignment = !usingOriginalBible;
|
|
460
526
|
var originalRepoUrl = isNewTestament ? greekRepoUrl : hebrewRepoUrl;
|
|
461
527
|
var scriptureAlignmentEditConfig = {
|
|
462
528
|
authentication: canUseEditBranch ? authentication : null,
|
|
463
529
|
bookIndex: bookIndex,
|
|
464
|
-
currentVerseRef:
|
|
530
|
+
currentVerseRef: _reference,
|
|
465
531
|
enableEdit: enableEdit,
|
|
466
532
|
enableAlignment: enableAlignment,
|
|
467
533
|
httpConfig: httpConfig,
|
|
@@ -555,6 +621,7 @@ export default function ScriptureCard(_ref) {
|
|
|
555
621
|
function getBookName() {
|
|
556
622
|
var _scriptureConfig$refe;
|
|
557
623
|
|
|
624
|
+
// @ts-ignore
|
|
558
625
|
var bookCaps = scriptureConfig !== null && scriptureConfig !== void 0 && (_scriptureConfig$refe = scriptureConfig.reference) !== null && _scriptureConfig$refe !== void 0 && _scriptureConfig$refe.projectId ? scriptureConfig.reference.projectId.toUpperCase() : '';
|
|
559
626
|
return "".concat(bookIndex, "-").concat(bookCaps, ".usfm");
|
|
560
627
|
}
|
|
@@ -572,7 +639,8 @@ export default function ScriptureCard(_ref) {
|
|
|
572
639
|
}, authentication === null || authentication === void 0 ? void 0 : authentication.config), {}, {
|
|
573
640
|
token: authentication === null || authentication === void 0 ? void 0 : authentication.token,
|
|
574
641
|
// @ts-ignore
|
|
575
|
-
timeout: ((_httpConfig = httpConfig) === null || _httpConfig === void 0 ? void 0 : _httpConfig.serverTimeOut) || ((_httpConfig2 = httpConfig) === null || _httpConfig2 === void 0 ? void 0 : _httpConfig2.timeout) ||
|
|
642
|
+
timeout: ((_httpConfig = httpConfig) === null || _httpConfig === void 0 ? void 0 : _httpConfig.serverTimeOut) || ((_httpConfig2 = httpConfig) === null || _httpConfig2 === void 0 ? void 0 : _httpConfig2.timeout) || 10000,
|
|
643
|
+
server: server
|
|
576
644
|
}),
|
|
577
645
|
author: loggedInUser,
|
|
578
646
|
token: authentication === null || authentication === void 0 ? void 0 : authentication.token,
|
|
@@ -580,61 +648,59 @@ export default function ScriptureCard(_ref) {
|
|
|
580
648
|
filepath: filepath,
|
|
581
649
|
repo: repo
|
|
582
650
|
}),
|
|
651
|
+
saveError = _useEdit.error,
|
|
652
|
+
isSaveError = _useEdit.isError,
|
|
583
653
|
onSaveEdit = _useEdit.onSaveEdit;
|
|
584
654
|
|
|
655
|
+
React.useEffect(function () {
|
|
656
|
+
// when we get a save saveError
|
|
657
|
+
if (saveError && isSaveError) {
|
|
658
|
+
console.log("save error", saveError); // onResourceError && onResourceError(null, false, null, `Error saving ${languageId_}_${resourceId} ${saveError}`, true)
|
|
659
|
+
}
|
|
660
|
+
}, [saveError, isSaveError]);
|
|
585
661
|
React.useEffect(function () {
|
|
586
662
|
// when startSave goes true, save edits to user branch and then clear startSave
|
|
587
663
|
var _saveEdit = /*#__PURE__*/function () {
|
|
588
|
-
var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function
|
|
589
|
-
|
|
590
|
-
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
664
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|
665
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
591
666
|
while (1) {
|
|
592
|
-
switch (
|
|
667
|
+
switch (_context.prev = _context.next) {
|
|
593
668
|
case 0:
|
|
594
669
|
// begin uploading new USFM
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
_context2.next = 5;
|
|
599
|
-
break;
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
_context2.next = 4;
|
|
603
|
-
return startEditBranch();
|
|
604
|
-
|
|
605
|
-
case 4:
|
|
606
|
-
branch = _context2.sent;
|
|
607
|
-
|
|
608
|
-
case 5:
|
|
609
|
-
_context2.next = 7;
|
|
610
|
-
return onSaveEdit(branch).then(function (success) {
|
|
670
|
+
console.info("saveChangesToCloud() - Using sha: ".concat(sha));
|
|
671
|
+
_context.next = 3;
|
|
672
|
+
return onSaveEdit(userEditBranchName).then(function (success) {
|
|
611
673
|
// push changed to server
|
|
612
674
|
if (success) {
|
|
613
675
|
console.log("saveChangesToCloud() - save scripture edits success");
|
|
614
|
-
setState({
|
|
615
|
-
startSave: false
|
|
616
|
-
});
|
|
617
676
|
var unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
618
677
|
|
|
619
678
|
if (unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length) {
|
|
620
|
-
var
|
|
621
|
-
|
|
679
|
+
var _iterator = _createForOfIteratorHelper(unsavedCardIndices),
|
|
680
|
+
_step;
|
|
622
681
|
|
|
623
682
|
try {
|
|
624
|
-
for (
|
|
625
|
-
var cardIndex =
|
|
683
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
684
|
+
var cardIndex = _step.value;
|
|
626
685
|
var clearChanges = unsavedChangesList[cardIndex].clearChanges;
|
|
627
686
|
clearChanges && clearChanges();
|
|
628
687
|
}
|
|
629
688
|
} catch (err) {
|
|
630
|
-
|
|
689
|
+
_iterator.e(err);
|
|
631
690
|
} finally {
|
|
632
|
-
|
|
691
|
+
_iterator.f();
|
|
633
692
|
}
|
|
634
693
|
}
|
|
635
694
|
|
|
636
695
|
console.info('saveChangesToCloud() - Reloading resource');
|
|
637
|
-
|
|
696
|
+
setState({
|
|
697
|
+
startSave: false,
|
|
698
|
+
readyForFetch: true,
|
|
699
|
+
ref: userEditBranchName
|
|
700
|
+
});
|
|
701
|
+
delay(500).then(function () {
|
|
702
|
+
scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.reloadResource(sha);
|
|
703
|
+
});
|
|
638
704
|
} else {
|
|
639
705
|
console.error('saveChangesToCloud() - saving changed scripture failed');
|
|
640
706
|
setCardsSaving(function (prevCardsSaving) {
|
|
@@ -648,12 +714,12 @@ export default function ScriptureCard(_ref) {
|
|
|
648
714
|
}
|
|
649
715
|
});
|
|
650
716
|
|
|
651
|
-
case
|
|
717
|
+
case 3:
|
|
652
718
|
case "end":
|
|
653
|
-
return
|
|
719
|
+
return _context.stop();
|
|
654
720
|
}
|
|
655
721
|
}
|
|
656
|
-
},
|
|
722
|
+
}, _callee);
|
|
657
723
|
}));
|
|
658
724
|
|
|
659
725
|
return function _saveEdit() {
|
|
@@ -662,14 +728,18 @@ export default function ScriptureCard(_ref) {
|
|
|
662
728
|
}();
|
|
663
729
|
|
|
664
730
|
if (startSave) {
|
|
665
|
-
console.log(
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
731
|
+
if (!editBranchReady) {// console.log(`saveChangesToCloud - edit branch not yet created`)
|
|
732
|
+
} else if (!sha) {// console.log(`saveChangesToCloud - save sha not yet ready`)
|
|
733
|
+
} else {
|
|
734
|
+
// console.log(`saveChangesToCloud - calling _saveEdit()`)
|
|
735
|
+
_saveEdit();
|
|
736
|
+
|
|
737
|
+
setCardsSaving(function (prevCardsSaving) {
|
|
738
|
+
return [].concat(_toConsumableArray(prevCardsSaving), [cardResourceId]);
|
|
739
|
+
});
|
|
740
|
+
}
|
|
671
741
|
}
|
|
672
|
-
}, [startSave]);
|
|
742
|
+
}, [startSave, editBranchReady, sha]);
|
|
673
743
|
/**
|
|
674
744
|
* convert updatedVerseObjects to USFM and merge into the bibleUsfm
|
|
675
745
|
* @param {string} bibleUsfm - USFM of bible
|
|
@@ -704,165 +774,361 @@ export default function ScriptureCard(_ref) {
|
|
|
704
774
|
}
|
|
705
775
|
|
|
706
776
|
React.useEffect(function () {
|
|
707
|
-
// for each unsaved change, call into
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
var _cardNum
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
777
|
+
// for each unsaved change, call into scripturePane to get latest changes for verse to save
|
|
778
|
+
function getReadyForSave() {
|
|
779
|
+
return _getReadyForSave.apply(this, arguments);
|
|
780
|
+
}
|
|
781
|
+
|
|
782
|
+
function _getReadyForSave() {
|
|
783
|
+
_getReadyForSave = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
|
|
784
|
+
var createEditBranch, branch, unsavedCardIndices, bibleUsfm, mergeFail, _cardNum, _iterator2, _step2, _cardIndex, _unsavedChangesList$_2, _getChanges2, _state2, _newUsfm, _getChanges3, _ref6, _updatedVerseObjects, newBookJson, _iterator3, _step3, cardIndex, _cardNum2, _unsavedChangesList$_, getChanges, _state, newUsfm, _getChanges, newVerseText, _ref5, updatedVerseObjects, targetVerseObjects_, _AlignmentHelpers$upd, targetVerseObjects;
|
|
785
|
+
|
|
786
|
+
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
787
|
+
while (1) {
|
|
788
|
+
switch (_context2.prev = _context2.next) {
|
|
789
|
+
case 0:
|
|
790
|
+
if (!saveClicked) {
|
|
791
|
+
_context2.next = 46;
|
|
792
|
+
break;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
createEditBranch = !_usingUserBranch;
|
|
796
|
+
|
|
797
|
+
if (!createEditBranch) {
|
|
798
|
+
// if already using the user branch
|
|
799
|
+
if (workingResourceBranch !== userEditBranchName) {
|
|
800
|
+
console.warn("saveChangesToCloud - state conflict - should be in user branch ".concat(userEditBranchName, ", but actually using ").concat(workingResourceBranch));
|
|
801
|
+
createEditBranch = true;
|
|
802
|
+
} else {
|
|
803
|
+
console.log("saveChangesToCloud - already using edit branch: ".concat(workingResourceBranch));
|
|
804
|
+
setState({
|
|
805
|
+
editBranchReady: true
|
|
806
|
+
});
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
if (!createEditBranch) {
|
|
811
|
+
_context2.next = 10;
|
|
812
|
+
break;
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
// if not yet using the user branch, create it
|
|
816
|
+
console.log("saveChangesToCloud - creating edit branch");
|
|
817
|
+
setState({
|
|
818
|
+
editBranchReady: false,
|
|
819
|
+
readyForFetch: false,
|
|
820
|
+
sha: null
|
|
821
|
+
}); // we will need a new sha for book/branch
|
|
822
|
+
|
|
823
|
+
_context2.next = 8;
|
|
824
|
+
return startEditBranch();
|
|
825
|
+
|
|
826
|
+
case 8:
|
|
827
|
+
branch = _context2.sent;
|
|
828
|
+
|
|
829
|
+
if (branch) {
|
|
830
|
+
console.log("saveChangesToCloud - edit branch created");
|
|
831
|
+
setState({
|
|
832
|
+
editBranchReady: true,
|
|
833
|
+
readyForFetch: true,
|
|
834
|
+
ref: branch
|
|
835
|
+
});
|
|
836
|
+
} else {
|
|
837
|
+
console.log("saveChangesToCloud - failed to create edit branch");
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
case 10:
|
|
841
|
+
console.log("saveChangesToCloud - getting verse changes");
|
|
842
|
+
unsavedCardIndices = Object.keys(unsavedChangesList);
|
|
843
|
+
|
|
844
|
+
if (!(unsavedCardIndices !== null && unsavedCardIndices !== void 0 && unsavedCardIndices.length)) {
|
|
845
|
+
_context2.next = 46;
|
|
846
|
+
break;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
bibleUsfm = core.getResponseData(scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.fetchResponse);
|
|
850
|
+
mergeFail = false;
|
|
851
|
+
_cardNum = 0;
|
|
852
|
+
_iterator2 = _createForOfIteratorHelper(unsavedCardIndices);
|
|
853
|
+
_context2.prev = 17;
|
|
854
|
+
|
|
855
|
+
_iterator2.s();
|
|
856
|
+
|
|
857
|
+
case 19:
|
|
858
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
859
|
+
_context2.next = 35;
|
|
860
|
+
break;
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
_cardIndex = _step2.value;
|
|
864
|
+
_cardNum = parseInt(_cardIndex);
|
|
865
|
+
_unsavedChangesList$_2 = unsavedChangesList[_cardNum], _getChanges2 = _unsavedChangesList$_2.getChanges, _state2 = _unsavedChangesList$_2.state;
|
|
866
|
+
|
|
867
|
+
if (!_getChanges2) {
|
|
868
|
+
_context2.next = 33;
|
|
869
|
+
break;
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
_newUsfm = void 0;
|
|
873
|
+
_getChanges3 = _getChanges2(_state2), _ref6 = _getChanges3.ref, _updatedVerseObjects = _getChanges3.updatedVerseObjects;
|
|
874
|
+
|
|
875
|
+
if (_updatedVerseObjects && bibleUsfm) {
|
|
876
|
+
// just replace verse
|
|
877
|
+
_newUsfm = mergeVerseObjectsIntoBibleUsfm(bibleUsfm, _ref6, _updatedVerseObjects, _cardNum);
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
if (!_newUsfm) {
|
|
881
|
+
_context2.next = 31;
|
|
882
|
+
break;
|
|
883
|
+
}
|
|
738
884
|
|
|
739
|
-
if (_newUsfm) {
|
|
740
885
|
bibleUsfm = _newUsfm;
|
|
741
|
-
|
|
886
|
+
_context2.next = 33;
|
|
887
|
+
break;
|
|
888
|
+
|
|
889
|
+
case 31:
|
|
742
890
|
mergeFail = true;
|
|
891
|
+
return _context2.abrupt("break", 35);
|
|
892
|
+
|
|
893
|
+
case 33:
|
|
894
|
+
_context2.next = 19;
|
|
743
895
|
break;
|
|
744
|
-
}
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
} catch (err) {
|
|
748
|
-
_iterator3.e(err);
|
|
749
|
-
} finally {
|
|
750
|
-
_iterator3.f();
|
|
751
|
-
}
|
|
752
896
|
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
var newBookJson;
|
|
897
|
+
case 35:
|
|
898
|
+
_context2.next = 40;
|
|
899
|
+
break;
|
|
757
900
|
|
|
758
|
-
|
|
759
|
-
|
|
901
|
+
case 37:
|
|
902
|
+
_context2.prev = 37;
|
|
903
|
+
_context2.t0 = _context2["catch"](17);
|
|
760
904
|
|
|
761
|
-
|
|
762
|
-
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
763
|
-
var cardIndex = _step4.value;
|
|
905
|
+
_iterator2.e(_context2.t0);
|
|
764
906
|
|
|
765
|
-
|
|
907
|
+
case 40:
|
|
908
|
+
_context2.prev = 40;
|
|
766
909
|
|
|
767
|
-
|
|
768
|
-
getChanges = _unsavedChangesList$_.getChanges,
|
|
769
|
-
_state = _unsavedChangesList$_.state;
|
|
910
|
+
_iterator2.f();
|
|
770
911
|
|
|
771
|
-
|
|
772
|
-
var newUsfm = void 0;
|
|
912
|
+
return _context2.finish(40);
|
|
773
913
|
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
914
|
+
case 43:
|
|
915
|
+
if (mergeFail) {
|
|
916
|
+
// if we failed to merge, fallback to brute force verse objects to USFM
|
|
917
|
+
console.log("saveChangesToCloud(".concat(_cardNum, ") - verse not found, falling back to inserting verse object"));
|
|
918
|
+
_iterator3 = _createForOfIteratorHelper(unsavedCardIndices);
|
|
778
919
|
|
|
779
|
-
|
|
780
|
-
|
|
920
|
+
try {
|
|
921
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
922
|
+
cardIndex = _step3.value;
|
|
923
|
+
_cardNum2 = parseInt(cardIndex);
|
|
924
|
+
_unsavedChangesList$_ = unsavedChangesList[_cardNum2], getChanges = _unsavedChangesList$_.getChanges, _state = _unsavedChangesList$_.state;
|
|
781
925
|
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
targetVerseObjects = _AlignmentHelpers$upd.targetVerseObjects;
|
|
926
|
+
if (getChanges) {
|
|
927
|
+
newUsfm = void 0;
|
|
928
|
+
_getChanges = getChanges(_state), newVerseText = _getChanges.newVerseText, _ref5 = _getChanges.ref, updatedVerseObjects = _getChanges.updatedVerseObjects;
|
|
786
929
|
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
930
|
+
if (updatedVerseObjects && !newUsfm) {
|
|
931
|
+
targetVerseObjects_ = null;
|
|
932
|
+
|
|
933
|
+
if (_ref5) {
|
|
934
|
+
if (newVerseText) {
|
|
935
|
+
_AlignmentHelpers$upd = AlignmentHelpers.updateAlignmentsToTargetVerse(updatedVerseObjects, newVerseText), targetVerseObjects = _AlignmentHelpers$upd.targetVerseObjects;
|
|
936
|
+
targetVerseObjects_ = targetVerseObjects;
|
|
937
|
+
} else {
|
|
938
|
+
targetVerseObjects_ = updatedVerseObjects;
|
|
939
|
+
}
|
|
791
940
|
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
941
|
+
newBookJson = targetVerseObjects_ && (scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.updateVerse(_ref5.chapter, _ref5.verse, {
|
|
942
|
+
verseObjects: targetVerseObjects_
|
|
943
|
+
}));
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
} catch (err) {
|
|
949
|
+
_iterator3.e(err);
|
|
950
|
+
} finally {
|
|
951
|
+
_iterator3.f();
|
|
795
952
|
}
|
|
953
|
+
|
|
954
|
+
bibleUsfm = usfmjs.toUSFM(newBookJson, {
|
|
955
|
+
forcedNewLines: true
|
|
956
|
+
});
|
|
796
957
|
}
|
|
958
|
+
|
|
959
|
+
console.log("saveChangesToCloud() - saving new USFM: ".concat(bibleUsfm.substring(0, 100), "..."));
|
|
960
|
+
setState({
|
|
961
|
+
saveContent: bibleUsfm,
|
|
962
|
+
startSave: true,
|
|
963
|
+
saveClicked: false
|
|
964
|
+
});
|
|
965
|
+
|
|
966
|
+
case 46:
|
|
967
|
+
case "end":
|
|
968
|
+
return _context2.stop();
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
}, _callee2, null, [[17, 37, 40, 43]]);
|
|
972
|
+
}));
|
|
973
|
+
return _getReadyForSave.apply(this, arguments);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
getReadyForSave();
|
|
977
|
+
}, [saveClicked]); // @ts-ignore
|
|
978
|
+
|
|
979
|
+
var _ref7 = _reference || {},
|
|
980
|
+
chapter = _ref7.chapter;
|
|
981
|
+
|
|
982
|
+
React.useEffect(function () {
|
|
983
|
+
var _versesForRef = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef;
|
|
984
|
+
|
|
985
|
+
var newSelections = new Map();
|
|
986
|
+
var updateSelections = false;
|
|
987
|
+
var _map = newSelections;
|
|
988
|
+
var originalBookId = originalScriptureBookObjects === null || originalScriptureBookObjects === void 0 ? void 0 : originalScriptureBookObjects.bookId;
|
|
989
|
+
var bookVerseObject = originalScriptureBookObjects === null || originalScriptureBookObjects === void 0 ? void 0 : originalScriptureBookObjects.chapters;
|
|
990
|
+
var newSelectedQuote = null; // if we have everything we need to calculate selections
|
|
991
|
+
|
|
992
|
+
if (_versesForRef !== null && _versesForRef !== void 0 && _versesForRef.length && bookVerseObject && bookId === originalBookId && bookVerseObject[chapter] && // we need to have data for chapter
|
|
993
|
+
selectedQuote !== null && selectedQuote !== void 0 && selectedQuote.quote) {
|
|
994
|
+
// if quote is different than last
|
|
995
|
+
if (!isEqual(lastSelectedQuote, selectedQuote) || !isEqual(versesForRef, _versesForRef)) {
|
|
996
|
+
var _selectedQuote$refere3;
|
|
997
|
+
|
|
998
|
+
var originalVerses = {};
|
|
999
|
+
var substitute = {}; // keep track of verse substitutions
|
|
1000
|
+
|
|
1001
|
+
var startVerse = _versesForRef[0].verse;
|
|
1002
|
+
|
|
1003
|
+
if (typeof startVerse === 'string') {
|
|
1004
|
+
startVerse = parseInt(startVerse);
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
var lastVerse = startVerse;
|
|
1008
|
+
|
|
1009
|
+
for (var i = 0, l = _versesForRef.length; i < l; i++) {
|
|
1010
|
+
var verseRef = _versesForRef[i];
|
|
1011
|
+
var _chapter2 = verseRef.chapter,
|
|
1012
|
+
verse = verseRef.verse; // TRICKY - we remap verses in reference range to a linear series of verses so verse spans don't choke getQuoteMatchesInBookRef
|
|
1013
|
+
|
|
1014
|
+
var _verse = startVerse + i;
|
|
1015
|
+
|
|
1016
|
+
lastVerse = _verse;
|
|
1017
|
+
substitute["".concat(_chapter2, ":").concat(_verse)] = "".concat(_chapter2, ":").concat(verse);
|
|
1018
|
+
|
|
1019
|
+
if (!originalVerses[_chapter2]) {
|
|
1020
|
+
originalVerses[_chapter2] = {};
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
var verseObjects = [];
|
|
1024
|
+
|
|
1025
|
+
if (typeof verse === 'string' && verse.includes('-')) {
|
|
1026
|
+
var verses = getVerses(bookVerseObject, "".concat(_chapter2, ":").concat(verse));
|
|
1027
|
+
|
|
1028
|
+
var _iterator4 = _createForOfIteratorHelper(verses),
|
|
1029
|
+
_step4;
|
|
1030
|
+
|
|
1031
|
+
try {
|
|
1032
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
1033
|
+
var verseItem = _step4.value;
|
|
1034
|
+
var vo = verseItem.verseData.verseObjects;
|
|
1035
|
+
verseObjects = verseObjects.concat(vo);
|
|
797
1036
|
}
|
|
1037
|
+
} catch (err) {
|
|
1038
|
+
_iterator4.e(err);
|
|
1039
|
+
} finally {
|
|
1040
|
+
_iterator4.f();
|
|
798
1041
|
}
|
|
799
|
-
}
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
1042
|
+
} else {
|
|
1043
|
+
var _bookVerseObject$_cha;
|
|
1044
|
+
|
|
1045
|
+
verseObjects = (_bookVerseObject$_cha = bookVerseObject[_chapter2][verse]) === null || _bookVerseObject$_cha === void 0 ? void 0 : _bookVerseObject$_cha.verseObjects;
|
|
803
1046
|
}
|
|
804
1047
|
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
1048
|
+
if (verseObjects) {
|
|
1049
|
+
verseObjects = cleanupVerseObjects(verseObjects);
|
|
1050
|
+
originalVerses[_chapter2][_verse] = {
|
|
1051
|
+
verseObjects: verseObjects
|
|
1052
|
+
};
|
|
1053
|
+
|
|
1054
|
+
_map.set("".concat(_chapter2, ":").concat(verse), verseObjects);
|
|
1055
|
+
}
|
|
1056
|
+
} // create new reference range for new linear verse range
|
|
1057
|
+
|
|
1058
|
+
|
|
1059
|
+
var _selectedQuote$refere = selectedQuote === null || selectedQuote === void 0 ? void 0 : (_selectedQuote$refere3 = selectedQuote.reference) === null || _selectedQuote$refere3 === void 0 ? void 0 : _selectedQuote$refere3.split(':'),
|
|
1060
|
+
_selectedQuote$refere2 = _slicedToArray(_selectedQuote$refere, 1),
|
|
1061
|
+
_chapter = _selectedQuote$refere2[0];
|
|
1062
|
+
|
|
1063
|
+
var subRef = "".concat(_chapter, ":").concat(startVerse);
|
|
1064
|
+
|
|
1065
|
+
if (lastVerse != startVerse) {
|
|
1066
|
+
subRef += "-".concat(lastVerse);
|
|
808
1067
|
}
|
|
809
1068
|
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
1069
|
+
var quoteMatches = getQuoteMatchesInBookRef({
|
|
1070
|
+
bookObject: originalVerses,
|
|
1071
|
+
ref: subRef,
|
|
1072
|
+
quote: selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.quote,
|
|
1073
|
+
occurrence: selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.occurrence
|
|
815
1074
|
});
|
|
1075
|
+
|
|
1076
|
+
var _selections = new Map();
|
|
1077
|
+
|
|
1078
|
+
if (quoteMatches !== null && quoteMatches !== void 0 && quoteMatches.size) {
|
|
1079
|
+
quoteMatches.forEach(function (words, key) {
|
|
1080
|
+
var _key = substitute[key];
|
|
1081
|
+
|
|
1082
|
+
_selections.set(_key, words.map(function (word) {
|
|
1083
|
+
return _objectSpread(_objectSpread({}, word), {}, {
|
|
1084
|
+
text: core.normalizeString(word.text)
|
|
1085
|
+
});
|
|
1086
|
+
}));
|
|
1087
|
+
});
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
newSelections = _selections;
|
|
1091
|
+
newSelectedQuote = selectedQuote;
|
|
1092
|
+
updateSelections = true;
|
|
816
1093
|
}
|
|
817
1094
|
}
|
|
818
|
-
}, [saveClicked]);
|
|
819
|
-
React.useEffect(function () {
|
|
820
|
-
if (!isEqual(versesForRef, scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef)) {
|
|
821
|
-
var _versesForRef = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef;
|
|
822
1095
|
|
|
823
|
-
|
|
824
|
-
versesForRef: _versesForRef
|
|
825
|
-
});
|
|
1096
|
+
var newState = {}; // update states that have changed
|
|
826
1097
|
|
|
827
|
-
|
|
828
|
-
|
|
1098
|
+
if (!areMapsTheSame(verseObjectsMap, _map)) {
|
|
1099
|
+
newState.verseObjectsMap = _map;
|
|
1100
|
+
}
|
|
829
1101
|
|
|
830
|
-
|
|
831
|
-
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
832
|
-
var verseRef = _step5.value;
|
|
833
|
-
// check for verse range
|
|
834
|
-
var _verse = verseRef.verse;
|
|
1102
|
+
var booksNotSame = (reference === null || reference === void 0 ? void 0 : reference.projectId) !== (currentReference === null || currentReference === void 0 ? void 0 : currentReference.projectId);
|
|
835
1103
|
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
1104
|
+
if (booksNotSame || !areVersesSame(versesForRef, _versesForRef)) {
|
|
1105
|
+
newState.versesForRef = _versesForRef;
|
|
1106
|
+
newState.lastSelectedQuote = newSelectedQuote;
|
|
1107
|
+
newState.selections = newSelections;
|
|
1108
|
+
}
|
|
840
1109
|
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
_iterator5.f();
|
|
1110
|
+
if (newSelectedQuote) {
|
|
1111
|
+
newState.lastSelectedQuote = newSelectedQuote;
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
if (updateSelections) {
|
|
1115
|
+
if (!areMapsTheSame(selections || new Map(), newSelections)) {
|
|
1116
|
+
newState.selections = newSelections;
|
|
849
1117
|
}
|
|
850
1118
|
}
|
|
851
|
-
|
|
1119
|
+
|
|
1120
|
+
if (Object.keys(newState).length) {
|
|
1121
|
+
setState(newState);
|
|
1122
|
+
}
|
|
1123
|
+
}, [owner, resourceId, bookId, languageId_, scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef, originalScriptureBookObjects, selectedQuote]);
|
|
852
1124
|
React.useEffect(function () {
|
|
1125
|
+
// clear settings on verse change
|
|
853
1126
|
setState({
|
|
854
|
-
versesAlignmentStatus: null
|
|
1127
|
+
versesAlignmentStatus: null,
|
|
1128
|
+
unsavedChangesList: {},
|
|
1129
|
+
haveUnsavedChanges: false
|
|
855
1130
|
});
|
|
856
|
-
}, [
|
|
857
|
-
var needToMergeFromMaster = mergeFromMaster === null || mergeFromMaster === void 0 ? void 0 : mergeFromMaster.mergeNeeded;
|
|
858
|
-
var mergeFromMasterHasConflicts = mergeFromMaster === null || mergeFromMaster === void 0 ? void 0 : mergeFromMaster.conflict;
|
|
859
|
-
var mergeToMasterHasConflicts = mergeToMaster === null || mergeToMaster === void 0 ? void 0 : mergeToMaster.conflict; // eslint-disable-next-line no-nested-ternary
|
|
860
|
-
|
|
861
|
-
var mergeFromMasterTitle = mergeFromMasterHasConflicts ? 'Merge Conflicts for update from master' : needToMergeFromMaster ? 'Update from master' : 'No merge conflicts for update with master'; // eslint-disable-next-line no-nested-ternary
|
|
862
|
-
|
|
863
|
-
var mergeFromMasterColor = mergeFromMasterHasConflicts ? 'black' : needToMergeFromMaster ? 'black' : 'lightgray';
|
|
864
|
-
var mergeToMasterTitle = mergeToMasterHasConflicts ? 'Merge Conflicts for share with master' : 'No merge conflicts for share with master';
|
|
865
|
-
var mergeToMasterColor = mergeToMasterHasConflicts ? 'black' : 'black';
|
|
1131
|
+
}, [_reference]);
|
|
866
1132
|
|
|
867
1133
|
var updateVersesAlignmentStatus = function updateVersesAlignmentStatus(reference, aligned) {
|
|
868
1134
|
setState_(function (prevState) {
|
|
@@ -872,41 +1138,84 @@ export default function ScriptureCard(_ref) {
|
|
|
872
1138
|
});
|
|
873
1139
|
};
|
|
874
1140
|
|
|
875
|
-
var
|
|
1141
|
+
var _versesForRef = scriptureConfig === null || scriptureConfig === void 0 ? void 0 : scriptureConfig.versesForRef;
|
|
1142
|
+
|
|
1143
|
+
React.useEffect(function () {
|
|
1144
|
+
var _versesForRef2;
|
|
1145
|
+
|
|
1146
|
+
if ((_versesForRef2 = _versesForRef) !== null && _versesForRef2 !== void 0 && _versesForRef2.length) {
|
|
1147
|
+
var _ref8 = scriptureConfig || {},
|
|
1148
|
+
_reference2 = _ref8.reference,
|
|
1149
|
+
_resourceLink2 = _ref8.resourceLink;
|
|
1150
|
+
|
|
1151
|
+
console.log("ScriptureCard._versesForRef changed", {
|
|
1152
|
+
reference: _reference2,
|
|
1153
|
+
resourceLink: _resourceLink2
|
|
1154
|
+
});
|
|
1155
|
+
}
|
|
1156
|
+
}, [_versesForRef]);
|
|
1157
|
+
|
|
1158
|
+
if (!((_versesForRef3 = _versesForRef) !== null && _versesForRef3 !== void 0 && _versesForRef3.length)) {
|
|
1159
|
+
// if empty of references, create single empty reference
|
|
1160
|
+
_versesForRef = [_objectSpread({}, reference)];
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
var needToMergeFromMaster = mergeFromMaster === null || mergeFromMaster === void 0 ? void 0 : mergeFromMaster.mergeNeeded;
|
|
1164
|
+
var mergeFromMasterHasConflicts = mergeFromMaster === null || mergeFromMaster === void 0 ? void 0 : mergeFromMaster.conflict;
|
|
1165
|
+
var mergeToMasterHasConflicts = mergeToMaster === null || mergeToMaster === void 0 ? void 0 : mergeToMaster.conflict; // eslint-disable-next-line no-nested-ternary
|
|
1166
|
+
|
|
1167
|
+
var mergeFromMasterTitle = mergeFromMasterHasConflicts ? 'Merge Conflicts for update from master' : needToMergeFromMaster ? 'Update from master' : 'No merge conflicts for update with master'; // eslint-disable-next-line no-nested-ternary
|
|
1168
|
+
|
|
1169
|
+
var mergeFromMasterColor = mergeFromMasterHasConflicts ? 'black' : needToMergeFromMaster ? 'black' : 'lightgray';
|
|
1170
|
+
var mergeToMasterTitle = mergeToMasterHasConflicts ? 'Merge Conflicts for share with master' : 'No merge conflicts for share with master';
|
|
1171
|
+
var mergeToMasterColor = mergeToMasterHasConflicts ? 'black' : 'black';
|
|
1172
|
+
var renderedScripturePanes = (_versesForRef4 = _versesForRef) === null || _versesForRef4 === void 0 ? void 0 : _versesForRef4.map(function (_currentVerseData, index) {
|
|
876
1173
|
var _currentVerseData$ver;
|
|
877
1174
|
|
|
878
|
-
var initialVerseObjects = (_currentVerseData === null || _currentVerseData === void 0 ? void 0 : (_currentVerseData$ver = _currentVerseData.verseData) === null || _currentVerseData$ver === void 0 ? void 0 : _currentVerseData$ver.verseObjects) ||
|
|
1175
|
+
var initialVerseObjects = (_currentVerseData === null || _currentVerseData === void 0 ? void 0 : (_currentVerseData$ver = _currentVerseData.verseData) === null || _currentVerseData$ver === void 0 ? void 0 : _currentVerseData$ver.verseObjects) || []; // @ts-ignore
|
|
879
1176
|
|
|
880
|
-
var
|
|
881
|
-
chapter =
|
|
882
|
-
verse =
|
|
1177
|
+
var _ref9 = _currentVerseData || {},
|
|
1178
|
+
chapter = _ref9.chapter,
|
|
1179
|
+
verse = _ref9.verse;
|
|
883
1180
|
|
|
884
|
-
var
|
|
1181
|
+
var projectId = (currentReference === null || currentReference === void 0 ? void 0 : currentReference.projectId) || (reference === null || reference === void 0 ? void 0 : reference.projectId);
|
|
1182
|
+
|
|
1183
|
+
var _reference = _objectSpread(_objectSpread({}, _versesForRef), {}, {
|
|
885
1184
|
chapter: chapter,
|
|
1185
|
+
projectId: projectId,
|
|
886
1186
|
verse: verse
|
|
887
1187
|
});
|
|
888
1188
|
|
|
889
1189
|
var _scriptureAlignmentEditConfig = _objectSpread(_objectSpread({}, scriptureAlignmentEditConfig), {}, {
|
|
890
1190
|
currentIndex: index,
|
|
891
1191
|
initialVerseObjects: initialVerseObjects,
|
|
892
|
-
reference: _reference
|
|
1192
|
+
reference: _reference,
|
|
1193
|
+
isNewTestament: isNewTestament
|
|
893
1194
|
});
|
|
894
1195
|
|
|
895
1196
|
var isVerseSelectedForAlignment = false;
|
|
896
1197
|
|
|
897
1198
|
if (verseSelectedForAlignment) {
|
|
898
|
-
isVerseSelectedForAlignment = verseSelectedForAlignment.chapter
|
|
1199
|
+
isVerseSelectedForAlignment = verseSelectedForAlignment.chapter == chapter && verseSelectedForAlignment.verse == verse;
|
|
899
1200
|
}
|
|
900
1201
|
|
|
901
1202
|
return /*#__PURE__*/React.createElement(ScripturePane, _extends({}, scriptureConfig, {
|
|
902
1203
|
contentStyle: contentStyle,
|
|
903
1204
|
currentIndex: index,
|
|
1205
|
+
determiningBranch: !readyForFetch,
|
|
904
1206
|
direction: direction,
|
|
905
1207
|
disableWordPopover: disableWordPopover_,
|
|
906
1208
|
fontSize: fontSize,
|
|
907
1209
|
getLexiconData: getLexiconData,
|
|
908
1210
|
isNT: isNT_,
|
|
1211
|
+
isVerseSelectedForAlignment: isVerseSelectedForAlignment,
|
|
909
1212
|
key: index,
|
|
1213
|
+
onAlignmentFinish: function onAlignmentFinish() {
|
|
1214
|
+
return setState({
|
|
1215
|
+
verseSelectedForAlignment: null
|
|
1216
|
+
});
|
|
1217
|
+
},
|
|
1218
|
+
originalScriptureBookObjects: originalScriptureBookObjects,
|
|
910
1219
|
refStyle: refStyle,
|
|
911
1220
|
reference: _reference,
|
|
912
1221
|
saving: startSave // @ts-ignore
|
|
@@ -915,12 +1224,6 @@ export default function ScriptureCard(_ref) {
|
|
|
915
1224
|
setWordAlignerStatus: setWordAlignerStatus,
|
|
916
1225
|
server: server,
|
|
917
1226
|
translate: translate,
|
|
918
|
-
isVerseSelectedForAlignment: isVerseSelectedForAlignment,
|
|
919
|
-
onAlignmentFinish: function onAlignmentFinish() {
|
|
920
|
-
return setState({
|
|
921
|
-
verseSelectedForAlignment: null
|
|
922
|
-
});
|
|
923
|
-
},
|
|
924
1227
|
updateVersesAlignmentStatus: updateVersesAlignmentStatus
|
|
925
1228
|
}));
|
|
926
1229
|
});
|
|
@@ -937,8 +1240,8 @@ export default function ScriptureCard(_ref) {
|
|
|
937
1240
|
}
|
|
938
1241
|
};
|
|
939
1242
|
|
|
940
|
-
var onRenderToolbar = function onRenderToolbar(
|
|
941
|
-
var items =
|
|
1243
|
+
var onRenderToolbar = function onRenderToolbar(_ref10) {
|
|
1244
|
+
var items = _ref10.items;
|
|
942
1245
|
|
|
943
1246
|
var newItems = _toConsumableArray(items);
|
|
944
1247
|
|
|
@@ -1014,7 +1317,14 @@ export default function ScriptureCard(_ref) {
|
|
|
1014
1317
|
return newItems;
|
|
1015
1318
|
};
|
|
1016
1319
|
|
|
1017
|
-
return /*#__PURE__*/React.createElement(
|
|
1320
|
+
return /*#__PURE__*/React.createElement(SelectionsContextProvider, {
|
|
1321
|
+
selections: selections,
|
|
1322
|
+
onSelections: function onSelections(newSelections) {// console.log('onSelections', newSelections)
|
|
1323
|
+
},
|
|
1324
|
+
quote: selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.quote,
|
|
1325
|
+
occurrence: fixOccurrence(selectedQuote === null || selectedQuote === void 0 ? void 0 : selectedQuote.occurrence),
|
|
1326
|
+
verseObjectsMap: verseObjectsMap
|
|
1327
|
+
}, /*#__PURE__*/React.createElement(Card, {
|
|
1018
1328
|
id: "scripture_card_".concat(cardNum),
|
|
1019
1329
|
title: scriptureLabel,
|
|
1020
1330
|
settingsTitle: scriptureTitle + ' Settings',
|
|
@@ -1064,63 +1374,50 @@ export default function ScriptureCard(_ref) {
|
|
|
1064
1374
|
}));
|
|
1065
1375
|
}
|
|
1066
1376
|
ScriptureCard.propTypes = {
|
|
1067
|
-
/**
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
/** method to determine if NT or OT */
|
|
1071
|
-
isNT: PropTypes.func.isRequired,
|
|
1377
|
+
/** repo branch or tag such as master */
|
|
1378
|
+
appRef: PropTypes.string.isRequired,
|
|
1072
1379
|
|
|
1073
|
-
/**
|
|
1074
|
-
|
|
1380
|
+
/** authentication info */
|
|
1381
|
+
authentication: PropTypes.object,
|
|
1075
1382
|
|
|
1076
|
-
/**
|
|
1077
|
-
|
|
1383
|
+
/** index for current book (e.g. '01' for 'gen')*/
|
|
1384
|
+
bookIndex: PropTypes.string,
|
|
1078
1385
|
|
|
1079
1386
|
/** scripture card number (0 to 2 for example) */
|
|
1080
1387
|
cardNum: PropTypes.number.isRequired,
|
|
1081
1388
|
|
|
1082
|
-
/**
|
|
1083
|
-
|
|
1084
|
-
/** resource language to use */
|
|
1085
|
-
languageId: PropTypes.string.isRequired,
|
|
1086
|
-
|
|
1087
|
-
/** repo owner such as unfoldingWord */
|
|
1088
|
-
owner: PropTypes.string.isRequired,
|
|
1389
|
+
/** CSS classes */
|
|
1390
|
+
classes: PropTypes.object,
|
|
1089
1391
|
|
|
1090
|
-
|
|
1091
|
-
|
|
1392
|
+
/** if true then word data hover is shown */
|
|
1393
|
+
disableWordPopover: PropTypes.bool,
|
|
1092
1394
|
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
}),
|
|
1096
|
-
reference: PropTypes.shape({
|
|
1097
|
-
/** projectId (bookID) to use */
|
|
1098
|
-
projectId: PropTypes.string.isRequired,
|
|
1395
|
+
/** get language details */
|
|
1396
|
+
getLanguage: PropTypes.func.isRequired,
|
|
1099
1397
|
|
|
1100
|
-
|
|
1101
|
-
|
|
1398
|
+
/** function to get latest lexicon data */
|
|
1399
|
+
getLexiconData: PropTypes.func,
|
|
1102
1400
|
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
}),
|
|
1401
|
+
/** optional url for greek repo */
|
|
1402
|
+
greekRepoUrl: PropTypes.string,
|
|
1106
1403
|
|
|
1107
|
-
/**
|
|
1108
|
-
|
|
1404
|
+
/** optional url for hebrew repo */
|
|
1405
|
+
hebrewRepoUrl: PropTypes.string,
|
|
1109
1406
|
|
|
1110
|
-
/**
|
|
1111
|
-
|
|
1407
|
+
/** optional http timeout in milliseconds for fetching resources, default is 0 (very long wait) */
|
|
1408
|
+
httpConfig: PropTypes.object,
|
|
1112
1409
|
|
|
1113
|
-
/**
|
|
1114
|
-
|
|
1410
|
+
/** html identifier to use for card */
|
|
1411
|
+
id: PropTypes.string,
|
|
1115
1412
|
|
|
1116
|
-
/**
|
|
1117
|
-
|
|
1413
|
+
/** method to determine if NT or OT */
|
|
1414
|
+
isNT: PropTypes.func.isRequired,
|
|
1118
1415
|
|
|
1119
|
-
/**
|
|
1120
|
-
|
|
1416
|
+
/** user-name */
|
|
1417
|
+
loggedInUser: PropTypes.string,
|
|
1121
1418
|
|
|
1122
|
-
/**
|
|
1123
|
-
|
|
1419
|
+
/** function to minimize the card (optional) */
|
|
1420
|
+
onMinimize: PropTypes.func,
|
|
1124
1421
|
|
|
1125
1422
|
/** optional callback if error loading resource, parameter returned are:
|
|
1126
1423
|
* ({string} errorMessage, {boolean} isAccessError, {object} resourceStatus)
|
|
@@ -1128,52 +1425,65 @@ ScriptureCard.propTypes = {
|
|
|
1128
1425
|
* - resourceStatus - is object containing details about problems fetching resource */
|
|
1129
1426
|
onResourceError: PropTypes.func,
|
|
1130
1427
|
|
|
1131
|
-
/**
|
|
1132
|
-
|
|
1428
|
+
/** the original scripture bookObjects for current book */
|
|
1429
|
+
originalScriptureBookObjects: PropTypes.object,
|
|
1430
|
+
reference: PropTypes.shape({
|
|
1431
|
+
/** projectId (bookID) to use */
|
|
1432
|
+
projectId: PropTypes.string.isRequired,
|
|
1133
1433
|
|
|
1134
|
-
|
|
1135
|
-
|
|
1434
|
+
/** current chapter number */
|
|
1435
|
+
chapter: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,
|
|
1136
1436
|
|
|
1137
|
-
|
|
1138
|
-
|
|
1437
|
+
/** current verse number */
|
|
1438
|
+
verse: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired
|
|
1439
|
+
}),
|
|
1139
1440
|
|
|
1140
|
-
/**
|
|
1141
|
-
|
|
1441
|
+
/** resource object */
|
|
1442
|
+
resource: PropTypes.shape({
|
|
1443
|
+
/** resource language to use */
|
|
1444
|
+
languageId: PropTypes.string.isRequired,
|
|
1142
1445
|
|
|
1143
|
-
|
|
1144
|
-
|
|
1446
|
+
/** repo owner such as unfoldingWord */
|
|
1447
|
+
owner: PropTypes.string.isRequired,
|
|
1145
1448
|
|
|
1146
|
-
|
|
1147
|
-
|
|
1449
|
+
/** resourceId to use (e.g. ugnt) */
|
|
1450
|
+
resourceId: PropTypes.string.isRequired,
|
|
1148
1451
|
|
|
1149
|
-
|
|
1150
|
-
|
|
1452
|
+
/** repo owner for original languages such as unfoldingWord */
|
|
1453
|
+
originalLanguageOwner: PropTypes.string.isRequired
|
|
1454
|
+
}),
|
|
1151
1455
|
|
|
1152
|
-
/**
|
|
1153
|
-
|
|
1456
|
+
/** resourceLink */
|
|
1457
|
+
resourceLink: PropTypes.any,
|
|
1154
1458
|
|
|
1155
|
-
/**
|
|
1156
|
-
|
|
1459
|
+
/**This is currently selected quote */
|
|
1460
|
+
selectedQuote: PropTypes.object,
|
|
1157
1461
|
|
|
1158
|
-
/**
|
|
1159
|
-
|
|
1462
|
+
/** server (e.g. 'https://git.door43.org') */
|
|
1463
|
+
server: PropTypes.string.isRequired,
|
|
1160
1464
|
|
|
1161
|
-
/**
|
|
1162
|
-
|
|
1465
|
+
/** callback to update loading state */
|
|
1466
|
+
setAreResourcesLoading: PropTypes.func,
|
|
1467
|
+
|
|
1468
|
+
/** callback to update saving state*/
|
|
1469
|
+
setAreResourcesSaving: PropTypes.func,
|
|
1163
1470
|
|
|
1164
|
-
/**
|
|
1165
|
-
|
|
1471
|
+
/** function to set state in app that there are unsaved changes */
|
|
1472
|
+
setSavedChanges: PropTypes.func,
|
|
1166
1473
|
|
|
1167
1474
|
/** callback to update word aligner state */
|
|
1168
1475
|
setWordAlignerStatus: PropTypes.func,
|
|
1169
1476
|
|
|
1477
|
+
/** title for scripture card */
|
|
1478
|
+
title: PropTypes.string.isRequired,
|
|
1479
|
+
|
|
1480
|
+
/** optional function for localization */
|
|
1481
|
+
translate: PropTypes.func,
|
|
1482
|
+
|
|
1170
1483
|
/** callback to update the card's merge state in app */
|
|
1171
1484
|
updateMergeState: PropTypes.func,
|
|
1172
1485
|
|
|
1173
|
-
/**
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
/** callback to update saving state*/
|
|
1177
|
-
setAreResourcesSaving: PropTypes.func
|
|
1486
|
+
/** use method for using local storage specific for user */
|
|
1487
|
+
useUserLocalStorage: PropTypes.func.isRequired
|
|
1178
1488
|
};
|
|
1179
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwidXNmbWpzIiwidXNlRWRpdCIsIk1kVXBkYXRlIiwiTWRVcGRhdGVEaXNhYmxlZCIsIkZpU2hhcmUiLCJJY29uQnV0dG9uIiwiUnhMaW5rMiIsIlJ4TGlua0JyZWFrMiIsIkNhcmQiLCJ1c2VDYXJkU3RhdGUiLCJ1c2VVc2VyQnJhbmNoIiwidXNlQnJhbmNoTWVyZ2VyIiwidXNlQ29udGVudFVwZGF0ZVByb3BzIiwiVXBkYXRlQnJhbmNoQnV0dG9uIiwiRXJyb3JEaWFsb2ciLCJFUlJPUl9TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJBbGlnbm1lbnRIZWxwZXJzIiwiVXNmbUZpbGVDb252ZXJzaW9uSGVscGVycyIsImlzRXF1YWwiLCJTY3JpcHR1cmVQYW5lIiwiU2NyaXB0dXJlU2VsZWN0b3IiLCJ1c2VTY3JpcHR1cmVTZXR0aW5ncyIsImdldFJlc291cmNlTGluayIsImdldFJlc291cmNlTWVzc2FnZSIsImdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyIsImlzT3JpZ2luYWxCaWJsZSIsIlRpdGxlIiwiTlRfT1JJR19MQU5HIiwiT1JJR0lOQUxfU09VUkNFIiwiT1RfT1JJR19MQU5HIiwiVmVyc2VTZWxlY3RvclBvcHVwIiwiS0VZX0ZPTlRfU0laRV9CQVNFIiwibGFiZWwiLCJzdHlsZSIsIm1hcmdpblRvcCIsIndpZHRoIiwiU2NyaXB0dXJlQ2FyZCIsImlkIiwiaXNOVCIsInRpdGxlIiwic2VydmVyIiwiYXBwUmVmIiwiY2FyZE51bSIsImNsYXNzZXMiLCJyZXNvdXJjZSIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInJlc291cmNlSWQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJnZXRMYW5ndWFnZSIsInJlZmVyZW5jZSIsInZlcnNlIiwiY2hhcHRlciIsImJvb2tJZCIsInByb2plY3RJZCIsInJlc291cmNlTGluayIsInVzZVVzZXJMb2NhbFN0b3JhZ2UiLCJkaXNhYmxlV29yZFBvcG92ZXIiLCJvblJlc291cmNlRXJyb3IiLCJodHRwQ29uZmlnIiwiZ3JlZWtSZXBvVXJsIiwiaGVicmV3UmVwb1VybCIsImdldExleGljb25EYXRhIiwiZmV0Y2hHbG9zc2VzRm9yVmVyc2UiLCJ0cmFuc2xhdGUiLCJvbk1pbmltaXplIiwibG9nZ2VkSW5Vc2VyIiwiYXV0aGVudGljYXRpb24iLCJzZXRTYXZlZENoYW5nZXMiLCJib29rSW5kZXgiLCJhZGRWZXJzZVJhbmdlIiwic2V0V29yZEFsaWduZXJTdGF0dXMiLCJ1cGRhdGVNZXJnZVN0YXRlIiwic2V0Q2FyZHNMb2FkaW5nIiwic2V0Q2FyZHNTYXZpbmciLCJ1c2VTdGF0ZSIsImhhdmVVbnNhdmVkQ2hhbmdlcyIsInJlZiIsInNhdmVDbGlja2VkIiwic2F2ZUNvbnRlbnQiLCJzaGEiLCJzdGFydFNhdmUiLCJ1cmxFcnJvciIsInVzaW5nVXNlckJyYW5jaCIsInVuc2F2ZWRDaGFuZ2VzTGlzdCIsInZlcnNlc0ZvclJlZiIsInNob3dBbGlnbm1lbnRQb3B1cCIsInZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQiLCJ2ZXJzZXNBbGlnbm1lbnRTdGF0dXMiLCJzdGF0ZSIsInNldFN0YXRlXyIsImZvbnRTaXplIiwic2V0Rm9udFNpemUiLCJpc05UXyIsInNldFN0YXRlIiwibmV3U3RhdGUiLCJwcmV2U3RhdGUiLCJjYWNoZSIsIm1heEFnZSIsInNldFVybEVycm9yIiwiZXJyb3IiLCJ3aG9sZUJvb2siLCJpc05ld1Rlc3RhbWVudCIsInNjcmlwdHVyZUNvbmZpZyIsInNldFNjcmlwdHVyZSIsInNjcmlwdHVyZVNldHRpbmdzIiwic2NyaXB0dXJlVmVyc2lvbkhpc3QiLCJmZXRjaFJlc3BfIiwiZmV0Y2hSZXNwb25zZSIsInJlcG8iLCJyZWZlcmVuY2VfIiwidXNlRWZmZWN0IiwiX3NoYSIsImRhdGEiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInN0cmluZ2lmeSIsImNhcmRSZXNvdXJjZUlkIiwicmVmXyIsImNhblVzZUVkaXRCcmFuY2giLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJjYXJkSWQiLCJ3b3JraW5nUmVzb3VyY2VCcmFuY2giLCJ1c2VyRWRpdEJyYW5jaE5hbWUiLCJ1c2luZ1VzZXJCcmFuY2hfIiwic3RhcnRFZGl0QnJhbmNoIiwiYWN0aW9ucyIsInN0YXJ0RWRpdCIsIl91c2VCcmFuY2hNZXJnZXIiLCJ1c2VyQnJhbmNoIiwidG9rZW5pZCIsInRva2VuIiwic2hhMSIsIm1lcmdlVG9NYXN0ZXIiLCJtZXJnZVN0YXR1cyIsIm1lcmdlRnJvbU1hc3RlciIsInVwZGF0ZVN0YXR1cyIsIm1lcmdlRnJvbU1hc3RlckludG9Vc2VyQnJhbmNoIiwidXBkYXRlVXNlckJyYW5jaCIsIm1lcmdlVG9NYXN0ZXJGcm9tVXNlckJyYW5jaCIsIm1lcmdlTWFzdGVyQnJhbmNoIiwidXBkYXRlQnV0dG9uUHJvcHMiLCJpc1NhdmluZyIsInJlbG9hZENvbnRlbnQiLCJyZWxvYWRSZXNvdXJjZSIsImNhbGxVcGRhdGVVc2VyQnJhbmNoIiwiaXNFcnJvckRpYWxvZ09wZW4iLCJvbkNsb3NlRXJyb3JEaWFsb2ciLCJpc0xvYWRpbmciLCJkaWFsb2dNZXNzYWdlIiwiZGlhbG9nVGl0bGUiLCJkaWFsb2dMaW5rIiwiZGlhbG9nTGlua1Rvb2x0aXAiLCJwcmV2Q2FyZHNMb2FkaW5nIiwiZmlsdGVyIiwid29ya2luZ1JlZiIsInNjcmlwdHVyZVRpdGxlIiwid29ya2luZ1JlZl8iLCJyZXNvdXJjZVN0YXR1cyIsIm1lc3NhZ2UiLCJpc0FjY2Vzc0Vycm9yIiwidmVyc2lvbiIsInVwZGF0ZVRpdGxlIiwiZ2V0U2NyaXB0dXJlU2VsZWN0b3IiLCJzY3JpcHR1cmVTZWxlY3Rpb25Db25maWciLCJvbk1lbnVDbG9zZSIsImxhbmd1YWdlSWRfIiwibGFuZ3VhZ2UiLCJkaXJlY3Rpb24iLCJpc0hlYnJldyIsImZvbnRGYWN0b3IiLCJzY2FsZWRGb250U2l6ZSIsIml0ZW1zIiwiaGVhZGVycyIsImZpbHRlcnMiLCJpdGVtSW5kZXgiLCJtYXJrZG93blZpZXciLCJzZXRGaWx0ZXJzIiwic2V0SXRlbUluZGV4Iiwic2V0TWFya2Rvd25WaWV3IiwicmVmU3R5bGUiLCJ1c2VNZW1vIiwiZm9udEZhbWlseSIsIk1hdGgiLCJyb3VuZCIsImNvbnRlbnRTdHlsZSIsInNjcmlwdHVyZUxhYmVsIiwiZGlzYWJsZVdvcmRQb3BvdmVyXyIsInVzaW5nT3JpZ2luYWxCaWJsZSIsInVuZGVmaW5lZCIsImZldGNoR2xvc3NEYXRhRm9yVmVyc2UiLCJ2ZXJzZU9iamVjdHMiLCJ2ZXJzZVJlZiIsIl92ZXJzZU9iamVjdHMiLCJ2ZXJzZURhdGEiLCJjb25jYXQiLCJlbmFibGVFZGl0IiwiZW5hYmxlQWxpZ25tZW50Iiwib3JpZ2luYWxSZXBvVXJsIiwic2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyIsImN1cnJlbnRWZXJzZVJlZiIsIl9zZXRTYXZlZENoYW5nZXMiLCJzb3VyY2VMYW5ndWFnZSIsInRhcmdldExhbmd1YWdlIiwiY3VycmVudEluZGV4Iiwic2F2ZWQiLCJnZXRDaGFuZ2VzIiwiY2xlYXJDaGFuZ2VzIiwiX3Vuc2F2ZWRDaGFuZ2VzTGlzdCIsImhhc093blByb3BlcnR5IiwiX2hhdmVVbnNhdmVkQ2hhbmdlcyIsIk9iamVjdCIsImtleXMiLCJmaW5kUmVmSW5BcnJheSIsImZpbmRJdGVtIiwiY2h1bmtzIiwicmVmTGVuIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJjaHVuayIsImlkeCIsIm5leHRDaGFyIiwiZ2V0Qm9va05hbWUiLCJib29rQ2FwcyIsInRvVXBwZXJDYXNlIiwiZmlsZXBhdGgiLCJjb250ZW50IiwiY29uZmlnIiwidGltZW91dCIsInNlcnZlclRpbWVPdXQiLCJhdXRob3IiLCJicmFuY2giLCJvblNhdmVFZGl0IiwiX3NhdmVFZGl0IiwidGhlbiIsInN1Y2Nlc3MiLCJ1bnNhdmVkQ2FyZEluZGljZXMiLCJjYXJkSW5kZXgiLCJpbmZvIiwicHJldkNhcmRzU2F2aW5nIiwibWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtIiwiYmlibGVVc2ZtIiwidXBkYXRlZFZlcnNlT2JqZWN0cyIsIm5ld1VzZm0iLCJjaGFwdGVyQ2h1bmtzIiwic3BsaXQiLCJjaGFwdGVySW5kZXgiLCJjdXJyZW50Q2hhcHRlciIsInZlcnNlQ2h1bmtzIiwidmVyc2VJbmRleCIsIm5ld1ZlcnNlVXNmbSIsImNvbnZlcnRWZXJzZURhdGFUb1VTRk0iLCJvbGRWZXJzZSIsInZlcnNlTnVtTGVuIiwibmV3Q2hhcHRlciIsImpvaW4iLCJnZXRSZXNwb25zZURhdGEiLCJtZXJnZUZhaWwiLCJwYXJzZUludCIsIm5ld0Jvb2tKc29uIiwibmV3VmVyc2VUZXh0IiwidGFyZ2V0VmVyc2VPYmplY3RzXyIsInVwZGF0ZUFsaWdubWVudHNUb1RhcmdldFZlcnNlIiwidGFyZ2V0VmVyc2VPYmplY3RzIiwidXBkYXRlVmVyc2UiLCJ0b1VTRk0iLCJmb3JjZWROZXdMaW5lcyIsIl92ZXJzZSIsImluY2x1ZGVzIiwibmVlZFRvTWVyZ2VGcm9tTWFzdGVyIiwibWVyZ2VOZWVkZWQiLCJtZXJnZUZyb21NYXN0ZXJIYXNDb25mbGljdHMiLCJjb25mbGljdCIsIm1lcmdlVG9NYXN0ZXJIYXNDb25mbGljdHMiLCJtZXJnZUZyb21NYXN0ZXJUaXRsZSIsIm1lcmdlRnJvbU1hc3RlckNvbG9yIiwibWVyZ2VUb01hc3RlclRpdGxlIiwibWVyZ2VUb01hc3RlckNvbG9yIiwidXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzIiwiYWxpZ25lZCIsInJlbmRlcmVkU2NyaXB0dXJlUGFuZXMiLCJtYXAiLCJfY3VycmVudFZlcnNlRGF0YSIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJfcmVmZXJlbmNlIiwiX3NjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWciLCJpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQiLCJoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrIiwib25SZW5kZXJUb29sYmFyIiwibmV3SXRlbXMiLCJhbGxWZXJzZXNBbGlnbmVkIiwidmFsdWVzIiwiZXZlcnkiLCJhbGlnblN0YXR1cyIsImFsaWduSWNvbiIsImFsaWduQnV0dG9uVGV4dCIsInB1c2giLCJjdXJzb3IiLCJtYXJnaW4iLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJmdW5jIiwiaXNSZXF1aXJlZCIsIm51bWJlciIsInNoYXBlIiwib25lT2ZUeXBlIiwiYm9vbCIsIm9iamVjdCIsImFueSIsInNldEFyZVJlc291cmNlc0xvYWRpbmciLCJzZXRBcmVSZXNvdXJjZXNTYXZpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsT0FBTyxLQUFLQyxTQUFaLE1BQTJCLFlBQTNCO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQix5QkFBckI7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLFNBQW5CO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixxQkFBeEI7QUFDQSxTQUFTQyxRQUFULEVBQW1CQyxnQkFBbkIsUUFBMkMsZ0JBQTNDO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixnQkFBeEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLGVBQTNCO0FBQ0EsU0FBU0MsT0FBVCxFQUFrQkMsWUFBbEIsUUFBc0MsZ0JBQXRDO0FBQ0EsU0FDRUMsSUFERixFQUVFQyxZQUZGLEVBR0VDLGFBSEYsRUFJRUMsZUFKRixFQUtFQyxxQkFMRixFQU1FQyxrQkFORixFQU9FQyxXQVBGLEVBUUVDLFdBUkYsRUFTRUMseUJBVEYsUUFVTyx1QkFWUDtBQVdBLFNBQVNDLGdCQUFULEVBQTJCQyx5QkFBM0IsUUFBNEQsa0JBQTVEO0FBQ0EsT0FBTyxLQUFLQyxPQUFaLE1BQXlCLFlBQXpCO0FBQ0EsU0FBU0MsYUFBVCxFQUF3QkMsaUJBQXhCLFFBQWlELElBQWpEO0FBQ0EsU0FBU0Msb0JBQVQsUUFBcUMsa0NBQXJDO0FBQ0EsU0FDRUMsZUFERixFQUVFQyxrQkFGRixFQUdF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QUFTLENBQUNrVCxJQTVFVjs7QUE2RXhCO0FBQ0FTLEVBQUFBLHFCQUFxQixFQUFFM1QsU0FBUyxDQUFDa1Q7QUE5RVQsQ0FBMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJ1xuaW1wb3J0IHsgY29yZSB9IGZyb20gJ3NjcmlwdHVyZS1yZXNvdXJjZXMtcmNsJ1xuaW1wb3J0IHVzZm1qcyBmcm9tICd1c2ZtLWpzJ1xuaW1wb3J0IHsgdXNlRWRpdCB9IGZyb20gJ2dpdGVhLXJlYWN0LXRvb2xraXQnXG5pbXBvcnQgeyBNZFVwZGF0ZSwgTWRVcGRhdGVEaXNhYmxlZCB9IGZyb20gJ3JlYWN0LWljb25zL21kJ1xuaW1wb3J0IHsgRmlTaGFyZSB9IGZyb20gJ3JlYWN0LWljb25zL2ZpJ1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwnXG5pbXBvcnQgeyBSeExpbmsyLCBSeExpbmtCcmVhazIgfSBmcm9tICdyZWFjdC1pY29ucy9yeCdcbmltcG9ydCB7XG4gIENhcmQsXG4gIHVzZUNhcmRTdGF0ZSxcbiAgdXNlVXNlckJyYW5jaCxcbiAgdXNlQnJhbmNoTWVyZ2VyLFxuICB1c2VDb250ZW50VXBkYXRlUHJvcHMsXG4gIFVwZGF0ZUJyYW5jaEJ1dHRvbixcbiAgRXJyb3JEaWFsb2csXG4gIEVSUk9SX1NUQVRFLFxuICBNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SLFxufSBmcm9tICd0cmFuc2xhdGlvbi1oZWxwcy1yY2wnXG5pbXBvcnQgeyBBbGlnbm1lbnRIZWxwZXJzLCBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIH0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgZ2V0UmVzb3VyY2VMaW5rLFxuICBnZXRSZXNvdXJjZU1lc3NhZ2UsXG4gIGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyxcbiAgaXNPcmlnaW5hbEJpYmxlLFxufSBmcm9tICcuLi8uLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnLi4vU2NyaXB0dXJlUGFuZS9zdHlsZWQnXG5pbXBvcnQge1xuICBOVF9PUklHX0xBTkcsXG4gIE9SSUdJTkFMX1NPVVJDRSxcbiAgT1RfT1JJR19MQU5HLFxufSBmcm9tICcuLi8uLi91dGlscydcbmltcG9ydCB7IFZlcnNlU2VsZWN0b3JQb3B1cCB9IGZyb20gJy4uL1ZlcnNlU2VsZWN0b3JQb3B1cCdcblxuY29uc3QgS0VZX0ZPTlRfU0laRV9CQVNFID0gJ3NjcmlwdHVyZVBhbmVGb250U2l6ZV8nXG5jb25zdCBsYWJlbCA9ICdWZXJzaW9uJ1xuY29uc3Qgc3R5bGUgPSB7IG1hcmdpblRvcDogJzE2cHgnLCB3aWR0aDogJzUwMHB4JyB9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjcmlwdHVyZUNhcmQoe1xuICBpZCxcbiAgaXNOVCxcbiAgdGl0bGUsXG4gIHNlcnZlcixcbiAgYXBwUmVmLFxuICBjYXJkTnVtLFxuICBjbGFzc2VzLFxuICByZXNvdXJjZToge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIH0sXG4gIGdldExhbmd1YWdlLFxuICByZWZlcmVuY2U6IHtcbiAgICB2ZXJzZSxcbiAgICBjaGFwdGVyLFxuICAgIHByb2plY3RJZDogYm9va0lkLFxuICB9LFxuICByZXNvdXJjZUxpbmssXG4gIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgb25SZXNvdXJjZUVycm9yLFxuICBodHRwQ29uZmlnLFxuICBncmVla1JlcG9VcmwsXG4gIGhlYnJld1JlcG9VcmwsXG4gIGdldExleGljb25EYXRhLFxuICBmZXRjaEdsb3NzZXNGb3JWZXJzZSxcbiAgdHJhbnNsYXRlLFxuICBvbk1pbmltaXplLFxuICBsb2dnZWRJblVzZXIsXG4gIGF1dGhlbnRpY2F0aW9uLFxuICBzZXRTYXZlZENoYW5nZXMsXG4gIGJvb2tJbmRleCxcbiAgYWRkVmVyc2VSYW5nZSxcbiAgc2V0V29yZEFsaWduZXJTdGF0dXMsXG4gIHVwZGF0ZU1lcmdlU3RhdGUsXG4gIHNldENhcmRzTG9hZGluZyxcbiAgc2V0Q2FyZHNTYXZpbmdcbn0pIHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV9dID0gUmVhY3QudXNlU3RhdGUoe1xuICAgIGhhdmVVbnNhdmVkQ2hhbmdlczogZmFsc2UsXG4gICAgcmVmOiBhcHBSZWYsXG4gICAgc2F2ZUNsaWNrZWQ6IGZhbHNlLFxuICAgIHNhdmVDb250ZW50OiBudWxsLFxuICAgIHNoYTogbnVsbCxcbiAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgIHVybEVycm9yOiBudWxsLFxuICAgIHVzaW5nVXNlckJyYW5jaDogZmFsc2UsXG4gICAgdW5zYXZlZENoYW5nZXNMaXN0OiB7fSxcbiAgICB2ZXJzZXNGb3JSZWY6IG51bGwsXG4gICAgc2hvd0FsaWdubWVudFBvcHVwOiBmYWxzZSxcbiAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiBudWxsLFxuICAgIHZlcnNlc0FsaWdubWVudFN0YXR1czogbnVsbCxcbiAgfSlcbiAgY29uc3Qge1xuICAgIHJlZixcbiAgICBzYXZlQ2xpY2tlZCxcbiAgICBzYXZlQ29udGVudCxcbiAgICBzaGEsXG4gICAgc3RhcnRTYXZlLFxuICAgIHVybEVycm9yLFxuICAgIHVzaW5nVXNlckJyYW5jaCxcbiAgICB1bnNhdmVkQ2hhbmdlc0xpc3QsXG4gICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzLFxuICAgIHZlcnNlc0ZvclJlZixcbiAgICBzaG93QWxpZ25tZW50UG9wdXAsXG4gICAgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCxcbiAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXMsXG4gIH0gPSBzdGF0ZVxuXG4gIGNvbnN0IFtmb250U2l6ZSwgc2V0Rm9udFNpemVdID0gdXNlVXNlckxvY2FsU3RvcmFnZShLRVlfRk9OVF9TSVpFX0JBU0UgKyBjYXJkTnVtLCAxMDApXG4gIGNvbnN0IGlzTlRfID0gaXNOVChib29rSWQpXG5cbiAgZnVuY3Rpb24gc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBzZXRTdGF0ZV8ocHJldlN0YXRlID0+ICh7IC4uLnByZXZTdGF0ZSwgLi4ubmV3U3RhdGUgfSkpXG4gIH1cblxuICBpZiAodXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgaHR0cENvbmZpZyA9IHsgLi4uaHR0cENvbmZpZywgY2FjaGU6IHsgbWF4QWdlOiAwIH0gfSAvLyBkaXNhYmxlIGh0dHAgY2FjaGluZ1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzZXRTY3JpcHR1cmUsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gIH0gPSB1c2VTY3JpcHR1cmVTZXR0aW5ncyh7XG4gICAgaXNOVCxcbiAgICB0aXRsZSxcbiAgICB2ZXJzZSxcbiAgICBvd25lcixcbiAgICBib29rSWQsXG4gICAgYXBwUmVmOiByZWYsXG4gICAgc2VydmVyLFxuICAgIGNhcmROdW0sXG4gICAgY2hhcHRlcixcbiAgICBsYW5ndWFnZUlkLFxuICAgIHJlc291cmNlSWQsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICBzZXRVcmxFcnJvcjogKGVycm9yKSA9PiBzZXRTdGF0ZSh7IHVybEVycm9yOiBlcnJvciB9KSxcbiAgICBodHRwQ29uZmlnLFxuICAgIGdyZWVrUmVwb1VybCxcbiAgICBoZWJyZXdSZXBvVXJsLFxuICAgIHdob2xlQm9vazogdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlc3BfID0gc2NyaXB0dXJlQ29uZmlnPy5mZXRjaFJlc3BvbnNlXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcmVwbyA9IGAke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/Lmxhbmd1YWdlSWR9XyR7c2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkfWBcbiAgY29uc3QgcmVmZXJlbmNlXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlIHx8IG51bGxcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBnZXQgdGhlIF9zaGEgZnJvbSBsYXN0IHNjcmlwdHVyZSBkb3dubG9hZFxuICAgIGNvbnN0IF9zaGEgPSBmZXRjaFJlc3BfPy5kYXRhPy5zaGEgfHwgbnVsbFxuICAgIGNvbnNvbGUubG9nKGBmb3IgJHtKU09OLnN0cmluZ2lmeShyZWZlcmVuY2VfKX0gbmV3IHNoYSBpcyAke19zaGF9YClcblxuICAgIGlmIChfc2hhICE9PSBzaGEpIHtcbiAgICAgIHNldFN0YXRlKHsgc2hhOiBfc2hhIH0pXG4gICAgfVxuICB9LCBbZmV0Y2hSZXNwX10pXG5cbiAgLy8gQHRzLWlnbm9yZVxuICBjb25zdCBjYXJkUmVzb3VyY2VJZCA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/LnByb2plY3RJZCB8fCByZXNvdXJjZUlkXG4gIC8vIEB0cy1pZ25vcmVcbiAgbGV0IHJlZl8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5yZWYgfHwgYXBwUmVmXG4gIGNvbnN0IGNhblVzZUVkaXRCcmFuY2ggPSBsb2dnZWRJblVzZXIgJiYgYXV0aGVudGljYXRpb24gJiZcbiAgICAocmVzb3VyY2VJZCAhPT0gT1JJR0lOQUxfU09VUkNFKSAmJlxuICAgICgocmVmXyA9PT0gJ21hc3RlcicpIHx8IChyZWZfLnN1YnN0cmluZygwLCBsb2dnZWRJblVzZXIubGVuZ3RoKSA9PT0gbG9nZ2VkSW5Vc2VyKSApIC8vIG5vdCB0YWdcblxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIHdvcmtpbmdSZXNvdXJjZUJyYW5jaCxcbiAgICAgIHVzZXJFZGl0QnJhbmNoTmFtZSxcbiAgICAgIHVzaW5nVXNlckJyYW5jaDogdXNpbmdVc2VyQnJhbmNoXyxcbiAgICB9LFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHN0YXJ0RWRpdDogc3RhcnRFZGl0QnJhbmNoLFxuICAgIH0sXG4gIH0gPSB1c2VVc2VyQnJhbmNoKHtcbiAgICBvd25lcixcbiAgICBzZXJ2ZXIsXG4gICAgYXBwUmVmLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgY2FyZElkOiBpZCxcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIGF1dGhlbnRpY2F0aW9uOiBjYW5Vc2VFZGl0QnJhbmNoID8gYXV0aGVudGljYXRpb24gOiBudWxsLFxuICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgIG9uUmVzb3VyY2VFcnJvcixcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICB9KVxuXG4gIGNvbnN0IF91c2VCcmFuY2hNZXJnZXIgPSB1c2VCcmFuY2hNZXJnZXIoeyBzZXJ2ZXIsIG93bmVyLCByZXBvLCB1c2VyQnJhbmNoOiB1c2VyRWRpdEJyYW5jaE5hbWUsIHRva2VuaWQ6IGF1dGhlbnRpY2F0aW9uPy50b2tlbj8uc2hhMSB9KTtcbiAgY29uc3Qge1xuICAgIHN0YXRlOiB7XG4gICAgICBtZXJnZVN0YXR1czogbWVyZ2VUb01hc3RlcixcbiAgICAgIHVwZGF0ZVN0YXR1czogbWVyZ2VGcm9tTWFzdGVyLFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgdXBkYXRlVXNlckJyYW5jaDogbWVyZ2VGcm9tTWFzdGVySW50b1VzZXJCcmFuY2gsXG4gICAgICBtZXJnZU1hc3RlckJyYW5jaDogbWVyZ2VUb01hc3RlckZyb21Vc2VyQnJhbmNoXG4gICAgfVxuICB9ID0gX3VzZUJyYW5jaE1lcmdlcjtcblxuICBjb25zdCB1cGRhdGVCdXR0b25Qcm9wcyA9IHVzZUNvbnRlbnRVcGRhdGVQcm9wcyh7XG4gICAgaXNTYXZpbmc6IHN0YXJ0U2F2ZSxcbiAgICB1c2VCcmFuY2hNZXJnZXI6IF91c2VCcmFuY2hNZXJnZXIsXG4gICAgcmVsb2FkQ29udGVudDogc2NyaXB0dXJlQ29uZmlnPy5yZWxvYWRSZXNvdXJjZVxuICB9KTtcbiAgY29uc3Qge1xuICAgIGNhbGxVcGRhdGVVc2VyQnJhbmNoLFxuICAgIGlzRXJyb3JEaWFsb2dPcGVuLFxuICAgIG9uQ2xvc2VFcnJvckRpYWxvZyxcbiAgICBpc0xvYWRpbmcsXG4gICAgZGlhbG9nTWVzc2FnZSxcbiAgICBkaWFsb2dUaXRsZSxcbiAgICBkaWFsb2dMaW5rLFxuICAgIGRpYWxvZ0xpbmtUb29sdGlwXG4gIH0gPSB1cGRhdGVCdXR0b25Qcm9wcztcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjYXJkUmVzb3VyY2VJZCkge1xuICAgICAgdXBkYXRlTWVyZ2VTdGF0ZSAmJiB1cGRhdGVNZXJnZVN0YXRlKFxuICAgICAgICBjYXJkUmVzb3VyY2VJZCxcbiAgICAgICAgbWVyZ2VGcm9tTWFzdGVyLFxuICAgICAgICBtZXJnZVRvTWFzdGVyLFxuICAgICAgICBjYWxsVXBkYXRlVXNlckJyYW5jaCxcbiAgICAgICAgbWVyZ2VUb01hc3RlckZyb21Vc2VyQnJhbmNoLFxuICAgICAgKVxuICAgIH1cbiAgfSxbY2FyZFJlc291cmNlSWQsIG1lcmdlRnJvbU1hc3RlciwgbWVyZ2VUb01hc3Rlcl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nKSB7XG4gICAgICBzZXRDYXJkc0xvYWRpbmcocHJldkNhcmRzTG9hZGluZyA9PiBbLi4ucHJldkNhcmRzTG9hZGluZywgY2FyZFJlc291cmNlSWRdKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRDYXJkc0xvYWRpbmcocHJldkNhcmRzTG9hZGluZyA9PiBwcmV2Q2FyZHNMb2FkaW5nLmZpbHRlcihjYXJkSWQgPT4gY2FyZElkICE9PSBjYXJkUmVzb3VyY2VJZCkpXG4gICAgfVxuICB9LCBbaXNMb2FkaW5nXSlcblxuICBjb25zdCB3b3JraW5nUmVmID0gY2FuVXNlRWRpdEJyYW5jaCA/IHdvcmtpbmdSZXNvdXJjZUJyYW5jaCA6IGFwcFJlZlxuICBsZXQgc2NyaXB0dXJlVGl0bGVcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBzZWxlY3QgY29ycmVjdCB3b3JraW5nIHJlZiAtIGNvdWxkIGJlIG1hc3RlciwgdXNlciBicmFuY2gsIG9yIHJlbGVhc2VcbiAgICBpZiAodXNpbmdVc2VyQnJhbmNoXyAhPT0gdXNpbmdVc2VyQnJhbmNoKSB7XG4gICAgICBzZXRTdGF0ZSh7IHVzaW5nVXNlckJyYW5jaDogdXNpbmdVc2VyQnJhbmNoXyB9KVxuICAgIH1cbiAgfSwgW3VzaW5nVXNlckJyYW5jaF8sIHVzaW5nVXNlckJyYW5jaF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2VsZWN0IGNvcnJlY3Qgd29ya2luZyByZWYgLSBjb3VsZCBiZSBtYXN0ZXIsIHVzZXIgYnJhbmNoLCBvciByZWxlYXNlXG4gICAgbGV0IHdvcmtpbmdSZWZfID0gd29ya2luZ1JlZiB8fCBhcHBSZWZcblxuICAgIGlmIChyZWYgIT09IHdvcmtpbmdSZWZfKSB7XG4gICAgICBzZXRTdGF0ZSh7IHJlZjogd29ya2luZ1JlZl8gfSlcbiAgICB9XG4gIH0sIFt3b3JraW5nUmVmLCByZWYsIGFwcFJlZl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gdXBkYXRlIGRpc3BsYXkgc3RhdHVzIGlmIGVycm9yXG4gICAgY29uc3QgZXJyb3IgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzPy5bRVJST1JfU1RBVEVdXG5cbiAgICBpZiAoZXJyb3IpIHsgLy8gaWYgZXJyb3Igd2FzIGZvdW5kIGRvIGNhbGxiYWNrXG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXNcbiAgICAgIGNvbnN0IHJlc291cmNlTGluayA9IGdldFJlc291cmNlTGluayhzY3JpcHR1cmVDb25maWcpXG4gICAgICBjb25zdCBtZXNzYWdlID0gZ2V0UmVzb3VyY2VNZXNzYWdlKHJlc291cmNlU3RhdHVzLCBzZXJ2ZXIsIHJlc291cmNlTGluaywgaXNOVF8pXG4gICAgICBjb25zdCBpc0FjY2Vzc0Vycm9yID0gcmVzb3VyY2VTdGF0dXNbTUFOSUZFU1RfTk9UX0xPQURFRF9FUlJPUl1cbiAgICAgIG9uUmVzb3VyY2VFcnJvciAmJiBvblJlc291cmNlRXJyb3IobWVzc2FnZSwgaXNBY2Nlc3NFcnJvciwgcmVzb3VyY2VTdGF0dXMpXG4gICAgfVxuICB9LCBbc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXV0pXG5cbiAgaWYgKHNjcmlwdHVyZUNvbmZpZy50aXRsZSAmJiBzY3JpcHR1cmVDb25maWcudmVyc2lvbikge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYCR7c2NyaXB0dXJlQ29uZmlnLnRpdGxlfSB2JHtzY3JpcHR1cmVDb25maWcudmVyc2lvbn1gXG4gICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QudXBkYXRlVGl0bGUoc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluaywgc2NyaXB0dXJlVGl0bGUpXG4gIH0gZWxzZSB7XG4gICAgc2NyaXB0dXJlVGl0bGUgPSBgVGl0bGUgbWlzc2luZyBmcm9tIHByb2plY3QgbWFuaWZlc3RgXG4gIH1cblxuICAvKiogRHluYW1pY2FsbHkgY3JlYXRlcyB0aGUgc2NyaXB0dXJlIHNlbGVjdGlvbiBkcm9wZG93biB0byBiZSBpbnNlcnRlZCBpbnRvIGNhcmQgc2V0dGluZ3MgKi9cbiAgZnVuY3Rpb24gZ2V0U2NyaXB0dXJlU2VsZWN0b3IoKSB7XG4gICAgY29uc3Qgc2NyaXB0dXJlU2VsZWN0aW9uQ29uZmlnID0gZ2V0U2NyaXB0dXJlVmVyc2lvblNldHRpbmdzKHtcbiAgICAgIGxhYmVsLFxuICAgICAgcmVzb3VyY2VMaW5rOiBzY3JpcHR1cmVDb25maWcucmVzb3VyY2VMaW5rLFxuICAgICAgc2V0U2NyaXB0dXJlLFxuICAgICAgc2NyaXB0dXJlVmVyc2lvbkhpc3QsXG4gICAgfSlcblxuICAgIHJldHVybiA8U2NyaXB0dXJlU2VsZWN0b3Igey4uLnNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZ30gc3R5bGU9e3N0eWxlfSBlcnJvck1lc3NhZ2U9e3VybEVycm9yfSAvPlxuICB9XG5cbiAgZnVuY3Rpb24gb25NZW51Q2xvc2UoKSB7XG4gICAgLy8gY29uc29sZS5sb2coYG9uTWVudUNsb3NlKClgKVxuICAgIHNldFN0YXRlKHsgdXJsRXJyb3I6IG51bGwgfSlcbiAgfVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgbGFuZ3VhZ2VJZF8gPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5sYW5ndWFnZUlkXG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoeyBsYW5ndWFnZUlkOiBsYW5ndWFnZUlkXyB9KVxuICBjb25zdCBkaXJlY3Rpb24gPSAobGFuZ3VhZ2U/LmRpcmVjdGlvbikgfHwgJ2x0cidcbiAgY29uc3QgcmVmZXJlbmNlID0geyAuLi5zY3JpcHR1cmVDb25maWcucmVmZXJlbmNlIH1cblxuICBjb25zdCBpc0hlYnJldyA9IChsYW5ndWFnZUlkXyA9PT0gJ2hibycpXG4gIGNvbnN0IGZvbnRGYWN0b3IgPSBpc0hlYnJldyA/IDEuNCA6IDEgLy8gd2UgYXV0b21hdGljYWxseSBzY2FsZSB1cCBmb250IHNpemUgZm9yIEhlYnJld1xuICBjb25zdCBzY2FsZWRGb250U2l6ZSA9IGZvbnRTaXplICogZm9udEZhY3RvclxuXG4gIGNvbnN0IGl0ZW1zID0gbnVsbFxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGhlYWRlcnMsIGZpbHRlcnMsIGl0ZW1JbmRleCwgbWFya2Rvd25WaWV3LFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgc2V0RmlsdGVycywgc2V0SXRlbUluZGV4LCBzZXRNYXJrZG93blZpZXcsXG4gICAgfSxcbiAgfSA9IHVzZUNhcmRTdGF0ZSh7IGl0ZW1zIH0pXG5cbiAgY29uc3QgcmVmU3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke01hdGgucm91bmQoc2NhbGVkRm9udFNpemUgKiAwLjkpfSVgLFxuICB9KSwgW3NjYWxlZEZvbnRTaXplXSlcblxuICBjb25zdCBjb250ZW50U3R5bGUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZm9udEZhbWlseTogJ05vdG8gU2FucycsXG4gICAgZm9udFNpemU6IGAke3NjYWxlZEZvbnRTaXplfSVgLFxuICB9KSwgW3NjYWxlZEZvbnRTaXplXSlcblxuICBjb25zdCBzY3JpcHR1cmVMYWJlbCA9IDxUaXRsZT57c2NyaXB0dXJlVGl0bGV9PC9UaXRsZT5cbiAgbGV0IGRpc2FibGVXb3JkUG9wb3Zlcl8gPSBkaXNhYmxlV29yZFBvcG92ZXJcbiAgY29uc3QgdXNpbmdPcmlnaW5hbEJpYmxlID0gaXNPcmlnaW5hbEJpYmxlKHNjcmlwdHVyZUNvbmZpZ1sncmVzb3VyY2UnXT8ucHJvamVjdElkKVxuXG4gIGlmIChkaXNhYmxlV29yZFBvcG92ZXIgPT09IHVuZGVmaW5lZCkgeyAvLyBpZiBub3Qgc3BlY2lmaWVkLCB0aGVuIGRldGVybWluZSBpZiBvcmlnaW5hbCBsYW5ndWFnZSByZXNvdXJjZVxuICAgIGRpc2FibGVXb3JkUG9wb3Zlcl8gPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIH1cblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBwcmUtY2FjaGUgZ2xvc3NlcyBvbiB2ZXJzZSBjaGFuZ2VcbiAgICBjb25zdCBmZXRjaEdsb3NzRGF0YUZvclZlcnNlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHZlcnNlT2JqZWN0cyA9IFtdXG5cbiAgICAgIC8vIGdldCB2ZXJzZSBvYmplY3RzIG9mIGFsbCB0aGUgdmVyc2VzXG4gICAgICBmb3IgKGNvbnN0IHZlcnNlUmVmIG9mIHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmIHx8IFtdKSB7XG4gICAgICAgIGNvbnN0IF92ZXJzZU9iamVjdHMgPSB2ZXJzZVJlZj8udmVyc2VEYXRhPy52ZXJzZU9iamVjdHNcbiAgICAgICAgdmVyc2VPYmplY3RzID0gdmVyc2VPYmplY3RzLmNvbmNhdChfdmVyc2VPYmplY3RzKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWRpc2FibGVXb3JkUG9wb3ZlciAmJiB2ZXJzZU9iamVjdHM/Lmxlbmd0aCAmJiBmZXRjaEdsb3NzZXNGb3JWZXJzZSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgICAgICBhd2FpdCBmZXRjaEdsb3NzZXNGb3JWZXJzZSh2ZXJzZU9iamVjdHMsIGxhbmd1YWdlSWRfKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1c2luZ09yaWdpbmFsQmlibGUpIHtcbiAgICAgIGZldGNoR2xvc3NEYXRhRm9yVmVyc2UoKVxuICAgIH1cbiAgfSwgWyB2ZXJzZXNGb3JSZWYsIGxhbmd1YWdlSWRfIF0pXG5cbiAgY29uc3QgZW5hYmxlRWRpdCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3QgZW5hYmxlQWxpZ25tZW50ID0gIXVzaW5nT3JpZ2luYWxCaWJsZVxuICBjb25zdCBvcmlnaW5hbFJlcG9VcmwgPSBpc05ld1Rlc3RhbWVudCA/IGdyZWVrUmVwb1VybCA6IGhlYnJld1JlcG9VcmxcbiAgY29uc3Qgc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICBhdXRoZW50aWNhdGlvbjogY2FuVXNlRWRpdEJyYW5jaCA/IGF1dGhlbnRpY2F0aW9uIDogbnVsbCxcbiAgICBib29rSW5kZXgsXG4gICAgY3VycmVudFZlcnNlUmVmOiByZWZlcmVuY2UsXG4gICAgZW5hYmxlRWRpdCxcbiAgICBlbmFibGVBbGlnbm1lbnQsXG4gICAgaHR0cENvbmZpZyxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgbG9nZ2VkSW5Vc2VyOiBjYW5Vc2VFZGl0QnJhbmNoID8gbG9nZ2VkSW5Vc2VyIDogbnVsbCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9yaWdpbmFsUmVwb1VybCxcbiAgICBzY3JpcHR1cmVDb25maWcsXG4gICAgc2NyaXB0dXJlU2V0dGluZ3MsXG4gICAgc3RhcnRFZGl0QnJhbmNoLFxuICAgIHNldFNhdmVkQ2hhbmdlczogX3NldFNhdmVkQ2hhbmdlcyxcbiAgICBzb3VyY2VMYW5ndWFnZTogaXNOVF8gPyBOVF9PUklHX0xBTkcgOiBPVF9PUklHX0xBTkcsXG4gICAgdGFyZ2V0TGFuZ3VhZ2U6IGxhbmd1YWdlLFxuICAgIHRpdGxlOiBzY3JpcHR1cmVUaXRsZSxcbiAgICB3b3JraW5nUmVzb3VyY2VCcmFuY2g6IHJlZixcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgc2NyaXB0dXJlIHBhbmUgaGFzIGEgY2hhbmdlIGluIHNhdmUgc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRJbmRleFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNhdmVkXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGdldENoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB1c2VyIGNsaWNrcyBzYXZlIGJ1dHRvblxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjbGVhckNoYW5nZXMgLSB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBzYXZlIGhhcyBjb21wbGV0ZWRcbiAgICogQHBhcmFtIHtvYmplY3R9IHN0YXRlIC0gY3VycmVudCBzdGF0ZSBvZiB3b3JkIGFsaWdubWVudC9lZGl0XG4gICAqL1xuICBmdW5jdGlvbiBfc2V0U2F2ZWRDaGFuZ2VzKGN1cnJlbnRJbmRleCwgc2F2ZWQsIHsgZ2V0Q2hhbmdlcyA9IG51bGwsIGNsZWFyQ2hhbmdlcyA9IG51bGwsIHN0YXRlID0gbnVsbCB9KSB7XG4gICAgY29uc3QgX3Vuc2F2ZWRDaGFuZ2VzTGlzdCA9IHsgLi4udW5zYXZlZENoYW5nZXNMaXN0IH1cblxuICAgIGlmIChzYXZlZCkge1xuICAgICAgaWYgKF91bnNhdmVkQ2hhbmdlc0xpc3QuaGFzT3duUHJvcGVydHkoY3VycmVudEluZGV4KSkge1xuICAgICAgICBkZWxldGUgX3Vuc2F2ZWRDaGFuZ2VzTGlzdFtjdXJyZW50SW5kZXhdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF91bnNhdmVkQ2hhbmdlc0xpc3RbY3VycmVudEluZGV4XSA9IHsgZ2V0Q2hhbmdlcywgY2xlYXJDaGFuZ2VzLCBzdGF0ZSB9IC8vIHVwZGF0ZSB3aXRoIGxhdGVzdFxuICAgIH1cblxuICAgIGNvbnN0IF9oYXZlVW5zYXZlZENoYW5nZXMgPSAhIU9iamVjdC5rZXlzKF91bnNhdmVkQ2hhbmdlc0xpc3QpLmxlbmd0aFxuXG4gICAgaWYgKGhhdmVVbnNhdmVkQ2hhbmdlcyAhPSBfaGF2ZVVuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICBzZXRTYXZlZENoYW5nZXMgJiYgc2V0U2F2ZWRDaGFuZ2VzKHJlc291cmNlSWQsICFfaGF2ZVVuc2F2ZWRDaGFuZ2VzKVxuICAgICAgc2V0U3RhdGUoeyBoYXZlVW5zYXZlZENoYW5nZXM6IF9oYXZlVW5zYXZlZENoYW5nZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoX3Vuc2F2ZWRDaGFuZ2VzTGlzdCwgdW5zYXZlZENoYW5nZXNMaXN0KSkge1xuICAgICAgc2V0U3RhdGUoeyB1bnNhdmVkQ2hhbmdlc0xpc3Q6IF91bnNhdmVkQ2hhbmdlc0xpc3QgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2VhcmNoIGNoYXB0ZXIgb3IgdmVyc2UgY2h1bmsgdG8gbGluZSB0aGF0IHN0YXJ0cyB3aXRoIGZpbmRJdGVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmluZEl0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gY2h1bmtzXG4gICAqL1xuICBmdW5jdGlvbiBmaW5kUmVmSW5BcnJheShmaW5kSXRlbSwgY2h1bmtzKSB7XG4gICAgY29uc3QgcmVmXyA9IGZpbmRJdGVtICsgJydcbiAgICBjb25zdCByZWZMZW4gPSByZWZfLmxlbmd0aFxuICAgIGNvbnN0IGluZGV4ID0gY2h1bmtzLmZpbmRJbmRleCgoY2h1bmssIGlkeCkgPT4ge1xuICAgICAgaWYgKGlkeCA+IDApIHtcbiAgICAgICAgaWYgKGNodW5rLnN1YnN0cmluZygwLCByZWZMZW4pID09PSByZWZfKSB7XG4gICAgICAgICAgY29uc3QgbmV4dENoYXIgPSBjaHVua1tyZWZMZW5dXG5cbiAgICAgICAgICBpZiAoKG5leHRDaGFyID4gJzknKSB8fCAobmV4dENoYXIgPCAnMCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSlcbiAgICByZXR1cm4gaW5kZXhcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJvb2tOYW1lKCkge1xuICAgIGNvbnN0IGJvb2tDYXBzID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LnByb2plY3RJZCA/IHNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UucHJvamVjdElkLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIHJldHVybiBgJHtib29rSW5kZXh9LSR7Ym9va0NhcHN9LnVzZm1gXG4gIH1cblxuICBjb25zdCBmaWxlcGF0aCA9IGdldEJvb2tOYW1lKClcblxuICAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIGVkaXQgc3RhdGVcbiAgY29uc3QgeyBvblNhdmVFZGl0IH0gPSB1c2VFZGl0KHtcbiAgICBzaGEsXG4gICAgb3duZXIsXG4gICAgY29udGVudDogc2F2ZUNvbnRlbnQsXG4gICAgY29uZmlnOiB7XG4gICAgICBjYWNoZTogeyBtYXhBZ2U6IDAgfSxcbiAgICAgIC4uLmF1dGhlbnRpY2F0aW9uPy5jb25maWcsXG4gICAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGltZW91dDogaHR0cENvbmZpZz8uc2VydmVyVGltZU91dCB8fCBodHRwQ29uZmlnPy50aW1lb3V0IHx8IDUwMDAsXG4gICAgfSxcbiAgICBhdXRob3I6IGxvZ2dlZEluVXNlcixcbiAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgIGJyYW5jaDogd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIGZpbGVwYXRoLFxuICAgIHJlcG8sXG4gIH0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiBzdGFydFNhdmUgZ29lcyB0cnVlLCBzYXZlIGVkaXRzIHRvIHVzZXIgYnJhbmNoIGFuZCB0aGVuIGNsZWFyIHN0YXJ0U2F2ZVxuICAgIGNvbnN0IF9zYXZlRWRpdCA9IGFzeW5jICgpID0+IHsgLy8gYmVnaW4gdXBsb2FkaW5nIG5ldyBVU0ZNXG4gICAgICBsZXQgYnJhbmNoID0gKHdvcmtpbmdSZXNvdXJjZUJyYW5jaCAhPT0gJ21hc3RlcicpID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmICghYnJhbmNoKSB7XG4gICAgICAgIGJyYW5jaCA9IGF3YWl0IHN0YXJ0RWRpdEJyYW5jaCgpIC8vIG1ha2Ugc3VyZSB1c2VyIGJyYW5jaCBleGlzdHMgYW5kIGdldCBuYW1lXG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG9uU2F2ZUVkaXQoYnJhbmNoKS50aGVuKChzdWNjZXNzKSA9PiB7IC8vIHB1c2ggY2hhbmdlZCB0byBzZXJ2ZXJcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZlIHNjcmlwdHVyZSBlZGl0cyBzdWNjZXNzYClcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCB1bnNhdmVkQ2FyZEluZGljZXMgPSBPYmplY3Qua2V5cyh1bnNhdmVkQ2hhbmdlc0xpc3QpXG5cbiAgICAgICAgICBpZiAodW5zYXZlZENhcmRJbmRpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgICBjb25zdCB7IGNsZWFyQ2hhbmdlcyB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmRJbmRleF1cbiAgICAgICAgICAgICAgY2xlYXJDaGFuZ2VzICYmIGNsZWFyQ2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5pbmZvKCdzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIFJlbG9hZGluZyByZXNvdXJjZScpXG4gICAgICAgICAgc2NyaXB0dXJlQ29uZmlnPy5yZWxvYWRSZXNvdXJjZSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgY2hhbmdlZCBzY3JpcHR1cmUgZmFpbGVkJylcbiAgICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gcHJldkNhcmRzU2F2aW5nLmZpbHRlcihjYXJkSWQgPT4gY2FyZElkICE9PSBjYXJkUmVzb3VyY2VJZCkpXG4gICAgICAgICAgc2V0U3RhdGUoeyBzdGFydFNhdmU6IGZhbHNlIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0U2F2ZSkge1xuICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGNhbGxpbmcgX3NhdmVFZGl0KClgKVxuICAgICAgc2V0Q2FyZHNTYXZpbmcocHJldkNhcmRzU2F2aW5nID0+IFsuLi5wcmV2Q2FyZHNTYXZpbmcsIGNhcmRSZXNvdXJjZUlkXSlcbiAgICAgIF9zYXZlRWRpdCgpXG4gICAgfVxuICB9LCBbc3RhcnRTYXZlXSlcblxuICAvKipcbiAgICogY29udmVydCB1cGRhdGVkVmVyc2VPYmplY3RzIHRvIFVTRk0gYW5kIG1lcmdlIGludG8gdGhlIGJpYmxlVXNmbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYmlibGVVc2ZtIC0gVVNGTSBvZiBiaWJsZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcmVmIC0gcmVmZXJlbmNlIG9mIHZlcnNlIHRvIG1lcmdlIGluXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IHVwZGF0ZWRWZXJzZU9iamVjdHMgLSBuZXcgdmVyc2UgaW4gdmVyc2VPYmplY3QgZm9ybWF0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjYXJkTnVtXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZVZlcnNlT2JqZWN0c0ludG9CaWJsZVVzZm0oYmlibGVVc2ZtLCByZWYsIHVwZGF0ZWRWZXJzZU9iamVjdHMsIGNhcmROdW06IG51bWJlcikge1xuICAgIGxldCBuZXdVc2ZtXG4gICAgY29uc3QgY2hhcHRlckNodW5rcyA9IGJpYmxlVXNmbT8uc3BsaXQoJ1xcXFxjICcpXG4gICAgY29uc3QgY2hhcHRlckluZGV4ID0gZmluZFJlZkluQXJyYXkocmVmPy5jaGFwdGVyLCBjaGFwdGVyQ2h1bmtzKVxuXG4gICAgaWYgKGNoYXB0ZXJJbmRleCA+PSAwKSB7XG4gICAgICBjb25zdCBjdXJyZW50Q2hhcHRlciA9IGNoYXB0ZXJDaHVua3NbY2hhcHRlckluZGV4XVxuICAgICAgY29uc3QgdmVyc2VDaHVua3MgPSBjdXJyZW50Q2hhcHRlci5zcGxpdCgnXFxcXHYgJylcbiAgICAgIGNvbnN0IHZlcnNlSW5kZXggPSBmaW5kUmVmSW5BcnJheShyZWY/LnZlcnNlLCB2ZXJzZUNodW5rcylcblxuICAgICAgaWYgKHZlcnNlSW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBuZXdWZXJzZVVzZm0gPSBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzLmNvbnZlcnRWZXJzZURhdGFUb1VTRk0odXBkYXRlZFZlcnNlT2JqZWN0cylcbiAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgke2NhcmROdW19KSAtIG5ldyBVU0ZNIGZvciBjYXJkOn0gLSAke25ld1ZlcnNlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX1gKVxuICAgICAgICBjb25zdCBvbGRWZXJzZSA9IHZlcnNlQ2h1bmtzW3ZlcnNlSW5kZXhdXG4gICAgICAgIGNvbnN0IHZlcnNlTnVtTGVuID0gKHJlZj8udmVyc2UgKyAnJykubGVuZ3RoXG4gICAgICAgIHZlcnNlQ2h1bmtzW3ZlcnNlSW5kZXhdID0gb2xkVmVyc2Uuc3Vic3RyaW5nKDAsIHZlcnNlTnVtTGVuICsgMSkgKyBuZXdWZXJzZVVzZm1cbiAgICAgICAgY29uc3QgbmV3Q2hhcHRlciA9IHZlcnNlQ2h1bmtzLmpvaW4oJ1xcXFx2ICcpXG4gICAgICAgIGNoYXB0ZXJDaHVua3NbY2hhcHRlckluZGV4XSA9IG5ld0NoYXB0ZXJcbiAgICAgICAgbmV3VXNmbSA9IGNoYXB0ZXJDaHVua3Muam9pbignXFxcXGMgJylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1VzZm1cbiAgfVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIGZvciBlYWNoIHVuc2F2ZWQgY2hhbmdlLCBjYWxsIGludG8gdmVyc2VQYW5lIHRvIGdldCBsYXRlc3QgY2hhbmdlcyBmb3IgdmVyc2UgdG8gc2F2ZVxuICAgIGlmIChzYXZlQ2xpY2tlZCkge1xuICAgICAgY29uc3QgdW5zYXZlZENhcmRJbmRpY2VzID0gT2JqZWN0LmtleXModW5zYXZlZENoYW5nZXNMaXN0KVxuXG4gICAgICBpZiAodW5zYXZlZENhcmRJbmRpY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgbGV0IGJpYmxlVXNmbSA9IGNvcmUuZ2V0UmVzcG9uc2VEYXRhKHNjcmlwdHVyZUNvbmZpZz8uZmV0Y2hSZXNwb25zZSlcbiAgICAgICAgbGV0IG1lcmdlRmFpbCA9IGZhbHNlXG4gICAgICAgIGxldCBjYXJkTnVtID0gMFxuXG4gICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgIGNhcmROdW0gPSBwYXJzZUludChjYXJkSW5kZXgpXG4gICAgICAgICAgY29uc3QgeyBnZXRDaGFuZ2VzLCBzdGF0ZSB9ID0gdW5zYXZlZENoYW5nZXNMaXN0W2NhcmROdW1dXG5cbiAgICAgICAgICBpZiAoZ2V0Q2hhbmdlcykge1xuICAgICAgICAgICAgbGV0IG5ld1VzZm1cbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgICAgICAgICAgfSA9IGdldENoYW5nZXMoc3RhdGUpXG5cbiAgICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmIGJpYmxlVXNmbSkgeyAvLyBqdXN0IHJlcGxhY2UgdmVyc2VcbiAgICAgICAgICAgICAgbmV3VXNmbSA9IG1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbShiaWJsZVVzZm0sIHJlZiwgdXBkYXRlZFZlcnNlT2JqZWN0cywgY2FyZE51bSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld1VzZm0pIHtcbiAgICAgICAgICAgICAgYmlibGVVc2ZtID0gbmV3VXNmbVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWVyZ2VGYWlsID0gdHJ1ZVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtZXJnZUZhaWwpIHsgLy8gaWYgd2UgZmFpbGVkIHRvIG1lcmdlLCBmYWxsYmFjayB0byBicnV0ZSBmb3JjZSB2ZXJzZSBvYmplY3RzIHRvIFVTRk1cbiAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCR7Y2FyZE51bX0pIC0gdmVyc2Ugbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gaW5zZXJ0aW5nIHZlcnNlIG9iamVjdGApXG4gICAgICAgICAgbGV0IG5ld0Jvb2tKc29uXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGNhcmRJbmRleCBvZiB1bnNhdmVkQ2FyZEluZGljZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhcmROdW0gPSBwYXJzZUludChjYXJkSW5kZXgpXG4gICAgICAgICAgICBjb25zdCB7IGdldENoYW5nZXMsIHN0YXRlIH0gPSB1bnNhdmVkQ2hhbmdlc0xpc3RbY2FyZE51bV1cblxuICAgICAgICAgICAgaWYgKGdldENoYW5nZXMpIHtcbiAgICAgICAgICAgICAgbGV0IG5ld1VzZm1cbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIG5ld1ZlcnNlVGV4dCxcbiAgICAgICAgICAgICAgICByZWYsXG4gICAgICAgICAgICAgICAgdXBkYXRlZFZlcnNlT2JqZWN0cyxcbiAgICAgICAgICAgICAgfSA9IGdldENoYW5nZXMoc3RhdGUpXG5cbiAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRWZXJzZU9iamVjdHMgJiYgIW5ld1VzZm0pIHtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IG51bGxcblxuICAgICAgICAgICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdWZXJzZVRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB0YXJnZXRWZXJzZU9iamVjdHMgfSA9IEFsaWdubWVudEhlbHBlcnMudXBkYXRlQWxpZ25tZW50c1RvVGFyZ2V0VmVyc2UodXBkYXRlZFZlcnNlT2JqZWN0cywgbmV3VmVyc2VUZXh0KVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRWZXJzZU9iamVjdHNfID0gdGFyZ2V0VmVyc2VPYmplY3RzXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRWZXJzZU9iamVjdHNfID0gdXBkYXRlZFZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgbmV3Qm9va0pzb24gPSB0YXJnZXRWZXJzZU9iamVjdHNfICYmIHNjcmlwdHVyZUNvbmZpZz8udXBkYXRlVmVyc2UocmVmLmNoYXB0ZXIsIHJlZi52ZXJzZSwgeyB2ZXJzZU9iamVjdHM6IHRhcmdldFZlcnNlT2JqZWN0c18gfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBiaWJsZVVzZm0gPSB1c2ZtanMudG9VU0ZNKG5ld0Jvb2tKc29uLCB7IGZvcmNlZE5ld0xpbmVzOiB0cnVlIH0pXG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgbmV3IFVTRk06ICR7YmlibGVVc2ZtLnN1YnN0cmluZygwLCAxMDApfS4uLmApXG4gICAgICAgIHNldFN0YXRlKHsgc2F2ZUNvbnRlbnQ6IGJpYmxlVXNmbSwgc3RhcnRTYXZlOiB0cnVlLCBzYXZlQ2xpY2tlZDogZmFsc2UgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzYXZlQ2xpY2tlZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXF1YWwodmVyc2VzRm9yUmVmLCBzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZikpIHtcbiAgICAgIGNvbnN0IHZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG4gICAgICBzZXRTdGF0ZSh7IHZlcnNlc0ZvclJlZiB9KVxuXG4gICAgICBmb3IgKGNvbnN0IHZlcnNlUmVmIG9mIHZlcnNlc0ZvclJlZiB8fCBbXSkge1xuICAgICAgICAvLyBjaGVjayBmb3IgdmVyc2UgcmFuZ2VcbiAgICAgICAgY29uc3QgX3ZlcnNlID0gdmVyc2VSZWYudmVyc2VcblxuICAgICAgICBpZiAoYWRkVmVyc2VSYW5nZSAmJiAodHlwZW9mIF92ZXJzZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGlmIChfdmVyc2UuaW5jbHVkZXMoJy0nKSkge1xuICAgICAgICAgICAgYWRkVmVyc2VSYW5nZShgJHtzY3JpcHR1cmVDb25maWc/LnJlZmVyZW5jZT8uY2hhcHRlcn06JHtfdmVyc2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sIFtzY3JpcHR1cmVDb25maWc/LnZlcnNlc0ZvclJlZl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTdGF0ZSh7IHZlcnNlc0FsaWdubWVudFN0YXR1czogbnVsbCB9KVxuICB9LCBbdmVyc2VdKVxuXG4gIGNvbnN0IG5lZWRUb01lcmdlRnJvbU1hc3RlciA9IG1lcmdlRnJvbU1hc3Rlcj8ubWVyZ2VOZWVkZWRcbiAgY29uc3QgbWVyZ2VGcm9tTWFzdGVySGFzQ29uZmxpY3RzID0gbWVyZ2VGcm9tTWFzdGVyPy5jb25mbGljdFxuICBjb25zdCBtZXJnZVRvTWFzdGVySGFzQ29uZmxpY3RzID0gbWVyZ2VUb01hc3Rlcj8uY29uZmxpY3RcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgY29uc3QgbWVyZ2VGcm9tTWFzdGVyVGl0bGUgPSBtZXJnZUZyb21NYXN0ZXJIYXNDb25mbGljdHMgPyAnTWVyZ2UgQ29uZmxpY3RzIGZvciB1cGRhdGUgZnJvbSBtYXN0ZXInIDogKG5lZWRUb01lcmdlRnJvbU1hc3RlciA/ICdVcGRhdGUgZnJvbSBtYXN0ZXInIDogJ05vIG1lcmdlIGNvbmZsaWN0cyBmb3IgdXBkYXRlIHdpdGggbWFzdGVyJylcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gIGNvbnN0IG1lcmdlRnJvbU1hc3RlckNvbG9yID0gbWVyZ2VGcm9tTWFzdGVySGFzQ29uZmxpY3RzID8gJ2JsYWNrJyA6IChuZWVkVG9NZXJnZUZyb21NYXN0ZXIgPyAnYmxhY2snIDogJ2xpZ2h0Z3JheScpXG4gIGNvbnN0IG1lcmdlVG9NYXN0ZXJUaXRsZSA9IG1lcmdlVG9NYXN0ZXJIYXNDb25mbGljdHMgPyAnTWVyZ2UgQ29uZmxpY3RzIGZvciBzaGFyZSB3aXRoIG1hc3RlcicgOiAnTm8gbWVyZ2UgY29uZmxpY3RzIGZvciBzaGFyZSB3aXRoIG1hc3RlcidcbiAgY29uc3QgbWVyZ2VUb01hc3RlckNvbG9yID0gbWVyZ2VUb01hc3Rlckhhc0NvbmZsaWN0cyA/ICdibGFjaycgOiAnYmxhY2snXG5cbiAgY29uc3QgdXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzID0gKHJlZmVyZW5jZSwgYWxpZ25lZCkgPT4ge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHtcbiAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1czogey4uLnByZXZTdGF0ZS52ZXJzZXNBbGlnbm1lbnRTdGF0dXMsIFtgJHtyZWZlcmVuY2UuY2hhcHRlcn06JHtyZWZlcmVuY2UudmVyc2V9YF06IGFsaWduZWR9LFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgcmVuZGVyZWRTY3JpcHR1cmVQYW5lcyA9IHZlcnNlc0ZvclJlZj8ubWFwKChfY3VycmVudFZlcnNlRGF0YSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBpbml0aWFsVmVyc2VPYmplY3RzID0gX2N1cnJlbnRWZXJzZURhdGE/LnZlcnNlRGF0YT8udmVyc2VPYmplY3RzIHx8IG51bGxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgeyBjaGFwdGVyLCB2ZXJzZSB9ID0gX2N1cnJlbnRWZXJzZURhdGEgfHwge31cbiAgICBjb25zdCBfcmVmZXJlbmNlID0ge1xuICAgICAgLi4ucmVmZXJlbmNlLFxuICAgICAgY2hhcHRlcixcbiAgICAgIHZlcnNlLFxuICAgIH1cbiAgICBjb25zdCBfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICAgIC4uLnNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcsXG4gICAgICBjdXJyZW50SW5kZXg6IGluZGV4LFxuICAgICAgaW5pdGlhbFZlcnNlT2JqZWN0cyxcbiAgICAgIHJlZmVyZW5jZTogX3JlZmVyZW5jZSxcbiAgICB9XG5cbiAgICBsZXQgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50ID0gZmFsc2VcbiAgICBpZiAodmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCkge1xuICAgICAgaXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50ID0gdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudC5jaGFwdGVyID09PSBjaGFwdGVyICYmIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQudmVyc2UgPT09IHZlcnNlXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTY3JpcHR1cmVQYW5lXG4gICAgICAgIHsuLi5zY3JpcHR1cmVDb25maWd9XG4gICAgICAgIGNvbnRlbnRTdHlsZT17Y29udGVudFN0eWxlfVxuICAgICAgICBjdXJyZW50SW5kZXg9e2luZGV4fVxuICAgICAgICBkaXJlY3Rpb249e2RpcmVjdGlvbn1cbiAgICAgICAgZGlzYWJsZVdvcmRQb3BvdmVyPXtkaXNhYmxlV29yZFBvcG92ZXJffVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGdldExleGljb25EYXRhPXtnZXRMZXhpY29uRGF0YX1cbiAgICAgICAgaXNOVD17aXNOVF99XG4gICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgIHJlZlN0eWxlPXtyZWZTdHlsZX1cbiAgICAgICAgcmVmZXJlbmNlPXtfcmVmZXJlbmNlfVxuICAgICAgICBzYXZpbmc9e3N0YXJ0U2F2ZX1cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnPXtfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZ31cbiAgICAgICAgc2V0V29yZEFsaWduZXJTdGF0dXM9e3NldFdvcmRBbGlnbmVyU3RhdHVzfVxuICAgICAgICBzZXJ2ZXI9e3NlcnZlcn1cbiAgICAgICAgdHJhbnNsYXRlPXt0cmFuc2xhdGV9XG4gICAgICAgIGlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudD17aXNWZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50fVxuICAgICAgICBvbkFsaWdubWVudEZpbmlzaD17KCkgPT4gc2V0U3RhdGUoeyB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiBudWxsIH0pfVxuICAgICAgICB1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXM9e3VwZGF0ZVZlcnNlc0FsaWdubWVudFN0YXR1c31cbiAgICAgIC8+XG4gICAgKVxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZUFsaWduQnV0dG9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKHZlcnNlc0ZvclJlZj8ubGVuZ3RoID4gMSkge1xuICAgICAgc2V0U3RhdGUoeyBzaG93QWxpZ25tZW50UG9wdXA6IHRydWUgfSlcbiAgICB9IGVsc2UgaWYgKHZlcnNlc0ZvclJlZj8ubGVuZ3RoID09PSAxKSB7XG4gICAgICBzZXRTdGF0ZSh7IHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IHZlcnNlc0ZvclJlZlswXSB9KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9uUmVuZGVyVG9vbGJhciA9ICh7IGl0ZW1zIH0pID0+IHtcbiAgICBjb25zdCBuZXdJdGVtcyA9IFsuLi5pdGVtc11cblxuICAgIGxldCBhbGxWZXJzZXNBbGlnbmVkID0gZmFsc2VcbiAgICAvLyBDaGVjayBpZiBhbGwgdmFsdWVzIGluIHZlcnNlc0FsaWdubWVudFN0YXR1cyBhcmUgdHJ1ZVxuICAgIGlmICh2ZXJzZXNBbGlnbm1lbnRTdGF0dXMpIHtcbiAgICAgIGFsbFZlcnNlc0FsaWduZWQgPSBPYmplY3QudmFsdWVzKHZlcnNlc0FsaWdubWVudFN0YXR1cykuZXZlcnkoYWxpZ25TdGF0dXMgPT4gYWxpZ25TdGF0dXMgPT09IHRydWUpXG4gICAgfVxuICAgIGxldCBhbGlnbkljb24gPSBudWxsXG4gICAgbGV0IGFsaWduQnV0dG9uVGV4dCA9ICcnXG4gICAgaWYgKGFsbFZlcnNlc0FsaWduZWQpIHtcbiAgICAgIGFsaWduSWNvbiA9IDxSeExpbmsyIGlkPXtgdmFsaWRfaWNvbl8ke3Jlc291cmNlSWR9YH0gY29sb3I9JyNCQkInIC8+XG4gICAgICBhbGlnbkJ1dHRvblRleHQgPSAnQWxpZ25tZW50IGlzIFZhbGlkJ1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbkljb24gPSA8UnhMaW5rQnJlYWsyIGlkPXtgaW52YWxpZF9hbGlnbm1lbnRfaWNvbl8ke3Jlc291cmNlSWR9YH0gY29sb3I9JyMwMDAnIC8+XG4gICAgICBhbGlnbkJ1dHRvblRleHQgPSAnQWxpZ25tZW50IGlzIEludmFsaWQnXG4gICAgfVxuXG4gICAgaWYgKHNldFdvcmRBbGlnbmVyU3RhdHVzICYmIHJlc291cmNlSWQgIT09ICdPUklHSU5BTF9TT1VSQ0UnKSB7XG4gICAgICBuZXdJdGVtcy5wdXNoKFxuICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgIGlkPXtgYWxpZ25tZW50X2ljb25fJHtyZXNvdXJjZUlkfWB9XG4gICAgICAgICAga2V5PSdjaGVja2luZy1idXR0b24nXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlQWxpZ25CdXR0b25DbGlja31cbiAgICAgICAgICB0aXRsZT17YWxpZ25CdXR0b25UZXh0fVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2FsaWduQnV0dG9uVGV4dH1cbiAgICAgICAgICBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fVxuICAgICAgICA+XG4gICAgICAgICAge2FsaWduSWNvbn1cbiAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgKVxuICAgIH1cblxuICAgIG5ld0l0ZW1zLnB1c2goXG4gICAgICA8PlxuICAgICAgICA8VXBkYXRlQnJhbmNoQnV0dG9uIHsuLi51cGRhdGVCdXR0b25Qcm9wc30gaXNMb2FkaW5nPXtpc0xvYWRpbmcgfHwgc3RhcnRTYXZlfS8+XG4gICAgICAgIDxFcnJvckRpYWxvZyB0aXRsZT17ZGlhbG9nVGl0bGV9IGNvbnRlbnQ9e2RpYWxvZ01lc3NhZ2V9IG9wZW49e2lzRXJyb3JEaWFsb2dPcGVufSBvbkNsb3NlPXtvbkNsb3NlRXJyb3JEaWFsb2d9IGlzTG9hZGluZz17IGlzTG9hZGluZyB8fCBzdGFydFNhdmUgfSBsaW5rPXtkaWFsb2dMaW5rfSBsaW5rVG9vbHRpcD17ZGlhbG9nTGlua1Rvb2x0aXB9IC8+XG4gICAgICA8Lz5cbiAgICApXG5cbiAgICBpZiAobWVyZ2VUb01hc3Rlcikge1xuICAgICAgbmV3SXRlbXMucHVzaChcbiAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMubWFyZ2lufVxuICAgICAgICAgIGtleT0nc2hhcmUtdG8tbWFzdGVyJ1xuICAgICAgICAgIG9uQ2xpY2s9e21lcmdlVG9NYXN0ZXJGcm9tVXNlckJyYW5jaH1cbiAgICAgICAgICB0aXRsZT17bWVyZ2VUb01hc3RlclRpdGxlfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e21lcmdlVG9NYXN0ZXJUaXRsZX1cbiAgICAgICAgICBzdHlsZT17eyBjdXJzb3I6ICdwb2ludGVyJyB9fVxuICAgICAgICA+XG4gICAgICAgICAge21lcmdlVG9NYXN0ZXJIYXNDb25mbGljdHMgP1xuICAgICAgICAgICAgPE1kVXBkYXRlRGlzYWJsZWQgaWQ9J3NoYXJlLXRvLW1hc3Rlci1pY29uJyBjb2xvcj17bWVyZ2VUb01hc3RlckNvbG9yfSAvPlxuICAgICAgICAgICAgOlxuICAgICAgICAgICAgPEZpU2hhcmUgaWQ9J3NoYXJlLXRvLW1hc3Rlci1pY29uJyBjb2xvcj17bWVyZ2VUb01hc3RlckNvbG9yfSAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gbmV3SXRlbXM7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Q2FyZFxuICAgICAgICBpZD17YHNjcmlwdHVyZV9jYXJkXyR7Y2FyZE51bX1gfVxuICAgICAgICB0aXRsZT17c2NyaXB0dXJlTGFiZWx9XG4gICAgICAgIHNldHRpbmdzVGl0bGU9e3NjcmlwdHVyZVRpdGxlICsgJyBTZXR0aW5ncyd9XG4gICAgICAgIGl0ZW1zPXtpdGVtc31cbiAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgaGVhZGVycz17aGVhZGVyc31cbiAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBpdGVtSW5kZXg9e2l0ZW1JbmRleH1cbiAgICAgICAgc2V0RmlsdGVycz17c2V0RmlsdGVyc31cbiAgICAgICAgc2V0Rm9udFNpemU9e3NldEZvbnRTaXplfVxuICAgICAgICBzZXRJdGVtSW5kZXg9e3NldEl0ZW1JbmRleH1cbiAgICAgICAgbWFya2Rvd25WaWV3PXttYXJrZG93blZpZXd9XG4gICAgICAgIHNldE1hcmtkb3duVmlldz17c2V0TWFya2Rvd25WaWV3fVxuICAgICAgICBnZXRDdXN0b21Db21wb25lbnQ9e2dldFNjcmlwdHVyZVNlbGVjdG9yfVxuICAgICAgICBoaWRlTWFya2Rvd25Ub2dnbGVcbiAgICAgICAgb25NZW51Q2xvc2U9e29uTWVudUNsb3NlfVxuICAgICAgICBvbk1pbmltaXplPXtvbk1pbmltaXplID8gKCkgPT4gb25NaW5pbWl6ZShpZCkgOiBudWxsfVxuICAgICAgICBlZGl0YWJsZT17ZW5hYmxlRWRpdCB8fCBlbmFibGVBbGlnbm1lbnR9XG4gICAgICAgIHNhdmVkPXtzdGFydFNhdmUgfHwgIWhhdmVVbnNhdmVkQ2hhbmdlc31cbiAgICAgICAgb25TYXZlRWRpdD17KCkgPT4gc2V0U3RhdGUoeyBzYXZlQ2xpY2tlZDogdHJ1ZSB9KX1cbiAgICAgICAgb25SZW5kZXJUb29sYmFyPXtvblJlbmRlclRvb2xiYXJ9XG4gICAgICA+XG4gICAgICAgIDxkaXYgaWQ9XCJzY3JpcHR1cmUtcGFuZS1saXN0XCI+XG4gICAgICAgICAge3JlbmRlcmVkU2NyaXB0dXJlUGFuZXN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9DYXJkPlxuICAgICAgPFZlcnNlU2VsZWN0b3JQb3B1cFxuICAgICAgICByZXNvdXJjZUlkPXtyZXNvdXJjZUlkfVxuICAgICAgICBvcGVuPXtzaG93QWxpZ25tZW50UG9wdXB9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFN0YXRlKHsgc2hvd0FsaWdubWVudFBvcHVwOiBmYWxzZSB9KX1cbiAgICAgICAgdmVyc2VzRm9yUmVmPXt2ZXJzZXNGb3JSZWZ9XG4gICAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1cz17dmVyc2VzQWxpZ25tZW50U3RhdHVzfVxuICAgICAgICBvblZlcnNlU2VsZWN0PXsodmVyc2UpID0+IHNldFN0YXRlKHtcbiAgICAgICAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiB2ZXJzZSxcbiAgICAgICAgICBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlXG4gICAgICAgIH0pfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKVxufVxuXG5TY3JpcHR1cmVDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqIGh0bWwgaWRlbnRpZmllciB0byB1c2UgZm9yIGNhcmQgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBtZXRob2QgdG8gZGV0ZXJtaW5lIGlmIE5UIG9yIE9UICovXG4gIGlzTlQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiB0aXRsZSBmb3Igc2NyaXB0dXJlIGNhcmQgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGdldCBsYW5ndWFnZSBkZXRhaWxzICovXG4gIGdldExhbmd1YWdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogc2NyaXB0dXJlIGNhcmQgbnVtYmVyICgwIHRvIDIgZm9yIGV4YW1wbGUpICovXG4gIGNhcmROdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgLyoqIHJlc291cmNlIG9iamVjdCAqL1xuICByZXNvdXJjZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvKiogcmVzb3VyY2UgbGFuZ3VhZ2UgdG8gdXNlICovXG4gICAgbGFuZ3VhZ2VJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXBvIG93bmVyIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG93bmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgLyoqIHJlc291cmNlSWQgdG8gdXNlIChlLmcuIHVnbnQpICovXG4gICAgcmVzb3VyY2VJZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXBvIG93bmVyIGZvciBvcmlnaW5hbCBsYW5ndWFnZXMgc3VjaCBhcyB1bmZvbGRpbmdXb3JkICovXG4gICAgb3JpZ2luYWxMYW5ndWFnZU93bmVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLFxuICByZWZlcmVuY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHByb2plY3RJZCAoYm9va0lEKSB0byB1c2UgKi9cbiAgICBwcm9qZWN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCBjaGFwdGVyIG51bWJlciAqL1xuICAgIGNoYXB0ZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IHZlcnNlIG51bWJlciAqL1xuICAgIHZlcnNlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgfSksXG4gIC8qKiBzZXJ2ZXIgKGUuZy4gJ2h0dHBzOi8vZ2l0LmRvb3I0My5vcmcnKSAqL1xuICBzZXJ2ZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIHJlcG8gYnJhbmNoIG9yIHRhZyBzdWNoIGFzIG1hc3RlciAqL1xuICBhcHBSZWY6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGlmIHRydWUgdGhlbiB3b3JkIGRhdGEgaG92ZXIgaXMgc2hvd24gKi9cbiAgZGlzYWJsZVdvcmRQb3BvdmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqIENTUyBjbGFzc2VzICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiByZXNvdXJjZUxpbmsgKi9cbiAgcmVzb3VyY2VMaW5rOiBQcm9wVHlwZXMuYW55LFxuICAvKiogdXNlIG1ldGhvZCBmb3IgdXNpbmcgbG9jYWwgc3RvcmFnZSBzcGVjaWZpYyBmb3IgdXNlciAqL1xuICB1c2VVc2VyTG9jYWxTdG9yYWdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogb3B0aW9uYWwgY2FsbGJhY2sgaWYgZXJyb3IgbG9hZGluZyByZXNvdXJjZSwgcGFyYW1ldGVyIHJldHVybmVkIGFyZTpcbiAgICogICAgKHtzdHJpbmd9IGVycm9yTWVzc2FnZSwge2Jvb2xlYW59IGlzQWNjZXNzRXJyb3IsIHtvYmplY3R9IHJlc291cmNlU3RhdHVzKVxuICAgKiAgICAgIC0gaXNBY2Nlc3NFcnJvciAtIGlzIHRydWUgaWYgdGhpcyB3YXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGFjY2VzcyBmaWxlXG4gICAqICAgICAgLSByZXNvdXJjZVN0YXR1cyAtIGlzIG9iamVjdCBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgcHJvYmxlbXMgZmV0Y2hpbmcgcmVzb3VyY2UgKi9cbiAgb25SZXNvdXJjZUVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIG9wdGlvbmFsIGh0dHAgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGZldGNoaW5nIHJlc291cmNlcywgZGVmYXVsdCBpcyAwICh2ZXJ5IGxvbmcgd2FpdCkgKi9cbiAgaHR0cENvbmZpZzogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIG9wdGlvbmFsIHVybCBmb3IgZ3JlZWsgcmVwbyAqL1xuICBncmVla1JlcG9Vcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGhlYnJldyByZXBvICovXG4gIGhlYnJld1JlcG9Vcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBmdW5jdGlvbiB0byBnZXQgbGF0ZXN0IGxleGljb24gZGF0YSAqL1xuICBnZXRMZXhpY29uRGF0YTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBwcmUtbG9hZCBsZXhpY29uIGRhdGEgZm9yIHZlcnNlICovXG4gIGZldGNoR2xvc3Nlc0ZvclZlcnNlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBsb2NhbGl6YXRpb24gKi9cbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGZ1bmN0aW9uIHRvIG1pbmltaXplIHRoZSBjYXJkIChvcHRpb25hbCkgKi9cbiAgb25NaW5pbWl6ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiB1c2VyLW5hbWUgKi9cbiAgbG9nZ2VkSW5Vc2VyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogYXV0aGVudGljYXRpb24gaW5mbyAqL1xuICBhdXRoZW50aWNhdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqIGZ1bmN0aW9uIHRvIHNldCBzdGF0ZSBpbiBhcHAgdGhhdCB0aGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzICovXG4gIHNldFNhdmVkQ2hhbmdlczogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBpbmRleCBmb3IgY3VycmVudCBib29rIChlLmcuICcwMScgZm9yICdnZW4nKSovXG4gIGJvb2tJbmRleDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIGNhbGxiYWNrIHRvIGluZGljYXRlIHRoYXQgd2UgYXJlIHVzaW5nIGEgdmVyc2UgcmFuZ2UgaGVyZSAqL1xuICBhZGRWZXJzZVJhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGNhbGxiYWNrIHRvIHVwZGF0ZSB3b3JkIGFsaWduZXIgc3RhdGUgKi9cbiAgc2V0V29yZEFsaWduZXJTdGF0dXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHRoZSBjYXJkJ3MgbWVyZ2Ugc3RhdGUgaW4gYXBwICovXG4gIHVwZGF0ZU1lcmdlU3RhdGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIGxvYWRpbmcgc3RhdGUgKi9cbiAgc2V0QXJlUmVzb3VyY2VzTG9hZGluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBjYWxsYmFjayB0byB1cGRhdGUgc2F2aW5nIHN0YXRlKi9cbiAgc2V0QXJlUmVzb3VyY2VzU2F2aW5nOiBQcm9wVHlwZXMuZnVuYyxcbn1cbiJdfQ==
|
|
1489
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1NjcmlwdHVyZUNhcmQvU2NyaXB0dXJlQ2FyZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQcm9wVHlwZXMiLCJjb3JlIiwiU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlciIsInVzZm1qcyIsInVzZUVkaXQiLCJNZFVwZGF0ZSIsIk1kVXBkYXRlRGlzYWJsZWQiLCJGaVNoYXJlIiwiSWNvbkJ1dHRvbiIsIlJ4TGluazIiLCJSeExpbmtCcmVhazIiLCJDYXJkIiwiRXJyb3JEaWFsb2ciLCJFUlJPUl9TVEFURSIsIk1BTklGRVNUX05PVF9MT0FERURfRVJST1IiLCJVcGRhdGVCcmFuY2hCdXR0b24iLCJ1c2VCcmFuY2hNZXJnZXIiLCJ1c2VDYXJkU3RhdGUiLCJ1c2VDb250ZW50VXBkYXRlUHJvcHMiLCJ1c2VVc2VyQnJhbmNoIiwiZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmIiwiQWxpZ25tZW50SGVscGVycyIsIlVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMiLCJpc0VxdWFsIiwiZ2V0VmVyc2VzIiwiU2NyaXB0dXJlUGFuZSIsIlNjcmlwdHVyZVNlbGVjdG9yIiwidXNlU2NyaXB0dXJlU2V0dGluZ3MiLCJjbGVhbnVwVmVyc2VPYmplY3RzIiwiZml4T2NjdXJyZW5jZSIsImdldFJlc291cmNlTGluayIsImdldFJlc291cmNlTWVzc2FnZSIsImdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyIsImlzT3JpZ2luYWxCaWJsZSIsImRlbGF5IiwiYXJlTWFwc1RoZVNhbWUiLCJUaXRsZSIsIk5UX09SSUdfTEFORyIsIk9SSUdJTkFMX1NPVVJDRSIsIk9UX09SSUdfTEFORyIsIlZlcnNlU2VsZWN0b3JQb3B1cCIsIktFWV9GT05UX1NJWkVfQkFTRSIsImxhYmVsIiwic3R5bGUiLCJtYXJnaW5Ub3AiLCJ3aWR0aCIsImNvbXBhcmVPYmplY3QiLCJ2ZXJzZVJlZiIsImNoYXB0ZXIiLCJ2ZXJzZSIsInZlcnNlRGF0YSIsInZlcnNlT2JqZWN0cyIsImxlbmd0aCIsImFyZVZlcnNlc1NhbWUiLCJ2ZXJzZXNGb3JSZWYxIiwidmVyc2VzRm9yUmVmMiIsImFyZVNhbWUiLCJpIiwibCIsInZlcnNlMSIsInZlcnNlMiIsIlNjcmlwdHVyZUNhcmQiLCJhcHBSZWYiLCJhdXRoZW50aWNhdGlvbiIsImJvb2tJbmRleCIsImNhcmROdW0iLCJjbGFzc2VzIiwiZGlzYWJsZVdvcmRQb3BvdmVyIiwiZ2V0TGFuZ3VhZ2UiLCJnZXRMZXhpY29uRGF0YSIsImdyZWVrUmVwb1VybCIsImhlYnJld1JlcG9VcmwiLCJodHRwQ29uZmlnIiwiaWQiLCJpc05UIiwibG9nZ2VkSW5Vc2VyIiwib25NaW5pbWl6ZSIsIm9uUmVzb3VyY2VFcnJvciIsIm9yaWdpbmFsU2NyaXB0dXJlQm9va09iamVjdHMiLCJyZWZlcmVuY2UiLCJyZXNvdXJjZSIsIm93bmVyIiwibGFuZ3VhZ2VJZCIsInJlc291cmNlSWQiLCJvcmlnaW5hbExhbmd1YWdlT3duZXIiLCJyZXNvdXJjZUxpbmsiLCJzZWxlY3RlZFF1b3RlIiwic2VydmVyIiwic2V0Q2FyZHNMb2FkaW5nIiwic2V0Q2FyZHNTYXZpbmciLCJzZXRTYXZlZENoYW5nZXMiLCJzZXRXb3JkQWxpZ25lclN0YXR1cyIsInRyYW5zbGF0ZSIsInRpdGxlIiwidXNlVXNlckxvY2FsU3RvcmFnZSIsInVwZGF0ZU1lcmdlU3RhdGUiLCJib29rSWQiLCJwcm9qZWN0SWQiLCJ1c2VTdGF0ZSIsImNoZWNrRm9yRWRpdEJyYW5jaCIsImN1cnJlbnRSZWZlcmVuY2UiLCJlZGl0QnJhbmNoUmVhZHkiLCJoYXZlVW5zYXZlZENoYW5nZXMiLCJsYXN0U2VsZWN0ZWRRdW90ZSIsInJlYWR5Rm9yRmV0Y2giLCJyZWYiLCJzYXZlQ2xpY2tlZCIsInNhdmVDb250ZW50Iiwic2VsZWN0aW9ucyIsIk1hcCIsInNoYSIsInNob3dBbGlnbm1lbnRQb3B1cCIsInN0YXJ0U2F2ZSIsInVybEVycm9yIiwidXNpbmdVc2VyQnJhbmNoIiwidW5zYXZlZENoYW5nZXNMaXN0IiwidmVyc2VzQWxpZ25tZW50U3RhdHVzIiwidmVyc2VzRm9yUmVmIiwidmVyc2VPYmplY3RzTWFwIiwidmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsInN0YXRlIiwic2V0U3RhdGVfIiwiZm9udFNpemUiLCJzZXRGb250U2l6ZSIsImlzTlRfIiwic2V0U3RhdGUiLCJuZXdTdGF0ZSIsInByZXZTdGF0ZSIsImNhY2hlIiwibWF4QWdlIiwibm9DYWNoZSIsInNldFVybEVycm9yIiwiZXJyb3IiLCJ3aG9sZUJvb2siLCJpc05ld1Rlc3RhbWVudCIsInNjcmlwdHVyZUNvbmZpZyIsInNldFNjcmlwdHVyZSIsInNjcmlwdHVyZVNldHRpbmdzIiwic2NyaXB0dXJlVmVyc2lvbkhpc3QiLCJmZXRjaFJlc3BfIiwiZmV0Y2hSZXNwb25zZSIsInJlcG8iLCJyZWZlcmVuY2VfIiwidXNlRWZmZWN0IiwiX3NoYSIsImRhdGEiLCJ1cmwiLCJkb3dubG9hZF91cmwiLCJ2YWxpZEJyYW5jaCIsInBhcnRzIiwic3BsaXQiLCJmZXRjaEJyYW5jaCIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5IiwiY2FyZFJlc291cmNlSWQiLCJyZWZfIiwiY2FuVXNlRWRpdEJyYW5jaCIsImluY2x1ZGVzIiwiY2FyZElkIiwiYnJhbmNoRGV0ZXJtaW5lZCIsInVzZXJFZGl0QnJhbmNoTmFtZSIsIl91c2luZ1VzZXJCcmFuY2giLCJ3b3JraW5nUmVzb3VyY2VCcmFuY2giLCJzdGFydEVkaXRCcmFuY2giLCJhY3Rpb25zIiwic3RhcnRFZGl0IiwiX3VzZUJyYW5jaE1lcmdlciIsInVzZXJCcmFuY2giLCJ0b2tlbmlkIiwidG9rZW4iLCJzaGExIiwibWVyZ2VUb01hc3RlciIsIm1lcmdlU3RhdHVzIiwibWVyZ2VGcm9tTWFzdGVyIiwidXBkYXRlU3RhdHVzIiwibWVyZ2VGcm9tTWFzdGVySW50b1VzZXJCcmFuY2giLCJ1cGRhdGVVc2VyQnJhbmNoIiwibWVyZ2VUb01hc3RlckZyb21Vc2VyQnJhbmNoIiwibWVyZ2VNYXN0ZXJCcmFuY2giLCJ1cGRhdGVCdXR0b25Qcm9wcyIsImlzU2F2aW5nIiwicmVsb2FkQ29udGVudCIsInJlbG9hZFJlc291cmNlIiwiY2FsbFVwZGF0ZVVzZXJCcmFuY2giLCJpc0Vycm9yRGlhbG9nT3BlbiIsIm9uQ2xvc2VFcnJvckRpYWxvZyIsImlzTG9hZGluZyIsImRpYWxvZ01lc3NhZ2UiLCJkaWFsb2dUaXRsZSIsImRpYWxvZ0xpbmsiLCJkaWFsb2dMaW5rVG9vbHRpcCIsInByZXZDYXJkc0xvYWRpbmciLCJmaWx0ZXIiLCJ3b3JraW5nUmVmIiwic2NyaXB0dXJlVGl0bGUiLCJyZXNvdXJjZVN0YXR1cyIsIm1lc3NhZ2UiLCJpc0FjY2Vzc0Vycm9yIiwidmVyc2lvbiIsInVwZGF0ZVRpdGxlIiwiZ2V0U2NyaXB0dXJlU2VsZWN0b3IiLCJzY3JpcHR1cmVTZWxlY3Rpb25Db25maWciLCJvbk1lbnVDbG9zZSIsImxhbmd1YWdlSWRfIiwibGFuZ3VhZ2UiLCJkaXJlY3Rpb24iLCJfcmVmZXJlbmNlIiwiaXNIZWJyZXciLCJmb250RmFjdG9yIiwic2NhbGVkRm9udFNpemUiLCJpdGVtcyIsImhlYWRlcnMiLCJmaWx0ZXJzIiwiaXRlbUluZGV4IiwibWFya2Rvd25WaWV3Iiwic2V0RmlsdGVycyIsInNldEl0ZW1JbmRleCIsInNldE1hcmtkb3duVmlldyIsInJlZlN0eWxlIiwidXNlTWVtbyIsImZvbnRGYW1pbHkiLCJNYXRoIiwicm91bmQiLCJjb250ZW50U3R5bGUiLCJzY3JpcHR1cmVMYWJlbCIsImRpc2FibGVXb3JkUG9wb3Zlcl8iLCJ1c2luZ09yaWdpbmFsQmlibGUiLCJ1bmRlZmluZWQiLCJlbmFibGVFZGl0IiwiZW5hYmxlQWxpZ25tZW50Iiwib3JpZ2luYWxSZXBvVXJsIiwic2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyIsImN1cnJlbnRWZXJzZVJlZiIsIl9zZXRTYXZlZENoYW5nZXMiLCJzb3VyY2VMYW5ndWFnZSIsInRhcmdldExhbmd1YWdlIiwiY3VycmVudEluZGV4Iiwic2F2ZWQiLCJnZXRDaGFuZ2VzIiwiY2xlYXJDaGFuZ2VzIiwiX3Vuc2F2ZWRDaGFuZ2VzTGlzdCIsImhhc093blByb3BlcnR5IiwiX2hhdmVVbnNhdmVkQ2hhbmdlcyIsIk9iamVjdCIsImtleXMiLCJmaW5kUmVmSW5BcnJheSIsImZpbmRJdGVtIiwiY2h1bmtzIiwicmVmTGVuIiwiaW5kZXgiLCJmaW5kSW5kZXgiLCJjaHVuayIsImlkeCIsInN1YnN0cmluZyIsIm5leHRDaGFyIiwiZ2V0Qm9va05hbWUiLCJib29rQ2FwcyIsInRvVXBwZXJDYXNlIiwiZmlsZXBhdGgiLCJjb250ZW50IiwiY29uZmlnIiwidGltZW91dCIsInNlcnZlclRpbWVPdXQiLCJhdXRob3IiLCJicmFuY2giLCJzYXZlRXJyb3IiLCJpc1NhdmVFcnJvciIsImlzRXJyb3IiLCJvblNhdmVFZGl0IiwiX3NhdmVFZGl0IiwiaW5mbyIsInRoZW4iLCJzdWNjZXNzIiwidW5zYXZlZENhcmRJbmRpY2VzIiwiY2FyZEluZGV4IiwicHJldkNhcmRzU2F2aW5nIiwibWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtIiwiYmlibGVVc2ZtIiwidXBkYXRlZFZlcnNlT2JqZWN0cyIsIm5ld1VzZm0iLCJjaGFwdGVyQ2h1bmtzIiwiY2hhcHRlckluZGV4IiwiY3VycmVudENoYXB0ZXIiLCJ2ZXJzZUNodW5rcyIsInZlcnNlSW5kZXgiLCJuZXdWZXJzZVVzZm0iLCJjb252ZXJ0VmVyc2VEYXRhVG9VU0ZNIiwib2xkVmVyc2UiLCJ2ZXJzZU51bUxlbiIsIm5ld0NoYXB0ZXIiLCJqb2luIiwiZ2V0UmVhZHlGb3JTYXZlIiwiY3JlYXRlRWRpdEJyYW5jaCIsIndhcm4iLCJnZXRSZXNwb25zZURhdGEiLCJtZXJnZUZhaWwiLCJwYXJzZUludCIsIm5ld1ZlcnNlVGV4dCIsInRhcmdldFZlcnNlT2JqZWN0c18iLCJ1cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSIsInRhcmdldFZlcnNlT2JqZWN0cyIsIm5ld0Jvb2tKc29uIiwidXBkYXRlVmVyc2UiLCJ0b1VTRk0iLCJmb3JjZWROZXdMaW5lcyIsIl92ZXJzZXNGb3JSZWYiLCJuZXdTZWxlY3Rpb25zIiwidXBkYXRlU2VsZWN0aW9ucyIsIl9tYXAiLCJvcmlnaW5hbEJvb2tJZCIsImJvb2tWZXJzZU9iamVjdCIsImNoYXB0ZXJzIiwibmV3U2VsZWN0ZWRRdW90ZSIsInF1b3RlIiwib3JpZ2luYWxWZXJzZXMiLCJzdWJzdGl0dXRlIiwic3RhcnRWZXJzZSIsImxhc3RWZXJzZSIsIl92ZXJzZSIsInZlcnNlcyIsInZlcnNlSXRlbSIsInZvIiwiY29uY2F0Iiwic2V0Iiwic3ViUmVmIiwicXVvdGVNYXRjaGVzIiwiYm9va09iamVjdCIsIm9jY3VycmVuY2UiLCJzaXplIiwiZm9yRWFjaCIsIndvcmRzIiwia2V5IiwiX2tleSIsIm1hcCIsIndvcmQiLCJ0ZXh0Iiwibm9ybWFsaXplU3RyaW5nIiwiYm9va3NOb3RTYW1lIiwidXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzIiwiYWxpZ25lZCIsIm5lZWRUb01lcmdlRnJvbU1hc3RlciIsIm1lcmdlTmVlZGVkIiwibWVyZ2VGcm9tTWFzdGVySGFzQ29uZmxpY3RzIiwiY29uZmxpY3QiLCJtZXJnZVRvTWFzdGVySGFzQ29uZmxpY3RzIiwibWVyZ2VGcm9tTWFzdGVyVGl0bGUiLCJtZXJnZUZyb21NYXN0ZXJDb2xvciIsIm1lcmdlVG9NYXN0ZXJUaXRsZSIsIm1lcmdlVG9NYXN0ZXJDb2xvciIsInJlbmRlcmVkU2NyaXB0dXJlUGFuZXMiLCJfY3VycmVudFZlcnNlRGF0YSIsImluaXRpYWxWZXJzZU9iamVjdHMiLCJfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyIsImlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCIsImhhbmRsZUFsaWduQnV0dG9uQ2xpY2siLCJvblJlbmRlclRvb2xiYXIiLCJuZXdJdGVtcyIsImFsbFZlcnNlc0FsaWduZWQiLCJ2YWx1ZXMiLCJldmVyeSIsImFsaWduU3RhdHVzIiwiYWxpZ25JY29uIiwiYWxpZ25CdXR0b25UZXh0IiwicHVzaCIsImN1cnNvciIsIm1hcmdpbiIsInByb3BUeXBlcyIsInN0cmluZyIsImlzUmVxdWlyZWQiLCJvYmplY3QiLCJudW1iZXIiLCJib29sIiwiZnVuYyIsInNoYXBlIiwib25lT2ZUeXBlIiwiYW55Iiwic2V0QXJlUmVzb3VyY2VzTG9hZGluZyIsInNldEFyZVJlc291cmNlc1NhdmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsT0FBTyxLQUFLQyxTQUFaLE1BQTJCLFlBQTNCO0FBQ0EsU0FBU0MsSUFBVCxFQUFlQyx5QkFBZixRQUFnRCx5QkFBaEQ7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLFNBQW5CO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixxQkFBeEI7QUFDQSxTQUFTQyxRQUFULEVBQW1CQyxnQkFBbkIsUUFBMkMsZ0JBQTNDO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixnQkFBeEI7QUFDQSxTQUFTQyxVQUFULFFBQTJCLGVBQTNCO0FBQ0EsU0FBU0MsT0FBVCxFQUFrQkMsWUFBbEIsUUFBc0MsZ0JBQXRDO0FBQ0EsU0FDRUMsSUFERixFQUVFQyxXQUZGLEVBR0VDLFdBSEYsRUFJRUMseUJBSkYsRUFLRUMsa0JBTEYsRUFNRUMsZUFORixFQU9FQyxZQVBGLEVBUUVDLHFCQVJGLEVBU0VDLGFBVEYsUUFVTyx1QkFWUCxDLENBV0E7O0FBQ0EsU0FBU0Msd0JBQVQsUUFBeUMsa0JBQXpDO0FBQ0EsU0FBU0MsZ0JBQVQsRUFBMkJDLHlCQUEzQixRQUE0RCxrQkFBNUQ7QUFDQSxPQUFPLEtBQUtDLE9BQVosTUFBeUIsWUFBekI7QUFDQSxTQUFTQyxTQUFULFFBQTBCLHVCQUExQjtBQUNBLFNBQVNDLGFBQVQsRUFBd0JDLGlCQUF4QixRQUFpRCxJQUFqRDtBQUNBLFNBQVNDLG9CQUFULFFBQXFDLGtDQUFyQztBQUNBLFNBQ0VDLG1C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c1gsSUFwRUg7O0FBcUV4QjtBQUNBM1IsRUFBQUEsb0JBQW9CLEVBQUUzRixTQUFTLENBQUNzWCxJQXRFUjs7QUF1RXhCO0FBQ0F6UixFQUFBQSxLQUFLLEVBQUU3RixTQUFTLENBQUNpWCxNQUFWLENBQWlCQyxVQXhFQTs7QUF5RXhCO0FBQ0F0UixFQUFBQSxTQUFTLEVBQUU1RixTQUFTLENBQUNzWCxJQTFFRzs7QUEyRXhCO0FBQ0F2UixFQUFBQSxnQkFBZ0IsRUFBRS9GLFNBQVMsQ0FBQ3NYLElBNUVKOztBQTZFeEI7QUFDQXhSLEVBQUFBLG1CQUFtQixFQUFFOUYsU0FBUyxDQUFDc1gsSUFBVixDQUFlSjtBQTlFWixDQUExQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnXG5pbXBvcnQgeyBjb3JlLCBTZWxlY3Rpb25zQ29udGV4dFByb3ZpZGVyIH0gZnJvbSAnc2NyaXB0dXJlLXJlc291cmNlcy1yY2wnXG5pbXBvcnQgdXNmbWpzIGZyb20gJ3VzZm0tanMnXG5pbXBvcnQgeyB1c2VFZGl0IH0gZnJvbSAnZ2l0ZWEtcmVhY3QtdG9vbGtpdCdcbmltcG9ydCB7IE1kVXBkYXRlLCBNZFVwZGF0ZURpc2FibGVkIH0gZnJvbSAncmVhY3QtaWNvbnMvbWQnXG5pbXBvcnQgeyBGaVNoYXJlIH0gZnJvbSAncmVhY3QtaWNvbnMvZmknXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IFJ4TGluazIsIFJ4TGlua0JyZWFrMiB9IGZyb20gJ3JlYWN0LWljb25zL3J4J1xuaW1wb3J0IHtcbiAgQ2FyZCxcbiAgRXJyb3JEaWFsb2csXG4gIEVSUk9SX1NUQVRFLFxuICBNQU5JRkVTVF9OT1RfTE9BREVEX0VSUk9SLFxuICBVcGRhdGVCcmFuY2hCdXR0b24sXG4gIHVzZUJyYW5jaE1lcmdlcixcbiAgdXNlQ2FyZFN0YXRlLFxuICB1c2VDb250ZW50VXBkYXRlUHJvcHMsXG4gIHVzZVVzZXJCcmFuY2gsXG59IGZyb20gJ3RyYW5zbGF0aW9uLWhlbHBzLXJjbCdcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IGdldFF1b3RlTWF0Y2hlc0luQm9va1JlZiB9IGZyb20gJ3V3LXF1b3RlLWhlbHBlcnMnXG5pbXBvcnQgeyBBbGlnbm1lbnRIZWxwZXJzLCBVc2ZtRmlsZUNvbnZlcnNpb25IZWxwZXJzIH0gZnJvbSAnd29yZC1hbGlnbmVyLXJjbCdcbmltcG9ydCAqIGFzIGlzRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7IGdldFZlcnNlcyB9IGZyb20gJ2JpYmxlLXJlZmVyZW5jZS1yYW5nZSdcbmltcG9ydCB7IFNjcmlwdHVyZVBhbmUsIFNjcmlwdHVyZVNlbGVjdG9yIH0gZnJvbSAnLi4nXG5pbXBvcnQgeyB1c2VTY3JpcHR1cmVTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVNjcmlwdHVyZVNldHRpbmdzJ1xuaW1wb3J0IHtcbiAgY2xlYW51cFZlcnNlT2JqZWN0cyxcbiAgZml4T2NjdXJyZW5jZSxcbiAgZ2V0UmVzb3VyY2VMaW5rLFxuICBnZXRSZXNvdXJjZU1lc3NhZ2UsXG4gIGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyxcbiAgaXNPcmlnaW5hbEJpYmxlLFxufSBmcm9tICcuLi8uLi91dGlscy9TY3JpcHR1cmVTZXR0aW5ncydcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZGVsYXknXG5pbXBvcnQgeyBhcmVNYXBzVGhlU2FtZSB9IGZyb20gJy4uLy4uL3V0aWxzL21hcHMnXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJy4uL1NjcmlwdHVyZVBhbmUvc3R5bGVkJ1xuaW1wb3J0IHtcbiAgTlRfT1JJR19MQU5HLFxuICBPUklHSU5BTF9TT1VSQ0UsXG4gIE9UX09SSUdfTEFORyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBWZXJzZVNlbGVjdG9yUG9wdXAgfSBmcm9tICcuLi9WZXJzZVNlbGVjdG9yUG9wdXAnXG5cbmNvbnN0IEtFWV9GT05UX1NJWkVfQkFTRSA9ICdzY3JpcHR1cmVQYW5lRm9udFNpemVfJ1xuY29uc3QgbGFiZWwgPSAnVmVyc2lvbidcbmNvbnN0IHN0eWxlID0geyBtYXJnaW5Ub3A6ICcxNnB4Jywgd2lkdGg6ICc1MDBweCcgfVxuXG4vKipcbiAqIGNyZWF0ZSBhIHNob3J0IGNvbXBhcmlzb24gdmVyc2UgcmVmIG9iamVjdCB3aXRob3V0IGFsbCB0aGUgdmVyc2VEYXRhXG4gKiBAcGFyYW0gdmVyc2VSZWZcbiAqL1xuZnVuY3Rpb24gY29tcGFyZU9iamVjdCh2ZXJzZVJlZikge1xuICBjb25zdCB7XG4gICAgY2hhcHRlcixcbiAgICB2ZXJzZSxcbiAgICB2ZXJzZURhdGEsXG4gIH0gPSB2ZXJzZVJlZiB8fCB7fVxuICBjb25zdCB2ZXJzZU9iamVjdHMgPSB2ZXJzZURhdGE/LnZlcnNlT2JqZWN0cz8ubGVuZ3RoIHx8IDBcbiAgcmV0dXJuIHtcbiAgICBjaGFwdGVyLFxuICAgIHZlcnNlLFxuICAgIHZlcnNlT2JqZWN0cyxcbiAgfVxufVxuXG4vKipcbiAqIGNvbXBhcmUgdHdvIHZlcnNlIHJlZnMgdG8gc2VlIGlmIHRoZXkgYXJlIHN1YnN0YW50aWFsbHkgc2ltaWxhclxuICogQHBhcmFtIHZlcnNlc0ZvclJlZjFcbiAqIEBwYXJhbSB2ZXJzZXNGb3JSZWYyXG4gKi9cbmZ1bmN0aW9uIGFyZVZlcnNlc1NhbWUodmVyc2VzRm9yUmVmMTogYW55W10sIHZlcnNlc0ZvclJlZjI6IGFueVtdKSB7XG4gIHZlcnNlc0ZvclJlZjEgPSB2ZXJzZXNGb3JSZWYxIHx8IFtdXG4gIHZlcnNlc0ZvclJlZjIgPSB2ZXJzZXNGb3JSZWYyIHx8IFtdXG4gIGxldCBhcmVTYW1lID0gZmFsc2VcblxuICBpZiAodmVyc2VzRm9yUmVmMS5sZW5ndGggPT09IHZlcnNlc0ZvclJlZjIubGVuZ3RoKSB7XG4gICAgYXJlU2FtZSA9IHRydWVcblxuICAgIGZvciAobGV0IGkgPSAwLCBsPSB2ZXJzZXNGb3JSZWYxLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgdmVyc2UxID0gY29tcGFyZU9iamVjdCh2ZXJzZXNGb3JSZWYxW2ldKVxuICAgICAgY29uc3QgdmVyc2UyID0gY29tcGFyZU9iamVjdCh2ZXJzZXNGb3JSZWYyW2ldKVxuICAgICAgYXJlU2FtZSA9IGlzRXF1YWwodmVyc2UxLCB2ZXJzZTIpXG5cbiAgICAgIGlmICghYXJlU2FtZSkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcmVTYW1lXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjcmlwdHVyZUNhcmQoe1xuICBhcHBSZWYsXG4gIGF1dGhlbnRpY2F0aW9uLFxuICBib29rSW5kZXgsXG4gIGNhcmROdW0sXG4gIGNsYXNzZXMsXG4gIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgZ2V0TGFuZ3VhZ2UsXG4gIGdldExleGljb25EYXRhLFxuICBncmVla1JlcG9VcmwsXG4gIGhlYnJld1JlcG9VcmwsXG4gIGh0dHBDb25maWcsXG4gIGlkLFxuICBpc05ULFxuICBsb2dnZWRJblVzZXIsXG4gIG9uTWluaW1pemUsXG4gIG9uUmVzb3VyY2VFcnJvcixcbiAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cyxcbiAgcmVmZXJlbmNlLFxuICByZXNvdXJjZToge1xuICAgIG93bmVyLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gIH0sXG4gIHJlc291cmNlTGluayxcbiAgc2VsZWN0ZWRRdW90ZSxcbiAgc2VydmVyLFxuICBzZXRDYXJkc0xvYWRpbmcsXG4gIHNldENhcmRzU2F2aW5nLFxuICBzZXRTYXZlZENoYW5nZXMsXG4gIHNldFdvcmRBbGlnbmVyU3RhdHVzLFxuICB0cmFuc2xhdGUsXG4gIHRpdGxlLFxuICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICB1cGRhdGVNZXJnZVN0YXRlLFxufSkge1xuICBjb25zdCBib29rSWQgPSByZWZlcmVuY2U/LnByb2plY3RJZFxuICBjb25zdCBbc3RhdGUsIHNldFN0YXRlX10gPSBSZWFjdC51c2VTdGF0ZSh7XG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoOiAwLFxuICAgIGN1cnJlbnRSZWZlcmVuY2U6IG51bGwsXG4gICAgZWRpdEJyYW5jaFJlYWR5OiBmYWxzZSxcbiAgICBoYXZlVW5zYXZlZENoYW5nZXM6IGZhbHNlLFxuICAgIGxhc3RTZWxlY3RlZFF1b3RlOiBudWxsLFxuICAgIHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLFxuICAgIHJlZjogYXBwUmVmLFxuICAgIHNhdmVDbGlja2VkOiBmYWxzZSxcbiAgICBzYXZlQ29udGVudDogbnVsbCxcbiAgICBzZWxlY3Rpb25zOiBuZXcgTWFwKCksXG4gICAgc2hhOiBudWxsLFxuICAgIHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2UsXG4gICAgc3RhcnRTYXZlOiBmYWxzZSxcbiAgICB1cmxFcnJvcjogbnVsbCxcbiAgICB1c2luZ1VzZXJCcmFuY2g6IGZhbHNlLFxuICAgIHVuc2F2ZWRDaGFuZ2VzTGlzdDoge30sXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzOiBudWxsLFxuICAgIHZlcnNlc0ZvclJlZjogbnVsbCxcbiAgICB2ZXJzZU9iamVjdHNNYXA6IG5ldyBNYXAoKSxcbiAgICB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiBudWxsLFxuICB9KVxuICBjb25zdCB7XG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoLFxuICAgIGN1cnJlbnRSZWZlcmVuY2UsXG4gICAgZWRpdEJyYW5jaFJlYWR5LFxuICAgIGhhdmVVbnNhdmVkQ2hhbmdlcyxcbiAgICBsYXN0U2VsZWN0ZWRRdW90ZSxcbiAgICByZWFkeUZvckZldGNoLFxuICAgIHJlZixcbiAgICBzYXZlQ2xpY2tlZCxcbiAgICBzYXZlQ29udGVudCxcbiAgICBzZWxlY3Rpb25zLFxuICAgIHNoYSxcbiAgICBzaG93QWxpZ25tZW50UG9wdXAsXG4gICAgc3RhcnRTYXZlLFxuICAgIHVybEVycm9yLFxuICAgIHVzaW5nVXNlckJyYW5jaCxcbiAgICB1bnNhdmVkQ2hhbmdlc0xpc3QsXG4gICAgdmVyc2VPYmplY3RzTWFwLFxuICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQsXG4gICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzLFxuICAgIHZlcnNlc0ZvclJlZixcbiAgfSA9IHN0YXRlXG5cbiAgY29uc3QgW2ZvbnRTaXplLCBzZXRGb250U2l6ZV0gPSB1c2VVc2VyTG9jYWxTdG9yYWdlKEtFWV9GT05UX1NJWkVfQkFTRSArIGNhcmROdW0sIDEwMClcbiAgY29uc3QgaXNOVF8gPSBpc05UKGJvb2tJZClcblxuICBmdW5jdGlvbiBzZXRTdGF0ZShuZXdTdGF0ZSkge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHsgLi4ucHJldlN0YXRlLCAuLi5uZXdTdGF0ZSB9KSlcbiAgfVxuXG4gIGlmICh1c2luZ1VzZXJCcmFuY2gpIHtcbiAgICBodHRwQ29uZmlnID0ge1xuICAgICAgLi4uaHR0cENvbmZpZyxcbiAgICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgICAgbm9DYWNoZTogdHJ1ZSxcbiAgICB9IC8vIGRpc2FibGUgaHR0cCBjYWNoaW5nXG4gIH1cblxuICBjb25zdCB7XG4gICAgaXNOZXdUZXN0YW1lbnQsXG4gICAgc2NyaXB0dXJlQ29uZmlnLFxuICAgIHNldFNjcmlwdHVyZSxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzY3JpcHR1cmVWZXJzaW9uSGlzdCxcbiAgfSA9IHVzZVNjcmlwdHVyZVNldHRpbmdzKHtcbiAgICBhcHBSZWY6IHJlZixcbiAgICBjYXJkTnVtLFxuICAgIGRpc2FibGVXb3JkUG9wb3ZlcixcbiAgICBncmVla1JlcG9VcmwsXG4gICAgaGVicmV3UmVwb1VybCxcbiAgICBodHRwQ29uZmlnLFxuICAgIGlzTlQsXG4gICAgbGFuZ3VhZ2VJZCxcbiAgICBvcmlnaW5hbExhbmd1YWdlT3duZXIsXG4gICAgb3duZXIsXG4gICAgcmVhZHlGb3JGZXRjaCxcbiAgICByZWZlcmVuY2U6IGN1cnJlbnRSZWZlcmVuY2UgfHwgcmVmZXJlbmNlLFxuICAgIHJlc291cmNlSWQsXG4gICAgcmVzb3VyY2VMaW5rLFxuICAgIHNldFVybEVycm9yOiAoZXJyb3IpID0+IHNldFN0YXRlKHsgdXJsRXJyb3I6IGVycm9yIH0pLFxuICAgIHNlcnZlcixcbiAgICB0aXRsZSxcbiAgICB1c2VVc2VyTG9jYWxTdG9yYWdlLFxuICAgIHdob2xlQm9vazogdHJ1ZSxcbiAgfSlcblxuICBjb25zdCBmZXRjaFJlc3BfID0gc2NyaXB0dXJlQ29uZmlnPy5mZXRjaFJlc3BvbnNlXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgcmVwbyA9IGAke3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2U/Lmxhbmd1YWdlSWR9XyR7c2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucHJvamVjdElkfWBcbiAgY29uc3QgcmVmZXJlbmNlXyA9IHNjcmlwdHVyZUNvbmZpZz8ucmVmZXJlbmNlIHx8IG51bGxcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBnZXQgdGhlIF9zaGEgZnJvbSBsYXN0IHNjcmlwdHVyZSBkb3dubG9hZFxuICAgIGNvbnN0IF9zaGEgPSBmZXRjaFJlc3BfPy5kYXRhPy5zaGEgfHwgbnVsbFxuICAgIGNvbnN0IHVybCA9IGZldGNoUmVzcF8/LmRhdGE/LmRvd25sb2FkX3VybCB8fCBudWxsXG4gICAgbGV0IHZhbGlkQnJhbmNoID0gdHJ1ZVxuXG4gICAgaWYgKF9zaGEpIHsgLy8gVFJJQ0tZOiBzaW5jZSB0aGlzIGZldGNoIG1heSBiZSBkZWxheWVkIC0gbWFrZSBzdXJlIGl0IHdhcyBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoIGJlZm9yZSB1c2luZyB0aGUgc2hhXG4gICAgICBjb25zdCBwYXJ0cyA9ICh1cmwgfHwgJycpLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IGZldGNoQnJhbmNoID0gcGFydHMubGVuZ3RoID4gNyA/IHBhcnRzWzddIDogJydcbiAgICAgIHZhbGlkQnJhbmNoID0gZmV0Y2hCcmFuY2ggPT09IHJlZlxuICAgIH1cblxuICAgIGlmICh2YWxpZEJyYW5jaCAmJiBfc2hhICE9PSBzaGEpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkOiBmb3IgJHt1cmx9ICR7SlNPTi5zdHJpbmdpZnkocmVmZXJlbmNlXyl9IG5ldyBzaGEgaXMgJHtfc2hhfWApXG4gICAgICBzZXRTdGF0ZSh7IHNoYTogX3NoYSB9KVxuICAgIH1cbiAgfSwgW2ZldGNoUmVzcF9dKVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgY2FyZFJlc291cmNlSWQgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlPy5wcm9qZWN0SWQgfHwgcmVzb3VyY2VJZFxuICAvLyBAdHMtaWdub3JlXG4gIGxldCByZWZfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ucmVmIHx8IGFwcFJlZlxuICBjb25zdCBjYW5Vc2VFZGl0QnJhbmNoID0gISEobG9nZ2VkSW5Vc2VyICYmIGF1dGhlbnRpY2F0aW9uICYmIChyZXNvdXJjZUlkICE9PSBPUklHSU5BTF9TT1VSQ0UpICYmIC8vIFRSSUNLWSBpZiBub3Qgb3JpZ2luYWwgbGFuZ3VhZ2UgYW5kIHdlIGhhdmUgbG9naW4gZGF0YSwgdGhlbiB3ZSBjYW4gdXNlIHRoZSBlZGl0IGJyYW5jaFxuICAgICgocmVmXyA9PT0gJ21hc3RlcicpIHx8IChyZWZfLmluY2x1ZGVzKGxvZ2dlZEluVXNlcikpKSkgLy8gYWxzbyBtYWtlIHN1cmUgbm90IGEgdmVyc2lvbiB0YWdcblxuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIGJyYW5jaERldGVybWluZWQsXG4gICAgICB1c2VyRWRpdEJyYW5jaE5hbWUsXG4gICAgICB1c2luZ1VzZXJCcmFuY2g6IF91c2luZ1VzZXJCcmFuY2gsXG4gICAgICB3b3JraW5nUmVzb3VyY2VCcmFuY2gsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7IHN0YXJ0RWRpdDogc3RhcnRFZGl0QnJhbmNoIH0sXG4gIH0gPSB1c2VVc2VyQnJhbmNoKHtcbiAgICBhcHBSZWYsXG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgYm9va0lkLFxuICAgIGNhcmRJZDogaWQsXG4gICAgY2FyZFJlc291cmNlSWQsXG4gICAgY2hlY2tGb3JFZGl0QnJhbmNoLFxuICAgIGxhbmd1YWdlSWQsXG4gICAgbG9nZ2VkSW5Vc2VyOiBjYW5Vc2VFZGl0QnJhbmNoID8gbG9nZ2VkSW5Vc2VyIDogbnVsbCxcbiAgICBvd25lcixcbiAgICBvblJlc291cmNlRXJyb3IsXG4gICAgc2VydmVyLFxuICAgIHVzZVVzZXJMb2NhbFN0b3JhZ2UsXG4gIH0pXG5cbiAgY29uc3QgX3VzZUJyYW5jaE1lcmdlciA9IHVzZUJyYW5jaE1lcmdlcih7IHNlcnZlciwgb3duZXIsIHJlcG8sIHVzZXJCcmFuY2g6IHVzZXJFZGl0QnJhbmNoTmFtZSwgdG9rZW5pZDogYXV0aGVudGljYXRpb24/LnRva2VuPy5zaGExIH0pO1xuICBjb25zdCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIG1lcmdlU3RhdHVzOiBtZXJnZVRvTWFzdGVyLFxuICAgICAgdXBkYXRlU3RhdHVzOiBtZXJnZUZyb21NYXN0ZXIsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICB1cGRhdGVVc2VyQnJhbmNoOiBtZXJnZUZyb21NYXN0ZXJJbnRvVXNlckJyYW5jaCxcbiAgICAgIG1lcmdlTWFzdGVyQnJhbmNoOiBtZXJnZVRvTWFzdGVyRnJvbVVzZXJCcmFuY2hcbiAgICB9XG4gIH0gPSBfdXNlQnJhbmNoTWVyZ2VyO1xuXG4gIGNvbnN0IHVwZGF0ZUJ1dHRvblByb3BzID0gdXNlQ29udGVudFVwZGF0ZVByb3BzKHtcbiAgICBpc1NhdmluZzogc3RhcnRTYXZlLFxuICAgIHVzZUJyYW5jaE1lcmdlcjogX3VzZUJyYW5jaE1lcmdlcixcbiAgICByZWxvYWRDb250ZW50OiBzY3JpcHR1cmVDb25maWc/LnJlbG9hZFJlc291cmNlXG4gIH0pO1xuICBjb25zdCB7XG4gICAgY2FsbFVwZGF0ZVVzZXJCcmFuY2gsXG4gICAgaXNFcnJvckRpYWxvZ09wZW4sXG4gICAgb25DbG9zZUVycm9yRGlhbG9nLFxuICAgIGlzTG9hZGluZyxcbiAgICBkaWFsb2dNZXNzYWdlLFxuICAgIGRpYWxvZ1RpdGxlLFxuICAgIGRpYWxvZ0xpbmssXG4gICAgZGlhbG9nTGlua1Rvb2x0aXBcbiAgfSA9IHVwZGF0ZUJ1dHRvblByb3BzO1xuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNhcmRSZXNvdXJjZUlkKSB7XG4gICAgICB1cGRhdGVNZXJnZVN0YXRlICYmIHVwZGF0ZU1lcmdlU3RhdGUoXG4gICAgICAgIGNhcmRSZXNvdXJjZUlkLFxuICAgICAgICBtZXJnZUZyb21NYXN0ZXIsXG4gICAgICAgIG1lcmdlVG9NYXN0ZXIsXG4gICAgICAgIGNhbGxVcGRhdGVVc2VyQnJhbmNoLFxuICAgICAgICBtZXJnZVRvTWFzdGVyRnJvbVVzZXJCcmFuY2gsXG4gICAgICApXG4gICAgfVxuICB9LFtjYXJkUmVzb3VyY2VJZCwgbWVyZ2VGcm9tTWFzdGVyLCBtZXJnZVRvTWFzdGVyXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHtcbiAgICAgIHNldENhcmRzTG9hZGluZyhwcmV2Q2FyZHNMb2FkaW5nID0+IFsuLi5wcmV2Q2FyZHNMb2FkaW5nLCBjYXJkUmVzb3VyY2VJZF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHNldENhcmRzTG9hZGluZyhwcmV2Q2FyZHNMb2FkaW5nID0+IHByZXZDYXJkc0xvYWRpbmcuZmlsdGVyKGNhcmRJZCA9PiBjYXJkSWQgIT09IGNhcmRSZXNvdXJjZUlkKSlcbiAgICB9XG4gIH0sIFtpc0xvYWRpbmddKVxuXG4gIGNvbnN0IHdvcmtpbmdSZWYgPSBjYW5Vc2VFZGl0QnJhbmNoID8gd29ya2luZ1Jlc291cmNlQnJhbmNoIDogYXBwUmVmXG4gIGxldCBzY3JpcHR1cmVUaXRsZVxuXG4gIGlmICghY2FuVXNlRWRpdEJyYW5jaCAmJiAhcmVhZHlGb3JGZXRjaCkgeyAvLyBpZiBiaWJsZSBub3QgZWxpZ2libGUgZm9yIHVzZXIgYnJhbmNoLCBtYWtlIHN1cmUgaXQncyByZWFkeVxuICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSB9KVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgU2NyaXB0dXJlQ2FyZCBib29rIGNoYW5nZWRgLCB7IGJvb2tJZCwgb3duZXIsIGxhbmd1YWdlSWQsIHJlc291cmNlSWQgfSlcblxuICAgIGlmIChjYW5Vc2VFZGl0QnJhbmNoKSB7IC8vIGlmIGJpYmxlIGVsaWdpYmxlIGZvciB1c2VyIGJyYW5jaCwgcmVmcmVzaCBpdFxuICAgICAgc2V0U3RhdGUoeyByZWFkeUZvckZldGNoOiBmYWxzZSwgY2hlY2tGb3JFZGl0QnJhbmNoOiBjaGVja0ZvckVkaXRCcmFuY2ggKyAxIH0pXG4gICAgfVxuICB9LCBbYm9va0lkLCBvd25lciwgbGFuZ3VhZ2VJZCwgcmVzb3VyY2VJZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzRXF1YWwocmVmZXJlbmNlLCBjdXJyZW50UmVmZXJlbmNlKSkge1xuICAgICAgLy8gY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgcmVmZXJlbmNlIGNoYW5nZWRgLCByZWZlcmVuY2UpXG4gICAgICBzZXRTdGF0ZSh7IGN1cnJlbnRSZWZlcmVuY2U6IHJlZmVyZW5jZSB9KVxuICAgIH1cbiAgfSwgW3JlZmVyZW5jZV0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2FpdGluZyBmb3IgYnJhbmNoIGZldGNoIHRvIGNvbXBsZXRlXG4gICAgY29uc29sZS5sb2coYFNjcmlwdHVyZUNhcmQgYnJhbmNoRGV0ZXJtaW5lZCBpcyAke2JyYW5jaERldGVybWluZWR9IGFuZCB3b3JraW5nUmVmIGlzICR7d29ya2luZ1JlZn0gYW5kIHJlYWR5Rm9yRmV0Y2ggaXMgJHtyZWFkeUZvckZldGNofWApXG5cbiAgICBpZiAoIXJlYWR5Rm9yRmV0Y2ggJiYgYnJhbmNoRGV0ZXJtaW5lZCApIHtcbiAgICAgIHNldFN0YXRlKHsgcmVhZHlGb3JGZXRjaDogdHJ1ZSwgcmVmOiB3b3JraW5nUmVmIH0pXG4gICAgfVxuICB9LCBbYnJhbmNoRGV0ZXJtaW5lZF0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gc2VsZWN0IGNvcnJlY3Qgd29ya2luZyByZWYgLSBjb3VsZCBiZSBtYXN0ZXIsIHVzZXIgYnJhbmNoLCBvciByZWxlYXNlXG4gICAgaWYgKF91c2luZ1VzZXJCcmFuY2ggIT09IHVzaW5nVXNlckJyYW5jaCkge1xuICAgICAgc2V0U3RhdGUoeyB1c2luZ1VzZXJCcmFuY2g6IF91c2luZ1VzZXJCcmFuY2ggfSlcbiAgICB9XG4gIH0sIFtfdXNpbmdVc2VyQnJhbmNoLCB1c2luZ1VzZXJCcmFuY2hdKVxuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7IC8vIHVwZGF0ZSBkaXNwbGF5IHN0YXR1cyBpZiBlcnJvclxuICAgIGNvbnN0IGVycm9yID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZVN0YXR1cz8uW0VSUk9SX1NUQVRFXVxuXG4gICAgaWYgKGVycm9yKSB7IC8vIGlmIGVycm9yIHdhcyBmb3VuZCBkbyBjYWxsYmFja1xuICAgICAgY29uc3QgcmVzb3VyY2VTdGF0dXMgPSBzY3JpcHR1cmVDb25maWc/LnJlc291cmNlU3RhdHVzXG4gICAgICBjb25zdCByZXNvdXJjZUxpbmsgPSBnZXRSZXNvdXJjZUxpbmsoc2NyaXB0dXJlQ29uZmlnKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGdldFJlc291cmNlTWVzc2FnZShyZXNvdXJjZVN0YXR1cywgc2VydmVyLCByZXNvdXJjZUxpbmssIGlzTlRfKVxuICAgICAgY29uc3QgaXNBY2Nlc3NFcnJvciA9IHJlc291cmNlU3RhdHVzW01BTklGRVNUX05PVF9MT0FERURfRVJST1JdXG4gICAgICBvblJlc291cmNlRXJyb3IgJiYgb25SZXNvdXJjZUVycm9yKG1lc3NhZ2UsIGlzQWNjZXNzRXJyb3IsIHJlc291cmNlU3RhdHVzKVxuICAgIH1cbiAgfSwgW3NjcmlwdHVyZUNvbmZpZz8ucmVzb3VyY2VTdGF0dXM/LltFUlJPUl9TVEFURV1dKVxuXG4gIGlmIChzY3JpcHR1cmVDb25maWcudGl0bGUgJiYgc2NyaXB0dXJlQ29uZmlnLnZlcnNpb24pIHtcbiAgICBzY3JpcHR1cmVUaXRsZSA9IGAke3NjcmlwdHVyZUNvbmZpZy50aXRsZX0gdiR7c2NyaXB0dXJlQ29uZmlnLnZlcnNpb259YFxuICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LnVwZGF0ZVRpdGxlKHNjcmlwdHVyZUNvbmZpZy5yZXNvdXJjZUxpbmssIHNjcmlwdHVyZVRpdGxlKVxuICB9IGVsc2Uge1xuICAgIHNjcmlwdHVyZVRpdGxlID0gYFRpdGxlIG1pc3NpbmcgZnJvbSBwcm9qZWN0IG1hbmlmZXN0YFxuICB9XG5cbiAgLyoqIER5bmFtaWNhbGx5IGNyZWF0ZXMgdGhlIHNjcmlwdHVyZSBzZWxlY3Rpb24gZHJvcGRvd24gdG8gYmUgaW5zZXJ0ZWQgaW50byBjYXJkIHNldHRpbmdzICovXG4gIGZ1bmN0aW9uIGdldFNjcmlwdHVyZVNlbGVjdG9yKCkge1xuICAgIGNvbnN0IHNjcmlwdHVyZVNlbGVjdGlvbkNvbmZpZyA9IGdldFNjcmlwdHVyZVZlcnNpb25TZXR0aW5ncyh7XG4gICAgICBsYWJlbCxcbiAgICAgIHJlc291cmNlTGluazogc2NyaXB0dXJlQ29uZmlnLnJlc291cmNlTGluayxcbiAgICAgIHNldFNjcmlwdHVyZSxcbiAgICAgIHNjcmlwdHVyZVZlcnNpb25IaXN0LFxuICAgIH0pXG5cbiAgICByZXR1cm4gPFNjcmlwdHVyZVNlbGVjdG9yIHsuLi5zY3JpcHR1cmVTZWxlY3Rpb25Db25maWd9IHN0eWxlPXtzdHlsZX0gZXJyb3JNZXNzYWdlPXt1cmxFcnJvcn0gLz5cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTWVudUNsb3NlKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKGBvbk1lbnVDbG9zZSgpYClcbiAgICBzZXRTdGF0ZSh7IHVybEVycm9yOiBudWxsIH0pXG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIGNvbnN0IGxhbmd1YWdlSWRfID0gc2NyaXB0dXJlQ29uZmlnPy5yZXNvdXJjZT8ubGFuZ3VhZ2VJZFxuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKHsgbGFuZ3VhZ2VJZDogbGFuZ3VhZ2VJZF8gfSlcbiAgY29uc3QgZGlyZWN0aW9uID0gKGxhbmd1YWdlPy5kaXJlY3Rpb24pIHx8ICdsdHInXG4gIGNvbnN0IF9yZWZlcmVuY2UgPSBjdXJyZW50UmVmZXJlbmNlIHx8IHJlZmVyZW5jZVxuXG4gIGNvbnN0IGlzSGVicmV3ID0gKGxhbmd1YWdlSWRfID09PSAnaGJvJylcbiAgY29uc3QgZm9udEZhY3RvciA9IGlzSGVicmV3ID8gMS40IDogMSAvLyB3ZSBhdXRvbWF0aWNhbGx5IHNjYWxlIHVwIGZvbnQgc2l6ZSBmb3IgSGVicmV3XG4gIGNvbnN0IHNjYWxlZEZvbnRTaXplID0gZm9udFNpemUgKiBmb250RmFjdG9yXG5cbiAgY29uc3QgaXRlbXMgPSBudWxsXG4gIGNvbnN0IHtcbiAgICBzdGF0ZToge1xuICAgICAgaGVhZGVycywgZmlsdGVycywgaXRlbUluZGV4LCBtYXJrZG93blZpZXcsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBzZXRGaWx0ZXJzLCBzZXRJdGVtSW5kZXgsIHNldE1hcmtkb3duVmlldyxcbiAgICB9LFxuICB9ID0gdXNlQ2FyZFN0YXRlKHsgaXRlbXMgfSlcblxuICBjb25zdCByZWZTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7TWF0aC5yb3VuZChzY2FsZWRGb250U2l6ZSAqIDAuOSl9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IGNvbnRlbnRTdHlsZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBmb250RmFtaWx5OiAnTm90byBTYW5zJyxcbiAgICBmb250U2l6ZTogYCR7c2NhbGVkRm9udFNpemV9JWAsXG4gIH0pLCBbc2NhbGVkRm9udFNpemVdKVxuXG4gIGNvbnN0IHNjcmlwdHVyZUxhYmVsID0gPFRpdGxlPntzY3JpcHR1cmVUaXRsZX08L1RpdGxlPlxuICBsZXQgZGlzYWJsZVdvcmRQb3BvdmVyXyA9IGRpc2FibGVXb3JkUG9wb3ZlclxuICBjb25zdCB1c2luZ09yaWdpbmFsQmlibGUgPSBpc09yaWdpbmFsQmlibGUoc2NyaXB0dXJlQ29uZmlnWydyZXNvdXJjZSddPy5wcm9qZWN0SWQpXG5cbiAgaWYgKGRpc2FibGVXb3JkUG9wb3ZlciA9PT0gdW5kZWZpbmVkKSB7IC8vIGlmIG5vdCBzcGVjaWZpZWQsIHRoZW4gZGV0ZXJtaW5lIGlmIG9yaWdpbmFsIGxhbmd1YWdlIHJlc291cmNlXG4gICAgZGlzYWJsZVdvcmRQb3BvdmVyXyA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgfVxuXG4gIGNvbnN0IGVuYWJsZUVkaXQgPSAhdXNpbmdPcmlnaW5hbEJpYmxlXG4gIGNvbnN0IGVuYWJsZUFsaWdubWVudCA9ICF1c2luZ09yaWdpbmFsQmlibGVcbiAgY29uc3Qgb3JpZ2luYWxSZXBvVXJsID0gaXNOZXdUZXN0YW1lbnQgPyBncmVla1JlcG9VcmwgOiBoZWJyZXdSZXBvVXJsXG4gIGNvbnN0IHNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcgPSB7XG4gICAgYXV0aGVudGljYXRpb246IGNhblVzZUVkaXRCcmFuY2ggPyBhdXRoZW50aWNhdGlvbiA6IG51bGwsXG4gICAgYm9va0luZGV4LFxuICAgIGN1cnJlbnRWZXJzZVJlZjogX3JlZmVyZW5jZSxcbiAgICBlbmFibGVFZGl0LFxuICAgIGVuYWJsZUFsaWdubWVudCxcbiAgICBodHRwQ29uZmlnLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpc05ld1Rlc3RhbWVudCxcbiAgICBsb2dnZWRJblVzZXI6IGNhblVzZUVkaXRCcmFuY2ggPyBsb2dnZWRJblVzZXIgOiBudWxsLFxuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcixcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb3JpZ2luYWxSZXBvVXJsLFxuICAgIHNjcmlwdHVyZUNvbmZpZyxcbiAgICBzY3JpcHR1cmVTZXR0aW5ncyxcbiAgICBzdGFydEVkaXRCcmFuY2gsXG4gICAgc2V0U2F2ZWRDaGFuZ2VzOiBfc2V0U2F2ZWRDaGFuZ2VzLFxuICAgIHNvdXJjZUxhbmd1YWdlOiBpc05UXyA/IE5UX09SSUdfTEFORyA6IE9UX09SSUdfTEFORyxcbiAgICB0YXJnZXRMYW5ndWFnZTogbGFuZ3VhZ2UsXG4gICAgdGl0bGU6IHNjcmlwdHVyZVRpdGxlLFxuICAgIHdvcmtpbmdSZXNvdXJjZUJyYW5jaDogcmVmLFxuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgZ2V0cyBjYWxsZWQgd2hlbmV2ZXIgYSBzY3JpcHR1cmUgcGFuZSBoYXMgYSBjaGFuZ2UgaW4gc2F2ZSBzdGF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudEluZGV4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2F2ZWRcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gZ2V0Q2hhbmdlcyAtIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHVzZXIgY2xpY2tzIHNhdmUgYnV0dG9uXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNsZWFyQ2hhbmdlcyAtIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHNhdmUgaGFzIGNvbXBsZXRlZFxuICAgKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IHN0YXRlIG9mIHdvcmQgYWxpZ25tZW50L2VkaXRcbiAgICovXG4gIGZ1bmN0aW9uIF9zZXRTYXZlZENoYW5nZXMoY3VycmVudEluZGV4LCBzYXZlZCwgeyBnZXRDaGFuZ2VzID0gbnVsbCwgY2xlYXJDaGFuZ2VzID0gbnVsbCwgc3RhdGUgPSBudWxsIH0pIHtcbiAgICBjb25zdCBfdW5zYXZlZENoYW5nZXNMaXN0ID0geyAuLi51bnNhdmVkQ2hhbmdlc0xpc3QgfVxuXG4gICAgaWYgKHNhdmVkKSB7XG4gICAgICBpZiAoX3Vuc2F2ZWRDaGFuZ2VzTGlzdC5oYXNPd25Qcm9wZXJ0eShjdXJyZW50SW5kZXgpKSB7XG4gICAgICAgIGRlbGV0ZSBfdW5zYXZlZENoYW5nZXNMaXN0W2N1cnJlbnRJbmRleF1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgX3Vuc2F2ZWRDaGFuZ2VzTGlzdFtjdXJyZW50SW5kZXhdID0geyBnZXRDaGFuZ2VzLCBjbGVhckNoYW5nZXMsIHN0YXRlIH0gLy8gdXBkYXRlIHdpdGggbGF0ZXN0XG4gICAgfVxuXG4gICAgY29uc3QgX2hhdmVVbnNhdmVkQ2hhbmdlcyA9ICEhT2JqZWN0LmtleXMoX3Vuc2F2ZWRDaGFuZ2VzTGlzdCkubGVuZ3RoXG5cbiAgICBpZiAoaGF2ZVVuc2F2ZWRDaGFuZ2VzICE9IF9oYXZlVW5zYXZlZENoYW5nZXMpIHtcbiAgICAgIHNldFNhdmVkQ2hhbmdlcyAmJiBzZXRTYXZlZENoYW5nZXMocmVzb3VyY2VJZCwgIV9oYXZlVW5zYXZlZENoYW5nZXMpXG4gICAgICBzZXRTdGF0ZSh7IGhhdmVVbnNhdmVkQ2hhbmdlczogX2hhdmVVbnNhdmVkQ2hhbmdlcyB9KVxuICAgIH1cblxuICAgIGlmICghaXNFcXVhbChfdW5zYXZlZENoYW5nZXNMaXN0LCB1bnNhdmVkQ2hhbmdlc0xpc3QpKSB7XG4gICAgICBzZXRTdGF0ZSh7IHVuc2F2ZWRDaGFuZ2VzTGlzdDogX3Vuc2F2ZWRDaGFuZ2VzTGlzdCB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzZWFyY2ggY2hhcHRlciBvciB2ZXJzZSBjaHVuayB0byBsaW5lIHRoYXQgc3RhcnRzIHdpdGggZmluZEl0ZW1cbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBmaW5kSXRlbVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBjaHVua3NcbiAgICovXG4gIGZ1bmN0aW9uIGZpbmRSZWZJbkFycmF5KGZpbmRJdGVtLCBjaHVua3MpIHtcbiAgICBjb25zdCByZWZfID0gZmluZEl0ZW0gKyAnJ1xuICAgIGNvbnN0IHJlZkxlbiA9IHJlZl8ubGVuZ3RoXG4gICAgY29uc3QgaW5kZXggPSBjaHVua3MuZmluZEluZGV4KChjaHVuaywgaWR4KSA9PiB7XG4gICAgICBpZiAoaWR4ID4gMCkge1xuICAgICAgICBpZiAoY2h1bmsuc3Vic3RyaW5nKDAsIHJlZkxlbikgPT09IHJlZl8pIHtcbiAgICAgICAgICBjb25zdCBuZXh0Q2hhciA9IGNodW5rW3JlZkxlbl1cblxuICAgICAgICAgIGlmICgobmV4dENoYXIgPiAnOScpIHx8IChuZXh0Q2hhciA8ICcwJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9KVxuICAgIHJldHVybiBpbmRleFxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Qm9va05hbWUoKSB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGJvb2tDYXBzID0gc2NyaXB0dXJlQ29uZmlnPy5yZWZlcmVuY2U/LnByb2plY3RJZCA/IHNjcmlwdHVyZUNvbmZpZy5yZWZlcmVuY2UucHJvamVjdElkLnRvVXBwZXJDYXNlKCkgOiAnJ1xuICAgIHJldHVybiBgJHtib29rSW5kZXh9LSR7Ym9va0NhcHN9LnVzZm1gXG4gIH1cblxuICBjb25zdCBmaWxlcGF0aCA9IGdldEJvb2tOYW1lKClcblxuICAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIGVkaXQgc3RhdGVcbiAgY29uc3Qge1xuICAgIGVycm9yOiBzYXZlRXJyb3IsXG4gICAgaXNFcnJvcjogaXNTYXZlRXJyb3IsXG4gICAgb25TYXZlRWRpdCxcbiAgfSA9IHVzZUVkaXQoe1xuICAgIHNoYSxcbiAgICBvd25lcixcbiAgICBjb250ZW50OiBzYXZlQ29udGVudCxcbiAgICBjb25maWc6IHtcbiAgICAgIGNhY2hlOiB7IG1heEFnZTogMCB9LFxuICAgICAgLi4uYXV0aGVudGljYXRpb24/LmNvbmZpZyxcbiAgICAgIHRva2VuOiBhdXRoZW50aWNhdGlvbj8udG9rZW4sXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aW1lb3V0OiBodHRwQ29uZmlnPy5zZXJ2ZXJUaW1lT3V0IHx8IGh0dHBDb25maWc/LnRpbWVvdXQgfHwgMTAwMDAsXG4gICAgICBzZXJ2ZXIsXG4gICAgfSxcbiAgICBhdXRob3I6IGxvZ2dlZEluVXNlcixcbiAgICB0b2tlbjogYXV0aGVudGljYXRpb24/LnRva2VuLFxuICAgIGJyYW5jaDogd29ya2luZ1Jlc291cmNlQnJhbmNoLFxuICAgIGZpbGVwYXRoLFxuICAgIHJlcG8sXG4gIH0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiB3ZSBnZXQgYSBzYXZlIHNhdmVFcnJvclxuICAgIGlmIChzYXZlRXJyb3IgJiYgaXNTYXZlRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBzYXZlIGVycm9yYCwgc2F2ZUVycm9yKVxuICAgICAgLy8gb25SZXNvdXJjZUVycm9yICYmIG9uUmVzb3VyY2VFcnJvcihudWxsLCBmYWxzZSwgbnVsbCwgYEVycm9yIHNhdmluZyAke2xhbmd1YWdlSWRffV8ke3Jlc291cmNlSWR9ICR7c2F2ZUVycm9yfWAsIHRydWUpXG4gICAgfVxuICB9LCBbc2F2ZUVycm9yLCBpc1NhdmVFcnJvcl0pXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gd2hlbiBzdGFydFNhdmUgZ29lcyB0cnVlLCBzYXZlIGVkaXRzIHRvIHVzZXIgYnJhbmNoIGFuZCB0aGVuIGNsZWFyIHN0YXJ0U2F2ZVxuICAgIGNvbnN0IF9zYXZlRWRpdCA9IGFzeW5jICgpID0+IHsgLy8gYmVnaW4gdXBsb2FkaW5nIG5ldyBVU0ZNXG4gICAgICBjb25zb2xlLmluZm8oYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gVXNpbmcgc2hhOiAke3NoYX1gKVxuICAgICAgYXdhaXQgb25TYXZlRWRpdCh1c2VyRWRpdEJyYW5jaE5hbWUpLnRoZW4oKHN1Y2Nlc3MpID0+IHsgLy8gcHVzaCBjaGFuZ2VkIHRvIHNlcnZlclxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQoKSAtIHNhdmUgc2NyaXB0dXJlIGVkaXRzIHN1Y2Nlc3NgKVxuICAgICAgICAgIGNvbnN0IHVuc2F2ZWRDYXJkSW5kaWNlcyA9IE9iamVjdC5rZXlzKHVuc2F2ZWRDaGFuZ2VzTGlzdClcblxuICAgICAgICAgIGlmICh1bnNhdmVkQ2FyZEluZGljZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgY2xlYXJDaGFuZ2VzIH0gPSB1bnNhdmVkQ2hhbmdlc0xpc3RbY2FyZEluZGV4XVxuICAgICAgICAgICAgICBjbGVhckNoYW5nZXMgJiYgY2xlYXJDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmluZm8oJ3NhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gUmVsb2FkaW5nIHJlc291cmNlJylcbiAgICAgICAgICBzZXRTdGF0ZSh7XG4gICAgICAgICAgICBzdGFydFNhdmU6IGZhbHNlLFxuICAgICAgICAgICAgcmVhZHlGb3JGZXRjaDogdHJ1ZSxcbiAgICAgICAgICAgIHJlZjogdXNlckVkaXRCcmFuY2hOYW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgZGVsYXkoNTAwKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNjcmlwdHVyZUNvbmZpZz8ucmVsb2FkUmVzb3VyY2Uoc2hhKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignc2F2ZUNoYW5nZXNUb0Nsb3VkKCkgLSBzYXZpbmcgY2hhbmdlZCBzY3JpcHR1cmUgZmFpbGVkJylcbiAgICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gcHJldkNhcmRzU2F2aW5nLmZpbHRlcihjYXJkSWQgPT4gY2FyZElkICE9PSBjYXJkUmVzb3VyY2VJZCkpXG4gICAgICAgICAgc2V0U3RhdGUoeyBzdGFydFNhdmU6IGZhbHNlIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0U2F2ZSkge1xuICAgICAgaWYgKCFlZGl0QnJhbmNoUmVhZHkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGVkaXQgYnJhbmNoIG5vdCB5ZXQgY3JlYXRlZGApXG4gICAgICB9IGVsc2UgaWYgKCFzaGEpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHNhdmUgc2hhIG5vdCB5ZXQgcmVhZHlgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGNhbGxpbmcgX3NhdmVFZGl0KClgKVxuICAgICAgICBfc2F2ZUVkaXQoKVxuICAgICAgICBzZXRDYXJkc1NhdmluZyhwcmV2Q2FyZHNTYXZpbmcgPT4gWy4uLnByZXZDYXJkc1NhdmluZywgY2FyZFJlc291cmNlSWRdKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW3N0YXJ0U2F2ZSwgZWRpdEJyYW5jaFJlYWR5LCBzaGFdKVxuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHVwZGF0ZWRWZXJzZU9iamVjdHMgdG8gVVNGTSBhbmQgbWVyZ2UgaW50byB0aGUgYmlibGVVc2ZtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBiaWJsZVVzZm0gLSBVU0ZNIG9mIGJpYmxlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByZWYgLSByZWZlcmVuY2Ugb2YgdmVyc2UgdG8gbWVyZ2UgaW5cbiAgICogQHBhcmFtIHtvYmplY3RbXX0gdXBkYXRlZFZlcnNlT2JqZWN0cyAtIG5ldyB2ZXJzZSBpbiB2ZXJzZU9iamVjdCBmb3JtYXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNhcmROdW1cbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlVmVyc2VPYmplY3RzSW50b0JpYmxlVXNmbShiaWJsZVVzZm0sIHJlZiwgdXBkYXRlZFZlcnNlT2JqZWN0cywgY2FyZE51bTogbnVtYmVyKSB7XG4gICAgbGV0IG5ld1VzZm1cbiAgICBjb25zdCBjaGFwdGVyQ2h1bmtzID0gYmlibGVVc2ZtPy5zcGxpdCgnXFxcXGMgJylcbiAgICBjb25zdCBjaGFwdGVySW5kZXggPSBmaW5kUmVmSW5BcnJheShyZWY/LmNoYXB0ZXIsIGNoYXB0ZXJDaHVua3MpXG5cbiAgICBpZiAoY2hhcHRlckluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRDaGFwdGVyID0gY2hhcHRlckNodW5rc1tjaGFwdGVySW5kZXhdXG4gICAgICBjb25zdCB2ZXJzZUNodW5rcyA9IGN1cnJlbnRDaGFwdGVyLnNwbGl0KCdcXFxcdiAnKVxuICAgICAgY29uc3QgdmVyc2VJbmRleCA9IGZpbmRSZWZJbkFycmF5KHJlZj8udmVyc2UsIHZlcnNlQ2h1bmtzKVxuXG4gICAgICBpZiAodmVyc2VJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZlcnNlVXNmbSA9IFVzZm1GaWxlQ29udmVyc2lvbkhlbHBlcnMuY29udmVydFZlcnNlRGF0YVRvVVNGTSh1cGRhdGVkVmVyc2VPYmplY3RzKVxuICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCR7Y2FyZE51bX0pIC0gbmV3IFVTRk0gZm9yIGNhcmQ6fSAtICR7bmV3VmVyc2VVc2ZtLnN1YnN0cmluZygwLCAxMDApfWApXG4gICAgICAgIGNvbnN0IG9sZFZlcnNlID0gdmVyc2VDaHVua3NbdmVyc2VJbmRleF1cbiAgICAgICAgY29uc3QgdmVyc2VOdW1MZW4gPSAocmVmPy52ZXJzZSArICcnKS5sZW5ndGhcbiAgICAgICAgdmVyc2VDaHVua3NbdmVyc2VJbmRleF0gPSBvbGRWZXJzZS5zdWJzdHJpbmcoMCwgdmVyc2VOdW1MZW4gKyAxKSArIG5ld1ZlcnNlVXNmbVxuICAgICAgICBjb25zdCBuZXdDaGFwdGVyID0gdmVyc2VDaHVua3Muam9pbignXFxcXHYgJylcbiAgICAgICAgY2hhcHRlckNodW5rc1tjaGFwdGVySW5kZXhdID0gbmV3Q2hhcHRlclxuICAgICAgICBuZXdVc2ZtID0gY2hhcHRlckNodW5rcy5qb2luKCdcXFxcYyAnKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3VXNmbVxuICB9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHsgLy8gZm9yIGVhY2ggdW5zYXZlZCBjaGFuZ2UsIGNhbGwgaW50byBzY3JpcHR1cmVQYW5lIHRvIGdldCBsYXRlc3QgY2hhbmdlcyBmb3IgdmVyc2UgdG8gc2F2ZVxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldFJlYWR5Rm9yU2F2ZSgpIHtcbiAgICAgIGlmIChzYXZlQ2xpY2tlZCkge1xuICAgICAgICBsZXQgY3JlYXRlRWRpdEJyYW5jaCA9ICFfdXNpbmdVc2VyQnJhbmNoXG5cbiAgICAgICAgaWYgKCFjcmVhdGVFZGl0QnJhbmNoKSB7IC8vIGlmIGFscmVhZHkgdXNpbmcgdGhlIHVzZXIgYnJhbmNoXG4gICAgICAgICAgaWYgKHdvcmtpbmdSZXNvdXJjZUJyYW5jaCAhPT0gdXNlckVkaXRCcmFuY2hOYW1lKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIHN0YXRlIGNvbmZsaWN0IC0gc2hvdWxkIGJlIGluIHVzZXIgYnJhbmNoICR7dXNlckVkaXRCcmFuY2hOYW1lfSwgYnV0IGFjdHVhbGx5IHVzaW5nICR7d29ya2luZ1Jlc291cmNlQnJhbmNofWApXG4gICAgICAgICAgICBjcmVhdGVFZGl0QnJhbmNoID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkIC0gYWxyZWFkeSB1c2luZyBlZGl0IGJyYW5jaDogJHt3b3JraW5nUmVzb3VyY2VCcmFuY2h9YClcbiAgICAgICAgICAgIHNldFN0YXRlKHsgZWRpdEJyYW5jaFJlYWR5OiB0cnVlIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNyZWF0ZUVkaXRCcmFuY2gpIHsgLy8gaWYgbm90IHlldCB1c2luZyB0aGUgdXNlciBicmFuY2gsIGNyZWF0ZSBpdFxuICAgICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBjcmVhdGluZyBlZGl0IGJyYW5jaGApXG4gICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgZWRpdEJyYW5jaFJlYWR5OiBmYWxzZSxcbiAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IGZhbHNlLFxuICAgICAgICAgICAgc2hhOiBudWxsLFxuICAgICAgICAgIH0pIC8vIHdlIHdpbGwgbmVlZCBhIG5ldyBzaGEgZm9yIGJvb2svYnJhbmNoXG5cbiAgICAgICAgICBjb25zdCBicmFuY2ggPSBhd2FpdCBzdGFydEVkaXRCcmFuY2goKVxuXG4gICAgICAgICAgaWYgKGJyYW5jaCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGVkaXQgYnJhbmNoIGNyZWF0ZWRgKVxuICAgICAgICAgICAgc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBlZGl0QnJhbmNoUmVhZHk6IHRydWUsXG4gICAgICAgICAgICAgIHJlYWR5Rm9yRmV0Y2g6IHRydWUsXG4gICAgICAgICAgICAgIHJlZjogYnJhbmNoLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCAtIGZhaWxlZCB0byBjcmVhdGUgZWRpdCBicmFuY2hgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGBzYXZlQ2hhbmdlc1RvQ2xvdWQgLSBnZXR0aW5nIHZlcnNlIGNoYW5nZXNgKVxuICAgICAgICBjb25zdCB1bnNhdmVkQ2FyZEluZGljZXMgPSBPYmplY3Qua2V5cyh1bnNhdmVkQ2hhbmdlc0xpc3QpXG5cbiAgICAgICAgaWYgKHVuc2F2ZWRDYXJkSW5kaWNlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgbGV0IGJpYmxlVXNmbSA9IGNvcmUuZ2V0UmVzcG9uc2VEYXRhKHNjcmlwdHVyZUNvbmZpZz8uZmV0Y2hSZXNwb25zZSlcbiAgICAgICAgICBsZXQgbWVyZ2VGYWlsID0gZmFsc2VcbiAgICAgICAgICBsZXQgY2FyZE51bSA9IDBcblxuICAgICAgICAgIGZvciAoY29uc3QgY2FyZEluZGV4IG9mIHVuc2F2ZWRDYXJkSW5kaWNlcykge1xuICAgICAgICAgICAgY2FyZE51bSA9IHBhcnNlSW50KGNhcmRJbmRleClcbiAgICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgICBpZiAoZ2V0Q2hhbmdlcykge1xuICAgICAgICAgICAgICBsZXQgbmV3VXNmbVxuICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgcmVmLFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRWZXJzZU9iamVjdHMsXG4gICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgIGlmICh1cGRhdGVkVmVyc2VPYmplY3RzICYmIGJpYmxlVXNmbSkgeyAvLyBqdXN0IHJlcGxhY2UgdmVyc2VcbiAgICAgICAgICAgICAgICBuZXdVc2ZtID0gbWVyZ2VWZXJzZU9iamVjdHNJbnRvQmlibGVVc2ZtKGJpYmxlVXNmbSwgcmVmLCB1cGRhdGVkVmVyc2VPYmplY3RzLCBjYXJkTnVtKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKG5ld1VzZm0pIHtcbiAgICAgICAgICAgICAgICBiaWJsZVVzZm0gPSBuZXdVc2ZtXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VGYWlsID0gdHJ1ZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobWVyZ2VGYWlsKSB7IC8vIGlmIHdlIGZhaWxlZCB0byBtZXJnZSwgZmFsbGJhY2sgdG8gYnJ1dGUgZm9yY2UgdmVyc2Ugb2JqZWN0cyB0byBVU0ZNXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc2F2ZUNoYW5nZXNUb0Nsb3VkKCR7Y2FyZE51bX0pIC0gdmVyc2Ugbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gaW5zZXJ0aW5nIHZlcnNlIG9iamVjdGApXG4gICAgICAgICAgICBsZXQgbmV3Qm9va0pzb25cblxuICAgICAgICAgICAgZm9yIChjb25zdCBjYXJkSW5kZXggb2YgdW5zYXZlZENhcmRJbmRpY2VzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhcmROdW0gPSBwYXJzZUludChjYXJkSW5kZXgpXG4gICAgICAgICAgICAgIGNvbnN0IHsgZ2V0Q2hhbmdlcywgc3RhdGUgfSA9IHVuc2F2ZWRDaGFuZ2VzTGlzdFtjYXJkTnVtXVxuXG4gICAgICAgICAgICAgIGlmIChnZXRDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1VzZm1cbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICBuZXdWZXJzZVRleHQsXG4gICAgICAgICAgICAgICAgICByZWYsXG4gICAgICAgICAgICAgICAgICB1cGRhdGVkVmVyc2VPYmplY3RzLFxuICAgICAgICAgICAgICAgIH0gPSBnZXRDaGFuZ2VzKHN0YXRlKVxuXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRWZXJzZU9iamVjdHMgJiYgIW5ld1VzZm0pIHtcbiAgICAgICAgICAgICAgICAgIGxldCB0YXJnZXRWZXJzZU9iamVjdHNfID0gbnVsbFxuXG4gICAgICAgICAgICAgICAgICBpZiAocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdWZXJzZVRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRhcmdldFZlcnNlT2JqZWN0cyB9ID0gQWxpZ25tZW50SGVscGVycy51cGRhdGVBbGlnbm1lbnRzVG9UYXJnZXRWZXJzZSh1cGRhdGVkVmVyc2VPYmplY3RzLCBuZXdWZXJzZVRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmVyc2VPYmplY3RzXyA9IHRhcmdldFZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFZlcnNlT2JqZWN0c18gPSB1cGRhdGVkVmVyc2VPYmplY3RzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3Qm9va0pzb24gPSB0YXJnZXRWZXJzZU9iamVjdHNfICYmIHNjcmlwdHVyZUNvbmZpZz8udXBkYXRlVmVyc2UocmVmLmNoYXB0ZXIsIHJlZi52ZXJzZSwge3ZlcnNlT2JqZWN0czogdGFyZ2V0VmVyc2VPYmplY3RzX30pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJpYmxlVXNmbSA9IHVzZm1qcy50b1VTRk0obmV3Qm9va0pzb24sIHtmb3JjZWROZXdMaW5lczogdHJ1ZX0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc29sZS5sb2coYHNhdmVDaGFuZ2VzVG9DbG91ZCgpIC0gc2F2aW5nIG5ldyBVU0ZNOiAke2JpYmxlVXNmbS5zdWJzdHJpbmcoMCwgMTAwKX0uLi5gKVxuICAgICAgICAgIHNldFN0YXRlKHtzYXZlQ29udGVudDogYmlibGVVc2ZtLCBzdGFydFNhdmU6IHRydWUsIHNhdmVDbGlja2VkOiBmYWxzZX0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZWFkeUZvclNhdmUoKVxuICB9LCBbc2F2ZUNsaWNrZWRdKVxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgY29uc3QgeyBjaGFwdGVyIH0gPSBfcmVmZXJlbmNlIHx8IHt9XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBfdmVyc2VzRm9yUmVmID0gc2NyaXB0dXJlQ29uZmlnPy52ZXJzZXNGb3JSZWZcbiAgICBsZXQgbmV3U2VsZWN0aW9ucyA9IG5ldyBNYXAoKVxuICAgIGxldCB1cGRhdGVTZWxlY3Rpb25zID0gZmFsc2VcbiAgICBjb25zdCBfbWFwID0gbmV3U2VsZWN0aW9uc1xuICAgIGNvbnN0IG9yaWdpbmFsQm9va0lkID0gb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz8uYm9va0lkXG4gICAgY29uc3QgYm9va1ZlcnNlT2JqZWN0ID0gb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz8uY2hhcHRlcnNcbiAgICBsZXQgbmV3U2VsZWN0ZWRRdW90ZSA9IG51bGxcblxuICAgIC8vIGlmIHdlIGhhdmUgZXZlcnl0aGluZyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzZWxlY3Rpb25zXG4gICAgaWYgKF92ZXJzZXNGb3JSZWY/Lmxlbmd0aCAmJlxuICAgICAgYm9va1ZlcnNlT2JqZWN0ICYmXG4gICAgICAoYm9va0lkID09PSBvcmlnaW5hbEJvb2tJZCkgJiZcbiAgICAgIGJvb2tWZXJzZU9iamVjdFtjaGFwdGVyXSAmJiAvLyB3ZSBuZWVkIHRvIGhhdmUgZGF0YSBmb3IgY2hhcHRlclxuICAgICAgc2VsZWN0ZWRRdW90ZT8ucXVvdGVcbiAgICApIHtcbiAgICAgIC8vIGlmIHF1b3RlIGlzIGRpZmZlcmVudCB0aGFuIGxhc3RcbiAgICAgIGlmICghaXNFcXVhbChsYXN0U2VsZWN0ZWRRdW90ZSwgc2VsZWN0ZWRRdW90ZSkgfHxcbiAgICAgICAgIWlzRXF1YWwodmVyc2VzRm9yUmVmLCBfdmVyc2VzRm9yUmVmKSkge1xuICAgICAgICBjb25zdCBvcmlnaW5hbFZlcnNlcyA9IHt9XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGUgPSB7fSAvLyBrZWVwIHRyYWNrIG9mIHZlcnNlIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgbGV0IHN0YXJ0VmVyc2UgPSBfdmVyc2VzRm9yUmVmWzBdLnZlcnNlXG5cbiAgICAgICAgaWYgKHR5cGVvZiBzdGFydFZlcnNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHN0YXJ0VmVyc2UgPSBwYXJzZUludChzdGFydFZlcnNlKVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxhc3RWZXJzZSA9IHN0YXJ0VmVyc2VcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IF92ZXJzZXNGb3JSZWYubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdmVyc2VSZWYgPSBfdmVyc2VzRm9yUmVmW2ldXG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY2hhcHRlcixcbiAgICAgICAgICAgIHZlcnNlLFxuICAgICAgICAgIH0gPSB2ZXJzZVJlZlxuICAgICAgICAgIC8vIFRSSUNLWSAtIHdlIHJlbWFwIHZlcnNlcyBpbiByZWZlcmVuY2UgcmFuZ2UgdG8gYSBsaW5lYXIgc2VyaWVzIG9mIHZlcnNlcyBzbyB2ZXJzZSBzcGFucyBkb24ndCBjaG9rZSBnZXRRdW90ZU1hdGNoZXNJbkJvb2tSZWZcbiAgICAgICAgICBsZXQgX3ZlcnNlID0gc3RhcnRWZXJzZSArIGlcbiAgICAgICAgICBsYXN0VmVyc2UgPSBfdmVyc2VcbiAgICAgICAgICBzdWJzdGl0dXRlW2Ake2NoYXB0ZXJ9OiR7X3ZlcnNlfWBdID0gYCR7Y2hhcHRlcn06JHt2ZXJzZX1gXG5cbiAgICAgICAgICBpZiAoIW9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdKSB7XG4gICAgICAgICAgICBvcmlnaW5hbFZlcnNlc1tjaGFwdGVyXSA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHZlcnNlT2JqZWN0cyA9IFtdXG5cbiAgICAgICAgICBpZiAoKHR5cGVvZiB2ZXJzZSA9PT0gJ3N0cmluZycpICYmICh2ZXJzZS5pbmNsdWRlcygnLScpKSkge1xuICAgICAgICAgICAgY29uc3QgdmVyc2VzID0gZ2V0VmVyc2VzKGJvb2tWZXJzZU9iamVjdCwgYCR7Y2hhcHRlcn06JHt2ZXJzZX1gKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZlcnNlSXRlbSBvZiB2ZXJzZXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qgdm8gPSB2ZXJzZUl0ZW0udmVyc2VEYXRhLnZlcnNlT2JqZWN0c1xuICAgICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSB2ZXJzZU9iamVjdHMuY29uY2F0KHZvKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBib29rVmVyc2VPYmplY3RbY2hhcHRlcl1bdmVyc2VdPy52ZXJzZU9iamVjdHNcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmVyc2VPYmplY3RzKSB7XG4gICAgICAgICAgICB2ZXJzZU9iamVjdHMgPSBjbGVhbnVwVmVyc2VPYmplY3RzKHZlcnNlT2JqZWN0cylcbiAgICAgICAgICAgIG9yaWdpbmFsVmVyc2VzW2NoYXB0ZXJdW192ZXJzZV0gPSB7IHZlcnNlT2JqZWN0cyB9XG4gICAgICAgICAgICBfbWFwLnNldChgJHtjaGFwdGVyfToke3ZlcnNlfWAsIHZlcnNlT2JqZWN0cylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjcmVhdGUgbmV3IHJlZmVyZW5jZSByYW5nZSBmb3IgbmV3IGxpbmVhciB2ZXJzZSByYW5nZVxuICAgICAgICBjb25zdCBbY2hhcHRlcl0gPSBzZWxlY3RlZFF1b3RlPy5yZWZlcmVuY2U/LnNwbGl0KCc6JylcbiAgICAgICAgbGV0IHN1YlJlZiA9IGAke2NoYXB0ZXJ9OiR7c3RhcnRWZXJzZX1gXG5cbiAgICAgICAgaWYgKGxhc3RWZXJzZSAhPSBzdGFydFZlcnNlKSB7XG4gICAgICAgICAgc3ViUmVmICs9IGAtJHtsYXN0VmVyc2V9YFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcXVvdGVNYXRjaGVzID0gZ2V0UXVvdGVNYXRjaGVzSW5Cb29rUmVmKHtcbiAgICAgICAgICBib29rT2JqZWN0OiBvcmlnaW5hbFZlcnNlcyxcbiAgICAgICAgICByZWY6IHN1YlJlZixcbiAgICAgICAgICBxdW90ZTogc2VsZWN0ZWRRdW90ZT8ucXVvdGUsXG4gICAgICAgICAgb2NjdXJyZW5jZTogc2VsZWN0ZWRRdW90ZT8ub2NjdXJyZW5jZSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBzZWxlY3Rpb25zID0gbmV3IE1hcCgpXG5cbiAgICAgICAgaWYgKHF1b3RlTWF0Y2hlcz8uc2l6ZSkge1xuICAgICAgICAgIHF1b3RlTWF0Y2hlcy5mb3JFYWNoKCh3b3Jkcywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBfa2V5ID0gc3Vic3RpdHV0ZVtrZXldXG5cbiAgICAgICAgICAgIHNlbGVjdGlvbnMuc2V0KF9rZXksIHdvcmRzLm1hcCh3b3JkID0+IChcbiAgICAgICAgICAgICAgeyAuLi53b3JkLCB0ZXh0OiBjb3JlLm5vcm1hbGl6ZVN0cmluZyh3b3JkLnRleHQpIH1cbiAgICAgICAgICAgICkpKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgbmV3U2VsZWN0aW9ucyA9IHNlbGVjdGlvbnNcbiAgICAgICAgbmV3U2VsZWN0ZWRRdW90ZSA9IHNlbGVjdGVkUXVvdGVcbiAgICAgICAgdXBkYXRlU2VsZWN0aW9ucyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdTdGF0ZTogYW55ID0ge31cblxuICAgIC8vIHVwZGF0ZSBzdGF0ZXMgdGhhdCBoYXZlIGNoYW5nZWRcbiAgICBpZiAoIWFyZU1hcHNUaGVTYW1lKHZlcnNlT2JqZWN0c01hcCwgX21hcCkpIHtcbiAgICAgIG5ld1N0YXRlLnZlcnNlT2JqZWN0c01hcCA9IF9tYXBcbiAgICB9XG5cbiAgICBjb25zdCBib29rc05vdFNhbWUgPSByZWZlcmVuY2U/LnByb2plY3RJZCAhPT0gY3VycmVudFJlZmVyZW5jZT8ucHJvamVjdElkXG5cbiAgICBpZiAoYm9va3NOb3RTYW1lIHx8ICFhcmVWZXJzZXNTYW1lKHZlcnNlc0ZvclJlZiwgX3ZlcnNlc0ZvclJlZikpIHtcbiAgICAgIG5ld1N0YXRlLnZlcnNlc0ZvclJlZiA9IF92ZXJzZXNGb3JSZWZcbiAgICAgIG5ld1N0YXRlLmxhc3RTZWxlY3RlZFF1b3RlID0gbmV3U2VsZWN0ZWRRdW90ZVxuICAgICAgbmV3U3RhdGUuc2VsZWN0aW9ucyA9IG5ld1NlbGVjdGlvbnNcbiAgICB9XG5cbiAgICBpZiAobmV3U2VsZWN0ZWRRdW90ZSkge1xuICAgICAgbmV3U3RhdGUubGFzdFNlbGVjdGVkUXVvdGUgPSBuZXdTZWxlY3RlZFF1b3RlXG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVNlbGVjdGlvbnMpIHtcbiAgICAgIGlmICghYXJlTWFwc1RoZVNhbWUoc2VsZWN0aW9ucyB8fCAobmV3IE1hcCgpKSwgbmV3U2VsZWN0aW9ucykpIHtcbiAgICAgICAgbmV3U3RhdGUuc2VsZWN0aW9ucyA9IG5ld1NlbGVjdGlvbnNcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMobmV3U3RhdGUpLmxlbmd0aCkge1xuICAgICAgc2V0U3RhdGUobmV3U3RhdGUpXG4gICAgfVxuICB9LCBbb3duZXIsIHJlc291cmNlSWQsIGJvb2tJZCwgbGFuZ3VhZ2VJZF8sIHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmLCBvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzLCBzZWxlY3RlZFF1b3RlXSlcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4geyAvLyBjbGVhciBzZXR0aW5ncyBvbiB2ZXJzZSBjaGFuZ2VcbiAgICBzZXRTdGF0ZSh7XG4gICAgICB2ZXJzZXNBbGlnbm1lbnRTdGF0dXM6IG51bGwsXG4gICAgICB1bnNhdmVkQ2hhbmdlc0xpc3Q6IHt9LFxuICAgICAgaGF2ZVVuc2F2ZWRDaGFuZ2VzOiBmYWxzZSxcbiAgICB9KVxuICB9LCBbX3JlZmVyZW5jZV0pXG5cbiAgY29uc3QgdXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzID0gKHJlZmVyZW5jZSwgYWxpZ25lZCkgPT4ge1xuICAgIHNldFN0YXRlXyhwcmV2U3RhdGUgPT4gKHtcbiAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgIHZlcnNlc0FsaWdubWVudFN0YXR1czogeyAuLi5wcmV2U3RhdGUudmVyc2VzQWxpZ25tZW50U3RhdHVzLCBbYCR7cmVmZXJlbmNlLmNoYXB0ZXJ9OiR7cmVmZXJlbmNlLnZlcnNlfWBdOiBhbGlnbmVkIH0sXG4gICAgfSkpXG4gIH1cblxuICBsZXQgX3ZlcnNlc0ZvclJlZiA9IHNjcmlwdHVyZUNvbmZpZz8udmVyc2VzRm9yUmVmXG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoX3ZlcnNlc0ZvclJlZj8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCB7IHJlZmVyZW5jZSwgcmVzb3VyY2VMaW5rIH0gPSBzY3JpcHR1cmVDb25maWcgfHwge31cbiAgICAgIGNvbnNvbGUubG9nKGBTY3JpcHR1cmVDYXJkLl92ZXJzZXNGb3JSZWYgY2hhbmdlZGAsIHsgcmVmZXJlbmNlLCByZXNvdXJjZUxpbmsgfSlcbiAgICB9XG4gIH0sIFtfdmVyc2VzRm9yUmVmXSlcblxuICBpZiAoIV92ZXJzZXNGb3JSZWY/Lmxlbmd0aCkgeyAvLyBpZiBlbXB0eSBvZiByZWZlcmVuY2VzLCBjcmVhdGUgc2luZ2xlIGVtcHR5IHJlZmVyZW5jZVxuICAgIF92ZXJzZXNGb3JSZWYgPSBbeyAuLi5yZWZlcmVuY2UgfV1cbiAgfVxuXG4gIGNvbnN0IG5lZWRUb01lcmdlRnJvbU1hc3RlciA9IG1lcmdlRnJvbU1hc3Rlcj8ubWVyZ2VOZWVkZWRcbiAgY29uc3QgbWVyZ2VGcm9tTWFzdGVySGFzQ29uZmxpY3RzID0gbWVyZ2VGcm9tTWFzdGVyPy5jb25mbGljdFxuICBjb25zdCBtZXJnZVRvTWFzdGVySGFzQ29uZmxpY3RzID0gbWVyZ2VUb01hc3Rlcj8uY29uZmxpY3RcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgY29uc3QgbWVyZ2VGcm9tTWFzdGVyVGl0bGUgPSBtZXJnZUZyb21NYXN0ZXJIYXNDb25mbGljdHMgPyAnTWVyZ2UgQ29uZmxpY3RzIGZvciB1cGRhdGUgZnJvbSBtYXN0ZXInIDogKG5lZWRUb01lcmdlRnJvbU1hc3RlciA/ICdVcGRhdGUgZnJvbSBtYXN0ZXInIDogJ05vIG1lcmdlIGNvbmZsaWN0cyBmb3IgdXBkYXRlIHdpdGggbWFzdGVyJylcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gIGNvbnN0IG1lcmdlRnJvbU1hc3RlckNvbG9yID0gbWVyZ2VGcm9tTWFzdGVySGFzQ29uZmxpY3RzID8gJ2JsYWNrJyA6IChuZWVkVG9NZXJnZUZyb21NYXN0ZXIgPyAnYmxhY2snIDogJ2xpZ2h0Z3JheScpXG4gIGNvbnN0IG1lcmdlVG9NYXN0ZXJUaXRsZSA9IG1lcmdlVG9NYXN0ZXJIYXNDb25mbGljdHMgPyAnTWVyZ2UgQ29uZmxpY3RzIGZvciBzaGFyZSB3aXRoIG1hc3RlcicgOiAnTm8gbWVyZ2UgY29uZmxpY3RzIGZvciBzaGFyZSB3aXRoIG1hc3RlcidcbiAgY29uc3QgbWVyZ2VUb01hc3RlckNvbG9yID0gbWVyZ2VUb01hc3Rlckhhc0NvbmZsaWN0cyA/ICdibGFjaycgOiAnYmxhY2snXG5cbiAgY29uc3QgcmVuZGVyZWRTY3JpcHR1cmVQYW5lcyA9IF92ZXJzZXNGb3JSZWY/Lm1hcCgoX2N1cnJlbnRWZXJzZURhdGEsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgaW5pdGlhbFZlcnNlT2JqZWN0cyA9IF9jdXJyZW50VmVyc2VEYXRhPy52ZXJzZURhdGE/LnZlcnNlT2JqZWN0cyB8fCBbXVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCB7IGNoYXB0ZXIsIHZlcnNlIH0gPSBfY3VycmVudFZlcnNlRGF0YSB8fCB7fVxuICAgIGNvbnN0IHByb2plY3RJZCA9IGN1cnJlbnRSZWZlcmVuY2U/LnByb2plY3RJZCB8fCByZWZlcmVuY2U/LnByb2plY3RJZFxuICAgIGNvbnN0IF9yZWZlcmVuY2UgPSB7XG4gICAgICAuLi5fdmVyc2VzRm9yUmVmLFxuICAgICAgY2hhcHRlcixcbiAgICAgIHByb2plY3RJZCxcbiAgICAgIHZlcnNlLFxuICAgIH1cbiAgICBjb25zdCBfc2NyaXB0dXJlQWxpZ25tZW50RWRpdENvbmZpZyA9IHtcbiAgICAgIC4uLnNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWcsXG4gICAgICBjdXJyZW50SW5kZXg6IGluZGV4LFxuICAgICAgaW5pdGlhbFZlcnNlT2JqZWN0cyxcbiAgICAgIHJlZmVyZW5jZTogX3JlZmVyZW5jZSxcbiAgICAgIGlzTmV3VGVzdGFtZW50LFxuICAgIH1cblxuICAgIGxldCBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQgPSBmYWxzZVxuXG4gICAgaWYgKHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQpIHtcbiAgICAgIGlzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudCA9IHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQuY2hhcHRlciA9PSBjaGFwdGVyICYmIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQudmVyc2UgPT0gdmVyc2VcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNjcmlwdHVyZVBhbmVcbiAgICAgICAgey4uLnNjcmlwdHVyZUNvbmZpZ31cbiAgICAgICAgY29udGVudFN0eWxlPXtjb250ZW50U3R5bGV9XG4gICAgICAgIGN1cnJlbnRJbmRleD17aW5kZXh9XG4gICAgICAgIGRldGVybWluaW5nQnJhbmNoPXshcmVhZHlGb3JGZXRjaH1cbiAgICAgICAgZGlyZWN0aW9uPXtkaXJlY3Rpb259XG4gICAgICAgIGRpc2FibGVXb3JkUG9wb3Zlcj17ZGlzYWJsZVdvcmRQb3BvdmVyX31cbiAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICBnZXRMZXhpY29uRGF0YT17Z2V0TGV4aWNvbkRhdGF9XG4gICAgICAgIGlzTlQ9e2lzTlRffVxuICAgICAgICBpc1ZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ9e2lzVmVyc2VTZWxlY3RlZEZvckFsaWdubWVudH1cbiAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgb25BbGlnbm1lbnRGaW5pc2g9eygpID0+IHNldFN0YXRlKHsgdmVyc2VTZWxlY3RlZEZvckFsaWdubWVudDogbnVsbCB9KX1cbiAgICAgICAgb3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0cz17b3JpZ2luYWxTY3JpcHR1cmVCb29rT2JqZWN0c31cbiAgICAgICAgcmVmU3R5bGU9e3JlZlN0eWxlfVxuICAgICAgICByZWZlcmVuY2U9e19yZWZlcmVuY2V9XG4gICAgICAgIHNhdmluZz17c3RhcnRTYXZlfVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHNjcmlwdHVyZUFsaWdubWVudEVkaXRDb25maWc9e19zY3JpcHR1cmVBbGlnbm1lbnRFZGl0Q29uZmlnfVxuICAgICAgICBzZXRXb3JkQWxpZ25lclN0YXR1cz17c2V0V29yZEFsaWduZXJTdGF0dXN9XG4gICAgICAgIHNlcnZlcj17c2VydmVyfVxuICAgICAgICB0cmFuc2xhdGU9e3RyYW5zbGF0ZX1cbiAgICAgICAgdXBkYXRlVmVyc2VzQWxpZ25tZW50U3RhdHVzPXt1cGRhdGVWZXJzZXNBbGlnbm1lbnRTdGF0dXN9XG4gICAgICAvPlxuICAgIClcbiAgfSlcblxuICBjb25zdCBoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrID0gKCkgPT4ge1xuICAgIGlmICh2ZXJzZXNGb3JSZWY/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHNldFN0YXRlKHsgc2hvd0FsaWdubWVudFBvcHVwOiB0cnVlIH0pXG4gICAgfSBlbHNlIGlmICh2ZXJzZXNGb3JSZWY/Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgc2V0U3RhdGUoeyB2ZXJzZVNlbGVjdGVkRm9yQWxpZ25tZW50OiB2ZXJzZXNGb3JSZWZbMF0gfSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBvblJlbmRlclRvb2xiYXIgPSAoeyBpdGVtcyB9KSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbXMgPSBbLi4uaXRlbXNdXG5cbiAgICBsZXQgYWxsVmVyc2VzQWxpZ25lZCA9IGZhbHNlXG5cbiAgICAvLyBDaGVjayBpZiBhbGwgdmFsdWVzIGluIHZlcnNlc0FsaWdubWVudFN0YXR1cyBhcmUgdHJ1ZVxuICAgIGlmICh2ZXJzZXNBbGlnbm1lbnRTdGF0dXMpIHtcbiAgICAgIGFsbFZlcnNlc0FsaWduZWQgPSBPYmplY3QudmFsdWVzKHZlcnNlc0FsaWdubWVudFN0YXR1cykuZXZlcnkoYWxpZ25TdGF0dXMgPT4gYWxpZ25TdGF0dXMgPT09IHRydWUpXG4gICAgfVxuXG4gICAgbGV0IGFsaWduSWNvbiA9IG51bGxcbiAgICBsZXQgYWxpZ25CdXR0b25UZXh0ID0gJydcblxuICAgIGlmIChhbGxWZXJzZXNBbGlnbmVkKSB7XG4gICAgICBhbGlnbkljb24gPSA8UnhMaW5rMiBpZD17YHZhbGlkX2ljb25fJHtyZXNvdXJjZUlkfWB9IGNvbG9yPScjQkJCJy8+XG4gICAgICBhbGlnbkJ1dHRvblRleHQgPSAnQWxpZ25tZW50IGlzIFZhbGlkJ1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbkljb24gPSA8UnhMaW5rQnJlYWsyIGlkPXtgaW52YWxpZF9hbGlnbm1lbnRfaWNvbl8ke3Jlc291cmNlSWR9YH0gY29sb3I9JyMwMDAnLz5cbiAgICAgIGFsaWduQnV0dG9uVGV4dCA9ICdBbGlnbm1lbnQgaXMgSW52YWxpZCdcbiAgICB9XG5cbiAgICBpZiAoc2V0V29yZEFsaWduZXJTdGF0dXMgJiYgcmVzb3VyY2VJZCAhPT0gJ09SSUdJTkFMX1NPVVJDRScpIHtcbiAgICAgIG5ld0l0ZW1zLnB1c2goXG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgaWQ9e2BhbGlnbm1lbnRfaWNvbl8ke3Jlc291cmNlSWR9YH1cbiAgICAgICAgICBrZXk9J2NoZWNraW5nLWJ1dHRvbidcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVBbGlnbkJ1dHRvbkNsaWNrfVxuICAgICAgICAgIHRpdGxlPXthbGlnbkJ1dHRvblRleHR9XG4gICAgICAgICAgYXJpYS1sYWJlbD17YWxpZ25CdXR0b25UZXh0fVxuICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgID5cbiAgICAgICAgICB7YWxpZ25JY29ufVxuICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICApXG4gICAgfVxuXG4gICAgbmV3SXRlbXMucHVzaChcbiAgICAgIDw+XG4gICAgICAgIDxVcGRhdGVCcmFuY2hCdXR0b24gey4uLnVwZGF0ZUJ1dHRvblByb3BzfSBpc0xvYWRpbmc9e2lzTG9hZGluZyB8fCBzdGFydFNhdmV9Lz5cbiAgICAgICAgPEVycm9yRGlhbG9nIHRpdGxlPXtkaWFsb2dUaXRsZX0gY29udGVudD17ZGlhbG9nTWVzc2FnZX0gb3Blbj17aXNFcnJvckRpYWxvZ09wZW59IG9uQ2xvc2U9e29uQ2xvc2VFcnJvckRpYWxvZ30gaXNMb2FkaW5nPXsgaXNMb2FkaW5nIHx8IHN0YXJ0U2F2ZSB9IGxpbms9e2RpYWxvZ0xpbmt9IGxpbmtUb29sdGlwPXtkaWFsb2dMaW5rVG9vbHRpcH0gLz5cbiAgICAgIDwvPlxuICAgIClcblxuICAgIGlmIChtZXJnZVRvTWFzdGVyKSB7XG4gICAgICBuZXdJdGVtcy5wdXNoKFxuICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5tYXJnaW59XG4gICAgICAgICAga2V5PSdzaGFyZS10by1tYXN0ZXInXG4gICAgICAgICAgb25DbGljaz17bWVyZ2VUb01hc3RlckZyb21Vc2VyQnJhbmNofVxuICAgICAgICAgIHRpdGxlPXttZXJnZVRvTWFzdGVyVGl0bGV9XG4gICAgICAgICAgYXJpYS1sYWJlbD17bWVyZ2VUb01hc3RlclRpdGxlfVxuICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgID5cbiAgICAgICAgICB7bWVyZ2VUb01hc3Rlckhhc0NvbmZsaWN0cyA/XG4gICAgICAgICAgICA8TWRVcGRhdGVEaXNhYmxlZCBpZD0nc2hhcmUtdG8tbWFzdGVyLWljb24nIGNvbG9yPXttZXJnZVRvTWFzdGVyQ29sb3J9IC8+XG4gICAgICAgICAgICA6XG4gICAgICAgICAgICA8RmlTaGFyZSBpZD0nc2hhcmUtdG8tbWFzdGVyLWljb24nIGNvbG9yPXttZXJnZVRvTWFzdGVyQ29sb3J9IC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0l0ZW1zXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3Rpb25zQ29udGV4dFByb3ZpZGVyXG4gICAgICBzZWxlY3Rpb25zPXtzZWxlY3Rpb25zfVxuICAgICAgb25TZWxlY3Rpb25zPXtuZXdTZWxlY3Rpb25zID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ29uU2VsZWN0aW9ucycsIG5ld1NlbGVjdGlvbnMpXG4gICAgICB9fVxuICAgICAgcXVvdGU9e3NlbGVjdGVkUXVvdGU/LnF1b3RlfVxuICAgICAgb2NjdXJyZW5jZT17Zml4T2NjdXJyZW5jZShzZWxlY3RlZFF1b3RlPy5vY2N1cnJlbmNlKX1cbiAgICAgIHZlcnNlT2JqZWN0c01hcD17dmVyc2VPYmplY3RzTWFwfVxuICAgID5cbiAgICAgIDxDYXJkXG4gICAgICAgIGlkPXtgc2NyaXB0dXJlX2NhcmRfJHtjYXJkTnVtfWB9XG4gICAgICAgIHRpdGxlPXtzY3JpcHR1cmVMYWJlbH1cbiAgICAgICAgc2V0dGluZ3NUaXRsZT17c2NyaXB0dXJlVGl0bGUgKyAnIFNldHRpbmdzJ31cbiAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgICBoZWFkZXJzPXtoZWFkZXJzfVxuICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICBmb250U2l6ZT17Zm9udFNpemV9XG4gICAgICAgIGl0ZW1JbmRleD17aXRlbUluZGV4fVxuICAgICAgICBzZXRGaWx0ZXJzPXtzZXRGaWx0ZXJzfVxuICAgICAgICBzZXRGb250U2l6ZT17c2V0Rm9udFNpemV9XG4gICAgICAgIHNldEl0ZW1JbmRleD17c2V0SXRlbUluZGV4fVxuICAgICAgICBtYXJrZG93blZpZXc9e21hcmtkb3duVmlld31cbiAgICAgICAgc2V0TWFya2Rvd25WaWV3PXtzZXRNYXJrZG93blZpZXd9XG4gICAgICAgIGdldEN1c3RvbUNvbXBvbmVudD17Z2V0U2NyaXB0dXJlU2VsZWN0b3J9XG4gICAgICAgIGhpZGVNYXJrZG93blRvZ2dsZVxuICAgICAgICBvbk1lbnVDbG9zZT17b25NZW51Q2xvc2V9XG4gICAgICAgIG9uTWluaW1pemU9e29uTWluaW1pemUgPyAoKSA9PiBvbk1pbmltaXplKGlkKSA6IG51bGx9XG4gICAgICAgIGVkaXRhYmxlPXtlbmFibGVFZGl0IHx8IGVuYWJsZUFsaWdubWVudH1cbiAgICAgICAgc2F2ZWQ9e3N0YXJ0U2F2ZSB8fCAhaGF2ZVVuc2F2ZWRDaGFuZ2VzfVxuICAgICAgICBvblNhdmVFZGl0PXsoKSA9PiBzZXRTdGF0ZSh7IHNhdmVDbGlja2VkOiB0cnVlIH0pfVxuICAgICAgICBvblJlbmRlclRvb2xiYXI9e29uUmVuZGVyVG9vbGJhcn1cbiAgICAgID5cbiAgICAgICAgPGRpdiBpZD1cInNjcmlwdHVyZS1wYW5lLWxpc3RcIj5cbiAgICAgICAgICB7cmVuZGVyZWRTY3JpcHR1cmVQYW5lc31cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0NhcmQ+XG4gICAgICA8VmVyc2VTZWxlY3RvclBvcHVwXG4gICAgICAgIHJlc291cmNlSWQ9e3Jlc291cmNlSWR9XG4gICAgICAgIG9wZW49e3Nob3dBbGlnbm1lbnRQb3B1cH1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U3RhdGUoeyBzaG93QWxpZ25tZW50UG9wdXA6IGZhbHNlIH0pfVxuICAgICAgICB2ZXJzZXNGb3JSZWY9e3ZlcnNlc0ZvclJlZn1cbiAgICAgICAgdmVyc2VzQWxpZ25tZW50U3RhdHVzPXt2ZXJzZXNBbGlnbm1lbnRTdGF0dXN9XG4gICAgICAgIG9uVmVyc2VTZWxlY3Q9eyh2ZXJzZSkgPT4gc2V0U3RhdGUoe1xuICAgICAgICAgIHZlcnNlU2VsZWN0ZWRGb3JBbGlnbm1lbnQ6IHZlcnNlLFxuICAgICAgICAgIHNob3dBbGlnbm1lbnRQb3B1cDogZmFsc2VcbiAgICAgICAgfSl9XG4gICAgICAvPlxuICAgIDwvU2VsZWN0aW9uc0NvbnRleHRQcm92aWRlcj5cbiAgKVxufVxuXG5TY3JpcHR1cmVDYXJkLnByb3BUeXBlcyA9IHtcbiAgLyoqIHJlcG8gYnJhbmNoIG9yIHRhZyBzdWNoIGFzIG1hc3RlciAqL1xuICBhcHBSZWY6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGF1dGhlbnRpY2F0aW9uIGluZm8gKi9cbiAgYXV0aGVudGljYXRpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBpbmRleCBmb3IgY3VycmVudCBib29rIChlLmcuICcwMScgZm9yICdnZW4nKSovXG4gIGJvb2tJbmRleDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIHNjcmlwdHVyZSBjYXJkIG51bWJlciAoMCB0byAyIGZvciBleGFtcGxlKSAqL1xuICBjYXJkTnVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIC8qKiBDU1MgY2xhc3NlcyAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogaWYgdHJ1ZSB0aGVuIHdvcmQgZGF0YSBob3ZlciBpcyBzaG93biAqL1xuICBkaXNhYmxlV29yZFBvcG92ZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKiogZ2V0IGxhbmd1YWdlIGRldGFpbHMgKi9cbiAgZ2V0TGFuZ3VhZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBmdW5jdGlvbiB0byBnZXQgbGF0ZXN0IGxleGljb24gZGF0YSAqL1xuICBnZXRMZXhpY29uRGF0YTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBvcHRpb25hbCB1cmwgZm9yIGdyZWVrIHJlcG8gKi9cbiAgZ3JlZWtSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgdXJsIGZvciBoZWJyZXcgcmVwbyAqL1xuICBoZWJyZXdSZXBvVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogb3B0aW9uYWwgaHR0cCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgZmV0Y2hpbmcgcmVzb3VyY2VzLCBkZWZhdWx0IGlzIDAgKHZlcnkgbG9uZyB3YWl0KSAqL1xuICBodHRwQ29uZmlnOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogaHRtbCBpZGVudGlmaWVyIHRvIHVzZSBmb3IgY2FyZCAqL1xuICBpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgTlQgb3IgT1QgKi9cbiAgaXNOVDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIHVzZXItbmFtZSAqL1xuICBsb2dnZWRJblVzZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiBmdW5jdGlvbiB0byBtaW5pbWl6ZSB0aGUgY2FyZCAob3B0aW9uYWwpICovXG4gIG9uTWluaW1pemU6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogb3B0aW9uYWwgY2FsbGJhY2sgaWYgZXJyb3IgbG9hZGluZyByZXNvdXJjZSwgcGFyYW1ldGVyIHJldHVybmVkIGFyZTpcbiAgICogICAgKHtzdHJpbmd9IGVycm9yTWVzc2FnZSwge2Jvb2xlYW59IGlzQWNjZXNzRXJyb3IsIHtvYmplY3R9IHJlc291cmNlU3RhdHVzKVxuICAgKiAgICAgIC0gaXNBY2Nlc3NFcnJvciAtIGlzIHRydWUgaWYgdGhpcyB3YXMgYW4gZXJyb3IgdHJ5aW5nIHRvIGFjY2VzcyBmaWxlXG4gICAqICAgICAgLSByZXNvdXJjZVN0YXR1cyAtIGlzIG9iamVjdCBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgcHJvYmxlbXMgZmV0Y2hpbmcgcmVzb3VyY2UgKi9cbiAgb25SZXNvdXJjZUVycm9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHRoZSBvcmlnaW5hbCBzY3JpcHR1cmUgYm9va09iamVjdHMgZm9yIGN1cnJlbnQgYm9vayAqL1xuICBvcmlnaW5hbFNjcmlwdHVyZUJvb2tPYmplY3RzOiBQcm9wVHlwZXMub2JqZWN0LFxuICByZWZlcmVuY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHByb2plY3RJZCAoYm9va0lEKSB0byB1c2UgKi9cbiAgICBwcm9qZWN0SWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogY3VycmVudCBjaGFwdGVyIG51bWJlciAqL1xuICAgIGNoYXB0ZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKS5pc1JlcXVpcmVkLFxuICAgIC8qKiBjdXJyZW50IHZlcnNlIG51bWJlciAqL1xuICAgIHZlcnNlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZCxcbiAgfSksXG4gIC8qKiByZXNvdXJjZSBvYmplY3QgKi9cbiAgcmVzb3VyY2U6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgLyoqIHJlc291cmNlIGxhbmd1YWdlIHRvIHVzZSAqL1xuICAgIGxhbmd1YWdlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBzdWNoIGFzIHVuZm9sZGluZ1dvcmQgKi9cbiAgICBvd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIC8qKiByZXNvdXJjZUlkIHRvIHVzZSAoZS5nLiB1Z250KSAqL1xuICAgIHJlc291cmNlSWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAvKiogcmVwbyBvd25lciBmb3Igb3JpZ2luYWwgbGFuZ3VhZ2VzIHN1Y2ggYXMgdW5mb2xkaW5nV29yZCAqL1xuICAgIG9yaWdpbmFsTGFuZ3VhZ2VPd25lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KSxcbiAgLyoqIHJlc291cmNlTGluayAqL1xuICByZXNvdXJjZUxpbms6IFByb3BUeXBlcy5hbnksXG4gIC8qKlRoaXMgaXMgY3VycmVudGx5IHNlbGVjdGVkIHF1b3RlICovXG4gIHNlbGVjdGVkUXVvdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKiBzZXJ2ZXIgKGUuZy4gJ2h0dHBzOi8vZ2l0LmRvb3I0My5vcmcnKSAqL1xuICBzZXJ2ZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIGNhbGxiYWNrIHRvIHVwZGF0ZSBsb2FkaW5nIHN0YXRlICovXG4gIHNldEFyZVJlc291cmNlc0xvYWRpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHNhdmluZyBzdGF0ZSovXG4gIHNldEFyZVJlc291cmNlc1NhdmluZzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiBmdW5jdGlvbiB0byBzZXQgc3RhdGUgaW4gYXBwIHRoYXQgdGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICBzZXRTYXZlZENoYW5nZXM6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogY2FsbGJhY2sgdG8gdXBkYXRlIHdvcmQgYWxpZ25lciBzdGF0ZSAqL1xuICBzZXRXb3JkQWxpZ25lclN0YXR1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKiB0aXRsZSBmb3Igc2NyaXB0dXJlIGNhcmQgKi9cbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLyoqIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBsb2NhbGl6YXRpb24gKi9cbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIGNhbGxiYWNrIHRvIHVwZGF0ZSB0aGUgY2FyZCdzIG1lcmdlIHN0YXRlIGluIGFwcCAqL1xuICB1cGRhdGVNZXJnZVN0YXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqIHVzZSBtZXRob2QgZm9yIHVzaW5nIGxvY2FsIHN0b3JhZ2Ugc3BlY2lmaWMgZm9yIHVzZXIgKi9cbiAgdXNlVXNlckxvY2FsU3RvcmFnZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbn1cbiJdfQ==
|