@projectcor/maia-components 2.30.3-1 → 2.31.1-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/App.js +4 -2
  3. package/lib/components/atoms/MAIAInput/MAIAInput.js +73 -14
  4. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +121 -0
  5. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +197 -0
  6. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +157 -0
  7. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +123 -0
  8. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +115 -0
  9. package/lib/components/atoms/ReasoningBlock/index.js +3 -0
  10. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +54 -0
  11. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +391 -120
  12. package/lib/components/molecules/ChatAIMessages/newStyles.js +50 -18
  13. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +42 -21
  14. package/lib/components/molecules/MessageFeedback/styles.js +6 -2
  15. package/lib/context/global-context.js +1 -1
  16. package/lib/dev/DevReasoningTimeline.js +235 -0
  17. package/lib/dev/reasoningTraceMock.js +556 -0
  18. package/lib/hooks/useChatManager/useChatManager.js +97 -59
  19. package/lib/hooks/useChatMessages/useChatMessages.js +28 -27
  20. package/lib/hooks/useEvent.js +2 -1
  21. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  22. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -3
  23. package/lib/hooks/useProjectSummaryConfig.js +36 -17
  24. package/lib/hooks/useReasoningTrace/index.js +3 -0
  25. package/lib/hooks/useReasoningTrace/reasoningStore.js +142 -0
  26. package/lib/hooks/useReasoningTrace/useReasoningTrace.js +14 -0
  27. package/lib/lang/br/index.js +237 -31
  28. package/lib/lang/en/index.js +237 -31
  29. package/lib/lang/es/index.js +237 -31
  30. package/lib/lang/fr/index.js +237 -31
  31. package/lib/services/maia/Orchestrator/orchestrator.js +9 -7
  32. package/lib/services/utils/mapChatMessages.js +21 -18
  33. package/lib/store/sessions/sessionStreamManager.js +98 -51
  34. package/lib/store/sessions/sessions.types.js +1 -1
  35. package/lib/types/Chat.js +1 -1
  36. package/lib/types/reasoning.js +2 -0
  37. package/lib/utils/autoApproveStorage.js +26 -0
  38. package/lib/utils/hitlAnalytics.js +4 -3
  39. package/lib/utils/reasoningMappers.js +62 -0
  40. package/lib/utils/streamActivityMessages.js +106 -41
  41. package/package.json +1 -1
@@ -14,8 +14,9 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
14
14
  /* eslint-disable no-constant-condition */
15
15
  /* eslint-disable @typescript-eslint/no-explicit-any */
16
16
  import maia from '../../services/maia';
17
- import { getInitialStreamActivity, getThinkingLoadingMessage, getWritingStreamActivity, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity } from '../../utils/streamActivityMessages';
17
+ import { getInitialStreamActivity, getThinkingLoadingMessage, getWritingStreamActivity, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity, resolveToolActionLabel } from '../../utils/streamActivityMessages';
18
18
  import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
19
+ import { reasoningStore } from '../../hooks/useReasoningTrace';
19
20
  import { sessionStreamingText } from './sessionStreamingText';
20
21
  import { useSessionsStore } from './useSessionsStore';
21
22
  import { ensureSessionNotificationsInitialized } from './sessionNotifications';
@@ -42,7 +43,7 @@ var getActiveStreamCount = function getActiveStreamCount() {
42
43
  var parseSessionSSE = /*#__PURE__*/function () {
43
44
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response, active, params) {
44
45
  var _params$hitlExecution, _response$body, _data$error, _data$error2, _callbacks$onError, _data$error3, _data$error4;
45
- var sessionId, placeholderId, callbacks, t, hitlExecutionContext, pendingContent, throttleTimer, flushToStores, emitThrottled, flushPending, reader, decoder, buffer, accumulatedContent, hasStartedWriting, ensureWritingStarted, applyStreamChunk, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, data, chunk, _chunk, _callbacks$onApproval, isManualApproval, _t, _t2, _t3;
46
+ var sessionId, placeholderId, callbacks, t, hitlExecutionContext, pendingContent, throttleTimer, flushToStores, emitThrottled, flushPending, reader, decoder, buffer, accumulatedContent, hasStartedWriting, ensureWritingStarted, applyStreamChunk, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, data, thinkingDelta, stepTool, stepType, label, chunk, _chunk, _callbacks$onApproval, isPreApproved, _ref3, _t, _t2, _t3;
46
47
  return _regeneratorRuntime.wrap(function (_context) {
47
48
  while (1) switch (_context.prev = _context.next) {
48
49
  case 0:
@@ -107,7 +108,7 @@ var parseSessionSSE = /*#__PURE__*/function () {
107
108
  emitThrottled(accumulatedContent);
108
109
  };
109
110
  applyStreamComplete = function applyStreamComplete(payload) {
110
- var _payload$agent_id, _subagentRaw$resolved, _callbacks$onFinishSt;
111
+ var _payload$agent_id, _subagentRaw$resolved, _ref2, _callbacks$onFinishSt;
111
112
  var finalContent = payload.content || accumulatedContent;
112
113
  var sources = payload.sources || null;
113
114
  var memorySessionId = payload.memory_session_id || '';
@@ -122,8 +123,9 @@ var parseSessionSSE = /*#__PURE__*/function () {
122
123
  var completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
123
124
  var subagentRaw = payload.subagent;
124
125
  var resolvedContext = (_subagentRaw$resolved = subagentRaw === null || subagentRaw === void 0 ? void 0 : subagentRaw.resolved_context) !== null && _subagentRaw$resolved !== void 0 ? _subagentRaw$resolved : null;
126
+ var reasoning = (_ref2 = payload.reasoning) !== null && _ref2 !== void 0 ? _ref2 : null;
127
+ reasoningStore.finish(placeholderId, reasoning);
125
128
  flushPending();
126
- sessionStreamingText.clear(sessionId);
127
129
  store().patchMeta(sessionId, {
128
130
  isLoading: false,
129
131
  isWriting: false
@@ -137,14 +139,23 @@ var parseSessionSSE = /*#__PURE__*/function () {
137
139
  attachments: attachments,
138
140
  suggestions: suggestions,
139
141
  completedAgentId: completedAgentId,
140
- resolvedContext: resolvedContext
142
+ resolvedContext: resolvedContext,
143
+ reasoning: reasoning
141
144
  };
142
145
  (_callbacks$onFinishSt = callbacks.onFinishStream) === null || _callbacks$onFinishSt === void 0 || _callbacks$onFinishSt.call(callbacks, finishPayload);
146
+
147
+ // El texto en vivo NO se limpia acá a propósito. El placeholder se va con el
148
+ // `drop` que hace el consumidor, y con él su suscripción; vaciarlo antes lo
149
+ // dejaba montado y sin texto (altura 0) durante ~25ms: el flicker de fin de
150
+ // stream. No alcanza con diferirlo, porque este clear viaja en SyncLane
151
+ // (store externo) y el swap de mensajes en DefaultLane, así que siempre se
152
+ // cuela en el medio. El slot se libera en el próximo `start()` de la sesión,
153
+ // y en stop/error/approval/cambio de sesión, que sí llaman `clear`.
143
154
  };
144
155
  _context.prev = 2;
145
156
  case 3:
146
157
  if (!true) {
147
- _context.next = 28;
158
+ _context.next = 30;
148
159
  break;
149
160
  }
150
161
  if (!active.isStopped) {
@@ -152,7 +163,7 @@ var parseSessionSSE = /*#__PURE__*/function () {
152
163
  break;
153
164
  }
154
165
  reader.cancel();
155
- return _context.abrupt("continue", 28);
166
+ return _context.abrupt("continue", 30);
156
167
  case 4:
157
168
  _context.next = 5;
158
169
  return reader.read();
@@ -164,14 +175,14 @@ var parseSessionSSE = /*#__PURE__*/function () {
164
175
  _context.next = 6;
165
176
  break;
166
177
  }
167
- return _context.abrupt("continue", 28);
178
+ return _context.abrupt("continue", 30);
168
179
  case 6:
169
180
  if (!active.isStopped) {
170
181
  _context.next = 7;
171
182
  break;
172
183
  }
173
184
  reader.cancel();
174
- return _context.abrupt("continue", 28);
185
+ return _context.abrupt("continue", 30);
175
186
  case 7:
176
187
  buffer += decoder.decode(value, {
177
188
  stream: true
@@ -183,7 +194,7 @@ var parseSessionSSE = /*#__PURE__*/function () {
183
194
  _iterator.s();
184
195
  case 9:
185
196
  if ((_step = _iterator.n()).done) {
186
- _context.next = 24;
197
+ _context.next = 26;
187
198
  break;
188
199
  }
189
200
  line = _step.value;
@@ -191,23 +202,27 @@ var parseSessionSSE = /*#__PURE__*/function () {
191
202
  _context.next = 10;
192
203
  break;
193
204
  }
194
- return _context.abrupt("continue", 23);
205
+ return _context.abrupt("continue", 25);
195
206
  case 10:
196
207
  _line$split = line.split('\n'), _line$split2 = _slicedToArray(_line$split, 2), eventLine = _line$split2[0], dataLine = _line$split2[1];
197
208
  if (!(!eventLine || !dataLine)) {
198
209
  _context.next = 11;
199
210
  break;
200
211
  }
201
- return _context.abrupt("continue", 23);
212
+ return _context.abrupt("continue", 25);
202
213
  case 11:
203
214
  eventType = eventLine.replace('event: ', '').trim();
204
215
  dataStr = dataLine.replace('data: ', '').trim();
205
216
  _context.prev = 12;
206
217
  data = JSON.parse(dataStr);
207
218
  _t = eventType;
208
- _context.next = _t === 'thinking' ? 13 : _t === 'token' ? 14 : _t === 'content' ? 15 : _t === 'node' ? 16 : _t === 'complete' ? 17 : _t === 'approval_required' ? 18 : _t === 'error' ? 19 : 20;
219
+ _context.next = _t === 'thinking' ? 13 : _t === 'answer_reset' ? 14 : _t === 'reasoning_step' ? 15 : _t === 'token' ? 16 : _t === 'content' ? 17 : _t === 'node' ? 18 : _t === 'complete' ? 19 : _t === 'approval_required' ? 20 : _t === 'error' ? 21 : 22;
209
220
  break;
210
221
  case 13:
222
+ thinkingDelta = typeof data.delta === 'string' ? data.delta : '';
223
+ if (typeof data.i === 'number' && thinkingDelta) {
224
+ reasoningStore.appendThinking(placeholderId, data.i, thinkingDelta);
225
+ }
211
226
  if (!hasStartedWriting) {
212
227
  store().patchMeta(sessionId, {
213
228
  isLoading: true
@@ -218,21 +233,49 @@ var parseSessionSSE = /*#__PURE__*/function () {
218
233
  message: getThinkingLoadingMessage(0, t)
219
234
  });
220
235
  }
221
- return _context.abrupt("continue", 21);
236
+ return _context.abrupt("continue", 23);
222
237
  case 14:
238
+ if (throttleTimer != null) {
239
+ window.clearTimeout(throttleTimer);
240
+ throttleTimer = null;
241
+ }
242
+ pendingContent = null;
243
+ accumulatedContent = '';
244
+ flushToStores('');
245
+ return _context.abrupt("continue", 23);
246
+ case 15:
247
+ stepTool = typeof data.tool === 'string' ? data.tool : '';
248
+ stepType = typeof data.type === 'string' ? data.type : '';
249
+ if (stepTool && stepType !== 'handoff' && data.status === 'running') {
250
+ label = resolveToolActionLabel(stepTool, t, 'present');
251
+ if (label) {
252
+ store().patchMeta(sessionId, {
253
+ isLoading: true
254
+ });
255
+ store().setActivity(sessionId, {
256
+ phase: 'action',
257
+ message: label
258
+ });
259
+ }
260
+ }
261
+ if (typeof data.i === 'number') {
262
+ reasoningStore.applyStep(placeholderId, data);
263
+ }
264
+ return _context.abrupt("continue", 23);
265
+ case 16:
223
266
  chunk = typeof data.content === 'string' ? data.content : '';
224
267
  ensureWritingStarted();
225
268
  applyStreamChunk(chunk);
226
- return _context.abrupt("continue", 21);
227
- case 15:
269
+ return _context.abrupt("continue", 23);
270
+ case 17:
228
271
  _chunk = typeof data.content === 'string' ? data.content : '';
229
272
  ensureWritingStarted();
230
273
  applyStreamChunk(_chunk);
231
274
  if (isCompleteLikeSsePayload(data)) {
232
275
  applyStreamComplete(data);
233
276
  }
234
- return _context.abrupt("continue", 21);
235
- case 16:
277
+ return _context.abrupt("continue", 23);
278
+ case 18:
236
279
  if (data.node === 'agent_transfer') {
237
280
  store().patchMeta(sessionId, {
238
281
  isLoading: true
@@ -245,17 +288,20 @@ var parseSessionSSE = /*#__PURE__*/function () {
245
288
  store().setStatus(sessionId, 'thinking');
246
289
  store().setActivity(sessionId, resolveHitlNodeStreamActivity(data.message, t, hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : undefined, typeof data.thread_id === 'string' ? data.thread_id : undefined));
247
290
  }
248
- return _context.abrupt("continue", 21);
249
- case 17:
291
+ return _context.abrupt("continue", 23);
292
+ case 19:
250
293
  applyStreamComplete(data);
251
- return _context.abrupt("continue", 21);
252
- case 18:
294
+ return _context.abrupt("continue", 23);
295
+ case 20:
253
296
  flushPending();
254
- isManualApproval = data.manual_approval_detected === true;
297
+ // Preaprobado (auto-approve o detección manual): el stream no se corta,
298
+ // sigue ejecutando las acciones sin esperar decisión del usuario.
299
+ isPreApproved = data.manual_approval_detected === true || data.auto_approved === true || data.approval_status === 'approved';
255
300
  store().patchMeta(sessionId, {
256
301
  isWriting: false
257
302
  });
258
- if (!isManualApproval) {
303
+ if (!isPreApproved) {
304
+ reasoningStore.finish(placeholderId, (_ref3 = data.reasoning) !== null && _ref3 !== void 0 ? _ref3 : null);
259
305
  store().patchMeta(sessionId, {
260
306
  isLoading: false
261
307
  });
@@ -264,15 +310,15 @@ var parseSessionSSE = /*#__PURE__*/function () {
264
310
  }
265
311
  store().setStatus(sessionId, 'awaiting_approval');
266
312
  (_callbacks$onApproval = callbacks.onApprovalRequired) === null || _callbacks$onApproval === void 0 || _callbacks$onApproval.call(callbacks, data, accumulatedContent);
267
- if (isManualApproval && Array.isArray(data.pending_actions) && data.pending_actions.length > 0) {
313
+ if (isPreApproved && Array.isArray(data.pending_actions) && data.pending_actions.length > 0) {
268
314
  store().patchMeta(sessionId, {
269
315
  isLoading: true
270
316
  });
271
317
  store().setStatus(sessionId, 'thinking');
272
318
  store().setActivity(sessionId, resolveInitialHitlStreamActivity(t, hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : undefined));
273
319
  }
274
- return _context.abrupt("continue", 21);
275
- case 19:
320
+ return _context.abrupt("continue", 23);
321
+ case 21:
276
322
  console.error('SSE Error:', data.error);
277
323
  flushPending();
278
324
  sessionStreamingText.clear(sessionId);
@@ -287,43 +333,43 @@ var parseSessionSSE = /*#__PURE__*/function () {
287
333
  });
288
334
  store().setStatus(sessionId, 'error');
289
335
  (_callbacks$onError = callbacks.onError) === null || _callbacks$onError === void 0 || _callbacks$onError.call(callbacks, (_data$error3 = data.error) === null || _data$error3 === void 0 ? void 0 : _data$error3.type, (_data$error4 = data.error) === null || _data$error4 === void 0 ? void 0 : _data$error4.message);
290
- return _context.abrupt("continue", 21);
291
- case 20:
336
+ return _context.abrupt("continue", 23);
337
+ case 22:
292
338
  console.warn('Unknown SSE event type:', eventType);
293
- return _context.abrupt("continue", 21);
294
- case 21:
295
- _context.next = 23;
339
+ return _context.abrupt("continue", 23);
340
+ case 23:
341
+ _context.next = 25;
296
342
  break;
297
- case 22:
298
- _context.prev = 22;
343
+ case 24:
344
+ _context.prev = 24;
299
345
  _t2 = _context["catch"](12);
300
346
  console.error('Error parsing SSE data:', _t2, dataStr);
301
- case 23:
347
+ case 25:
302
348
  _context.next = 9;
303
349
  break;
304
- case 24:
305
- _context.next = 26;
350
+ case 26:
351
+ _context.next = 28;
306
352
  break;
307
- case 25:
308
- _context.prev = 25;
353
+ case 27:
354
+ _context.prev = 27;
309
355
  _t3 = _context["catch"](8);
310
356
  _iterator.e(_t3);
311
- case 26:
312
- _context.prev = 26;
313
- _iterator.f();
314
- return _context.finish(26);
315
- case 27:
316
- _context.next = 3;
317
- break;
318
357
  case 28:
319
358
  _context.prev = 28;
320
- flushPending();
359
+ _iterator.f();
321
360
  return _context.finish(28);
322
361
  case 29:
362
+ _context.next = 3;
363
+ break;
364
+ case 30:
365
+ _context.prev = 30;
366
+ flushPending();
367
+ return _context.finish(30);
368
+ case 31:
323
369
  case "end":
324
370
  return _context.stop();
325
371
  }
326
- }, _callee, null, [[2,, 28, 29], [8, 25, 26, 27], [12, 22]]);
372
+ }, _callee, null, [[2,, 30, 31], [8, 27, 28, 29], [12, 24]]);
327
373
  }));
328
374
  return function parseSessionSSE(_x, _x2, _x3) {
329
375
  return _ref.apply(this, arguments);
@@ -388,6 +434,7 @@ export var sessionStreamManager = {
388
434
  } : {}));
389
435
  store().setStatus(sessionId, 'thinking');
390
436
  sessionStreamingText.start(sessionId, placeholderId);
437
+ reasoningStore.start(placeholderId);
391
438
  store().setActivity(sessionId, getInitialStreamActivity(t, activityOptions !== null && activityOptions !== void 0 ? activityOptions : {}));
392
439
  _context2.prev = 3;
393
440
  _context2.next = 4;
@@ -429,7 +476,7 @@ export var sessionStreamManager = {
429
476
  },
430
477
  /** Resume HITL (`continue-thread`) keyed por sessionId — mismo motor que orchestrator. */startContinueStream: function startContinueStream(params) {
431
478
  return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
432
- var _ref2;
479
+ var _ref4;
433
480
  var sessionId, placeholderId, continueRequest, callbacks, t, hitlExecutionContext, agentId, agentName, controller, active, sseParams, response, _callbacks$onError3, _t5;
434
481
  return _regeneratorRuntime.wrap(function (_context3) {
435
482
  while (1) switch (_context3.prev = _context3.next) {
@@ -477,7 +524,7 @@ export var sessionStreamManager = {
477
524
  } : {}));
478
525
  store().setStatus(sessionId, 'thinking');
479
526
  sessionStreamingText.start(sessionId, placeholderId);
480
- store().setActivity(sessionId, resolveInitialHitlStreamActivity(t, (_ref2 = hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : sessionHitlContext.get(sessionId)) !== null && _ref2 !== void 0 ? _ref2 : undefined));
527
+ store().setActivity(sessionId, resolveInitialHitlStreamActivity(t, (_ref4 = hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : sessionHitlContext.get(sessionId)) !== null && _ref4 !== void 0 ? _ref4 : undefined));
481
528
  sseParams = {
482
529
  sessionId: sessionId,
483
530
  placeholderId: placeholderId,
@@ -712,4 +759,4 @@ export var sessionStreamManager = {
712
759
  });
713
760
  }
714
761
  };
715
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQiLCJtZXJnZVN0cmVhbUNodW5rIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJTVFJFQU1fVEhST1RUTEVfTVMiLCJhY3RpdmVTdHJlYW1zIiwiTWFwIiwic3RvcmUiLCJnZXRTdGF0ZSIsImlzU3RyZWFtQWN0aXZlIiwic2Vzc2lvbklkIiwiaGFzIiwiZ2V0QWN0aXZlU3RyZWFtQ291bnQiLCJzaXplIiwicGFyc2VTZXNzaW9uU1NFIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJhY3RpdmUiLCJwYXJhbXMiLCJfcGFyYW1zJGhpdGxFeGVjdXRpb24iLCJfcmVzcG9uc2UkYm9keSIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwiX2NhbGxiYWNrcyRvbkVycm9yIiwiX2RhdGEkZXJyb3IzIiwiX2RhdGEkZXJyb3I0IiwicGxhY2Vob2xkZXJJZCIsImNhbGxiYWNrcyIsInQiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsInBlbmRpbmdDb250ZW50IiwidGhyb3R0bGVUaW1lciIsImZsdXNoVG9TdG9yZXMiLCJlbWl0VGhyb3R0bGVkIiwiZmx1c2hQZW5kaW5nIiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImhhc1N0YXJ0ZWRXcml0aW5nIiwiZW5zdXJlV3JpdGluZ1N0YXJ0ZWQiLCJhcHBseVN0cmVhbUNodW5rIiwiYXBwbHlTdHJlYW1Db21wbGV0ZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJsaW5lIiwiX2xpbmUkc3BsaXQiLCJfbGluZSRzcGxpdDIiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsImRhdGFTdHIiLCJkYXRhIiwiY2h1bmsiLCJfY2h1bmsiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJpc01hbnVhbEFwcHJvdmFsIiwiX3QiLCJfdDIiLCJfdDMiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImdldCIsImNvbnRlbnQiLCJfY2FsbGJhY2tzJG9uU3RyZWFtVXAiLCJzZXRUZXh0Iiwib25TdHJlYW1VcGRhdGUiLCJjYWxsIiwid2luZG93Iiwic2V0VGltZW91dCIsInRvRW1pdCIsImNsZWFyVGltZW91dCIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwiX2NhbGxiYWNrcyRvblN0YXJ0V3JpIiwicGF0Y2hNZXRhIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwic2V0U3RhdHVzIiwic2V0QWN0aXZpdHkiLCJvblN0YXJ0V3JpdGluZyIsInBheWxvYWQiLCJfcGF5bG9hZCRhZ2VudF9pZCIsIl9zdWJhZ2VudFJhdyRyZXNvbHZlZCIsIl9jYWxsYmFja3Mkb25GaW5pc2hTdCIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsImF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5Iiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImFnZW50X2lkIiwiYWdlbnRJZCIsImNvbXBsZXRlZEFnZW50SWQiLCJTdHJpbmciLCJ0cmltIiwic3ViYWdlbnRSYXciLCJzdWJhZ2VudCIsInJlc29sdmVkQ29udGV4dCIsInJlc29sdmVkX2NvbnRleHQiLCJjbGVhciIsImZpbmlzaFBheWxvYWQiLCJvbkZpbmlzaFN0cmVhbSIsImlzU3RvcHBlZCIsImNhbmNlbCIsImFicnVwdCIsInJlYWQiLCJzZW50IiwiZGVjb2RlIiwic3RyZWFtIiwic3BsaXQiLCJwb3AiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJuIiwiX3NsaWNlZFRvQXJyYXkiLCJyZXBsYWNlIiwiSlNPTiIsInBhcnNlIiwicGhhc2UiLCJtZXNzYWdlIiwibm9kZSIsInVuZGVmaW5lZCIsInRocmVhZF9pZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsIm9uQXBwcm92YWxSZXF1aXJlZCIsInBlbmRpbmdfYWN0aW9ucyIsImxlbmd0aCIsImNvbnNvbGUiLCJlcnJvciIsInNldEVycm9yIiwidHlwZSIsIm9uRXJyb3IiLCJ3YXJuIiwiZSIsImYiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiaXNBY3RpdmUiLCJnZXRBY3RpdmVDb3VudCIsImdldEFjdGl2ZVNlc3Npb25JZHMiLCJmcm9tIiwia2V5cyIsInN0YXJ0U3RyZWFtIiwiX2NhbGxlZTIiLCJyZXF1ZXN0IiwiYWN0aXZpdHlPcHRpb25zIiwiYWdlbnROYW1lIiwiY29udHJvbGxlciIsIl9jYWxsYmFja3Mkb25FcnJvcjIiLCJfdDQiLCJfY29udGV4dDIiLCJzdGFydGVkIiwicmVhc29uIiwiQWJvcnRDb250cm9sbGVyIiwic2V0IiwiZW5zdXJlU2Vzc2lvbiIsIl9vYmplY3RTcHJlYWQiLCJzdGFydCIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsInNpZ25hbCIsInN0YXJ0Q29udGludWVTdHJlYW0iLCJfY2FsbGVlMyIsIl9yZWYyIiwiY29udGludWVSZXF1ZXN0Iiwic3NlUGFyYW1zIiwiX2NhbGxiYWNrcyRvbkVycm9yMyIsIl90NSIsIl9jb250ZXh0MyIsImNvbnRpbnVlVGhyZWFkIiwib2siLCJjb25jYXQiLCJzdGF0dXMiLCJzdGFydFJldHJ5U3RyZWFtIiwiX2NhbGxlZTQiLCJyZXRyeVJlcXVlc3QiLCJkZXRhaWwiLCJfY2FsbGJhY2tzJG9uRXJyb3I0IiwiX3Q2IiwiX3Q3IiwiX2NvbnRleHQ0IiwicmV0cnlDb21wbGV0aW9uIiwianNvbiIsInN0b3BTdHJlYW0iLCJfY2FsbGJhY2tzJG9uU3RvcCIsImFib3J0IiwicGFydGlhbFRleHQiLCJnZXRTbmFwc2hvdCIsInRleHQiLCJvblN0b3AiLCJhYm9ydFNpbGVudGx5IiwiX3N0b3JlJGdldE1ldGEiLCJnZXRNZXRhIiwiYWJvcnRBbGwiLCJfdGhpcyIsImZvckVhY2giXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbU1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zdGFudC1jb25kaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgdHlwZSB7IEFwcHJvdmFsUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQge1xuICBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHksXG4gIGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UsXG4gIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5LFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHR5cGUgeyBIaXRsRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQsIG1lcmdlU3RyZWFtQ2h1bmsgfSBmcm9tICcuLi8uLi91dGlscy9zc2VTdHJlYW1Db250ZW50J1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbWluZ1RleHQgfSBmcm9tICcuL3Nlc3Npb25TdHJlYW1pbmdUZXh0J1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4vdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQgfSBmcm9tICcuL3Nlc3Npb25Ob3RpZmljYXRpb25zJ1xuaW1wb3J0IHsgc2Vzc2lvbkhpdGxDb250ZXh0IH0gZnJvbSAnLi9zZXNzaW9uSGl0bENvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFNlc3Npb25GaW5pc2hQYXlsb2FkLCBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzLCBTdGFydFN0cmVhbVJlc3VsdCB9IGZyb20gJy4vc2Vzc2lvbnMudHlwZXMnXG5cbnR5cGUgT3JjaGVzdHJhdG9yUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcj5bMF1cbnR5cGUgQ29udGludWVUaHJlYWRSZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQ+WzBdXG50eXBlIFJldHJ5Q29tcGxldGlvblJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24+WzBdXG5cbi8qKiBDb21wYXRpYmxlIGNvbiBlbCBgdGAgZGUgaTE4bmV4dCAodXNvIGRlIHVuYSBzb2xhIGtleSkuICovXG50eXBlIFRyYW5zbGF0ZUZuID0gKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcblxudHlwZSBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIHJlcXVlc3Q6IE9yY2hlc3RyYXRvclJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGFjdGl2aXR5T3B0aW9ucz86IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4gIGhpdGxFeGVjdXRpb25Db250ZXh0PzogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgU3RhcnRDb250aW51ZVN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIGNvbnRpbnVlUmVxdWVzdDogQ29udGludWVUaHJlYWRSZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBoaXRsRXhlY3V0aW9uQ29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbFxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIFN0YXJ0UmV0cnlTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICByZXRyeVJlcXVlc3Q6IFJldHJ5Q29tcGxldGlvblJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGFjdGl2aXR5T3B0aW9ucz86IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgQWN0aXZlU3RyZWFtID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXJcbiAgaXNTdG9wcGVkOiBib29sZWFuXG59XG5cbi8qKlxuICogTcOheGltbyBkZSBzZXNpb25lcyBnZW5lcmFuZG8gZW4gcGFyYWxlbG8uIFByb3RlZ2UgcmVkL3JlY3Vyc29zIGRlbCBjbGllbnRlLlxuICogQWp1c3RhYmxlIGEgZnV0dXJvIHbDrWEgZmxhZyBkZWwgaG9zdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgPSA0XG5cbmNvbnN0IFNUUkVBTV9USFJPVFRMRV9NUyA9IDE2XG5cbmNvbnN0IGFjdGl2ZVN0cmVhbXMgPSBuZXcgTWFwPHN0cmluZywgQWN0aXZlU3RyZWFtPigpXG5cbmNvbnN0IHN0b3JlID0gKCkgPT4gdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpXG5cbmNvbnN0IGlzU3RyZWFtQWN0aXZlID0gKHNlc3Npb25JZDogc3RyaW5nKTogYm9vbGVhbiA9PiBhY3RpdmVTdHJlYW1zLmhhcyhzZXNzaW9uSWQpXG5cbmNvbnN0IGdldEFjdGl2ZVN0cmVhbUNvdW50ID0gKCk6IG51bWJlciA9PiBhY3RpdmVTdHJlYW1zLnNpemVcblxuY29uc3QgcGFyc2VTZXNzaW9uU1NFID0gYXN5bmMgKHJlc3BvbnNlOiBSZXNwb25zZSwgYWN0aXZlOiBBY3RpdmVTdHJlYW0sIHBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNhbGxiYWNrcywgdCB9ID0gcGFyYW1zXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0ID0gcGFyYW1zLmhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHNlc3Npb25IaXRsQ29udGV4dC5nZXQoc2Vzc2lvbklkKVxuXG4gIGxldCBwZW5kaW5nQ29udGVudDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IHRocm90dGxlVGltZXI6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgY29uc3QgZmx1c2hUb1N0b3JlcyA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zZXRUZXh0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGVudClcbiAgICBjYWxsYmFja3Mub25TdHJlYW1VcGRhdGU/Lihjb250ZW50KVxuICB9XG5cbiAgY29uc3QgZW1pdFRocm90dGxlZCA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICBwZW5kaW5nQ29udGVudCA9IGNvbnRlbnRcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSByZXR1cm5cbiAgICB0aHJvdHRsZVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICBmbHVzaFRvU3RvcmVzKHRvRW1pdClcbiAgICAgIH1cbiAgICB9LCBTVFJFQU1fVEhST1RUTEVfTVMpXG4gIH1cblxuICBjb25zdCBmbHVzaFBlbmRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aHJvdHRsZVRpbWVyKVxuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICB9XG4gICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgIGZsdXNoVG9TdG9yZXModG9FbWl0KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBoYXNTdGFydGVkV3JpdGluZyA9IGZhbHNlXG5cbiAgY29uc3QgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQgPSAoKSA9PiB7XG4gICAgaWYgKGhhc1N0YXJ0ZWRXcml0aW5nKSByZXR1cm5cbiAgICBoYXNTdGFydGVkV3JpdGluZyA9IHRydWVcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlLCBpc1dyaXRpbmc6IHRydWUgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd3cml0aW5nJylcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5KHQpKVxuICAgIGNhbGxiYWNrcy5vblN0YXJ0V3JpdGluZz8uKClcbiAgfVxuXG4gIGNvbnN0IGFwcGx5U3RyZWFtQ2h1bmsgPSAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgIGlmICghY2h1bmspIHJldHVyblxuICAgIGFjY3VtdWxhdGVkQ29udGVudCA9IG1lcmdlU3RyZWFtQ2h1bmsoYWNjdW11bGF0ZWRDb250ZW50LCBjaHVuaylcbiAgICBlbWl0VGhyb3R0bGVkKGFjY3VtdWxhdGVkQ29udGVudClcbiAgfVxuXG4gIGNvbnN0IGFwcGx5U3RyZWFtQ29tcGxldGUgPSAocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAocGF5bG9hZC5jb250ZW50IGFzIHN0cmluZykgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgY29uc3Qgc291cmNlcyA9IHBheWxvYWQuc291cmNlcyB8fCBudWxsXG4gICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKHBheWxvYWQubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLmF0dGFjaG1lbnRzKSA/IHBheWxvYWQuYXR0YWNobWVudHMgOiBudWxsXG4gICAgbGV0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0X3JlcGx5KSkge1xuICAgICAgc3VnZ2VzdGlvbnMgPSBwYXlsb2FkLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW11cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0aW9ucykpIHtcbiAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXVxuICAgIH1cbiAgICBjb25zdCBhZ2VudElkUmF3ID0gcGF5bG9hZC5hZ2VudF9pZCA/PyBwYXlsb2FkLmFnZW50SWRcbiAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID0gYWdlbnRJZFJhdyAhPSBudWxsICYmIFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgIT09ICcnID8gU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSA6IG51bGxcbiAgICBjb25zdCBzdWJhZ2VudFJhdyA9IHBheWxvYWQuc3ViYWdlbnQgYXMgeyByZXNvbHZlZF9jb250ZXh0PzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuICAgIGNvbnN0IHJlc29sdmVkQ29udGV4dCA9IHN1YmFnZW50UmF3Py5yZXNvbHZlZF9jb250ZXh0ID8/IG51bGxcblxuICAgIGZsdXNoUGVuZGluZygpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnY29tcGxldGUnKVxuXG4gICAgY29uc3QgZmluaXNoUGF5bG9hZDogU2Vzc2lvbkZpbmlzaFBheWxvYWQgPSB7XG4gICAgICBjb250ZW50OiBmaW5hbENvbnRlbnQsXG4gICAgICBzb3VyY2VzLFxuICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgYXR0YWNobWVudHMsXG4gICAgICBzdWdnZXN0aW9ucyxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQsXG4gICAgICByZXNvbHZlZENvbnRleHQsXG4gICAgfVxuICAgIGNhbGxiYWNrcy5vbkZpbmlzaFN0cmVhbT8uKGZpbmlzaFBheWxvYWQpXG4gIH1cblxuICB0cnkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgaWYgKGRvbmUpIGJyZWFrXG5cbiAgICAgIGlmIChhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gICAgICAgIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgY29udGludWVcblxuICAgICAgICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgICAgICAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG5cbiAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndGhpbmtpbmcnOlxuICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgeyBwaGFzZTogJ3RoaW5raW5nJywgbWVzc2FnZTogZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSgwLCB0KSB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdjb250ZW50Jzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1Db21wbGV0ZShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICBpZiAoZGF0YS5ub2RlID09PSAnYWdlbnRfdHJhbnNmZXInKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhLnRocmVhZF9pZCA9PT0gJ3N0cmluZycgPyBkYXRhLnRocmVhZF9pZCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOiB7XG4gICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgIGNvbnN0IGlzTWFudWFsQXBwcm92YWwgPSBkYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBpZiAoIWlzTWFudWFsQXBwcm92YWwpIHtcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdhd2FpdGluZ19hcHByb3ZhbCcpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihkYXRhIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICBpZiAoaXNNYW51YWxBcHByb3ZhbCAmJiBBcnJheS5pc0FycmF5KGRhdGEucGVuZGluZ19hY3Rpb25zKSAmJiBkYXRhLnBlbmRpbmdfYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gdW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBkYXRhLmVycm9yKVxuICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldEVycm9yKHNlc3Npb25JZCwgeyB0eXBlOiBkYXRhLmVycm9yPy50eXBlLCBtZXNzYWdlOiBkYXRhLmVycm9yPy5tZXNzYWdlIH0pXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LihkYXRhLmVycm9yPy50eXBlLCBkYXRhLmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBmbHVzaFBlbmRpbmcoKVxuICB9XG59XG5cbi8qKlxuICogTWFuYWdlciBzaW5nbGV0b24gKG1vZHVsZS1sZXZlbCkgcXVlIGNvcnJlIE4gc3RyZWFtcyBkZWwgb3JjaGVzdHJhdG9yIGVuXG4gKiBwYXJhbGVsbywgdW5vIHBvciBgc2Vzc2lvbklkYC4gU29icmV2aXZlIGEgY2FtYmlvcyBkZSB2aXN0YSB5IGFsIGNpZXJyZSBkZWxcbiAqIG1vZGFsOiBsb3Mgc3RyZWFtcyBzb2xvIHNlIGNhbmNlbGFuIGNvbiBzdG9wIGV4cGzDrWNpdG8gZGVsIHVzdWFyaW8gbyBhbFxuICogY29tcGxldGFyL2Vycm9yYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXNzaW9uU3RyZWFtTWFuYWdlciA9IHtcbiAgaXNBY3RpdmU6IGlzU3RyZWFtQWN0aXZlLFxuICBnZXRBY3RpdmVDb3VudDogZ2V0QWN0aXZlU3RyZWFtQ291bnQsXG4gIGdldEFjdGl2ZVNlc3Npb25JZHM6ICgpOiBzdHJpbmdbXSA9PiBBcnJheS5mcm9tKGFjdGl2ZVN0cmVhbXMua2V5cygpKSxcblxuICBhc3luYyBzdGFydFN0cmVhbShwYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIHJlcXVlc3QsIGNhbGxiYWNrcywgdCwgYWN0aXZpdHlPcHRpb25zLCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwgYWN0aXZpdHlPcHRpb25zID8/IHt9KSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihyZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBwYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIFJlc3VtZSBISVRMIChgY29udGludWUtdGhyZWFkYCkga2V5ZWQgcG9yIHNlc3Npb25JZCDigJQgbWlzbW8gbW90b3IgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRDb250aW51ZVN0cmVhbShwYXJhbXM6IFN0YXJ0Q29udGludWVTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGludWVSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGhpdGxFeGVjdXRpb25Db250ZXh0LCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBpZiAoaGl0bEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgIHNlc3Npb25IaXRsQ29udGV4dC5zZXQoc2Vzc2lvbklkLCBoaXRsRXhlY3V0aW9uQ29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSh0LCBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZCkgPz8gdW5kZWZpbmVkKVxuICAgIClcblxuICAgIGNvbnN0IHNzZVBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgcmVxdWVzdDoge30gYXMgT3JjaGVzdHJhdG9yUmVxdWVzdCxcbiAgICAgIGNhbGxiYWNrcyxcbiAgICAgIHQsXG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dDogaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gc2Vzc2lvbkhpdGxDb250ZXh0LmdldChzZXNzaW9uSWQpLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZChjb250aW51ZVJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnRpbnVlLXRocmVhZCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgc3NlUGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgICAgc2Vzc2lvbkhpdGxDb250ZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogUmVnZW5lcmEgbGEgcmVzcHVlc3RhIGRlIHVuIHR1cm5vIChgcmV0cnlfY29tcGxldGlvbmApIOKAlCBtaXNtbyBtb3RvciBTU0UgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRSZXRyeVN0cmVhbShwYXJhbXM6IFN0YXJ0UmV0cnlTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgcmV0cnlSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGFjdGl2aXR5T3B0aW9ucywgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGlmIChpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnYWxyZWFkeV9hY3RpdmUnIH1cbiAgICB9XG4gICAgaWYgKGdldEFjdGl2ZVN0cmVhbUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2xpbWl0JyB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi4oYWdlbnRJZCAhPSBudWxsID8geyBhZ2VudElkIH0gOiB7fSksXG4gICAgICAuLi4oYWdlbnROYW1lICE9IG51bGwgPyB7IGFnZW50TmFtZSB9IDoge30pLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIGFjdGl2aXR5T3B0aW9ucyA/PyB7fSkpXG5cbiAgICBjb25zdCBzc2VQYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIHJlcXVlc3Q6IHt9IGFzIE9yY2hlc3RyYXRvclJlcXVlc3QsXG4gICAgICBjYWxsYmFja3MsXG4gICAgICB0LFxuICAgICAgYWN0aXZpdHlPcHRpb25zLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24ocmV0cnlSZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgbGV0IGRldGFpbDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGRldGFpbD86IHN0cmluZyB9XG4gICAgICAgICAgICBkZXRhaWwgPSB0eXBlb2YgZGF0YS5kZXRhaWwgPT09ICdzdHJpbmcnID8gZGF0YS5kZXRhaWwgOiB1bmRlZmluZWRcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGRldGFpbCA9IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGV0YWlsID09PSAnVHVybiBub3QgZm91bmQnKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSwgcGxhY2Vob2xkZXJJZDogbnVsbCB9KVxuICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICd0dXJuX25vdF9mb3VuZCcgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJldHJ5X2NvbXBsZXRpb24gZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgICAgfVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHNzZVBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LigpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogQ2FuY2VsYWNpw7NuIGV4cGzDrWNpdGEgZGVsIHVzdWFyaW8gKG1lbnNhamUgXCJjYW5jZWxhZG9cIikuICovXG4gIHN0b3BTdHJlYW0oc2Vzc2lvbklkOiBzdHJpbmcsIGNhbGxiYWNrcz86IFNlc3Npb25TdHJlYW1DYWxsYmFja3MpIHtcbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVTdHJlYW1zLmdldChzZXNzaW9uSWQpXG4gICAgaWYgKCFhY3RpdmUpIHJldHVyblxuICAgIGFjdGl2ZS5pc1N0b3BwZWQgPSB0cnVlXG4gICAgYWN0aXZlLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAvLyBFbCBwYXJjaWFsIHNlIHJlc2NhdGEgYW50ZXMgZGUgbGltcGlhcjogZWwgYmFja2VuZCBsbyBwZXJzaXN0ZSwgcGVybyBzaSBubyBsb1xuICAgIC8vIHBhc2Ftb3MgYWwgY2FsbGJhY2sgZGVzYXBhcmVjZSBkZSBwYW50YWxsYSBoYXN0YSBlbCBwcsOzeGltbyBmZXRjaCBkZSBsYSBzZXNpw7NuLlxuICAgIGNvbnN0IHBhcnRpYWxUZXh0ID0gc2Vzc2lvblN0cmVhbWluZ1RleHQuZ2V0U25hcHNob3Qoc2Vzc2lvbklkKS50ZXh0XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnY2FuY2VsbGVkJylcbiAgICBjYWxsYmFja3M/Lm9uU3RvcD8uKHBhcnRpYWxUZXh0KVxuICB9LFxuXG4gIC8qKiBBYm9ydGEgc2luIG1hcmNhciBcImNhbmNlbGFkb1wiICh1c28gaW50ZXJubyAvIGxpbXBpZXphKS4gKi9cbiAgYWJvcnRTaWxlbnRseShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVN0cmVhbXMuZ2V0KHNlc3Npb25JZClcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuXG4gICAgYWN0aXZlLmlzU3RvcHBlZCA9IHRydWVcbiAgICBhY3RpdmUuY29udHJvbGxlci5hYm9ydCgpXG4gICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIGlmIChzdG9yZSgpLmdldE1ldGEoc2Vzc2lvbklkKT8uc3RhdHVzICE9PSAnY29tcGxldGUnKSB7XG4gICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICB9XG4gIH0sXG5cbiAgYWJvcnRBbGwoKSB7XG4gICAgQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSkuZm9yRWFjaChzZXNzaW9uSWQgPT4gdGhpcy5hYm9ydFNpbGVudGx5KHNlc3Npb25JZCkpXG4gIH0sXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLElBQUksTUFBTSxxQkFBcUI7QUFFdEMsU0FDRUMsd0JBQXdCLEVBQ3hCQyx5QkFBeUIsRUFDekJDLHdCQUF3QixFQUN4QkMsNkJBQTZCLEVBQzdCQyxnQ0FBZ0MsUUFDM0Isb0NBQW9DO0FBRTNDLFNBQVNDLHdCQUF3QixFQUFFQyxnQkFBZ0IsUUFBUSw4QkFBOEI7QUFDekYsU0FBU0Msb0JBQW9CLFFBQVEsd0JBQXdCO0FBQzdELFNBQVNDLGdCQUFnQixRQUFRLG9CQUFvQjtBQUNyRCxTQUFTQyxxQ0FBcUMsUUFBUSx3QkFBd0I7QUFDOUUsU0FBU0Msa0JBQWtCLFFBQVEs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
762
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlVG9vbEFjdGlvbkxhYmVsIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJTVFJFQU1fVEhST1RUTEVfTVMiLCJhY3RpdmVTdHJlYW1zIiwiTWFwIiwic3RvcmUiLCJnZXRTdGF0ZSIsImlzU3RyZWFtQWN0aXZlIiwic2Vzc2lvbklkIiwiaGFzIiwiZ2V0QWN0aXZlU3RyZWFtQ291bnQiLCJzaXplIiwicGFyc2VTZXNzaW9uU1NFIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJhY3RpdmUiLCJwYXJhbXMiLCJfcGFyYW1zJGhpdGxFeGVjdXRpb24iLCJfcmVzcG9uc2UkYm9keSIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwiX2NhbGxiYWNrcyRvbkVycm9yIiwiX2RhdGEkZXJyb3IzIiwiX2RhdGEkZXJyb3I0IiwicGxhY2Vob2xkZXJJZCIsImNhbGxiYWNrcyIsInQiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsInBlbmRpbmdDb250ZW50IiwidGhyb3R0bGVUaW1lciIsImZsdXNoVG9TdG9yZXMiLCJlbWl0VGhyb3R0bGVkIiwiZmx1c2hQZW5kaW5nIiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImhhc1N0YXJ0ZWRXcml0aW5nIiwiZW5zdXJlV3JpdGluZ1N0YXJ0ZWQiLCJhcHBseVN0cmVhbUNodW5rIiwiYXBwbHlTdHJlYW1Db21wbGV0ZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJsaW5lIiwiX2xpbmUkc3BsaXQiLCJfbGluZSRzcGxpdDIiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsImRhdGFTdHIiLCJkYXRhIiwidGhpbmtpbmdEZWx0YSIsInN0ZXBUb29sIiwic3RlcFR5cGUiLCJsYWJlbCIsImNodW5rIiwiX2NodW5rIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwiaXNQcmVBcHByb3ZlZCIsIl9yZWYzIiwiX3QiLCJfdDIiLCJfdDMiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImdldCIsImNvbnRlbnQiLCJfY2FsbGJhY2tzJG9uU3RyZWFtVXAiLCJzZXRUZXh0Iiwib25TdHJlYW1VcGRhdGUiLCJjYWxsIiwid2luZG93Iiwic2V0VGltZW91dCIsInRvRW1pdCIsImNsZWFyVGltZW91dCIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwiX2NhbGxiYWNrcyRvblN0YXJ0V3JpIiwicGF0Y2hNZXRhIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwic2V0U3RhdHVzIiwic2V0QWN0aXZpdHkiLCJvblN0YXJ0V3JpdGluZyIsInBheWxvYWQiLCJfcGF5bG9hZCRhZ2VudF9pZCIsIl9zdWJhZ2VudFJhdyRyZXNvbHZlZCIsIl9yZWYyIiwiX2NhbGxiYWNrcyRvbkZpbmlzaFN0IiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwiYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJzdWdnZXN0aW9ucyIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudElkUmF3IiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiY29tcGxldGVkQWdlbnRJZCIsIlN0cmluZyIsInRyaW0iLCJzdWJhZ2VudFJhdyIsInN1YmFnZW50IiwicmVzb2x2ZWRDb250ZXh0IiwicmVzb2x2ZWRfY29udGV4dCIsInJlYXNvbmluZyIsImZpbmlzaCIsImZpbmlzaFBheWxvYWQiLCJvbkZpbmlzaFN0cmVhbSIsImlzU3RvcHBlZCIsImNhbmNlbCIsImFicnVwdCIsInJlYWQiLCJzZW50IiwiZGVjb2RlIiwic3RyZWFtIiwic3BsaXQiLCJwb3AiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJuIiwiX3NsaWNlZFRvQXJyYXkiLCJyZXBsYWNlIiwiSlNPTiIsInBhcnNlIiwiZGVsdGEiLCJpIiwiYXBwZW5kVGhpbmtpbmciLCJwaGFzZSIsIm1lc3NhZ2UiLCJ0b29sIiwidHlwZSIsInN0YXR1cyIsImFwcGx5U3RlcCIsIm5vZGUiLCJ1bmRlZmluZWQiLCJ0aHJlYWRfaWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJhdXRvX2FwcHJvdmVkIiwiYXBwcm92YWxfc3RhdHVzIiwiY2xlYXIiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJwZW5kaW5nX2FjdGlvbnMiLCJsZW5ndGgiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRFcnJvciIsIm9uRXJyb3IiLCJ3YXJuIiwiZSIsImYiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiaXNBY3RpdmUiLCJnZXRBY3RpdmVDb3VudCIsImdldEFjdGl2ZVNlc3Npb25JZHMiLCJmcm9tIiwia2V5cyIsInN0YXJ0U3RyZWFtIiwiX2NhbGxlZTIiLCJyZXF1ZXN0IiwiYWN0aXZpdHlPcHRpb25zIiwiYWdlbnROYW1lIiwiY29udHJvbGxlciIsIl9jYWxsYmFja3Mkb25FcnJvcjIiLCJfdDQiLCJfY29udGV4dDIiLCJzdGFydGVkIiwicmVhc29uIiwiQWJvcnRDb250cm9sbGVyIiwic2V0IiwiZW5zdXJlU2Vzc2lvbiIsIl9vYmplY3RTcHJlYWQiLCJzdGFydCIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsInNpZ25hbCIsInN0YXJ0Q29udGludWVTdHJlYW0iLCJfY2FsbGVlMyIsIl9yZWY0IiwiY29udGludWVSZXF1ZXN0Iiwic3NlUGFyYW1zIiwiX2NhbGxiYWNrcyRvbkVycm9yMyIsIl90NSIsIl9jb250ZXh0MyIsImNvbnRpbnVlVGhyZWFkIiwib2siLCJjb25jYXQiLCJzdGFydFJldHJ5U3RyZWFtIiwiX2NhbGxlZTQiLCJyZXRyeVJlcXVlc3QiLCJkZXRhaWwiLCJfY2FsbGJhY2tzJG9uRXJyb3I0IiwiX3Q2IiwiX3Q3IiwiX2NvbnRleHQ0IiwicmV0cnlDb21wbGV0aW9uIiwianNvbiIsInN0b3BTdHJlYW0iLCJfY2FsbGJhY2tzJG9uU3RvcCIsImFib3J0IiwicGFydGlhbFRleHQiLCJnZXRTbmFwc2hvdCIsInRleHQiLCJvblN0b3AiLCJhYm9ydFNpbGVudGx5IiwiX3N0b3JlJGdldE1ldGEiLCJnZXRNZXRhIiwiYWJvcnRBbGwiLCJfdGhpcyIsImZvckVhY2giXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbU1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zdGFudC1jb25kaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgdHlwZSB7IEFwcHJvdmFsUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQge1xuICBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHksXG4gIGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UsXG4gIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlVG9vbEFjdGlvbkxhYmVsLFxufSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHR5cGUgeyBIaXRsRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQsIG1lcmdlU3RyZWFtQ2h1bmsgfSBmcm9tICcuLi8uLi91dGlscy9zc2VTdHJlYW1Db250ZW50J1xuaW1wb3J0IHsgcmVhc29uaW5nU3RvcmUgfSBmcm9tICcuLi8uLi9ob29rcy91c2VSZWFzb25pbmdUcmFjZSdcbmltcG9ydCB0eXBlIHsgUmVhc29uaW5nU3RlcFBheWxvYWQsIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3JlYXNvbmluZydcbmltcG9ydCB7IHNlc3Npb25TdHJlYW1pbmdUZXh0IH0gZnJvbSAnLi9zZXNzaW9uU3RyZWFtaW5nVGV4dCdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkIH0gZnJvbSAnLi9zZXNzaW9uTm90aWZpY2F0aW9ucydcbmltcG9ydCB7IHNlc3Npb25IaXRsQ29udGV4dCB9IGZyb20gJy4vc2Vzc2lvbkhpdGxDb250ZXh0J1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uRmluaXNoUGF5bG9hZCwgU2Vzc2lvblN0cmVhbUNhbGxiYWNrcywgU3RhcnRTdHJlYW1SZXN1bHQgfSBmcm9tICcuL3Nlc3Npb25zLnR5cGVzJ1xuXG50eXBlIE9yY2hlc3RyYXRvclJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3I+WzBdXG50eXBlIENvbnRpbnVlVGhyZWFkUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkPlswXVxudHlwZSBSZXRyeUNvbXBsZXRpb25SZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3IucmV0cnlDb21wbGV0aW9uPlswXVxuXG4vKiogQ29tcGF0aWJsZSBjb24gZWwgYHRgIGRlIGkxOG5leHQgKHVzbyBkZSB1bmEgc29sYSBrZXkpLiAqL1xudHlwZSBUcmFuc2xhdGVGbiA9IChrZXk6IHN0cmluZykgPT4gc3RyaW5nXG5cbnR5cGUgU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICByZXF1ZXN0OiBPcmNoZXN0cmF0b3JSZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBhY3Rpdml0eU9wdGlvbnM/OiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzQ291bnQ/OiBudW1iZXJcbiAgfVxuICBoaXRsRXhlY3V0aW9uQ29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbFxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIFN0YXJ0Q29udGludWVTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICBjb250aW51ZVJlcXVlc3Q6IENvbnRpbnVlVGhyZWFkUmVxdWVzdFxuICBjYWxsYmFja3M6IFNlc3Npb25TdHJlYW1DYWxsYmFja3NcbiAgdDogVHJhbnNsYXRlRm5cbiAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGxcbiAgYWdlbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBhZ2VudE5hbWU/OiBzdHJpbmdcbn1cblxudHlwZSBTdGFydFJldHJ5U3RyZWFtUGFyYW1zID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmdcbiAgcmV0cnlSZXF1ZXN0OiBSZXRyeUNvbXBsZXRpb25SZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBhY3Rpdml0eU9wdGlvbnM/OiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzQ291bnQ/OiBudW1iZXJcbiAgfVxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIEFjdGl2ZVN0cmVhbSA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyXG4gIGlzU3RvcHBlZDogYm9vbGVhblxufVxuXG4vKipcbiAqIE3DoXhpbW8gZGUgc2VzaW9uZXMgZ2VuZXJhbmRvIGVuIHBhcmFsZWxvLiBQcm90ZWdlIHJlZC9yZWN1cnNvcyBkZWwgY2xpZW50ZS5cbiAqIEFqdXN0YWJsZSBhIGZ1dHVybyB2w61hIGZsYWcgZGVsIGhvc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TID0gNFxuXG5jb25zdCBTVFJFQU1fVEhST1RUTEVfTVMgPSAxNlxuXG5jb25zdCBhY3RpdmVTdHJlYW1zID0gbmV3IE1hcDxzdHJpbmcsIEFjdGl2ZVN0cmVhbT4oKVxuXG5jb25zdCBzdG9yZSA9ICgpID0+IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKVxuXG5jb25zdCBpc1N0cmVhbUFjdGl2ZSA9IChzZXNzaW9uSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gYWN0aXZlU3RyZWFtcy5oYXMoc2Vzc2lvbklkKVxuXG5jb25zdCBnZXRBY3RpdmVTdHJlYW1Db3VudCA9ICgpOiBudW1iZXIgPT4gYWN0aXZlU3RyZWFtcy5zaXplXG5cbmNvbnN0IHBhcnNlU2Vzc2lvblNTRSA9IGFzeW5jIChyZXNwb25zZTogUmVzcG9uc2UsIGFjdGl2ZTogQWN0aXZlU3RyZWFtLCBwYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjYWxsYmFja3MsIHQgfSA9IHBhcmFtc1xuICBjb25zdCBoaXRsRXhlY3V0aW9uQ29udGV4dCA9IHBhcmFtcy5oaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZClcblxuICBsZXQgcGVuZGluZ0NvbnRlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIGxldCB0aHJvdHRsZVRpbWVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gIGNvbnN0IGZsdXNoVG9TdG9yZXMgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc2V0VGV4dChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRlbnQpXG4gICAgY2FsbGJhY2tzLm9uU3RyZWFtVXBkYXRlPy4oY29udGVudClcbiAgfVxuXG4gIGNvbnN0IGVtaXRUaHJvdHRsZWQgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgcGVuZGluZ0NvbnRlbnQgPSBjb250ZW50XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkgcmV0dXJuXG4gICAgdGhyb3R0bGVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgZmx1c2hUb1N0b3Jlcyh0b0VtaXQpXG4gICAgICB9XG4gICAgfSwgU1RSRUFNX1RIUk9UVExFX01TKVxuICB9XG5cbiAgY29uc3QgZmx1c2hQZW5kaW5nID0gKCkgPT4ge1xuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgfVxuICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICBmbHVzaFRvU3RvcmVzKHRvRW1pdClcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gIH1cblxuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgbGV0IGJ1ZmZlciA9ICcnXG4gIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuXG4gIGNvbnN0IGVuc3VyZVdyaXRpbmdTdGFydGVkID0gKCkgPT4ge1xuICAgIGlmIChoYXNTdGFydGVkV3JpdGluZykgcmV0dXJuXG4gICAgaGFzU3RhcnRlZFdyaXRpbmcgPSB0cnVlXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSwgaXNXcml0aW5nOiB0cnVlIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnd3JpdGluZycpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSh0KSlcbiAgICBjYWxsYmFja3Mub25TdGFydFdyaXRpbmc/LigpXG4gIH1cblxuICBjb25zdCBhcHBseVN0cmVhbUNodW5rID0gKGNodW5rOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWNodW5rKSByZXR1cm5cbiAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY2h1bmspXG4gICAgZW1pdFRocm90dGxlZChhY2N1bXVsYXRlZENvbnRlbnQpXG4gIH1cblxuICBjb25zdCBhcHBseVN0cmVhbUNvbXBsZXRlID0gKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgY29uc3QgZmluYWxDb250ZW50ID0gKHBheWxvYWQuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgIGNvbnN0IHNvdXJjZXMgPSBwYXlsb2FkLnNvdXJjZXMgfHwgbnVsbFxuICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChwYXlsb2FkLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdHRhY2htZW50cykgPyBwYXlsb2FkLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgIGxldCBzdWdnZXN0aW9uczogc3RyaW5nW10gfCBudWxsID0gbnVsbFxuICAgIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdF9yZXBseSkpIHtcbiAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICBzdWdnZXN0aW9ucyA9IHBheWxvYWQuc3VnZ2VzdGlvbnMgYXMgc3RyaW5nW11cbiAgICB9XG4gICAgY29uc3QgYWdlbnRJZFJhdyA9IHBheWxvYWQuYWdlbnRfaWQgPz8gcGF5bG9hZC5hZ2VudElkXG4gICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgY29uc3Qgc3ViYWdlbnRSYXcgPSBwYXlsb2FkLnN1YmFnZW50IGFzIHsgcmVzb2x2ZWRfY29udGV4dD86IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWRcbiAgICBjb25zdCByZXNvbHZlZENvbnRleHQgPSBzdWJhZ2VudFJhdz8ucmVzb2x2ZWRfY29udGV4dCA/PyBudWxsXG4gICAgY29uc3QgcmVhc29uaW5nID0gKHBheWxvYWQucmVhc29uaW5nIGFzIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGwpID8/IG51bGxcblxuICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaChwbGFjZWhvbGRlcklkLCByZWFzb25pbmcpXG4gICAgZmx1c2hQZW5kaW5nKClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2NvbXBsZXRlJylcblxuICAgIGNvbnN0IGZpbmlzaFBheWxvYWQ6IFNlc3Npb25GaW5pc2hQYXlsb2FkID0ge1xuICAgICAgY29udGVudDogZmluYWxDb250ZW50LFxuICAgICAgc291cmNlcyxcbiAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkLFxuICAgICAgcmVzb2x2ZWRDb250ZXh0LFxuICAgICAgcmVhc29uaW5nLFxuICAgIH1cbiAgICBjYWxsYmFja3Mub25GaW5pc2hTdHJlYW0/LihmaW5pc2hQYXlsb2FkKVxuXG4gICAgLy8gRWwgdGV4dG8gZW4gdml2byBOTyBzZSBsaW1waWEgYWPDoSBhIHByb3DDs3NpdG8uIEVsIHBsYWNlaG9sZGVyIHNlIHZhIGNvbiBlbFxuICAgIC8vIGBkcm9wYCBxdWUgaGFjZSBlbCBjb25zdW1pZG9yLCB5IGNvbiDDqWwgc3Ugc3VzY3JpcGNpw7NuOyB2YWNpYXJsbyBhbnRlcyBsb1xuICAgIC8vIGRlamFiYSBtb250YWRvIHkgc2luIHRleHRvIChhbHR1cmEgMCkgZHVyYW50ZSB+MjVtczogZWwgZmxpY2tlciBkZSBmaW4gZGVcbiAgICAvLyBzdHJlYW0uIE5vIGFsY2FuemEgY29uIGRpZmVyaXJsbywgcG9ycXVlIGVzdGUgY2xlYXIgdmlhamEgZW4gU3luY0xhbmVcbiAgICAvLyAoc3RvcmUgZXh0ZXJubykgeSBlbCBzd2FwIGRlIG1lbnNhamVzIGVuIERlZmF1bHRMYW5lLCBhc8OtIHF1ZSBzaWVtcHJlIHNlXG4gICAgLy8gY3VlbGEgZW4gZWwgbWVkaW8uIEVsIHNsb3Qgc2UgbGliZXJhIGVuIGVsIHByw7N4aW1vIGBzdGFydCgpYCBkZSBsYSBzZXNpw7NuLFxuICAgIC8vIHkgZW4gc3RvcC9lcnJvci9hcHByb3ZhbC9jYW1iaW8gZGUgc2VzacOzbiwgcXVlIHPDrSBsbGFtYW4gYGNsZWFyYC5cbiAgfVxuXG4gIHRyeSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICBpZiAoZG9uZSkgYnJlYWtcblxuICAgICAgaWYgKGFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG5cbiAgICAgICAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgICAgICAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICAgICAgICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcblxuICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICd0aGlua2luZyc6IHtcbiAgICAgICAgICAgICAgY29uc3QgdGhpbmtpbmdEZWx0YSA9IHR5cGVvZiBkYXRhLmRlbHRhID09PSAnc3RyaW5nJyA/IGRhdGEuZGVsdGEgOiAnJ1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuaSA9PT0gJ251bWJlcicgJiYgdGhpbmtpbmdEZWx0YSkge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmFwcGVuZFRoaW5raW5nKHBsYWNlaG9sZGVySWQsIGRhdGEuaSwgdGhpbmtpbmdEZWx0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgeyBwaGFzZTogJ3RoaW5raW5nJywgbWVzc2FnZTogZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSgwLCB0KSB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVsIGJhY2tlbmQgZGVzY2FydGEgbG8gZW1pdGlkbyB5IHJlaW5pY2lhIGxhIHJlc3B1ZXN0YSBkZXNkZSBjZXJvLlxuICAgICAgICAgICAgY2FzZSAnYW5zd2VyX3Jlc2V0JzpcbiAgICAgICAgICAgICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgICAgICAgICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgICAgICAgICAgICBmbHVzaFRvU3RvcmVzKCcnKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdyZWFzb25pbmdfc3RlcCc6IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFRvb2wgPSB0eXBlb2YgZGF0YS50b29sID09PSAnc3RyaW5nJyA/IGRhdGEudG9vbCA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXBUeXBlID0gdHlwZW9mIGRhdGEudHlwZSA9PT0gJ3N0cmluZycgPyBkYXRhLnR5cGUgOiAnJ1xuICAgICAgICAgICAgICBpZiAoc3RlcFRvb2wgJiYgc3RlcFR5cGUgIT09ICdoYW5kb2ZmJyAmJiBkYXRhLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSByZXNvbHZlVG9vbEFjdGlvbkxhYmVsKHN0ZXBUb29sLCB0LCAncHJlc2VudCcpXG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgeyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IGxhYmVsIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5pID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmFwcGx5U3RlcChwbGFjZWhvbGRlcklkLCBkYXRhIGFzIFJlYXNvbmluZ1N0ZXBQYXlsb2FkKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdjb250ZW50Jzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1Db21wbGV0ZShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICBpZiAoZGF0YS5ub2RlID09PSAnYWdlbnRfdHJhbnNmZXInKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eShcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhLnRocmVhZF9pZCA9PT0gJ3N0cmluZycgPyBkYXRhLnRocmVhZF9pZCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOiB7XG4gICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgIC8vIFByZWFwcm9iYWRvIChhdXRvLWFwcHJvdmUgbyBkZXRlY2Npw7NuIG1hbnVhbCk6IGVsIHN0cmVhbSBubyBzZSBjb3J0YSxcbiAgICAgICAgICAgICAgLy8gc2lndWUgZWplY3V0YW5kbyBsYXMgYWNjaW9uZXMgc2luIGVzcGVyYXIgZGVjaXNpw7NuIGRlbCB1c3VhcmlvLlxuICAgICAgICAgICAgICBjb25zdCBpc1ByZUFwcHJvdmVkID1cbiAgICAgICAgICAgICAgICBkYXRhLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgIGRhdGEuYXV0b19hcHByb3ZlZCA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICAgIGRhdGEuYXBwcm92YWxfc3RhdHVzID09PSAnYXBwcm92ZWQnXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIGlmICghaXNQcmVBcHByb3ZlZCkge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaChwbGFjZWhvbGRlcklkLCAoZGF0YS5yZWFzb25pbmcgYXMgUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCkgPz8gbnVsbClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdhd2FpdGluZ19hcHByb3ZhbCcpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihkYXRhIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICBpZiAoaXNQcmVBcHByb3ZlZCAmJiBBcnJheS5pc0FycmF5KGRhdGEucGVuZGluZ19hY3Rpb25zKSAmJiBkYXRhLnBlbmRpbmdfYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gdW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBkYXRhLmVycm9yKVxuICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldEVycm9yKHNlc3Npb25JZCwgeyB0eXBlOiBkYXRhLmVycm9yPy50eXBlLCBtZXNzYWdlOiBkYXRhLmVycm9yPy5tZXNzYWdlIH0pXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LihkYXRhLmVycm9yPy50eXBlLCBkYXRhLmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBmbHVzaFBlbmRpbmcoKVxuICB9XG59XG5cbi8qKlxuICogTWFuYWdlciBzaW5nbGV0b24gKG1vZHVsZS1sZXZlbCkgcXVlIGNvcnJlIE4gc3RyZWFtcyBkZWwgb3JjaGVzdHJhdG9yIGVuXG4gKiBwYXJhbGVsbywgdW5vIHBvciBgc2Vzc2lvbklkYC4gU29icmV2aXZlIGEgY2FtYmlvcyBkZSB2aXN0YSB5IGFsIGNpZXJyZSBkZWxcbiAqIG1vZGFsOiBsb3Mgc3RyZWFtcyBzb2xvIHNlIGNhbmNlbGFuIGNvbiBzdG9wIGV4cGzDrWNpdG8gZGVsIHVzdWFyaW8gbyBhbFxuICogY29tcGxldGFyL2Vycm9yYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXNzaW9uU3RyZWFtTWFuYWdlciA9IHtcbiAgaXNBY3RpdmU6IGlzU3RyZWFtQWN0aXZlLFxuICBnZXRBY3RpdmVDb3VudDogZ2V0QWN0aXZlU3RyZWFtQ291bnQsXG4gIGdldEFjdGl2ZVNlc3Npb25JZHM6ICgpOiBzdHJpbmdbXSA9PiBBcnJheS5mcm9tKGFjdGl2ZVN0cmVhbXMua2V5cygpKSxcblxuICBhc3luYyBzdGFydFN0cmVhbShwYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIHJlcXVlc3QsIGNhbGxiYWNrcywgdCwgYWN0aXZpdHlPcHRpb25zLCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLnN0YXJ0KHBsYWNlaG9sZGVySWQpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSh0LCBhY3Rpdml0eU9wdGlvbnMgPz8ge30pKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yKHJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LigpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogUmVzdW1lIEhJVEwgKGBjb250aW51ZS10aHJlYWRgKSBrZXllZCBwb3Igc2Vzc2lvbklkIOKAlCBtaXNtbyBtb3RvciBxdWUgb3JjaGVzdHJhdG9yLiAqL1xuICBhc3luYyBzdGFydENvbnRpbnVlU3RyZWFtKHBhcmFtczogU3RhcnRDb250aW51ZVN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250aW51ZVJlcXVlc3QsIGNhbGxiYWNrcywgdCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQsIGFnZW50SWQsIGFnZW50TmFtZSB9ID0gcGFyYW1zXG5cbiAgICBpZiAoaXNTdHJlYW1BY3RpdmUoc2Vzc2lvbklkKSkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2FscmVhZHlfYWN0aXZlJyB9XG4gICAgfVxuICAgIGlmIChnZXRBY3RpdmVTdHJlYW1Db3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdsaW1pdCcgfVxuICAgIH1cblxuICAgIGlmIChoaXRsRXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgc2Vzc2lvbkhpdGxDb250ZXh0LnNldChzZXNzaW9uSWQsIGhpdGxFeGVjdXRpb25Db250ZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSA9IHsgc2Vzc2lvbklkLCBjb250cm9sbGVyLCBpc1N0b3BwZWQ6IGZhbHNlIH1cbiAgICBhY3RpdmVTdHJlYW1zLnNldChzZXNzaW9uSWQsIGFjdGl2ZSlcblxuICAgIHN0b3JlKCkuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7XG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICBpc1dyaXRpbmc6IGZhbHNlLFxuICAgICAgLi4uKGFnZW50SWQgIT0gbnVsbCA/IHsgYWdlbnRJZCB9IDoge30pLFxuICAgICAgLi4uKGFnZW50TmFtZSAhPSBudWxsID8geyBhZ2VudE5hbWUgfSA6IHt9KSxcbiAgICB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHNlc3Npb25IaXRsQ29udGV4dC5nZXQoc2Vzc2lvbklkKSA/PyB1bmRlZmluZWQpXG4gICAgKVxuXG4gICAgY29uc3Qgc3NlUGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICByZXF1ZXN0OiB7fSBhcyBPcmNoZXN0cmF0b3JSZXF1ZXN0LFxuICAgICAgY2FsbGJhY2tzLFxuICAgICAgdCxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZCksXG4gICAgICBhZ2VudElkLFxuICAgICAgYWdlbnROYW1lLFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKGNvbnRpbnVlUmVxdWVzdCwgY29udHJvbGxlci5zaWduYWwpXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udGludWUtdGhyZWFkIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBzc2VQYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgICBzZXNzaW9uSGl0bENvbnRleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUgfVxuICB9LFxuXG4gIC8qKiBSZWdlbmVyYSBsYSByZXNwdWVzdGEgZGUgdW4gdHVybm8gKGByZXRyeV9jb21wbGV0aW9uYCkg4oCUIG1pc21vIG1vdG9yIFNTRSBxdWUgb3JjaGVzdHJhdG9yLiAqL1xuICBhc3luYyBzdGFydFJldHJ5U3RyZWFtKHBhcmFtczogU3RhcnRSZXRyeVN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCByZXRyeVJlcXVlc3QsIGNhbGxiYWNrcywgdCwgYWN0aXZpdHlPcHRpb25zLCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwgYWN0aXZpdHlPcHRpb25zID8/IHt9KSlcblxuICAgIGNvbnN0IHNzZVBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgcmVxdWVzdDoge30gYXMgT3JjaGVzdHJhdG9yUmVxdWVzdCxcbiAgICAgIGNhbGxiYWNrcyxcbiAgICAgIHQsXG4gICAgICBhY3Rpdml0eU9wdGlvbnMsXG4gICAgICBhZ2VudElkLFxuICAgICAgYWdlbnROYW1lLFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLnJldHJ5Q29tcGxldGlvbihyZXRyeVJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICBsZXQgZGV0YWlsOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsgZGV0YWlsPzogc3RyaW5nIH1cbiAgICAgICAgICAgIGRldGFpbCA9IHR5cGVvZiBkYXRhLmRldGFpbCA9PT0gJ3N0cmluZycgPyBkYXRhLmRldGFpbCA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgZGV0YWlsID0gdW5kZWZpbmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkZXRhaWwgPT09ICdUdXJuIG5vdCBmb3VuZCcpIHtcbiAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlLCBwbGFjZWhvbGRlcklkOiBudWxsIH0pXG4gICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2lkbGUnKVxuICAgICAgICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ3R1cm5fbm90X2ZvdW5kJyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcmV0cnlfY29tcGxldGlvbiBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgc3NlUGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUgfVxuICB9LFxuXG4gIC8qKiBDYW5jZWxhY2nDs24gZXhwbMOtY2l0YSBkZWwgdXN1YXJpbyAobWVuc2FqZSBcImNhbmNlbGFkb1wiKS4gKi9cbiAgc3RvcFN0cmVhbShzZXNzaW9uSWQ6IHN0cmluZywgY2FsbGJhY2tzPzogU2Vzc2lvblN0cmVhbUNhbGxiYWNrcykge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVN0cmVhbXMuZ2V0KHNlc3Npb25JZClcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuXG4gICAgYWN0aXZlLmlzU3RvcHBlZCA9IHRydWVcbiAgICBhY3RpdmUuY29udHJvbGxlci5hYm9ydCgpXG4gICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIC8vIEVsIHBhcmNpYWwgc2UgcmVzY2F0YSBhbnRlcyBkZSBsaW1waWFyOiBlbCBiYWNrZW5kIGxvIHBlcnNpc3RlLCBwZXJvIHNpIG5vIGxvXG4gICAgLy8gcGFzYW1vcyBhbCBjYWxsYmFjayBkZXNhcGFyZWNlIGRlIHBhbnRhbGxhIGhhc3RhIGVsIHByw7N4aW1vIGZldGNoIGRlIGxhIHNlc2nDs24uXG4gICAgY29uc3QgcGFydGlhbFRleHQgPSBzZXNzaW9uU3RyZWFtaW5nVGV4dC5nZXRTbmFwc2hvdChzZXNzaW9uSWQpLnRleHRcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdjYW5jZWxsZWQnKVxuICAgIGNhbGxiYWNrcz8ub25TdG9wPy4ocGFydGlhbFRleHQpXG4gIH0sXG5cbiAgLyoqIEFib3J0YSBzaW4gbWFyY2FyIFwiY2FuY2VsYWRvXCIgKHVzbyBpbnRlcm5vIC8gbGltcGllemEpLiAqL1xuICBhYm9ydFNpbGVudGx5KHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aXZlID0gYWN0aXZlU3RyZWFtcy5nZXQoc2Vzc2lvbklkKVxuICAgIGlmICghYWN0aXZlKSByZXR1cm5cbiAgICBhY3RpdmUuaXNTdG9wcGVkID0gdHJ1ZVxuICAgIGFjdGl2ZS5jb250cm9sbGVyLmFib3J0KClcbiAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgaWYgKHN0b3JlKCkuZ2V0TWV0YShzZXNzaW9uSWQpPy5zdGF0dXMgIT09ICdjb21wbGV0ZScpIHtcbiAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2lkbGUnKVxuICAgIH1cbiAgfSxcblxuICBhYm9ydEFsbCgpIHtcbiAgICBBcnJheS5mcm9tKGFjdGl2ZVN0cmVhbXMua2V5cygpKS5mb3JFYWNoKHNlc3Npb25JZCA9PiB0aGlzLmFib3J0U2lsZW50bHkoc2Vzc2lvbklkKSlcbiAgfSxcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsSUFBSSxNQUFNLHFCQUFxQjtBQUV0QyxT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