@projectcor/maia-components 2.11.26-8 → 2.11.26-9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +49 -11
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +46 -47
  3. package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
  4. package/lib/components/atoms/icons/index.js +1 -3
  5. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +3 -16
  6. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +44 -54
  7. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +2 -2
  8. package/lib/components/molecules/ChatAIHome/styles.js +35 -43
  9. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +39 -55
  10. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +71 -199
  11. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +15 -28
  12. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +23 -82
  13. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +12 -19
  14. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +7 -7
  15. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +5 -5
  16. package/lib/components/molecules/Sidebar/Sidebar.js +322 -257
  17. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +23 -18
  18. package/lib/components/molecules/Sidebar/Sidebar.styles.js +37 -54
  19. package/lib/dev/Providers.js +2 -2
  20. package/lib/hooks/useChatManager/useChatManager.js +10 -22
  21. package/lib/hooks/useChats/useChats.js +4 -12
  22. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +7 -10
  23. package/lib/hooks/useProjectSearch.js +4 -11
  24. package/lib/lang/br/index.js +4 -19
  25. package/lib/lang/en/index.js +4 -19
  26. package/lib/lang/es/index.js +4 -19
  27. package/lib/lang/fr/index.js +3 -19
  28. package/lib/mocks/mockChats.js +395 -0
  29. package/lib/mocks/mockedUser.js +169 -0
  30. package/lib/services/maia/Chats/getChatsByUserId.js +8 -14
  31. package/lib/services/maia/Chats/index.js +1 -5
  32. package/lib/services/maia/Orchestrator/orchestrator.js +4 -6
  33. package/lib/services/maia/client.js +9 -44
  34. package/lib/services/query/projectSearchByValueQuery.js +2 -2
  35. package/lib/store/chatsStore.types.js +2 -10
  36. package/lib/store/useChatsStore.js +37 -75
  37. package/lib/types/Chat.js +1 -3
  38. package/lib/types/Project.js +1 -1
  39. package/package.json +1 -1
  40. package/lib/components/atoms/icons/ChatConversation.js +0 -40
  41. package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +0 -33
  42. package/lib/components/molecules/ChatAIMessages/ChatDaySeparator.js +0 -43
  43. package/lib/components/molecules/ChatAIMessages/ChatDaySeparator.styles.js +0 -11
  44. package/lib/components/molecules/ChatAIMessages/chatMessageUtils.js +0 -5
  45. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +0 -13
  46. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +0 -9
  47. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +0 -13
  48. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +0 -3
  49. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +0 -57
  50. package/lib/components/molecules/ChatAIModal/layout.js +0 -35
  51. package/lib/components/molecules/Sidebar/SidebarChats.styles.js +0 -73
  52. package/lib/components/molecules/Sidebar/SidebarChatsSection.js +0 -69
  53. package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +0 -151
  54. package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +0 -238
  55. package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +0 -70
  56. package/lib/components/molecules/Sidebar/sidebarChats.types.js +0 -14
  57. package/lib/dev/fixtures/devUser.js +0 -173
  58. package/lib/dev/fixtures/mockedUser.js +0 -169
  59. package/lib/services/maia/Chats/getChatMessagesV2.js +0 -114
  60. package/lib/services/maia/Chats/getSessionsGroupedV2.js +0 -70
@@ -410,7 +410,7 @@ export var useChatManager = function useChatManager(_ref3) {
410
410
  return m.id !== tempMessageId;
411
411
  }).at(-1);
412
412
  hasApprovalInPreviousMessage = (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approval) != null;
413
- TASK_CREATION_TOOLS = ['create_task', 'create_tasks_batch'];
413
+ TASK_CREATION_TOOLS = ['create_task', 'create_tasks_batch', 'clone_task'];
414
414
  TASK_EDIT_TOOLS = ['edit_task', 'edit_tasks_batch', 'task_assign', 'task_unassign', 'update_task_type', 'update_estimated_hours', 'assign_task_label'];
415
415
  TASK_DELETE_TOOLS = ['delete_task', 'delete_tasks_batch'];
416
416
  pendingActions = (previousMessage === null || previousMessage === void 0 || (_previousMessage$appr = previousMessage.approval) === null || _previousMessage$appr === void 0 ? void 0 : _previousMessage$appr.pending_actions) || [];
@@ -662,7 +662,7 @@ export var useChatManager = function useChatManager(_ref3) {
662
662
  projects = _context3.sent;
663
663
  payloadFaqId = faqId !== null && faqId !== void 0 ? faqId : options.faqId;
664
664
  payloadAgentSuggestionId = agentSuggestionId !== null && agentSuggestionId !== void 0 ? agentSuggestionId : options.agentSuggestionId;
665
- payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
665
+ payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
666
666
  message: finalMessage,
667
667
  history: history,
668
668
  projectId: projectToRequest,
@@ -677,15 +677,11 @@ export var useChatManager = function useChatManager(_ref3) {
677
677
  agentId: currentAgentFromMessages || (agent === null || agent === void 0 ? void 0 : agent.id),
678
678
  isWebSearchActive: isWebSearchActiveRef.current,
679
679
  isDeepSearchActive: isDeepSearchActiveRef.current
680
- }, (project === null || project === void 0 ? void 0 : project.feeId) != null ? {
681
- feeId: Number(project.feeId)
682
- } : {}), client !== null && client !== void 0 && client.id ? _objectSpread({
680
+ }, client !== null && client !== void 0 && client.id ? _objectSpread({
683
681
  clientId: client.id
684
682
  }, client.name ? {
685
683
  clientName: client.name
686
- } : {}) : (project === null || project === void 0 ? void 0 : project.clientId) != null ? {
687
- clientId: Number(project.clientId)
688
- } : project !== null && project !== void 0 && (_project$client = project.client) !== null && _project$client !== void 0 && _project$client.id ? _objectSpread({
684
+ } : {}) : project !== null && project !== void 0 && (_project$client = project.client) !== null && _project$client !== void 0 && _project$client.id ? _objectSpread({
689
685
  clientId: project.client.id
690
686
  }, project.client.name ? {
691
687
  clientName: project.client.name
@@ -723,7 +719,7 @@ export var useChatManager = function useChatManager(_ref3) {
723
719
  role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
724
720
  };
725
721
  });
726
- askMaia(_objectSpread(_objectSpread(_objectSpread({
722
+ askMaia(_objectSpread({
727
723
  message: currentUserQuestion.current,
728
724
  history: history,
729
725
  projectId: option.id,
@@ -738,11 +734,7 @@ export var useChatManager = function useChatManager(_ref3) {
738
734
  agentId: (agent === null || agent === void 0 ? void 0 : agent.id) || '',
739
735
  isWebSearchActive: isWebSearchActiveRef.current,
740
736
  isDeepSearchActive: isDeepSearchActiveRef.current
741
- }, (option === null || option === void 0 ? void 0 : option.feeId) != null ? {
742
- feeId: Number(option.feeId)
743
- } : {}), (option === null || option === void 0 ? void 0 : option.clientId) != null ? {
744
- clientId: Number(option.clientId)
745
- } : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
737
+ }, (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
746
738
  agentEntity: agent.entity
747
739
  } : {}));
748
740
  }
@@ -867,7 +859,7 @@ export var useChatManager = function useChatManager(_ref3) {
867
859
  handleStreamUpdate(content, null, '');
868
860
  },
869
861
  onNode: function onNode(message, currentThreadId) {
870
- var displayMsg = message.includes('create_task') ? message : t('chat.executingAction');
862
+ var displayMsg = message.includes('create_task') || message.includes('clone_task') ? message : t('chat.executingAction');
871
863
  setActiveLoadings(function (prev) {
872
864
  return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, currentThreadId, displayMsg));
873
865
  });
@@ -958,7 +950,7 @@ export var useChatManager = function useChatManager(_ref3) {
958
950
  role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
959
951
  };
960
952
  });
961
- askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
953
+ askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
962
954
  message: userInitialMessage.message,
963
955
  history: history,
964
956
  projectId: (project === null || project === void 0 ? void 0 : project.id) || null,
@@ -973,12 +965,8 @@ export var useChatManager = function useChatManager(_ref3) {
973
965
  agentId: agent === null || agent === void 0 ? void 0 : agent.id,
974
966
  isWebSearchActive: isWebSearchActiveRef.current,
975
967
  isDeepSearchActive: isDeepSearchActiveRef.current
976
- }, (project === null || project === void 0 ? void 0 : project.feeId) != null ? {
977
- feeId: Number(project.feeId)
978
- } : {}), client !== null && client !== void 0 && client.id ? {
968
+ }, client !== null && client !== void 0 && client.id ? {
979
969
  clientId: client.id
980
- } : (project === null || project === void 0 ? void 0 : project.clientId) != null ? {
981
- clientId: Number(project.clientId)
982
970
  } : project !== null && project !== void 0 && (_project$client2 = project.client) !== null && _project$client2 !== void 0 && _project$client2.id ? {
983
971
  clientId: project.client.id
984
972
  } : {}), project !== null && project !== void 0 && project.name ? {
@@ -1034,4 +1022,4 @@ export var useChatManager = function useChatManager(_ref3) {
1034
1022
  isDisabled: waitingResponse || loadingMessages
1035
1023
  };
1036
1024
  };
1037
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZmV0Y2hBZ2VudERldGFpbCIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwiZm9yRWFjaCIsImFjdGlvbiIsIl90eXBlb2YiLCJhcmdzIiwidG9vbF9hcmdzIiwicmVjIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkIiwicmF3IiwidGFza19pZCIsImlkIiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiTnVtYmVyIiwiaXNOYU4iLCJwdXNoIiwibGlzdCIsInRhc2tfaWRzIiwidGlkIiwiZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMiLCJfcmVjJGFnZW50X2lkIiwiZWRpdEFjdGlvbiIsImZpbmQiLCJhIiwidG9Mb3dlckNhc2UiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUiLCJ0b29sTmFtZSIsIl9yZWYiLCJfcmVjJGFnZW50X2lkMiIsImV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCIsInRleHQiLCJsYWJlbGVkIiwibWF0Y2giLCJib2xkIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsInRvU3RyaW5nIiwibmFtZSIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsInRyaW0iLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwidGhyZWFkSWQiLCJjYWxsYmFja3MiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJpc1N0cmVhbUNvbXBsZXRlIiwiaGFuZGxlTGluZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiaSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiX2hhbmRsZUxpbmUiLCJwYXJzZWQiLCJldmVudERhdGEiLCJjb250ZW50Iiwib25Ub2tlbiIsIm1lc3NhZ2UiLCJvbk5vZGUiLCJfZXZlbnREYXRhJGFnZW50X2lkIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImNvbXBsZXRlZEFnZW50SWQiLCJvbkNvbXBsZXRlIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiY2FsbCIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYzIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYzJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJjbGllbnQiLCJzZXRDbGllbnQiLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImxhc3RNc2dXaXRoUHJvamVjdCIsImZpbHRlciIsIm1zZyIsInByb2plY3RJZCIsImF0IiwiX3JlZjQiLCJwcm9qZWN0TmFtZSIsInRoZW4iLCJwcm9qZWN0cyIsImZvdW5kIiwicCIsIl9mb3VuZCRjbGllbnQiLCJjbGllbnROYW1lIiwibGFzdE1zZ1dpdGhDbGllbnQiLCJjbGllbnRJZCIsIl9yZWY1IiwibXNnQ2xpZW50SWQiLCJtc2dDbGllbnROYW1lIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJjb25jYXQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwicm9sZSIsIkFTU0lTVEFOVCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsInRlbXBNZXNzYWdlSWQiLCJoYW5kbGVTdHJlYW1GaW5pc2giLCJfcmVmNiIsIl9jYWxsZWUyIiwiX3ByZXZpb3VzTWVzc2FnZSRhcHByIiwiX2NyZWF0ZUFnZW50Rm9sbG93VXAiLCJfZWRpdEFnZW50Rm9sbG93VXAiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsIlRBU0tfQ1JFQVRJT05fVE9PTFMiLCJUQVNLX0VESVRfVE9PTFMiLCJUQVNLX0RFTEVURV9UT09MUyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImNvbmZpZ3VyZWRBZ2VudElkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsImZyb21TdHJlYW0iLCJmcm9tQXJncyIsInJlc29sdmVkQWdlbnRJZCIsInRhc2tJZHNGcm9tVXJscyIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2IiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiaW5jbHVkZXMiLCJhcHByb3ZhbFN0YXR1cyIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJtYXAiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsIl9vYmplY3RTcHJlYWQiLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjciLCJfY2FsbGVlMyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsIl9wcm9qZWN0JGNsaWVudCIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJoaXN0b3J5IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDMiLCJwbUFpVHlwZWRUZXh0IiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwiaXNGaW5pdGUiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwibWVzc2FnZUlkIiwiYWdlbnROYW1lIiwiZmVlSWQiLCJlbnRpdHkiLCJhZ2VudEVudGl0eSIsIl94OSIsIl94MCIsIl94MSIsIl94MTAiLCJjaGFuZ2VQcm9qZWN0Iiwib3B0aW9uIiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmOCIsIl9jYWxsZWU0IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsIl9jb250ZXh0NCIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gxMSIsIl94MTIiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjkiLCJfY2FsbGVlNSIsInRocmVhZElkcyIsImRlY2lzaW9uIiwiZWRpdGVkQWN0aW9ucyIsIm1lc3NhZ2VXaXRoQXBwcm92YWwiLCJsb2FkaW5nS2V5IiwiZXhpc3RpbmdNZXNzYWdlIiwibmV3U3RhdHVzIiwiX3QiLCJfY29udGV4dDUiLCJfbSRhcHByb3ZhbCIsInRocmVhZF9pZCIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9yY2hlc3RyYXRvciIsImNvbnRpbnVlVGhyZWFkIiwic2Vzc2lvbklkIiwic2Vzc2lvbl9pZCIsIm9rIiwibmV3TG9hZGluZ3MiLCJjdXJyZW50VGhyZWFkSWQiLCJkaXNwbGF5TXNnIiwiYXBwcm92YWxQYXlsb2FkIiwiX3gxMyIsIl94MTQiLCJfeDE1IiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNiIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9wcm9qZWN0JGNsaWVudDIiLCJfcHJvamVjdCRjbGllbnQzIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiX2NvbnRleHQ2IiwiQm9vbGVhbiIsInJlc2V0Q2hhdCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi91c2VUJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBTZW5kTWVzc2FnZU9wdGlvbnMsIFVzZUNoYXRNYW5hZ2VyUHJvcHMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vdXNlRXZlbnQnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlVXNlciwgQ2hhdEhpc3RvcnlSb2xlLCBBcHByb3ZhbFJlcXVlc3QsIFBlbmRpbmdBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IHVzZVByb2plY3RzIH0gZnJvbSAnLi4vdXNlUHJvamVjdHMnXG5pbXBvcnQgeyB1c2VUYWJUYXNrRGVmYXVsdCB9IGZyb20gJy4uL3VzZVRhYlRhc2tEZWZhdWx0J1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuXG50eXBlIEF0dGFjaG1lbnRzT3JPcHRpb25zID0gQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9uc1xuXG5jb25zdCBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MgPSAoYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50c09yT3B0aW9ucykgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShhdHRhY2htZW50c09yT3B0aW9ucykpIHtcbiAgICByZXR1cm4geyBhdHRhY2htZW50czogYXR0YWNobWVudHNPck9wdGlvbnMsIG9wdGlvbnM6IHt9IGFzIFNlbmRNZXNzYWdlT3B0aW9ucyB9XG4gIH1cblxuICBjb25zdCBvcHRpb25zOiBTZW5kTWVzc2FnZU9wdGlvbnMgPSBhdHRhY2htZW50c09yT3B0aW9ucyA/PyB7fVxuICByZXR1cm4geyBhdHRhY2htZW50czogb3B0aW9ucy5hdHRhY2htZW50cyA/PyBbXSwgb3B0aW9ucyB9XG59XG5cbi8qKiB0YXNrX2lkIC8gdGFza19pZHMgZW4gcGVuZGluZ19hY3Rpb25zIGRlIGRlbGV0ZV8qIChsYSByZXNwdWVzdGEgcHVlZGUgbm8gaW5jbHVpciBVUkxzIC90YXNrcy/igKYvZGV0YWlsKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFzaycpIHtcbiAgICAgIGNvbnN0IHJhdyA9IHJlYy50YXNrX2lkID8/IHJlYy5pZFxuICAgICAgaWYgKHJhdyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcocmF3KSwgMTApXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrc19iYXRjaCcpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSByZWMudGFza19pZHNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICAgIGxpc3QuZm9yRWFjaCh0aWQgPT4ge1xuICAgICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcodGlkKSwgMTApXG4gICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9KVxuICByZXR1cm4gaWRzXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZWRpdEFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcbiAgaWYgKFxuICAgICFlZGl0QWN0aW9uIHx8XG4gICAgIWVkaXRBY3Rpb24udG9vbF9hcmdzIHx8XG4gICAgdHlwZW9mIGVkaXRBY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fFxuICAgIEFycmF5LmlzQXJyYXkoZWRpdEFjdGlvbi50b29sX2FyZ3MpXG4gICkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gZWRpdEFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSwgdG9vbE5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBhY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSB0b29sTmFtZS50b0xvd2VyQ2FzZSgpKVxuICBpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLnRvb2xfYXJncyB8fCB0eXBlb2YgYWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShhY3Rpb24udG9vbF9hcmdzKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gYWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWQgPz8gcmVjLmlkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG4vKiogw5psdGltbyByZWN1cnNvIHNpIG5vIGhheSBsaW5rcyBuaSB0b29sX2FyZ3MgcGFyc2VhYmxlcyAocC4gZWouIFwiSUQgKio3NTk3MTA2KipcIikuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQodGV4dDogc3RyaW5nKTogbnVtYmVyW10ge1xuICBjb25zdCBsYWJlbGVkID0gdGV4dC5tYXRjaCgvXFxiSURcXHMqXFwqXFwqKFxcZCspXFwqXFwqL2kpXG4gIGlmIChsYWJlbGVkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGxhYmVsZWRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIGNvbnN0IGJvbGQgPSB0ZXh0Lm1hdGNoKC9cXCpcXCooXFxkezUsfSlcXCpcXCovKVxuICBpZiAoYm9sZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChib2xkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICByZXR1cm4gW11cbn1cblxuY29uc3QgdXNlU3RhYmxlQ2FsbGJhY2tzID0gKGF1dGhVc2VyOiBDT1JVc2VyKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlUmVmPENoYXRNZXNzYWdlVXNlcj4oe1xuICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gIH0pXG5cbiAgaWYgKFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuaWQgIT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50Lm5hbWUgIT09IGF1dGhVc2VyLmZpcnN0TmFtZSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuYXZhdGFyICE9PSBhdXRoVXNlci5waWN0dXJlXG4gICkge1xuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQgPSB7XG4gICAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIuY3VycmVudCxcbiAgfVxufVxuXG5jb25zdCBwYXJzZVNTRUxpbmUgPSAobGluZTogc3RyaW5nKTogeyBldmVudFR5cGU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9IHwgbnVsbCA9PiB7XG4gIGlmICghbGluZS50cmltKCkpIHJldHVybiBudWxsXG5cbiAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcbiAgICByZXR1cm4geyBldmVudFR5cGUsIGRhdGEgfVxuICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBTU0UgZGF0YTonLCBwYXJzZUVycm9yLCBkYXRhU3RyKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuY29uc3QgcHJvY2Vzc1NTRVN0cmVhbSA9IGFzeW5jIChcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICB0aHJlYWRJZDogc3RyaW5nLFxuICBjYWxsYmFja3M6IHtcbiAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Db21wbGV0ZTogKFxuICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICkgPT4gdm9pZFxuICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkPzogKGFwcHJvdmFsOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICB9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGlzU3RyZWFtQ29tcGxldGUgPSBmYWxzZVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxpbmUobGluZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VTU0VMaW5lKGxpbmUpXG4gICAgaWYgKCFwYXJzZWQpIHJldHVyblxuXG4gICAgY29uc3QgeyBldmVudFR5cGUsIGRhdGEgfSA9IHBhcnNlZFxuICAgIGNvbnN0IGV2ZW50RGF0YSA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICAgIGlmIChldmVudFR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBldmVudERhdGEuY29udGVudCBhcyBzdHJpbmdcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCArPSBjb250ZW50XG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdub2RlJykge1xuICAgICAgaWYgKGV2ZW50RGF0YS5tZXNzYWdlICYmIHR5cGVvZiBldmVudERhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2FsbGJhY2tzLm9uTm9kZShldmVudERhdGEubWVzc2FnZSwgdGhyZWFkSWQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChldmVudERhdGEuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgY29uc3Qgc291cmNlcyA9IChldmVudERhdGEuc291cmNlcyBhcyB1bmtub3duKSB8fCBudWxsXG4gICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAoZXZlbnREYXRhLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdF9yZXBseSlcbiAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW10pXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IGV2ZW50RGF0YS5hZ2VudF9pZCA/PyBldmVudERhdGEuYWdlbnRJZFxuICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICBjYWxsYmFja3Mub25Db21wbGV0ZShmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgdGhyZWFkSWQsIHN1Z2dlc3Rpb25zLCBjb21wbGV0ZWRBZ2VudElkKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnYXBwcm92YWxfcmVxdWlyZWQnKSB7XG4gICAgICBjYWxsYmFja3Mub25BcHByb3ZhbFJlcXVpcmVkPy4oZXZlbnREYXRhLCBhY2N1bXVsYXRlZENvbnRlbnQsIHRocmVhZElkKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnZXJyb3InKSB7XG4gICAgICBjYWxsYmFja3Mub25FcnJvcihldmVudERhdGEuZXJyb3IsIHRocmVhZElkKVxuICAgIH1cbiAgfVxuXG4gIHdoaWxlICghaXNTdHJlYW1Db21wbGV0ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgIGlmIChkb25lKSB7XG4gICAgICBpc1N0cmVhbUNvbXBsZXRlID0gdHJ1ZVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGhhbmRsZUxpbmUobGluZXNbaV0pXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3Qge1xuICAgIHByb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgY29uc3QgeyBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIGxvYWRNZXNzYWdlcywgYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgaGFuZGxlU2Nyb2xsIH0gPVxuICAgIHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgICBvbkVycm9yLFxuICAgICAgYWdlbnRzLFxuICAgIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsQ2hhdElkICYmIGluaXRpYWxDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG5cbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuXG4gICAgICBsb2FkTWVzc2FnZXMoKVxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBsb2FkTWVzc2FnZXNdKVxuXG4gIC8vIFNpbmNyb25pemFyIGNoaXBzUHJvamVjdCBjdWFuZG8gaGF5IG1lbnNhamVzIGNvbiBwcm9qZWN0SWQgcGVybyBjaGlwc1Byb2plY3Qgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGlwc1Byb2plY3QgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aFByb2plY3QgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgIGNvbnN0IHsgcHJvamVjdElkLCBwcm9qZWN0TmFtZSB9ID0gbGFzdE1zZ1dpdGhQcm9qZWN0IHx8IHt9XG4gICAgaWYgKCFwcm9qZWN0SWQpIHJldHVyblxuXG4gICAgZmV0Y2hQcm9qZWN0cyhwcm9qZWN0SWQpLnRoZW4ocHJvamVjdHMgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBwcm9qZWN0cz8uZmluZChwID0+IE51bWJlcihwLmlkKSA9PT0gTnVtYmVyKHByb2plY3RJZCkpXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZTogZm91bmQubmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiBmb3VuZC5jbGllbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoZm91bmQuaWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KGZvdW5kKVxuICAgICAgfSBlbHNlIGlmIChwcm9qZWN0TmFtZSkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWU6ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZCksXG4gICAgICAgIH0pXG4gICAgICAgIHNldFByb2plY3QoeyBpZDogTnVtYmVyKHByb2plY3RJZCksIG5hbWU6IHByb2plY3ROYW1lIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSwgW21lc3NhZ2VzLCBjaGlwc1Byb2plY3QsIGxvYWRpbmdNZXNzYWdlcywgZmV0Y2hQcm9qZWN0cywgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0XSlcblxuICAvLyBTaW5jcm9uaXphciBjbGllbnQgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gY2xpZW50SWQgcGVybyBjbGllbnQgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjbGllbnQgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aENsaWVudCA9IG1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLmNsaWVudElkICE9IG51bGwgJiYgbXNnLmNsaWVudE5hbWUpLmF0KC0xKVxuICAgIGNvbnN0IHsgY2xpZW50SWQ6IG1zZ0NsaWVudElkLCBjbGllbnROYW1lOiBtc2dDbGllbnROYW1lIH0gPSBsYXN0TXNnV2l0aENsaWVudCB8fCB7fVxuICAgIGlmIChtc2dDbGllbnRJZCA9PSBudWxsIHx8ICFtc2dDbGllbnROYW1lKSByZXR1cm5cblxuICAgIHNldENsaWVudD8uKHsgaWQ6IE51bWJlcihtc2dDbGllbnRJZCksIG5hbWU6IG1zZ0NsaWVudE5hbWUgfSlcbiAgfSwgW21lc3NhZ2VzLCBjbGllbnQsIGxvYWRpbmdNZXNzYWdlcywgc2V0Q2xpZW50XSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1FcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIChlcnJvck1lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IHRlbXBNZXNzYWdlSWQsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnQsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBzb3VyY2VzLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnXVxuICAgICAgY29uc3QgVEFTS19FRElUX1RPT0xTID0gW1xuICAgICAgICAnZWRpdF90YXNrJyxcbiAgICAgICAgJ2VkaXRfdGFza3NfYmF0Y2gnLFxuICAgICAgICAndGFza19hc3NpZ24nLFxuICAgICAgICAndGFza191bmFzc2lnbicsXG4gICAgICAgICd1cGRhdGVfdGFza190eXBlJyxcbiAgICAgICAgJ3VwZGF0ZV9lc3RpbWF0ZWRfaG91cnMnLFxuICAgICAgICAnYXNzaWduX3Rhc2tfbGFiZWwnLFxuICAgICAgXVxuICAgICAgY29uc3QgVEFTS19ERUxFVEVfVE9PTFMgPSBbJ2RlbGV0ZV90YXNrJywgJ2RlbGV0ZV90YXNrc19iYXRjaCddXG4gICAgICBjb25zdCBwZW5kaW5nQWN0aW9ucyA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucyB8fCBbXVxuICAgICAgY29uc3Qgd2FzVGFza0NyZWF0aW9uID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19DUkVBVElPTl9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tFZGl0ID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJiBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19FRElUX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0RlbGV0ZSA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2NyZWF0ZV9hZ2VudCcpXG4gICAgICBjb25zdCB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiAoYWN0aW9uLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKVxuICAgICAgbGV0IGNyZWF0ZUFnZW50Rm9sbG93VXA6IHsgYWdlbnRJZDogc3RyaW5nIH0gfCB1bmRlZmluZWRcbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkICYmIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSkge1xuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwID0geyBhZ2VudElkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkICYmXG4gICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmXG4gICAgICAgIChjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgfHxcbiAgICAgICAgICBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnMsICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJykpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY29uZmlndXJlZEFnZW50SWQgPVxuICAgICAgICAgIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKVxuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwID0ge1xuICAgICAgICAgIGFnZW50SWQ6IGNvbmZpZ3VyZWRBZ2VudElkIGFzIHN0cmluZyxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMgfHwgW10sXG4gICAgICAgIC4uLihjcmVhdGVBZ2VudEZvbGxvd1VwID8geyBjcmVhdGVBZ2VudEZvbGxvd1VwIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpZiAoY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGNyZWF0ZUFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyBhw7FhZGlyIGVsIGFnZW50ZSByZWNpw6luIGNyZWFkbyBhbCBsaXN0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChlZGl0QWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGVkaXRBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIHJlZnJlc2NhciBlbCBhZ2VudGUgZWRpdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAoZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCBwcm9qZWN0LCBnZXRUYWJUYXNrRGVmYXVsdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYWRkTWVzc2FnZSh7XG4gICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tY2FuY2VsbGVkYCxcbiAgICAgIG1lc3NhZ2U6IHQoJ2NoYXQuY2FuY2VsbGVkJyksXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogdHJ1ZSxcbiAgICB9KVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICB9LCA1MDApXG4gIH0sIFthZGRNZXNzYWdlLCB0XSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICAvLyBBZGQgYSBtZXNzYWdlIHdpdGggdGhlIGFwcHJvdmFsIHJlcXVlc3RcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBhcHByb3ZhbFN0YXR1czogJ3BlbmRpbmcnLFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlXVxuICApXG5cbiAgY29uc3Qge1xuICAgIGFza01haWEsXG4gICAgaXNMb2FkaW5nOiB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gIH0gPSB1c2VPcmNoZXN0cmF0b3JTdHJlYW0oe1xuICAgIG9uRXJyb3I6IGhhbmRsZVN0cmVhbUVycm9yLFxuICAgIG9uU3RyZWFtVXBkYXRlOiBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgb25GaW5pc2hTdHJlYW06IGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICBvblN0b3A6IGhhbmRsZVN0cmVhbVN0b3AsXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkOiBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICB9KVxuXG4gIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdFxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50IHx8IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQ/LlttZXNzYWdlc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdPy5hZ2VudElkXG5cbiAgICAgIC8vIE5vIGFncmVnYXIgcHJvamVjdElkIGFsIG1lbnNhamUgZGVsIHVzdWFyaW8gLSBzZSBkZXRlcm1pbmFyw6EgZGVzcHXDqXNcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYHF1ZXN0aW9uLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuVVNFUixcbiAgICAgICAgc291cmNlczogYXR0YWNobWVudHMsXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgbGV0IGZpbmFsTWVzc2FnZSA9IG1lc3NhZ2VcblxuICAgICAgaWYgKG1lc3NhZ2UgPT09IHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpKSB7XG4gICAgICAgIGZpbmFsTWVzc2FnZSA9IGBGQVE6ICR7dCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJyl9IC0gVGlwbyBkZSByZW50YWJpbGlkYWQ6ICR7XG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0Q2hhbmdlZD8uaW5jb21lVHlwZSB8fCBwcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICAgIH1gXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIC8vIFZlcmlmaWNhciBjb25zaXN0ZW5jaWEgZW50cmUgY29udGV4dG8gZ2xvYmFsIHkgw7psdGltbyBtZW5zYWplXG4gICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gcHJvamVjdD8uaWRcbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG5cbiAgICAgIGxldCBwcm9qZWN0VG9SZXF1ZXN0OiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gICAgICAvLyBTaSBoYXkgw7psdGltbyBtZW5zYWplIGNvbiBwcm9qZWN0SWQsIHVzYXJsbyAobcOhcyBjb25maWFibGUpXG4gICAgICBpZiAobGFzdE1lc3NhZ2VQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbiAgICAgIH1cbiAgICAgIC8vIFNpIG5vIGhheSDDumx0aW1vIG1lbnNhamUsIHVzYXIgZWwgY29udGV4dG8gZ2xvYmFsXG4gICAgICBlbHNlIGlmIChjb250ZXh0UHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IGNvbnRleHRQcm9qZWN0SWRcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZEZhcUlkID0gZmFxSWQgPz8gb3B0aW9ucy5mYXFJZFxuICAgICAgY29uc3QgcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID0gYWdlbnRTdWdnZXN0aW9uSWQgPz8gb3B0aW9ucy5hZ2VudFN1Z2dlc3Rpb25JZFxuXG4gICAgICBjb25zdCBwYXlsb2FkRGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZTogZmluYWxNZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4ocHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihwcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi4oY2xpZW50Py5pZFxuICAgICAgICAgID8geyBjbGllbnRJZDogY2xpZW50LmlkLCAuLi4oY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDogcHJvamVjdD8uY2xpZW50SWQgIT0gbnVsbFxuICAgICAgICAgICAgPyB7IGNsaWVudElkOiBOdW1iZXIocHJvamVjdC5jbGllbnRJZCkgfVxuICAgICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICAgID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQsIC4uLihwcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZhcUlkID8geyBmYXFJZDogcGF5bG9hZEZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChvcHRpb24uaWQgIT09IHByb2plY3Q/LmlkKSB7XG4gICAgICAgIHNldFByb2plY3Qob3B0aW9uKVxuICAgICAgfVxuXG4gICAgICBpZiAocHJvamVjdCAmJiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KSlcblxuICAgICAgICBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKG9wdGlvbi5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5jbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZDogTnVtYmVyKG9wdGlvbi5jbGllbnRJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlLCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZlZWRiYWNrUHJvcDogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5DaGF0cy53YXNIZWxwZnVsQ2hhdChjaGF0TWVzc2FnZUlkLCBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUClcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IGNoYXRNZXNzYWdlSWQgJiYgbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIHdhc0hlbHBmdWw6IGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICAgICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgICAgZWRpdGVkQWN0aW9ucz86IEFycmF5PHsgdG9vbF9uYW1lOiBzdHJpbmc7IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+XG4gICAgKSA9PiB7XG4gICAgICBpZiAoIXRocmVhZElkcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHRocmVhZF9pZHMgcHJvdmlkZWQgZm9yIGFwcHJvdmFsIGRlY2lzaW9uJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEJ1c2NhciBlbCBtZW5zYWplIHF1ZSBjb250aWVuZSBhbGd1bm8gZGUgZXN0b3MgdGhyZWFkSWRzIGVuIHN1cyBwZW5kaW5nX2FjdGlvbnNcbiAgICAgIGNvbnN0IG1lc3NhZ2VXaXRoQXBwcm92YWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PlxuICAgICAgICBtLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgICAgIClcblxuICAgICAgaWYgKCFtZXNzYWdlV2l0aEFwcHJvdmFsIHx8ICFtZXNzYWdlV2l0aEFwcHJvdmFsLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuICAgICAgLy8gVXNlIGZpcnN0IHRocmVhZElkIGFzIHRoZSBsb2FkaW5nIGtleVxuICAgICAgY29uc3QgbG9hZGluZ0tleSA9IHRocmVhZElkc1swXVxuICAgICAgLy8gVXBkYXRlIG1lc3NhZ2Ugc3RhdHVzIGltbWVkaWF0ZWx5XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBtZXNzYWdlSWQpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcblxuICAgICAgLy8gVHJpZ2dlciByZS1yZW5kZXJcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+IG0uaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgIGlmIChleGlzdGluZ01lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgIGFkZE1lc3NhZ2UoeyAuLi5leGlzdGluZ01lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsbCBjb250aW51ZS10aHJlYWQgZW5kcG9pbnQgd2l0aCBBTEwgdGhyZWFkX2lkcyBpbiBhIHNpbmdsZSByZXF1ZXN0XG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIC8vIEFkZCBsb2FkaW5nXG4gICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtsb2FkaW5nS2V5XTogdCgnY2hhdC5wcm9jZXNzaW5nJyksXG4gICAgICB9KSlcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZCh7XG4gICAgICAgICAgdGhyZWFkSWRzLCAvLyBTZW5kIGFsbCBhY3Rpb24gdGhyZWFkX2lkcyBhdCBvbmNlXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2xvYWRpbmdLZXldXG4gICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBTU0Ugc3RyZWFtXG4gICAgICAgIGF3YWl0IHByb2Nlc3NTU0VTdHJlYW0ocmVzcG9uc2UsIGxvYWRpbmdLZXksIHtcbiAgICAgICAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1VcGRhdGUoY29udGVudCwgbnVsbCwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5TXNnID0gbWVzc2FnZS5pbmNsdWRlcygnY3JlYXRlX3Rhc2snKSA/IG1lc3NhZ2UgOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50VGhyZWFkSWRdOiBkaXNwbGF5TXNnLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoXG4gICAgICAgICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgICAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICAgICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgICAgICAgIGFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1GaW5pc2goZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHN1Z2dlc3Rpb25zLCBhZ2VudElkKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gTmV3IEhJVEwgaW50ZXJydXB0aW9uIGRldGVjdGVkIGFmdGVyIHJlc3VtZSAoY2hhaW5lZCBhY3Rpb25zKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZChhcHByb3ZhbFBheWxvYWQgYXMgQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2xvYWRpbmdLZXldXG4gICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbYXV0aFVzZXIsIGFnZW50LCBhZGRNZXNzYWdlLCBoYW5kbGVTdHJlYW1FcnJvciwgaGFuZGxlU3RyZWFtVXBkYXRlLCBoYW5kbGVTdHJlYW1GaW5pc2gsIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZT8udHJpbSgpKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGYXEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBhc2tNYWlhKHtcbiAgICAgICAgbWVzc2FnZTogdXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQgfHwgbnVsbCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lISxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKHByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLihjbGllbnQ/LmlkXG4gICAgICAgICAgPyB7IGNsaWVudElkOiBjbGllbnQuaWQgfVxuICAgICAgICAgIDogcHJvamVjdD8uY2xpZW50SWQgIT0gbnVsbFxuICAgICAgICAgICAgPyB7IGNsaWVudElkOiBOdW1iZXIocHJvamVjdC5jbGllbnRJZCkgfVxuICAgICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICAgID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQgfVxuICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/Lm5hbWUgPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/LmNsaWVudD8ubmFtZVxuICAgICAgICAgID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH1cbiAgICAgICAgICA6IGNsaWVudD8ubmFtZVxuICAgICAgICAgICAgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW1xuICAgIGluaXRpYWxDaGF0SWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFDbkMsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFHOUIsU0FBU0MsT0FBTyxRQUFpQix3QkFBd0I7QUFDekQsU0FBU0MsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQy9ELFNBQVNDLE1BQU0s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
1025
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZmV0Y2hBZ2VudERldGFpbCIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwiZm9yRWFjaCIsImFjdGlvbiIsIl90eXBlb2YiLCJhcmdzIiwidG9vbF9hcmdzIiwicmVjIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkIiwicmF3IiwidGFza19pZCIsImlkIiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiTnVtYmVyIiwiaXNOYU4iLCJwdXNoIiwibGlzdCIsInRhc2tfaWRzIiwidGlkIiwiZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMiLCJfcmVjJGFnZW50X2lkIiwiZWRpdEFjdGlvbiIsImZpbmQiLCJhIiwidG9Mb3dlckNhc2UiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUiLCJ0b29sTmFtZSIsIl9yZWYiLCJfcmVjJGFnZW50X2lkMiIsImV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCIsInRleHQiLCJsYWJlbGVkIiwibWF0Y2giLCJib2xkIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsInRvU3RyaW5nIiwibmFtZSIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsInRyaW0iLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwidGhyZWFkSWQiLCJjYWxsYmFja3MiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJpc1N0cmVhbUNvbXBsZXRlIiwiaGFuZGxlTGluZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiaSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiX2hhbmRsZUxpbmUiLCJwYXJzZWQiLCJldmVudERhdGEiLCJjb250ZW50Iiwib25Ub2tlbiIsIm1lc3NhZ2UiLCJvbk5vZGUiLCJfZXZlbnREYXRhJGFnZW50X2lkIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImNvbXBsZXRlZEFnZW50SWQiLCJvbkNvbXBsZXRlIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiY2FsbCIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYzIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYzJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJjbGllbnQiLCJzZXRDbGllbnQiLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImxhc3RNc2dXaXRoUHJvamVjdCIsImZpbHRlciIsIm1zZyIsInByb2plY3RJZCIsImF0IiwiX3JlZjQiLCJwcm9qZWN0TmFtZSIsInRoZW4iLCJwcm9qZWN0cyIsImZvdW5kIiwicCIsIl9mb3VuZCRjbGllbnQiLCJjbGllbnROYW1lIiwibGFzdE1zZ1dpdGhDbGllbnQiLCJjbGllbnRJZCIsIl9yZWY1IiwibXNnQ2xpZW50SWQiLCJtc2dDbGllbnROYW1lIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJjb25jYXQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwicm9sZSIsIkFTU0lTVEFOVCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsInRlbXBNZXNzYWdlSWQiLCJoYW5kbGVTdHJlYW1GaW5pc2giLCJfcmVmNiIsIl9jYWxsZWUyIiwiX3ByZXZpb3VzTWVzc2FnZSRhcHByIiwiX2NyZWF0ZUFnZW50Rm9sbG93VXAiLCJfZWRpdEFnZW50Rm9sbG93VXAiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsIlRBU0tfQ1JFQVRJT05fVE9PTFMiLCJUQVNLX0VESVRfVE9PTFMiLCJUQVNLX0RFTEVURV9UT09MUyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImNvbmZpZ3VyZWRBZ2VudElkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsImZyb21TdHJlYW0iLCJmcm9tQXJncyIsInJlc29sdmVkQWdlbnRJZCIsInRhc2tJZHNGcm9tVXJscyIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2IiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiaW5jbHVkZXMiLCJhcHByb3ZhbFN0YXR1cyIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJtYXAiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsIl9vYmplY3RTcHJlYWQiLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjciLCJfY2FsbGVlMyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsIl9wcm9qZWN0JGNsaWVudCIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJoaXN0b3J5IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDMiLCJwbUFpVHlwZWRUZXh0IiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwiaXNGaW5pdGUiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwibWVzc2FnZUlkIiwiYWdlbnROYW1lIiwiZW50aXR5IiwiYWdlbnRFbnRpdHkiLCJfeDkiLCJfeDAiLCJfeDEiLCJfeDEwIiwiY2hhbmdlUHJvamVjdCIsIm9wdGlvbiIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjgiLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MTEiLCJfeDEyIiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsIl9yZWY5IiwiX2NhbGxlZTUiLCJ0aHJlYWRJZHMiLCJkZWNpc2lvbiIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwibG9hZGluZ0tleSIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsIl90IiwiX2NvbnRleHQ1IiwiX20kYXBwcm92YWwiLCJ0aHJlYWRfaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25JZCIsInNlc3Npb25faWQiLCJvayIsIm5ld0xvYWRpbmdzIiwiY3VycmVudFRocmVhZElkIiwiZGlzcGxheU1zZyIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTMiLCJfeDE0IiwiX3gxNSIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTYiLCJfdXNlckluaXRpYWxNZXNzYWdlJG0iLCJfdXNlckluaXRpYWxNZXNzYWdlJGEiLCJfcHJvamVjdCRjbGllbnQyIiwiX3Byb2plY3QkY2xpZW50MyIsImhhc0luaXRpYWxNZXNzYWdlIiwiaGFzSW5pdGlhbEF0dGFjaG1lbnRzIiwiaGFzSW5pdGlhbEZhcSIsIl9jb250ZXh0NiIsIkJvb2xlYW4iLCJyZXNldENoYXQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0LCBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcblxudHlwZSBBdHRhY2htZW50c09yT3B0aW9ucyA9IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnNcblxuY29uc3Qgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzID0gKGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudHNPck9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHsgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzT3JPcHRpb25zLCBvcHRpb25zOiB7fSBhcyBTZW5kTWVzc2FnZU9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zID0gYXR0YWNobWVudHNPck9wdGlvbnMgPz8ge31cbiAgcmV0dXJuIHsgYXR0YWNobWVudHM6IG9wdGlvbnMuYXR0YWNobWVudHMgPz8gW10sIG9wdGlvbnMgfVxufVxuXG4vKiogdGFza19pZCAvIHRhc2tfaWRzIGVuIHBlbmRpbmdfYWN0aW9ucyBkZSBkZWxldGVfKiAobGEgcmVzcHVlc3RhIHB1ZWRlIG5vIGluY2x1aXIgVVJMcyAvdGFza3Mv4oCmL2RldGFpbCkuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2snKSB7XG4gICAgICBjb25zdCByYXcgPSByZWMudGFza19pZCA/PyByZWMuaWRcbiAgICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFza3NfYmF0Y2gnKSB7XG4gICAgICBjb25zdCBsaXN0ID0gcmVjLnRhc2tfaWRzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICBsaXN0LmZvckVhY2godGlkID0+IHtcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHRpZCksIDEwKVxuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGVkaXRBY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG4gIGlmIChcbiAgICAhZWRpdEFjdGlvbiB8fFxuICAgICFlZGl0QWN0aW9uLnRvb2xfYXJncyB8fFxuICAgIHR5cGVvZiBlZGl0QWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KGVkaXRBY3Rpb24udG9vbF9hcmdzKVxuICApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGVkaXRBY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sIHRvb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuLyoqIMOabHRpbW8gcmVjdXJzbyBzaSBubyBoYXkgbGlua3MgbmkgdG9vbF9hcmdzIHBhcnNlYWJsZXMgKHAuIGVqLiBcIklEICoqNzU5NzEwNioqXCIpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgbGFiZWxlZCA9IHRleHQubWF0Y2goL1xcYklEXFxzKlxcKlxcKihcXGQrKVxcKlxcKi9pKVxuICBpZiAobGFiZWxlZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChsYWJlbGVkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICBjb25zdCBib2xkID0gdGV4dC5tYXRjaCgvXFwqXFwqKFxcZHs1LH0pXFwqXFwqLylcbiAgaWYgKGJvbGQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQoYm9sZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQ29tcGxldGU6IChcbiAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZD86IChhcHByb3ZhbDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBpc1N0cmVhbUNvbXBsZXRlID0gZmFsc2VcblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gY29udGVudFxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoZXZlbnREYXRhLm1lc3NhZ2UsIHRocmVhZElkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAoZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSAoZXZlbnREYXRhLnNvdXJjZXMgYXMgdW5rbm93bikgfHwgbnVsbFxuICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkpXG4gICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3Rpb25zKVxuICAgICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IGFnZW50SWRSYXcgPSBldmVudERhdGEuYWdlbnRfaWQgPz8gZXZlbnREYXRhLmFnZW50SWRcbiAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPSBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkLCBzdWdnZXN0aW9ucywgY29tcGxldGVkQWdlbnRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcHJvdmFsX3JlcXVpcmVkJykge1xuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcblxuICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgbG9hZE1lc3NhZ2VzXSlcblxuICAvLyBTaW5jcm9uaXphciBjaGlwc1Byb2plY3QgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gcHJvamVjdElkIHBlcm8gY2hpcHNQcm9qZWN0IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2hpcHNQcm9qZWN0IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhQcm9qZWN0ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCB7IHByb2plY3RJZCwgcHJvamVjdE5hbWUgfSA9IGxhc3RNc2dXaXRoUHJvamVjdCB8fCB7fVxuICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cblxuICAgIGZldGNoUHJvamVjdHMocHJvamVjdElkKS50aGVuKHByb2plY3RzID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IE51bWJlcihwcm9qZWN0SWQpKVxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihwcm9qZWN0SWQpLCBuYW1lOiBwcm9qZWN0TmFtZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFttZXNzYWdlcywgY2hpcHNQcm9qZWN0LCBsb2FkaW5nTWVzc2FnZXMsIGZldGNoUHJvamVjdHMsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdF0pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2xpZW50IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIGNsaWVudElkIHBlcm8gY2xpZW50IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xpZW50IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhDbGllbnQgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5jbGllbnRJZCAhPSBudWxsICYmIG1zZy5jbGllbnROYW1lKS5hdCgtMSlcbiAgICBjb25zdCB7IGNsaWVudElkOiBtc2dDbGllbnRJZCwgY2xpZW50TmFtZTogbXNnQ2xpZW50TmFtZSB9ID0gbGFzdE1zZ1dpdGhDbGllbnQgfHwge31cbiAgICBpZiAobXNnQ2xpZW50SWQgPT0gbnVsbCB8fCAhbXNnQ2xpZW50TmFtZSkgcmV0dXJuXG5cbiAgICBzZXRDbGllbnQ/Lih7IGlkOiBOdW1iZXIobXNnQ2xpZW50SWQpLCBuYW1lOiBtc2dDbGllbnROYW1lIH0pXG4gIH0sIFttZXNzYWdlcywgY2xpZW50LCBsb2FkaW5nTWVzc2FnZXMsIHNldENsaWVudF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgICAgOiB0KCdjaGF0LmVycm9yJylcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlOiBjb250ZW50LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICAvLyBEZXRlY3RhciB0b2RhcyBsYXMgVVJMcyBkZSB0YXJlYXMgKC4uLi90YXNrcy8xMjMvZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycylcbiAgICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5jb250ZW50Lm1hdGNoQWxsKHRhc2tVcmxSZWdleCldXG5cbiAgICAgIGxldCBjb250ZW50VG9BZGQgPSBjb250ZW50XG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtID0+IG0uaWQgIT09IHRlbXBNZXNzYWdlSWQpLmF0KC0xKVxuICAgICAgY29uc3QgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWwgIT0gbnVsbFxuICAgICAgY29uc3QgVEFTS19DUkVBVElPTl9UT09MUyA9IFsnY3JlYXRlX3Rhc2snLCAnY3JlYXRlX3Rhc2tzX2JhdGNoJywgJ2Nsb25lX3Rhc2snXVxuICAgICAgY29uc3QgVEFTS19FRElUX1RPT0xTID0gW1xuICAgICAgICAnZWRpdF90YXNrJyxcbiAgICAgICAgJ2VkaXRfdGFza3NfYmF0Y2gnLFxuICAgICAgICAndGFza19hc3NpZ24nLFxuICAgICAgICAndGFza191bmFzc2lnbicsXG4gICAgICAgICd1cGRhdGVfdGFza190eXBlJyxcbiAgICAgICAgJ3VwZGF0ZV9lc3RpbWF0ZWRfaG91cnMnLFxuICAgICAgICAnYXNzaWduX3Rhc2tfbGFiZWwnLFxuICAgICAgXVxuICAgICAgY29uc3QgVEFTS19ERUxFVEVfVE9PTFMgPSBbJ2RlbGV0ZV90YXNrJywgJ2RlbGV0ZV90YXNrc19iYXRjaCddXG4gICAgICBjb25zdCBwZW5kaW5nQWN0aW9ucyA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucyB8fCBbXVxuICAgICAgY29uc3Qgd2FzVGFza0NyZWF0aW9uID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19DUkVBVElPTl9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tFZGl0ID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJiBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19FRElUX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0RlbGV0ZSA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2NyZWF0ZV9hZ2VudCcpXG4gICAgICBjb25zdCB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiAoYWN0aW9uLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKVxuICAgICAgbGV0IGNyZWF0ZUFnZW50Rm9sbG93VXA6IHsgYWdlbnRJZDogc3RyaW5nIH0gfCB1bmRlZmluZWRcbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkICYmIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSkge1xuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwID0geyBhZ2VudElkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkICYmXG4gICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmXG4gICAgICAgIChjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgfHxcbiAgICAgICAgICBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnMsICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJykpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY29uZmlndXJlZEFnZW50SWQgPVxuICAgICAgICAgIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKVxuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwID0ge1xuICAgICAgICAgIGFnZW50SWQ6IGNvbmZpZ3VyZWRBZ2VudElkIGFzIHN0cmluZyxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMgfHwgW10sXG4gICAgICAgIC4uLihjcmVhdGVBZ2VudEZvbGxvd1VwID8geyBjcmVhdGVBZ2VudEZvbGxvd1VwIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpZiAoY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGNyZWF0ZUFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyBhw7FhZGlyIGVsIGFnZW50ZSByZWNpw6luIGNyZWFkbyBhbCBsaXN0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChlZGl0QWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGVkaXRBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIHJlZnJlc2NhciBlbCBhZ2VudGUgZWRpdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAoZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCBwcm9qZWN0LCBnZXRUYWJUYXNrRGVmYXVsdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYWRkTWVzc2FnZSh7XG4gICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tY2FuY2VsbGVkYCxcbiAgICAgIG1lc3NhZ2U6IHQoJ2NoYXQuY2FuY2VsbGVkJyksXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogdHJ1ZSxcbiAgICB9KVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICB9LCA1MDApXG4gIH0sIFthZGRNZXNzYWdlLCB0XSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICAvLyBBZGQgYSBtZXNzYWdlIHdpdGggdGhlIGFwcHJvdmFsIHJlcXVlc3RcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBhcHByb3ZhbFN0YXR1czogJ3BlbmRpbmcnLFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlXVxuICApXG5cbiAgY29uc3Qge1xuICAgIGFza01haWEsXG4gICAgaXNMb2FkaW5nOiB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gIH0gPSB1c2VPcmNoZXN0cmF0b3JTdHJlYW0oe1xuICAgIG9uRXJyb3I6IGhhbmRsZVN0cmVhbUVycm9yLFxuICAgIG9uU3RyZWFtVXBkYXRlOiBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgb25GaW5pc2hTdHJlYW06IGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICBvblN0b3A6IGhhbmRsZVN0cmVhbVN0b3AsXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkOiBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICB9KVxuXG4gIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdFxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50IHx8IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQ/LlttZXNzYWdlc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdPy5hZ2VudElkXG5cbiAgICAgIC8vIE5vIGFncmVnYXIgcHJvamVjdElkIGFsIG1lbnNhamUgZGVsIHVzdWFyaW8gLSBzZSBkZXRlcm1pbmFyw6EgZGVzcHXDqXNcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYHF1ZXN0aW9uLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuVVNFUixcbiAgICAgICAgc291cmNlczogYXR0YWNobWVudHMsXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgbGV0IGZpbmFsTWVzc2FnZSA9IG1lc3NhZ2VcblxuICAgICAgaWYgKG1lc3NhZ2UgPT09IHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpKSB7XG4gICAgICAgIGZpbmFsTWVzc2FnZSA9IGBGQVE6ICR7dCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJyl9IC0gVGlwbyBkZSByZW50YWJpbGlkYWQ6ICR7XG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0Q2hhbmdlZD8uaW5jb21lVHlwZSB8fCBwcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICAgIH1gXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIC8vIFZlcmlmaWNhciBjb25zaXN0ZW5jaWEgZW50cmUgY29udGV4dG8gZ2xvYmFsIHkgw7psdGltbyBtZW5zYWplXG4gICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gcHJvamVjdD8uaWRcbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG5cbiAgICAgIGxldCBwcm9qZWN0VG9SZXF1ZXN0OiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gICAgICAvLyBTaSBoYXkgw7psdGltbyBtZW5zYWplIGNvbiBwcm9qZWN0SWQsIHVzYXJsbyAobcOhcyBjb25maWFibGUpXG4gICAgICBpZiAobGFzdE1lc3NhZ2VQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbiAgICAgIH1cbiAgICAgIC8vIFNpIG5vIGhheSDDumx0aW1vIG1lbnNhamUsIHVzYXIgZWwgY29udGV4dG8gZ2xvYmFsXG4gICAgICBlbHNlIGlmIChjb250ZXh0UHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IGNvbnRleHRQcm9qZWN0SWRcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZEZhcUlkID0gZmFxSWQgPz8gb3B0aW9ucy5mYXFJZFxuICAgICAgY29uc3QgcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID0gYWdlbnRTdWdnZXN0aW9uSWQgPz8gb3B0aW9ucy5hZ2VudFN1Z2dlc3Rpb25JZFxuXG4gICAgICBjb25zdCBwYXlsb2FkRGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZTogZmluYWxNZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY2xpZW50Py5pZFxuICAgICAgICAgID8geyBjbGllbnRJZDogY2xpZW50LmlkLCAuLi4oY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDogcHJvamVjdD8uY2xpZW50Py5pZFxuICAgICAgICAgICAgPyB7IGNsaWVudElkOiBwcm9qZWN0LmNsaWVudC5pZCwgLi4uKHByb2plY3QuY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZhcUlkID8geyBmYXFJZDogcGF5bG9hZEZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGNoYW5nZVByb2plY3QgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBpZiAoIWN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGlmIChvcHRpb24uaWQgIT09IHByb2plY3Q/LmlkKSB7XG4gICAgICAgIHNldFByb2plY3Qob3B0aW9uKVxuICAgICAgfVxuXG4gICAgICBpZiAocHJvamVjdCAmJiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICB9KSlcblxuICAgICAgICBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlLCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZlZWRiYWNrUHJvcDogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5DaGF0cy53YXNIZWxwZnVsQ2hhdChjaGF0TWVzc2FnZUlkLCBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUClcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IGNoYXRNZXNzYWdlSWQgJiYgbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIHdhc0hlbHBmdWw6IGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICAgICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgICAgZWRpdGVkQWN0aW9ucz86IEFycmF5PHsgdG9vbF9uYW1lOiBzdHJpbmc7IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+XG4gICAgKSA9PiB7XG4gICAgICBpZiAoIXRocmVhZElkcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHRocmVhZF9pZHMgcHJvdmlkZWQgZm9yIGFwcHJvdmFsIGRlY2lzaW9uJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEJ1c2NhciBlbCBtZW5zYWplIHF1ZSBjb250aWVuZSBhbGd1bm8gZGUgZXN0b3MgdGhyZWFkSWRzIGVuIHN1cyBwZW5kaW5nX2FjdGlvbnNcbiAgICAgIGNvbnN0IG1lc3NhZ2VXaXRoQXBwcm92YWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PlxuICAgICAgICBtLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgICAgIClcblxuICAgICAgaWYgKCFtZXNzYWdlV2l0aEFwcHJvdmFsIHx8ICFtZXNzYWdlV2l0aEFwcHJvdmFsLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuICAgICAgLy8gVXNlIGZpcnN0IHRocmVhZElkIGFzIHRoZSBsb2FkaW5nIGtleVxuICAgICAgY29uc3QgbG9hZGluZ0tleSA9IHRocmVhZElkc1swXVxuICAgICAgLy8gVXBkYXRlIG1lc3NhZ2Ugc3RhdHVzIGltbWVkaWF0ZWx5XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBtZXNzYWdlSWQpIHtcbiAgICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcblxuICAgICAgLy8gVHJpZ2dlciByZS1yZW5kZXJcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+IG0uaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgIGlmIChleGlzdGluZ01lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgIGFkZE1lc3NhZ2UoeyAuLi5leGlzdGluZ01lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsbCBjb250aW51ZS10aHJlYWQgZW5kcG9pbnQgd2l0aCBBTEwgdGhyZWFkX2lkcyBpbiBhIHNpbmdsZSByZXF1ZXN0XG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIC8vIEFkZCBsb2FkaW5nXG4gICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIFtsb2FkaW5nS2V5XTogdCgnY2hhdC5wcm9jZXNzaW5nJyksXG4gICAgICB9KSlcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZCh7XG4gICAgICAgICAgdGhyZWFkSWRzLCAvLyBTZW5kIGFsbCBhY3Rpb24gdGhyZWFkX2lkcyBhdCBvbmNlXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2xvYWRpbmdLZXldXG4gICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBTU0Ugc3RyZWFtXG4gICAgICAgIGF3YWl0IHByb2Nlc3NTU0VTdHJlYW0ocmVzcG9uc2UsIGxvYWRpbmdLZXksIHtcbiAgICAgICAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1VcGRhdGUoY29udGVudCwgbnVsbCwgJycpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkaXNwbGF5TXNnID1cbiAgICAgICAgICAgICAgbWVzc2FnZS5pbmNsdWRlcygnY3JlYXRlX3Rhc2snKSB8fCBtZXNzYWdlLmluY2x1ZGVzKCdjbG9uZV90YXNrJykgPyBtZXNzYWdlIDogdCgnY2hhdC5leGVjdXRpbmdBY3Rpb24nKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudFRocmVhZElkXTogZGlzcGxheU1zZyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Db21wbGV0ZTogKFxuICAgICAgICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICAgICAgICBzb3VyY2VzOiBhbnksXG4gICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICAgICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCBzdWdnZXN0aW9ucywgYWdlbnRJZClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZDogKGFwcHJvdmFsUGF5bG9hZDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIE5ldyBISVRMIGludGVycnVwdGlvbiBkZXRlY3RlZCBhZnRlciByZXN1bWUgKGNoYWluZWQgYWN0aW9ucylcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoYXBwcm92YWxQYXlsb2FkIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FcnJvcjogKGVycm9yOiBhbnksIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZXJyb3IpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tsb2FkaW5nS2V5XVxuICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2F1dGhVc2VyLCBhZ2VudCwgYWRkTWVzc2FnZSwgaGFuZGxlU3RyZWFtRXJyb3IsIGhhbmRsZVN0cmVhbVVwZGF0ZSwgaGFuZGxlU3RyZWFtRmluaXNoLCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkXVxuICApXG5cbiAgY29uc3QgaW5pdGlhbGl6ZUNoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIGlmIChpbml0aWFsQ2hhdElkKSB7XG4gICAgICBhd2FpdCBsb2FkTWVzc2FnZXMoKVxuICAgIH0gZWxzZSBpZiAodXNlckluaXRpYWxNZXNzYWdlKSB7XG4gICAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2U/LnRyaW0oKSlcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxBdHRhY2htZW50cyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGgpXG4gICAgICBjb25zdCBoYXNJbml0aWFsRmFxID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQpXG5cbiAgICAgIGlmICghaGFzSW5pdGlhbE1lc3NhZ2UgJiYgIWhhc0luaXRpYWxBdHRhY2htZW50cyAmJiAhaGFzSW5pdGlhbEZhcSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkIHx8IG51bGwsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY2xpZW50Py5pZCA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCB9IDogcHJvamVjdD8uY2xpZW50Py5pZCA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogcHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0Py5jbGllbnQ/Lm5hbWVcbiAgICAgICAgICA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9XG4gICAgICAgICAgOiBjbGllbnQ/Lm5hbWVcbiAgICAgICAgICAgID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiB1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBhdXRoVXNlcixcbiAgICBhZ2VudCxcbiAgICBhc2tNYWlhLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgXSlcblxuICBjb25zdCByZXNldENoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICB9LCBbXSlcblxuICBjb25zdCBzdG9wR2VuZXJhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdG9wU3RyZWFtaW5nKClcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtzdG9wU3RyZWFtaW5nXSlcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBjdXJyZW50UHJvamVjdCxcbiAgICBjdXJyZW50Q2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudE1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRzlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUMvRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxhQUFhO0FBQzlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFDdEMsU0FBU0MsUUFBUSxRQUFRLDREQUE0RDtBQUNyRixTQUF1Q0MsZUFBZSxRQUF3QyxrQkFBa0I7QUFHaEgsU0FBU0MsV0FBVyxRQUFRLGdCQUFnQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFDeEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLGdCQUFnQixRQUFRLDZDQUE2QztBQUk5RSxJQUFNQyx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUFJQyxvQkFBMkMsRUFBSztFQUFBLElBQUFDLG9CQUFBO0VBQ2hGLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSCxvQkFBb0IsQ0FBQyxFQUFFO0lBQ3ZDLE9BQU87TUFBRUksV0FBVyxFQUFFSixvQkFBb0I7TUFBRUssT0FBTyxFQUFFLENBQUM7SUFBd0IsQ0FBQztFQUNqRjtFQUVBLElBQU1BLE9BQTJCLEdBQUdMLG9CQUFvQixhQUFwQkEsb0JBQW9CLGNBQXBCQSxvQkFBb0IsR0FBSSxDQUFDLENBQUM7RUFDOUQsT0FB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