@01/launcher 1.0.14 → 1.0.15
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/index.js +129 -869
- package/dist/launch-base.d.ts +3 -3
- package/package.json +18 -18
package/dist/index.js
CHANGED
|
@@ -7,798 +7,122 @@
|
|
|
7
7
|
exports["index"] = factory();
|
|
8
8
|
else
|
|
9
9
|
root["index"] = factory();
|
|
10
|
-
})(global,
|
|
11
|
-
return /******/ (
|
|
12
|
-
/******/
|
|
13
|
-
/******/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
/******/
|
|
37
|
-
|
|
38
|
-
/******/ var hotCurrentChildModule;
|
|
39
|
-
/******/ // eslint-disable-next-line no-unused-vars
|
|
40
|
-
/******/ var hotCurrentParents = [];
|
|
41
|
-
/******/ // eslint-disable-next-line no-unused-vars
|
|
42
|
-
/******/ var hotCurrentParentsTemp = [];
|
|
43
|
-
/******/
|
|
44
|
-
/******/ // eslint-disable-next-line no-unused-vars
|
|
45
|
-
/******/ function hotCreateRequire(moduleId) {
|
|
46
|
-
/******/ var me = installedModules[moduleId];
|
|
47
|
-
/******/ if (!me) return __webpack_require__;
|
|
48
|
-
/******/ var fn = function(request) {
|
|
49
|
-
/******/ if (me.hot.active) {
|
|
50
|
-
/******/ if (installedModules[request]) {
|
|
51
|
-
/******/ if (installedModules[request].parents.indexOf(moduleId) === -1) {
|
|
52
|
-
/******/ installedModules[request].parents.push(moduleId);
|
|
53
|
-
/******/ }
|
|
54
|
-
/******/ } else {
|
|
55
|
-
/******/ hotCurrentParents = [moduleId];
|
|
56
|
-
/******/ hotCurrentChildModule = request;
|
|
57
|
-
/******/ }
|
|
58
|
-
/******/ if (me.children.indexOf(request) === -1) {
|
|
59
|
-
/******/ me.children.push(request);
|
|
60
|
-
/******/ }
|
|
61
|
-
/******/ } else {
|
|
62
|
-
/******/ console.warn(
|
|
63
|
-
/******/ "[HMR] unexpected require(" +
|
|
64
|
-
/******/ request +
|
|
65
|
-
/******/ ") from disposed module " +
|
|
66
|
-
/******/ moduleId
|
|
67
|
-
/******/ );
|
|
68
|
-
/******/ hotCurrentParents = [];
|
|
69
|
-
/******/ }
|
|
70
|
-
/******/ return __webpack_require__(request);
|
|
71
|
-
/******/ };
|
|
72
|
-
/******/ var ObjectFactory = function ObjectFactory(name) {
|
|
73
|
-
/******/ return {
|
|
74
|
-
/******/ configurable: true,
|
|
75
|
-
/******/ enumerable: true,
|
|
76
|
-
/******/ get: function() {
|
|
77
|
-
/******/ return __webpack_require__[name];
|
|
78
|
-
/******/ },
|
|
79
|
-
/******/ set: function(value) {
|
|
80
|
-
/******/ __webpack_require__[name] = value;
|
|
81
|
-
/******/ }
|
|
82
|
-
/******/ };
|
|
83
|
-
/******/ };
|
|
84
|
-
/******/ for (var name in __webpack_require__) {
|
|
85
|
-
/******/ if (
|
|
86
|
-
/******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
|
|
87
|
-
/******/ name !== "e" &&
|
|
88
|
-
/******/ name !== "t"
|
|
89
|
-
/******/ ) {
|
|
90
|
-
/******/ Object.defineProperty(fn, name, ObjectFactory(name));
|
|
91
|
-
/******/ }
|
|
92
|
-
/******/ }
|
|
93
|
-
/******/ fn.e = function(chunkId) {
|
|
94
|
-
/******/ if (hotStatus === "ready") hotSetStatus("prepare");
|
|
95
|
-
/******/ hotChunksLoading++;
|
|
96
|
-
/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
|
|
97
|
-
/******/ finishChunkLoading();
|
|
98
|
-
/******/ throw err;
|
|
99
|
-
/******/ });
|
|
100
|
-
/******/
|
|
101
|
-
/******/ function finishChunkLoading() {
|
|
102
|
-
/******/ hotChunksLoading--;
|
|
103
|
-
/******/ if (hotStatus === "prepare") {
|
|
104
|
-
/******/ if (!hotWaitingFilesMap[chunkId]) {
|
|
105
|
-
/******/ hotEnsureUpdateChunk(chunkId);
|
|
106
|
-
/******/ }
|
|
107
|
-
/******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
|
|
108
|
-
/******/ hotUpdateDownloaded();
|
|
109
|
-
/******/ }
|
|
110
|
-
/******/ }
|
|
111
|
-
/******/ }
|
|
112
|
-
/******/ };
|
|
113
|
-
/******/ fn.t = function(value, mode) {
|
|
114
|
-
/******/ if (mode & 1) value = fn(value);
|
|
115
|
-
/******/ return __webpack_require__.t(value, mode & ~1);
|
|
116
|
-
/******/ };
|
|
117
|
-
/******/ return fn;
|
|
118
|
-
/******/ }
|
|
119
|
-
/******/
|
|
120
|
-
/******/ // eslint-disable-next-line no-unused-vars
|
|
121
|
-
/******/ function hotCreateModule(moduleId) {
|
|
122
|
-
/******/ var hot = {
|
|
123
|
-
/******/ // private stuff
|
|
124
|
-
/******/ _acceptedDependencies: {},
|
|
125
|
-
/******/ _declinedDependencies: {},
|
|
126
|
-
/******/ _selfAccepted: false,
|
|
127
|
-
/******/ _selfDeclined: false,
|
|
128
|
-
/******/ _disposeHandlers: [],
|
|
129
|
-
/******/ _main: hotCurrentChildModule !== moduleId,
|
|
130
|
-
/******/
|
|
131
|
-
/******/ // Module API
|
|
132
|
-
/******/ active: true,
|
|
133
|
-
/******/ accept: function(dep, callback) {
|
|
134
|
-
/******/ if (dep === undefined) hot._selfAccepted = true;
|
|
135
|
-
/******/ else if (typeof dep === "function") hot._selfAccepted = dep;
|
|
136
|
-
/******/ else if (typeof dep === "object")
|
|
137
|
-
/******/ for (var i = 0; i < dep.length; i++)
|
|
138
|
-
/******/ hot._acceptedDependencies[dep[i]] = callback || function() {};
|
|
139
|
-
/******/ else hot._acceptedDependencies[dep] = callback || function() {};
|
|
140
|
-
/******/ },
|
|
141
|
-
/******/ decline: function(dep) {
|
|
142
|
-
/******/ if (dep === undefined) hot._selfDeclined = true;
|
|
143
|
-
/******/ else if (typeof dep === "object")
|
|
144
|
-
/******/ for (var i = 0; i < dep.length; i++)
|
|
145
|
-
/******/ hot._declinedDependencies[dep[i]] = true;
|
|
146
|
-
/******/ else hot._declinedDependencies[dep] = true;
|
|
147
|
-
/******/ },
|
|
148
|
-
/******/ dispose: function(callback) {
|
|
149
|
-
/******/ hot._disposeHandlers.push(callback);
|
|
150
|
-
/******/ },
|
|
151
|
-
/******/ addDisposeHandler: function(callback) {
|
|
152
|
-
/******/ hot._disposeHandlers.push(callback);
|
|
153
|
-
/******/ },
|
|
154
|
-
/******/ removeDisposeHandler: function(callback) {
|
|
155
|
-
/******/ var idx = hot._disposeHandlers.indexOf(callback);
|
|
156
|
-
/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
|
|
157
|
-
/******/ },
|
|
158
|
-
/******/
|
|
159
|
-
/******/ // Management API
|
|
160
|
-
/******/ check: hotCheck,
|
|
161
|
-
/******/ apply: hotApply,
|
|
162
|
-
/******/ status: function(l) {
|
|
163
|
-
/******/ if (!l) return hotStatus;
|
|
164
|
-
/******/ hotStatusHandlers.push(l);
|
|
165
|
-
/******/ },
|
|
166
|
-
/******/ addStatusHandler: function(l) {
|
|
167
|
-
/******/ hotStatusHandlers.push(l);
|
|
168
|
-
/******/ },
|
|
169
|
-
/******/ removeStatusHandler: function(l) {
|
|
170
|
-
/******/ var idx = hotStatusHandlers.indexOf(l);
|
|
171
|
-
/******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1);
|
|
172
|
-
/******/ },
|
|
173
|
-
/******/
|
|
174
|
-
/******/ //inherit from previous dispose call
|
|
175
|
-
/******/ data: hotCurrentModuleData[moduleId]
|
|
176
|
-
/******/ };
|
|
177
|
-
/******/ hotCurrentChildModule = undefined;
|
|
178
|
-
/******/ return hot;
|
|
179
|
-
/******/ }
|
|
180
|
-
/******/
|
|
181
|
-
/******/ var hotStatusHandlers = [];
|
|
182
|
-
/******/ var hotStatus = "idle";
|
|
183
|
-
/******/
|
|
184
|
-
/******/ function hotSetStatus(newStatus) {
|
|
185
|
-
/******/ hotStatus = newStatus;
|
|
186
|
-
/******/ for (var i = 0; i < hotStatusHandlers.length; i++)
|
|
187
|
-
/******/ hotStatusHandlers[i].call(null, newStatus);
|
|
188
|
-
/******/ }
|
|
189
|
-
/******/
|
|
190
|
-
/******/ // while downloading
|
|
191
|
-
/******/ var hotWaitingFiles = 0;
|
|
192
|
-
/******/ var hotChunksLoading = 0;
|
|
193
|
-
/******/ var hotWaitingFilesMap = {};
|
|
194
|
-
/******/ var hotRequestedFilesMap = {};
|
|
195
|
-
/******/ var hotAvailableFilesMap = {};
|
|
196
|
-
/******/ var hotDeferred;
|
|
197
|
-
/******/
|
|
198
|
-
/******/ // The update info
|
|
199
|
-
/******/ var hotUpdate, hotUpdateNewHash;
|
|
200
|
-
/******/
|
|
201
|
-
/******/ function toModuleId(id) {
|
|
202
|
-
/******/ var isNumber = +id + "" === id;
|
|
203
|
-
/******/ return isNumber ? +id : id;
|
|
204
|
-
/******/ }
|
|
205
|
-
/******/
|
|
206
|
-
/******/ function hotCheck(apply) {
|
|
207
|
-
/******/ if (hotStatus !== "idle") {
|
|
208
|
-
/******/ throw new Error("check() is only allowed in idle status");
|
|
209
|
-
/******/ }
|
|
210
|
-
/******/ hotApplyOnUpdate = apply;
|
|
211
|
-
/******/ hotSetStatus("check");
|
|
212
|
-
/******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) {
|
|
213
|
-
/******/ if (!update) {
|
|
214
|
-
/******/ hotSetStatus("idle");
|
|
215
|
-
/******/ return null;
|
|
216
|
-
/******/ }
|
|
217
|
-
/******/ hotRequestedFilesMap = {};
|
|
218
|
-
/******/ hotWaitingFilesMap = {};
|
|
219
|
-
/******/ hotAvailableFilesMap = update.c;
|
|
220
|
-
/******/ hotUpdateNewHash = update.h;
|
|
221
|
-
/******/
|
|
222
|
-
/******/ hotSetStatus("prepare");
|
|
223
|
-
/******/ var promise = new Promise(function(resolve, reject) {
|
|
224
|
-
/******/ hotDeferred = {
|
|
225
|
-
/******/ resolve: resolve,
|
|
226
|
-
/******/ reject: reject
|
|
227
|
-
/******/ };
|
|
228
|
-
/******/ });
|
|
229
|
-
/******/ hotUpdate = {};
|
|
230
|
-
/******/ var chunkId = 0;
|
|
231
|
-
/******/ // eslint-disable-next-line no-lone-blocks
|
|
232
|
-
/******/ {
|
|
233
|
-
/******/ /*globals chunkId */
|
|
234
|
-
/******/ hotEnsureUpdateChunk(chunkId);
|
|
235
|
-
/******/ }
|
|
236
|
-
/******/ if (
|
|
237
|
-
/******/ hotStatus === "prepare" &&
|
|
238
|
-
/******/ hotChunksLoading === 0 &&
|
|
239
|
-
/******/ hotWaitingFiles === 0
|
|
240
|
-
/******/ ) {
|
|
241
|
-
/******/ hotUpdateDownloaded();
|
|
242
|
-
/******/ }
|
|
243
|
-
/******/ return promise;
|
|
244
|
-
/******/ });
|
|
245
|
-
/******/ }
|
|
246
|
-
/******/
|
|
247
|
-
/******/ // eslint-disable-next-line no-unused-vars
|
|
248
|
-
/******/ function hotAddUpdateChunk(chunkId, moreModules) {
|
|
249
|
-
/******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
|
|
250
|
-
/******/ return;
|
|
251
|
-
/******/ hotRequestedFilesMap[chunkId] = false;
|
|
252
|
-
/******/ for (var moduleId in moreModules) {
|
|
253
|
-
/******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
|
|
254
|
-
/******/ hotUpdate[moduleId] = moreModules[moduleId];
|
|
255
|
-
/******/ }
|
|
256
|
-
/******/ }
|
|
257
|
-
/******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
|
|
258
|
-
/******/ hotUpdateDownloaded();
|
|
259
|
-
/******/ }
|
|
260
|
-
/******/ }
|
|
261
|
-
/******/
|
|
262
|
-
/******/ function hotEnsureUpdateChunk(chunkId) {
|
|
263
|
-
/******/ if (!hotAvailableFilesMap[chunkId]) {
|
|
264
|
-
/******/ hotWaitingFilesMap[chunkId] = true;
|
|
265
|
-
/******/ } else {
|
|
266
|
-
/******/ hotRequestedFilesMap[chunkId] = true;
|
|
267
|
-
/******/ hotWaitingFiles++;
|
|
268
|
-
/******/ hotDownloadUpdateChunk(chunkId);
|
|
269
|
-
/******/ }
|
|
270
|
-
/******/ }
|
|
271
|
-
/******/
|
|
272
|
-
/******/ function hotUpdateDownloaded() {
|
|
273
|
-
/******/ hotSetStatus("ready");
|
|
274
|
-
/******/ var deferred = hotDeferred;
|
|
275
|
-
/******/ hotDeferred = null;
|
|
276
|
-
/******/ if (!deferred) return;
|
|
277
|
-
/******/ if (hotApplyOnUpdate) {
|
|
278
|
-
/******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to
|
|
279
|
-
/******/ // avoid triggering uncaught exception warning in Chrome.
|
|
280
|
-
/******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
|
|
281
|
-
/******/ Promise.resolve()
|
|
282
|
-
/******/ .then(function() {
|
|
283
|
-
/******/ return hotApply(hotApplyOnUpdate);
|
|
284
|
-
/******/ })
|
|
285
|
-
/******/ .then(
|
|
286
|
-
/******/ function(result) {
|
|
287
|
-
/******/ deferred.resolve(result);
|
|
288
|
-
/******/ },
|
|
289
|
-
/******/ function(err) {
|
|
290
|
-
/******/ deferred.reject(err);
|
|
291
|
-
/******/ }
|
|
292
|
-
/******/ );
|
|
293
|
-
/******/ } else {
|
|
294
|
-
/******/ var outdatedModules = [];
|
|
295
|
-
/******/ for (var id in hotUpdate) {
|
|
296
|
-
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
|
|
297
|
-
/******/ outdatedModules.push(toModuleId(id));
|
|
298
|
-
/******/ }
|
|
299
|
-
/******/ }
|
|
300
|
-
/******/ deferred.resolve(outdatedModules);
|
|
301
|
-
/******/ }
|
|
302
|
-
/******/ }
|
|
303
|
-
/******/
|
|
304
|
-
/******/ function hotApply(options) {
|
|
305
|
-
/******/ if (hotStatus !== "ready")
|
|
306
|
-
/******/ throw new Error("apply() is only allowed in ready status");
|
|
307
|
-
/******/ options = options || {};
|
|
308
|
-
/******/
|
|
309
|
-
/******/ var cb;
|
|
310
|
-
/******/ var i;
|
|
311
|
-
/******/ var j;
|
|
312
|
-
/******/ var module;
|
|
313
|
-
/******/ var moduleId;
|
|
314
|
-
/******/
|
|
315
|
-
/******/ function getAffectedStuff(updateModuleId) {
|
|
316
|
-
/******/ var outdatedModules = [updateModuleId];
|
|
317
|
-
/******/ var outdatedDependencies = {};
|
|
318
|
-
/******/
|
|
319
|
-
/******/ var queue = outdatedModules.map(function(id) {
|
|
320
|
-
/******/ return {
|
|
321
|
-
/******/ chain: [id],
|
|
322
|
-
/******/ id: id
|
|
323
|
-
/******/ };
|
|
324
|
-
/******/ });
|
|
325
|
-
/******/ while (queue.length > 0) {
|
|
326
|
-
/******/ var queueItem = queue.pop();
|
|
327
|
-
/******/ var moduleId = queueItem.id;
|
|
328
|
-
/******/ var chain = queueItem.chain;
|
|
329
|
-
/******/ module = installedModules[moduleId];
|
|
330
|
-
/******/ if (!module || module.hot._selfAccepted) continue;
|
|
331
|
-
/******/ if (module.hot._selfDeclined) {
|
|
332
|
-
/******/ return {
|
|
333
|
-
/******/ type: "self-declined",
|
|
334
|
-
/******/ chain: chain,
|
|
335
|
-
/******/ moduleId: moduleId
|
|
336
|
-
/******/ };
|
|
337
|
-
/******/ }
|
|
338
|
-
/******/ if (module.hot._main) {
|
|
339
|
-
/******/ return {
|
|
340
|
-
/******/ type: "unaccepted",
|
|
341
|
-
/******/ chain: chain,
|
|
342
|
-
/******/ moduleId: moduleId
|
|
343
|
-
/******/ };
|
|
344
|
-
/******/ }
|
|
345
|
-
/******/ for (var i = 0; i < module.parents.length; i++) {
|
|
346
|
-
/******/ var parentId = module.parents[i];
|
|
347
|
-
/******/ var parent = installedModules[parentId];
|
|
348
|
-
/******/ if (!parent) continue;
|
|
349
|
-
/******/ if (parent.hot._declinedDependencies[moduleId]) {
|
|
350
|
-
/******/ return {
|
|
351
|
-
/******/ type: "declined",
|
|
352
|
-
/******/ chain: chain.concat([parentId]),
|
|
353
|
-
/******/ moduleId: moduleId,
|
|
354
|
-
/******/ parentId: parentId
|
|
355
|
-
/******/ };
|
|
356
|
-
/******/ }
|
|
357
|
-
/******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
|
|
358
|
-
/******/ if (parent.hot._acceptedDependencies[moduleId]) {
|
|
359
|
-
/******/ if (!outdatedDependencies[parentId])
|
|
360
|
-
/******/ outdatedDependencies[parentId] = [];
|
|
361
|
-
/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
|
|
362
|
-
/******/ continue;
|
|
363
|
-
/******/ }
|
|
364
|
-
/******/ delete outdatedDependencies[parentId];
|
|
365
|
-
/******/ outdatedModules.push(parentId);
|
|
366
|
-
/******/ queue.push({
|
|
367
|
-
/******/ chain: chain.concat([parentId]),
|
|
368
|
-
/******/ id: parentId
|
|
369
|
-
/******/ });
|
|
370
|
-
/******/ }
|
|
371
|
-
/******/ }
|
|
372
|
-
/******/
|
|
373
|
-
/******/ return {
|
|
374
|
-
/******/ type: "accepted",
|
|
375
|
-
/******/ moduleId: updateModuleId,
|
|
376
|
-
/******/ outdatedModules: outdatedModules,
|
|
377
|
-
/******/ outdatedDependencies: outdatedDependencies
|
|
378
|
-
/******/ };
|
|
379
|
-
/******/ }
|
|
380
|
-
/******/
|
|
381
|
-
/******/ function addAllToSet(a, b) {
|
|
382
|
-
/******/ for (var i = 0; i < b.length; i++) {
|
|
383
|
-
/******/ var item = b[i];
|
|
384
|
-
/******/ if (a.indexOf(item) === -1) a.push(item);
|
|
385
|
-
/******/ }
|
|
386
|
-
/******/ }
|
|
387
|
-
/******/
|
|
388
|
-
/******/ // at begin all updates modules are outdated
|
|
389
|
-
/******/ // the "outdated" status can propagate to parents if they don't accept the children
|
|
390
|
-
/******/ var outdatedDependencies = {};
|
|
391
|
-
/******/ var outdatedModules = [];
|
|
392
|
-
/******/ var appliedUpdate = {};
|
|
393
|
-
/******/
|
|
394
|
-
/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() {
|
|
395
|
-
/******/ console.warn(
|
|
396
|
-
/******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module"
|
|
397
|
-
/******/ );
|
|
398
|
-
/******/ };
|
|
399
|
-
/******/
|
|
400
|
-
/******/ for (var id in hotUpdate) {
|
|
401
|
-
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
|
|
402
|
-
/******/ moduleId = toModuleId(id);
|
|
403
|
-
/******/ /** @type {TODO} */
|
|
404
|
-
/******/ var result;
|
|
405
|
-
/******/ if (hotUpdate[id]) {
|
|
406
|
-
/******/ result = getAffectedStuff(moduleId);
|
|
407
|
-
/******/ } else {
|
|
408
|
-
/******/ result = {
|
|
409
|
-
/******/ type: "disposed",
|
|
410
|
-
/******/ moduleId: id
|
|
411
|
-
/******/ };
|
|
412
|
-
/******/ }
|
|
413
|
-
/******/ /** @type {Error|false} */
|
|
414
|
-
/******/ var abortError = false;
|
|
415
|
-
/******/ var doApply = false;
|
|
416
|
-
/******/ var doDispose = false;
|
|
417
|
-
/******/ var chainInfo = "";
|
|
418
|
-
/******/ if (result.chain) {
|
|
419
|
-
/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
|
|
420
|
-
/******/ }
|
|
421
|
-
/******/ switch (result.type) {
|
|
422
|
-
/******/ case "self-declined":
|
|
423
|
-
/******/ if (options.onDeclined) options.onDeclined(result);
|
|
424
|
-
/******/ if (!options.ignoreDeclined)
|
|
425
|
-
/******/ abortError = new Error(
|
|
426
|
-
/******/ "Aborted because of self decline: " +
|
|
427
|
-
/******/ result.moduleId +
|
|
428
|
-
/******/ chainInfo
|
|
429
|
-
/******/ );
|
|
430
|
-
/******/ break;
|
|
431
|
-
/******/ case "declined":
|
|
432
|
-
/******/ if (options.onDeclined) options.onDeclined(result);
|
|
433
|
-
/******/ if (!options.ignoreDeclined)
|
|
434
|
-
/******/ abortError = new Error(
|
|
435
|
-
/******/ "Aborted because of declined dependency: " +
|
|
436
|
-
/******/ result.moduleId +
|
|
437
|
-
/******/ " in " +
|
|
438
|
-
/******/ result.parentId +
|
|
439
|
-
/******/ chainInfo
|
|
440
|
-
/******/ );
|
|
441
|
-
/******/ break;
|
|
442
|
-
/******/ case "unaccepted":
|
|
443
|
-
/******/ if (options.onUnaccepted) options.onUnaccepted(result);
|
|
444
|
-
/******/ if (!options.ignoreUnaccepted)
|
|
445
|
-
/******/ abortError = new Error(
|
|
446
|
-
/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
|
|
447
|
-
/******/ );
|
|
448
|
-
/******/ break;
|
|
449
|
-
/******/ case "accepted":
|
|
450
|
-
/******/ if (options.onAccepted) options.onAccepted(result);
|
|
451
|
-
/******/ doApply = true;
|
|
452
|
-
/******/ break;
|
|
453
|
-
/******/ case "disposed":
|
|
454
|
-
/******/ if (options.onDisposed) options.onDisposed(result);
|
|
455
|
-
/******/ doDispose = true;
|
|
456
|
-
/******/ break;
|
|
457
|
-
/******/ default:
|
|
458
|
-
/******/ throw new Error("Unexception type " + result.type);
|
|
459
|
-
/******/ }
|
|
460
|
-
/******/ if (abortError) {
|
|
461
|
-
/******/ hotSetStatus("abort");
|
|
462
|
-
/******/ return Promise.reject(abortError);
|
|
463
|
-
/******/ }
|
|
464
|
-
/******/ if (doApply) {
|
|
465
|
-
/******/ appliedUpdate[moduleId] = hotUpdate[moduleId];
|
|
466
|
-
/******/ addAllToSet(outdatedModules, result.outdatedModules);
|
|
467
|
-
/******/ for (moduleId in result.outdatedDependencies) {
|
|
468
|
-
/******/ if (
|
|
469
|
-
/******/ Object.prototype.hasOwnProperty.call(
|
|
470
|
-
/******/ result.outdatedDependencies,
|
|
471
|
-
/******/ moduleId
|
|
472
|
-
/******/ )
|
|
473
|
-
/******/ ) {
|
|
474
|
-
/******/ if (!outdatedDependencies[moduleId])
|
|
475
|
-
/******/ outdatedDependencies[moduleId] = [];
|
|
476
|
-
/******/ addAllToSet(
|
|
477
|
-
/******/ outdatedDependencies[moduleId],
|
|
478
|
-
/******/ result.outdatedDependencies[moduleId]
|
|
479
|
-
/******/ );
|
|
480
|
-
/******/ }
|
|
481
|
-
/******/ }
|
|
482
|
-
/******/ }
|
|
483
|
-
/******/ if (doDispose) {
|
|
484
|
-
/******/ addAllToSet(outdatedModules, [result.moduleId]);
|
|
485
|
-
/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
|
|
486
|
-
/******/ }
|
|
487
|
-
/******/ }
|
|
488
|
-
/******/ }
|
|
489
|
-
/******/
|
|
490
|
-
/******/ // Store self accepted outdated modules to require them later by the module system
|
|
491
|
-
/******/ var outdatedSelfAcceptedModules = [];
|
|
492
|
-
/******/ for (i = 0; i < outdatedModules.length; i++) {
|
|
493
|
-
/******/ moduleId = outdatedModules[i];
|
|
494
|
-
/******/ if (
|
|
495
|
-
/******/ installedModules[moduleId] &&
|
|
496
|
-
/******/ installedModules[moduleId].hot._selfAccepted &&
|
|
497
|
-
/******/ // removed self-accepted modules should not be required
|
|
498
|
-
/******/ appliedUpdate[moduleId] !== warnUnexpectedRequire
|
|
499
|
-
/******/ ) {
|
|
500
|
-
/******/ outdatedSelfAcceptedModules.push({
|
|
501
|
-
/******/ module: moduleId,
|
|
502
|
-
/******/ errorHandler: installedModules[moduleId].hot._selfAccepted
|
|
503
|
-
/******/ });
|
|
504
|
-
/******/ }
|
|
505
|
-
/******/ }
|
|
506
|
-
/******/
|
|
507
|
-
/******/ // Now in "dispose" phase
|
|
508
|
-
/******/ hotSetStatus("dispose");
|
|
509
|
-
/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
|
|
510
|
-
/******/ if (hotAvailableFilesMap[chunkId] === false) {
|
|
511
|
-
/******/ hotDisposeChunk(chunkId);
|
|
512
|
-
/******/ }
|
|
513
|
-
/******/ });
|
|
514
|
-
/******/
|
|
515
|
-
/******/ var idx;
|
|
516
|
-
/******/ var queue = outdatedModules.slice();
|
|
517
|
-
/******/ while (queue.length > 0) {
|
|
518
|
-
/******/ moduleId = queue.pop();
|
|
519
|
-
/******/ module = installedModules[moduleId];
|
|
520
|
-
/******/ if (!module) continue;
|
|
521
|
-
/******/
|
|
522
|
-
/******/ var data = {};
|
|
523
|
-
/******/
|
|
524
|
-
/******/ // Call dispose handlers
|
|
525
|
-
/******/ var disposeHandlers = module.hot._disposeHandlers;
|
|
526
|
-
/******/ for (j = 0; j < disposeHandlers.length; j++) {
|
|
527
|
-
/******/ cb = disposeHandlers[j];
|
|
528
|
-
/******/ cb(data);
|
|
529
|
-
/******/ }
|
|
530
|
-
/******/ hotCurrentModuleData[moduleId] = data;
|
|
531
|
-
/******/
|
|
532
|
-
/******/ // disable module (this disables requires from this module)
|
|
533
|
-
/******/ module.hot.active = false;
|
|
534
|
-
/******/
|
|
535
|
-
/******/ // remove module from cache
|
|
536
|
-
/******/ delete installedModules[moduleId];
|
|
537
|
-
/******/
|
|
538
|
-
/******/ // when disposing there is no need to call dispose handler
|
|
539
|
-
/******/ delete outdatedDependencies[moduleId];
|
|
540
|
-
/******/
|
|
541
|
-
/******/ // remove "parents" references from all children
|
|
542
|
-
/******/ for (j = 0; j < module.children.length; j++) {
|
|
543
|
-
/******/ var child = installedModules[module.children[j]];
|
|
544
|
-
/******/ if (!child) continue;
|
|
545
|
-
/******/ idx = child.parents.indexOf(moduleId);
|
|
546
|
-
/******/ if (idx >= 0) {
|
|
547
|
-
/******/ child.parents.splice(idx, 1);
|
|
548
|
-
/******/ }
|
|
549
|
-
/******/ }
|
|
550
|
-
/******/ }
|
|
551
|
-
/******/
|
|
552
|
-
/******/ // remove outdated dependency from module children
|
|
553
|
-
/******/ var dependency;
|
|
554
|
-
/******/ var moduleOutdatedDependencies;
|
|
555
|
-
/******/ for (moduleId in outdatedDependencies) {
|
|
556
|
-
/******/ if (
|
|
557
|
-
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
|
|
558
|
-
/******/ ) {
|
|
559
|
-
/******/ module = installedModules[moduleId];
|
|
560
|
-
/******/ if (module) {
|
|
561
|
-
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
|
|
562
|
-
/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
|
|
563
|
-
/******/ dependency = moduleOutdatedDependencies[j];
|
|
564
|
-
/******/ idx = module.children.indexOf(dependency);
|
|
565
|
-
/******/ if (idx >= 0) module.children.splice(idx, 1);
|
|
566
|
-
/******/ }
|
|
567
|
-
/******/ }
|
|
568
|
-
/******/ }
|
|
569
|
-
/******/ }
|
|
570
|
-
/******/
|
|
571
|
-
/******/ // Now in "apply" phase
|
|
572
|
-
/******/ hotSetStatus("apply");
|
|
573
|
-
/******/
|
|
574
|
-
/******/ hotCurrentHash = hotUpdateNewHash;
|
|
575
|
-
/******/
|
|
576
|
-
/******/ // insert new code
|
|
577
|
-
/******/ for (moduleId in appliedUpdate) {
|
|
578
|
-
/******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
|
|
579
|
-
/******/ modules[moduleId] = appliedUpdate[moduleId];
|
|
580
|
-
/******/ }
|
|
581
|
-
/******/ }
|
|
582
|
-
/******/
|
|
583
|
-
/******/ // call accept handlers
|
|
584
|
-
/******/ var error = null;
|
|
585
|
-
/******/ for (moduleId in outdatedDependencies) {
|
|
586
|
-
/******/ if (
|
|
587
|
-
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
|
|
588
|
-
/******/ ) {
|
|
589
|
-
/******/ module = installedModules[moduleId];
|
|
590
|
-
/******/ if (module) {
|
|
591
|
-
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
|
|
592
|
-
/******/ var callbacks = [];
|
|
593
|
-
/******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) {
|
|
594
|
-
/******/ dependency = moduleOutdatedDependencies[i];
|
|
595
|
-
/******/ cb = module.hot._acceptedDependencies[dependency];
|
|
596
|
-
/******/ if (cb) {
|
|
597
|
-
/******/ if (callbacks.indexOf(cb) !== -1) continue;
|
|
598
|
-
/******/ callbacks.push(cb);
|
|
599
|
-
/******/ }
|
|
600
|
-
/******/ }
|
|
601
|
-
/******/ for (i = 0; i < callbacks.length; i++) {
|
|
602
|
-
/******/ cb = callbacks[i];
|
|
603
|
-
/******/ try {
|
|
604
|
-
/******/ cb(moduleOutdatedDependencies);
|
|
605
|
-
/******/ } catch (err) {
|
|
606
|
-
/******/ if (options.onErrored) {
|
|
607
|
-
/******/ options.onErrored({
|
|
608
|
-
/******/ type: "accept-errored",
|
|
609
|
-
/******/ moduleId: moduleId,
|
|
610
|
-
/******/ dependencyId: moduleOutdatedDependencies[i],
|
|
611
|
-
/******/ error: err
|
|
612
|
-
/******/ });
|
|
613
|
-
/******/ }
|
|
614
|
-
/******/ if (!options.ignoreErrored) {
|
|
615
|
-
/******/ if (!error) error = err;
|
|
616
|
-
/******/ }
|
|
617
|
-
/******/ }
|
|
618
|
-
/******/ }
|
|
619
|
-
/******/ }
|
|
620
|
-
/******/ }
|
|
621
|
-
/******/ }
|
|
622
|
-
/******/
|
|
623
|
-
/******/ // Load self accepted modules
|
|
624
|
-
/******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
|
|
625
|
-
/******/ var item = outdatedSelfAcceptedModules[i];
|
|
626
|
-
/******/ moduleId = item.module;
|
|
627
|
-
/******/ hotCurrentParents = [moduleId];
|
|
628
|
-
/******/ try {
|
|
629
|
-
/******/ __webpack_require__(moduleId);
|
|
630
|
-
/******/ } catch (err) {
|
|
631
|
-
/******/ if (typeof item.errorHandler === "function") {
|
|
632
|
-
/******/ try {
|
|
633
|
-
/******/ item.errorHandler(err);
|
|
634
|
-
/******/ } catch (err2) {
|
|
635
|
-
/******/ if (options.onErrored) {
|
|
636
|
-
/******/ options.onErrored({
|
|
637
|
-
/******/ type: "self-accept-error-handler-errored",
|
|
638
|
-
/******/ moduleId: moduleId,
|
|
639
|
-
/******/ error: err2,
|
|
640
|
-
/******/ originalError: err
|
|
641
|
-
/******/ });
|
|
642
|
-
/******/ }
|
|
643
|
-
/******/ if (!options.ignoreErrored) {
|
|
644
|
-
/******/ if (!error) error = err2;
|
|
645
|
-
/******/ }
|
|
646
|
-
/******/ if (!error) error = err;
|
|
647
|
-
/******/ }
|
|
648
|
-
/******/ } else {
|
|
649
|
-
/******/ if (options.onErrored) {
|
|
650
|
-
/******/ options.onErrored({
|
|
651
|
-
/******/ type: "self-accept-errored",
|
|
652
|
-
/******/ moduleId: moduleId,
|
|
653
|
-
/******/ error: err
|
|
654
|
-
/******/ });
|
|
655
|
-
/******/ }
|
|
656
|
-
/******/ if (!options.ignoreErrored) {
|
|
657
|
-
/******/ if (!error) error = err;
|
|
658
|
-
/******/ }
|
|
659
|
-
/******/ }
|
|
660
|
-
/******/ }
|
|
661
|
-
/******/ }
|
|
662
|
-
/******/
|
|
663
|
-
/******/ // handle errors in accept handlers and self accepted module load
|
|
664
|
-
/******/ if (error) {
|
|
665
|
-
/******/ hotSetStatus("fail");
|
|
666
|
-
/******/ return Promise.reject(error);
|
|
667
|
-
/******/ }
|
|
668
|
-
/******/
|
|
669
|
-
/******/ hotSetStatus("idle");
|
|
670
|
-
/******/ return new Promise(function(resolve) {
|
|
671
|
-
/******/ resolve(outdatedModules);
|
|
672
|
-
/******/ });
|
|
673
|
-
/******/ }
|
|
674
|
-
/******/
|
|
10
|
+
})(global, () => {
|
|
11
|
+
return /******/ (() => { // webpackBootstrap
|
|
12
|
+
/******/ "use strict";
|
|
13
|
+
/******/ var __webpack_modules__ = ({
|
|
14
|
+
|
|
15
|
+
/***/ "chalk":
|
|
16
|
+
/***/ ((module) => {
|
|
17
|
+
|
|
18
|
+
module.exports = require("chalk");
|
|
19
|
+
|
|
20
|
+
/***/ }),
|
|
21
|
+
|
|
22
|
+
/***/ "dotenv":
|
|
23
|
+
/***/ ((module) => {
|
|
24
|
+
|
|
25
|
+
module.exports = require("dotenv");
|
|
26
|
+
|
|
27
|
+
/***/ }),
|
|
28
|
+
|
|
29
|
+
/***/ "minimist":
|
|
30
|
+
/***/ ((module) => {
|
|
31
|
+
|
|
32
|
+
module.exports = require("minimist");
|
|
33
|
+
|
|
34
|
+
/***/ })
|
|
35
|
+
|
|
36
|
+
/******/ });
|
|
37
|
+
/************************************************************************/
|
|
675
38
|
/******/ // The module cache
|
|
676
|
-
/******/ var
|
|
677
|
-
/******/
|
|
39
|
+
/******/ var __webpack_module_cache__ = {};
|
|
40
|
+
/******/
|
|
678
41
|
/******/ // The require function
|
|
679
42
|
/******/ function __webpack_require__(moduleId) {
|
|
680
|
-
/******/
|
|
681
43
|
/******/ // Check if module is in cache
|
|
682
|
-
/******/
|
|
683
|
-
/******/
|
|
44
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
45
|
+
/******/ if (cachedModule !== undefined) {
|
|
46
|
+
/******/ return cachedModule.exports;
|
|
684
47
|
/******/ }
|
|
685
48
|
/******/ // Create a new module (and put it into the cache)
|
|
686
|
-
/******/ var module =
|
|
687
|
-
/******/
|
|
688
|
-
/******/
|
|
689
|
-
/******/ exports: {}
|
|
690
|
-
/******/ hot: hotCreateModule(moduleId),
|
|
691
|
-
/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
|
|
692
|
-
/******/ children: []
|
|
49
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
50
|
+
/******/ // no module.id needed
|
|
51
|
+
/******/ // no module.loaded needed
|
|
52
|
+
/******/ exports: {}
|
|
693
53
|
/******/ };
|
|
694
|
-
/******/
|
|
54
|
+
/******/
|
|
695
55
|
/******/ // Execute the module function
|
|
696
|
-
/******/
|
|
697
|
-
/******/
|
|
698
|
-
/******/ // Flag the module as loaded
|
|
699
|
-
/******/ module.l = true;
|
|
700
|
-
/******/
|
|
56
|
+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
57
|
+
/******/
|
|
701
58
|
/******/ // Return the exports of the module
|
|
702
59
|
/******/ return module.exports;
|
|
703
60
|
/******/ }
|
|
704
|
-
/******/
|
|
705
|
-
/******/
|
|
706
|
-
/******/ // expose the modules object (__webpack_modules__)
|
|
707
|
-
/******/ __webpack_require__.m = modules;
|
|
708
|
-
/******/
|
|
709
|
-
/******/ // expose the module cache
|
|
710
|
-
/******/ __webpack_require__.c = installedModules;
|
|
711
|
-
/******/
|
|
712
|
-
/******/ // define getter function for harmony exports
|
|
713
|
-
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
714
|
-
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
715
|
-
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
716
|
-
/******/ }
|
|
717
|
-
/******/ };
|
|
718
|
-
/******/
|
|
719
|
-
/******/ // define __esModule on exports
|
|
720
|
-
/******/ __webpack_require__.r = function(exports) {
|
|
721
|
-
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
722
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
723
|
-
/******/ }
|
|
724
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
725
|
-
/******/ };
|
|
726
|
-
/******/
|
|
727
|
-
/******/ // create a fake namespace object
|
|
728
|
-
/******/ // mode & 1: value is a module id, require it
|
|
729
|
-
/******/ // mode & 2: merge all properties of value into the ns
|
|
730
|
-
/******/ // mode & 4: return value when already ns object
|
|
731
|
-
/******/ // mode & 8|1: behave like require
|
|
732
|
-
/******/ __webpack_require__.t = function(value, mode) {
|
|
733
|
-
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
734
|
-
/******/ if(mode & 8) return value;
|
|
735
|
-
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
736
|
-
/******/ var ns = Object.create(null);
|
|
737
|
-
/******/ __webpack_require__.r(ns);
|
|
738
|
-
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
739
|
-
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
740
|
-
/******/ return ns;
|
|
741
|
-
/******/ };
|
|
742
|
-
/******/
|
|
743
|
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
744
|
-
/******/ __webpack_require__.n = function(module) {
|
|
745
|
-
/******/ var getter = module && module.__esModule ?
|
|
746
|
-
/******/ function getDefault() { return module['default']; } :
|
|
747
|
-
/******/ function getModuleExports() { return module; };
|
|
748
|
-
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
749
|
-
/******/ return getter;
|
|
750
|
-
/******/ };
|
|
751
|
-
/******/
|
|
752
|
-
/******/ // Object.prototype.hasOwnProperty.call
|
|
753
|
-
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
754
|
-
/******/
|
|
755
|
-
/******/ // __webpack_public_path__
|
|
756
|
-
/******/ __webpack_require__.p = "";
|
|
757
|
-
/******/
|
|
758
|
-
/******/ // __webpack_hash__
|
|
759
|
-
/******/ __webpack_require__.h = function() { return hotCurrentHash; };
|
|
760
|
-
/******/
|
|
761
|
-
/******/
|
|
762
|
-
/******/ // Load entry module and return exports
|
|
763
|
-
/******/ return hotCreateRequire(0)(__webpack_require__.s = 0);
|
|
764
|
-
/******/ })
|
|
61
|
+
/******/
|
|
765
62
|
/************************************************************************/
|
|
766
|
-
/******/
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
63
|
+
/******/ /* webpack/runtime/define property getters */
|
|
64
|
+
/******/ (() => {
|
|
65
|
+
/******/ // define getter functions for harmony exports
|
|
66
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
67
|
+
/******/ for(var key in definition) {
|
|
68
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
69
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
70
|
+
/******/ }
|
|
71
|
+
/******/ }
|
|
72
|
+
/******/ };
|
|
73
|
+
/******/ })();
|
|
74
|
+
/******/
|
|
75
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
76
|
+
/******/ (() => {
|
|
77
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
78
|
+
/******/ })();
|
|
79
|
+
/******/
|
|
80
|
+
/******/ /* webpack/runtime/make namespace object */
|
|
81
|
+
/******/ (() => {
|
|
82
|
+
/******/ // define __esModule on exports
|
|
83
|
+
/******/ __webpack_require__.r = (exports) => {
|
|
84
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
85
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
86
|
+
/******/ }
|
|
87
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
88
|
+
/******/ };
|
|
89
|
+
/******/ })();
|
|
90
|
+
/******/
|
|
91
|
+
/************************************************************************/
|
|
92
|
+
var __webpack_exports__ = {};
|
|
93
|
+
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
|
94
|
+
(() => {
|
|
95
|
+
// ESM COMPAT FLAG
|
|
772
96
|
__webpack_require__.r(__webpack_exports__);
|
|
773
97
|
|
|
774
|
-
//
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
var external_child_process_ = __webpack_require__("child_process");
|
|
779
|
-
|
|
780
|
-
// EXTERNAL MODULE: external "readline"
|
|
781
|
-
var external_readline_ = __webpack_require__("readline");
|
|
782
|
-
|
|
783
|
-
// EXTERNAL MODULE: external "fs"
|
|
784
|
-
var external_fs_ = __webpack_require__("fs");
|
|
785
|
-
|
|
786
|
-
// EXTERNAL MODULE: external "path"
|
|
787
|
-
var external_path_ = __webpack_require__("path");
|
|
98
|
+
// EXPORTS
|
|
99
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
100
|
+
launch: () => (/* reexport */ launch)
|
|
101
|
+
});
|
|
788
102
|
|
|
789
|
-
|
|
103
|
+
;// CONCATENATED MODULE: external "tslib"
|
|
104
|
+
const external_tslib_namespaceObject = require("tslib");
|
|
105
|
+
;// CONCATENATED MODULE: external "child_process"
|
|
106
|
+
const external_child_process_namespaceObject = require("child_process");
|
|
107
|
+
;// CONCATENATED MODULE: external "readline"
|
|
108
|
+
const external_readline_namespaceObject = require("readline");
|
|
109
|
+
;// CONCATENATED MODULE: external "fs"
|
|
110
|
+
const external_fs_namespaceObject = require("fs");
|
|
111
|
+
;// CONCATENATED MODULE: external "path"
|
|
112
|
+
const external_path_namespaceObject = require("path");
|
|
113
|
+
;// CONCATENATED MODULE: ./src/terminal.ts
|
|
790
114
|
var terminal = {
|
|
791
115
|
log: function () {
|
|
792
116
|
var args = [];
|
|
793
117
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
794
118
|
args[_i] = arguments[_i];
|
|
795
119
|
}
|
|
796
|
-
process.stdout.write(args.reduce(function (acc, item) { return acc
|
|
120
|
+
process.stdout.write(args.reduce(function (acc, item) { return "".concat(acc, " ").concat(item); }) + "\n", "utf-8");
|
|
797
121
|
}
|
|
798
122
|
};
|
|
799
|
-
/* harmony default export */
|
|
123
|
+
/* harmony default export */ const src_terminal = (terminal);
|
|
800
124
|
|
|
801
|
-
|
|
125
|
+
;// CONCATENATED MODULE: ./src/launch-base.ts
|
|
802
126
|
|
|
803
127
|
/**
|
|
804
128
|
* Author : Nidin Vinayakan <01@01alchemist.com>
|
|
@@ -810,31 +134,31 @@ var chalk = __webpack_require__("chalk");
|
|
|
810
134
|
|
|
811
135
|
|
|
812
136
|
|
|
813
|
-
var cursorTo =
|
|
814
|
-
var spawn =
|
|
137
|
+
var cursorTo = external_readline_namespaceObject.cursorTo;
|
|
138
|
+
var spawn = external_child_process_namespaceObject.spawn;
|
|
815
139
|
var w = chalk.white, r = chalk.red, bgR = chalk.bgRed;
|
|
816
140
|
var defaultOptions = {
|
|
817
141
|
mode: "program",
|
|
818
142
|
stdio: "inherit",
|
|
819
|
-
exitProcessOnClose: false
|
|
143
|
+
exitProcessOnClose: false,
|
|
820
144
|
};
|
|
821
145
|
var baseDir = process.cwd();
|
|
822
|
-
var envPath = baseDir
|
|
823
|
-
if (!
|
|
824
|
-
envPath = baseDir
|
|
146
|
+
var envPath = "".concat(baseDir, "/env/").concat(process.env.USER, ".env");
|
|
147
|
+
if (!external_fs_namespaceObject.existsSync(envPath)) {
|
|
148
|
+
envPath = "".concat(baseDir, "/.env");
|
|
825
149
|
}
|
|
826
|
-
if (
|
|
827
|
-
src_terminal.log("Loading env vars from: "
|
|
828
|
-
__webpack_require__("dotenv").config({
|
|
829
|
-
path: envPath
|
|
150
|
+
if (external_fs_namespaceObject.existsSync(envPath)) {
|
|
151
|
+
src_terminal.log("Loading env vars from: ".concat(envPath));
|
|
152
|
+
(__webpack_require__("dotenv").config)({
|
|
153
|
+
path: envPath,
|
|
830
154
|
});
|
|
831
155
|
}
|
|
832
156
|
function mergeValue(value1, value2) {
|
|
833
157
|
if (Array.isArray(value1) && Array.isArray(value2)) {
|
|
834
|
-
return
|
|
158
|
+
return (0,external_tslib_namespaceObject.__spreadArray)((0,external_tslib_namespaceObject.__spreadArray)([], value1, true), value2, true);
|
|
835
159
|
}
|
|
836
160
|
else if (typeof value1 === "object" && typeof value2 === "object") {
|
|
837
|
-
return
|
|
161
|
+
return (0,external_tslib_namespaceObject.__assign)((0,external_tslib_namespaceObject.__assign)({}, value1), value2);
|
|
838
162
|
}
|
|
839
163
|
return value2;
|
|
840
164
|
}
|
|
@@ -851,7 +175,7 @@ function mergeOptions(name, defaultOption, option, cliOption) {
|
|
|
851
175
|
}
|
|
852
176
|
return {
|
|
853
177
|
name: name,
|
|
854
|
-
value: value
|
|
178
|
+
value: value,
|
|
855
179
|
};
|
|
856
180
|
}
|
|
857
181
|
function getOptions(_options, args) {
|
|
@@ -870,27 +194,27 @@ function getOptions(_options, args) {
|
|
|
870
194
|
}, {});
|
|
871
195
|
return flattenOptions;
|
|
872
196
|
}
|
|
873
|
-
|
|
197
|
+
var launcher = {
|
|
874
198
|
instances: [],
|
|
875
199
|
terminateAll: function (signal) {
|
|
876
|
-
|
|
877
|
-
src_terminal.log("Terminating ["
|
|
200
|
+
launcher.instances.forEach(function (_instance) {
|
|
201
|
+
src_terminal.log("Terminating [".concat(_instance.name, "] instance.pid: ").concat(_instance.pid));
|
|
878
202
|
_instance.kill(signal || "SIGTERM");
|
|
879
203
|
});
|
|
880
|
-
}
|
|
204
|
+
},
|
|
881
205
|
};
|
|
882
206
|
function launch(_options) {
|
|
883
207
|
if (_options === void 0) { _options = {}; }
|
|
884
|
-
return
|
|
208
|
+
return (0,external_tslib_namespaceObject.__awaiter)(this, void 0, void 0, function () {
|
|
885
209
|
function exit(signal) {
|
|
886
210
|
if (instance) {
|
|
887
211
|
cursorTo(process.stdout, 0);
|
|
888
|
-
src_terminal.log("Killing ["
|
|
212
|
+
src_terminal.log("Killing [".concat(instance.name, "] instance.pid: ").concat(instance.pid));
|
|
889
213
|
instance.kill(signal || "SIGTERM");
|
|
890
214
|
}
|
|
891
215
|
}
|
|
892
216
|
var args, options, env, cmds, cwd, isCli, title, message, message, stdio, shell, instance;
|
|
893
|
-
return
|
|
217
|
+
return (0,external_tslib_namespaceObject.__generator)(this, function (_a) {
|
|
894
218
|
args = _options.mode === "cli" ? process.argv.slice(2) : [];
|
|
895
219
|
options = getOptions(_options, args);
|
|
896
220
|
if (options.env) {
|
|
@@ -906,18 +230,18 @@ function launch(_options) {
|
|
|
906
230
|
cwd = baseDir;
|
|
907
231
|
if (options.cwd) {
|
|
908
232
|
cwd =
|
|
909
|
-
options.cwd[0] === "/" ? options.cwd :
|
|
233
|
+
options.cwd[0] === "/" ? options.cwd : external_path_namespaceObject.resolve(baseDir, options.cwd);
|
|
910
234
|
}
|
|
911
235
|
if (!cmds || cmds.length === 0) {
|
|
912
236
|
isCli = options.mode === "cli";
|
|
913
237
|
title = "Oops 😬, Did you forgot to pass";
|
|
914
238
|
if (isCli) {
|
|
915
|
-
message = r("\n "
|
|
239
|
+
message = r("\n ".concat(title, " ").concat(bgR(w(" program ")), "?. Please tell me, which program you want to launch!\n")) + "\n Example: launch echo \"Hello World\"\n";
|
|
916
240
|
src_terminal.log(message);
|
|
917
241
|
process.exit(1);
|
|
918
242
|
}
|
|
919
243
|
else {
|
|
920
|
-
message = r(title
|
|
244
|
+
message = r("".concat(title, " option ").concat(bgR(w(" cmds ")), "?. Please tell me, which program you want to launch!\n")) + "\n Example: launch({cmds:[\"echo\", \"Hello World\"]});\n";
|
|
921
245
|
throw new Error(message);
|
|
922
246
|
}
|
|
923
247
|
}
|
|
@@ -931,10 +255,10 @@ function launch(_options) {
|
|
|
931
255
|
instance = spawn(cmds[0], cmds.slice(1), {
|
|
932
256
|
stdio: stdio,
|
|
933
257
|
cwd: cwd,
|
|
934
|
-
shell: shell
|
|
258
|
+
shell: shell,
|
|
935
259
|
});
|
|
936
260
|
instance.name = cmds[0];
|
|
937
|
-
|
|
261
|
+
launcher.instances.push(instance);
|
|
938
262
|
process.on("SIGINT", exit);
|
|
939
263
|
return [2 /*return*/, new Promise(function (resolve, reject) {
|
|
940
264
|
var _this = this;
|
|
@@ -955,14 +279,14 @@ function launch(_options) {
|
|
|
955
279
|
});
|
|
956
280
|
}
|
|
957
281
|
}
|
|
958
|
-
instance.on("close", function (code) { return
|
|
959
|
-
return
|
|
282
|
+
instance.on("close", function (code) { return (0,external_tslib_namespaceObject.__awaiter)(_this, void 0, void 0, function () {
|
|
283
|
+
return (0,external_tslib_namespaceObject.__generator)(this, function (_a) {
|
|
960
284
|
if (options.exitProcessOnClose) {
|
|
961
|
-
src_terminal.log("["
|
|
962
|
-
process.exit(code);
|
|
285
|
+
src_terminal.log("[".concat(instance.name, "] exit code:").concat(code));
|
|
286
|
+
process.exit(code ? code : undefined);
|
|
963
287
|
}
|
|
964
288
|
else {
|
|
965
|
-
src_terminal.log("["
|
|
289
|
+
src_terminal.log("[".concat(instance.name, "] exit code:").concat(code));
|
|
966
290
|
code === 0 ? resolve(output) : reject(lastErrorData);
|
|
967
291
|
}
|
|
968
292
|
return [2 /*return*/];
|
|
@@ -972,79 +296,15 @@ function launch(_options) {
|
|
|
972
296
|
});
|
|
973
297
|
});
|
|
974
298
|
}
|
|
975
|
-
/* harmony default export */
|
|
976
|
-
|
|
977
|
-
// CONCATENATED MODULE: ./src/index.ts
|
|
978
|
-
/* concated harmony reexport launch */__webpack_require__.d(__webpack_exports__, "launch", function() { return launch; });
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
/***/ }),
|
|
983
|
-
|
|
984
|
-
/***/ 0:
|
|
985
|
-
/***/ (function(module, exports, __webpack_require__) {
|
|
986
|
-
|
|
987
|
-
module.exports = __webpack_require__("./src/index.ts");
|
|
299
|
+
/* harmony default export */ const launch_base = ((/* unused pure expression or super */ null && (launch)));
|
|
988
300
|
|
|
301
|
+
;// CONCATENATED MODULE: ./src/index.ts
|
|
989
302
|
|
|
990
|
-
/***/ }),
|
|
991
|
-
|
|
992
|
-
/***/ "chalk":
|
|
993
|
-
/***/ (function(module, exports) {
|
|
994
|
-
|
|
995
|
-
module.exports = require("chalk");
|
|
996
|
-
|
|
997
|
-
/***/ }),
|
|
998
|
-
|
|
999
|
-
/***/ "child_process":
|
|
1000
|
-
/***/ (function(module, exports) {
|
|
1001
|
-
|
|
1002
|
-
module.exports = require("child_process");
|
|
1003
|
-
|
|
1004
|
-
/***/ }),
|
|
1005
|
-
|
|
1006
|
-
/***/ "dotenv":
|
|
1007
|
-
/***/ (function(module, exports) {
|
|
1008
|
-
|
|
1009
|
-
module.exports = require("dotenv");
|
|
1010
|
-
|
|
1011
|
-
/***/ }),
|
|
1012
|
-
|
|
1013
|
-
/***/ "fs":
|
|
1014
|
-
/***/ (function(module, exports) {
|
|
1015
|
-
|
|
1016
|
-
module.exports = require("fs");
|
|
1017
303
|
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
/***/ "minimist":
|
|
1021
|
-
/***/ (function(module, exports) {
|
|
1022
|
-
|
|
1023
|
-
module.exports = require("minimist");
|
|
1024
|
-
|
|
1025
|
-
/***/ }),
|
|
1026
|
-
|
|
1027
|
-
/***/ "path":
|
|
1028
|
-
/***/ (function(module, exports) {
|
|
1029
|
-
|
|
1030
|
-
module.exports = require("path");
|
|
1031
|
-
|
|
1032
|
-
/***/ }),
|
|
1033
|
-
|
|
1034
|
-
/***/ "readline":
|
|
1035
|
-
/***/ (function(module, exports) {
|
|
1036
|
-
|
|
1037
|
-
module.exports = require("readline");
|
|
1038
|
-
|
|
1039
|
-
/***/ }),
|
|
1040
|
-
|
|
1041
|
-
/***/ "tslib":
|
|
1042
|
-
/***/ (function(module, exports) {
|
|
1043
|
-
|
|
1044
|
-
module.exports = require("tslib");
|
|
1045
|
-
|
|
1046
|
-
/***/ })
|
|
304
|
+
})();
|
|
1047
305
|
|
|
1048
|
-
/******/
|
|
306
|
+
/******/ return __webpack_exports__;
|
|
307
|
+
/******/ })()
|
|
308
|
+
;
|
|
1049
309
|
});
|
|
1050
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL2NpcmNsZWNpL3JlcG8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiL2hvbWUvY2lyY2xlY2kvcmVwby93ZWJwYWNrL2Jvb3RzdHJhcCIsIi9ob21lL2NpcmNsZWNpL3JlcG8vc3JjL3Rlcm1pbmFsLnRzIiwiL2hvbWUvY2lyY2xlY2kvcmVwby9zcmMvbGF1bmNoLWJhc2UudHMiLCIvaG9tZS9jaXJjbGVjaS9yZXBvL3NyYy9pbmRleC50cyIsIi9ob21lL2NpcmNsZWNpL3JlcG8vZXh0ZXJuYWwlMjAlMjJjaGFsayUyMiIsIi9ob21lL2NpcmNsZWNpL3JlcG8vZXh0ZXJuYWwlMjAlMjJjaGlsZF9wcm9jZXNzJTIyIiwiL2hvbWUvY2lyY2xlY2kvcmVwby9leHRlcm5hbCUyMCUyMmRvdGVudiUyMiIsIi9ob21lL2NpcmNsZWNpL3JlcG8vZXh0ZXJuYWwlMjAlMjJmcyUyMiIsIi9ob21lL2NpcmNsZWNpL3JlcG8vZXh0ZXJuYWwlMjAlMjJtaW5pbWlzdCUyMiIsIi9ob21lL2NpcmNsZWNpL3JlcG8vZXh0ZXJuYWwlMjAlMjJwYXRoJTIyIiwiL2hvbWUvY2lyY2xlY2kvcmVwby9leHRlcm5hbCUyMCUyMnJlYWRsaW5lJTIyIiwiL2hvbWUvY2lyY2xlY2kvcmVwby9leHRlcm5hbCUyMCUyMnRzbGliJTIyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO1FDVkE7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQUk7UUFDSjtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLE1BQU07UUFDTjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxNQUFNO1FBQ047UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7O1FBRUw7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3QjtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxxQkFBcUIsZ0JBQWdCO1FBQ3JDO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0EscUJBQXFCLGdCQUFnQjtRQUNyQztRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQSxLQUFLOztRQUVMO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7UUFDQTtRQUNBLEtBQUs7O1FBRUw7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBLGtCQUFrQiw4QkFBOEI7UUFDaEQ7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBSTtRQUNKOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsSUFBSTtRQUNKO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBLE9BQU87UUFDUDtRQUNBO1FBQ0E7UUFDQTtRQUNBLElBQUk7UUFDSjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLEtBQUs7UUFDTDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0Esb0JBQW9CLDJCQUEyQjtRQUMvQztRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsT0FBTztRQUNQO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxtQkFBbUIsY0FBYztRQUNqQztRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsZ0JBQWdCLEtBQUs7UUFDckI7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxnQkFBZ0IsWUFBWTtRQUM1QjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBLGNBQWMsNEJBQTRCO1FBQzFDO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsTUFBTTtRQUNOO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBSTs7UUFFSjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7O1FBRUE7UUFDQTtRQUNBLGVBQWUsNEJBQTRCO1FBQzNDO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0EsZUFBZSw0QkFBNEI7UUFDM0M7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLGlCQUFpQix1Q0FBdUM7UUFDeEQ7UUFDQTtRQUNBO1FB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Ozs7QUNBQSxpQzs7Ozs7OztBQ0FBLHFDOzs7Ozs7O0FDQUEsa0MiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJpbmRleFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJpbmRleFwiXSA9IGZhY3RvcnkoKTtcbn0pKGdsb2JhbCwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3REb3dubG9hZFVwZGF0ZUNodW5rKGNodW5rSWQpIHtcbiBcdFx0dmFyIGNodW5rID0gcmVxdWlyZShcIi4vXCIgKyBcIlwiICsgY2h1bmtJZCArIFwiLlwiICsgaG90Q3VycmVudEhhc2ggKyBcIi5ob3QtdXBkYXRlLmpzXCIpO1xuIFx0XHRob3RBZGRVcGRhdGVDaHVuayhjaHVuay5pZCwgY2h1bmsubW9kdWxlcyk7XG4gXHR9XG5cbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90RG93bmxvYWRNYW5pZmVzdCgpIHtcbiBcdFx0dHJ5IHtcbiBcdFx0XHR2YXIgdXBkYXRlID0gcmVxdWlyZShcIi4vXCIgKyBcIlwiICsgaG90Q3VycmVudEhhc2ggKyBcIi5ob3QtdXBkYXRlLmpzb25cIik7XG4gXHRcdH0gY2F0Y2ggKGUpIHtcbiBcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh1cGRhdGUpO1xuIFx0fVxuXG4gXHQvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0ZnVuY3Rpb24gaG90RGlzcG9zZUNodW5rKGNodW5rSWQpIHtcbiBcdFx0ZGVsZXRlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXTtcbiBcdH1cblxuIFx0dmFyIGhvdEFwcGx5T25VcGRhdGUgPSB0cnVlO1xuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHR2YXIgaG90Q3VycmVudEhhc2ggPSBcIjc2MDU1ZDQ4MGJjNDhhOGY0YzFmXCI7XG4gXHR2YXIgaG90UmVxdWVzdFRpbWVvdXQgPSAxMDAwMDtcbiBcdHZhciBob3RDdXJyZW50TW9kdWxlRGF0YSA9IHt9O1xuIFx0dmFyIGhvdEN1cnJlbnRDaGlsZE1vZHVsZTtcbiBcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuIFx0dmFyIGhvdEN1cnJlbnRQYXJlbnRzID0gW107XG4gXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiBcdHZhciBob3RDdXJyZW50UGFyZW50c1RlbXAgPSBbXTtcblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RDcmVhdGVSZXF1aXJlKG1vZHVsZUlkKSB7XG4gXHRcdHZhciBtZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRpZiAoIW1lKSByZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXztcbiBcdFx0dmFyIGZuID0gZnVuY3Rpb24ocmVxdWVzdCkge1xuIFx0XHRcdGlmIChtZS5ob3QuYWN0aXZlKSB7XG4gXHRcdFx0XHRpZiAoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XSkge1xuIFx0XHRcdFx0XHRpZiAoaW5zdGFsbGVkTW9kdWxlc1tyZXF1ZXN0XS5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpID09PSAtMSkge1xuIFx0XHRcdFx0XHRcdGluc3RhbGxlZE1vZHVsZXNbcmVxdWVzdF0ucGFyZW50cy5wdXNoKG1vZHVsZUlkKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xuIFx0XHRcdFx0XHRob3RDdXJyZW50Q2hpbGRNb2R1bGUgPSByZXF1ZXN0O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKG1lLmNoaWxkcmVuLmluZGV4T2YocmVxdWVzdCkgPT09IC0xKSB7XG4gXHRcdFx0XHRcdG1lLmNoaWxkcmVuLnB1c2gocmVxdWVzdCk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdGNvbnNvbGUud2FybihcbiBcdFx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgK1xuIFx0XHRcdFx0XHRcdHJlcXVlc3QgK1xuIFx0XHRcdFx0XHRcdFwiKSBmcm9tIGRpc3Bvc2VkIG1vZHVsZSBcIiArXG4gXHRcdFx0XHRcdFx0bW9kdWxlSWRcbiBcdFx0XHRcdCk7XG4gXHRcdFx0XHRob3RDdXJyZW50UGFyZW50cyA9IFtdO1xuIFx0XHRcdH1cbiBcdFx0XHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhyZXF1ZXN0KTtcbiBcdFx0fTtcbiBcdFx0dmFyIE9iamVjdEZhY3RvcnkgPSBmdW5jdGlvbiBPYmplY3RGYWN0b3J5KG5hbWUpIHtcbiBcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG4gXHRcdFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fW25hbWVdO1xuIFx0XHRcdFx0fSxcbiBcdFx0XHRcdHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiBcdFx0XHRcdFx0X193ZWJwYWNrX3JlcXVpcmVfX1tuYW1lXSA9IHZhbHVlO1xuIFx0XHRcdFx0fVxuIFx0XHRcdH07XG4gXHRcdH07XG4gXHRcdGZvciAodmFyIG5hbWUgaW4gX193ZWJwYWNrX3JlcXVpcmVfXykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfX3dlYnBhY2tfcmVxdWlyZV9fLCBuYW1lKSAmJlxuIFx0XHRcdFx0bmFtZSAhPT0gXCJlXCIgJiZcbiBcdFx0XHRcdG5hbWUgIT09IFwidFwiXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sIG5hbWUsIE9iamVjdEZhY3RvcnkobmFtZSkpO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRmbi5lID0gZnVuY3Rpb24oY2h1bmtJZCkge1xuIFx0XHRcdGlmIChob3RTdGF0dXMgPT09IFwicmVhZHlcIikgaG90U2V0U3RhdHVzKFwicHJlcGFyZVwiKTtcbiBcdFx0XHRob3RDaHVua3NMb2FkaW5nKys7XG4gXHRcdFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18uZShjaHVua0lkKS50aGVuKGZpbmlzaENodW5rTG9hZGluZywgZnVuY3Rpb24oZXJyKSB7XG4gXHRcdFx0XHRmaW5pc2hDaHVua0xvYWRpbmcoKTtcbiBcdFx0XHRcdHRocm93IGVycjtcbiBcdFx0XHR9KTtcblxuIFx0XHRcdGZ1bmN0aW9uIGZpbmlzaENodW5rTG9hZGluZygpIHtcbiBcdFx0XHRcdGhvdENodW5rc0xvYWRpbmctLTtcbiBcdFx0XHRcdGlmIChob3RTdGF0dXMgPT09IFwicHJlcGFyZVwiKSB7XG4gXHRcdFx0XHRcdGlmICghaG90V2FpdGluZ0ZpbGVzTWFwW2NodW5rSWRdKSB7XG4gXHRcdFx0XHRcdFx0aG90RW5zdXJlVXBkYXRlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0aWYgKGhvdENodW5rc0xvYWRpbmcgPT09IDAgJiYgaG90V2FpdGluZ0ZpbGVzID09PSAwKSB7XG4gXHRcdFx0XHRcdFx0aG90VXBkYXRlRG93bmxvYWRlZCgpO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9O1xuIFx0XHRmbi50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0XHRpZiAobW9kZSAmIDEpIHZhbHVlID0gZm4odmFsdWUpO1xuIFx0XHRcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fLnQodmFsdWUsIG1vZGUgJiB+MSk7XG4gXHRcdH07XG4gXHRcdHJldHVybiBmbjtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RDcmVhdGVNb2R1bGUobW9kdWxlSWQpIHtcbiBcdFx0dmFyIGhvdCA9IHtcbiBcdFx0XHQvLyBwcml2YXRlIHN0dWZmXG4gXHRcdFx0X2FjY2VwdGVkRGVwZW5kZW5jaWVzOiB7fSxcbiBcdFx0XHRfZGVjbGluZWREZXBlbmRlbmNpZXM6IHt9LFxuIFx0XHRcdF9zZWxmQWNjZXB0ZWQ6IGZhbHNlLFxuIFx0XHRcdF9zZWxmRGVjbGluZWQ6IGZhbHNlLFxuIFx0XHRcdF9kaXNwb3NlSGFuZGxlcnM6IFtdLFxuIFx0XHRcdF9tYWluOiBob3RDdXJyZW50Q2hpbGRNb2R1bGUgIT09IG1vZHVsZUlkLFxuXG4gXHRcdFx0Ly8gTW9kdWxlIEFQSVxuIFx0XHRcdGFjdGl2ZTogdHJ1ZSxcbiBcdFx0XHRhY2NlcHQ6IGZ1bmN0aW9uKGRlcCwgY2FsbGJhY2spIHtcbiBcdFx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmQWNjZXB0ZWQgPSB0cnVlO1xuIFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJmdW5jdGlvblwiKSBob3QuX3NlbGZBY2NlcHRlZCA9IGRlcDtcbiBcdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBkZXAgPT09IFwib2JqZWN0XCIpXG4gXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwLmxlbmd0aDsgaSsrKVxuIFx0XHRcdFx0XHRcdGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwW2ldXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gXHRcdFx0XHRlbHNlIGhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbZGVwXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307XG4gXHRcdFx0fSxcbiBcdFx0XHRkZWNsaW5lOiBmdW5jdGlvbihkZXApIHtcbiBcdFx0XHRcdGlmIChkZXAgPT09IHVuZGVmaW5lZCkgaG90Ll9zZWxmRGVjbGluZWQgPSB0cnVlO1xuIFx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIGRlcCA9PT0gXCJvYmplY3RcIilcbiBcdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXAubGVuZ3RoOyBpKyspXG4gXHRcdFx0XHRcdFx0aG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBbaV1dID0gdHJ1ZTtcbiBcdFx0XHRcdGVsc2UgaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1tkZXBdID0gdHJ1ZTtcbiBcdFx0XHR9LFxuIFx0XHRcdGRpc3Bvc2U6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gXHRcdFx0XHRob3QuX2Rpc3Bvc2VIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTtcbiBcdFx0XHR9LFxuIFx0XHRcdGFkZERpc3Bvc2VIYW5kbGVyOiBmdW5jdGlvbihjYWxsYmFjaykge1xuIFx0XHRcdFx0aG90Ll9kaXNwb3NlSGFuZGxlcnMucHVzaChjYWxsYmFjayk7XG4gXHRcdFx0fSxcbiBcdFx0XHRyZW1vdmVEaXNwb3NlSGFuZGxlcjogZnVuY3Rpb24oY2FsbGJhY2spIHtcbiBcdFx0XHRcdHZhciBpZHggPSBob3QuX2Rpc3Bvc2VIYW5kbGVycy5pbmRleE9mKGNhbGxiYWNrKTtcbiBcdFx0XHRcdGlmIChpZHggPj0gMCkgaG90Ll9kaXNwb3NlSGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0fSxcblxuIFx0XHRcdC8vIE1hbmFnZW1lbnQgQVBJXG4gXHRcdFx0Y2hlY2s6IGhvdENoZWNrLFxuIFx0XHRcdGFwcGx5OiBob3RBcHBseSxcbiBcdFx0XHRzdGF0dXM6IGZ1bmN0aW9uKGwpIHtcbiBcdFx0XHRcdGlmICghbCkgcmV0dXJuIGhvdFN0YXR1cztcbiBcdFx0XHRcdGhvdFN0YXR1c0hhbmRsZXJzLnB1c2gobCk7XG4gXHRcdFx0fSxcbiBcdFx0XHRhZGRTdGF0dXNIYW5kbGVyOiBmdW5jdGlvbihsKSB7XG4gXHRcdFx0XHRob3RTdGF0dXNIYW5kbGVycy5wdXNoKGwpO1xuIFx0XHRcdH0sXG4gXHRcdFx0cmVtb3ZlU3RhdHVzSGFuZGxlcjogZnVuY3Rpb24obCkge1xuIFx0XHRcdFx0dmFyIGlkeCA9IGhvdFN0YXR1c0hhbmRsZXJzLmluZGV4T2YobCk7XG4gXHRcdFx0XHRpZiAoaWR4ID49IDApIGhvdFN0YXR1c0hhbmRsZXJzLnNwbGljZShpZHgsIDEpO1xuIFx0XHRcdH0sXG5cbiBcdFx0XHQvL2luaGVyaXQgZnJvbSBwcmV2aW91cyBkaXNwb3NlIGNhbGxcbiBcdFx0XHRkYXRhOiBob3RDdXJyZW50TW9kdWxlRGF0YVttb2R1bGVJZF1cbiBcdFx0fTtcbiBcdFx0aG90Q3VycmVudENoaWxkTW9kdWxlID0gdW5kZWZpbmVkO1xuIFx0XHRyZXR1cm4gaG90O1xuIFx0fVxuXG4gXHR2YXIgaG90U3RhdHVzSGFuZGxlcnMgPSBbXTtcbiBcdHZhciBob3RTdGF0dXMgPSBcImlkbGVcIjtcblxuIFx0ZnVuY3Rpb24gaG90U2V0U3RhdHVzKG5ld1N0YXR1cykge1xuIFx0XHRob3RTdGF0dXMgPSBuZXdTdGF0dXM7XG4gXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaG90U3RhdHVzSGFuZGxlcnMubGVuZ3RoOyBpKyspXG4gXHRcdFx0aG90U3RhdHVzSGFuZGxlcnNbaV0uY2FsbChudWxsLCBuZXdTdGF0dXMpO1xuIFx0fVxuXG4gXHQvLyB3aGlsZSBkb3dubG9hZGluZ1xuIFx0dmFyIGhvdFdhaXRpbmdGaWxlcyA9IDA7XG4gXHR2YXIgaG90Q2h1bmtzTG9hZGluZyA9IDA7XG4gXHR2YXIgaG90V2FpdGluZ0ZpbGVzTWFwID0ge307XG4gXHR2YXIgaG90UmVxdWVzdGVkRmlsZXNNYXAgPSB7fTtcbiBcdHZhciBob3RBdmFpbGFibGVGaWxlc01hcCA9IHt9O1xuIFx0dmFyIGhvdERlZmVycmVkO1xuXG4gXHQvLyBUaGUgdXBkYXRlIGluZm9cbiBcdHZhciBob3RVcGRhdGUsIGhvdFVwZGF0ZU5ld0hhc2g7XG5cbiBcdGZ1bmN0aW9uIHRvTW9kdWxlSWQoaWQpIHtcbiBcdFx0dmFyIGlzTnVtYmVyID0gK2lkICsgXCJcIiA9PT0gaWQ7XG4gXHRcdHJldHVybiBpc051bWJlciA/ICtpZCA6IGlkO1xuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RDaGVjayhhcHBseSkge1xuIFx0XHRpZiAoaG90U3RhdHVzICE9PSBcImlkbGVcIikge1xuIFx0XHRcdHRocm93IG5ldyBFcnJvcihcImNoZWNrKCkgaXMgb25seSBhbGxvd2VkIGluIGlkbGUgc3RhdHVzXCIpO1xuIFx0XHR9XG4gXHRcdGhvdEFwcGx5T25VcGRhdGUgPSBhcHBseTtcbiBcdFx0aG90U2V0U3RhdHVzKFwiY2hlY2tcIik7XG4gXHRcdHJldHVybiBob3REb3dubG9hZE1hbmlmZXN0KGhvdFJlcXVlc3RUaW1lb3V0KS50aGVuKGZ1bmN0aW9uKHVwZGF0ZSkge1xuIFx0XHRcdGlmICghdXBkYXRlKSB7XG4gXHRcdFx0XHRob3RTZXRTdGF0dXMoXCJpZGxlXCIpO1xuIFx0XHRcdFx0cmV0dXJuIG51bGw7XG4gXHRcdFx0fVxuIFx0XHRcdGhvdFJlcXVlc3RlZEZpbGVzTWFwID0ge307XG4gXHRcdFx0aG90V2FpdGluZ0ZpbGVzTWFwID0ge307XG4gXHRcdFx0aG90QXZhaWxhYmxlRmlsZXNNYXAgPSB1cGRhdGUuYztcbiBcdFx0XHRob3RVcGRhdGVOZXdIYXNoID0gdXBkYXRlLmg7XG5cbiBcdFx0XHRob3RTZXRTdGF0dXMoXCJwcmVwYXJlXCIpO1xuIFx0XHRcdHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gXHRcdFx0XHRob3REZWZlcnJlZCA9IHtcbiBcdFx0XHRcdFx0cmVzb2x2ZTogcmVzb2x2ZSxcbiBcdFx0XHRcdFx0cmVqZWN0OiByZWplY3RcbiBcdFx0XHRcdH07XG4gXHRcdFx0fSk7XG4gXHRcdFx0aG90VXBkYXRlID0ge307XG4gXHRcdFx0dmFyIGNodW5rSWQgPSAwO1xuIFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb25lLWJsb2Nrc1xuIFx0XHRcdHtcbiBcdFx0XHRcdC8qZ2xvYmFscyBjaHVua0lkICovXG4gXHRcdFx0XHRob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKTtcbiBcdFx0XHR9XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0aG90U3RhdHVzID09PSBcInByZXBhcmVcIiAmJlxuIFx0XHRcdFx0aG90Q2h1bmtzTG9hZGluZyA9PT0gMCAmJlxuIFx0XHRcdFx0aG90V2FpdGluZ0ZpbGVzID09PSAwXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRob3RVcGRhdGVEb3dubG9hZGVkKCk7XG4gXHRcdFx0fVxuIFx0XHRcdHJldHVybiBwcm9taXNlO1xuIFx0XHR9KTtcbiBcdH1cblxuIFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gXHRmdW5jdGlvbiBob3RBZGRVcGRhdGVDaHVuayhjaHVua0lkLCBtb3JlTW9kdWxlcykge1xuIFx0XHRpZiAoIWhvdEF2YWlsYWJsZUZpbGVzTWFwW2NodW5rSWRdIHx8ICFob3RSZXF1ZXN0ZWRGaWxlc01hcFtjaHVua0lkXSlcbiBcdFx0XHRyZXR1cm47XG4gXHRcdGhvdFJlcXVlc3RlZEZpbGVzTWFwW2NodW5rSWRdID0gZmFsc2U7XG4gXHRcdGZvciAodmFyIG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG4gXHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG4gXHRcdFx0XHRob3RVcGRhdGVbbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRpZiAoLS1ob3RXYWl0aW5nRmlsZXMgPT09IDAgJiYgaG90Q2h1bmtzTG9hZGluZyA9PT0gMCkge1xuIFx0XHRcdGhvdFVwZGF0ZURvd25sb2FkZWQoKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RFbnN1cmVVcGRhdGVDaHVuayhjaHVua0lkKSB7XG4gXHRcdGlmICghaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0pIHtcbiBcdFx0XHRob3RXYWl0aW5nRmlsZXNNYXBbY2h1bmtJZF0gPSB0cnVlO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGhvdFJlcXVlc3RlZEZpbGVzTWFwW2NodW5rSWRdID0gdHJ1ZTtcbiBcdFx0XHRob3RXYWl0aW5nRmlsZXMrKztcbiBcdFx0XHRob3REb3dubG9hZFVwZGF0ZUNodW5rKGNodW5rSWQpO1xuIFx0XHR9XG4gXHR9XG5cbiBcdGZ1bmN0aW9uIGhvdFVwZGF0ZURvd25sb2FkZWQoKSB7XG4gXHRcdGhvdFNldFN0YXR1cyhcInJlYWR5XCIpO1xuIFx0XHR2YXIgZGVmZXJyZWQgPSBob3REZWZlcnJlZDtcbiBcdFx0aG90RGVmZXJyZWQgPSBudWxsO1xuIFx0XHRpZiAoIWRlZmVycmVkKSByZXR1cm47XG4gXHRcdGlmIChob3RBcHBseU9uVXBkYXRlKSB7XG4gXHRcdFx0Ly8gV3JhcCBkZWZlcnJlZCBvYmplY3QgaW4gUHJvbWlzZSB0byBtYXJrIGl0IGFzIGEgd2VsbC1oYW5kbGVkIFByb21pc2UgdG9cbiBcdFx0XHQvLyBhdm9pZCB0cmlnZ2VyaW5nIHVuY2F1Z2h0IGV4Y2VwdGlvbiB3YXJuaW5nIGluIENocm9tZS5cbiBcdFx0XHQvLyBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDY1NjY2XG4gXHRcdFx0UHJvbWlzZS5yZXNvbHZlKClcbiBcdFx0XHRcdC50aGVuKGZ1bmN0aW9uKCkge1xuIFx0XHRcdFx0XHRyZXR1cm4gaG90QXBwbHkoaG90QXBwbHlPblVwZGF0ZSk7XG4gXHRcdFx0XHR9KVxuIFx0XHRcdFx0LnRoZW4oXG4gXHRcdFx0XHRcdGZ1bmN0aW9uKHJlc3VsdCkge1xuIFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmUocmVzdWx0KTtcbiBcdFx0XHRcdFx0fSxcbiBcdFx0XHRcdFx0ZnVuY3Rpb24oZXJyKSB7XG4gXHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0KGVycik7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdCk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFtdO1xuIFx0XHRcdGZvciAodmFyIGlkIGluIGhvdFVwZGF0ZSkge1xuIFx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChob3RVcGRhdGUsIGlkKSkge1xuIFx0XHRcdFx0XHRvdXRkYXRlZE1vZHVsZXMucHVzaCh0b01vZHVsZUlkKGlkKSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHRcdGRlZmVycmVkLnJlc29sdmUob3V0ZGF0ZWRNb2R1bGVzKTtcbiBcdFx0fVxuIFx0fVxuXG4gXHRmdW5jdGlvbiBob3RBcHBseShvcHRpb25zKSB7XG4gXHRcdGlmIChob3RTdGF0dXMgIT09IFwicmVhZHlcIilcbiBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJhcHBseSgpIGlzIG9ubHkgYWxsb3dlZCBpbiByZWFkeSBzdGF0dXNcIik7XG4gXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gXHRcdHZhciBjYjtcbiBcdFx0dmFyIGk7XG4gXHRcdHZhciBqO1xuIFx0XHR2YXIgbW9kdWxlO1xuIFx0XHR2YXIgbW9kdWxlSWQ7XG5cbiBcdFx0ZnVuY3Rpb24gZ2V0QWZmZWN0ZWRTdHVmZih1cGRhdGVNb2R1bGVJZCkge1xuIFx0XHRcdHZhciBvdXRkYXRlZE1vZHVsZXMgPSBbdXBkYXRlTW9kdWxlSWRdO1xuIFx0XHRcdHZhciBvdXRkYXRlZERlcGVuZGVuY2llcyA9IHt9O1xuXG4gXHRcdFx0dmFyIHF1ZXVlID0gb3V0ZGF0ZWRNb2R1bGVzLm1hcChmdW5jdGlvbihpZCkge1xuIFx0XHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdFx0Y2hhaW46IFtpZF0sXG4gXHRcdFx0XHRcdGlkOiBpZFxuIFx0XHRcdFx0fTtcbiBcdFx0XHR9KTtcbiBcdFx0XHR3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuIFx0XHRcdFx0dmFyIHF1ZXVlSXRlbSA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdFx0dmFyIG1vZHVsZUlkID0gcXVldWVJdGVtLmlkO1xuIFx0XHRcdFx0dmFyIGNoYWluID0gcXVldWVJdGVtLmNoYWluO1xuIFx0XHRcdFx0bW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRpZiAoIW1vZHVsZSB8fCBtb2R1bGUuaG90Ll9zZWxmQWNjZXB0ZWQpIGNvbnRpbnVlO1xuIFx0XHRcdFx0aWYgKG1vZHVsZS5ob3QuX3NlbGZEZWNsaW5lZCkge1xuIFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1kZWNsaW5lZFwiLFxuIFx0XHRcdFx0XHRcdGNoYWluOiBjaGFpbixcbiBcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWRcbiBcdFx0XHRcdFx0fTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChtb2R1bGUuaG90Ll9tYWluKSB7XG4gXHRcdFx0XHRcdHJldHVybiB7XG4gXHRcdFx0XHRcdFx0dHlwZTogXCJ1bmFjY2VwdGVkXCIsXG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLFxuIFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZFxuIFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtb2R1bGUucGFyZW50cy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHR2YXIgcGFyZW50SWQgPSBtb2R1bGUucGFyZW50c1tpXTtcbiBcdFx0XHRcdFx0dmFyIHBhcmVudCA9IGluc3RhbGxlZE1vZHVsZXNbcGFyZW50SWRdO1xuIFx0XHRcdFx0XHRpZiAoIXBhcmVudCkgY29udGludWU7XG4gXHRcdFx0XHRcdGlmIChwYXJlbnQuaG90Ll9kZWNsaW5lZERlcGVuZGVuY2llc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRcdFx0XHRyZXR1cm4ge1xuIFx0XHRcdFx0XHRcdFx0dHlwZTogXCJkZWNsaW5lZFwiLFxuIFx0XHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLmNvbmNhdChbcGFyZW50SWRdKSxcbiBcdFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0XHRcdHBhcmVudElkOiBwYXJlbnRJZFxuIFx0XHRcdFx0XHRcdH07XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0aWYgKG91dGRhdGVkTW9kdWxlcy5pbmRleE9mKHBhcmVudElkKSAhPT0gLTEpIGNvbnRpbnVlO1xuIFx0XHRcdFx0XHRpZiAocGFyZW50LmhvdC5fYWNjZXB0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0XHRcdFx0aWYgKCFvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0pXG4gXHRcdFx0XHRcdFx0XHRvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0gPSBbXTtcbiBcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF0sIFttb2R1bGVJZF0pO1xuIFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGRlbGV0ZSBvdXRkYXRlZERlcGVuZGVuY2llc1twYXJlbnRJZF07XG4gXHRcdFx0XHRcdG91dGRhdGVkTW9kdWxlcy5wdXNoKHBhcmVudElkKTtcbiBcdFx0XHRcdFx0cXVldWUucHVzaCh7XG4gXHRcdFx0XHRcdFx0Y2hhaW46IGNoYWluLmNvbmNhdChbcGFyZW50SWRdKSxcbiBcdFx0XHRcdFx0XHRpZDogcGFyZW50SWRcbiBcdFx0XHRcdFx0fSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuXG4gXHRcdFx0cmV0dXJuIHtcbiBcdFx0XHRcdHR5cGU6IFwiYWNjZXB0ZWRcIixcbiBcdFx0XHRcdG1vZHVsZUlkOiB1cGRhdGVNb2R1bGVJZCxcbiBcdFx0XHRcdG91dGRhdGVkTW9kdWxlczogb3V0ZGF0ZWRNb2R1bGVzLFxuIFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXM6IG91dGRhdGVkRGVwZW5kZW5jaWVzXG4gXHRcdFx0fTtcbiBcdFx0fVxuXG4gXHRcdGZ1bmN0aW9uIGFkZEFsbFRvU2V0KGEsIGIpIHtcbiBcdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdHZhciBpdGVtID0gYltpXTtcbiBcdFx0XHRcdGlmIChhLmluZGV4T2YoaXRlbSkgPT09IC0xKSBhLnB1c2goaXRlbSk7XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gYXQgYmVnaW4gYWxsIHVwZGF0ZXMgbW9kdWxlcyBhcmUgb3V0ZGF0ZWRcbiBcdFx0Ly8gdGhlIFwib3V0ZGF0ZWRcIiBzdGF0dXMgY2FuIHByb3BhZ2F0ZSB0byBwYXJlbnRzIGlmIHRoZXkgZG9uJ3QgYWNjZXB0IHRoZSBjaGlsZHJlblxuIFx0XHR2YXIgb3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSB7fTtcbiBcdFx0dmFyIG91dGRhdGVkTW9kdWxlcyA9IFtdO1xuIFx0XHR2YXIgYXBwbGllZFVwZGF0ZSA9IHt9O1xuXG4gXHRcdHZhciB3YXJuVW5leHBlY3RlZFJlcXVpcmUgPSBmdW5jdGlvbiB3YXJuVW5leHBlY3RlZFJlcXVpcmUoKSB7XG4gXHRcdFx0Y29uc29sZS53YXJuKFxuIFx0XHRcdFx0XCJbSE1SXSB1bmV4cGVjdGVkIHJlcXVpcmUoXCIgKyByZXN1bHQubW9kdWxlSWQgKyBcIikgdG8gZGlzcG9zZWQgbW9kdWxlXCJcbiBcdFx0XHQpO1xuIFx0XHR9O1xuXG4gXHRcdGZvciAodmFyIGlkIGluIGhvdFVwZGF0ZSkge1xuIFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaG90VXBkYXRlLCBpZCkpIHtcbiBcdFx0XHRcdG1vZHVsZUlkID0gdG9Nb2R1bGVJZChpZCk7XG4gXHRcdFx0XHQvKiogQHR5cGUge1RPRE99ICovXG4gXHRcdFx0XHR2YXIgcmVzdWx0O1xuIFx0XHRcdFx0aWYgKGhvdFVwZGF0ZVtpZF0pIHtcbiBcdFx0XHRcdFx0cmVzdWx0ID0gZ2V0QWZmZWN0ZWRTdHVmZihtb2R1bGVJZCk7XG4gXHRcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0XHRyZXN1bHQgPSB7XG4gXHRcdFx0XHRcdFx0dHlwZTogXCJkaXNwb3NlZFwiLFxuIFx0XHRcdFx0XHRcdG1vZHVsZUlkOiBpZFxuIFx0XHRcdFx0XHR9O1xuIFx0XHRcdFx0fVxuIFx0XHRcdFx0LyoqIEB0eXBlIHtFcnJvcnxmYWxzZX0gKi9cbiBcdFx0XHRcdHZhciBhYm9ydEVycm9yID0gZmFsc2U7XG4gXHRcdFx0XHR2YXIgZG9BcHBseSA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGRvRGlzcG9zZSA9IGZhbHNlO1xuIFx0XHRcdFx0dmFyIGNoYWluSW5mbyA9IFwiXCI7XG4gXHRcdFx0XHRpZiAocmVzdWx0LmNoYWluKSB7XG4gXHRcdFx0XHRcdGNoYWluSW5mbyA9IFwiXFxuVXBkYXRlIHByb3BhZ2F0aW9uOiBcIiArIHJlc3VsdC5jaGFpbi5qb2luKFwiIC0+IFwiKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdHN3aXRjaCAocmVzdWx0LnR5cGUpIHtcbiBcdFx0XHRcdFx0Y2FzZSBcInNlbGYtZGVjbGluZWRcIjpcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkRlY2xpbmVkKSBvcHRpb25zLm9uRGVjbGluZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlRGVjbGluZWQpXG4gXHRcdFx0XHRcdFx0XHRhYm9ydEVycm9yID0gbmV3IEVycm9yKFxuIFx0XHRcdFx0XHRcdFx0XHRcIkFib3J0ZWQgYmVjYXVzZSBvZiBzZWxmIGRlY2xpbmU6IFwiICtcbiBcdFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQubW9kdWxlSWQgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcImRlY2xpbmVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25EZWNsaW5lZCkgb3B0aW9ucy5vbkRlY2xpbmVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZURlY2xpbmVkKVxuIFx0XHRcdFx0XHRcdFx0YWJvcnRFcnJvciA9IG5ldyBFcnJvcihcbiBcdFx0XHRcdFx0XHRcdFx0XCJBYm9ydGVkIGJlY2F1c2Ugb2YgZGVjbGluZWQgZGVwZW5kZW5jeTogXCIgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5tb2R1bGVJZCArXG4gXHRcdFx0XHRcdFx0XHRcdFx0XCIgaW4gXCIgK1xuIFx0XHRcdFx0XHRcdFx0XHRcdHJlc3VsdC5wYXJlbnRJZCArXG4gXHRcdFx0XHRcdFx0XHRcdFx0Y2hhaW5JbmZvXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdFx0XHRjYXNlIFwidW5hY2NlcHRlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uVW5hY2NlcHRlZCkgb3B0aW9ucy5vblVuYWNjZXB0ZWQocmVzdWx0KTtcbiBcdFx0XHRcdFx0XHRpZiAoIW9wdGlvbnMuaWdub3JlVW5hY2NlcHRlZClcbiBcdFx0XHRcdFx0XHRcdGFib3J0RXJyb3IgPSBuZXcgRXJyb3IoXG4gXHRcdFx0XHRcdFx0XHRcdFwiQWJvcnRlZCBiZWNhdXNlIFwiICsgbW9kdWxlSWQgKyBcIiBpcyBub3QgYWNjZXB0ZWRcIiArIGNoYWluSW5mb1xuIFx0XHRcdFx0XHRcdFx0KTtcbiBcdFx0XHRcdFx0XHRicmVhaztcbiBcdFx0XHRcdFx0Y2FzZSBcImFjY2VwdGVkXCI6XG4gXHRcdFx0XHRcdFx0aWYgKG9wdGlvbnMub25BY2NlcHRlZCkgb3B0aW9ucy5vbkFjY2VwdGVkKHJlc3VsdCk7XG4gXHRcdFx0XHRcdFx0ZG9BcHBseSA9IHRydWU7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGNhc2UgXCJkaXNwb3NlZFwiOlxuIFx0XHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRGlzcG9zZWQpIG9wdGlvbnMub25EaXNwb3NlZChyZXN1bHQpO1xuIFx0XHRcdFx0XHRcdGRvRGlzcG9zZSA9IHRydWU7XG4gXHRcdFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0XHRcdGRlZmF1bHQ6XG4gXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5leGNlcHRpb24gdHlwZSBcIiArIHJlc3VsdC50eXBlKTtcbiBcdFx0XHRcdH1cbiBcdFx0XHRcdGlmIChhYm9ydEVycm9yKSB7XG4gXHRcdFx0XHRcdGhvdFNldFN0YXR1cyhcImFib3J0XCIpO1xuIFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoYWJvcnRFcnJvcik7XG4gXHRcdFx0XHR9XG4gXHRcdFx0XHRpZiAoZG9BcHBseSkge1xuIFx0XHRcdFx0XHRhcHBsaWVkVXBkYXRlW21vZHVsZUlkXSA9IGhvdFVwZGF0ZVttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGFkZEFsbFRvU2V0KG91dGRhdGVkTW9kdWxlcywgcmVzdWx0Lm91dGRhdGVkTW9kdWxlcyk7XG4gXHRcdFx0XHRcdGZvciAobW9kdWxlSWQgaW4gcmVzdWx0Lm91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4gXHRcdFx0XHRcdFx0aWYgKFxuIFx0XHRcdFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuIFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXMsXG4gXHRcdFx0XHRcdFx0XHRcdG1vZHVsZUlkXG4gXHRcdFx0XHRcdFx0XHQpXG4gXHRcdFx0XHRcdFx0KSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAoIW91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXSlcbiBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdID0gW107XG4gXHRcdFx0XHRcdFx0XHRhZGRBbGxUb1NldChcbiBcdFx0XHRcdFx0XHRcdFx0b3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdLFxuIFx0XHRcdFx0XHRcdFx0XHRyZXN1bHQub3V0ZGF0ZWREZXBlbmRlbmNpZXNbbW9kdWxlSWRdXG4gXHRcdFx0XHRcdFx0XHQpO1xuIFx0XHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdFx0aWYgKGRvRGlzcG9zZSkge1xuIFx0XHRcdFx0XHRhZGRBbGxUb1NldChvdXRkYXRlZE1vZHVsZXMsIFtyZXN1bHQubW9kdWxlSWRdKTtcbiBcdFx0XHRcdFx0YXBwbGllZFVwZGF0ZVttb2R1bGVJZF0gPSB3YXJuVW5leHBlY3RlZFJlcXVpcmU7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gU3RvcmUgc2VsZiBhY2NlcHRlZCBvdXRkYXRlZCBtb2R1bGVzIHRvIHJlcXVpcmUgdGhlbSBsYXRlciBieSB0aGUgbW9kdWxlIHN5c3RlbVxuIFx0XHR2YXIgb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzID0gW107XG4gXHRcdGZvciAoaSA9IDA7IGkgPCBvdXRkYXRlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRtb2R1bGVJZCA9IG91dGRhdGVkTW9kdWxlc1tpXTtcbiBcdFx0XHRpZiAoXG4gXHRcdFx0XHRpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSAmJlxuIFx0XHRcdFx0aW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uaG90Ll9zZWxmQWNjZXB0ZWQgJiZcbiBcdFx0XHRcdC8vIHJlbW92ZWQgc2VsZi1hY2NlcHRlZCBtb2R1bGVzIHNob3VsZCBub3QgYmUgcmVxdWlyZWRcbiBcdFx0XHRcdGFwcGxpZWRVcGRhdGVbbW9kdWxlSWRdICE9PSB3YXJuVW5leHBlY3RlZFJlcXVpcmVcbiBcdFx0XHQpIHtcbiBcdFx0XHRcdG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5wdXNoKHtcbiBcdFx0XHRcdFx0bW9kdWxlOiBtb2R1bGVJZCxcbiBcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyOiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5ob3QuX3NlbGZBY2NlcHRlZFxuIFx0XHRcdFx0fSk7XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gTm93IGluIFwiZGlzcG9zZVwiIHBoYXNlXG4gXHRcdGhvdFNldFN0YXR1cyhcImRpc3Bvc2VcIik7XG4gXHRcdE9iamVjdC5rZXlzKGhvdEF2YWlsYWJsZUZpbGVzTWFwKS5mb3JFYWNoKGZ1bmN0aW9uKGNodW5rSWQpIHtcbiBcdFx0XHRpZiAoaG90QXZhaWxhYmxlRmlsZXNNYXBbY2h1bmtJZF0gPT09IGZhbHNlKSB7XG4gXHRcdFx0XHRob3REaXNwb3NlQ2h1bmsoY2h1bmtJZCk7XG4gXHRcdFx0fVxuIFx0XHR9KTtcblxuIFx0XHR2YXIgaWR4O1xuIFx0XHR2YXIgcXVldWUgPSBvdXRkYXRlZE1vZHVsZXMuc2xpY2UoKTtcbiBcdFx0d2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiBcdFx0XHRtb2R1bGVJZCA9IHF1ZXVlLnBvcCgpO1xuIFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdGlmICghbW9kdWxlKSBjb250aW51ZTtcblxuIFx0XHRcdHZhciBkYXRhID0ge307XG5cbiBcdFx0XHQvLyBDYWxsIGRpc3Bvc2UgaGFuZGxlcnNcbiBcdFx0XHR2YXIgZGlzcG9zZUhhbmRsZXJzID0gbW9kdWxlLmhvdC5fZGlzcG9zZUhhbmRsZXJzO1xuIFx0XHRcdGZvciAoaiA9IDA7IGogPCBkaXNwb3NlSGFuZGxlcnMubGVuZ3RoOyBqKyspIHtcbiBcdFx0XHRcdGNiID0gZGlzcG9zZUhhbmRsZXJzW2pdO1xuIFx0XHRcdFx0Y2IoZGF0YSk7XG4gXHRcdFx0fVxuIFx0XHRcdGhvdEN1cnJlbnRNb2R1bGVEYXRhW21vZHVsZUlkXSA9IGRhdGE7XG5cbiBcdFx0XHQvLyBkaXNhYmxlIG1vZHVsZSAodGhpcyBkaXNhYmxlcyByZXF1aXJlcyBmcm9tIHRoaXMgbW9kdWxlKVxuIFx0XHRcdG1vZHVsZS5ob3QuYWN0aXZlID0gZmFsc2U7XG5cbiBcdFx0XHQvLyByZW1vdmUgbW9kdWxlIGZyb20gY2FjaGVcbiBcdFx0XHRkZWxldGUgaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF07XG5cbiBcdFx0XHQvLyB3aGVuIGRpc3Bvc2luZyB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgZGlzcG9zZSBoYW5kbGVyXG4gXHRcdFx0ZGVsZXRlIG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcblxuIFx0XHRcdC8vIHJlbW92ZSBcInBhcmVudHNcIiByZWZlcmVuY2VzIGZyb20gYWxsIGNoaWxkcmVuXG4gXHRcdFx0Zm9yIChqID0gMDsgaiA8IG1vZHVsZS5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0dmFyIGNoaWxkID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGUuY2hpbGRyZW5bal1dO1xuIFx0XHRcdFx0aWYgKCFjaGlsZCkgY29udGludWU7XG4gXHRcdFx0XHRpZHggPSBjaGlsZC5wYXJlbnRzLmluZGV4T2YobW9kdWxlSWQpO1xuIFx0XHRcdFx0aWYgKGlkeCA+PSAwKSB7XG4gXHRcdFx0XHRcdGNoaWxkLnBhcmVudHMuc3BsaWNlKGlkeCwgMSk7XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gcmVtb3ZlIG91dGRhdGVkIGRlcGVuZGVuY3kgZnJvbSBtb2R1bGUgY2hpbGRyZW5cbiBcdFx0dmFyIGRlcGVuZGVuY3k7XG4gXHRcdHZhciBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcztcbiBcdFx0Zm9yIChtb2R1bGVJZCBpbiBvdXRkYXRlZERlcGVuZGVuY2llcykge1xuIFx0XHRcdGlmIChcbiBcdFx0XHRcdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvdXRkYXRlZERlcGVuZGVuY2llcywgbW9kdWxlSWQpXG4gXHRcdFx0KSB7XG4gXHRcdFx0XHRtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdGlmIChtb2R1bGUpIHtcbiBcdFx0XHRcdFx0bW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMgPSBvdXRkYXRlZERlcGVuZGVuY2llc1ttb2R1bGVJZF07XG4gXHRcdFx0XHRcdGZvciAoaiA9IDA7IGogPCBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcy5sZW5ndGg7IGorKykge1xuIFx0XHRcdFx0XHRcdGRlcGVuZGVuY3kgPSBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tqXTtcbiBcdFx0XHRcdFx0XHRpZHggPSBtb2R1bGUuY2hpbGRyZW4uaW5kZXhPZihkZXBlbmRlbmN5KTtcbiBcdFx0XHRcdFx0XHRpZiAoaWR4ID49IDApIG1vZHVsZS5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiBcdFx0XHRcdFx0fVxuIFx0XHRcdFx0fVxuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdC8vIE5vdyBpbiBcImFwcGx5XCIgcGhhc2VcbiBcdFx0aG90U2V0U3RhdHVzKFwiYXBwbHlcIik7XG5cbiBcdFx0aG90Q3VycmVudEhhc2ggPSBob3RVcGRhdGVOZXdIYXNoO1xuXG4gXHRcdC8vIGluc2VydCBuZXcgY29kZVxuIFx0XHRmb3IgKG1vZHVsZUlkIGluIGFwcGxpZWRVcGRhdGUpIHtcbiBcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFwcGxpZWRVcGRhdGUsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0bW9kdWxlc1ttb2R1bGVJZF0gPSBhcHBsaWVkVXBkYXRlW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBjYWxsIGFjY2VwdCBoYW5kbGVyc1xuIFx0XHR2YXIgZXJyb3IgPSBudWxsO1xuIFx0XHRmb3IgKG1vZHVsZUlkIGluIG91dGRhdGVkRGVwZW5kZW5jaWVzKSB7XG4gXHRcdFx0aWYgKFxuIFx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG91dGRhdGVkRGVwZW5kZW5jaWVzLCBtb2R1bGVJZClcbiBcdFx0XHQpIHtcbiBcdFx0XHRcdG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdO1xuIFx0XHRcdFx0aWYgKG1vZHVsZSkge1xuIFx0XHRcdFx0XHRtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyA9IG91dGRhdGVkRGVwZW5kZW5jaWVzW21vZHVsZUlkXTtcbiBcdFx0XHRcdFx0dmFyIGNhbGxiYWNrcyA9IFtdO1xuIFx0XHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHRcdFx0XHRkZXBlbmRlbmN5ID0gbW9kdWxlT3V0ZGF0ZWREZXBlbmRlbmNpZXNbaV07XG4gXHRcdFx0XHRcdFx0Y2IgPSBtb2R1bGUuaG90Ll9hY2NlcHRlZERlcGVuZGVuY2llc1tkZXBlbmRlbmN5XTtcbiBcdFx0XHRcdFx0XHRpZiAoY2IpIHtcbiBcdFx0XHRcdFx0XHRcdGlmIChjYWxsYmFja3MuaW5kZXhPZihjYikgIT09IC0xKSBjb250aW51ZTtcbiBcdFx0XHRcdFx0XHRcdGNhbGxiYWNrcy5wdXNoKGNiKTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdFx0XHRcdGNiID0gY2FsbGJhY2tzW2ldO1xuIFx0XHRcdFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRcdFx0XHRjYihtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llcyk7XG4gXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG4gXHRcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5vbkVycm9yZWQoe1xuIFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiYWNjZXB0LWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdFx0XHRtb2R1bGVJZDogbW9kdWxlSWQsXG4gXHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW5jeUlkOiBtb2R1bGVPdXRkYXRlZERlcGVuZGVuY2llc1tpXSxcbiBcdFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0fVxuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHR9XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0Ly8gTG9hZCBzZWxmIGFjY2VwdGVkIG1vZHVsZXNcbiBcdFx0Zm9yIChpID0gMDsgaSA8IG91dGRhdGVkU2VsZkFjY2VwdGVkTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdHZhciBpdGVtID0gb3V0ZGF0ZWRTZWxmQWNjZXB0ZWRNb2R1bGVzW2ldO1xuIFx0XHRcdG1vZHVsZUlkID0gaXRlbS5tb2R1bGU7XG4gXHRcdFx0aG90Q3VycmVudFBhcmVudHMgPSBbbW9kdWxlSWRdO1xuIFx0XHRcdHRyeSB7XG4gXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKTtcbiBcdFx0XHR9IGNhdGNoIChlcnIpIHtcbiBcdFx0XHRcdGlmICh0eXBlb2YgaXRlbS5lcnJvckhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuIFx0XHRcdFx0XHR0cnkge1xuIFx0XHRcdFx0XHRcdGl0ZW0uZXJyb3JIYW5kbGVyKGVycik7XG4gXHRcdFx0XHRcdH0gY2F0Y2ggKGVycjIpIHtcbiBcdFx0XHRcdFx0XHRpZiAob3B0aW9ucy5vbkVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJzZWxmLWFjY2VwdC1lcnJvci1oYW5kbGVyLWVycm9yZWRcIixcbiBcdFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0XHRlcnJvcjogZXJyMixcbiBcdFx0XHRcdFx0XHRcdFx0b3JpZ2luYWxFcnJvcjogZXJyXG4gXHRcdFx0XHRcdFx0XHR9KTtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFvcHRpb25zLmlnbm9yZUVycm9yZWQpIHtcbiBcdFx0XHRcdFx0XHRcdGlmICghZXJyb3IpIGVycm9yID0gZXJyMjtcbiBcdFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRcdGlmIChvcHRpb25zLm9uRXJyb3JlZCkge1xuIFx0XHRcdFx0XHRcdG9wdGlvbnMub25FcnJvcmVkKHtcbiBcdFx0XHRcdFx0XHRcdHR5cGU6IFwic2VsZi1hY2NlcHQtZXJyb3JlZFwiLFxuIFx0XHRcdFx0XHRcdFx0bW9kdWxlSWQ6IG1vZHVsZUlkLFxuIFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGVyclxuIFx0XHRcdFx0XHRcdH0pO1xuIFx0XHRcdFx0XHR9XG4gXHRcdFx0XHRcdGlmICghb3B0aW9ucy5pZ25vcmVFcnJvcmVkKSB7XG4gXHRcdFx0XHRcdFx0aWYgKCFlcnJvcikgZXJyb3IgPSBlcnI7XG4gXHRcdFx0XHRcdH1cbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH1cblxuIFx0XHQvLyBoYW5kbGUgZXJyb3JzIGluIGFjY2VwdCBoYW5kbGVycyBhbmQgc2VsZiBhY2NlcHRlZCBtb2R1bGUgbG9hZFxuIFx0XHRpZiAoZXJyb3IpIHtcbiBcdFx0XHRob3RTZXRTdGF0dXMoXCJmYWlsXCIpO1xuIFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gXHRcdH1cblxuIFx0XHRob3RTZXRTdGF0dXMoXCJpZGxlXCIpO1xuIFx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuIFx0XHRcdHJlc29sdmUob3V0ZGF0ZWRNb2R1bGVzKTtcbiBcdFx0fSk7XG4gXHR9XG5cbiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9LFxuIFx0XHRcdGhvdDogaG90Q3JlYXRlTW9kdWxlKG1vZHVsZUlkKSxcbiBcdFx0XHRwYXJlbnRzOiAoaG90Q3VycmVudFBhcmVudHNUZW1wID0gaG90Q3VycmVudFBhcmVudHMsIGhvdEN1cnJlbnRQYXJlbnRzID0gW10sIGhvdEN1cnJlbnRQYXJlbnRzVGVtcCksXG4gXHRcdFx0Y2hpbGRyZW46IFtdXG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIGhvdENyZWF0ZVJlcXVpcmUobW9kdWxlSWQpKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBfX3dlYnBhY2tfaGFzaF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmggPSBmdW5jdGlvbigpIHsgcmV0dXJuIGhvdEN1cnJlbnRIYXNoOyB9O1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIGhvdENyZWF0ZVJlcXVpcmUoMCkoX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7XG4iLCJleHBvcnQgY29uc3QgdGVybWluYWwgPSB7XG4gIGxvZzogKC4uLmFyZ3M6IGFueSkgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKFxuICAgICAgYXJncy5yZWR1Y2UoKGFjYzogc3RyaW5nLCBpdGVtOiBhbnkpID0+IGAke2FjY30gJHtpdGVtfWApICsgXCJcXG5cIixcbiAgICAgIFwidXRmLThcIlxuICAgICk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCB0ZXJtaW5hbDtcbiIsIi8qKlxuICogQXV0aG9yIDogTmlkaW4gVmluYXlha2FuIDwwMUAwMWFsY2hlbWlzdC5jb20+XG4gKi9cbmNvbnN0IG1pbmltaXN0ID0gcmVxdWlyZShcIm1pbmltaXN0XCIpO1xuY29uc3QgY2hhbGsgPSByZXF1aXJlKFwiY2hhbGtcIik7XG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwicmVhZGxpbmVcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHRlcm1pbmFsIGZyb20gXCIuL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgY3Vyc29yVG8gfSA9IHJlYWRsaW5lO1xuY29uc3QgeyBzcGF3biB9ID0gY2hpbGRfcHJvY2VzcztcbmNvbnN0IHsgd2hpdGU6IHcsIHJlZDogciwgYmdSZWQ6IGJnUiB9ID0gY2hhbGs7XG5cbnR5cGUgU3Bhd25PcHRpb25zID0gY2hpbGRfcHJvY2Vzcy5TcGF3bk9wdGlvbnM7XG5cbmludGVyZmFjZSBJbnN0YW5jZSBleHRlbmRzIGNoaWxkX3Byb2Nlc3MuQ2hpbGRQcm9jZXNzIHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG50eXBlIE9iamVjdE1hcCA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH07XG5cbnR5cGUgTGF1bmNoTW9kZSA9IFwicHJvZ3JhbVwiIHwgXCJjbGlcIjtcblxudHlwZSBPcHRpb25zID0ge1xuICBlbnY/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgY21kcz86IHN0cmluZ1tdO1xuICBjd2Q/OiBzdHJpbmc7XG4gIG1vZGU/OiBMYXVuY2hNb2RlO1xuICBleGl0UHJvY2Vzc09uQ2xvc2U/OiBib29sZWFuO1xuICBzaWxlbnQ/OiBib29sZWFuO1xufSAmIFNwYXduT3B0aW9ucztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9iamVjdE1hcCA9IHtcbiAgbW9kZTogXCJwcm9ncmFtXCIsXG4gIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgZXhpdFByb2Nlc3NPbkNsb3NlOiBmYWxzZVxufTtcblxuY29uc3QgYmFzZURpciA9IHByb2Nlc3MuY3dkKCk7XG5sZXQgZW52UGF0aCA9IGAke2Jhc2VEaXJ9L2Vudi8ke3Byb2Nlc3MuZW52LlVTRVJ9LmVudmA7XG5pZiAoIWZzLmV4aXN0c1N5bmMoZW52UGF0aCkpIHtcbiAgZW52UGF0aCA9IGAke2Jhc2VEaXJ9Ly5lbnZgO1xufVxuaWYgKGZzLmV4aXN0c1N5bmMoZW52UGF0aCkpIHtcbiAgdGVybWluYWwubG9nKGBMb2FkaW5nIGVudiB2YXJzIGZyb206ICR7ZW52UGF0aH1gKTtcblxuICByZXF1aXJlKFwiZG90ZW52XCIpLmNvbmZpZyh7XG4gICAgcGF0aDogZW52UGF0aFxuICB9KTtcbn1cblxudHlwZSBNZXJnZWRPcHRpb24gPSB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IGFueSB9O1xudHlwZSBNZXJnZWRPcHRpb25zID0gTWVyZ2VkT3B0aW9uW107XG5cbmZ1bmN0aW9uIG1lcmdlVmFsdWUodmFsdWUxOiBhbnksIHZhbHVlMjogYW55KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7XG4gICAgcmV0dXJuIFsuLi52YWx1ZTEsIC4uLnZhbHVlMl07XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlMSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUyID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnZhbHVlMSxcbiAgICAgIC4uLnZhbHVlMlxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHZhbHVlMjtcbn1cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhcbiAgbmFtZTogc3RyaW5nLFxuICBkZWZhdWx0T3B0aW9uOiBPYmplY3RNYXAsXG4gIG9wdGlvbjogT2JqZWN0TWFwLFxuICBjbGlPcHRpb246IE9iamVjdE1hcFxuKTogTWVyZ2VkT3B0aW9uIHtcbiAgbGV0IHZhbHVlO1xuXG4gIGlmIChkZWZhdWx0T3B0aW9uKSB7XG4gICAgdmFsdWUgPSBkZWZhdWx0T3B0aW9uO1xuICB9XG5cbiAgaWYgKG9wdGlvbikge1xuICAgIHZhbHVlID0gbWVyZ2VWYWx1ZSh2YWx1ZSwgb3B0aW9uKTtcbiAgfVxuXG4gIGlmIChjbGlPcHRpb24pIHtcbiAgICB2YWx1ZSA9IG1lcmdlVmFsdWUodmFsdWUsIGNsaU9wdGlvbik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgdmFsdWVcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0T3B0aW9ucyhfb3B0aW9uczogT2JqZWN0TWFwID0ge30sIGFyZ3M6IHN0cmluZ1tdID0gW10pIHtcbiAgY29uc3QgY2xpQXJncyA9IG1pbmltaXN0KGFyZ3MpO1xuICBjb25zdCBvcHRpb25OYW1lcyA9IE9iamVjdC5rZXlzKGRlZmF1bHRPcHRpb25zKVxuICAgIC5jb25jYXQoT2JqZWN0LmtleXMoX29wdGlvbnMpKVxuICAgIC5jb25jYXQoT2JqZWN0LmtleXMoY2xpQXJncykpO1xuXG4gIGNvbnN0IG1lcmdlZE9wdGlvbnM6IE1lcmdlZE9wdGlvbnMgPSBvcHRpb25OYW1lcy5tYXAob3B0aW9uTmFtZSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlT3B0aW9ucyhcbiAgICAgIG9wdGlvbk5hbWUsXG4gICAgICBkZWZhdWx0T3B0aW9uc1tvcHRpb25OYW1lXSxcbiAgICAgIF9vcHRpb25zW29wdGlvbk5hbWVdLFxuICAgICAgY2xpQXJnc1tvcHRpb25OYW1lXVxuICAgICk7XG4gIH0pO1xuICBjb25zdCBmbGF0dGVuT3B0aW9uczogT3B0aW9ucyA9IG1lcmdlZE9wdGlvbnMucmVkdWNlKFxuICAgIChhY2M6IE9iamVjdE1hcCwgb3B0aW9uKSA9PiB7XG4gICAgICBhY2Nbb3B0aW9uLm5hbWVdID0gb3B0aW9uLnZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9XG4gICk7XG4gIHJldHVybiBmbGF0dGVuT3B0aW9ucztcbn1cbmdsb2JhbC5sYXVuY2hlciA9IGdsb2JhbC5sYXVuY2hlciB8fCB7XG4gIGluc3RhbmNlczogW10sXG4gIHRlcm1pbmF0ZUFsbDogKHNpZ25hbDogc3RyaW5nKSA9PiB7XG4gICAgZ2xvYmFsLmxhdW5jaGVyLmluc3RhbmNlcy5mb3JFYWNoKChfaW5zdGFuY2U6IEluc3RhbmNlKSA9PiB7XG4gICAgICB0ZXJtaW5hbC5sb2coXG4gICAgICAgIGBUZXJtaW5hdGluZyBbJHtfaW5zdGFuY2UubmFtZX1dIGluc3RhbmNlLnBpZDogJHtfaW5zdGFuY2UucGlkfWBcbiAgICAgICk7XG4gICAgICBfaW5zdGFuY2Uua2lsbChzaWduYWwgfHwgXCJTSUdURVJNXCIpO1xuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF1bmNoKF9vcHRpb25zOiBPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhcmdzID0gX29wdGlvbnMubW9kZSA9PT0gXCJjbGlcIiA/IHByb2Nlc3MuYXJndi5zbGljZSgyKSA6IFtdO1xuICBjb25zdCBvcHRpb25zID0gZ2V0T3B0aW9ucyhfb3B0aW9ucywgYXJncyk7XG4gIGlmIChvcHRpb25zLmVudikge1xuICAgIGNvbnN0IGVudiA9XG4gICAgICBvcHRpb25zLmVudiBpbnN0YW5jZW9mIEFycmF5ID8gb3B0aW9ucy5lbnYgOiBvcHRpb25zLmVudi5zcGxpdChcIixcIik7XG4gICAgZW52LmZvckVhY2goKGVsZW1lbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gZWxlbWVudC5zcGxpdChcIj1cIik7XG4gICAgICBjb25zdCBpc1JlZmVyZW5jZSA9IHZhbHVlLmluZGV4T2YoXCJwcm9jZXNzLmVudi5cIikgPiAtMTtcbiAgICAgIHByb2Nlc3MuZW52W2tleV0gPSBpc1JlZmVyZW5jZSA/IHByb2Nlc3MuZW52W3ZhbHVlLnNsaWNlKDEyKV0gOiB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuICBjb25zdCBjbWRzID1cbiAgICBvcHRpb25zLmNtZHMgfHxcbiAgICBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikuZmlsdGVyKGFyZyA9PiBhcmcuaW5kZXhPZihcIi0tY3dkXCIpID09PSAtMSk7XG4gIGxldCBjd2QgPSBiYXNlRGlyO1xuICBpZiAob3B0aW9ucy5jd2QpIHtcbiAgICBjd2QgPVxuICAgICAgb3B0aW9ucy5jd2RbMF0gPT09IFwiL1wiID8gb3B0aW9ucy5jd2QgOiBwYXRoLnJlc29sdmUoYmFzZURpciwgb3B0aW9ucy5jd2QpO1xuICB9XG5cbiAgaWYgKCFjbWRzIHx8IGNtZHMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgaXNDbGkgPSBvcHRpb25zLm1vZGUgPT09IFwiY2xpXCI7XG4gICAgY29uc3QgdGl0bGUgPSBcIk9vcHMg8J+YrCwgRGlkIHlvdSBmb3Jnb3QgdG8gcGFzc1wiO1xuICAgIGlmIChpc0NsaSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHIoXG4gICAgICAgICAgYFxcbiAke3RpdGxlfSAke2JnUihcbiAgICAgICAgICAgIHcoXCIgcHJvZ3JhbSBcIilcbiAgICAgICAgICApfT8uIFBsZWFzZSB0ZWxsIG1lLCB3aGljaCBwcm9ncmFtIHlvdSB3YW50IHRvIGxhdW5jaCFcXG5gXG4gICAgICAgICkgKyBgXFxuICAgRXhhbXBsZTogbGF1bmNoIGVjaG8gXCJIZWxsbyBXb3JsZFwiXFxuYDtcbiAgICAgIHRlcm1pbmFsLmxvZyhtZXNzYWdlKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHIoXG4gICAgICAgICAgYCR7dGl0bGV9IG9wdGlvbiAke2JnUihcbiAgICAgICAgICAgIHcoXCIgY21kcyBcIilcbiAgICAgICAgICApfT8uIFBsZWFzZSB0ZWxsIG1lLCB3aGljaCBwcm9ncmFtIHlvdSB3YW50IHRvIGxhdW5jaCFcXG5gXG4gICAgICAgICkgKyBgXFxuICAgRXhhbXBsZTogbGF1bmNoKHtjbWRzOltcImVjaG9cIiwgXCJIZWxsbyBXb3JsZFwiXX0pO1xcbmA7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIHRlcm1pbmFsLmxvZyhcbiAgICAgIFwiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXCJcbiAgICApO1xuICAgIHRlcm1pbmFsLmxvZyhcIiMgIPCfmoAgIExhdW5jaGluZyAgIDogXCIgKyBjbWRzLmpvaW4oXCIgXCIpKTtcbiAgICB0ZXJtaW5hbC5sb2coXCIjICDwn5OCICBDV0QgICAgICAgICA6IFwiICsgY3dkKTtcbiAgICB0ZXJtaW5hbC5sb2coXG4gICAgICBcIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCB7IHN0ZGlvLCBzaGVsbCB9ID0gb3B0aW9ucztcblxuICBjb25zdCBpbnN0YW5jZSA9IDxJbnN0YW5jZT5zcGF3bihjbWRzWzBdLCBjbWRzLnNsaWNlKDEpLCB7XG4gICAgc3RkaW8sXG4gICAgY3dkLFxuICAgIHNoZWxsXG4gIH0pO1xuICBpbnN0YW5jZS5uYW1lID0gY21kc1swXTtcblxuICBnbG9iYWwubGF1bmNoZXIuaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuXG4gIGZ1bmN0aW9uIGV4aXQoc2lnbmFsOiBzdHJpbmcpIHtcbiAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgIGN1cnNvclRvKHByb2Nlc3Muc3Rkb3V0LCAwKTtcbiAgICAgIHRlcm1pbmFsLmxvZyhgS2lsbGluZyBbJHtpbnN0YW5jZS5uYW1lfV0gaW5zdGFuY2UucGlkOiAke2luc3RhbmNlLnBpZH1gKTtcbiAgICAgIGluc3RhbmNlLmtpbGwoc2lnbmFsIHx8IFwiU0lHVEVSTVwiKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLm9uKFwiU0lHSU5UXCIsIDxhbnk+ZXhpdCk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xuICAgIGxldCBsYXN0RXJyb3JEYXRhID0gXCJcIjtcbiAgICBpZiAoc3RkaW8gIT09IFwiaW5oZXJpdFwiKSB7XG4gICAgICBpZiAoaW5zdGFuY2Uuc3Rkb3V0KSB7XG4gICAgICAgIGluc3RhbmNlLnN0ZG91dC5vbihcImRhdGFcIiwgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgICAgaWYgKGRhdGFTdHIpIHtcbiAgICAgICAgICAgIG91dHB1dCArPSBkYXRhU3RyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaW5zdGFuY2Uuc3RkZXJyKSB7XG4gICAgICAgIGluc3RhbmNlLnN0ZGVyci5vbihcImRhdGFcIiwgZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIGxhc3RFcnJvckRhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpbnN0YW5jZS5vbihcImNsb3NlXCIsIGFzeW5jIGNvZGUgPT4ge1xuICAgICAgaWYgKG9wdGlvbnMuZXhpdFByb2Nlc3NPbkNsb3NlKSB7XG4gICAgICAgIHRlcm1pbmFsLmxvZyhgWyR7aW5zdGFuY2UubmFtZX1dIGV4aXQgY29kZToke2NvZGV9YCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlcm1pbmFsLmxvZyhgWyR7aW5zdGFuY2UubmFtZX1dIGV4aXQgY29kZToke2NvZGV9YCk7XG4gICAgICAgIGNvZGUgPT09IDAgPyByZXNvbHZlKG91dHB1dCkgOiByZWplY3QobGFzdEVycm9yRGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXVuY2g7XG4iLCJleHBvcnQgKiBmcm9tIFwiLi9sYXVuY2gtYmFzZVwiO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY2hhbGtcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJkb3RlbnZcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibWluaW1pc3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicGF0aFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFkbGluZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0c2xpYlwiKTsiXSwic291cmNlUm9vdCI6IiJ9
|
|
310
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFRLENBQUMsSUFBSSx5QkFBZSxJQUFJLENBQUUsQ0FBQyxDQUFDO2dDQUNyRCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQzs2QkFDdEQ7Ozt5QkFDRixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLEVBQUM7OztDQUNKO0FBRUQsa0RBQWUsc0RBQU0sSUFBQzs7O0FDMU9RIiwic291cmNlcyI6WyIvVXNlcnMvbmlkaW4vd29ya3NwYWNlL3ByaXZhdGUvbGF1bmNoZXIvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiL1VzZXJzL25pZGluL3dvcmtzcGFjZS9wcml2YXRlL2xhdW5jaGVyL2V4dGVybmFsJTIwY29tbW9uanMlMjAlMjJjaGFsayUyMiIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9leHRlcm5hbCUyMGNvbW1vbmpzJTIwJTIyZG90ZW52JTIyIiwiL1VzZXJzL25pZGluL3dvcmtzcGFjZS9wcml2YXRlL2xhdW5jaGVyL2V4dGVybmFsJTIwY29tbW9uanMlMjAlMjJtaW5pbWlzdCUyMiIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci93ZWJwYWNrL2Jvb3RzdHJhcCIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lJTIwcHJvcGVydHklMjBnZXR0ZXJzIiwiL1VzZXJzL25pZGluL3dvcmtzcGFjZS9wcml2YXRlL2xhdW5jaGVyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSUyMHNob3J0aGFuZCIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci93ZWJwYWNrL3J1bnRpbWUvbWFrZSUyMG5hbWVzcGFjZSUyMG9iamVjdCIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9leHRlcm5hbCUyMGNvbW1vbmpzJTIwJTIydHNsaWIlMjIiLCIvVXNlcnMvbmlkaW4vd29ya3NwYWNlL3ByaXZhdGUvbGF1bmNoZXIvZXh0ZXJuYWwlMjBub2RlLWNvbW1vbmpzJTIwJTIyY2hpbGRfcHJvY2VzcyUyMiIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9leHRlcm5hbCUyMG5vZGUtY29tbW9uanMlMjAlMjJyZWFkbGluZSUyMiIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9leHRlcm5hbCUyMG5vZGUtY29tbW9uanMlMjAlMjJmcyUyMiIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9leHRlcm5hbCUyMG5vZGUtY29tbW9uanMlMjAlMjJwYXRoJTIyIiwiL1VzZXJzL25pZGluL3dvcmtzcGFjZS9wcml2YXRlL2xhdW5jaGVyL3NyYy90ZXJtaW5hbC50cyIsIi9Vc2Vycy9uaWRpbi93b3Jrc3BhY2UvcHJpdmF0ZS9sYXVuY2hlci9zcmMvbGF1bmNoLWJhc2UudHMiLCIvVXNlcnMvbmlkaW4vd29ya3NwYWNlL3ByaXZhdGUvbGF1bmNoZXIvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImluZGV4XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcImluZGV4XCJdID0gZmFjdG9yeSgpO1xufSkoZ2xvYmFsLCAoKSA9PiB7XG5yZXR1cm4gIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiY2hhbGtcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZG90ZW52XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm1pbmltaXN0XCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJ0c2xpYlwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNoaWxkX3Byb2Nlc3NcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFkbGluZVwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImZzXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicGF0aFwiKTsiLCJleHBvcnQgY29uc3QgdGVybWluYWwgPSB7XG4gIGxvZzogKC4uLmFyZ3M6IGFueSkgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKFxuICAgICAgYXJncy5yZWR1Y2UoKGFjYzogc3RyaW5nLCBpdGVtOiBhbnkpID0+IGAke2FjY30gJHtpdGVtfWApICsgXCJcXG5cIixcbiAgICAgIFwidXRmLThcIlxuICAgICk7XG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCB0ZXJtaW5hbDtcbiIsIi8qKlxuICogQXV0aG9yIDogTmlkaW4gVmluYXlha2FuIDwwMUAwMWFsY2hlbWlzdC5jb20+XG4gKi9cbmNvbnN0IG1pbmltaXN0ID0gcmVxdWlyZShcIm1pbmltaXN0XCIpO1xuY29uc3QgY2hhbGsgPSByZXF1aXJlKFwiY2hhbGtcIik7XG5pbXBvcnQgKiBhcyBjaGlsZF9wcm9jZXNzIGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tIFwicmVhZGxpbmVcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHRlcm1pbmFsIGZyb20gXCIuL3Rlcm1pbmFsXCI7XG5cbmNvbnN0IHsgY3Vyc29yVG8gfSA9IHJlYWRsaW5lO1xuY29uc3QgeyBzcGF3biB9ID0gY2hpbGRfcHJvY2VzcztcbmNvbnN0IHsgd2hpdGU6IHcsIHJlZDogciwgYmdSZWQ6IGJnUiB9ID0gY2hhbGs7XG5cbnR5cGUgU3Bhd25PcHRpb25zID0gY2hpbGRfcHJvY2Vzcy5TcGF3bk9wdGlvbnM7XG5cbmludGVyZmFjZSBJbnN0YW5jZSBleHRlbmRzIGNoaWxkX3Byb2Nlc3MuQ2hpbGRQcm9jZXNzIHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG50eXBlIE9iamVjdE1hcCA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgYW55IH07XG5cbnR5cGUgTGF1bmNoTW9kZSA9IFwicHJvZ3JhbVwiIHwgXCJjbGlcIjtcblxudHlwZSBPcHRpb25zID0ge1xuICBlbnY/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgY21kcz86IHN0cmluZ1tdO1xuICBjd2Q/OiBzdHJpbmc7XG4gIG1vZGU/OiBMYXVuY2hNb2RlO1xuICBleGl0UHJvY2Vzc09uQ2xvc2U/OiBib29sZWFuO1xuICBzaWxlbnQ/OiBib29sZWFuO1xufSAmIFNwYXduT3B0aW9ucztcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE9iamVjdE1hcCA9IHtcbiAgbW9kZTogXCJwcm9ncmFtXCIsXG4gIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgZXhpdFByb2Nlc3NPbkNsb3NlOiBmYWxzZSxcbn07XG5cbmNvbnN0IGJhc2VEaXIgPSBwcm9jZXNzLmN3ZCgpO1xubGV0IGVudlBhdGggPSBgJHtiYXNlRGlyfS9lbnYvJHtwcm9jZXNzLmVudi5VU0VSfS5lbnZgO1xuaWYgKCFmcy5leGlzdHNTeW5jKGVudlBhdGgpKSB7XG4gIGVudlBhdGggPSBgJHtiYXNlRGlyfS8uZW52YDtcbn1cbmlmIChmcy5leGlzdHNTeW5jKGVudlBhdGgpKSB7XG4gIHRlcm1pbmFsLmxvZyhgTG9hZGluZyBlbnYgdmFycyBmcm9tOiAke2VudlBhdGh9YCk7XG5cbiAgcmVxdWlyZShcImRvdGVudlwiKS5jb25maWcoe1xuICAgIHBhdGg6IGVudlBhdGgsXG4gIH0pO1xufVxuXG50eXBlIE1lcmdlZE9wdGlvbiA9IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogYW55IH07XG50eXBlIE1lcmdlZE9wdGlvbnMgPSBNZXJnZWRPcHRpb25bXTtcblxuZnVuY3Rpb24gbWVyZ2VWYWx1ZSh2YWx1ZTE6IGFueSwgdmFsdWUyOiBhbnkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUxKSAmJiBBcnJheS5pc0FycmF5KHZhbHVlMikpIHtcbiAgICByZXR1cm4gWy4uLnZhbHVlMSwgLi4udmFsdWUyXTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUxID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiB2YWx1ZTIgPT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udmFsdWUxLFxuICAgICAgLi4udmFsdWUyLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHZhbHVlMjtcbn1cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhcbiAgbmFtZTogc3RyaW5nLFxuICBkZWZhdWx0T3B0aW9uOiBPYmplY3RNYXAsXG4gIG9wdGlvbjogT2JqZWN0TWFwLFxuICBjbGlPcHRpb246IE9iamVjdE1hcFxuKTogTWVyZ2VkT3B0aW9uIHtcbiAgbGV0IHZhbHVlO1xuXG4gIGlmIChkZWZhdWx0T3B0aW9uKSB7XG4gICAgdmFsdWUgPSBkZWZhdWx0T3B0aW9uO1xuICB9XG5cbiAgaWYgKG9wdGlvbikge1xuICAgIHZhbHVlID0gbWVyZ2VWYWx1ZSh2YWx1ZSwgb3B0aW9uKTtcbiAgfVxuXG4gIGlmIChjbGlPcHRpb24pIHtcbiAgICB2YWx1ZSA9IG1lcmdlVmFsdWUodmFsdWUsIGNsaU9wdGlvbik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgdmFsdWUsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldE9wdGlvbnMoX29wdGlvbnM6IE9iamVjdE1hcCA9IHt9LCBhcmdzOiBzdHJpbmdbXSA9IFtdKSB7XG4gIGNvbnN0IGNsaUFyZ3MgPSBtaW5pbWlzdChhcmdzKTtcbiAgY29uc3Qgb3B0aW9uTmFtZXMgPSBPYmplY3Qua2V5cyhkZWZhdWx0T3B0aW9ucylcbiAgICAuY29uY2F0KE9iamVjdC5rZXlzKF9vcHRpb25zKSlcbiAgICAuY29uY2F0KE9iamVjdC5rZXlzKGNsaUFyZ3MpKTtcblxuICBjb25zdCBtZXJnZWRPcHRpb25zOiBNZXJnZWRPcHRpb25zID0gb3B0aW9uTmFtZXMubWFwKChvcHRpb25OYW1lKSA9PiB7XG4gICAgcmV0dXJuIG1lcmdlT3B0aW9ucyhcbiAgICAgIG9wdGlvbk5hbWUsXG4gICAgICBkZWZhdWx0T3B0aW9uc1tvcHRpb25OYW1lXSxcbiAgICAgIF9vcHRpb25zW29wdGlvbk5hbWVdLFxuICAgICAgY2xpQXJnc1tvcHRpb25OYW1lXVxuICAgICk7XG4gIH0pO1xuICBjb25zdCBmbGF0dGVuT3B0aW9uczogT3B0aW9ucyA9IG1lcmdlZE9wdGlvbnMucmVkdWNlKFxuICAgIChhY2M6IE9iamVjdE1hcCwgb3B0aW9uKSA9PiB7XG4gICAgICBhY2Nbb3B0aW9uLm5hbWVdID0gb3B0aW9uLnZhbHVlO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIHt9XG4gICk7XG4gIHJldHVybiBmbGF0dGVuT3B0aW9ucztcbn1cblxuY29uc3QgbGF1bmNoZXIgPSB7XG4gIGluc3RhbmNlczogW10gYXMgSW5zdGFuY2VbXSxcbiAgdGVybWluYXRlQWxsOiAoc2lnbmFsOiBOb2RlSlMuU2lnbmFscykgPT4ge1xuICAgIGxhdW5jaGVyLmluc3RhbmNlcy5mb3JFYWNoKChfaW5zdGFuY2U6IEluc3RhbmNlKSA9PiB7XG4gICAgICB0ZXJtaW5hbC5sb2coXG4gICAgICAgIGBUZXJtaW5hdGluZyBbJHtfaW5zdGFuY2UubmFtZX1dIGluc3RhbmNlLnBpZDogJHtfaW5zdGFuY2UucGlkfWBcbiAgICAgICk7XG4gICAgICBfaW5zdGFuY2Uua2lsbChzaWduYWwgfHwgXCJTSUdURVJNXCIpO1xuICAgIH0pO1xuICB9LFxufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhdW5jaChfb3B0aW9uczogT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYXJncyA9IF9vcHRpb25zLm1vZGUgPT09IFwiY2xpXCIgPyBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikgOiBbXTtcbiAgY29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnMoX29wdGlvbnMsIGFyZ3MpO1xuICBpZiAob3B0aW9ucy5lbnYpIHtcbiAgICBjb25zdCBlbnYgPVxuICAgICAgb3B0aW9ucy5lbnYgaW5zdGFuY2VvZiBBcnJheSA/IG9wdGlvbnMuZW52IDogb3B0aW9ucy5lbnYuc3BsaXQoXCIsXCIpO1xuICAgIGVudi5mb3JFYWNoKChlbGVtZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVsZW1lbnQuc3BsaXQoXCI9XCIpO1xuICAgICAgY29uc3QgaXNSZWZlcmVuY2UgPSB2YWx1ZS5pbmRleE9mKFwicHJvY2Vzcy5lbnYuXCIpID4gLTE7XG4gICAgICBwcm9jZXNzLmVudltrZXldID0gaXNSZWZlcmVuY2UgPyBwcm9jZXNzLmVudlt2YWx1ZS5zbGljZSgxMildIDogdmFsdWU7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgY21kcyA9XG4gICAgb3B0aW9ucy5jbWRzIHx8XG4gICAgcHJvY2Vzcy5hcmd2LnNsaWNlKDIpLmZpbHRlcigoYXJnKSA9PiBhcmcuaW5kZXhPZihcIi0tY3dkXCIpID09PSAtMSk7XG4gIGxldCBjd2QgPSBiYXNlRGlyO1xuICBpZiAob3B0aW9ucy5jd2QpIHtcbiAgICBjd2QgPVxuICAgICAgb3B0aW9ucy5jd2RbMF0gPT09IFwiL1wiID8gb3B0aW9ucy5jd2QgOiBwYXRoLnJlc29sdmUoYmFzZURpciwgb3B0aW9ucy5jd2QpO1xuICB9XG5cbiAgaWYgKCFjbWRzIHx8IGNtZHMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc3QgaXNDbGkgPSBvcHRpb25zLm1vZGUgPT09IFwiY2xpXCI7XG4gICAgY29uc3QgdGl0bGUgPSBcIk9vcHMg8J+YrCwgRGlkIHlvdSBmb3Jnb3QgdG8gcGFzc1wiO1xuICAgIGlmIChpc0NsaSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHIoXG4gICAgICAgICAgYFxcbiAke3RpdGxlfSAke2JnUihcbiAgICAgICAgICAgIHcoXCIgcHJvZ3JhbSBcIilcbiAgICAgICAgICApfT8uIFBsZWFzZSB0ZWxsIG1lLCB3aGljaCBwcm9ncmFtIHlvdSB3YW50IHRvIGxhdW5jaCFcXG5gXG4gICAgICAgICkgKyBgXFxuICAgRXhhbXBsZTogbGF1bmNoIGVjaG8gXCJIZWxsbyBXb3JsZFwiXFxuYDtcbiAgICAgIHRlcm1pbmFsLmxvZyhtZXNzYWdlKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHIoXG4gICAgICAgICAgYCR7dGl0bGV9IG9wdGlvbiAke2JnUihcbiAgICAgICAgICAgIHcoXCIgY21kcyBcIilcbiAgICAgICAgICApfT8uIFBsZWFzZSB0ZWxsIG1lLCB3aGljaCBwcm9ncmFtIHlvdSB3YW50IHRvIGxhdW5jaCFcXG5gXG4gICAgICAgICkgKyBgXFxuICAgRXhhbXBsZTogbGF1bmNoKHtjbWRzOltcImVjaG9cIiwgXCJIZWxsbyBXb3JsZFwiXX0pO1xcbmA7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIHRlcm1pbmFsLmxvZyhcbiAgICAgIFwiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXCJcbiAgICApO1xuICAgIHRlcm1pbmFsLmxvZyhcIiMgIPCfmoAgIExhdW5jaGluZyAgIDogXCIgKyBjbWRzLmpvaW4oXCIgXCIpKTtcbiAgICB0ZXJtaW5hbC5sb2coXCIjICDwn5OCICBDV0QgICAgICAgICA6IFwiICsgY3dkKTtcbiAgICB0ZXJtaW5hbC5sb2coXG4gICAgICBcIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCB7IHN0ZGlvLCBzaGVsbCB9ID0gb3B0aW9ucztcblxuICBjb25zdCBpbnN0YW5jZSA9IDxJbnN0YW5jZT5zcGF3bihjbWRzWzBdLCBjbWRzLnNsaWNlKDEpLCB7XG4gICAgc3RkaW8sXG4gICAgY3dkLFxuICAgIHNoZWxsLFxuICB9KTtcbiAgaW5zdGFuY2UubmFtZSA9IGNtZHNbMF07XG5cbiAgbGF1bmNoZXIuaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuXG4gIGZ1bmN0aW9uIGV4aXQoc2lnbmFsOiBOb2RlSlMuU2lnbmFscykge1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgY3Vyc29yVG8ocHJvY2Vzcy5zdGRvdXQsIDApO1xuICAgICAgdGVybWluYWwubG9nKGBLaWxsaW5nIFske2luc3RhbmNlLm5hbWV9XSBpbnN0YW5jZS5waWQ6ICR7aW5zdGFuY2UucGlkfWApO1xuICAgICAgaW5zdGFuY2Uua2lsbChzaWduYWwgfHwgXCJTSUdURVJNXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3Mub24oXCJTSUdJTlRcIiwgPGFueT5leGl0KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xuICAgIGxldCBsYXN0RXJyb3JEYXRhID0gXCJcIjtcbiAgICBpZiAoc3RkaW8gIT09IFwiaW5oZXJpdFwiKSB7XG4gICAgICBpZiAoaW5zdGFuY2Uuc3Rkb3V0KSB7XG4gICAgICAgIGluc3RhbmNlLnN0ZG91dC5vbihcImRhdGFcIiwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBjb25zdCBkYXRhU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChkYXRhU3RyKSB7XG4gICAgICAgICAgICBvdXRwdXQgKz0gZGF0YVN0cjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLnN0ZGVycikge1xuICAgICAgICBpbnN0YW5jZS5zdGRlcnIub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgbGFzdEVycm9yRGF0YSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGluc3RhbmNlLm9uKFwiY2xvc2VcIiwgYXN5bmMgKGNvZGUpID0+IHtcbiAgICAgIGlmIChvcHRpb25zLmV4aXRQcm9jZXNzT25DbG9zZSkge1xuICAgICAgICB0ZXJtaW5hbC5sb2coYFske2luc3RhbmNlLm5hbWV9XSBleGl0IGNvZGU6JHtjb2RlfWApO1xuICAgICAgICBwcm9jZXNzLmV4aXQoY29kZSA/IGNvZGUgOiB1bmRlZmluZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVybWluYWwubG9nKGBbJHtpbnN0YW5jZS5uYW1lfV0gZXhpdCBjb2RlOiR7Y29kZX1gKTtcbiAgICAgICAgY29kZSA9PT0gMCA/IHJlc29sdmUob3V0cHV0KSA6IHJlamVjdChsYXN0RXJyb3JEYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxhdW5jaDtcbiIsImV4cG9ydCAqIGZyb20gXCIuL2xhdW5jaC1iYXNlXCI7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
|