@projectcor/maia-components 2.11.28 → 2.11.29

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.
@@ -1,9 +1,11 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
1
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
3
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
5
  var _excluded = ["isCurrentUser", "children"],
5
6
  _excluded2 = ["isCurrentUser"],
6
7
  _excluded3 = ["href", "children"];
8
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
7
9
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8
10
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
9
11
  /* eslint-disable import/no-extraneous-dependencies */
@@ -42,6 +44,7 @@ import { TASK_URL_REGEX_PATTERN } from '../../../constants/taskUrls';
42
44
  import { ChatAISuggestions } from './ChatAISuggestions';
43
45
  import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
44
46
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
47
+ import { downloadFileFromUrl } from '../../../utils/fileDownloadHelper';
45
48
 
46
49
  /** Contexto con el texto del mensaje en streaming. Solo el componente que lo consume re-renderiza cuando cambia. */
47
50
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
@@ -256,7 +259,7 @@ var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
256
259
  });
257
260
  });
258
261
  var MessageItem = /*#__PURE__*/memo(function (props) {
259
- var _ref6, _ref7, _props$projectMetadat;
262
+ var _props$projectMetadat;
260
263
  var id = props.id,
261
264
  user = props.user,
262
265
  message = props.message,
@@ -285,6 +288,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
285
288
  setPreviewAttachment = _useState6[1];
286
289
  var isCurrentUser = role === ChatHistoryRole.USER || user.id === authUser.id.toString();
287
290
  var isAssistant = role === ChatHistoryRole.ASSISTANT || user.id === 'assistant';
291
+ var messageAttachments = attachments && attachments.length > 0 ? attachments : !isAssistant && Array.isArray(sources) ? sources : [];
288
292
  var handleAttachmentClick = function handleAttachmentClick(attachment) {
289
293
  // Permitir previsualización si tiene archivo local o URLs del backend
290
294
  if (attachment.file instanceof File || attachment.originalFile instanceof File || attachment.url_thumbnail || attachment.url_original || attachment.url_file) {
@@ -294,6 +298,65 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
294
298
  var handleClosePreview = function handleClosePreview() {
295
299
  setPreviewAttachment(null);
296
300
  };
301
+ var handleAttachmentDownload = /*#__PURE__*/function () {
302
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(attachment) {
303
+ var extension, fileName, fileUrl, blobUrl, downloadedFile, link, _t;
304
+ return _regeneratorRuntime.wrap(function (_context) {
305
+ while (1) switch (_context.prev = _context.next) {
306
+ case 0:
307
+ extension = attachment.name.includes('.') ? '' : ".".concat(attachment.type);
308
+ fileName = "".concat(attachment.name).concat(extension);
309
+ fileUrl = attachment.url_original || attachment.url_file || attachment.url_thumbnail;
310
+ _context.prev = 1;
311
+ blobUrl = null;
312
+ if (!fileUrl) {
313
+ _context.next = 3;
314
+ break;
315
+ }
316
+ _context.next = 2;
317
+ return downloadFileFromUrl(fileUrl, fileName, attachment.type);
318
+ case 2:
319
+ downloadedFile = _context.sent;
320
+ blobUrl = URL.createObjectURL(downloadedFile);
321
+ _context.next = 4;
322
+ break;
323
+ case 3:
324
+ if (attachment.file instanceof File) {
325
+ blobUrl = URL.createObjectURL(attachment.file);
326
+ }
327
+ case 4:
328
+ if (blobUrl) {
329
+ _context.next = 5;
330
+ break;
331
+ }
332
+ return _context.abrupt("return");
333
+ case 5:
334
+ link = document.createElement('a');
335
+ link.href = blobUrl;
336
+ link.download = fileName;
337
+ link.style.display = 'none';
338
+ document.body.appendChild(link);
339
+ link.click();
340
+ setTimeout(function () {
341
+ document.body.removeChild(link);
342
+ URL.revokeObjectURL(blobUrl);
343
+ }, 100);
344
+ _context.next = 7;
345
+ break;
346
+ case 6:
347
+ _context.prev = 6;
348
+ _t = _context["catch"](1);
349
+ console.error('Failed to download attachment', _t);
350
+ case 7:
351
+ case "end":
352
+ return _context.stop();
353
+ }
354
+ }, _callee, null, [[1, 6]]);
355
+ }));
356
+ return function handleAttachmentDownload(_x) {
357
+ return _ref6.apply(this, arguments);
358
+ };
359
+ }();
297
360
  if (isChangeProject && options) {
298
361
  return /*#__PURE__*/_jsx(MessageWrapper, {
299
362
  isCurrentUser: isCurrentUser,
@@ -323,8 +386,9 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
323
386
  return /*#__PURE__*/_jsxs(SCMessageItemWrapper, {
324
387
  $isAssistant: isAssistant,
325
388
  children: [isAssistant && /*#__PURE__*/_jsx(AssistantMessageHeader, {}), /*#__PURE__*/_jsxs(SCMessageItemInner, {
326
- children: [!!((_ref6 = attachments || sources) !== null && _ref6 !== void 0 && _ref6.length) && !isAssistant && /*#__PURE__*/_jsx(SCAttachmentsRow, {
327
- children: (_ref7 = attachments || sources) === null || _ref7 === void 0 ? void 0 : _ref7.map(function (attachment, index) {
389
+ children: [!!messageAttachments.length && /*#__PURE__*/_jsx(SCAttachmentsRow, {
390
+ $isAssistant: isAssistant,
391
+ children: messageAttachments.map(function (attachment, index) {
328
392
  var _attachment$type, _attachment$name;
329
393
  // Detectar si es un archivo de audio
330
394
  var attachmentType = (attachment === null || attachment === void 0 || (_attachment$type = attachment.type) === null || _attachment$type === void 0 ? void 0 : _attachment$type.toLowerCase()) || '';
@@ -340,6 +404,9 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
340
404
  return /*#__PURE__*/_jsx(AttachmentCard, {
341
405
  attachment: attachment,
342
406
  positionIndex: index,
407
+ onDownload: function onDownload() {
408
+ return handleAttachmentDownload(attachment);
409
+ },
343
410
  onClick: function onClick() {
344
411
  return handleAttachmentClick(attachment);
345
412
  }
@@ -361,7 +428,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
361
428
  warningMessage: approval.warning_message,
362
429
  manualApprovalDetected: approval.manual_approval_detected
363
430
  })
364
- }), (!!message || isStreaming) && !approval && /*#__PURE__*/_jsx(StreamingMessageBody, {
431
+ }), (!!message || isStreaming) && !approval && !(isAssistant && !!messageAttachments.length) && /*#__PURE__*/_jsx(StreamingMessageBody, {
365
432
  message: message !== null && message !== void 0 ? message : '',
366
433
  isStreaming: !!isStreaming,
367
434
  isCurrentUser: isCurrentUser,
@@ -386,16 +453,16 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
386
453
  })]
387
454
  });
388
455
  });
389
- var ChatAIMessagesInner = function ChatAIMessagesInner(_ref8) {
456
+ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
390
457
  var _lastMsg$user, _lastMsg$message;
391
- var userInitialMessage = _ref8.userInitialMessage,
392
- initialChatId = _ref8.initialChatId,
393
- onError = _ref8.onError,
394
- onSendMessageReady = _ref8.onSendMessageReady,
395
- onScrollToBottom = _ref8.onScrollToBottom,
396
- attachments = _ref8.attachments,
397
- agents = _ref8.agents,
398
- expanded = _ref8.expanded;
458
+ var userInitialMessage = _ref7.userInitialMessage,
459
+ initialChatId = _ref7.initialChatId,
460
+ onError = _ref7.onError,
461
+ onSendMessageReady = _ref7.onSendMessageReady,
462
+ onScrollToBottom = _ref7.onScrollToBottom,
463
+ attachments = _ref7.attachments,
464
+ agents = _ref7.agents,
465
+ expanded = _ref7.expanded;
399
466
  var _useT = useT(),
400
467
  t = _useT.t;
401
468
  var _useGlobalContext3 = useGlobalContext(),
@@ -779,4 +846,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref8) {
779
846
  });
780
847
  };
781
848
  export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
782
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiU3RyZWFtZG93biIsImNyZWF0ZUNvZGVQbHVnaW4iLCJBcnJvd1NtYWxsRG93biIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVVzZXIiLCJ1c2VUIiwidXNlQ2hhdE1hbmFnZXIiLCJ1c2VUYXNrUGFuZWwiLCJMb2FkaW5nVGV4dCIsIkxvYWRlciIsIk1lc3NhZ2VGcm9tVXNlciIsIk1lc3NhZ2VGcm9tT3RoZXIiLCJNZXNzYWdlQ29udGVudEZyb21Vc2VyIiwiTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIiLCJNZXNzYWdlRmVlZGJhY2siLCJTQ0NBSU1lc3NhZ2VXcmFwcGVyIiwiU2Nyb2xsVG9Cb3R0b21CdXR0b24iLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiU0NBc3Npc3RhbnROYW1lIiwiU0NBc3Npc3RhbnRBdmF0YXIiLCJTQ1Rhc2tMaW5rIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJNQUlBSWNvbiIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJDaGF0QUlTdWdnZXN0aW9ucyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIkVWRU5UUyIsInVzZUV2ZW50IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiU3RyZWFtaW5nTWVzc2FnZUNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiY29kZSIsInRoZW1lcyIsIkFzc2lzdGFudEF2YXRhcklubmVyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsImNoaWxkcmVuIiwidHlwZSIsIndpZHRoIiwiaGVpZ2h0IiwiZW1vamkiLCJBc3Npc3RhbnRBdmF0YXIiLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiQXNzaXN0YW50TWVzc2FnZUhlYWRlciIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9jYWxBZ2VudCIsInNldExvY2FsQWdlbnQiLCJfdXNlR2xvYmFsQ29udGV4dDIiLCJnZXRUYWJTZWdtZW50RnJvbUhyZWYiLCJocmVmIiwibWF0Y2giLCJ0ZXN0IiwiZXh0cmFjdFRhc2tzRnJvbU1lc3NhZ2UiLCJtZXNzYWdlIiwidGFza1VybFJlZ2V4IiwiUmVnRXhwIiwidGFza3MiLCJzZWVuSWRzIiwiU2V0IiwiZXhlYyIsInRhc2tJZCIsInVybCIsImhhcyIsImFkZCIsImVzY2FwZWRVcmwiLCJyZXBsYWNlIiwibWFya2Rvd25MaW5rUmVnZXgiLCJjb25jYXQiLCJsaW5rTWF0Y2giLCJ0aXRsZSIsInB1c2giLCJoYXNUYXNrTGlua3MiLCJ0ZXh0IiwibGVuZ3RoIiwiVGFza0xpbmsiLCJfcmVmNCIsInRhYlNlZ21lbnQiLCJfdXNlVGFza1BhbmVsIiwiYnVpbGRPcGVuVGFzayIsIm9wZW5UYXNrIiwiaGFuZGxlQ2xpY2siLCJlIiwibWV0YUtleSIsImN0cmxLZXkiLCJwcmV2ZW50RGVmYXVsdCIsIkN1c3RvbUxpbmsiLCJfcmVmNSIsInJlc3QiLCJfZXhjbHVkZWQzIiwidGFza01hdGNoIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJmcm9tQ29udGV4dCIsInVzZUNvbnRleHQiLCJkaXNwbGF5VGV4dCIsImlzU3RyZWFtaW5nIiwiY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJhZ2VudElkIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsImlzQXNzaXN0YW50IiwicGx1Z2lucyIsImNvbXBvbmVudHMiLCJhIiwibGlua1NhZmV0eSIsImVuYWJsZWQiLCJpc0FuaW1hdGluZyIsInNoaWtpVGhlbWUiLCJjb250cm9scyIsInRhYmxlIiwiaXNFcnJvciIsImFwcHJvdmFsIiwiY29udGVudCIsInNvdXJjZXMiLCJoYW5kbGVGZWVkYmFjayIsImhhbmRsZUZlZWRiYWNrQ2xpY2siLCJkaXNhYmxlRmVlZGJhY2siLCJzdWdnZXN0aW9ucyIsIm9uU2VsZWN0U3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb24iLCJoYW5kbGVTdWdnZXN0aW9uQ2xpY2siLCJtZXNzYWdlSWQiLCJkaXNhYmxlZCIsInN1Z2dlc3Rpb25zRGlzYWJsZWQiLCJoaWRkZW4iLCJpc0xhc3RNZXNzYWdlIiwiTWVzc2FnZUl0ZW0iLCJfcmVmNiIsIl9yZWY3IiwiX3Byb3BzJHByb2plY3RNZXRhZGF0IiwidXNlciIsImF1dGhVc2VyIiwiaXNDaGFuZ2VQcm9qZWN0IiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiQVNTSVNUQU5UIiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImZpbGUiLCJGaWxlIiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwiaW5kZXgiLCJfYXR0YWNobWVudCR0eXBlIiwiX2F0dGFjaG1lbnQkbmFtZSIsImF0dGFjaG1lbnRUeXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsImlzQXVkaW9GaWxlIiwic3RhcnRzV2l0aCIsImluY2x1ZGVzIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsInBlbmRpbmdfYWN0aW9ucyIsImFjdGlvbnMiLCJzdGF0dXMiLCJvbkFwcHJvdmUiLCJ0aHJlYWRJZHMiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwiaXNFeHBhbmRlZCIsImV4cGFuZGVkIiwiaGl0bEluc3RhbmNlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdfbWVzc2FnZSIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJpc09wZW4iLCJvbkNsb3NlIiwiQ2hhdEFJTWVzc2FnZXNJbm5lciIsIl9yZWY4IiwiX2xhc3RNc2ckdXNlciIsIl9sYXN0TXNnJG1lc3NhZ2UiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJpbml0aWFsQ2hhdElkIiwib25FcnJvciIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uU2Nyb2xsVG9Cb3R0b20iLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dDMiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzY3JvbGxSYWZSZWYiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNob3dTY3JvbGxUb0JvdHRvbSIsInNldFNob3dTY3JvbGxUb0JvdHRvbSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsInNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzdHJlYW1pbmdNZXNzYWdlUHJvcHNSZWYiLCJzdHJlYW1pbmdNZXNzYWdlSWRSZWYiLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJ1bmRlZmluZWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwiYWN0aXZlTG9hZGluZ3MiLCJzZW5kTWVzc2FnZSIsImNoYW5nZVByb2plY3QiLCJpbml0aWFsaXplQ2hhdCIsImhhbmRsZVNjcm9sbCIsInN0b3BHZW5lcmF0aW9uIiwidHJpbSIsImlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCIsImVudGl0eSIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJwcmV2IiwiX2RlZmluZVByb3BlcnR5IiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsImN1cnJlbnQiLCJzY3JvbGxUbyIsInRvcCIsInNjcm9sbEhlaWdodCIsImJlaGF2aW9yIiwic2V0VGltZW91dCIsIl9tZXNzYWdlc1JlZiRjdXJyZW50Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaXNTY3JvbGxpbmdVcCIsImlzTmVhckJvdHRvbSIsImRpZFNldFN0YXRlIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsImxhc3RNZXNzYWdlIiwiaGFzQXBwcm92YWwiLCJpc0F0Qm90dG9tIiwic2Nyb2xsVG9Cb3R0b20iLCJfbWVzc2FnZXNSZWYkY3VycmVudDIiLCJpc05ld0Fuc3dlck1lc3NhZ2UiLCJpc05ld1VzZXJNZXNzYWdlIiwiaXNOZXdBcHByb3ZhbE1lc3NhZ2UiLCJoYXNNZXNzYWdlcyIsImlzTm90SW5pdGlhbE1lc3NhZ2UiLCJtc2ciLCJzY3JvbGxEZWxheSIsImRvU2Nyb2xsIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQzIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQ0IiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJoYXNBdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImlzU2Nyb2xsT25QYXJlbnQiLCJleHBhbmRlZFJlZiIsInNhdmVkU2Nyb2xsVG9wIiwibGFzdE1zZyIsImlzU3RyZWFtaW5nQWN0aXZlIiwic3RyZWFtaW5nVGV4dCIsIm1lc3NhZ2VzQ29udGVudCIsIlByb3ZpZGVyIiwidmFsdWUiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX21lc3NhZ2UkaWQiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwiaXNBc3Npc3RhbnRNZXNzYWdlIiwibWVzc2FnZUtleSIsIl9tZXNzYWdlJGlkMiIsIk9iamVjdCIsImFzc2lnbiIsImtleSIsImtleXMiLCJ2YWx1ZXMiLCJmaW5kIiwiJHNjcm9sbE9uUGFyZW50IiwicmVmIiwib25TY3JvbGwiLCIkaXNNYXJrZXRwbGFjZUdsb2JhbCIsImNvbG9yIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTdHJlYW1kb3duIH0gZnJvbSAnc3RyZWFtZG93bidcbmltcG9ydCB7IGNyZWF0ZUNvZGVQbHVnaW4gfSBmcm9tICdAc3RyZWFtZG93bi9jb2RlJ1xuaW1wb3J0IHsgQXJyb3dTbWFsbERvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BcnJvd1NtYWxsRG93bidcblxuaW1wb3J0IHsgQXR0YWNobWVudENhcmQgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZCdcbmltcG9ydCB7IEFwcHJvdmFsQm94IH0gZnJvbSAnLi4vLi4vYXRvbXMvQXBwcm92YWxCb3gvQXBwcm92YWxCb3gnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkQXVkaW8gfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZEF1ZGlvJ1xuaW1wb3J0IHsgTUFJQU1lc3NhZ2VQcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFNZXNzYWdlL01BSUFNZXNzYWdlLmludGVyZmFjZXMnXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdEhpc3RvcnlSb2xlLCBUYXNrSW5mbyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5cbmltcG9ydCB7IENPUlVzZXIsIHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHVzZUNoYXRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXInXG5pbXBvcnQgeyB1c2VUYXNrUGFuZWwgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUYXNrUGFuZWwnXG5cbmltcG9ydCB7IExvYWRpbmdUZXh0IH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGluZ1RleHQnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uLFxuICBTQ09wdGlvbnNMaXN0LFxuICBTQ09wdGlvbkl0ZW0sXG4gIFNDQXNzaXN0YW50TWVzc2FnZUhlYWRlcixcbiAgU0NBc3Npc3RhbnROYW1lLFxuICBTQ0Fzc2lzdGFudEF2YXRhcixcbiAgU0NUYXNrTGluayxcbiAgU0NNZXNzYWdlSXRlbVdyYXBwZXIsXG4gIFNDTWVzc2FnZUl0ZW1Jbm5lcixcbiAgU0NBdHRhY2htZW50c1JvdyxcbiAgU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4sXG59IGZyb20gJy4vbmV3U3R5bGVzJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBNQUlBSWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zJ1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcbmltcG9ydCB7IENoYXRBSVN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucydcbmltcG9ydCB7IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuXG4vKiogQ29udGV4dG8gY29uIGVsIHRleHRvIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZy4gU29sbyBlbCBjb21wb25lbnRlIHF1ZSBsbyBjb25zdW1lIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PHN0cmluZz4oJycpXG5cbmNvbnN0IGNvZGUgPSBjcmVhdGVDb2RlUGx1Z2luKHsgdGhlbWVzOiBbJ2dpdGh1Yi1saWdodCcsICdnaXRodWItbGlnaHQnXSB9KVxuXG5jb25zdCBBc3Npc3RhbnRBdmF0YXJJbm5lcjogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudEF2YXRhcj5cbiAgICAgIHthZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IDxNQUlBSWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+IDogYWdlbnQ/LmVtb2ppfVxuICAgIDwvU0NBc3Npc3RhbnRBdmF0YXI+XG4gIClcbn1cblxuY29uc3QgQXNzaXN0YW50QXZhdGFyID0gbWVtbyhBc3Npc3RhbnRBdmF0YXJJbm5lcilcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIGZhcUlkPzogc3RyaW5nLCBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZykgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246ICh0aHJlYWRJZHM6IHN0cmluZ1tdLCBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcpID0+IHZvaWRcbiAgZGlzYWJsZUZlZWRiYWNrPzogRmVlZGJhY2sgfCBudWxsXG4gIHNvdXJjZXM/OiBhbnlcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIE1lc3NhZ2VXcmFwcGVyUHJvcHMge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgJ2RhdGEtbWVzc2FnZS1pZCc/OiBzdHJpbmdcbiAgaGFzRmVlZGJhY2s/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHMgPSBNQUlBTWVzc2FnZVByb3BzICYge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzQ2hhbmdlUHJvamVjdD86IGJvb2xlYW5cbn1cblxuY29uc3QgTWVzc2FnZVdyYXBwZXI6IEZDPE1lc3NhZ2VXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlRnJvbVVzZXIgOiBNZXNzYWdlRnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbXBvbmVudCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L01lc3NhZ2VDb21wb25lbnQ+XG59XG5cbmNvbnN0IE1lc3NhZ2VDb250ZW50V3JhcHBlcjogRkM8TWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29udGVudENvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlQ29udGVudEZyb21Vc2VyIDogTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29udGVudENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIE1lc3NhZ2VPcHRpb25zKHtcbiAgb3B0aW9ucyxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uLFxufToge1xuICBvcHRpb25zOiBQcm9qZWN0W10gfCBudWxsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxufSkge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFByb2plY3QgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbmNvbnN0IEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgPSAoKSA9PiB7XG4gIGNvbnN0IFtsb2NhbEFnZW50LCBzZXRMb2NhbEFnZW50XSA9IHVzZVN0YXRlPEFnZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMb2NhbEFnZW50KGFnZW50KVxuICB9LCBbYWdlbnRdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgICAgIDxBc3Npc3RhbnRBdmF0YXIgLz5cbiAgICAgIHtsb2NhbEFnZW50Py5uYW1lICYmIChcbiAgICAgICAgPFNDQXNzaXN0YW50TmFtZT57bG9jYWxBZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/ICdNQUlBJyA6IGxvY2FsQWdlbnQ/Lm5hbWV9PC9TQ0Fzc2lzdGFudE5hbWU+XG4gICAgICApfVxuICAgIDwvU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyPlxuICApXG59XG5cbi8vIEV4dHJhZSBlbCBzZWdtZW50byBkZSB0YWIgKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpIGRlbCBocmVmIHBhcmEgYWJyaXIgZWwgbW9kYWwgY29uIGVsIHRhYiBjb3JyZWN0b1xuY29uc3QgZ2V0VGFiU2VnbWVudEZyb21IcmVmID0gKGhyZWY6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG1hdGNoID0gaHJlZi5tYXRjaCgvXFwvdGFza3NcXC9cXGQrXFwvKFteLz9dKykvKVxuICByZXR1cm4gbWF0Y2ggJiYgL14oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykkLy50ZXN0KG1hdGNoWzFdKSA/IG1hdGNoWzFdIDogJ2RldGFpbCdcbn1cblxuLyoqIEV4dHJhZSBsYXMgdGFyZWFzIGVubGF6YWRhcyBlbiBlbCB0ZXh0byAoVVJMcyBxdWUgY29pbmNpZGVuIGNvbiBUQVNLX1VSTF9SRUdFWF9QQVRURVJOKS4gKi9cbmNvbnN0IGV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZyk6IFRhc2tJbmZvW10gPT4ge1xuICBpZiAoIW1lc3NhZ2UpIHJldHVybiBbXVxuICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgY29uc3QgdGFza3M6IFRhc2tJbmZvW10gPSBbXVxuICBjb25zdCBzZWVuSWRzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gbnVsbFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgd2hpbGUgKChtYXRjaCA9IHRhc2tVcmxSZWdleC5leGVjKG1lc3NhZ2UpKSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRhc2tJZCA9IG1hdGNoWzFdXG4gICAgY29uc3QgdXJsID0gbWF0Y2hbMF1cbiAgICBpZiAoIXNlZW5JZHMuaGFzKHRhc2tJZCkpIHtcbiAgICAgIHNlZW5JZHMuYWRkKHRhc2tJZClcbiAgICAgIGNvbnN0IGVzY2FwZWRVcmwgPSB1cmwucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxuICAgICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcWyhbXlxcXFxdXSspXFxcXF1cXFxcKCR7ZXNjYXBlZFVybH1cXFxcKWApXG4gICAgICBjb25zdCBsaW5rTWF0Y2ggPSBtZXNzYWdlLm1hdGNoKG1hcmtkb3duTGlua1JlZ2V4KVxuICAgICAgY29uc3QgdGl0bGUgPSBsaW5rTWF0Y2ggPyBsaW5rTWF0Y2hbMV0gOiBgVGFyZWEgIyR7dGFza0lkfWBcbiAgICAgIHRhc2tzLnB1c2goeyBpZDogdGFza0lkLCB0aXRsZSwgdXJsIH0pXG4gICAgfVxuICB9XG4gIHJldHVybiB0YXNrc1xufVxuXG5jb25zdCBoYXNUYXNrTGlua3MgPSAodGV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiBleHRyYWN0VGFza3NGcm9tTWVzc2FnZSh0ZXh0KS5sZW5ndGggPiAwXG5cbi8vIENvbXBvbmVudCBmb3IgdGFzayBsaW5rcyB0aGF0IHVzZXMgdGhlIHVzZVRhc2tQYW5lbCBob29rXG5jb25zdCBUYXNrTGluazogRkM8eyBocmVmOiBzdHJpbmc7IHRhc2tJZDogc3RyaW5nOyBjaGlsZHJlbjogUmVhY3ROb2RlIH0+ID0gKHsgaHJlZiwgdGFza0lkLCBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IHRhYlNlZ21lbnQgPSBnZXRUYWJTZWdtZW50RnJvbUhyZWYoaHJlZilcbiAgY29uc3QgeyBidWlsZE9wZW5UYXNrIH0gPSB1c2VUYXNrUGFuZWwodGFza0lkLCB0YWJTZWdtZW50KVxuICBjb25zdCBvcGVuVGFzayA9IGJ1aWxkT3BlblRhc2soKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgLy8gU2kgZXMgQ21kL0N0cmwgKyBjbGljaywgZGVqYXIgcXVlIHNlIGFicmEgZW4gbnVldmEgcGVzdGHDsWEgKGNvbXBvcnRhbWllbnRvIHBvciBkZWZlY3RvKVxuICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFzaygpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ1Rhc2tMaW5rIGhyZWY9e2hyZWZ9IG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NDVGFza0xpbms+XG4gIClcbn1cblxuLy8gQ3VzdG9tIGxpbmsgY29tcG9uZW50IGZvciBTdHJlYW1kb3duOiB0YXNrIFVSTHMgb3BlbiB0aGUgdGFzayBwYW5lbCwgb3RoZXIgbGlua3MgcmVuZGVyIG5vcm1hbGx5XG50eXBlIEN1c3RvbUxpbmtQcm9wcyA9IFJlYWN0LkFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PiAmIHsgbm9kZT86IHVua25vd24gfVxuY29uc3QgQ3VzdG9tTGluazogRkM8Q3VzdG9tTGlua1Byb3BzPiA9ICh7IGhyZWYsIGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgaWYgKCFocmVmIHx8IHR5cGVvZiBocmVmICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8YSBocmVmPXtocmVmfSB7Li4ucmVzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYT5cbiAgICApXG4gIH1cbiAgY29uc3QgdGFza01hdGNoID0gaHJlZi5tYXRjaChuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4pKVxuICBpZiAodGFza01hdGNoKSB7XG4gICAgY29uc3QgdGFza0lkID0gdGFza01hdGNoWzFdXG4gICAgcmV0dXJuIChcbiAgICAgIDxUYXNrTGluayBocmVmPXtocmVmfSB0YXNrSWQ9e3Rhc2tJZH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvVGFza0xpbms+XG4gICAgKVxuICB9XG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17aHJlZn0gey4uLnJlc3R9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYT5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIGNvbnN0IGZyb21Db250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTdHJlYW1pbmdNZXNzYWdlQ29udGV4dClcbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gZnJvbUNvbnRleHQgOiBwcm9wcy5tZXNzYWdlXG4gICAgY29uc3QgY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCA9IHByb3BzLmNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWRcbiAgICBpZiAoIWRpc3BsYXlUZXh0ICYmICFwcm9wcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5pc0Fzc2lzdGFudCAmJiBoYXNUYXNrTGlua3MoZGlzcGxheVRleHQpID8gJ2hhcy10YXNrLWxpbmtzJyA6ICcnfVxuICAgICAgICA+XG4gICAgICAgICAgPFN0cmVhbWRvd25cbiAgICAgICAgICAgIHBsdWdpbnM9e3sgY29kZSB9fVxuICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBDdXN0b21MaW5rIH0gYXMgUGFyYW1ldGVyczx0eXBlb2YgU3RyZWFtZG93bj5bMF1bJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgIGxpbmtTYWZldHk9e3sgZW5hYmxlZDogZmFsc2UgfX1cbiAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgc2hpa2lUaGVtZT17WydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J119XG4gICAgICAgICAgICBjb250cm9scz17eyB0YWJsZTogZmFsc2UsIGNvZGU6IGZhbHNlIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIDwvU3RyZWFtZG93bj5cbiAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiYgIXByb3BzLmlzRXJyb3IgJiYgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXByb3BzLmFwcHJvdmFsICYmICFwcm9wcy5pc1N0cmVhbWluZyAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2VGZWVkYmFja1xuICAgICAgICAgICAgY29udGVudD17ZGlzcGxheVRleHR9XG4gICAgICAgICAgICBzb3VyY2VzPXtwcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e3Byb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e3Byb3BzLmRpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiYgIXByb3BzLmlzRXJyb3IgJiYgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXByb3BzLmFwcHJvdmFsICYmIChcbiAgICAgICAgICA8Q2hhdEFJU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgIG9uU2VsZWN0U3VnZ2VzdGlvbj17c3VnZ2VzdGlvbiA9PiBwcm9wcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2socHJvcHMubWVzc2FnZUlkLCBzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgISFjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgICAgYWdlbnRJZD17Y3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cbilcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAge2lzQXNzaXN0YW50ICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgIHtpc0Fzc2lzdGFudCAmJiA8QXNzaXN0YW50TWVzc2FnZUhlYWRlciAvPn1cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHshIShhdHRhY2htZW50cyB8fCBzb3VyY2VzKT8ubGVuZ3RoICYmICFpc0Fzc2lzdGFudCAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICAgICB7KGF0dGFjaG1lbnRzIHx8IHNvdXJjZXMpPy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICBhY3Rpb25zPXthcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnN9XG4gICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgIG9uQXBwcm92ZT17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAnYXBwcm92ZScpfVxuICAgICAgICAgICAgICBvblJlamVjdD17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgIGlzUHJvamVjdERlbGV0ZWQ9e3Byb3BzLnByb2plY3RNZXRhZGF0YT8uaXNfZGVsZXRlZCA9PT0gdHJ1ZX1cbiAgICAgICAgICAgICAgaXNFeHBhbmRlZD17cHJvcHMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgIGhpdGxJbnN0YW5jZUlkPXthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9XG4gICAgICAgICAgICAgIHdhcm5pbmdNZXNzYWdlPXthcHByb3ZhbC53YXJuaW5nX21lc3NhZ2V9XG4gICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ9e2FwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgICAgeyghIW1lc3NhZ2UgfHwgaXNTdHJlYW1pbmcpICYmICFhcHByb3ZhbCAmJiAoXG4gICAgICAgICAgPFN0cmVhbWluZ01lc3NhZ2VCb2R5XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlID8/ICcnfVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9eyEhaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGFwcHJvdmFsPXthcHByb3ZhbH1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG4gIGV4cGFuZGVkLFxufTogQ2hhdEFJTWVzc2FnZXNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IGlzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLCBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSlcbiAgY29uc3Qgc3RyZWFtaW5nTWVzc2FnZVByb3BzUmVmID0gdXNlUmVmPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7fSlcbiAgY29uc3Qgc3RyZWFtaW5nTWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICAgIH0sXG4gICAgW2NoYW5nZVByb2plY3RdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uPy50cmltKCkpIHJldHVyblxuICAgICAgaWYgKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJylcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID8gJ21hcmtldHBsYWNlJyA6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMocHJldiA9PiAoeyAuLi5wcmV2LCBbbWVzc2FnZUlkXTogdHJ1ZSB9KSlcbiAgICAgIHNlbmRNZXNzYWdlKHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbc2VuZE1lc3NhZ2UsIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIGV2ZW50LCBhZ2VudD8uZW50aXR5LCBhZ2VudD8ubmFtZSwgYWdlbnQ/LnR5cGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvKHtcbiAgICAgICAgdG9wOiBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSlcbiAgICAgIC8vIEFjdHVhbGl6YXIgZXN0YWRvIGRlc3B1w6lzIGRlIHVuIGJyZXZlIGRlbGF5IHBhcmEgcGVybWl0aXIgcXVlIGVsIHNjcm9sbCBzZSBjb21wbGV0ZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0sIDUwMClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9ICFpc05lYXJCb3R0b21cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICBjb25zdCBkaWRTZXRTdGF0ZSA9IHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93XG4gICAgICAgIGlmIChkaWRTZXRTdGF0ZSkge1xuICAgICAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvblNjcm9sbFRvQm90dG9tLCBoYW5kbGVTY3JvbGxdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQsIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQsIHdhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICAvLyBDdWFuZG8gZWwgYWdlbnRlIGVtcGllemEgYSByZXNwb25kZXIsIHJlc2V0ZWFyIGVsIGZsYWcgeSBlbCB1bWJyYWwgcGFyYSBhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGxsZWdhIHVuIG1lbnNhamUgZGUgYXByb2JhY2nDs24gKEFwcHJvdmFsQm94KS4gU2luIFJlc2l6ZU9ic2VydmVyIGVuIGVsXG4gIC8vIGNvbnRlbmVkb3I6IG9ic2VydmFybG8gZGlzcGFyYWJhIGNhbGxiYWNrcyBhbCBjYW1iaWFyIGVsIGxheW91dC9zY3JvbGxiYXIgeSBjYWRhIHVub1xuICAvLyBsbGFtYWJhIHNjcm9sbFRvQm90dG9tKCksIHByb3ZvY2FuZG8gdGlyb25lcyBhbCBzY3JvbGxlYXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50IHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgaGFzQXBwcm92YWwgPSBsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcblxuICAgIGlmICghaGFzQXBwcm92YWwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcblxuICAgIGlmICghKGlzQXRCb3R0b20gfHwgIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9ICgpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZWN1ZW5jaWEgaW5pY2lhbCBkZSBzY3JvbGwgcGFyYSBjdWFuZG8gZWwgQXBwcm92YWxCb3ggYWNhYmEgZGUgcmVuZGVyaXphcnNlXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHNjcm9sbFRvQm90dG9tKClcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgc2V0VGltZW91dChzY3JvbGxUb0JvdHRvbSwgMTAwKVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNpIGVsIHVzdWFyaW8gZXN0w6Egc2Nyb2xsZWFuZG8gbWFudWFsbWVudGUsIG5vIGhhY2VyIGF1dG8gc2Nyb2xsXG4gICAgaWYgKHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCAmJiB3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHJldHVyblxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cblxuICAgIGNvbnN0IGlzTmV3QW5zd2VyTWVzc2FnZSA9IGxhc3RNZXNzYWdlICYmIGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKVxuICAgIGNvbnN0IGlzTmV3VXNlck1lc3NhZ2UgPSBsYXN0TWVzc2FnZSAmJiBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKVxuICAgIGNvbnN0IGlzTmV3QXBwcm92YWxNZXNzYWdlID0gbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNNZXNzYWdlcyA9ICEhbWVzc2FnZXMubGVuZ3RoXG4gICAgY29uc3QgaXNOb3RJbml0aWFsTWVzc2FnZSA9ICFtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG5cbiAgICBpZiAoKGlzTmV3QW5zd2VyTWVzc2FnZSB8fCBpc05ld1VzZXJNZXNzYWdlIHx8IGlzTmV3QXBwcm92YWxNZXNzYWdlKSAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICAvLyBQYXJhIG1lbnNhamVzIGRlIGFwcm9iYWNpw7NuLCB1c2FyIHVuIHBlcXVlw7FvIGRlbGF5IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIEFwcHJvdmFsQm94IHNlIGhheWEgcmVuZGVyaXphZG9cbiAgICAgIGNvbnN0IHNjcm9sbERlbGF5ID0gaXNOZXdBcHByb3ZhbE1lc3NhZ2UgPyAxMDAgOiAwXG4gICAgICBjb25zdCBkb1Njcm9sbCA9ICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsRGVsYXkgPiAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZG9TY3JvbGwsIHNjcm9sbERlbGF5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9TY3JvbGwoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBoYXNNZXNzYWdlcyAmJlxuICAgICAgaXNOb3RJbml0aWFsTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3QW5zd2VyTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3VXNlck1lc3NhZ2UgJiZcbiAgICAgICFpc05ld0FwcHJvdmFsTWVzc2FnZVxuICAgICkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCB3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIC8vIFZlcmlmaWNhciBlbCBlc3RhZG8gaW5pY2lhbCBkZWwgc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXJcbiAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoXSlcblxuICAvLyBPYnRlbmVyIGVsIMO6bHRpbW8gbWVuc2FqZSBkZWwgdXN1YXJpbyBwYXJhIHZlcmlmaWNhciBzaSB0aWVuZSBhdHRhY2htZW50c1xuICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAuYXQoLTEpXG5cbiAgY29uc3QgaGFzQXR0YWNobWVudHMgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpICYmIGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGgpIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSAmJiBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGgpXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYWdlbnQ/Lm5hbWUgfHwgJycpXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBjb25zdCBsYXN0TXNnID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgY29uc3QgaXNTdHJlYW1pbmdBY3RpdmUgPVxuICAgICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKSAmJlxuICAgIGxhc3RNc2cgJiZcbiAgICAobGFzdE1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IGxhc3RNc2cudXNlcj8uaWQgPT09ICdhc3Npc3RhbnQnKVxuICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gaXNTdHJlYW1pbmdBY3RpdmUgPyAobGFzdE1zZy5tZXNzYWdlID8/ICcnKSA6ICcnXG5cbiAgaWYgKGxvYWRpbmdNZXNzYWdlcykge1xuICAgIHJldHVybiA8TG9hZGVyIC8+XG4gIH1cblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8U3RyZWFtaW5nTWVzc2FnZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0cmVhbWluZ1RleHR9PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9XG4gICAgICAgICAgICBtZXNzYWdlPy53YXNIZWxwZnVsID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZS53YXNIZWxwZnVsID09PSBudWxsXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IG1lc3NhZ2Uud2FzSGVscGZ1bFxuICAgICAgICAgICAgICAgID8gRmVlZGJhY2suVEhVTUJTX1VQXG4gICAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gS2V5IGVzdGFibGU6IHNvbG8gbWVzc2FnZS5pZCBwYXJhIGV2aXRhciByZW1vdW50IGR1cmFudGUgc3RyZWFtaW5nIChtZXNzYWdlLmRhdGUgcHVlZGUgY2FtYmlhcilcbiAgICAgICAgICBjb25zdCBtZXNzYWdlS2V5ID0gbWVzc2FnZS5pZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG4gICAgICAgICAgaWYgKGlzU3RyZWFtaW5nKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtaW5nTWVzc2FnZUlkUmVmLmN1cnJlbnQgIT09IG1lc3NhZ2UuaWQpIHtcbiAgICAgICAgICAgICAgc3RyZWFtaW5nTWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlLmlkID8/IG51bGxcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICBzdHJlYW1pbmdNZXNzYWdlUHJvcHNSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIHsgbWVzc2FnZTogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYXV0aFVzZXIsXG4gICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjayxcbiAgICAgICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb246ICEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXSxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjazogbWVzc2FnZUZlZWRiYWNrLFxuICAgICAgICAgICAgICAgICAgaXNTdHJlYW1pbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gPE1lc3NhZ2VJdGVtIGtleT17bWVzc2FnZUtleX0gey4uLihzdHJlYW1pbmdNZXNzYWdlUHJvcHNSZWYuY3VycmVudCBhcyBNZXNzYWdlSXRlbVByb3BzKX0gLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgc3RyZWFtaW5nTWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgICAga2V5PXttZXNzYWdlS2V5fVxuICAgICAgICAgICAgICBhdXRoVXNlcj17YXV0aFVzZXJ9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb249e2hhbmRsZUFwcHJvdmFsRGVjaXNpb259XG4gICAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtmYWxzZX1cbiAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC9TdHJlYW1pbmdNZXNzYWdlQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIHsod2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlIHx8IE9iamVjdC5rZXlzKGFjdGl2ZUxvYWRpbmdzIHx8IHt9KS5sZW5ndGggPiAwKSAmJiAoXG4gICAgICAgIDxTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgICB7T2JqZWN0LmtleXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICA8TG9hZGluZ1RleHRcbiAgICAgICAgICAgICAga2V5PVwibG9hZGluZy1hY3RpdmVcIlxuICAgICAgICAgICAgICB0ZXh0PXtcbiAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKGFjdGl2ZUxvYWRpbmdzIHx8IHt9KS5maW5kKG1zZyA9PiBtc2cgIT09IHQoJ2NoYXQucHJvY2Vzc2luZycpKSB8fCB0KCdjaGF0LnByb2Nlc3NpbmcnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAod2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlKSAmJiAoXG4gICAgICAgICAgICAgIDxMb2FkaW5nVGV4dFxuICAgICAgICAgICAgICAgIHRleHQ9e1xuICAgICAgICAgICAgICAgICAgbG9hZGluZ01lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgIChpc1dlYlNlYXJjaEFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICA/ICdCdXNjYW5kbyBlbiBsYSB3ZWInXG4gICAgICAgICAgICAgICAgICAgIDogaXNEZWVwU2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgPyB0KCdjaGF0LmdlbmVyYXRpbmdEZWVwU2VhcmNoJylcbiAgICAgICAgICAgICAgICAgICAgICA6IGhhc0F0dGFjaG1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2NoYXQuZ2VuZXJhdGluZ0F0dGFjaG1lbnQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0KCdjaGF0LmdlbmVyYXRpbmcnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VzT3V0ZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fT5cbiAgICAgIHtpc1Njcm9sbE9uUGFyZW50ID8gKFxuICAgICAgICA8U0NNZXNzYWdlc1Njcm9sbCByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fSAkaXNNYXJrZXRwbGFjZUdsb2JhbD17aXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50fT5cbiAgICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01lc3NhZ2VzSW5uZXJcbiAgICAgICAgICByZWY9e21lc3NhZ2VzUmVmfVxuICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX1cbiAgICAgICAgICAkc2Nyb2xsT25QYXJlbnQ9e2ZhbHNlfVxuICAgICAgICAgICRpc01hcmtldHBsYWNlR2xvYmFsPXtpc01hcmtldHBsYWNlR2xvYmFsQWdlbnR9XG4gICAgICAgID5cbiAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93U2Nyb2xsVG9Cb3R0b20gJiYgKFxuICAgICAgICA8U2Nyb2xsVG9Cb3R0b21CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxBcnJvd1NtYWxsRG93biBjb2xvcj1cIiM2NjZcIiB3aWR0aD1cIjIwcHhcIiBoZWlnaHQ9XCIyMHB4XCIgLz5cbiAgICAgICAgPC9TY3JvbGxUb0JvdHRvbUJ1dHRvbj5cbiAgICAgICl9XG4gICAgPC9TQ01lc3NhZ2VzT3V0ZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoi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
849
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiU3RyZWFtZG93biIsImNyZWF0ZUNvZGVQbHVnaW4iLCJBcnJvd1NtYWxsRG93biIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVVzZXIiLCJ1c2VUIiwidXNlQ2hhdE1hbmFnZXIiLCJ1c2VUYXNrUGFuZWwiLCJMb2FkaW5nVGV4dCIsIkxvYWRlciIsIk1lc3NhZ2VGcm9tVXNlciIsIk1lc3NhZ2VGcm9tT3RoZXIiLCJNZXNzYWdlQ29udGVudEZyb21Vc2VyIiwiTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIiLCJNZXNzYWdlRmVlZGJhY2siLCJTQ0NBSU1lc3NhZ2VXcmFwcGVyIiwiU2Nyb2xsVG9Cb3R0b21CdXR0b24iLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiU0NBc3Npc3RhbnROYW1lIiwiU0NBc3Npc3RhbnRBdmF0YXIiLCJTQ1Rhc2tMaW5rIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJNQUlBSWNvbiIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJDaGF0QUlTdWdnZXN0aW9ucyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIlN0cmVhbWluZ01lc3NhZ2VDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsImNvZGUiLCJ0aGVtZXMiLCJBc3Npc3RhbnRBdmF0YXJJbm5lciIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJjaGlsZHJlbiIsInR5cGUiLCJ3aWR0aCIsImhlaWdodCIsImVtb2ppIiwiQXNzaXN0YW50QXZhdGFyIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsInByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiTWVzc2FnZUNvbXBvbmVudCIsIl9vYmplY3RTcHJlYWQiLCJNZXNzYWdlQ29udGVudFdyYXBwZXIiLCJfcmVmMiIsIl9leGNsdWRlZDIiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIk1lc3NhZ2VPcHRpb25zIiwiX3JlZjMiLCJvcHRpb25zIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRPcHRpb24iLCJzZXRTZWxlY3RlZE9wdGlvbiIsImhhbmRsZVNlbGVjdCIsIm9wdGlvbiIsIm1hcCIsIiRoYXNTZWxlY3Rpb24iLCIkZGltbWVkIiwiaWQiLCJvbkNsaWNrIiwibmFtZSIsIkFzc2lzdGFudE1lc3NhZ2VIZWFkZXIiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImxvY2FsQWdlbnQiLCJzZXRMb2NhbEFnZW50IiwiX3VzZUdsb2JhbENvbnRleHQyIiwiZ2V0VGFiU2VnbWVudEZyb21IcmVmIiwiaHJlZiIsIm1hdGNoIiwidGVzdCIsImV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlIiwibWVzc2FnZSIsInRhc2tVcmxSZWdleCIsIlJlZ0V4cCIsInRhc2tzIiwic2VlbklkcyIsIlNldCIsImV4ZWMiLCJ0YXNrSWQiLCJ1cmwiLCJoYXMiLCJhZGQiLCJlc2NhcGVkVXJsIiwicmVwbGFjZSIsIm1hcmtkb3duTGlua1JlZ2V4IiwiY29uY2F0IiwibGlua01hdGNoIiwidGl0bGUiLCJwdXNoIiwiaGFzVGFza0xpbmtzIiwidGV4dCIsImxlbmd0aCIsIlRhc2tMaW5rIiwiX3JlZjQiLCJ0YWJTZWdtZW50IiwiX3VzZVRhc2tQYW5lbCIsImJ1aWxkT3BlblRhc2siLCJvcGVuVGFzayIsImhhbmRsZUNsaWNrIiwiZSIsIm1ldGFLZXkiLCJjdHJsS2V5IiwicHJldmVudERlZmF1bHQiLCJDdXN0b21MaW5rIiwiX3JlZjUiLCJyZXN0IiwiX2V4Y2x1ZGVkMyIsInRhc2tNYXRjaCIsIlN0cmVhbWluZ01lc3NhZ2VCb2R5IiwiX3Byb3BzJGNyZWF0ZUFnZW50Rm9sIiwiZnJvbUNvbnRleHQiLCJ1c2VDb250ZXh0IiwiZGlzcGxheVRleHQiLCJpc1N0cmVhbWluZyIsImNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiYWdlbnRJZCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJpc0Fzc2lzdGFudCIsInBsdWdpbnMiLCJjb21wb25lbnRzIiwiYSIsImxpbmtTYWZldHkiLCJlbmFibGVkIiwiaXNBbmltYXRpbmciLCJzaGlraVRoZW1lIiwiY29udHJvbHMiLCJ0YWJsZSIsImlzRXJyb3IiLCJhcHByb3ZhbCIsImNvbnRlbnQiLCJzb3VyY2VzIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwibWVzc2FnZUlkIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHByb2plY3RNZXRhZGF0IiwidXNlciIsImF1dGhVc2VyIiwiaXNDaGFuZ2VQcm9qZWN0IiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiQVNTSVNUQU5UIiwibWVzc2FnZUF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImZpbGUiLCJGaWxlIiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFuZGxlQXR0YWNobWVudERvd25sb2FkIiwiX3JlZjYiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImV4dGVuc2lvbiIsImZpbGVOYW1lIiwiZmlsZVVybCIsImJsb2JVcmwiLCJkb3dubG9hZGVkRmlsZSIsImxpbmsiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiaW5jbHVkZXMiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJkb3dubG9hZCIsInN0eWxlIiwiZGlzcGxheSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYXNGZWVkYmFjayIsIiRpc0Fzc2lzdGFudCIsIm1lc3NhZ2VFeHRyYUNvbnRlbnQiLCJmZWVkYmFjayIsInNlc3Npb25JZCIsInNwbGl0IiwiZmlsdGVyIiwicXVlc3Rpb25JZCIsImpvaW4iLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNyIsIl9sYXN0TXNnJHVzZXIiLCJfbGFzdE1zZyRtZXNzYWdlIiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQzIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJldmVudCIsIm1lc3NhZ2VzUmVmIiwiY2hhdEluaXRpYWxpemVkUmVmIiwiaXNMb2FkaW5nTW9yZVJlZiIsInVzZXJTY3JvbGxpbmdSZWYiLCJzY3JvbGxUaHJlc2hvbGRSZWYiLCJsYXN0U2Nyb2xsVG9wUmVmIiwic2hvd1Njcm9sbFRvQm90dG9tUmVmIiwic2Nyb2xsUmFmUmVmIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93U2Nyb2xsVG9Cb3R0b20iLCJzZXRTaG93U2Nyb2xsVG9Cb3R0b20iLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic3RyZWFtaW5nTWVzc2FnZVByb3BzUmVmIiwic3RyZWFtaW5nTWVzc2FnZUlkUmVmIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwidW5kZWZpbmVkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInRyaW0iLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJlbnRpdHkiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsImN1cnJlbnQiLCJzY3JvbGxUbyIsInRvcCIsInNjcm9sbEhlaWdodCIsImJlaGF2aW9yIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJzY3JvbGxUb3AiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93IiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJjb250YWluZXIiLCJjdXJyZW50VGFyZ2V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJpc1Njcm9sbGluZ1VwIiwiaXNOZWFyQm90dG9tIiwiZGlkU2V0U3RhdGUiLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwibGFzdE1lc3NhZ2UiLCJoYXNBcHByb3ZhbCIsImlzQXRCb3R0b20iLCJzY3JvbGxUb0JvdHRvbSIsIl9tZXNzYWdlc1JlZiRjdXJyZW50MiIsImlzTmV3QW5zd2VyTWVzc2FnZSIsImlzTmV3VXNlck1lc3NhZ2UiLCJpc05ld0FwcHJvdmFsTWVzc2FnZSIsImhhc01lc3NhZ2VzIiwiaXNOb3RJbml0aWFsTWVzc2FnZSIsIm1zZyIsInNjcm9sbERlbGF5IiwiZG9TY3JvbGwiLCJfbWVzc2FnZXNSZWYkY3VycmVudDMiLCJfbWVzc2FnZXNSZWYkY3VycmVudDQiLCJsYXN0VXNlck1lc3NhZ2UiLCJhdCIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJsYXN0TXNnIiwiaXNTdHJlYW1pbmdBY3RpdmUiLCJzdHJlYW1pbmdUZXh0IiwibWVzc2FnZXNDb250ZW50IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJfbWVzc2FnZSRpZCIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJtZXNzYWdlS2V5IiwiX21lc3NhZ2UkaWQyIiwiT2JqZWN0IiwiYXNzaWduIiwia2V5Iiwia2V5cyIsInZhbHVlcyIsImZpbmQiLCIkc2Nyb2xsT25QYXJlbnQiLCJyZWYiLCJvblNjcm9sbCIsIiRpc01hcmtldHBsYWNlR2xvYmFsIiwiY29sb3IiLCJDaGF0QUlNZXNzYWdlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9DaGF0QUlNZXNzYWdlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgbWVtbywgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFN0cmVhbWRvd24gfSBmcm9tICdzdHJlYW1kb3duJ1xuaW1wb3J0IHsgY3JlYXRlQ29kZVBsdWdpbiB9IGZyb20gJ0BzdHJlYW1kb3duL2NvZGUnXG5pbXBvcnQgeyBBcnJvd1NtYWxsRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Fycm93U21hbGxEb3duJ1xuXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi8uLi9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveCdcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsJ1xuaW1wb3J0IHsgQXR0YWNobWVudENhcmRBdWRpbyB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkQXVkaW8nXG5pbXBvcnQgeyBNQUlBTWVzc2FnZVByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQU1lc3NhZ2UvTUFJQU1lc3NhZ2UuaW50ZXJmYWNlcydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0SGlzdG9yeVJvbGUsIFRhc2tJbmZvIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVRhc2tQYW5lbCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVRhc2tQYW5lbCdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDT3B0aW9uc0xpc3QsXG4gIFNDT3B0aW9uSXRlbSxcbiAgU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyLFxuICBTQ0Fzc2lzdGFudE5hbWUsXG4gIFNDQXNzaXN0YW50QXZhdGFyLFxuICBTQ1Rhc2tMaW5rLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbn0gZnJvbSAnLi9uZXdTdHlsZXMnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IE1BSUFJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgQ2hhdEFJU3VnZ2VzdGlvbnMgfSBmcm9tICcuL0NoYXRBSVN1Z2dlc3Rpb25zJ1xuaW1wb3J0IHsgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuXG4vKiogQ29udGV4dG8gY29uIGVsIHRleHRvIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZy4gU29sbyBlbCBjb21wb25lbnRlIHF1ZSBsbyBjb25zdW1lIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PHN0cmluZz4oJycpXG5cbmNvbnN0IGNvZGUgPSBjcmVhdGVDb2RlUGx1Z2luKHsgdGhlbWVzOiBbJ2dpdGh1Yi1saWdodCcsICdnaXRodWItbGlnaHQnXSB9KVxuXG5jb25zdCBBc3Npc3RhbnRBdmF0YXJJbm5lcjogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudEF2YXRhcj5cbiAgICAgIHthZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IDxNQUlBSWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+IDogYWdlbnQ/LmVtb2ppfVxuICAgIDwvU0NBc3Npc3RhbnRBdmF0YXI+XG4gIClcbn1cblxuY29uc3QgQXNzaXN0YW50QXZhdGFyID0gbWVtbyhBc3Npc3RhbnRBdmF0YXJJbm5lcilcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIGZhcUlkPzogc3RyaW5nLCBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZykgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246ICh0aHJlYWRJZHM6IHN0cmluZ1tdLCBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcpID0+IHZvaWRcbiAgZGlzYWJsZUZlZWRiYWNrPzogRmVlZGJhY2sgfCBudWxsXG4gIHNvdXJjZXM/OiBhbnlcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIE1lc3NhZ2VXcmFwcGVyUHJvcHMge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgJ2RhdGEtbWVzc2FnZS1pZCc/OiBzdHJpbmdcbiAgaGFzRmVlZGJhY2s/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHMgPSBNQUlBTWVzc2FnZVByb3BzICYge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzQ2hhbmdlUHJvamVjdD86IGJvb2xlYW5cbn1cblxuY29uc3QgTWVzc2FnZVdyYXBwZXI6IEZDPE1lc3NhZ2VXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlRnJvbVVzZXIgOiBNZXNzYWdlRnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbXBvbmVudCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L01lc3NhZ2VDb21wb25lbnQ+XG59XG5cbmNvbnN0IE1lc3NhZ2VDb250ZW50V3JhcHBlcjogRkM8TWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29udGVudENvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlQ29udGVudEZyb21Vc2VyIDogTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29udGVudENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIE1lc3NhZ2VPcHRpb25zKHtcbiAgb3B0aW9ucyxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uLFxufToge1xuICBvcHRpb25zOiBQcm9qZWN0W10gfCBudWxsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxufSkge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFByb2plY3QgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbmNvbnN0IEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgPSAoKSA9PiB7XG4gIGNvbnN0IFtsb2NhbEFnZW50LCBzZXRMb2NhbEFnZW50XSA9IHVzZVN0YXRlPEFnZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMb2NhbEFnZW50KGFnZW50KVxuICB9LCBbYWdlbnRdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgICAgIDxBc3Npc3RhbnRBdmF0YXIgLz5cbiAgICAgIHtsb2NhbEFnZW50Py5uYW1lICYmIChcbiAgICAgICAgPFNDQXNzaXN0YW50TmFtZT57bG9jYWxBZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/ICdNQUlBJyA6IGxvY2FsQWdlbnQ/Lm5hbWV9PC9TQ0Fzc2lzdGFudE5hbWU+XG4gICAgICApfVxuICAgIDwvU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyPlxuICApXG59XG5cbi8vIEV4dHJhZSBlbCBzZWdtZW50byBkZSB0YWIgKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpIGRlbCBocmVmIHBhcmEgYWJyaXIgZWwgbW9kYWwgY29uIGVsIHRhYiBjb3JyZWN0b1xuY29uc3QgZ2V0VGFiU2VnbWVudEZyb21IcmVmID0gKGhyZWY6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG1hdGNoID0gaHJlZi5tYXRjaCgvXFwvdGFza3NcXC9cXGQrXFwvKFteLz9dKykvKVxuICByZXR1cm4gbWF0Y2ggJiYgL14oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykkLy50ZXN0KG1hdGNoWzFdKSA/IG1hdGNoWzFdIDogJ2RldGFpbCdcbn1cblxuLyoqIEV4dHJhZSBsYXMgdGFyZWFzIGVubGF6YWRhcyBlbiBlbCB0ZXh0byAoVVJMcyBxdWUgY29pbmNpZGVuIGNvbiBUQVNLX1VSTF9SRUdFWF9QQVRURVJOKS4gKi9cbmNvbnN0IGV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZyk6IFRhc2tJbmZvW10gPT4ge1xuICBpZiAoIW1lc3NhZ2UpIHJldHVybiBbXVxuICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgY29uc3QgdGFza3M6IFRhc2tJbmZvW10gPSBbXVxuICBjb25zdCBzZWVuSWRzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gbnVsbFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgd2hpbGUgKChtYXRjaCA9IHRhc2tVcmxSZWdleC5leGVjKG1lc3NhZ2UpKSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRhc2tJZCA9IG1hdGNoWzFdXG4gICAgY29uc3QgdXJsID0gbWF0Y2hbMF1cbiAgICBpZiAoIXNlZW5JZHMuaGFzKHRhc2tJZCkpIHtcbiAgICAgIHNlZW5JZHMuYWRkKHRhc2tJZClcbiAgICAgIGNvbnN0IGVzY2FwZWRVcmwgPSB1cmwucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxuICAgICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcWyhbXlxcXFxdXSspXFxcXF1cXFxcKCR7ZXNjYXBlZFVybH1cXFxcKWApXG4gICAgICBjb25zdCBsaW5rTWF0Y2ggPSBtZXNzYWdlLm1hdGNoKG1hcmtkb3duTGlua1JlZ2V4KVxuICAgICAgY29uc3QgdGl0bGUgPSBsaW5rTWF0Y2ggPyBsaW5rTWF0Y2hbMV0gOiBgVGFyZWEgIyR7dGFza0lkfWBcbiAgICAgIHRhc2tzLnB1c2goeyBpZDogdGFza0lkLCB0aXRsZSwgdXJsIH0pXG4gICAgfVxuICB9XG4gIHJldHVybiB0YXNrc1xufVxuXG5jb25zdCBoYXNUYXNrTGlua3MgPSAodGV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiBleHRyYWN0VGFza3NGcm9tTWVzc2FnZSh0ZXh0KS5sZW5ndGggPiAwXG5cbi8vIENvbXBvbmVudCBmb3IgdGFzayBsaW5rcyB0aGF0IHVzZXMgdGhlIHVzZVRhc2tQYW5lbCBob29rXG5jb25zdCBUYXNrTGluazogRkM8eyBocmVmOiBzdHJpbmc7IHRhc2tJZDogc3RyaW5nOyBjaGlsZHJlbjogUmVhY3ROb2RlIH0+ID0gKHsgaHJlZiwgdGFza0lkLCBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IHRhYlNlZ21lbnQgPSBnZXRUYWJTZWdtZW50RnJvbUhyZWYoaHJlZilcbiAgY29uc3QgeyBidWlsZE9wZW5UYXNrIH0gPSB1c2VUYXNrUGFuZWwodGFza0lkLCB0YWJTZWdtZW50KVxuICBjb25zdCBvcGVuVGFzayA9IGJ1aWxkT3BlblRhc2soKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgLy8gU2kgZXMgQ21kL0N0cmwgKyBjbGljaywgZGVqYXIgcXVlIHNlIGFicmEgZW4gbnVldmEgcGVzdGHDsWEgKGNvbXBvcnRhbWllbnRvIHBvciBkZWZlY3RvKVxuICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFzaygpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ1Rhc2tMaW5rIGhyZWY9e2hyZWZ9IG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NDVGFza0xpbms+XG4gIClcbn1cblxuLy8gQ3VzdG9tIGxpbmsgY29tcG9uZW50IGZvciBTdHJlYW1kb3duOiB0YXNrIFVSTHMgb3BlbiB0aGUgdGFzayBwYW5lbCwgb3RoZXIgbGlua3MgcmVuZGVyIG5vcm1hbGx5XG50eXBlIEN1c3RvbUxpbmtQcm9wcyA9IFJlYWN0LkFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PiAmIHsgbm9kZT86IHVua25vd24gfVxuY29uc3QgQ3VzdG9tTGluazogRkM8Q3VzdG9tTGlua1Byb3BzPiA9ICh7IGhyZWYsIGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgaWYgKCFocmVmIHx8IHR5cGVvZiBocmVmICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8YSBocmVmPXtocmVmfSB7Li4ucmVzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYT5cbiAgICApXG4gIH1cbiAgY29uc3QgdGFza01hdGNoID0gaHJlZi5tYXRjaChuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4pKVxuICBpZiAodGFza01hdGNoKSB7XG4gICAgY29uc3QgdGFza0lkID0gdGFza01hdGNoWzFdXG4gICAgcmV0dXJuIChcbiAgICAgIDxUYXNrTGluayBocmVmPXtocmVmfSB0YXNrSWQ9e3Rhc2tJZH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvVGFza0xpbms+XG4gICAgKVxuICB9XG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17aHJlZn0gey4uLnJlc3R9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYT5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIGNvbnN0IGZyb21Db250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTdHJlYW1pbmdNZXNzYWdlQ29udGV4dClcbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gZnJvbUNvbnRleHQgOiBwcm9wcy5tZXNzYWdlXG4gICAgY29uc3QgY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCA9IHByb3BzLmNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWRcbiAgICBpZiAoIWRpc3BsYXlUZXh0ICYmICFwcm9wcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5pc0Fzc2lzdGFudCAmJiBoYXNUYXNrTGlua3MoZGlzcGxheVRleHQpID8gJ2hhcy10YXNrLWxpbmtzJyA6ICcnfVxuICAgICAgICA+XG4gICAgICAgICAgPFN0cmVhbWRvd25cbiAgICAgICAgICAgIHBsdWdpbnM9e3sgY29kZSB9fVxuICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBDdXN0b21MaW5rIH0gYXMgUGFyYW1ldGVyczx0eXBlb2YgU3RyZWFtZG93bj5bMF1bJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgIGxpbmtTYWZldHk9e3sgZW5hYmxlZDogZmFsc2UgfX1cbiAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgc2hpa2lUaGVtZT17WydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J119XG4gICAgICAgICAgICBjb250cm9scz17eyB0YWJsZTogZmFsc2UsIGNvZGU6IGZhbHNlIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIDwvU3RyZWFtZG93bj5cbiAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiYgIXByb3BzLmlzRXJyb3IgJiYgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXByb3BzLmFwcHJvdmFsICYmICFwcm9wcy5pc1N0cmVhbWluZyAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2VGZWVkYmFja1xuICAgICAgICAgICAgY29udGVudD17ZGlzcGxheVRleHR9XG4gICAgICAgICAgICBzb3VyY2VzPXtwcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e3Byb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e3Byb3BzLmRpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiYgIXByb3BzLmlzRXJyb3IgJiYgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXByb3BzLmFwcHJvdmFsICYmIChcbiAgICAgICAgICA8Q2hhdEFJU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgIG9uU2VsZWN0U3VnZ2VzdGlvbj17c3VnZ2VzdGlvbiA9PiBwcm9wcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2socHJvcHMubWVzc2FnZUlkLCBzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgISFjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgICAgYWdlbnRJZD17Y3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cbilcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICBjb25zdCBtZXNzYWdlQXR0YWNobWVudHMgPVxuICAgIGF0dGFjaG1lbnRzICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICAgID8gYXR0YWNobWVudHNcbiAgICAgIDogIWlzQXNzaXN0YW50ICYmIEFycmF5LmlzQXJyYXkoc291cmNlcylcbiAgICAgICAgPyAoc291cmNlcyBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICA6IFtdXG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudENsaWNrID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgLy8gUGVybWl0aXIgcHJldmlzdWFsaXphY2nDs24gc2kgdGllbmUgYXJjaGl2byBsb2NhbCBvIFVSTHMgZGVsIGJhY2tlbmRcbiAgICBpZiAoXG4gICAgICBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX2ZpbGVcbiAgICApIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQgPSBhc3luYyAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBhdHRhY2htZW50Lm5hbWUuaW5jbHVkZXMoJy4nKSA/ICcnIDogYC4ke2F0dGFjaG1lbnQudHlwZX1gXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHthdHRhY2htZW50Lm5hbWV9JHtleHRlbnNpb259YFxuICAgIGNvbnN0IGZpbGVVcmwgPSBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlIHx8IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbFxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBibG9iVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gICAgICBpZiAoZmlsZVVybCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoZmlsZVVybCwgZmlsZU5hbWUsIGF0dGFjaG1lbnQudHlwZSlcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG93bmxvYWRlZEZpbGUpXG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYXR0YWNobWVudC5maWxlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWJsb2JVcmwpIHJldHVyblxuXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBsaW5rLmhyZWYgPSBibG9iVXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKVxuICAgICAgbGluay5jbGljaygpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybClcbiAgICAgIH0sIDEwMClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRvd25sb2FkIGF0dGFjaG1lbnQnLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICBpZiAoaXNDaGFuZ2VQcm9qZWN0ICYmIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICB7aXNBc3Npc3RhbnQgJiYgPEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgLz59XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAge2lzQXNzaXN0YW50ICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgeyEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50VHlwZSA9IGF0dGFjaG1lbnQ/LnR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudE5hbWUgPSBhdHRhY2htZW50Py5uYW1lPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzQXVkaW9GaWxlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKSB8fFxuICAgICAgICAgICAgICAgIFsnZmxhYycsICdtNGEnLCAnbXAzJywgJ21wNCcsICdvZ2EnLCAnb2dnJywgJ3dhdicsICd3ZWJtJ10uaW5jbHVkZXMoYXR0YWNobWVudFR5cGUpIHx8XG4gICAgICAgICAgICAgICAgWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddLnNvbWUoZXh0ID0+XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50TmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChpc0F1ZGlvRmlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiA8QXR0YWNobWVudENhcmRBdWRpbyBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9IGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9IC8+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxBdHRhY2htZW50Q2FyZFxuICAgICAgICAgICAgICAgICAga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfVxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudD17YXR0YWNobWVudH1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgb25Eb3dubG9hZD17KCkgPT4gaGFuZGxlQXR0YWNobWVudERvd25sb2FkKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQXR0YWNobWVudENsaWNrKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvU0NBdHRhY2htZW50c1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgICB7KCEhbWVzc2FnZSB8fCBpc1N0cmVhbWluZykgJiYgIWFwcHJvdmFsICYmICEoaXNBc3Npc3RhbnQgJiYgISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFN0cmVhbWluZ01lc3NhZ2VCb2R5XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlID8/ICcnfVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9eyEhaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGFwcHJvdmFsPXthcHByb3ZhbH1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG4gIGV4cGFuZGVkLFxufTogQ2hhdEFJTWVzc2FnZXNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IGlzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLCBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSlcbiAgY29uc3Qgc3RyZWFtaW5nTWVzc2FnZVByb3BzUmVmID0gdXNlUmVmPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7fSlcbiAgY29uc3Qgc3RyZWFtaW5nTWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICAgIH0sXG4gICAgW2NoYW5nZVByb2plY3RdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uPy50cmltKCkpIHJldHVyblxuICAgICAgaWYgKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJylcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID8gJ21hcmtldHBsYWNlJyA6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMocHJldiA9PiAoeyAuLi5wcmV2LCBbbWVzc2FnZUlkXTogdHJ1ZSB9KSlcbiAgICAgIHNlbmRNZXNzYWdlKHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbc2VuZE1lc3NhZ2UsIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIGV2ZW50LCBhZ2VudD8uZW50aXR5LCBhZ2VudD8ubmFtZSwgYWdlbnQ/LnR5cGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvKHtcbiAgICAgICAgdG9wOiBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSlcbiAgICAgIC8vIEFjdHVhbGl6YXIgZXN0YWRvIGRlc3B1w6lzIGRlIHVuIGJyZXZlIGRlbGF5IHBhcmEgcGVybWl0aXIgcXVlIGVsIHNjcm9sbCBzZSBjb21wbGV0ZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0sIDUwMClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9ICFpc05lYXJCb3R0b21cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICBjb25zdCBkaWRTZXRTdGF0ZSA9IHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93XG4gICAgICAgIGlmIChkaWRTZXRTdGF0ZSkge1xuICAgICAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvblNjcm9sbFRvQm90dG9tLCBoYW5kbGVTY3JvbGxdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQsIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQsIHdhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICAvLyBDdWFuZG8gZWwgYWdlbnRlIGVtcGllemEgYSByZXNwb25kZXIsIHJlc2V0ZWFyIGVsIGZsYWcgeSBlbCB1bWJyYWwgcGFyYSBhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGxsZWdhIHVuIG1lbnNhamUgZGUgYXByb2JhY2nDs24gKEFwcHJvdmFsQm94KS4gU2luIFJlc2l6ZU9ic2VydmVyIGVuIGVsXG4gIC8vIGNvbnRlbmVkb3I6IG9ic2VydmFybG8gZGlzcGFyYWJhIGNhbGxiYWNrcyBhbCBjYW1iaWFyIGVsIGxheW91dC9zY3JvbGxiYXIgeSBjYWRhIHVub1xuICAvLyBsbGFtYWJhIHNjcm9sbFRvQm90dG9tKCksIHByb3ZvY2FuZG8gdGlyb25lcyBhbCBzY3JvbGxlYXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50IHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgaGFzQXBwcm92YWwgPSBsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcblxuICAgIGlmICghaGFzQXBwcm92YWwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcblxuICAgIGlmICghKGlzQXRCb3R0b20gfHwgIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9ICgpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZWN1ZW5jaWEgaW5pY2lhbCBkZSBzY3JvbGwgcGFyYSBjdWFuZG8gZWwgQXBwcm92YWxCb3ggYWNhYmEgZGUgcmVuZGVyaXphcnNlXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHNjcm9sbFRvQm90dG9tKClcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgc2V0VGltZW91dChzY3JvbGxUb0JvdHRvbSwgMTAwKVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNpIGVsIHVzdWFyaW8gZXN0w6Egc2Nyb2xsZWFuZG8gbWFudWFsbWVudGUsIG5vIGhhY2VyIGF1dG8gc2Nyb2xsXG4gICAgaWYgKHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCAmJiB3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHJldHVyblxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cblxuICAgIGNvbnN0IGlzTmV3QW5zd2VyTWVzc2FnZSA9IGxhc3RNZXNzYWdlICYmIGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKVxuICAgIGNvbnN0IGlzTmV3VXNlck1lc3NhZ2UgPSBsYXN0TWVzc2FnZSAmJiBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKVxuICAgIGNvbnN0IGlzTmV3QXBwcm92YWxNZXNzYWdlID0gbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNNZXNzYWdlcyA9ICEhbWVzc2FnZXMubGVuZ3RoXG4gICAgY29uc3QgaXNOb3RJbml0aWFsTWVzc2FnZSA9ICFtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG5cbiAgICBpZiAoKGlzTmV3QW5zd2VyTWVzc2FnZSB8fCBpc05ld1VzZXJNZXNzYWdlIHx8IGlzTmV3QXBwcm92YWxNZXNzYWdlKSAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICAvLyBQYXJhIG1lbnNhamVzIGRlIGFwcm9iYWNpw7NuLCB1c2FyIHVuIHBlcXVlw7FvIGRlbGF5IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIEFwcHJvdmFsQm94IHNlIGhheWEgcmVuZGVyaXphZG9cbiAgICAgIGNvbnN0IHNjcm9sbERlbGF5ID0gaXNOZXdBcHByb3ZhbE1lc3NhZ2UgPyAxMDAgOiAwXG4gICAgICBjb25zdCBkb1Njcm9sbCA9ICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsRGVsYXkgPiAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZG9TY3JvbGwsIHNjcm9sbERlbGF5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9TY3JvbGwoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBoYXNNZXNzYWdlcyAmJlxuICAgICAgaXNOb3RJbml0aWFsTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3QW5zd2VyTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3VXNlck1lc3NhZ2UgJiZcbiAgICAgICFpc05ld0FwcHJvdmFsTWVzc2FnZVxuICAgICkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCB3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIC8vIFZlcmlmaWNhciBlbCBlc3RhZG8gaW5pY2lhbCBkZWwgc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXJcbiAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoXSlcblxuICAvLyBPYnRlbmVyIGVsIMO6bHRpbW8gbWVuc2FqZSBkZWwgdXN1YXJpbyBwYXJhIHZlcmlmaWNhciBzaSB0aWVuZSBhdHRhY2htZW50c1xuICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAuYXQoLTEpXG5cbiAgY29uc3QgaGFzQXR0YWNobWVudHMgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpICYmIGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGgpIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSAmJiBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGgpXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYWdlbnQ/Lm5hbWUgfHwgJycpXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBjb25zdCBsYXN0TXNnID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgY29uc3QgaXNTdHJlYW1pbmdBY3RpdmUgPVxuICAgICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKSAmJlxuICAgIGxhc3RNc2cgJiZcbiAgICAobGFzdE1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IGxhc3RNc2cudXNlcj8uaWQgPT09ICdhc3Npc3RhbnQnKVxuICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gaXNTdHJlYW1pbmdBY3RpdmUgPyAobGFzdE1zZy5tZXNzYWdlID8/ICcnKSA6ICcnXG5cbiAgaWYgKGxvYWRpbmdNZXNzYWdlcykge1xuICAgIHJldHVybiA8TG9hZGVyIC8+XG4gIH1cblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8U3RyZWFtaW5nTWVzc2FnZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0cmVhbWluZ1RleHR9PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9XG4gICAgICAgICAgICBtZXNzYWdlPy53YXNIZWxwZnVsID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZS53YXNIZWxwZnVsID09PSBudWxsXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IG1lc3NhZ2Uud2FzSGVscGZ1bFxuICAgICAgICAgICAgICAgID8gRmVlZGJhY2suVEhVTUJTX1VQXG4gICAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gS2V5IGVzdGFibGU6IHNvbG8gbWVzc2FnZS5pZCBwYXJhIGV2aXRhciByZW1vdW50IGR1cmFudGUgc3RyZWFtaW5nIChtZXNzYWdlLmRhdGUgcHVlZGUgY2FtYmlhcilcbiAgICAgICAgICBjb25zdCBtZXNzYWdlS2V5ID0gbWVzc2FnZS5pZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG4gICAgICAgICAgaWYgKGlzU3RyZWFtaW5nKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtaW5nTWVzc2FnZUlkUmVmLmN1cnJlbnQgIT09IG1lc3NhZ2UuaWQpIHtcbiAgICAgICAgICAgICAgc3RyZWFtaW5nTWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlLmlkID8/IG51bGxcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICBzdHJlYW1pbmdNZXNzYWdlUHJvcHNSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIHsgbWVzc2FnZTogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYXV0aFVzZXIsXG4gICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjayxcbiAgICAgICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb246ICEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXSxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjazogbWVzc2FnZUZlZWRiYWNrLFxuICAgICAgICAgICAgICAgICAgaXNTdHJlYW1pbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gPE1lc3NhZ2VJdGVtIGtleT17bWVzc2FnZUtleX0gey4uLihzdHJlYW1pbmdNZXNzYWdlUHJvcHNSZWYuY3VycmVudCBhcyBNZXNzYWdlSXRlbVByb3BzKX0gLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgc3RyZWFtaW5nTWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgICAga2V5PXttZXNzYWdlS2V5fVxuICAgICAgICAgICAgICBhdXRoVXNlcj17YXV0aFVzZXJ9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb249e2hhbmRsZUFwcHJvdmFsRGVjaXNpb259XG4gICAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtmYWxzZX1cbiAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC9TdHJlYW1pbmdNZXNzYWdlQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIHsod2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlIHx8IE9iamVjdC5rZXlzKGFjdGl2ZUxvYWRpbmdzIHx8IHt9KS5sZW5ndGggPiAwKSAmJiAoXG4gICAgICAgIDxTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgICB7T2JqZWN0LmtleXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICA8TG9hZGluZ1RleHRcbiAgICAgICAgICAgICAga2V5PVwibG9hZGluZy1hY3RpdmVcIlxuICAgICAgICAgICAgICB0ZXh0PXtcbiAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKGFjdGl2ZUxvYWRpbmdzIHx8IHt9KS5maW5kKG1zZyA9PiBtc2cgIT09IHQoJ2NoYXQucHJvY2Vzc2luZycpKSB8fCB0KCdjaGF0LnByb2Nlc3NpbmcnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAod2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlKSAmJiAoXG4gICAgICAgICAgICAgIDxMb2FkaW5nVGV4dFxuICAgICAgICAgICAgICAgIHRleHQ9e1xuICAgICAgICAgICAgICAgICAgbG9hZGluZ01lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgIChpc1dlYlNlYXJjaEFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICA/ICdCdXNjYW5kbyBlbiBsYSB3ZWInXG4gICAgICAgICAgICAgICAgICAgIDogaXNEZWVwU2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgPyB0KCdjaGF0LmdlbmVyYXRpbmdEZWVwU2VhcmNoJylcbiAgICAgICAgICAgICAgICAgICAgICA6IGhhc0F0dGFjaG1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2NoYXQuZ2VuZXJhdGluZ0F0dGFjaG1lbnQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0KCdjaGF0LmdlbmVyYXRpbmcnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VzT3V0ZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fT5cbiAgICAgIHtpc1Njcm9sbE9uUGFyZW50ID8gKFxuICAgICAgICA8U0NNZXNzYWdlc1Njcm9sbCByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fSAkaXNNYXJrZXRwbGFjZUdsb2JhbD17aXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50fT5cbiAgICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01lc3NhZ2VzSW5uZXJcbiAgICAgICAgICByZWY9e21lc3NhZ2VzUmVmfVxuICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX1cbiAgICAgICAgICAkc2Nyb2xsT25QYXJlbnQ9e2ZhbHNlfVxuICAgICAgICAgICRpc01hcmtldHBsYWNlR2xvYmFsPXtpc01hcmtldHBsYWNlR2xvYmFsQWdlbnR9XG4gICAgICAgID5cbiAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93U2Nyb2xsVG9Cb3R0b20gJiYgKFxuICAgICAgICA8U2Nyb2xsVG9Cb3R0b21CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxBcnJvd1NtYWxsRG93biBjb2xvcj1cIiM2NjZcIiB3aWR0aD1cIjIwcHhcIiBoZWlnaHQ9XCIyMHB4XCIgLz5cbiAgICAgICAgPC9TY3JvbGxUb0JvdHRvbUJ1dHRvbj5cbiAgICAgICl9XG4gICAgPC9TQ01lc3NhZ2VzT3V0ZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLEtBQUssSUFBUUMsSUFBSSxFQUFhQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBQUMsYUFBQSxJQUFBQyxjQUFBLFFBQVEsT0FBTztBQUM3RyxTQUFTQyxVQUFVLFFBQVEsWUFBWTtBQUN2QyxTQUFTQyxnQkFBZ0IsUUFBUSxrQkFBa0I7QUFDbkQsU0FBU0MsY0FBYyxRQUFRLGlEQUFpRDtBQUVoRixTQUFTQyxjQUFjLFFBQVEsMkNBQTJDO0FBQzFFLFNBQVNDLFdBQVcsUUFBUSxxQ0FBcUM7QUFDakUsU0FBU0Msc0JBQXNCLFFBQVEsb0NBQW9DO0FBQzNFLFNBQVNDLG1CQUFtQixRQUFRLGdEQUFnRDtBQUVwRixTQUFzQkMsZUFBZSxRQUFrQixxQkFBcUI7QUFFNUUsU0FBa0JDLE9BQU8sUUFBUSwyQkFBMkI7QUFFNUQsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyxjQUFjLFFBQVEsOENBQThDO0FBQzdFLFNBQVNDLFlBQVksUUFBUSw2QkFBNkI7QUFFMUQsU0FBU0MsV0FBVyxRQUFRLHlCQUF5QjtBQUNyRCxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBSTNDLFNBQVNDLGVBQWUsRUFBRUMsZ0JBQWdCLEVBQUVDLHNCQUFzQixFQUFFQyx1QkFBdUIsUUFBUSxVQUFVO0FBQzdHLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FDRUMsbUJBQW1CLEVBQ25CQyxvQkFBb0IsRUFDcEJDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxlQUFlLEVBQ2ZDLHVCQUF1QixFQUN2QkMsYUFB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