@projectcor/maia-components 2.11.31 → 2.11.32-1

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 (32) hide show
  1. package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +33 -0
  2. package/lib/components/atoms/icons/index.js +2 -1
  3. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +4 -2
  4. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +6 -2
  5. package/lib/components/molecules/ChatAIHome/styles.js +14 -7
  6. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +178 -165
  7. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +197 -61
  8. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +28 -15
  9. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +91 -18
  10. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +17 -2
  11. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +16 -0
  12. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +12 -0
  13. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +13 -0
  14. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +3 -0
  15. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +57 -0
  16. package/lib/components/molecules/ChatAIModal/layout.js +35 -0
  17. package/lib/hooks/useChatManager/useChatManager.js +97 -23
  18. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +145 -73
  19. package/lib/hooks/useProjectSearch.js +11 -4
  20. package/lib/hooks/useSmoothStreamText/index.js +2 -0
  21. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +189 -0
  22. package/lib/hooks/useStreamingMessage/index.js +3 -0
  23. package/lib/hooks/useStreamingMessage/streamingStore.js +69 -0
  24. package/lib/hooks/useStreamingMessage/useStreamingMessage.js +22 -0
  25. package/lib/lang/br/index.js +5 -1
  26. package/lib/lang/en/index.js +5 -1
  27. package/lib/lang/es/index.js +5 -1
  28. package/lib/lang/fr/index.js +5 -1
  29. package/lib/services/maia/Orchestrator/orchestrator.js +6 -4
  30. package/lib/services/query/projectSearchByValueQuery.js +2 -2
  31. package/lib/types/Project.js +1 -1
  32. package/package.json +1 -1
@@ -15,7 +15,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
15
15
  /* eslint-disable no-case-declarations */
16
16
  /* eslint-disable no-restricted-syntax */
17
17
  /* eslint-disable @typescript-eslint/no-explicit-any */
18
- import { useState, useCallback, useRef } from 'react';
18
+ 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';
@@ -60,89 +60,121 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
60
60
  onApprovalRequiredRef.current = onApprovalRequired;
61
61
  var handleSSEStream = useCallback(/*#__PURE__*/function () {
62
62
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response) {
63
- var _onStreamUpdateRef$cu, _data$agent_id, _onFinishStreamRef$cu, _onApprovalRequiredRe, _onErrorRef$current;
64
- var _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;
63
+ var _data$agent_id, _onFinishStreamRef$cu, _onApprovalRequiredRe, _onErrorRef$current;
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;
65
65
  return _regeneratorRuntime.wrap(function (_context) {
66
66
  while (1) switch (_context.prev = _context.next) {
67
67
  case 0:
68
- _context.prev = 0;
68
+ // rAF-throttle: evita emitir onStreamUpdate más de una vez por frame.
69
+ // Acumula el último valor y lo libera en el próximo requestAnimationFrame.
70
+ // Nota: no tocamos el state `data` en el hot path (solo se actualiza en
71
+ // `complete`/resets) para no re-renderizar a los consumidores del hook
72
+ // en cada frame; el texto en vivo viaja por el streamingStore.
73
+ pendingContent = null;
74
+ rafId = null;
75
+ emitThrottled = function emitThrottled(content) {
76
+ pendingContent = content;
77
+ if (rafId != null) return;
78
+ rafId = requestAnimationFrame(function () {
79
+ rafId = null;
80
+ if (pendingContent != null) {
81
+ var _onStreamUpdateRef$cu;
82
+ var toEmit = pendingContent;
83
+ pendingContent = null;
84
+ (_onStreamUpdateRef$cu = onStreamUpdateRef.current) === null || _onStreamUpdateRef$cu === void 0 || _onStreamUpdateRef$cu.call(onStreamUpdateRef, toEmit, null, '');
85
+ }
86
+ });
87
+ };
88
+ flushPending = function flushPending() {
89
+ if (rafId != null) {
90
+ cancelAnimationFrame(rafId);
91
+ rafId = null;
92
+ }
93
+ if (pendingContent != null) {
94
+ var _onStreamUpdateRef$cu2;
95
+ var toEmit = pendingContent;
96
+ pendingContent = null;
97
+ (_onStreamUpdateRef$cu2 = onStreamUpdateRef.current) === null || _onStreamUpdateRef$cu2 === void 0 || _onStreamUpdateRef$cu2.call(onStreamUpdateRef, toEmit, null, '');
98
+ }
99
+ };
100
+ _context.prev = 1;
69
101
  reader = (_response$body = response.body) === null || _response$body === void 0 ? void 0 : _response$body.getReader();
70
102
  if (reader) {
71
- _context.next = 1;
103
+ _context.next = 2;
72
104
  break;
73
105
  }
74
106
  throw new Error('No reader available');
75
- case 1:
107
+ case 2:
76
108
  decoder = new TextDecoder();
77
109
  buffer = '';
78
110
  accumulatedContent = '';
79
111
  hasStartedWriting = false;
80
- case 2:
112
+ case 3:
81
113
  if (!true) {
82
- _context.next = 25;
114
+ _context.next = 26;
83
115
  break;
84
116
  }
85
117
  if (!isStoppedRef.current) {
86
- _context.next = 3;
118
+ _context.next = 4;
87
119
  break;
88
120
  }
89
121
  reader.cancel();
90
- return _context.abrupt("continue", 25);
91
- case 3:
92
- _context.next = 4;
93
- return reader.read();
122
+ return _context.abrupt("continue", 26);
94
123
  case 4:
124
+ _context.next = 5;
125
+ return reader.read();
126
+ case 5:
95
127
  _yield$reader$read = _context.sent;
96
128
  done = _yield$reader$read.done;
97
129
  value = _yield$reader$read.value;
98
130
  if (!done) {
99
- _context.next = 5;
131
+ _context.next = 6;
100
132
  break;
101
133
  }
102
- return _context.abrupt("continue", 25);
103
- case 5:
134
+ return _context.abrupt("continue", 26);
135
+ case 6:
104
136
  if (!isStoppedRef.current) {
105
- _context.next = 6;
137
+ _context.next = 7;
106
138
  break;
107
139
  }
108
140
  reader.cancel();
109
- return _context.abrupt("continue", 25);
110
- case 6:
141
+ return _context.abrupt("continue", 26);
142
+ case 7:
111
143
  buffer += decoder.decode(value, {
112
144
  stream: true
113
145
  });
114
146
  lines = buffer.split('\n\n');
115
147
  buffer = lines.pop() || '';
116
148
  _iterator = _createForOfIteratorHelper(lines);
117
- _context.prev = 7;
149
+ _context.prev = 8;
118
150
  _iterator.s();
119
- case 8:
151
+ case 9:
120
152
  if ((_step = _iterator.n()).done) {
121
- _context.next = 21;
153
+ _context.next = 22;
122
154
  break;
123
155
  }
124
156
  line = _step.value;
125
157
  if (!(line.trim() === '')) {
126
- _context.next = 9;
158
+ _context.next = 10;
127
159
  break;
128
160
  }
129
- return _context.abrupt("continue", 20);
130
- case 9:
161
+ return _context.abrupt("continue", 21);
162
+ case 10:
131
163
  _line$split = line.split('\n'), _line$split2 = _slicedToArray(_line$split, 2), eventLine = _line$split2[0], dataLine = _line$split2[1];
132
164
  if (!(!eventLine || !dataLine)) {
133
- _context.next = 10;
165
+ _context.next = 11;
134
166
  break;
135
167
  }
136
- return _context.abrupt("continue", 20);
137
- case 10:
168
+ return _context.abrupt("continue", 21);
169
+ case 11:
138
170
  eventType = eventLine.replace('event: ', '').trim();
139
171
  dataStr = dataLine.replace('data: ', '').trim();
140
- _context.prev = 11;
172
+ _context.prev = 12;
141
173
  _data = JSON.parse(dataStr);
142
174
  _t = eventType;
143
- _context.next = _t === 'token' ? 12 : _t === 'node' ? 13 : _t === 'complete' ? 14 : _t === 'approval_required' ? 15 : _t === 'error' ? 16 : 17;
175
+ _context.next = _t === 'token' ? 13 : _t === 'node' ? 14 : _t === 'complete' ? 15 : _t === 'approval_required' ? 16 : _t === 'error' ? 17 : 18;
144
176
  break;
145
- case 12:
177
+ case 13:
146
178
  if (!hasStartedWriting) {
147
179
  hasStartedWriting = true;
148
180
  setIsWriting(true);
@@ -150,10 +182,9 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
150
182
  (_onStartWritingRef$cu = onStartWritingRef.current) === null || _onStartWritingRef$cu === void 0 || _onStartWritingRef$cu.call(onStartWritingRef);
151
183
  }
152
184
  accumulatedContent += _data.content;
153
- setData(accumulatedContent);
154
- (_onStreamUpdateRef$cu = onStreamUpdateRef.current) === null || _onStreamUpdateRef$cu === void 0 || _onStreamUpdateRef$cu.call(onStreamUpdateRef, accumulatedContent, null, '');
155
- return _context.abrupt("continue", 18);
156
- case 13:
185
+ emitThrottled(accumulatedContent);
186
+ return _context.abrupt("continue", 19);
187
+ case 14:
157
188
  // Si el evento node tiene un mensaje, actualizarlo para mostrarlo en el loader
158
189
  if (_data.message && typeof _data.message === 'string') {
159
190
  // Asegurar que isLoading esté en true para mostrar el loader
@@ -162,8 +193,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
162
193
  nodeMessage = _data.message.includes('create_task') || _data.message.includes('clone_task') ? _data.message : t('chat.executingAction');
163
194
  setLoadingMessage(nodeMessage);
164
195
  }
165
- return _context.abrupt("continue", 18);
166
- case 14:
196
+ return _context.abrupt("continue", 19);
197
+ case 15:
167
198
  finalContent = _data.content || accumulatedContent;
168
199
  sources = _data.sources || null;
169
200
  memorySessionId = _data.memory_session_id || '';
@@ -176,72 +207,77 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
176
207
  }
177
208
  agentIdRaw = (_data$agent_id = _data.agent_id) !== null && _data$agent_id !== void 0 ? _data$agent_id : _data.agentId;
178
209
  completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
210
+ flushPending();
179
211
  setData(finalContent);
180
212
  setIsWriting(false);
181
213
  setLoadingMessage(null); // Limpiar mensaje cuando se completa
182
214
  (_onFinishStreamRef$cu = onFinishStreamRef.current) === null || _onFinishStreamRef$cu === void 0 || _onFinishStreamRef$cu.call(onFinishStreamRef, finalContent, sources, memorySessionId, attachments, suggestions, completedAgentId);
183
- return _context.abrupt("continue", 18);
184
- case 15:
215
+ return _context.abrupt("continue", 19);
216
+ case 16:
217
+ flushPending();
185
218
  setIsWriting(false);
186
219
  setLoading(false);
187
220
  setLoadingMessage(null); // Limpiar mensaje cuando se requiere aprobación
188
221
  (_onApprovalRequiredRe = onApprovalRequiredRef.current) === null || _onApprovalRequiredRe === void 0 || _onApprovalRequiredRe.call(onApprovalRequiredRef, _data, accumulatedContent);
189
- return _context.abrupt("continue", 18);
190
- case 16:
222
+ return _context.abrupt("continue", 19);
223
+ case 17:
191
224
  console.error('SSE Error:', _data.error);
225
+ flushPending();
192
226
  setIsWriting(false);
193
227
  setLoadingMessage(null); // Limpiar mensaje cuando hay error
194
228
  (_onErrorRef$current = onErrorRef.current) === null || _onErrorRef$current === void 0 || _onErrorRef$current.call(onErrorRef);
195
- return _context.abrupt("continue", 18);
196
- case 17:
197
- console.warn('Unknown SSE event type:', eventType);
229
+ return _context.abrupt("continue", 19);
198
230
  case 18:
199
- _context.next = 20;
200
- break;
231
+ console.warn('Unknown SSE event type:', eventType);
201
232
  case 19:
202
- _context.prev = 19;
203
- _t2 = _context["catch"](11);
204
- console.error('Error parsing SSE data:', _t2, dataStr);
205
- case 20:
206
- _context.next = 8;
233
+ _context.next = 21;
207
234
  break;
235
+ case 20:
236
+ _context.prev = 20;
237
+ _t2 = _context["catch"](12);
238
+ console.error('Error parsing SSE data:', _t2, dataStr);
208
239
  case 21:
209
- _context.next = 23;
240
+ _context.next = 9;
210
241
  break;
211
242
  case 22:
212
- _context.prev = 22;
213
- _t3 = _context["catch"](7);
214
- _iterator.e(_t3);
243
+ _context.next = 24;
244
+ break;
215
245
  case 23:
216
246
  _context.prev = 23;
217
- _iterator.f();
218
- return _context.finish(23);
247
+ _t3 = _context["catch"](8);
248
+ _iterator.e(_t3);
219
249
  case 24:
220
- _context.next = 2;
221
- break;
250
+ _context.prev = 24;
251
+ _iterator.f();
252
+ return _context.finish(24);
222
253
  case 25:
223
- _context.next = 27;
254
+ _context.next = 3;
224
255
  break;
225
256
  case 26:
226
- _context.prev = 26;
227
- _t4 = _context["catch"](0);
257
+ _context.next = 28;
258
+ break;
259
+ case 27:
260
+ _context.prev = 27;
261
+ _t4 = _context["catch"](1);
262
+ flushPending();
228
263
  setIsWriting(false);
229
264
 
230
265
  // Solo ejecutar onError si no fue un stop intencional
231
266
  if (!isStoppedRef.current) {
232
267
  (_onErrorRef$current2 = onErrorRef.current) === null || _onErrorRef$current2 === void 0 || _onErrorRef$current2.call(onErrorRef);
233
268
  }
234
- case 27:
235
- _context.prev = 27;
269
+ case 28:
270
+ _context.prev = 28;
271
+ flushPending();
236
272
  setLoading(false);
237
273
  setIsWriting(false);
238
274
  setLoadingMessage(null);
239
- return _context.finish(27);
240
- case 28:
275
+ return _context.finish(28);
276
+ case 29:
241
277
  case "end":
242
278
  return _context.stop();
243
279
  }
244
- }, _callee, null, [[0, 26, 27, 28], [7, 22, 23, 24], [11, 19]]);
280
+ }, _callee, null, [[1, 27, 28, 29], [8, 23, 24, 25], [12, 20]]);
245
281
  }));
246
282
  return function (_x) {
247
283
  return _ref2.apply(this, arguments);
@@ -249,11 +285,11 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
249
285
  }(), [t]);
250
286
  var askMaia = /*#__PURE__*/function () {
251
287
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref3) {
252
- var message, history, projectId, lang, userId, firstName, lastName, companyId, chatId, messageId, clientId, clientName, agentName, agentId, isWebSearchActive, isDeepSearchActive, attachments, projectName, faqId, agentSuggestionId, agentEntity, _abortControllerRef$c, response, _t5;
288
+ var message, history, projectId, lang, userId, firstName, lastName, companyId, chatId, messageId, clientId, clientName, feeId, agentName, agentId, isWebSearchActive, isDeepSearchActive, attachments, projectName, faqId, agentSuggestionId, agentEntity, _abortControllerRef$c, response, _onErrorRef$current3, _t5;
253
289
  return _regeneratorRuntime.wrap(function (_context2) {
254
290
  while (1) switch (_context2.prev = _context2.next) {
255
291
  case 0:
256
- message = _ref3.message, history = _ref3.history, projectId = _ref3.projectId, lang = _ref3.lang, userId = _ref3.userId, firstName = _ref3.firstName, lastName = _ref3.lastName, companyId = _ref3.companyId, chatId = _ref3.chatId, messageId = _ref3.messageId, clientId = _ref3.clientId, clientName = _ref3.clientName, agentName = _ref3.agentName, agentId = _ref3.agentId, isWebSearchActive = _ref3.isWebSearchActive, isDeepSearchActive = _ref3.isDeepSearchActive, attachments = _ref3.attachments, projectName = _ref3.projectName, faqId = _ref3.faqId, agentSuggestionId = _ref3.agentSuggestionId, agentEntity = _ref3.agentEntity;
292
+ message = _ref3.message, history = _ref3.history, projectId = _ref3.projectId, lang = _ref3.lang, userId = _ref3.userId, firstName = _ref3.firstName, lastName = _ref3.lastName, companyId = _ref3.companyId, chatId = _ref3.chatId, messageId = _ref3.messageId, clientId = _ref3.clientId, clientName = _ref3.clientName, feeId = _ref3.feeId, agentName = _ref3.agentName, agentId = _ref3.agentId, isWebSearchActive = _ref3.isWebSearchActive, isDeepSearchActive = _ref3.isDeepSearchActive, attachments = _ref3.attachments, projectName = _ref3.projectName, faqId = _ref3.faqId, agentSuggestionId = _ref3.agentSuggestionId, agentEntity = _ref3.agentEntity;
257
293
  _context2.prev = 1;
258
294
  setLoading(true);
259
295
  setIsWriting(false);
@@ -263,7 +299,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
263
299
 
264
300
  abortControllerRef.current = new AbortController();
265
301
  _context2.next = 2;
266
- return maia.Orchestrator.orchestrator(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
302
+ return maia.Orchestrator.orchestrator(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
267
303
  input: message,
268
304
  history: history,
269
305
  lang: lang,
@@ -276,7 +312,10 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
276
312
  companyId: companyId,
277
313
  chatId: chatId,
278
314
  messageId: messageId,
279
- clientId: clientId,
315
+ clientId: clientId
316
+ }, feeId != null ? {
317
+ feeId: feeId
318
+ } : {}), {}, {
280
319
  agentName: agentName,
281
320
  agentId: agentId,
282
321
  isWebSearchActive: isWebSearchActive,
@@ -306,7 +345,11 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
306
345
  case 4:
307
346
  _context2.prev = 4;
308
347
  _t5 = _context2["catch"](1);
309
- onError === null || onError === void 0 || onError();
348
+ // Si fue un abort intencional (stop manual o cambio de chat), no disparar onError
349
+ // porque eso inserta un "mensaje de error" en el chat al que acabamos de navegar.
350
+ if (!isStoppedRef.current) {
351
+ (_onErrorRef$current3 = onErrorRef.current) === null || _onErrorRef$current3 === void 0 || _onErrorRef$current3.call(onErrorRef);
352
+ }
310
353
  setLoading(false);
311
354
  case 5:
312
355
  case "end":
@@ -330,6 +373,34 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
330
373
  (_onStopRef$current = onStopRef.current) === null || _onStopRef$current === void 0 || _onStopRef$current.call(onStopRef);
331
374
  }
332
375
  }, []);
376
+
377
+ /**
378
+ * Aborta el stream en curso (si existe) sin disparar `onStop`.
379
+ * Úselo en casos donde no queremos agregar el mensaje de "cancelado"
380
+ * (por ejemplo, al cambiar de chat).
381
+ */
382
+ var abortStreamSilently = useCallback(function () {
383
+ if (abortControllerRef.current) {
384
+ isStoppedRef.current = true;
385
+ abortControllerRef.current.abort();
386
+ abortControllerRef.current = null;
387
+ setLoading(false);
388
+ setIsWriting(false);
389
+ setLoadingMessage(null);
390
+ }
391
+ }, []);
392
+
393
+ // Cleanup al desmontar: si queda un stream activo, abortarlo para evitar
394
+ // que intente actualizar estado en un componente ya desmontado (fugas de
395
+ // memoria y warnings).
396
+ useEffect(function () {
397
+ return function () {
398
+ if (abortControllerRef.current) {
399
+ abortControllerRef.current.abort();
400
+ abortControllerRef.current = null;
401
+ }
402
+ };
403
+ }, []);
333
404
  var reset = function reset() {
334
405
  setData(null);
335
406
  setLoading(false);
@@ -345,7 +416,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
345
416
  loadingMessage: loadingMessage,
346
417
  reset: reset,
347
418
  stopStreaming: stopStreaming,
419
+ abortStreamSilently: abortStreamSilently,
348
420
  handleSSEStream: handleSSEStream // Exponer para poder usarlo en continue-thread
349
421
  };
350
422
  };
351
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJfcmVmIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RhcnRXcml0aW5nIiwib25TdG9wIiwib25FcnJvciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJkYXRhIiwic2V0RGF0YSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNMb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJsb2FkaW5nTWVzc2FnZSIsInNldExvYWRpbmdNZXNzYWdlIiwiYWJvcnRDb250cm9sbGVyUmVmIiwiaXNTdG9wcGVkUmVmIiwib25TdHJlYW1VcGRhdGVSZWYiLCJvbkZpbmlzaFN0cmVhbVJlZiIsIm9uU3RhcnRXcml0aW5nUmVmIiwib25TdG9wUmVmIiwib25FcnJvclJlZiIsIm9uQXBwcm92YWxSZXF1aXJlZFJlZiIsImN1cnJlbnQiLCJoYW5kbGVTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJfb25TdHJlYW1VcGRhdGVSZWYkY3UiLCJfZGF0YSRhZ2VudF9pZCIsIl9vbkZpbmlzaFN0cmVhbVJlZiRjdSIsIl9vbkFwcHJvdmFsUmVxdWlyZWRSZSIsIl9vbkVycm9yUmVmJGN1cnJlbnQiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJoYXNTdGFydGVkV3JpdGluZyIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJsaW5lIiwiX2xpbmUkc3BsaXQiLCJfbGluZSRzcGxpdDIiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsImRhdGFTdHIiLCJfZGF0YSIsIl9vblN0YXJ0V3JpdGluZ1JlZiRjdSIsIm5vZGVNZXNzYWdlIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsImF0dGFjaG1lbnRzIiwic3VnZ2VzdGlvbnMiLCJhZ2VudElkUmF3IiwiY29tcGxldGVkQWdlbnRJZCIsIl9vbkVycm9yUmVmJGN1cnJlbnQyIiwiX3QiLCJfdDIiLCJfdDMiLCJfdDQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJ0cmltIiwicmVwbGFjZSIsIkpTT04iLCJwYXJzZSIsImNhbGwiLCJjb250ZW50IiwibWVzc2FnZSIsImluY2x1ZGVzIiwibWVtb3J5X3Nlc3Npb25faWQiLCJBcnJheSIsImlzQXJyYXkiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiU3RyaW5nIiwiY29uc29sZSIsImVycm9yIiwid2FybiIsImUiLCJmIiwiZmluaXNoIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJhc2tNYWlhIiwiX3JlZjQiLCJfY2FsbGVlMiIsIl9yZWYzIiwiaGlzdG9yeSIsInByb2plY3RJZCIsImxhbmciLCJ1c2VySWQiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNoYXRJZCIsIm1lc3NhZ2VJZCIsImNsaWVudElkIiwiY2xpZW50TmFtZSIsImFnZW50TmFtZSIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwicHJvamVjdE5hbWUiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiYWdlbnRFbnRpdHkiLCJfYWJvcnRDb250cm9sbGVyUmVmJGMiLCJfdDUiLCJfY29udGV4dDIiLCJBYm9ydENvbnRyb2xsZXIiLCJPcmNoZXN0cmF0b3IiLCJvcmNoZXN0cmF0b3IiLCJfb2JqZWN0U3ByZWFkIiwiaW5wdXQiLCJzaWduYWwiLCJfeDIiLCJzdG9wU3RyZWFtaW5nIiwiX29uU3RvcFJlZiRjdXJyZW50IiwiYWJvcnQiLCJyZXNldCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VPcmNoZXN0cmF0b3JTdHJlYW0vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnN0YW50LWNvbmRpdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNhc2UtZGVjbGFyYXRpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IENoYXRIaXN0b3J5IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IEFnZW50RW50aXR5IH0gZnJvbSAnLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBVc2VPcmNoZXN0cmF0b3JTdHJlYW1Qcm9wcyB9IGZyb20gJy4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLmludGVyZmFjZSdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcblxuZXhwb3J0IGNvbnN0IHVzZU9yY2hlc3RyYXRvclN0cmVhbSA9ICh7XG4gIG9uU3RyZWFtVXBkYXRlLFxuICBvbkZpbmlzaFN0cmVhbSxcbiAgb25TdGFydFdyaXRpbmcsXG4gIG9uU3RvcCxcbiAgb25FcnJvcixcbiAgb25BcHByb3ZhbFJlcXVpcmVkLFxufTogVXNlT3JjaGVzdHJhdG9yU3RyZWFtUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzV3JpdGluZywgc2V0SXNXcml0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbG9hZGluZ01lc3NhZ2UsIHNldExvYWRpbmdNZXNzYWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlclJlZiA9IHVzZVJlZjxBYm9ydENvbnRyb2xsZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBpc1N0b3BwZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgb25TdHJlYW1VcGRhdGVSZWYgPSB1c2VSZWYob25TdHJlYW1VcGRhdGUpXG4gIGNvbnN0IG9uRmluaXNoU3RyZWFtUmVmID0gdXNlUmVmKG9uRmluaXNoU3RyZWFtKVxuICBjb25zdCBvblN0YXJ0V3JpdGluZ1JlZiA9IHVzZVJlZihvblN0YXJ0V3JpdGluZylcbiAgY29uc3Qgb25TdG9wUmVmID0gdXNlUmVmKG9uU3RvcClcbiAgY29uc3Qgb25FcnJvclJlZiA9IHVzZVJlZihvbkVycm9yKVxuICBjb25zdCBvbkFwcHJvdmFsUmVxdWlyZWRSZWYgPSB1c2VSZWYob25BcHByb3ZhbFJlcXVpcmVkKVxuXG4gIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQgPSBvblN0cmVhbVVwZGF0ZVxuICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50ID0gb25GaW5pc2hTdHJlYW1cbiAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudCA9IG9uU3RhcnRXcml0aW5nXG4gIG9uU3RvcFJlZi5jdXJyZW50ID0gb25TdG9wXG4gIG9uRXJyb3JSZWYuY3VycmVudCA9IG9uRXJyb3JcbiAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQgPSBvbkFwcHJvdmFsUmVxdWlyZWRcblxuICBjb25zdCBoYW5kbGVTU0VTdHJlYW0gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICAgICAgICBpZiAoIXJlYWRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgICAgICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgaWYgKGlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICAgICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG5cbiAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0b2tlbic6XG4gICAgICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UodCgnY2hhdC53cml0aW5nJykpXG4gICAgICAgICAgICAgICAgICAgIG9uU3RhcnRXcml0aW5nUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gZGF0YS5jb250ZW50XG4gICAgICAgICAgICAgICAgICBzZXREYXRhKGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/LihhY2N1bXVsYXRlZENvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICAgICAgLy8gU2kgZWwgZXZlbnRvIG5vZGUgdGllbmUgdW4gbWVuc2FqZSwgYWN0dWFsaXphcmxvIHBhcmEgbW9zdHJhcmxvIGVuIGVsIGxvYWRlclxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubWVzc2FnZSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc2VndXJhciBxdWUgaXNMb2FkaW5nIGVzdMOpIGVuIHRydWUgcGFyYSBtb3N0cmFyIGVsIGxvYWRlclxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC8vIE1vc3RyYXIgbm9tYnJlIHNvbG8gcGFyYSBjcmVhdGVfdGFzayAvIGNsb25lX3Rhc2ssIGVsIHJlc3RvIG11ZXN0cmEgZ2Vuw6lyaWNvXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgfHwgZGF0YS5tZXNzYWdlLmluY2x1ZGVzKCdjbG9uZV90YXNrJylcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGF0YS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJylcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2Uobm9kZU1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gZGF0YS5jb250ZW50IHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlcyA9IGRhdGEuc291cmNlcyB8fCBudWxsXG4gICAgICAgICAgICAgICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSBkYXRhLm1lbW9yeV9zZXNzaW9uX2lkIHx8ICcnXG4gICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkoZGF0YS5hdHRhY2htZW50cykgPyBkYXRhLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgICAgICAgICAgICAgICAgbGV0IHN1Z2dlc3Rpb25zID0gbnVsbFxuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5zdWdnZXN0X3JlcGx5KSkge1xuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IGRhdGEuc3VnZ2VzdF9yZXBseVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gZGF0YS5zdWdnZXN0aW9uc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IGRhdGEuYWdlbnRfaWQgPz8gZGF0YS5hZ2VudElkXG4gICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID1cbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZFJhdyAhPSBudWxsICYmIFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgIT09ICcnID8gU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgIHNldERhdGEoZmluYWxDb250ZW50KVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbCkgLy8gTGltcGlhciBtZW5zYWplIGN1YW5kbyBzZSBjb21wbGV0YVxuICAgICAgICAgICAgICAgICAgb25GaW5pc2hTdHJlYW1SZWYuY3VycmVudD8uKFxuICAgICAgICAgICAgICAgICAgICBmaW5hbENvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOlxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gc2UgcmVxdWllcmUgYXByb2JhY2nDs25cbiAgICAgICAgICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZFJlZi5jdXJyZW50Py4oZGF0YSwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBkYXRhLmVycm9yKVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbCkgLy8gTGltcGlhciBtZW5zYWplIGN1YW5kbyBoYXkgZXJyb3JcbiAgICAgICAgICAgICAgICAgIG9uRXJyb3JSZWYuY3VycmVudD8uKClcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIFNTRSBldmVudCB0eXBlOicsIGV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBvbkVycm9yIHNpIG5vIGZ1ZSB1biBzdG9wIGludGVuY2lvbmFsXG4gICAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICAgIH1cbiAgICB9LFxuICAgIFt0XVxuICApXG5cbiAgY29uc3QgYXNrTWFpYSA9IGFzeW5jICh7XG4gICAgbWVzc2FnZSxcbiAgICBoaXN0b3J5LFxuICAgIHByb2plY3RJZCxcbiAgICBsYW5nLFxuICAgIHVzZXJJZCxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgY29tcGFueUlkLFxuICAgIGNoYXRJZCxcbiAgICBtZXNzYWdlSWQsXG4gICAgY2xpZW50SWQsXG4gICAgY2xpZW50TmFtZSxcbiAgICBhZ2VudE5hbWUsXG4gICAgYWdlbnRJZCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgYXR0YWNobWVudHMsXG4gICAgcHJvamVjdE5hbWUsXG4gICAgZmFxSWQsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQsXG4gICAgYWdlbnRFbnRpdHksXG4gIH06IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBoaXN0b3J5OiBDaGF0SGlzdG9yeVtdXG4gICAgcHJvamVjdElkOiBudW1iZXIgfCBudWxsXG4gICAgbGFuZzogc3RyaW5nXG4gICAgdXNlcklkOiBzdHJpbmdcbiAgICBmaXJzdE5hbWU/OiBzdHJpbmdcbiAgICBsYXN0TmFtZT86IHN0cmluZ1xuICAgIGNvbXBhbnlJZDogc3RyaW5nXG4gICAgY2hhdElkOiBzdHJpbmdcbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGNsaWVudElkPzogbnVtYmVyXG4gICAgY2xpZW50TmFtZT86IHN0cmluZ1xuICAgIGFnZW50TmFtZTogc3RyaW5nXG4gICAgYWdlbnRJZDogc3RyaW5nXG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICAgIHByb2plY3ROYW1lPzogc3RyaW5nXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIGFnZW50RW50aXR5PzogQWdlbnRFbnRpdHlcbiAgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBzZXREYXRhKG51bGwpXG4gICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSBmYWxzZSAvLyBSZXNldGVhciBmbGFnIGFsIGluaWNpYXIgbnVldmEgcGV0aWNpw7NuXG5cbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yKFxuICAgICAgICB7XG4gICAgICAgICAgaW5wdXQ6IG1lc3NhZ2UsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBsYW5nLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICAuLi4oZmlyc3ROYW1lID8geyBmaXJzdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4obGFzdE5hbWUgPyB7IGxhc3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgY29tcGFueUlkLFxuICAgICAgICAgIGNoYXRJZCxcbiAgICAgICAgICBtZXNzYWdlSWQsXG4gICAgICAgICAgY2xpZW50SWQsXG4gICAgICAgICAgYWdlbnROYW1lLFxuICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgICAgICAgIC4uLihwcm9qZWN0SWQgPyB7IHByb2plY3RJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ocHJvamVjdE5hbWUgPyB7IHByb2plY3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudE5hbWUgPyB7IGNsaWVudE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oZmFxSWQgPyB7IGZhcUlkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudEVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eSB9IDoge30pLFxuICAgICAgICB9LFxuICAgICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudD8uc2lnbmFsXG4gICAgICApXG5cbiAgICAgIGF3YWl0IGhhbmRsZVNTRVN0cmVhbShyZXNwb25zZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcj8uKClcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RvcFN0cmVhbWluZyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQuYWJvcnQoKVxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICAgIG9uU3RvcFJlZi5jdXJyZW50Py4oKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0RGF0YShudWxsKVxuICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc2tNYWlhLFxuICAgIHJlc3BvbnNlOiBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgcmVzZXQsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgICBoYW5kbGVTU0VTdHJlYW0sIC8vIEV4cG9uZXIgcGFyYSBwb2RlciB1c2FybG8gZW4gY29udGludWUtdGhyZWFkXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxNQUFNLFFBQVEsT0FBTztBQUNyRCxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUU5QyxPQUFPQyxJQUFJLE1BQU0scUJBQXFCO0FBSXRDLFNBQVNDLFFBQVEsUUFBUSx3QkFBd0I7QUFFakQsT0FBTyxJQUFNQyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFBQyxJQUFBLEVBT0E7RUFBQSxJQU5oQ0MsY0FBYyxHQUFBRCxJQUFBLENBQWRDLGNBQWM7SUFDZEMsY0FBYyxHQUFBRixJQUFBLENBQWRFLGNBQWM7SUFDZEMsY0FBYyxHQUFBSCxJQUFBLENBQWRHLGNBQWM7SUFDZEMsTUFBTSxHQUFBSixJQUFBLENBQU5JLE1BQU07SUFDTkMsT0FBTyxHQUFBTCxJQUFBLENBQVBLLE9BQU87SUFDUEMsa0JBQWtCLEdBQUFOLElBQUEsQ0FBbEJNLGtCQUFrQjtFQUVsQixJQUFBQyxlQUFBLEdBQWNYLGNBQWMsQ0FBQyxDQUFDRSxR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QTtZQUUvQmpKLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUcsQ0FBQztZQUNYYSxVQUFVLENBQUMsS0FBSyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUFvSSxTQUFBLENBQUE1QixJQUFBO1FBQUE7TUFBQSxHQUFBTSxRQUFBO0lBQUEsQ0FFcEI7SUFBQSxnQkF0RktGLE9BQU9BLENBQUErQixHQUFBO01BQUEsT0FBQTlCLEtBQUEsQ0FBQUgsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxHQXNGWjtFQUVELElBQU1pQyxhQUFhLEdBQUdwSyxXQUFXLENBQUMsWUFBTTtJQUN0QyxJQUFJaUMsa0JBQWtCLENBQUNRLE9BQU8sRUFBRTtNQUFBLElBQUE0SCxrQkFBQTtNQUM5Qm5JLFlBQVksQ0FBQ08sT0FBTyxHQUFHLElBQUk7TUFDM0JSLGtCQUFrQixDQUFDUSxPQUFPLENBQUM2SCxLQUFLLENBQUMsQ0FBQztNQUNsQ3JJLGtCQUFrQixDQUFDUSxPQUFPLEdBQUcsSUFBSTtNQUNqQ2pCLFVBQVUsQ0FBQyxLQUFLLENBQUM7TUFDakJJLFlBQVksQ0FBQyxLQUFLLENBQUM7TUFDbkJJLGlCQUFpQixDQUFDLElBQUksQ0FBQztNQUN2QixDQUFBcUksa0JBQUEsR0FBQS9ILFNBQVMsQ0FBQ0csT0FBTyxjQUFBNEgsa0JBQUEsZUFBakJBLGtCQUFBLENBQUF0RCxJQUFBLENBQUF6RSxTQUFvQixDQUFDO0lBQ3ZCO0VBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU1pSSxLQUFLLEdBQUcsU0FBUkEsS0FBS0EsQ0FBQSxFQUFTO0lBQ2xCbkosT0FBTyxDQUFDLElBQUksQ0FBQztJQUNiSSxVQUFVLENBQUMsS0FBSyxDQUFDO0lBQ2pCSSxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ25CSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7SUFDdkJFLFlBQVksQ0FBQ08sT0FBTyxHQUFHLEtBQUs7RUFDOUIsQ0FBQztFQUVELE9BQU87SUFDTDJGLE9BQU8sRUFBUEEsT0FBTztJQUNQcEYsUUFBUSxFQUFFN0IsSUFBSTtJQUNkSSxTQUFTLEVBQVRBLFNBQVM7SUFDVEksU0FBUyxFQUFUQSxTQUFTO0lBQ1RJLGNBQWMsRUFBZEEsY0FBYztJQUNkd0ksS0FBSyxFQUFMQSxLQUFLO0lBQ0xILGFBQWEsRUFBYkEsYUFBYTtJQUNiMUgsZUFBZSxFQUFmQSxlQUFlLENBQUU7RUFDbkIsQ0FBQztBQUNILENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
423
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJfcmVmIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RhcnRXcml0aW5nIiwib25TdG9wIiwib25FcnJvciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJkYXRhIiwic2V0RGF0YSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNMb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJsb2FkaW5nTWVzc2FnZSIsInNldExvYWRpbmdNZXNzYWdlIiwiYWJvcnRDb250cm9sbGVyUmVmIiwiaXNTdG9wcGVkUmVmIiwib25TdHJlYW1VcGRhdGVSZWYiLCJvbkZpbmlzaFN0cmVhbVJlZiIsIm9uU3RhcnRXcml0aW5nUmVmIiwib25TdG9wUmVmIiwib25FcnJvclJlZiIsIm9uQXBwcm92YWxSZXF1aXJlZFJlZiIsImN1cnJlbnQiLCJoYW5kbGVTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJfZGF0YSRhZ2VudF9pZCIsIl9vbkZpbmlzaFN0cmVhbVJlZiRjdSIsIl9vbkFwcHJvdmFsUmVxdWlyZWRSZSIsIl9vbkVycm9yUmVmJGN1cnJlbnQiLCJwZW5kaW5nQ29udGVudCIsInJhZklkIiwiZW1pdFRocm90dGxlZCIsImZsdXNoUGVuZGluZyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImhhc1N0YXJ0ZWRXcml0aW5nIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJfbGluZSRzcGxpdCIsIl9saW5lJHNwbGl0MiIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwiZGF0YVN0ciIsIl9kYXRhIiwiX29uU3RhcnRXcml0aW5nUmVmJGN1Iiwibm9kZU1lc3NhZ2UiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwiYXR0YWNobWVudHMiLCJzdWdnZXN0aW9ucyIsImFnZW50SWRSYXciLCJjb21wbGV0ZWRBZ2VudElkIiwiX29uRXJyb3JSZWYkY3VycmVudDIiLCJfdCIsIl90MiIsIl90MyIsIl90NCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiY29udGVudCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdSIsInRvRW1pdCIsImNhbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdTIiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsImNhbmNlbCIsImFicnVwdCIsInJlYWQiLCJzZW50IiwiZGVjb2RlIiwic3RyZWFtIiwic3BsaXQiLCJwb3AiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJuIiwidHJpbSIsInJlcGxhY2UiLCJKU09OIiwicGFyc2UiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJTdHJpbmciLCJjb25zb2xlIiwiZXJyb3IiLCJ3YXJuIiwiZSIsImYiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFza01haWEiLCJfcmVmNCIsIl9jYWxsZWUyIiwiX3JlZjMiLCJoaXN0b3J5IiwicHJvamVjdElkIiwibGFuZyIsInVzZXJJZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY2hhdElkIiwibWVzc2FnZUlkIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwiZmVlSWQiLCJhZ2VudE5hbWUiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsInByb2plY3ROYW1lIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsImFnZW50RW50aXR5IiwiX2Fib3J0Q29udHJvbGxlclJlZiRjIiwiX29uRXJyb3JSZWYkY3VycmVudDMiLCJfdDUiLCJfY29udGV4dDIiLCJBYm9ydENvbnRyb2xsZXIiLCJPcmNoZXN0cmF0b3IiLCJvcmNoZXN0cmF0b3IiLCJfb2JqZWN0U3ByZWFkIiwiaW5wdXQiLCJzaWduYWwiLCJfeDIiLCJzdG9wU3RyZWFtaW5nIiwiX29uU3RvcFJlZiRjdXJyZW50IiwiYWJvcnQiLCJhYm9ydFN0cmVhbVNpbGVudGx5IiwicmVzZXQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zdGFudC1jb25kaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IENoYXRIaXN0b3J5IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IEFnZW50RW50aXR5IH0gZnJvbSAnLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBVc2VPcmNoZXN0cmF0b3JTdHJlYW1Qcm9wcyB9IGZyb20gJy4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLmludGVyZmFjZSdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcblxuZXhwb3J0IGNvbnN0IHVzZU9yY2hlc3RyYXRvclN0cmVhbSA9ICh7XG4gIG9uU3RyZWFtVXBkYXRlLFxuICBvbkZpbmlzaFN0cmVhbSxcbiAgb25TdGFydFdyaXRpbmcsXG4gIG9uU3RvcCxcbiAgb25FcnJvcixcbiAgb25BcHByb3ZhbFJlcXVpcmVkLFxufTogVXNlT3JjaGVzdHJhdG9yU3RyZWFtUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgW2RhdGEsIHNldERhdGFdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzV3JpdGluZywgc2V0SXNXcml0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbG9hZGluZ01lc3NhZ2UsIHNldExvYWRpbmdNZXNzYWdlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFib3J0Q29udHJvbGxlclJlZiA9IHVzZVJlZjxBYm9ydENvbnRyb2xsZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBpc1N0b3BwZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgb25TdHJlYW1VcGRhdGVSZWYgPSB1c2VSZWYob25TdHJlYW1VcGRhdGUpXG4gIGNvbnN0IG9uRmluaXNoU3RyZWFtUmVmID0gdXNlUmVmKG9uRmluaXNoU3RyZWFtKVxuICBjb25zdCBvblN0YXJ0V3JpdGluZ1JlZiA9IHVzZVJlZihvblN0YXJ0V3JpdGluZylcbiAgY29uc3Qgb25TdG9wUmVmID0gdXNlUmVmKG9uU3RvcClcbiAgY29uc3Qgb25FcnJvclJlZiA9IHVzZVJlZihvbkVycm9yKVxuICBjb25zdCBvbkFwcHJvdmFsUmVxdWlyZWRSZWYgPSB1c2VSZWYob25BcHByb3ZhbFJlcXVpcmVkKVxuXG4gIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQgPSBvblN0cmVhbVVwZGF0ZVxuICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50ID0gb25GaW5pc2hTdHJlYW1cbiAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudCA9IG9uU3RhcnRXcml0aW5nXG4gIG9uU3RvcFJlZi5jdXJyZW50ID0gb25TdG9wXG4gIG9uRXJyb3JSZWYuY3VycmVudCA9IG9uRXJyb3JcbiAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQgPSBvbkFwcHJvdmFsUmVxdWlyZWRcblxuICBjb25zdCBoYW5kbGVTU0VTdHJlYW0gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVzcG9uc2U6IFJlc3BvbnNlKSA9PiB7XG4gICAgICAvLyByQUYtdGhyb3R0bGU6IGV2aXRhIGVtaXRpciBvblN0cmVhbVVwZGF0ZSBtw6FzIGRlIHVuYSB2ZXogcG9yIGZyYW1lLlxuICAgICAgLy8gQWN1bXVsYSBlbCDDumx0aW1vIHZhbG9yIHkgbG8gbGliZXJhIGVuIGVsIHByw7N4aW1vIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cbiAgICAgIC8vIE5vdGE6IG5vIHRvY2Ftb3MgZWwgc3RhdGUgYGRhdGFgIGVuIGVsIGhvdCBwYXRoIChzb2xvIHNlIGFjdHVhbGl6YSBlblxuICAgICAgLy8gYGNvbXBsZXRlYC9yZXNldHMpIHBhcmEgbm8gcmUtcmVuZGVyaXphciBhIGxvcyBjb25zdW1pZG9yZXMgZGVsIGhvb2tcbiAgICAgIC8vIGVuIGNhZGEgZnJhbWU7IGVsIHRleHRvIGVuIHZpdm8gdmlhamEgcG9yIGVsIHN0cmVhbWluZ1N0b3JlLlxuICAgICAgbGV0IHBlbmRpbmdDb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICAgICAgbGV0IHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAgICAgY29uc3QgZW1pdFRocm90dGxlZCA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBjb250ZW50XG4gICAgICAgIGlmIChyYWZJZCAhPSBudWxsKSByZXR1cm5cbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHJhZklkID0gbnVsbFxuICAgICAgICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgICAgICBvblN0cmVhbVVwZGF0ZVJlZi5jdXJyZW50Py4odG9FbWl0LCBudWxsLCAnJylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb25zdCBmbHVzaFBlbmRpbmcgPSAoKSA9PiB7XG4gICAgICAgIGlmIChyYWZJZCAhPSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpXG4gICAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICAgIG9uU3RyZWFtVXBkYXRlUmVmLmN1cnJlbnQ/Lih0b0VtaXQsIG51bGwsICcnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gICAgICAgIGlmICghcmVhZGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICAgICAgICBsZXQgYnVmZmVyID0gJydcbiAgICAgICAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gICAgICAgIGxldCBoYXNTdGFydGVkV3JpdGluZyA9IGZhbHNlXG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBpZiAoaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgICAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICAgICAgICAgICAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcblxuICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzpcbiAgICAgICAgICAgICAgICAgIGlmICghaGFzU3RhcnRlZFdyaXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzU3RhcnRlZFdyaXRpbmcgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZSh0KCdjaGF0LndyaXRpbmcnKSlcbiAgICAgICAgICAgICAgICAgICAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudD8uKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVkQ29udGVudCArPSBkYXRhLmNvbnRlbnRcbiAgICAgICAgICAgICAgICAgIGVtaXRUaHJvdHRsZWQoYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICAgICAgLy8gU2kgZWwgZXZlbnRvIG5vZGUgdGllbmUgdW4gbWVuc2FqZSwgYWN0dWFsaXphcmxvIHBhcmEgbW9zdHJhcmxvIGVuIGVsIGxvYWRlclxuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubWVzc2FnZSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBBc2VndXJhciBxdWUgaXNMb2FkaW5nIGVzdMOpIGVuIHRydWUgcGFyYSBtb3N0cmFyIGVsIGxvYWRlclxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIC8vIE1vc3RyYXIgbm9tYnJlIHNvbG8gcGFyYSBjcmVhdGVfdGFzayAvIGNsb25lX3Rhc2ssIGVsIHJlc3RvIG11ZXN0cmEgZ2Vuw6lyaWNvXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLm1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgfHwgZGF0YS5tZXNzYWdlLmluY2x1ZGVzKCdjbG9uZV90YXNrJylcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZGF0YS5tZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJylcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2Uobm9kZU1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICAgICAgY29uc3QgZmluYWxDb250ZW50ID0gZGF0YS5jb250ZW50IHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlcyA9IGRhdGEuc291cmNlcyB8fCBudWxsXG4gICAgICAgICAgICAgICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSBkYXRhLm1lbW9yeV9zZXNzaW9uX2lkIHx8ICcnXG4gICAgICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkoZGF0YS5hdHRhY2htZW50cykgPyBkYXRhLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgICAgICAgICAgICAgICAgbGV0IHN1Z2dlc3Rpb25zID0gbnVsbFxuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5zdWdnZXN0X3JlcGx5KSkge1xuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IGRhdGEuc3VnZ2VzdF9yZXBseVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gZGF0YS5zdWdnZXN0aW9uc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IGRhdGEuYWdlbnRfaWQgPz8gZGF0YS5hZ2VudElkXG4gICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID1cbiAgICAgICAgICAgICAgICAgICAgYWdlbnRJZFJhdyAhPSBudWxsICYmIFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgIT09ICcnID8gU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgICAgICBzZXREYXRhKGZpbmFsQ29udGVudClcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gc2UgY29tcGxldGFcbiAgICAgICAgICAgICAgICAgIG9uRmluaXNoU3RyZWFtUmVmLmN1cnJlbnQ/LihcbiAgICAgICAgICAgICAgICAgICAgZmluYWxDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkQWdlbnRJZFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2FwcHJvdmFsX3JlcXVpcmVkJzpcbiAgICAgICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbCkgLy8gTGltcGlhciBtZW5zYWplIGN1YW5kbyBzZSByZXF1aWVyZSBhcHJvYmFjacOzblxuICAgICAgICAgICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQ/LihkYXRhLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGRhdGEuZXJyb3IpXG4gICAgICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbCkgLy8gTGltcGlhciBtZW5zYWplIGN1YW5kbyBoYXkgZXJyb3JcbiAgICAgICAgICAgICAgICAgIG9uRXJyb3JSZWYuY3VycmVudD8uKClcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIFNTRSBldmVudCB0eXBlOicsIGV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG5cbiAgICAgICAgLy8gU29sbyBlamVjdXRhciBvbkVycm9yIHNpIG5vIGZ1ZSB1biBzdG9wIGludGVuY2lvbmFsXG4gICAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICAgIH1cbiAgICB9LFxuICAgIFt0XVxuICApXG5cbiAgY29uc3QgYXNrTWFpYSA9IGFzeW5jICh7XG4gICAgbWVzc2FnZSxcbiAgICBoaXN0b3J5LFxuICAgIHByb2plY3RJZCxcbiAgICBsYW5nLFxuICAgIHVzZXJJZCxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgY29tcGFueUlkLFxuICAgIGNoYXRJZCxcbiAgICBtZXNzYWdlSWQsXG4gICAgY2xpZW50SWQsXG4gICAgY2xpZW50TmFtZSxcbiAgICBmZWVJZCxcbiAgICBhZ2VudE5hbWUsXG4gICAgYWdlbnRJZCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgYXR0YWNobWVudHMsXG4gICAgcHJvamVjdE5hbWUsXG4gICAgZmFxSWQsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQsXG4gICAgYWdlbnRFbnRpdHksXG4gIH06IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBoaXN0b3J5OiBDaGF0SGlzdG9yeVtdXG4gICAgcHJvamVjdElkOiBudW1iZXIgfCBudWxsXG4gICAgbGFuZzogc3RyaW5nXG4gICAgdXNlcklkOiBzdHJpbmdcbiAgICBmaXJzdE5hbWU/OiBzdHJpbmdcbiAgICBsYXN0TmFtZT86IHN0cmluZ1xuICAgIGNvbXBhbnlJZDogc3RyaW5nXG4gICAgY2hhdElkOiBzdHJpbmdcbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGNsaWVudElkPzogbnVtYmVyXG4gICAgY2xpZW50TmFtZT86IHN0cmluZ1xuICAgIGZlZUlkPzogbnVtYmVyXG4gICAgYWdlbnROYW1lOiBzdHJpbmdcbiAgICBhZ2VudElkOiBzdHJpbmdcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gICAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgYWdlbnRFbnRpdHk/OiBBZ2VudEVudGl0eVxuICB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldERhdGEobnVsbClcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IGZhbHNlIC8vIFJlc2V0ZWFyIGZsYWcgYWwgaW5pY2lhciBudWV2YSBwZXRpY2nDs25cblxuICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3IoXG4gICAgICAgIHtcbiAgICAgICAgICBpbnB1dDogbWVzc2FnZSxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIGxhbmcsXG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIC4uLihmaXJzdE5hbWUgPyB7IGZpcnN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihsYXN0TmFtZSA/IHsgbGFzdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICBjb21wYW55SWQsXG4gICAgICAgICAgY2hhdElkLFxuICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICBjbGllbnRJZCxcbiAgICAgICAgICAuLi4oZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQgfSA6IHt9KSxcbiAgICAgICAgICBhZ2VudE5hbWUsXG4gICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgICAgICAgLi4uKHByb2plY3RJZCA/IHsgcHJvamVjdElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIC4uLihwcm9qZWN0TmFtZSA/IHsgcHJvamVjdE5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50TmFtZSA/IHsgY2xpZW50TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihmYXFJZCA/IHsgZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50RW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5IH0gOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50Py5zaWduYWxcbiAgICAgIClcblxuICAgICAgYXdhaXQgaGFuZGxlU1NFU3RyZWFtKHJlc3BvbnNlKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBTaSBmdWUgdW4gYWJvcnQgaW50ZW5jaW9uYWwgKHN0b3AgbWFudWFsIG8gY2FtYmlvIGRlIGNoYXQpLCBubyBkaXNwYXJhciBvbkVycm9yXG4gICAgICAvLyBwb3JxdWUgZXNvIGluc2VydGEgdW4gXCJtZW5zYWplIGRlIGVycm9yXCIgZW4gZWwgY2hhdCBhbCBxdWUgYWNhYmFtb3MgZGUgbmF2ZWdhci5cbiAgICAgIGlmICghaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oKVxuICAgICAgfVxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdG9wU3RyZWFtaW5nID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICAgICAgb25TdG9wUmVmLmN1cnJlbnQ/LigpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogQWJvcnRhIGVsIHN0cmVhbSBlbiBjdXJzbyAoc2kgZXhpc3RlKSBzaW4gZGlzcGFyYXIgYG9uU3RvcGAuXG4gICAqIMOac2VsbyBlbiBjYXNvcyBkb25kZSBubyBxdWVyZW1vcyBhZ3JlZ2FyIGVsIG1lbnNhamUgZGUgXCJjYW5jZWxhZG9cIlxuICAgKiAocG9yIGVqZW1wbG8sIGFsIGNhbWJpYXIgZGUgY2hhdCkuXG4gICAqL1xuICBjb25zdCBhYm9ydFN0cmVhbVNpbGVudGx5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQ2xlYW51cCBhbCBkZXNtb250YXI6IHNpIHF1ZWRhIHVuIHN0cmVhbSBhY3Rpdm8sIGFib3J0YXJsbyBwYXJhIGV2aXRhclxuICAvLyBxdWUgaW50ZW50ZSBhY3R1YWxpemFyIGVzdGFkbyBlbiB1biBjb21wb25lbnRlIHlhIGRlc21vbnRhZG8gKGZ1Z2FzIGRlXG4gIC8vIG1lbW9yaWEgeSB3YXJuaW5ncykuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCkge1xuICAgICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudC5hYm9ydCgpXG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0RGF0YShudWxsKVxuICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgaXNTdG9wcGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc2tNYWlhLFxuICAgIHJlc3BvbnNlOiBkYXRhLFxuICAgIGlzTG9hZGluZyxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgcmVzZXQsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5LFxuICAgIGhhbmRsZVNTRVN0cmVhbSwgLy8gRXhwb25lciBwYXJhIHBvZGVyIHVzYXJsbyBlbiBjb250aW51ZS10aHJlYWRcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsUUFBUSxFQUFFQyxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxRQUFRLE9BQU87QUFDaEUsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFFOUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUl0QyxTQUFTQyxRQUFRLFFBQVEsd0JBQXdCO0FBRWpELE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQUMsSUFBQSxFQU9BO0VBQUEsSUFOaENDLGNBQWMsR0FBQUQsSUFBQSxDQUFkQyxjQUFjO0lBQ2RDLGNBQWMsR0FBQUYsSUFBQSxDQUFkRSxjQUFjO0lBQ2RDLGNBQWMsR0FBQUgsSUFBQSxDQUFkRyxjQUFjO0lBQ2RDLE1BQU0sR0FBQUosSUFBQSxDQUFOSSxNQUFNO0lBQ05DLE9BQU8sR0FBQUwsSUFBQSxDQUFQSyxPQUFPO0lBQ1BDLGtCQUFrQixHQUFBTixJQUFBLENB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