@projectcor/maia-components 2.11.55-1 → 2.11.55-2

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.
@@ -19,13 +19,17 @@ import { useState, useCallback, useRef, useEffect } from 'react';
19
19
  import { useTranslation } from 'react-i18next';
20
20
  import maia from '../../services/maia';
21
21
  import { SECTIONS } from '../../constants/config';
22
+ import { ACTIVITY_MESSAGE_ROTATE_MS, advanceStreamActivityMessage, canAdvanceStreamActivityMessage, canRotateStreamActivityPhase, getInitialStreamActivity, getThinkingLoadingMessage, getWritingStreamActivity, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity } from '../../utils/streamActivityMessages';
23
+ import { logMaiaSseEvent, logMaiaSseStreamStart } from '../../utils/debugMaiaSseLog';
24
+ import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
22
25
  export var useOrchestratorStream = function useOrchestratorStream(_ref) {
23
26
  var onStreamUpdate = _ref.onStreamUpdate,
24
27
  onFinishStream = _ref.onFinishStream,
25
28
  onStartWriting = _ref.onStartWriting,
26
29
  onStop = _ref.onStop,
27
30
  onError = _ref.onError,
28
- onApprovalRequired = _ref.onApprovalRequired;
31
+ onApprovalRequired = _ref.onApprovalRequired,
32
+ hitlExecutionContextRef = _ref.hitlExecutionContextRef;
29
33
  var _useTranslation = useTranslation([SECTIONS.chatAI]),
30
34
  t = _useTranslation.t;
31
35
  var _useState = useState(null),
@@ -44,8 +48,13 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
44
48
  _useState8 = _slicedToArray(_useState7, 2),
45
49
  loadingMessage = _useState8[0],
46
50
  setLoadingMessage = _useState8[1];
51
+ var _useState9 = useState(null),
52
+ _useState0 = _slicedToArray(_useState9, 2),
53
+ streamActivity = _useState0[0],
54
+ setStreamActivity = _useState0[1];
47
55
  var abortControllerRef = useRef(null);
48
56
  var isStoppedRef = useRef(false);
57
+ var activityMessageIndexRef = useRef(0);
49
58
  var onStreamUpdateRef = useRef(onStreamUpdate);
50
59
  var onFinishStreamRef = useRef(onFinishStream);
51
60
  var onStartWritingRef = useRef(onStartWriting);
@@ -58,10 +67,55 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
58
67
  onStopRef.current = onStop;
59
68
  onErrorRef.current = onError;
60
69
  onApprovalRequiredRef.current = onApprovalRequired;
70
+ var clearStreamLoadingState = useCallback(function () {
71
+ activityMessageIndexRef.current = 0;
72
+ setStreamActivity(null);
73
+ setLoadingMessage(null);
74
+ }, []);
75
+ var applyStreamActivity = useCallback(function (activity) {
76
+ setStreamActivity(function (prev) {
77
+ if ((prev === null || prev === void 0 ? void 0 : prev.phase) === activity.phase && canRotateStreamActivityPhase(activity.phase)) {
78
+ return prev;
79
+ }
80
+ if ((prev === null || prev === void 0 ? void 0 : prev.phase) !== activity.phase) {
81
+ activityMessageIndexRef.current = 0;
82
+ }
83
+ setLoadingMessage(activity.message);
84
+ return activity;
85
+ });
86
+ }, []);
87
+ useEffect(function () {
88
+ if (!isLoading || isWriting || !streamActivity) {
89
+ return undefined;
90
+ }
91
+ if (!canRotateStreamActivityPhase(streamActivity.phase)) {
92
+ return undefined;
93
+ }
94
+ var intervalId = window.setInterval(function () {
95
+ setStreamActivity(function (prev) {
96
+ if (!prev || !canRotateStreamActivityPhase(prev.phase)) {
97
+ return prev;
98
+ }
99
+ if (!canAdvanceStreamActivityMessage(prev.phase, activityMessageIndexRef.current)) {
100
+ return prev;
101
+ }
102
+ var advanced = advanceStreamActivityMessage(prev, activityMessageIndexRef.current, t);
103
+ if (!advanced) {
104
+ return prev;
105
+ }
106
+ activityMessageIndexRef.current = advanced.nextIndex;
107
+ setLoadingMessage(advanced.activity.message);
108
+ return advanced.activity;
109
+ });
110
+ }, ACTIVITY_MESSAGE_ROTATE_MS);
111
+ return function () {
112
+ return window.clearInterval(intervalId);
113
+ };
114
+ }, [isLoading, isWriting, streamActivity === null || streamActivity === void 0 ? void 0 : streamActivity.phase, t]);
61
115
  var handleSSEStream = useCallback(/*#__PURE__*/function () {
62
116
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response) {
63
- var _data$agent_id, _onFinishStreamRef$cu, _onApprovalRequiredRe, _onErrorRef$current, _data$error, _data$error2;
64
- var pendingContent, rafId, emitThrottled, flushPending, _response$body, reader, decoder, buffer, accumulatedContent, hasStartedWriting, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, _data, _onStartWritingRef$cu, nodeMessage, finalContent, sources, memorySessionId, attachments, suggestions, agentIdRaw, completedAgentId, _onErrorRef$current2, _t, _t2, _t3, _t4;
117
+ var _onErrorRef$current, _data$error, _data$error2;
118
+ var pendingContent, rafId, emitThrottled, flushPending, _response$body, 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, _onApprovalRequiredRe, isManualApproval, _onErrorRef$current2, _t, _t2, _t3, _t4;
65
119
  return _regeneratorRuntime.wrap(function (_context) {
66
120
  while (1) switch (_context.prev = _context.next) {
67
121
  case 0:
@@ -98,6 +152,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
98
152
  }
99
153
  };
100
154
  _context.prev = 1;
155
+ logMaiaSseStreamStart('orchestrator');
101
156
  reader = (_response$body = response.body) === null || _response$body === void 0 ? void 0 : _response$body.getReader();
102
157
  if (reader) {
103
158
  _context.next = 2;
@@ -109,9 +164,43 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
109
164
  buffer = '';
110
165
  accumulatedContent = '';
111
166
  hasStartedWriting = false;
167
+ ensureWritingStarted = function ensureWritingStarted() {
168
+ var _onStartWritingRef$cu;
169
+ if (hasStartedWriting) return;
170
+ hasStartedWriting = true;
171
+ setIsWriting(true);
172
+ applyStreamActivity(getWritingStreamActivity(t));
173
+ (_onStartWritingRef$cu = onStartWritingRef.current) === null || _onStartWritingRef$cu === void 0 || _onStartWritingRef$cu.call(onStartWritingRef);
174
+ };
175
+ applyStreamChunk = function applyStreamChunk(chunk) {
176
+ if (!chunk) return;
177
+ accumulatedContent = mergeStreamChunk(accumulatedContent, chunk);
178
+ emitThrottled(accumulatedContent);
179
+ };
180
+ applyStreamComplete = function applyStreamComplete(payload) {
181
+ var _payload$agent_id, _onFinishStreamRef$cu;
182
+ var finalContent = payload.content || accumulatedContent;
183
+ var sources = payload.sources || null;
184
+ var memorySessionId = payload.memory_session_id || '';
185
+ var attachments = Array.isArray(payload.attachments) ? payload.attachments : null;
186
+ var suggestions = null;
187
+ if (Array.isArray(payload.suggest_reply)) {
188
+ suggestions = payload.suggest_reply;
189
+ } else if (Array.isArray(payload.suggestions)) {
190
+ suggestions = payload.suggestions;
191
+ }
192
+ var agentIdRaw = (_payload$agent_id = payload.agent_id) !== null && _payload$agent_id !== void 0 ? _payload$agent_id : payload.agentId;
193
+ var completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
194
+ flushPending();
195
+ setData(finalContent);
196
+ setLoading(false);
197
+ setIsWriting(false);
198
+ clearStreamLoadingState();
199
+ (_onFinishStreamRef$cu = onFinishStreamRef.current) === null || _onFinishStreamRef$cu === void 0 || _onFinishStreamRef$cu.call(onFinishStreamRef, finalContent, sources, memorySessionId, attachments, suggestions, completedAgentId);
200
+ };
112
201
  case 3:
113
202
  if (!true) {
114
- _context.next = 26;
203
+ _context.next = 28;
115
204
  break;
116
205
  }
117
206
  if (!isStoppedRef.current) {
@@ -119,7 +208,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
119
208
  break;
120
209
  }
121
210
  reader.cancel();
122
- return _context.abrupt("continue", 26);
211
+ return _context.abrupt("continue", 28);
123
212
  case 4:
124
213
  _context.next = 5;
125
214
  return reader.read();
@@ -131,14 +220,14 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
131
220
  _context.next = 6;
132
221
  break;
133
222
  }
134
- return _context.abrupt("continue", 26);
223
+ return _context.abrupt("continue", 28);
135
224
  case 6:
136
225
  if (!isStoppedRef.current) {
137
226
  _context.next = 7;
138
227
  break;
139
228
  }
140
229
  reader.cancel();
141
- return _context.abrupt("continue", 26);
230
+ return _context.abrupt("continue", 28);
142
231
  case 7:
143
232
  buffer += decoder.decode(value, {
144
233
  stream: true
@@ -150,7 +239,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
150
239
  _iterator.s();
151
240
  case 9:
152
241
  if ((_step = _iterator.n()).done) {
153
- _context.next = 22;
242
+ _context.next = 24;
154
243
  break;
155
244
  }
156
245
  line = _step.value;
@@ -158,106 +247,113 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
158
247
  _context.next = 10;
159
248
  break;
160
249
  }
161
- return _context.abrupt("continue", 21);
250
+ return _context.abrupt("continue", 23);
162
251
  case 10:
163
252
  _line$split = line.split('\n'), _line$split2 = _slicedToArray(_line$split, 2), eventLine = _line$split2[0], dataLine = _line$split2[1];
164
253
  if (!(!eventLine || !dataLine)) {
165
254
  _context.next = 11;
166
255
  break;
167
256
  }
168
- return _context.abrupt("continue", 21);
257
+ return _context.abrupt("continue", 23);
169
258
  case 11:
170
259
  eventType = eventLine.replace('event: ', '').trim();
171
260
  dataStr = dataLine.replace('data: ', '').trim();
172
261
  _context.prev = 12;
173
262
  _data = JSON.parse(dataStr);
263
+ logMaiaSseEvent('orchestrator', eventType, _data);
174
264
  _t = eventType;
175
- _context.next = _t === 'token' ? 13 : _t === 'node' ? 14 : _t === 'complete' ? 15 : _t === 'approval_required' ? 16 : _t === 'error' ? 17 : 18;
265
+ _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;
176
266
  break;
177
267
  case 13:
178
268
  if (!hasStartedWriting) {
179
- hasStartedWriting = true;
180
- setIsWriting(true);
181
- setLoadingMessage(t('chat.writing'));
182
- (_onStartWritingRef$cu = onStartWritingRef.current) === null || _onStartWritingRef$cu === void 0 || _onStartWritingRef$cu.call(onStartWritingRef);
183
- }
184
- accumulatedContent += _data.content;
185
- emitThrottled(accumulatedContent);
186
- return _context.abrupt("continue", 19);
187
- case 14:
188
- // Si el evento node tiene un mensaje, actualizarlo para mostrarlo en el loader
189
- if (_data.message && typeof _data.message === 'string') {
190
- // Asegurar que isLoading esté en true para mostrar el loader
191
269
  setLoading(true);
192
- // Mostrar nombre solo para create_task / clone_task, el resto muestra genérico
193
- nodeMessage = _data.message.includes('create_task') || _data.message.includes('clone_task') ? _data.message : t('chat.executingAction');
194
- setLoadingMessage(nodeMessage);
270
+ applyStreamActivity({
271
+ phase: 'thinking',
272
+ message: getThinkingLoadingMessage(0, t)
273
+ });
195
274
  }
196
- return _context.abrupt("continue", 19);
275
+ return _context.abrupt("continue", 21);
276
+ case 14:
277
+ chunk = typeof _data.content === 'string' ? _data.content : '';
278
+ ensureWritingStarted();
279
+ applyStreamChunk(chunk);
280
+ return _context.abrupt("continue", 21);
197
281
  case 15:
198
- finalContent = _data.content || accumulatedContent;
199
- sources = _data.sources || null;
200
- memorySessionId = _data.memory_session_id || '';
201
- attachments = Array.isArray(_data.attachments) ? _data.attachments : null;
202
- suggestions = null;
203
- if (Array.isArray(_data.suggest_reply)) {
204
- suggestions = _data.suggest_reply;
205
- } else if (Array.isArray(_data.suggestions)) {
206
- suggestions = _data.suggestions;
282
+ _chunk = typeof _data.content === 'string' ? _data.content : '';
283
+ ensureWritingStarted();
284
+ applyStreamChunk(_chunk);
285
+ if (isCompleteLikeSsePayload(_data)) {
286
+ applyStreamComplete(_data);
207
287
  }
208
- agentIdRaw = (_data$agent_id = _data.agent_id) !== null && _data$agent_id !== void 0 ? _data$agent_id : _data.agentId;
209
- completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
210
- flushPending();
211
- setData(finalContent);
212
- setIsWriting(false);
213
- setLoadingMessage(null); // Limpiar mensaje cuando se completa
214
- (_onFinishStreamRef$cu = onFinishStreamRef.current) === null || _onFinishStreamRef$cu === void 0 || _onFinishStreamRef$cu.call(onFinishStreamRef, finalContent, sources, memorySessionId, attachments, suggestions, completedAgentId);
215
- return _context.abrupt("continue", 19);
288
+ return _context.abrupt("continue", 21);
216
289
  case 16:
290
+ if (_data.message && typeof _data.message === 'string') {
291
+ setLoading(true);
292
+ applyStreamActivity(resolveHitlNodeStreamActivity(_data.message, t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current, typeof _data.thread_id === 'string' ? _data.thread_id : undefined, {
293
+ logSource: 'orchestrator:node'
294
+ }));
295
+ }
296
+ return _context.abrupt("continue", 21);
297
+ case 17:
298
+ applyStreamComplete(_data);
299
+ return _context.abrupt("continue", 21);
300
+ case 18:
217
301
  flushPending();
218
302
  setIsWriting(false);
219
- setLoading(false);
220
- setLoadingMessage(null); // Limpiar mensaje cuando se requiere aprobación
303
+ isManualApproval = _data.manual_approval_detected === true;
304
+ if (!isManualApproval) {
305
+ setLoading(false);
306
+ clearStreamLoadingState();
307
+ }
221
308
  (_onApprovalRequiredRe = onApprovalRequiredRef.current) === null || _onApprovalRequiredRe === void 0 || _onApprovalRequiredRe.call(onApprovalRequiredRef, _data, accumulatedContent);
222
- return _context.abrupt("continue", 19);
223
- case 17:
309
+ if (isManualApproval && Array.isArray(_data.pending_actions) && _data.pending_actions.length > 0) {
310
+ setLoading(true);
311
+ applyStreamActivity(resolveInitialHitlStreamActivity(t, hitlExecutionContextRef === null || hitlExecutionContextRef === void 0 ? void 0 : hitlExecutionContextRef.current, {
312
+ logSource: 'orchestrator:manualApproval'
313
+ }));
314
+ }
315
+ return _context.abrupt("continue", 21);
316
+ case 19:
224
317
  console.error('SSE Error:', _data.error);
225
318
  flushPending();
226
319
  setIsWriting(false);
320
+ setLoading(false);
321
+ clearStreamLoadingState();
227
322
  setLoadingMessage(null); // Limpiar mensaje cuando hay error
228
323
  (_onErrorRef$current = onErrorRef.current) === null || _onErrorRef$current === void 0 || _onErrorRef$current.call(onErrorRef, (_data$error = _data.error) === null || _data$error === void 0 ? void 0 : _data$error.type, (_data$error2 = _data.error) === null || _data$error2 === void 0 ? void 0 : _data$error2.message);
229
- return _context.abrupt("continue", 19);
230
- case 18:
324
+ return _context.abrupt("continue", 21);
325
+ case 20:
231
326
  console.warn('Unknown SSE event type:', eventType);
232
- case 19:
233
- _context.next = 21;
327
+ return _context.abrupt("continue", 21);
328
+ case 21:
329
+ _context.next = 23;
234
330
  break;
235
- case 20:
236
- _context.prev = 20;
331
+ case 22:
332
+ _context.prev = 22;
237
333
  _t2 = _context["catch"](12);
238
334
  console.error('Error parsing SSE data:', _t2, dataStr);
239
- case 21:
335
+ case 23:
240
336
  _context.next = 9;
241
337
  break;
242
- case 22:
243
- _context.next = 24;
338
+ case 24:
339
+ _context.next = 26;
244
340
  break;
245
- case 23:
246
- _context.prev = 23;
341
+ case 25:
342
+ _context.prev = 25;
247
343
  _t3 = _context["catch"](8);
248
344
  _iterator.e(_t3);
249
- case 24:
250
- _context.prev = 24;
345
+ case 26:
346
+ _context.prev = 26;
251
347
  _iterator.f();
252
- return _context.finish(24);
253
- case 25:
348
+ return _context.finish(26);
349
+ case 27:
254
350
  _context.next = 3;
255
351
  break;
256
- case 26:
257
- _context.next = 28;
352
+ case 28:
353
+ _context.next = 30;
258
354
  break;
259
- case 27:
260
- _context.prev = 27;
355
+ case 29:
356
+ _context.prev = 29;
261
357
  _t4 = _context["catch"](1);
262
358
  flushPending();
263
359
  setIsWriting(false);
@@ -266,26 +362,26 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
266
362
  if (!isStoppedRef.current) {
267
363
  (_onErrorRef$current2 = onErrorRef.current) === null || _onErrorRef$current2 === void 0 || _onErrorRef$current2.call(onErrorRef);
268
364
  }
269
- case 28:
270
- _context.prev = 28;
365
+ case 30:
366
+ _context.prev = 30;
271
367
  flushPending();
272
368
  setLoading(false);
273
369
  setIsWriting(false);
274
- setLoadingMessage(null);
275
- return _context.finish(28);
276
- case 29:
370
+ clearStreamLoadingState();
371
+ return _context.finish(30);
372
+ case 31:
277
373
  case "end":
278
374
  return _context.stop();
279
375
  }
280
- }, _callee, null, [[1, 27, 28, 29], [8, 23, 24, 25], [12, 20]]);
376
+ }, _callee, null, [[1, 29, 30, 31], [8, 25, 26, 27], [12, 22]]);
281
377
  }));
282
378
  return function (_x) {
283
379
  return _ref2.apply(this, arguments);
284
380
  };
285
- }(), [t]);
381
+ }(), [applyStreamActivity, clearStreamLoadingState, hitlExecutionContextRef, t]);
286
382
  var askMaia = /*#__PURE__*/function () {
287
383
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref3) {
288
- var message, history, projectId, lang, userId, firstName, lastName, companyId, chatId, messageId, clientId, clientName, feeId, agentName, agentId, isWebSearchActive, isDeepSearchActive, attachments, projectName, taskId, taskName, faqId, agentSuggestionId, fuaId, scId, agentEntity, contextMessage, _abortControllerRef$c, response, _onErrorRef$current3, _t5;
384
+ var message, history, projectId, lang, userId, firstName, lastName, companyId, chatId, messageId, clientId, clientName, feeId, agentName, agentId, isWebSearchActive, isDeepSearchActive, attachments, projectName, taskId, taskName, faqId, agentSuggestionId, fuaId, scId, agentEntity, contextMessage, _attachments$length, _abortControllerRef$c, initialActivity, response, _onErrorRef$current3, _t5;
289
385
  return _regeneratorRuntime.wrap(function (_context2) {
290
386
  while (1) switch (_context2.prev = _context2.next) {
291
387
  case 0:
@@ -294,7 +390,14 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
294
390
  setLoading(true);
295
391
  setIsWriting(false);
296
392
  setData(null);
297
- setLoadingMessage(null);
393
+ activityMessageIndexRef.current = 0;
394
+ initialActivity = getInitialStreamActivity(t, {
395
+ isWebSearchActive: isWebSearchActive,
396
+ isDeepSearchActive: isDeepSearchActive,
397
+ hasAttachments: Boolean(attachments === null || attachments === void 0 ? void 0 : attachments.length),
398
+ attachmentsCount: (_attachments$length = attachments === null || attachments === void 0 ? void 0 : attachments.length) !== null && _attachments$length !== void 0 ? _attachments$length : 0
399
+ });
400
+ applyStreamActivity(initialActivity);
298
401
  isStoppedRef.current = false; // Resetear flag al iniciar nueva petición
299
402
 
300
403
  abortControllerRef.current = new AbortController();
@@ -360,7 +463,9 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
360
463
  if (!isStoppedRef.current) {
361
464
  (_onErrorRef$current3 = onErrorRef.current) === null || _onErrorRef$current3 === void 0 || _onErrorRef$current3.call(onErrorRef);
362
465
  }
466
+ clearStreamLoadingState();
363
467
  setLoading(false);
468
+ setIsWriting(false);
364
469
  case 5:
365
470
  case "end":
366
471
  return _context2.stop();
@@ -379,10 +484,10 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
379
484
  abortControllerRef.current = null;
380
485
  setLoading(false);
381
486
  setIsWriting(false);
382
- setLoadingMessage(null);
487
+ clearStreamLoadingState();
383
488
  (_onStopRef$current = onStopRef.current) === null || _onStopRef$current === void 0 || _onStopRef$current.call(onStopRef);
384
489
  }
385
- }, []);
490
+ }, [clearStreamLoadingState]);
386
491
 
387
492
  /**
388
493
  * Aborta el stream en curso (si existe) sin disparar `onStop`.
@@ -396,9 +501,9 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
396
501
  abortControllerRef.current = null;
397
502
  setLoading(false);
398
503
  setIsWriting(false);
399
- setLoadingMessage(null);
504
+ clearStreamLoadingState();
400
505
  }
401
- }, []);
506
+ }, [clearStreamLoadingState]);
402
507
 
403
508
  // Cleanup al desmontar: si queda un stream activo, abortarlo para evitar
404
509
  // que intente actualizar estado en un componente ya desmontado (fugas de
@@ -411,11 +516,18 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
411
516
  }
412
517
  };
413
518
  }, []);
519
+ var updateStreamActivity = useCallback(function (activity) {
520
+ if (!activity) {
521
+ clearStreamLoadingState();
522
+ return;
523
+ }
524
+ applyStreamActivity(activity);
525
+ }, [applyStreamActivity, clearStreamLoadingState]);
414
526
  var reset = function reset() {
415
527
  setData(null);
416
528
  setLoading(false);
417
529
  setIsWriting(false);
418
- setLoadingMessage(null);
530
+ clearStreamLoadingState();
419
531
  isStoppedRef.current = false;
420
532
  };
421
533
  return {
@@ -424,10 +536,12 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
424
536
  isLoading: isLoading,
425
537
  isWriting: isWriting,
426
538
  loadingMessage: loadingMessage,
539
+ streamActivity: streamActivity,
540
+ updateStreamActivity: updateStreamActivity,
427
541
  reset: reset,
428
542
  stopStreaming: stopStreaming,
429
543
  abortStreamSilently: abortStreamSilently,
430
544
  handleSSEStream: handleSSEStream // Exponer para poder usarlo en continue-thread
431
545
  };
432
546
  };
433
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJfcmVmIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RhcnRXcml0aW5nIiwib25TdG9wIiwib25FcnJvciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJkYXRhIiwic2V0RGF0YSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNMb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJsb2FkaW5nTWVzc2FnZSIsInNldExvYWRpbmdNZXNzYWdlIiwiYWJvcnRDb250cm9sbGVyUmVmIiwiaXNTdG9wcGVkUmVmIiwib25TdHJlYW1VcGRhdGVSZWYiLCJvbkZpbmlzaFN0cmVhbVJlZiIsIm9uU3RhcnRXcml0aW5nUmVmIiwib25TdG9wUmVmIiwib25FcnJvclJlZiIsIm9uQXBwcm92YWxSZXF1aXJlZFJlZiIsImN1cnJlbnQiLCJoYW5kbGVTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJfZGF0YSRhZ2VudF9pZCIsIl9vbkZpbmlzaFN0cmVhbVJlZiRjdSIsIl9vbkFwcHJvdmFsUmVxdWlyZWRSZSIsIl9vbkVycm9yUmVmJGN1cnJlbnQiLCJfZGF0YSRlcnJvciIsIl9kYXRhJGVycm9yMiIsInBlbmRpbmdDb250ZW50IiwicmFmSWQiLCJlbWl0VGhyb3R0bGVkIiwiZmx1c2hQZW5kaW5nIiwiX3Jlc3BvbnNlJGJvZHkiLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaGFzU3RhcnRlZFdyaXRpbmciLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwibGluZSIsIl9saW5lJHNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiZXZlbnRMaW5lIiwiZGF0YUxpbmUiLCJldmVudFR5cGUiLCJkYXRhU3RyIiwiX2RhdGEiLCJfb25TdGFydFdyaXRpbmdSZWYkY3UiLCJub2RlTWVzc2FnZSIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJhdHRhY2htZW50cyIsInN1Z2dlc3Rpb25zIiwiYWdlbnRJZFJhdyIsImNvbXBsZXRlZEFnZW50SWQiLCJfb25FcnJvclJlZiRjdXJyZW50MiIsIl90IiwiX3QyIiwiX3QzIiwiX3Q0Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJjb250ZW50IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiX29uU3RyZWFtVXBkYXRlUmVmJGN1IiwidG9FbWl0IiwiY2FsbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX29uU3RyZWFtVXBkYXRlUmVmJGN1MiIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJ0cmltIiwicmVwbGFjZSIsIkpTT04iLCJwYXJzZSIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsIm1lbW9yeV9zZXNzaW9uX2lkIiwiQXJyYXkiLCJpc0FycmF5Iiwic3VnZ2VzdF9yZXBseSIsImFnZW50X2lkIiwiYWdlbnRJZCIsIlN0cmluZyIsImNvbnNvbGUiLCJlcnJvciIsInR5cGUiLCJ3YXJuIiwiZSIsImYiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFza01haWEiLCJfcmVmNCIsIl9jYWxsZWUyIiwiX3JlZjMiLCJoaXN0b3J5IiwicHJvamVjdElkIiwibGFuZyIsInVzZXJJZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY2hhdElkIiwibWVzc2FnZUlkIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwiZmVlSWQiLCJhZ2VudE5hbWUiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsInByb2plY3ROYW1lIiwidGFza0lkIiwidGFza05hbWUiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiZnVhSWQiLCJzY0lkIiwiYWdlbnRFbnRpdHkiLCJjb250ZXh0TWVzc2FnZSIsIl9hYm9ydENvbnRyb2xsZXJSZWYkYyIsIl9vbkVycm9yUmVmJGN1cnJlbnQzIiwiX3Q1IiwiX2NvbnRleHQyIiwiQWJvcnRDb250cm9sbGVyIiwiT3JjaGVzdHJhdG9yIiwib3JjaGVzdHJhdG9yIiwiX29iamVjdFNwcmVhZCIsImlucHV0Iiwic2lnbmFsIiwiX3gyIiwic3RvcFN0cmVhbWluZyIsIl9vblN0b3BSZWYkY3VycmVudCIsImFib3J0IiwiYWJvcnRTdHJlYW1TaWxlbnRseSIsInJlc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBDaGF0SGlzdG9yeSB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBBZ2VudEVudGl0eSB9IGZyb20gJy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IFVzZU9yY2hlc3RyYXRvclN0cmVhbVByb3BzIH0gZnJvbSAnLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgdXNlT3JjaGVzdHJhdG9yU3RyZWFtID0gKHtcbiAgb25TdHJlYW1VcGRhdGUsXG4gIG9uRmluaXNoU3RyZWFtLFxuICBvblN0YXJ0V3JpdGluZyxcbiAgb25TdG9wLFxuICBvbkVycm9yLFxuICBvbkFwcHJvdmFsUmVxdWlyZWQsXG59OiBVc2VPcmNoZXN0cmF0b3JTdHJlYW1Qcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCBbZGF0YSwgc2V0RGF0YV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNXcml0aW5nLCBzZXRJc1dyaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtsb2FkaW5nTWVzc2FnZSwgc2V0TG9hZGluZ01lc3NhZ2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgYWJvcnRDb250cm9sbGVyUmVmID0gdXNlUmVmPEFib3J0Q29udHJvbGxlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzU3RvcHBlZFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCBvblN0cmVhbVVwZGF0ZVJlZiA9IHVzZVJlZihvblN0cmVhbVVwZGF0ZSlcbiAgY29uc3Qgb25GaW5pc2hTdHJlYW1SZWYgPSB1c2VSZWYob25GaW5pc2hTdHJlYW0pXG4gIGNvbnN0IG9uU3RhcnRXcml0aW5nUmVmID0gdXNlUmVmKG9uU3RhcnRXcml0aW5nKVxuICBjb25zdCBvblN0b3BSZWYgPSB1c2VSZWYob25TdG9wKVxuICBjb25zdCBvbkVycm9yUmVmID0gdXNlUmVmKG9uRXJyb3IpXG4gIGNvbnN0IG9uQXBwcm92YWxSZXF1aXJlZFJlZiA9IHVzZVJlZihvbkFwcHJvdmFsUmVxdWlyZWQpXG5cbiAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudCA9IG9uU3RyZWFtVXBkYXRlXG4gIG9uRmluaXNoU3RyZWFtUmVmLmN1cnJlbnQgPSBvbkZpbmlzaFN0cmVhbVxuICBvblN0YXJ0V3JpdGluZ1JlZi5jdXJyZW50ID0gb25TdGFydFdyaXRpbmdcbiAgb25TdG9wUmVmLmN1cnJlbnQgPSBvblN0b3BcbiAgb25FcnJvclJlZi5jdXJyZW50ID0gb25FcnJvclxuICBvbkFwcHJvdmFsUmVxdWlyZWRSZWYuY3VycmVudCA9IG9uQXBwcm92YWxSZXF1aXJlZFxuXG4gIGNvbnN0IGhhbmRsZVNTRVN0cmVhbSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIHJBRi10aHJvdHRsZTogZXZpdGEgZW1pdGlyIG9uU3RyZWFtVXBkYXRlIG3DoXMgZGUgdW5hIHZleiBwb3IgZnJhbWUuXG4gICAgICAvLyBBY3VtdWxhIGVsIMO6bHRpbW8gdmFsb3IgeSBsbyBsaWJlcmEgZW4gZWwgcHLDs3hpbW8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuICAgICAgLy8gTm90YTogbm8gdG9jYW1vcyBlbCBzdGF0ZSBgZGF0YWAgZW4gZWwgaG90IHBhdGggKHNvbG8gc2UgYWN0dWFsaXphIGVuXG4gICAgICAvLyBgY29tcGxldGVgL3Jlc2V0cykgcGFyYSBubyByZS1yZW5kZXJpemFyIGEgbG9zIGNvbnN1bWlkb3JlcyBkZWwgaG9va1xuICAgICAgLy8gZW4gY2FkYSBmcmFtZTsgZWwgdGV4dG8gZW4gdml2byB2aWFqYSBwb3IgZWwgc3RyZWFtaW5nU3RvcmUuXG4gICAgICBsZXQgcGVuZGluZ0NvbnRlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgICBsZXQgcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsXG4gICAgICBjb25zdCBlbWl0VGhyb3R0bGVkID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICBwZW5kaW5nQ29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgaWYgKHJhZklkICE9IG51bGwpIHJldHVyblxuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/Lih0b0VtaXQsIG51bGwsICcnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZsdXNoUGVuZGluZyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgICAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudD8uKHRvRW1pdCwgbnVsbCwgJycpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgICAgICAgaWYgKCFyZWFkZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gICAgICAgIGxldCBidWZmZXIgPSAnJ1xuICAgICAgICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgICAgICAgbGV0IGhhc1N0YXJ0ZWRXcml0aW5nID0gZmFsc2VcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGlmIChpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgICAgaWYgKGxpbmUudHJpbSgpID09PSAnJykgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgICAgICAgICAgIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgY29udGludWVcblxuICAgICAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gICAgICAgICAgICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuXG4gICAgICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndG9rZW4nOlxuICAgICAgICAgICAgICAgICAgaWYgKCFoYXNTdGFydGVkV3JpdGluZykge1xuICAgICAgICAgICAgICAgICAgICBoYXNTdGFydGVkV3JpdGluZyA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKHQoJ2NoYXQud3JpdGluZycpKVxuICAgICAgICAgICAgICAgICAgICBvblN0YXJ0V3JpdGluZ1JlZi5jdXJyZW50Py4oKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZWRDb250ZW50ICs9IGRhdGEuY29udGVudFxuICAgICAgICAgICAgICAgICAgZW1pdFRocm90dGxlZChhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgICAgICAgICAgICAvLyBTaSBlbCBldmVudG8gbm9kZSB0aWVuZSB1biBtZW5zYWplLCBhY3R1YWxpemFybG8gcGFyYSBtb3N0cmFybG8gZW4gZWwgbG9hZGVyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlICYmIHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFzZWd1cmFyIHF1ZSBpc0xvYWRpbmcgZXN0w6kgZW4gdHJ1ZSBwYXJhIG1vc3RyYXIgZWwgbG9hZGVyXG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLy8gTW9zdHJhciBub21icmUgc29sbyBwYXJhIGNyZWF0ZV90YXNrIC8gY2xvbmVfdGFzaywgZWwgcmVzdG8gbXVlc3RyYSBnZW7DqXJpY29cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZU1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5pbmNsdWRlcygnY3JlYXRlX3Rhc2snKSB8fCBkYXRhLm1lc3NhZ2UuaW5jbHVkZXMoJ2Nsb25lX3Rhc2snKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdCgnY2hhdC5leGVjdXRpbmdBY3Rpb24nKVxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShub2RlTWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSBkYXRhLmNvbnRlbnQgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VzID0gZGF0YS5zb3VyY2VzIHx8IG51bGxcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IGRhdGEubWVtb3J5X3Nlc3Npb25faWQgfHwgJydcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShkYXRhLmF0dGFjaG1lbnRzKSA/IGRhdGEuYXR0YWNobWVudHMgOiBudWxsXG4gICAgICAgICAgICAgICAgICBsZXQgc3VnZ2VzdGlvbnMgPSBudWxsXG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnN1Z2dlc3RfcmVwbHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gZGF0YS5zdWdnZXN0X3JlcGx5XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5zdWdnZXN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBkYXRhLnN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb25zdCBhZ2VudElkUmF3ID0gZGF0YS5hZ2VudF9pZCA/PyBkYXRhLmFnZW50SWRcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPVxuICAgICAgICAgICAgICAgICAgICBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgICAgIHNldERhdGEoZmluYWxDb250ZW50KVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbCkgLy8gTGltcGlhciBtZW5zYWplIGN1YW5kbyBzZSBjb21wbGV0YVxuICAgICAgICAgICAgICAgICAgb25GaW5pc2hTdHJlYW1SZWYuY3VycmVudD8uKFxuICAgICAgICAgICAgICAgICAgICBmaW5hbENvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOlxuICAgICAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKSAvLyBMaW1waWFyIG1lbnNhamUgY3VhbmRvIHNlIHJlcXVpZXJlIGFwcm9iYWNpw7NuXG4gICAgICAgICAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWRSZWYuY3VycmVudD8uKGRhdGEsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZGF0YS5lcnJvcilcbiAgICAgICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKSAvLyBMaW1waWFyIG1lbnNhamUgY3VhbmRvIGhheSBlcnJvclxuICAgICAgICAgICAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oZGF0YS5lcnJvcj8udHlwZSwgZGF0YS5lcnJvcj8ubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIFNTRSBldmVudCB0eXBlOicsIGV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBvbkVycm9yIHNpIG5vIGZ1ZSB1biBzdG9wIGludGVuY2lvbmFsXG4gICAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICAgIH1cbiAgICB9LFxuICAgIFt0XVxuICApXG5cbiAgY29uc3QgYXNrTWFpYSA9IGFzeW5jICh7XG4gICAgbWVzc2FnZSxcbiAgICBoaXN0b3J5LFxuICAgIHByb2plY3RJZCxcbiAgICBsYW5nLFxuICAgIHVzZXJJZCxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgY29tcGFueUlkLFxuICAgIGNoYXRJZCxcbiAgICBtZXNzYWdlSWQsXG4gICAgY2xpZW50SWQsXG4gICAgY2xpZW50TmFtZSxcbiAgICBmZWVJZCxcbiAgICBhZ2VudE5hbWUsXG4gICAgYWdlbnRJZCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgYXR0YWNobWVudHMsXG4gICAgcHJvamVjdE5hbWUsXG4gICAgdGFza0lkLFxuICAgIHRhc2tOYW1lLFxuICAgIGZhcUlkLFxuICAgIGFnZW50U3VnZ2VzdGlvbklkLFxuICAgIGZ1YUlkLFxuICAgIHNjSWQsXG4gICAgYWdlbnRFbnRpdHksXG4gICAgY29udGV4dE1lc3NhZ2UsXG4gIH06IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBoaXN0b3J5OiBDaGF0SGlzdG9yeVtdXG4gICAgcHJvamVjdElkOiBudW1iZXIgfCBudWxsXG4gICAgbGFuZzogc3RyaW5nXG4gICAgdXNlcklkOiBzdHJpbmdcbiAgICBmaXJzdE5hbWU/OiBzdHJpbmdcbiAgICBsYXN0TmFtZT86IHN0cmluZ1xuICAgIGNvbXBhbnlJZDogc3RyaW5nXG4gICAgY2hhdElkOiBzdHJpbmdcbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGNsaWVudElkPzogbnVtYmVyXG4gICAgY2xpZW50TmFtZT86IHN0cmluZ1xuICAgIGZlZUlkPzogbnVtYmVyXG4gICAgYWdlbnROYW1lOiBzdHJpbmdcbiAgICBhZ2VudElkOiBzdHJpbmdcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gICAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgICB0YXNrSWQ/OiBudW1iZXJcbiAgICB0YXNrTmFtZT86IHN0cmluZ1xuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5XG4gICAgY29udGV4dE1lc3NhZ2U/OiBDb250ZXh0TWVzc2FnZVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldERhdGEobnVsbClcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IGZhbHNlIC8vIFJlc2V0ZWFyIGZsYWcgYWwgaW5pY2lhciBudWV2YSBwZXRpY2nDs25cblxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3IoXG4gICAgICAgIHtcbiAgICAgICAgICBpbnB1dDogbWVzc2FnZSxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIC4uLihmaXJzdE5hbWUgPyB7IGZpcnN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihsYXN0TmFtZSA/IHsgbGFzdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICBjb21wYW55SWQsXG4gICAgICAgICAgY2hhdElkLFxuICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICBjbGllbnRJZCxcbiAgICAgICAgICAuLi4oZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQgfSA6IHt9KSxcbiAgICAgICAgICBhZ2VudE5hbWUsXG4gICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgICAgICAgLi4uKHByb2plY3RJZCA/IHsgcHJvamVjdElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIC4uLihwcm9qZWN0TmFtZSA/IHsgcHJvamVjdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50TmFtZSA/IHsgY2xpZW50TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLih0YXNrSWQgIT0gbnVsbCA/IHsgdGFza0lkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHRhc2tOYW1lID8geyB0YXNrTmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihmYXFJZCA/IHsgZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGZ1YUlkID8geyBmdWFJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihzY0lkID8geyBzY0lkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50RW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudD8uc2lnbmFsXG4gICAgICApXG5cbiAgICAgIGF3YWl0IGhhbmRsZVNTRVN0cmVhbShyZXNwb25zZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gU2kgZnVlIHVuIGFib3J0IGludGVuY2lvbmFsIChzdG9wIG1hbnVhbCBvIGNhbWJpbyBkZSBjaGF0KSwgbm8gZGlzcGFyYXIgb25FcnJvclxuICAgICAgLy8gcG9ycXVlIGVzbyBpbnNlcnRhIHVuIFwibWVuc2FqZSBkZSBlcnJvclwiIGVuIGVsIGNoYXQgYWwgcXVlIGFjYWJhbW9zIGRlIG5hdmVnYXIuXG4gICAgICBpZiAoIWlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgIG9uRXJyb3JSZWYuY3VycmVudD8uKClcbiAgICAgIH1cbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RvcFN0cmVhbWluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICAgIG9uU3RvcFJlZi5jdXJyZW50Py4oKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIEFib3J0YSBlbCBzdHJlYW0gZW4gY3Vyc28gKHNpIGV4aXN0ZSkgc2luIGRpc3BhcmFyIGBvblN0b3BgLlxuICAgKiDDmnNlbG8gZW4gY2Fzb3MgZG9uZGUgbm8gcXVlcmVtb3MgYWdyZWdhciBlbCBtZW5zYWplIGRlIFwiY2FuY2VsYWRvXCJcbiAgICogKHBvciBlamVtcGxvLCBhbCBjYW1iaWFyIGRlIGNoYXQpLlxuICAgKi9cbiAgY29uc3QgYWJvcnRTdHJlYW1TaWxlbnRseSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIENsZWFudXAgYWwgZGVzbW9udGFyOiBzaSBxdWVkYSB1biBzdHJlYW0gYWN0aXZvLCBhYm9ydGFybG8gcGFyYSBldml0YXJcbiAgLy8gcXVlIGludGVudGUgYWN0dWFsaXphciBlc3RhZG8gZW4gdW4gY29tcG9uZW50ZSB5YSBkZXNtb250YWRvIChmdWdhcyBkZVxuICAvLyBtZW1vcmlhIHkgd2FybmluZ3MpLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgIHNldERhdGEobnVsbClcbiAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXNrTWFpYSxcbiAgICByZXNwb25zZTogZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHJlc2V0LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gICAgYWJvcnRTdHJlYW1TaWxlbnRseSxcbiAgICBoYW5kbGVTU0VTdHJlYW0sIC8vIEV4cG9uZXIgcGFyYSBwb2RlciB1c2FybG8gZW4gY29udGludWUtdGhyZWFkXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBRTlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFLdEMsU0FBU0MsUUFBUSxRQUFRLHdCQUF3QjtBQUVqRCxPQUFPLElBQU1DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUFDLElBQUEsRUFPQTtFQUFBLElBTmhDQyxjQUFjLEdBQUFELElBQUEsQ0FBZEMsY0FBYztJQUNkQyxjQUFjLEdBQUFGLElBQUEsQ0FBZEUsY0FBYztJQUNkQyxjQUFjLEdBQUFILElBQUEsQ0FBZEcsY0FBYztJQUNkQyxNQUFNLEdBQUFKLElBQUEsQ0FBTkksTUFBTTtJQUNOQyxPQUFPLEdBQUFMLElBQUEsQ0FBUEssT0FBTztJQUNQQyxrQkFBa0IsR0FBQU4sSUFBQSxDQUFsQk0sa0JBQWtCO0VBRWxCLElBQUFDLGVBQUEsR0FBY1gsY0FBYyxDQUFDLENBQUNFLFFBQVEsQ0FBQ1UsTUFBTSxDQUFDLENBQUM7SUFBdkNDLENBQUMsR0FBQUYsZUFBQSxDQUFERSxDQUFDO0VBQ1QsSUFBQUMsU0FBQSxHQUF3QmxCLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDO0lBQUFtQixVQUFBLEdBQUFDLGNBQUEsQ0FBQUYsU0FBQTtJQUE5Q0csSUFBSSxHQUFBRixVQUFBO0lBQUVHLE9BQU8sR0FBQUgsVUFBQTtFQUNwQixJQUFBSSxVQUFBLEdBQWdDdkIsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBd0IsVUFB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
547
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJBQ1RJVklUWV9NRVNTQUdFX1JPVEFURV9NUyIsImFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwiY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZSIsImdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSIsImdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UiLCJnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwibG9nTWFpYVNzZUV2ZW50IiwibG9nTWFpYVNzZVN0cmVhbVN0YXJ0IiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInVzZU9yY2hlc3RyYXRvclN0cmVhbSIsIl9yZWYiLCJvblN0cmVhbVVwZGF0ZSIsIm9uRmluaXNoU3RyZWFtIiwib25TdGFydFdyaXRpbmciLCJvblN0b3AiLCJvbkVycm9yIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZGF0YSIsInNldERhdGEiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzTG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzV3JpdGluZyIsInNldElzV3JpdGluZyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibG9hZGluZ01lc3NhZ2UiLCJzZXRMb2FkaW5nTWVzc2FnZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic3RyZWFtQWN0aXZpdHkiLCJzZXRTdHJlYW1BY3Rpdml0eSIsImFib3J0Q29udHJvbGxlclJlZiIsImlzU3RvcHBlZFJlZiIsImFjdGl2aXR5TWVzc2FnZUluZGV4UmVmIiwib25TdHJlYW1VcGRhdGVSZWYiLCJvbkZpbmlzaFN0cmVhbVJlZiIsIm9uU3RhcnRXcml0aW5nUmVmIiwib25TdG9wUmVmIiwib25FcnJvclJlZiIsIm9uQXBwcm92YWxSZXF1aXJlZFJlZiIsImN1cnJlbnQiLCJjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSIsImFwcGx5U3RyZWFtQWN0aXZpdHkiLCJhY3Rpdml0eSIsInByZXYiLCJwaGFzZSIsIm1lc3NhZ2UiLCJ1bmRlZmluZWQiLCJpbnRlcnZhbElkIiwid2luZG93Iiwic2V0SW50ZXJ2YWwiLCJhZHZhbmNlZCIsIm5leHRJbmRleCIsImNsZWFySW50ZXJ2YWwiLCJoYW5kbGVTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJfb25FcnJvclJlZiRjdXJyZW50IiwiX2RhdGEkZXJyb3IiLCJfZGF0YSRlcnJvcjIiLCJwZW5kaW5nQ29udGVudCIsInJhZklkIiwiZW1pdFRocm90dGxlZCIsImZsdXNoUGVuZGluZyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImhhc1N0YXJ0ZWRXcml0aW5nIiwiZW5zdXJlV3JpdGluZ1N0YXJ0ZWQiLCJhcHBseVN0cmVhbUNodW5rIiwiYXBwbHlTdHJlYW1Db21wbGV0ZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJsaW5lIiwiX2xpbmUkc3BsaXQiLCJfbGluZSRzcGxpdDIiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsImRhdGFTdHIiLCJfZGF0YSIsImNodW5rIiwiX2NodW5rIiwiX29uQXBwcm92YWxSZXF1aXJlZFJlIiwiaXNNYW51YWxBcHByb3ZhbCIsIl9vbkVycm9yUmVmJGN1cnJlbnQyIiwiX3QiLCJfdDIiLCJfdDMiLCJfdDQiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiY29udGVudCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdSIsInRvRW1pdCIsImNhbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdTIiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsIl9vblN0YXJ0V3JpdGluZ1JlZiRjdSIsInBheWxvYWQiLCJfcGF5bG9hZCRhZ2VudF9pZCIsIl9vbkZpbmlzaFN0cmVhbVJlZiRjdSIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsImF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5Iiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImFnZW50X2lkIiwiYWdlbnRJZCIsImNvbXBsZXRlZEFnZW50SWQiLCJTdHJpbmciLCJ0cmltIiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJyZXBsYWNlIiwiSlNPTiIsInBhcnNlIiwidGhyZWFkX2lkIiwibG9nU291cmNlIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwicGVuZGluZ19hY3Rpb25zIiwibGVuZ3RoIiwiY29uc29sZSIsImVycm9yIiwidHlwZSIsIndhcm4iLCJlIiwiZiIsImZpbmlzaCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiYXNrTWFpYSIsIl9yZWY0IiwiX2NhbGxlZTIiLCJfcmVmMyIsImhpc3RvcnkiLCJwcm9qZWN0SWQiLCJsYW5nIiwidXNlcklkIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjaGF0SWQiLCJtZXNzYWdlSWQiLCJjbGllbnRJZCIsImNsaWVudE5hbWUiLCJmZWVJZCIsImFnZW50TmFtZSIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwicHJvamVjdE5hbWUiLCJ0YXNrSWQiLCJ0YXNrTmFtZSIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJmdWFJZCIsInNjSWQiLCJhZ2VudEVudGl0eSIsImNvbnRleHRNZXNzYWdlIiwiX2F0dGFjaG1lbnRzJGxlbmd0aCIsIl9hYm9ydENvbnRyb2xsZXJSZWYkYyIsImluaXRpYWxBY3Rpdml0eSIsIl9vbkVycm9yUmVmJGN1cnJlbnQzIiwiX3Q1IiwiX2NvbnRleHQyIiwiaGFzQXR0YWNobWVudHMiLCJCb29sZWFuIiwiYXR0YWNobWVudHNDb3VudCIsIkFib3J0Q29udHJvbGxlciIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsIl9vYmplY3RTcHJlYWQiLCJpbnB1dCIsInNpZ25hbCIsIl94MiIsInN0b3BTdHJlYW1pbmciLCJfb25TdG9wUmVmJGN1cnJlbnQiLCJhYm9ydCIsImFib3J0U3RyZWFtU2lsZW50bHkiLCJ1cGRhdGVTdHJlYW1BY3Rpdml0eSIsInJlc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBDaGF0SGlzdG9yeSB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBBZ2VudEVudGl0eSB9IGZyb20gJy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IFVzZU9yY2hlc3RyYXRvclN0cmVhbVByb3BzIH0gZnJvbSAnLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSB9IGZyb20gJy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHtcbiAgQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMsXG4gIGFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UsXG4gIGNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UsXG4gIGNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2UsXG4gIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSxcbiAgZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSxcbiAgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHksXG59IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBsb2dNYWlhU3NlRXZlbnQsIGxvZ01haWFTc2VTdHJlYW1TdGFydCB9IGZyb20gJy4uLy4uL3V0aWxzL2RlYnVnTWFpYVNzZUxvZydcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5cbmV4cG9ydCBjb25zdCB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gPSAoe1xuICBvblN0cmVhbVVwZGF0ZSxcbiAgb25GaW5pc2hTdHJlYW0sXG4gIG9uU3RhcnRXcml0aW5nLFxuICBvblN0b3AsXG4gIG9uRXJyb3IsXG4gIG9uQXBwcm92YWxSZXF1aXJlZCxcbiAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYsXG59OiBVc2VPcmNoZXN0cmF0b3JTdHJlYW1Qcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCBbZGF0YSwgc2V0RGF0YV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNXcml0aW5nLCBzZXRJc1dyaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtsb2FkaW5nTWVzc2FnZSwgc2V0TG9hZGluZ01lc3NhZ2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3N0cmVhbUFjdGl2aXR5LCBzZXRTdHJlYW1BY3Rpdml0eV0gPSB1c2VTdGF0ZTxTdHJlYW1BY3Rpdml0eSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlclJlZiA9IHVzZVJlZjxBYm9ydENvbnRyb2xsZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBpc1N0b3BwZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmID0gdXNlUmVmKDApXG5cbiAgY29uc3Qgb25TdHJlYW1VcGRhdGVSZWYgPSB1c2VSZWYob25TdHJlYW1VcGRhdGUpXG4gIGNvbnN0IG9uRmluaXNoU3RyZWFtUmVmID0gdXNlUmVmKG9uRmluaXNoU3RyZWFtKVxuICBjb25zdCBvblN0YXJ0V3JpdGluZ1JlZiA9IHVzZVJlZihvblN0YXJ0V3JpdGluZylcbiAgY29uc3Qgb25TdG9wUmVmID0gdXNlUmVmKG9uU3RvcClcbiAgY29uc3Qgb25FcnJvclJlZiA9IHVzZVJlZihvbkVycm9yKVxuICBjb25zdCBvbkFwcHJvdmFsUmVxdWlyZWRSZWYgPSB1c2VSZWYob25BcHByb3ZhbFJlcXVpcmVkKVxuXG4gIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQgPSBvblN0cmVhbVVwZGF0ZVxuICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50ID0gb25GaW5pc2hTdHJlYW1cbiAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudCA9IG9uU3RhcnRXcml0aW5nXG4gIG9uU3RvcFJlZi5jdXJyZW50ID0gb25TdG9wXG4gIG9uRXJyb3JSZWYuY3VycmVudCA9IG9uRXJyb3JcbiAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQgPSBvbkFwcHJvdmFsUmVxdWlyZWRcblxuICBjb25zdCBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gMFxuICAgIHNldFN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgfSwgW10pXG5cbiAgY29uc3QgYXBwbHlTdHJlYW1BY3Rpdml0eSA9IHVzZUNhbGxiYWNrKChhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkpID0+IHtcbiAgICBzZXRTdHJlYW1BY3Rpdml0eShwcmV2ID0+IHtcbiAgICAgIGlmIChwcmV2Py5waGFzZSA9PT0gYWN0aXZpdHkucGhhc2UgJiYgY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZShhY3Rpdml0eS5waGFzZSkpIHtcbiAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgIH1cbiAgICAgIGlmIChwcmV2Py5waGFzZSAhPT0gYWN0aXZpdHkucGhhc2UpIHtcbiAgICAgICAgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCA9IDBcbiAgICAgIH1cbiAgICAgIHNldExvYWRpbmdNZXNzYWdlKGFjdGl2aXR5Lm1lc3NhZ2UpXG4gICAgICByZXR1cm4gYWN0aXZpdHlcbiAgICB9KVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNMb2FkaW5nIHx8IGlzV3JpdGluZyB8fCAhc3RyZWFtQWN0aXZpdHkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gICAgaWYgKCFjYW5Sb3RhdGVTdHJlYW1BY3Rpdml0eVBoYXNlKHN0cmVhbUFjdGl2aXR5LnBoYXNlKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGludGVydmFsSWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgc2V0U3RyZWFtQWN0aXZpdHkocHJldiA9PiB7XG4gICAgICAgIGlmICghcHJldiB8fCAhY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZShwcmV2LnBoYXNlKSkge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlKHByZXYucGhhc2UsIGFjdGl2aXR5TWVzc2FnZUluZGV4UmVmLmN1cnJlbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZHZhbmNlZCA9IGFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UocHJldiwgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCwgdClcbiAgICAgICAgaWYgKCFhZHZhbmNlZCkge1xuICAgICAgICAgIHJldHVybiBwcmV2XG4gICAgICAgIH1cbiAgICAgICAgYWN0aXZpdHlNZXNzYWdlSW5kZXhSZWYuY3VycmVudCA9IGFkdmFuY2VkLm5leHRJbmRleFxuICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShhZHZhbmNlZC5hY3Rpdml0eS5tZXNzYWdlKVxuICAgICAgICByZXR1cm4gYWR2YW5jZWQuYWN0aXZpdHlcbiAgICAgIH0pXG4gICAgfSwgQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMpXG5cbiAgICByZXR1cm4gKCkgPT4gd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZClcbiAgfSwgW2lzTG9hZGluZywgaXNXcml0aW5nLCBzdHJlYW1BY3Rpdml0eT8ucGhhc2UsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZVNTRVN0cmVhbSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIHJBRi10aHJvdHRsZTogZXZpdGEgZW1pdGlyIG9uU3RyZWFtVXBkYXRlIG3DoXMgZGUgdW5hIHZleiBwb3IgZnJhbWUuXG4gICAgICAvLyBBY3VtdWxhIGVsIMO6bHRpbW8gdmFsb3IgeSBsbyBsaWJlcmEgZW4gZWwgcHLDs3hpbW8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lLlxuICAgICAgLy8gTm90YTogbm8gdG9jYW1vcyBlbCBzdGF0ZSBgZGF0YWAgZW4gZWwgaG90IHBhdGggKHNvbG8gc2UgYWN0dWFsaXphIGVuXG4gICAgICAvLyBgY29tcGxldGVgL3Jlc2V0cykgcGFyYSBubyByZS1yZW5kZXJpemFyIGEgbG9zIGNvbnN1bWlkb3JlcyBkZWwgaG9va1xuICAgICAgLy8gZW4gY2FkYSBmcmFtZTsgZWwgdGV4dG8gZW4gdml2byB2aWFqYSBwb3IgZWwgc3RyZWFtaW5nU3RvcmUuXG4gICAgICBsZXQgcGVuZGluZ0NvbnRlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgICBsZXQgcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsXG4gICAgICBjb25zdCBlbWl0VGhyb3R0bGVkID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICBwZW5kaW5nQ29udGVudCA9IGNvbnRlbnRcbiAgICAgICAgaWYgKHJhZklkICE9IG51bGwpIHJldHVyblxuICAgICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/Lih0b0VtaXQsIG51bGwsICcnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZsdXNoUGVuZGluZyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHJhZklkICE9IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgICAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudD8uKHRvRW1pdCwgbnVsbCwgJycpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nTWFpYVNzZVN0cmVhbVN0YXJ0KCdvcmNoZXN0cmF0b3InKVxuICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICAgICAgICBpZiAoIXJlYWRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgICAgICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuXG4gICAgICAgIGNvbnN0IGVuc3VyZVdyaXRpbmdTdGFydGVkID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChoYXNTdGFydGVkV3JpdGluZykgcmV0dXJuXG4gICAgICAgICAgaGFzU3RhcnRlZFdyaXRpbmcgPSB0cnVlXG4gICAgICAgICAgc2V0SXNXcml0aW5nKHRydWUpXG4gICAgICAgICAgYXBwbHlTdHJlYW1BY3Rpdml0eShnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkodCkpXG4gICAgICAgICAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudD8uKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcGx5U3RyZWFtQ2h1bmsgPSAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmICghY2h1bmspIHJldHVyblxuICAgICAgICAgIGFjY3VtdWxhdGVkQ29udGVudCA9IG1lcmdlU3RyZWFtQ2h1bmsoYWNjdW11bGF0ZWRDb250ZW50LCBjaHVuaylcbiAgICAgICAgICBlbWl0VGhyb3R0bGVkKGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFwcGx5U3RyZWFtQ29tcGxldGUgPSAocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAocGF5bG9hZC5jb250ZW50IGFzIHN0cmluZykgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgICAgICAgY29uc3Qgc291cmNlcyA9IHBheWxvYWQuc291cmNlcyB8fCBudWxsXG4gICAgICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKHBheWxvYWQubWVtb3J5X3Nlc3Npb25faWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShwYXlsb2FkLmF0dGFjaG1lbnRzKSA/IHBheWxvYWQuYXR0YWNobWVudHMgOiBudWxsXG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0X3JlcGx5KSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBwYXlsb2FkLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW11cbiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5zdWdnZXN0aW9ucykpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhZ2VudElkUmF3ID0gcGF5bG9hZC5hZ2VudF9pZCA/PyBwYXlsb2FkLmFnZW50SWRcbiAgICAgICAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID1cbiAgICAgICAgICAgIGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICBzZXREYXRhKGZpbmFsQ29udGVudClcbiAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICAgICAgb25GaW5pc2hTdHJlYW1SZWYuY3VycmVudD8uKFxuICAgICAgICAgICAgZmluYWxDb250ZW50LFxuICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBpZiAoaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgICAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICAgICAgICAgICAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcbiAgICAgICAgICAgICAgbG9nTWFpYVNzZUV2ZW50KCdvcmNoZXN0cmF0b3InLCBldmVudFR5cGUsIGRhdGEpXG5cbiAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0aGlua2luZyc6XG4gICAgICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1BY3Rpdml0eSh7XG4gICAgICAgICAgICAgICAgICAgICAgcGhhc2U6ICd0aGlua2luZycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSgwLCB0KSxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICd0b2tlbic6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gdHlwZW9mIGRhdGEuY29udGVudCA9PT0gJ3N0cmluZycgPyBkYXRhLmNvbnRlbnQgOiAnJ1xuICAgICAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnY29udGVudCc6IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gdHlwZW9mIGRhdGEuY29udGVudCA9PT0gJ3N0cmluZycgPyBkYXRhLmNvbnRlbnQgOiAnJ1xuICAgICAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1Db21wbGV0ZShkYXRhKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KFxuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmPy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGRhdGEudGhyZWFkX2lkID09PSAnc3RyaW5nJyA/IGRhdGEudGhyZWFkX2lkIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBsb2dTb3VyY2U6ICdvcmNoZXN0cmF0b3I6bm9kZScgfVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdhcHByb3ZhbF9yZXF1aXJlZCc6IHtcbiAgICAgICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBjb25zdCBpc01hbnVhbEFwcHJvdmFsID0gZGF0YS5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgIGlmICghaXNNYW51YWxBcHByb3ZhbCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWRSZWYuY3VycmVudD8uKGRhdGEsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICAgIGlmIChpc01hbnVhbEFwcHJvdmFsICYmIEFycmF5LmlzQXJyYXkoZGF0YS5wZW5kaW5nX2FjdGlvbnMpICYmIGRhdGEucGVuZGluZ19hY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KFxuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmPy5jdXJyZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dTb3VyY2U6ICdvcmNoZXN0cmF0b3I6bWFudWFsQXBwcm92YWwnLFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGRhdGEuZXJyb3IpXG4gICAgICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gaGF5IGVycm9yXG4gICAgICAgICAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LihkYXRhLmVycm9yPy50eXBlLCBkYXRhLmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBvbkVycm9yIHNpIG5vIGZ1ZSB1biBzdG9wIGludGVuY2lvbmFsXG4gICAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FwcGx5U3RyZWFtQWN0aXZpdHksIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlLCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiwgdF1cbiAgKVxuXG4gIGNvbnN0IGFza01haWEgPSBhc3luYyAoe1xuICAgIG1lc3NhZ2UsXG4gICAgaGlzdG9yeSxcbiAgICBwcm9qZWN0SWQsXG4gICAgbGFuZyxcbiAgICB1c2VySWQsXG4gICAgZmlyc3ROYW1lLFxuICAgIGxhc3ROYW1lLFxuICAgIGNvbXBhbnlJZCxcbiAgICBjaGF0SWQsXG4gICAgbWVzc2FnZUlkLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudE5hbWUsXG4gICAgZmVlSWQsXG4gICAgYWdlbnROYW1lLFxuICAgIGFnZW50SWQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIHByb2plY3ROYW1lLFxuICAgIHRhc2tJZCxcbiAgICB0YXNrTmFtZSxcbiAgICBmYXFJZCxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICBmdWFJZCxcbiAgICBzY0lkLFxuICAgIGFnZW50RW50aXR5LFxuICAgIGNvbnRleHRNZXNzYWdlLFxuICB9OiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaGlzdG9yeTogQ2hhdEhpc3RvcnlbXVxuICAgIHByb2plY3RJZDogbnVtYmVyIHwgbnVsbFxuICAgIGxhbmc6IHN0cmluZ1xuICAgIHVzZXJJZDogc3RyaW5nXG4gICAgZmlyc3ROYW1lPzogc3RyaW5nXG4gICAgbGFzdE5hbWU/OiBzdHJpbmdcbiAgICBjb21wYW55SWQ6IHN0cmluZ1xuICAgIGNoYXRJZDogc3RyaW5nXG4gICAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgICBjbGllbnRJZD86IG51bWJlclxuICAgIGNsaWVudE5hbWU/OiBzdHJpbmdcbiAgICBmZWVJZD86IG51bWJlclxuICAgIGFnZW50TmFtZTogc3RyaW5nXG4gICAgYWdlbnRJZDogc3RyaW5nXG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICAgIHByb2plY3ROYW1lPzogc3RyaW5nXG4gICAgdGFza0lkPzogbnVtYmVyXG4gICAgdGFza05hbWU/OiBzdHJpbmdcbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gICAgYWdlbnRFbnRpdHk/OiBBZ2VudEVudGl0eVxuICAgIGNvbnRleHRNZXNzYWdlPzogQ29udGV4dE1lc3NhZ2VcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBzZXREYXRhKG51bGwpXG4gICAgICBhY3Rpdml0eU1lc3NhZ2VJbmRleFJlZi5jdXJyZW50ID0gMFxuICAgICAgY29uc3QgaW5pdGlhbEFjdGl2aXR5ID0gZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIHtcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgICAgaGFzQXR0YWNobWVudHM6IEJvb2xlYW4oYXR0YWNobWVudHM/Lmxlbmd0aCksXG4gICAgICAgIGF0dGFjaG1lbnRzQ291bnQ6IGF0dGFjaG1lbnRzPy5sZW5ndGggPz8gMCxcbiAgICAgIH0pXG4gICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KGluaXRpYWxBY3Rpdml0eSlcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2UgLy8gUmVzZXRlYXIgZmxhZyBhbCBpbmljaWFyIG51ZXZhIHBldGljacOzblxuXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0OiBtZXNzYWdlLFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgLi4uKGZpcnN0TmFtZSA/IHsgZmlyc3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGxhc3ROYW1lID8geyBsYXN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIGNvbXBhbnlJZCxcbiAgICAgICAgICBjaGF0SWQsXG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIGNsaWVudElkLFxuICAgICAgICAgIC4uLihmZWVJZCAhPSBudWxsID8geyBmZWVJZCB9IDoge30pLFxuICAgICAgICAgIGFnZW50TmFtZSxcbiAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgICAgICAuLi4ocHJvamVjdElkID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHByb2plY3ROYW1lID8geyBwcm9qZWN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjbGllbnROYW1lID8geyBjbGllbnROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHRhc2tJZCAhPSBudWxsID8geyB0YXNrSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4odGFza05hbWUgPyB7IHRhc2tOYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGZhcUlkID8geyBmYXFJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZnVhSWQgPyB7IGZ1YUlkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHNjSWQgPyB7IHNjSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRFbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50Py5zaWduYWxcbiAgICAgIClcblxuICAgICAgYXdhaXQgaGFuZGxlU1NFU3RyZWFtKHJlc3BvbnNlKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTaSBmdWUgdW4gYWJvcnQgaW50ZW5jaW9uYWwgKHN0b3AgbWFudWFsIG8gY2FtYmlvIGRlIGNoYXQpLCBubyBkaXNwYXJhciBvbkVycm9yXG4gICAgICAvLyBwb3JxdWUgZXNvIGluc2VydGEgdW4gXCJtZW5zYWplIGRlIGVycm9yXCIgZW4gZWwgY2hhdCBhbCBxdWUgYWNhYmFtb3MgZGUgbmF2ZWdhci5cbiAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oKVxuICAgICAgfVxuICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdG9wU3RyZWFtaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZSgpXG4gICAgICBvblN0b3BSZWYuY3VycmVudD8uKClcbiAgICB9XG4gIH0sIFtjbGVhclN0cmVhbUxvYWRpbmdTdGF0ZV0pXG5cbiAgLyoqXG4gICAqIEFib3J0YSBlbCBzdHJlYW0gZW4gY3Vyc28gKHNpIGV4aXN0ZSkgc2luIGRpc3BhcmFyIGBvblN0b3BgLlxuICAgKiDDmnNlbG8gZW4gY2Fzb3MgZG9uZGUgbm8gcXVlcmVtb3MgYWdyZWdhciBlbCBtZW5zYWplIGRlIFwiY2FuY2VsYWRvXCJcbiAgICogKHBvciBlamVtcGxvLCBhbCBjYW1iaWFyIGRlIGNoYXQpLlxuICAgKi9cbiAgY29uc3QgYWJvcnRTdHJlYW1TaWxlbnRseSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgY2xlYXJTdHJlYW1Mb2FkaW5nU3RhdGUoKVxuICAgIH1cbiAgfSwgW2NsZWFyU3RyZWFtTG9hZGluZ1N0YXRlXSlcblxuICAvLyBDbGVhbnVwIGFsIGRlc21vbnRhcjogc2kgcXVlZGEgdW4gc3RyZWFtIGFjdGl2bywgYWJvcnRhcmxvIHBhcmEgZXZpdGFyXG4gIC8vIHF1ZSBpbnRlbnRlIGFjdHVhbGl6YXIgZXN0YWRvIGVuIHVuIGNvbXBvbmVudGUgeWEgZGVzbW9udGFkbyAoZnVnYXMgZGVcbiAgLy8gbWVtb3JpYSB5IHdhcm5pbmdzKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCB1cGRhdGVTdHJlYW1BY3Rpdml0eSA9IHVzZUNhbGxiYWNrKFxuICAgIChhY3Rpdml0eTogU3RyZWFtQWN0aXZpdHkgfCBudWxsKSA9PiB7XG4gICAgICBpZiAoIWFjdGl2aXR5KSB7XG4gICAgICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBhcHBseVN0cmVhbUFjdGl2aXR5KGFjdGl2aXR5KVxuICAgIH0sXG4gICAgW2FwcGx5U3RyZWFtQWN0aXZpdHksIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlXVxuICApXG5cbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0RGF0YShudWxsKVxuICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIGNsZWFyU3RyZWFtTG9hZGluZ1N0YXRlKClcbiAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IGZhbHNlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFza01haWEsXG4gICAgcmVzcG9uc2U6IGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICByZXNldCxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICAgIGFib3J0U3RyZWFtU2lsZW50bHksXG4gICAgaGFuZGxlU1NFU3RyZWFtLCAvLyBFeHBvbmVyIHBhcmEgcG9kZXIgdXNhcmxvIGVuIGNvbnRpbnVlLXRocmVhZFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUU5QyxPQUFPQyxJQUFJLE1BQU0scUJBQXFCO0FBS3RDLFNBQVNDLFFBQVEsUUFBUSx3QkFBd0I7QUFFakQsU0FDRUMsMEJBQTBCLEVBQzFCQyw0QkFBNEIsRUFDNUJDLCtCQUErQixFQUMvQkMsNEJBQTRCLEVBQzVCQyx3QkFBd0IsRUFDeEJDLHlCQUF5QixFQUN6QkMsd0JBQXdCLEVBQ3hCQyw2QkFBNkIsRUFDN0JDLGdDQUFnQyxRQUMzQixvQ0FBb0M7QUFDM0MsU0FBU0MsZUFBZSxFQUFFQyxxQkFBcUIsUUFBUSw2QkFBNkI7QUFDcEYsU0FBU0Msd0JBQXdCLEVBQUVDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUV6RixPQUFPLElBQU1DLHFCQUFx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