@projectcor/maia-components 2.49.0-beta.1 → 2.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +117 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +31 -101
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +91 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +49 -140
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +257 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -205
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +59 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -57
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +184 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +127 -176
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +96 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -113
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +3 -4
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +3 -11
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +2 -3
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
- package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
- package/lib/components/atoms/TextArea/TextArea.js +11 -20
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +6 -29
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +68 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +17 -56
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +133 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +31 -112
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +197 -233
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +398 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +209 -235
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +515 -4
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +228 -344
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +49 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +36 -33
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
- package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +25 -22
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +512 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +309 -643
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
- package/lib/constants/formatExtensions.js +7 -8
- package/lib/dev/DevReasoningTimeline.js +8 -50
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
- package/lib/hooks/useChatManager/useChatManager.helpers.js +902 -0
- package/lib/hooks/useChatManager/useChatManager.js +267 -741
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +365 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +59 -285
- package/lib/hooks/useClientSearch.helpers.js +36 -0
- package/lib/hooks/useClientSearch.js +4 -32
- package/lib/hooks/useContextMentions.helpers.js +212 -0
- package/lib/hooks/useContextMentions.js +5 -223
- package/lib/hooks/useContextMentions.types.js +2 -0
- package/lib/hooks/useContextPinPopover.helpers.js +95 -0
- package/lib/hooks/useContextPinPopover.js +16 -75
- package/lib/hooks/useEntitySearch.helpers.js +407 -0
- package/lib/hooks/useEntitySearch.js +52 -436
- package/lib/hooks/useMentionPopover.helpers.js +41 -0
- package/lib/hooks/useMentionPopover.js +9 -35
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
- package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
- package/lib/hooks/useProjectSearch.helpers.js +61 -0
- package/lib/hooks/useProjectSearch.js +4 -58
- package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
- package/lib/hooks/useProjectSummaryConfig.js +14 -52
- package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
- package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
- package/lib/hooks/useRecentClientsSearch.js +4 -32
- package/lib/lang/br/index.js +1 -7
- package/lib/lang/en/index.js +1 -7
- package/lib/lang/es/index.js +1 -7
- package/lib/lang/fr/index.js +1 -7
- package/lib/services/maia/Agents/getAgents.helpers.js +241 -0
- package/lib/services/maia/Agents/getAgents.js +90 -282
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
- package/lib/services/utils/mapChatMessages.helpers.js +223 -0
- package/lib/services/utils/mapChatMessages.js +25 -254
- package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
- package/lib/store/sessions/sessionNotifications.js +35 -41
- package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
- package/lib/store/sessions/sessionStreamManager.js +172 -236
- package/lib/test/mockSseStream.js +121 -0
- package/lib/test/streamdownCodeMock.js +6 -0
- package/lib/test/streamdownMock.js +12 -0
- package/lib/types/Chat.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/types/reasoning.js +1 -1
- package/lib/utils/imagePreprocessor.helpers.js +28 -0
- package/lib/utils/imagePreprocessor.js +12 -37
- package/lib/utils/renderContextMentions.helpers.js +110 -0
- package/lib/utils/renderContextMentions.js +4 -110
- package/lib/utils/streamActivityMessages.helpers.js +222 -0
- package/lib/utils/streamActivityMessages.js +4 -221
- package/package.json +2 -2
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
- package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
- package/lib/types/contextCompaction.js +0 -48
- package/lib/types/jest-dom.d.js +0 -2
|
@@ -0,0 +1,512 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
import { COR_TOOL_GROUP_SLUGS, DEFAULT_COR_ACCESS, deriveCorAccessFromToolGroupSlugs, deriveMcpConnectorSlugs } from '../../../utils/normalizeAgentConnectors';
|
|
6
|
+
var KNOWLEDGE_ATTACHMENT_STATUSES = ['pending', 'processing', 'done', 'failed', 'started'];
|
|
7
|
+
export var normalizeKnowledgeAttachmentStatus = function normalizeKnowledgeAttachmentStatus(status) {
|
|
8
|
+
if (KNOWLEDGE_ATTACHMENT_STATUSES.includes(status)) {
|
|
9
|
+
return status;
|
|
10
|
+
}
|
|
11
|
+
return 'pending';
|
|
12
|
+
};
|
|
13
|
+
var isModalAccessType = function isModalAccessType(value) {
|
|
14
|
+
return value === 'company' || value === 'clients' || value === 'only_me';
|
|
15
|
+
};
|
|
16
|
+
export var validateFieldValues = function validateFieldValues(valueToValidate) {
|
|
17
|
+
if (!valueToValidate.general.name || !valueToValidate.general.userPrompt) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
};
|
|
22
|
+
/** Misma estructura que el efecto que hidrata desde useGetAgentById (todas las pestañas del ABM). */
|
|
23
|
+
export var buildEditingModalValuesFromAgentDetail = function buildEditingModalValuesFromAgentDetail(agentById, agentModels, prev) {
|
|
24
|
+
var _agentById$knowledgeB, _agentById$clients;
|
|
25
|
+
var agentModel = agentModels.find(function (model) {
|
|
26
|
+
return model.id === agentById.modelAiId;
|
|
27
|
+
});
|
|
28
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
29
|
+
isEditing: true,
|
|
30
|
+
general: {
|
|
31
|
+
emoji: agentById.emoji,
|
|
32
|
+
name: agentById.name,
|
|
33
|
+
introduction: agentById.introduction,
|
|
34
|
+
inputPlaceholder: agentById.inputPlaceholder,
|
|
35
|
+
isActive: agentById.isActive,
|
|
36
|
+
aiModel: agentModel || null,
|
|
37
|
+
id: agentById.id,
|
|
38
|
+
userPrompt: agentById.userPrompt,
|
|
39
|
+
knowledgeBases: [],
|
|
40
|
+
is_favorite: agentById.is_favorite
|
|
41
|
+
},
|
|
42
|
+
knowledge: ((_agentById$knowledgeB = agentById.knowledgeBases) === null || _agentById$knowledgeB === void 0 ? void 0 : _agentById$knowledgeB.map(function (k) {
|
|
43
|
+
return {
|
|
44
|
+
file: new File([], k.filename),
|
|
45
|
+
id: k.id.toString(),
|
|
46
|
+
name: k.filename,
|
|
47
|
+
size: k.file_size_bytes || 0,
|
|
48
|
+
type: k.original_file_type,
|
|
49
|
+
status: normalizeKnowledgeAttachmentStatus(k.status),
|
|
50
|
+
url_original: k.url_original || undefined,
|
|
51
|
+
url_thumbnail: k.url_thumbnail || undefined
|
|
52
|
+
};
|
|
53
|
+
})) || [],
|
|
54
|
+
accessibility: {
|
|
55
|
+
accessType: isModalAccessType(agentById.access) ? agentById.access : 'company',
|
|
56
|
+
clients: ((_agentById$clients = agentById.clients) === null || _agentById$clients === void 0 ? void 0 : _agentById$clients.map(function (client) {
|
|
57
|
+
var _client$id, _client$is_active, _client$is_deleted;
|
|
58
|
+
return {
|
|
59
|
+
id: ((_client$id = client.id) === null || _client$id === void 0 ? void 0 : _client$id.toString()) || '',
|
|
60
|
+
name: client.name,
|
|
61
|
+
is_active: (_client$is_active = client.is_active) !== null && _client$is_active !== void 0 ? _client$is_active : false,
|
|
62
|
+
is_deleted: (_client$is_deleted = client.is_deleted) !== null && _client$is_deleted !== void 0 ? _client$is_deleted : false
|
|
63
|
+
};
|
|
64
|
+
})) || null,
|
|
65
|
+
corAccess: deriveCorAccessFromToolGroupSlugs(agentById.toolGroupSlugs),
|
|
66
|
+
selectedConnectors: deriveMcpConnectorSlugs(agentById.connectors)
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
export var areAbmClientsArraysEqual = function areAbmClientsArraysEqual(clients1, clients2) {
|
|
71
|
+
if (!clients1 && !clients2) return true;
|
|
72
|
+
if (!clients1 || !clients2) return false;
|
|
73
|
+
if (clients1.length !== clients2.length) return false;
|
|
74
|
+
var clients1Ids = clients1.map(function (client) {
|
|
75
|
+
var _client$clientId;
|
|
76
|
+
return (_client$clientId = client.clientId) !== null && _client$clientId !== void 0 ? _client$clientId : client.id;
|
|
77
|
+
}).sort();
|
|
78
|
+
var clients2Ids = clients2.map(function (client) {
|
|
79
|
+
var _client$clientId2;
|
|
80
|
+
return (_client$clientId2 = client.clientId) !== null && _client$clientId2 !== void 0 ? _client$clientId2 : client.id;
|
|
81
|
+
}).sort();
|
|
82
|
+
return clients1Ids.every(function (id, index) {
|
|
83
|
+
return id === clients2Ids[index];
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
export var hasAccessibilitySectionChanged = function hasAccessibilitySectionChanged(current, initial) {
|
|
87
|
+
var _current$corAccess, _initial$corAccess;
|
|
88
|
+
if (!initial || !current) return true;
|
|
89
|
+
var accessTypeSame = current.accessType === initial.accessType;
|
|
90
|
+
var clientsSame = areAbmClientsArraysEqual(current.clients, initial.clients);
|
|
91
|
+
var currentCorAccess = (_current$corAccess = current.corAccess) !== null && _current$corAccess !== void 0 ? _current$corAccess : DEFAULT_COR_ACCESS;
|
|
92
|
+
var initialCorAccess = (_initial$corAccess = initial.corAccess) !== null && _initial$corAccess !== void 0 ? _initial$corAccess : DEFAULT_COR_ACCESS;
|
|
93
|
+
var corAccessSame = COR_TOOL_GROUP_SLUGS.every(function (slug) {
|
|
94
|
+
return currentCorAccess[slug] === initialCorAccess[slug];
|
|
95
|
+
});
|
|
96
|
+
return !accessTypeSame || !clientsSame || !corAccessSame;
|
|
97
|
+
};
|
|
98
|
+
export var isSameAgentModalSnapshot = function isSameAgentModalSnapshot(current, initial, fileActions) {
|
|
99
|
+
var _current$general$aiMo, _initial$general$aiMo, _current$knowledge, _initial$knowledge, _current$knowledge2, _initial$knowledge2, _fileActions$toUpdate, _fileActions$toDelete;
|
|
100
|
+
if (!initial.general || !current.general) return false;
|
|
101
|
+
return current.general.name === initial.general.name && current.general.emoji === initial.general.emoji && current.general.introduction === initial.general.introduction && current.general.inputPlaceholder === initial.general.inputPlaceholder && ((_current$general$aiMo = current.general.aiModel) === null || _current$general$aiMo === void 0 ? void 0 : _current$general$aiMo.id) === ((_initial$general$aiMo = initial.general.aiModel) === null || _initial$general$aiMo === void 0 ? void 0 : _initial$general$aiMo.id) && current.general.userPrompt === initial.general.userPrompt && (((_current$knowledge = current.knowledge) === null || _current$knowledge === void 0 ? void 0 : _current$knowledge.length) === ((_initial$knowledge = initial.knowledge) === null || _initial$knowledge === void 0 ? void 0 : _initial$knowledge.length) || !((_current$knowledge2 = current.knowledge) !== null && _current$knowledge2 !== void 0 && _current$knowledge2.length) && !((_initial$knowledge2 = initial.knowledge) !== null && _initial$knowledge2 !== void 0 && _initial$knowledge2.length)) && !((_fileActions$toUpdate = fileActions.toUpdate) !== null && _fileActions$toUpdate !== void 0 && _fileActions$toUpdate.length) && !((_fileActions$toDelete = fileActions.toDelete) !== null && _fileActions$toDelete !== void 0 && _fileActions$toDelete.length) && !hasAccessibilitySectionChanged(current.accessibility, initial.accessibility);
|
|
102
|
+
};
|
|
103
|
+
export var hasAgentCreationDraft = function hasAgentCreationDraft(values, defaults) {
|
|
104
|
+
var _values$general$aiMod, _values$general$userP;
|
|
105
|
+
if (values.isEditing) return false;
|
|
106
|
+
var isDefaultAiModel = defaults.defaultAiModelId != null && ((_values$general$aiMod = values.general.aiModel) === null || _values$general$aiMod === void 0 ? void 0 : _values$general$aiMod.id) === defaults.defaultAiModelId;
|
|
107
|
+
var isDefaultInputPlaceholder = values.general.inputPlaceholder === defaults.defaultInputPlaceholder;
|
|
108
|
+
var isDefaultUserPrompt = values.general.userPrompt === defaults.defaultUserPromptPlaceholder || values.general.userPrompt === '' || values.general.userPrompt === null;
|
|
109
|
+
var hasName = values.general.name.trim() !== '';
|
|
110
|
+
var hasEmoji = values.general.emoji.trim() !== '';
|
|
111
|
+
var hasIntroduction = values.general.introduction.trim() !== '';
|
|
112
|
+
var hasInputPlaceholder = values.general.inputPlaceholder.trim() !== '' && !isDefaultInputPlaceholder;
|
|
113
|
+
var hasUserPrompt = ((_values$general$userP = values.general.userPrompt) === null || _values$general$userP === void 0 ? void 0 : _values$general$userP.trim()) !== '' && !isDefaultUserPrompt;
|
|
114
|
+
var hasKnowledge = !!values.knowledge.length;
|
|
115
|
+
var hasCustomAiModel = Boolean(values.general.aiModel && !isDefaultAiModel);
|
|
116
|
+
var hasAccessibility = values.accessibility.accessType !== 'company';
|
|
117
|
+
return hasName || hasEmoji || hasIntroduction || hasInputPlaceholder || hasUserPrompt || hasKnowledge || hasCustomAiModel || hasAccessibility;
|
|
118
|
+
};
|
|
119
|
+
export var hasAbmPendingChanges = function hasAbmPendingChanges(values, initial, fileActions, defaults) {
|
|
120
|
+
var _fileActions$toDelete2, _fileActions$toUpload;
|
|
121
|
+
var hasCreationDraft = hasAgentCreationDraft(values, defaults);
|
|
122
|
+
var hasEditingChanges = values.isEditing && Boolean(initial) && (!isSameAgentModalSnapshot(values, initial, fileActions) || Boolean((_fileActions$toDelete2 = fileActions.toDelete) === null || _fileActions$toDelete2 === void 0 ? void 0 : _fileActions$toDelete2.length) || Boolean((_fileActions$toUpload = fileActions.toUpload) === null || _fileActions$toUpload === void 0 ? void 0 : _fileActions$toUpload.length));
|
|
123
|
+
return hasCreationDraft || hasEditingChanges;
|
|
124
|
+
};
|
|
125
|
+
export var hasInactiveAccessibilityClients = function hasInactiveAccessibilityClients(clients) {
|
|
126
|
+
if (!(clients !== null && clients !== void 0 && clients.length)) return false;
|
|
127
|
+
return clients.some(function (client) {
|
|
128
|
+
return client.is_active === false || client.is_deleted === true;
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
export var resolveKnowledgeUploadOutcome = function resolveKnowledgeUploadOutcome(knowledge) {
|
|
132
|
+
var hasPendingFiles = knowledge.some(function (file) {
|
|
133
|
+
return file.status === 'pending';
|
|
134
|
+
});
|
|
135
|
+
var hasErrorFiles = knowledge.some(function (file) {
|
|
136
|
+
return file.status === 'failed';
|
|
137
|
+
});
|
|
138
|
+
if (hasPendingFiles) return 'pending';
|
|
139
|
+
if (hasErrorFiles) return 'error';
|
|
140
|
+
if (knowledge.length > 0) return 'complete';
|
|
141
|
+
return null;
|
|
142
|
+
};
|
|
143
|
+
export var isAbmSaveDisabled = function isAbmSaveDisabled(_ref) {
|
|
144
|
+
var _values$accessibility;
|
|
145
|
+
var values = _ref.values,
|
|
146
|
+
initial = _ref.initial,
|
|
147
|
+
fileActions = _ref.fileActions,
|
|
148
|
+
_ref$isLoading = _ref.isLoading,
|
|
149
|
+
isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
|
|
150
|
+
_ref$isLoadingKnowled = _ref.isLoadingKnowledge,
|
|
151
|
+
isLoadingKnowledge = _ref$isLoadingKnowled === void 0 ? false : _ref$isLoadingKnowled,
|
|
152
|
+
_ref$isLoadingCreate = _ref.isLoadingCreate,
|
|
153
|
+
isLoadingCreate = _ref$isLoadingCreate === void 0 ? false : _ref$isLoadingCreate,
|
|
154
|
+
_ref$isLoadingUpdateA = _ref.isLoadingUpdateAccess,
|
|
155
|
+
isLoadingUpdateAccess = _ref$isLoadingUpdateA === void 0 ? false : _ref$isLoadingUpdateA,
|
|
156
|
+
_ref$hasFileErrors = _ref.hasFileErrors,
|
|
157
|
+
hasFileErrors = _ref$hasFileErrors === void 0 ? false : _ref$hasFileErrors;
|
|
158
|
+
var unchanged = Boolean(initial && isSameAgentModalSnapshot(values, initial, fileActions));
|
|
159
|
+
return !validateFieldValues(values) || unchanged || isLoading || isLoadingKnowledge || isLoadingCreate || isLoadingUpdateAccess || hasInactiveAccessibilityClients((_values$accessibility = values.accessibility) === null || _values$accessibility === void 0 ? void 0 : _values$accessibility.clients) || hasFileErrors;
|
|
160
|
+
};
|
|
161
|
+
export var applyKnowledgeFileStatusUpdate = function applyKnowledgeFileStatusUpdate(knowledge, fileStatus) {
|
|
162
|
+
return knowledge.map(function (file) {
|
|
163
|
+
var _fileStatus$knowledge;
|
|
164
|
+
if (file.name !== fileStatus.filename) {
|
|
165
|
+
return file;
|
|
166
|
+
}
|
|
167
|
+
return _objectSpread(_objectSpread({}, file), {}, {
|
|
168
|
+
status: normalizeKnowledgeAttachmentStatus(fileStatus.status),
|
|
169
|
+
id: ((_fileStatus$knowledge = fileStatus.knowledge_base_id) === null || _fileStatus$knowledge === void 0 ? void 0 : _fileStatus$knowledge.toString()) || file.id
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
export var shouldConfirmAbmClose = function shouldConfirmAbmClose(hasPendingChanges, successFlags) {
|
|
174
|
+
if (!hasPendingChanges) return false;
|
|
175
|
+
return !(successFlags.create || successFlags.update || successFlags["delete"]);
|
|
176
|
+
};
|
|
177
|
+
export var ABM_ACCESS_DENIED_ERROR = "Access denied: You don't have permission to access this agent";
|
|
178
|
+
export var isAbmAccessDeniedError = function isAbmAccessDeniedError(error) {
|
|
179
|
+
return error === ABM_ACCESS_DENIED_ERROR;
|
|
180
|
+
};
|
|
181
|
+
export var canRenderAbmAgentModal = function canRenderAbmAgentModal(permissions) {
|
|
182
|
+
return Boolean((permissions === null || permissions === void 0 ? void 0 : permissions.create) || (permissions === null || permissions === void 0 ? void 0 : permissions.edit) || (permissions === null || permissions === void 0 ? void 0 : permissions["delete"]));
|
|
183
|
+
};
|
|
184
|
+
export var shouldCloseAbmOnBackdropClick = function shouldCloseAbmOnBackdropClick(target, currentTarget, isProcessingFiles) {
|
|
185
|
+
return target === currentTarget && !isProcessingFiles;
|
|
186
|
+
};
|
|
187
|
+
export var resolveAbmProcessingKnowledgeLabelKey = function resolveAbmProcessingKnowledgeLabelKey(isEditing) {
|
|
188
|
+
return isEditing ? 'processingKnowledge.descriptionUpdate' : 'processingKnowledge.descriptionCreate';
|
|
189
|
+
};
|
|
190
|
+
var ABM_OPEN_INITIAL_SECTIONS = ['general', 'knowledge', 'accessibility'];
|
|
191
|
+
export var resolvePendingAbmInitialSection = function resolvePendingAbmInitialSection(initialSection) {
|
|
192
|
+
if (initialSection && ABM_OPEN_INITIAL_SECTIONS.includes(initialSection)) {
|
|
193
|
+
return initialSection;
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
};
|
|
197
|
+
export var shouldDenyAbmEditWithoutMultiAgents = function shouldDenyAbmEditWithoutMultiAgents(isEditing, hasMultiAgentsAccess) {
|
|
198
|
+
return Boolean(isEditing && !hasMultiAgentsAccess);
|
|
199
|
+
};
|
|
200
|
+
export var resolveAbmCreateAccessUpdateContext = function resolveAbmCreateAccessUpdateContext(accessType) {
|
|
201
|
+
return {
|
|
202
|
+
isFromCreation: true,
|
|
203
|
+
isFromEditing: false,
|
|
204
|
+
hasActionFiles: accessType !== 'company',
|
|
205
|
+
operationType: 'create',
|
|
206
|
+
hasBeenCalled: false
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
export var shouldSyncAbmClientAccessOnCreate = function shouldSyncAbmClientAccessOnCreate(accessType) {
|
|
210
|
+
return accessType !== 'company';
|
|
211
|
+
};
|
|
212
|
+
export var buildAbmFavoriteToggleAgents = function buildAbmFavoriteToggleAgents(createdAgent) {
|
|
213
|
+
return {
|
|
214
|
+
listAgent: _objectSpread(_objectSpread({}, createdAgent), {}, {
|
|
215
|
+
is_favorite: true
|
|
216
|
+
}),
|
|
217
|
+
toggleAgent: _objectSpread(_objectSpread({}, createdAgent), {}, {
|
|
218
|
+
is_favorite: false
|
|
219
|
+
})
|
|
220
|
+
};
|
|
221
|
+
};
|
|
222
|
+
export var resolveAbmCreateSuccessPlan = function resolveAbmCreateSuccessPlan(actions) {
|
|
223
|
+
var hasDelete = actions.toDelete.length > 0;
|
|
224
|
+
var hasUpload = actions.toUpload.length > 0;
|
|
225
|
+
if (hasDelete && hasUpload) return 'deleteAndCreate';
|
|
226
|
+
if (hasDelete) return 'deleteOnly';
|
|
227
|
+
if (hasUpload) return 'uploadOnly';
|
|
228
|
+
return 'accessOnly';
|
|
229
|
+
};
|
|
230
|
+
export var shouldShowProcessFilesForCreatePlan = function shouldShowProcessFilesForCreatePlan(plan) {
|
|
231
|
+
return plan !== 'accessOnly';
|
|
232
|
+
};
|
|
233
|
+
export var resolveAbmUpdateSuccessPlan = function resolveAbmUpdateSuccessPlan(actions, accessibilityChanged) {
|
|
234
|
+
var createPlan = resolveAbmCreateSuccessPlan(actions);
|
|
235
|
+
if (createPlan !== 'accessOnly') {
|
|
236
|
+
return createPlan;
|
|
237
|
+
}
|
|
238
|
+
if (accessibilityChanged) {
|
|
239
|
+
return 'accessOnly';
|
|
240
|
+
}
|
|
241
|
+
return 'generalOnly';
|
|
242
|
+
};
|
|
243
|
+
export var resolveAbmUpdateAccessUpdateContext = function resolveAbmUpdateAccessUpdateContext() {
|
|
244
|
+
return {
|
|
245
|
+
isFromCreation: false,
|
|
246
|
+
isFromEditing: true,
|
|
247
|
+
hasActionFiles: true,
|
|
248
|
+
operationType: 'update',
|
|
249
|
+
hasBeenCalled: false
|
|
250
|
+
};
|
|
251
|
+
};
|
|
252
|
+
export var resolveAbmUpdateAccessOnlyContext = function resolveAbmUpdateAccessOnlyContext(current) {
|
|
253
|
+
if (current.hasBeenCalled || current.hasActionFiles) {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
return {
|
|
257
|
+
isFromCreation: false,
|
|
258
|
+
isFromEditing: true,
|
|
259
|
+
hasActionFiles: false,
|
|
260
|
+
operationType: 'update',
|
|
261
|
+
hasBeenCalled: false
|
|
262
|
+
};
|
|
263
|
+
};
|
|
264
|
+
export var resolveAbmCreateAccessOnlyDecision = function resolveAbmCreateAccessOnlyDecision(current, accessType) {
|
|
265
|
+
if (!shouldSyncAbmClientAccessOnCreate(accessType)) {
|
|
266
|
+
return {
|
|
267
|
+
nextContext: current,
|
|
268
|
+
shouldCallAccessClient: false
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
if (current.hasBeenCalled) {
|
|
272
|
+
return {
|
|
273
|
+
nextContext: current,
|
|
274
|
+
shouldCallAccessClient: false
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
return {
|
|
278
|
+
nextContext: {
|
|
279
|
+
isFromCreation: true,
|
|
280
|
+
isFromEditing: false,
|
|
281
|
+
hasActionFiles: current.hasActionFiles || false,
|
|
282
|
+
operationType: 'create',
|
|
283
|
+
hasBeenCalled: false
|
|
284
|
+
},
|
|
285
|
+
shouldCallAccessClient: true
|
|
286
|
+
};
|
|
287
|
+
};
|
|
288
|
+
export var createResetAbmAccessUpdateContext = function createResetAbmAccessUpdateContext() {
|
|
289
|
+
return {
|
|
290
|
+
isFromCreation: false,
|
|
291
|
+
isFromEditing: false,
|
|
292
|
+
hasActionFiles: false,
|
|
293
|
+
operationType: null,
|
|
294
|
+
hasBeenCalled: false
|
|
295
|
+
};
|
|
296
|
+
};
|
|
297
|
+
export var shouldFinalizeAbmUpdateWithoutPendingWork = function shouldFinalizeAbmUpdateWithoutPendingWork(input) {
|
|
298
|
+
return !input.hasPendingFiles && !input.isShowProcessFiles && input.toUploadCount === 0 && !input.accessHasActionFiles && !input.successUpdateAccess && !input.processFilesTimedOut;
|
|
299
|
+
};
|
|
300
|
+
export var resolveKnowledgeWsCompletionEffects = function resolveKnowledgeWsCompletionEffects(uploadOutcome, context, accessHandled, filesFinished) {
|
|
301
|
+
if (uploadOutcome === 'error' || uploadOutcome === 'complete') {
|
|
302
|
+
var incrementFilesProcessed = uploadOutcome === 'complete' && (context.hasActionFiles && accessHandled || context.operationType === 'create' && !context.hasActionFiles && !filesFinished);
|
|
303
|
+
var markFilesFinishedForCreate = uploadOutcome === 'complete' && context.operationType === 'create' && !context.hasActionFiles && !filesFinished;
|
|
304
|
+
return {
|
|
305
|
+
closeProcessFiles: true,
|
|
306
|
+
incrementFilesProcessed: incrementFilesProcessed,
|
|
307
|
+
markFilesFinishedForCreate: markFilesFinishedForCreate
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
return null;
|
|
311
|
+
};
|
|
312
|
+
export var resolveAbmKnowledgeErrorMessageKey = function resolveAbmKnowledgeErrorMessageKey(isEditing) {
|
|
313
|
+
return isEditing ? 'confirmAgentUpdatedWithFilesError' : 'confirmAgentWithFilesError';
|
|
314
|
+
};
|
|
315
|
+
export var shouldBlockKnowledgeDeleteSuccessClose = function shouldBlockKnowledgeDeleteSuccessClose(input) {
|
|
316
|
+
return input.hasPendingFiles || input.isShowProcessFiles || input.toUploadCount > 0 || input.processFilesTimedOut;
|
|
317
|
+
};
|
|
318
|
+
export var shouldDeferAccessUpdateUntilFilesComplete = function shouldDeferAccessUpdateUntilFilesComplete(context, hasPendingFiles, isShowProcessFiles) {
|
|
319
|
+
return context.hasActionFiles && (hasPendingFiles || isShowProcessFiles);
|
|
320
|
+
};
|
|
321
|
+
export var shouldCloseCreateAfterKnowledgeWithoutAccess = function shouldCloseCreateAfterKnowledgeWithoutAccess(input) {
|
|
322
|
+
return input.operationType === 'create' && !input.hasActionFiles && input.filesFinished && input.hasSuccessCreate && !input.hasPendingFiles && !input.isShowProcessFiles;
|
|
323
|
+
};
|
|
324
|
+
export var shouldCloseCreateAfterKnowledgeWithAccess = function shouldCloseCreateAfterKnowledgeWithAccess(input) {
|
|
325
|
+
return input.operationType === 'create' && input.hasActionFiles && input.accessHandled && input.hasSuccessCreate && !input.hasPendingFiles && !input.isShowProcessFiles;
|
|
326
|
+
};
|
|
327
|
+
export var shouldApplyPendingSectionAfterOpen = function shouldApplyPendingSectionAfterOpen(isEditing, pendingSection) {
|
|
328
|
+
return Boolean(pendingSection && !isEditing);
|
|
329
|
+
};
|
|
330
|
+
export var resolveAbmOpenModalLoadAction = function resolveAbmOpenModalLoadAction(params) {
|
|
331
|
+
if (!params.isEditing) {
|
|
332
|
+
return 'apply_create_values';
|
|
333
|
+
}
|
|
334
|
+
if (shouldDenyAbmEditWithoutMultiAgents(true, params.hasMultiAgentsAccess)) {
|
|
335
|
+
return 'deny_edit';
|
|
336
|
+
}
|
|
337
|
+
if (params.hasPrefetchedAgent) {
|
|
338
|
+
return 'prefetch_edit';
|
|
339
|
+
}
|
|
340
|
+
return 'fetch_edit';
|
|
341
|
+
};
|
|
342
|
+
export var canApplyAbmEditingAgentDetail = function canApplyAbmEditingAgentDetail(source, hasMultiAgentsAccess) {
|
|
343
|
+
return source.type === 'custom' && hasMultiAgentsAccess;
|
|
344
|
+
};
|
|
345
|
+
export var shouldSetDefaultAiModelForNewAgent = function shouldSetDefaultAiModelForNewAgent(params) {
|
|
346
|
+
return !params.isLoading && !params.agentLoading && !params.hasAgentById && !params.isEditing;
|
|
347
|
+
};
|
|
348
|
+
export var shouldSkipAbmConfirmWithoutMultiAgents = function shouldSkipAbmConfirmWithoutMultiAgents(hasMultiAgentsAccess) {
|
|
349
|
+
return !hasMultiAgentsAccess;
|
|
350
|
+
};
|
|
351
|
+
export var resolveAbmDraftFavoriteValue = function resolveAbmDraftFavoriteValue(currentIsFavorite) {
|
|
352
|
+
return !currentIsFavorite;
|
|
353
|
+
};
|
|
354
|
+
export var resolveAbmCreateFavoriteAgents = function resolveAbmCreateFavoriteAgents(createdAgent, markFavorite) {
|
|
355
|
+
if (!markFavorite) {
|
|
356
|
+
return {
|
|
357
|
+
listAgent: createdAgent,
|
|
358
|
+
toggleAgent: null
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
var _buildAbmFavoriteTogg = buildAbmFavoriteToggleAgents(createdAgent),
|
|
362
|
+
listAgent = _buildAbmFavoriteTogg.listAgent,
|
|
363
|
+
toggleAgent = _buildAbmFavoriteTogg.toggleAgent;
|
|
364
|
+
return {
|
|
365
|
+
listAgent: listAgent,
|
|
366
|
+
toggleAgent: toggleAgent
|
|
367
|
+
};
|
|
368
|
+
};
|
|
369
|
+
export var applyAbmKnowledgeFileActions = function applyAbmKnowledgeFileActions(value, deleteKnowledge, currentKnowledge, currentActions) {
|
|
370
|
+
if (!deleteKnowledge) {
|
|
371
|
+
return _objectSpread(_objectSpread({}, currentActions), {}, {
|
|
372
|
+
toUpload: [].concat(_toConsumableArray(currentActions.toUpload), _toConsumableArray(value || []))
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
var filesPrevIds = value !== null && value !== void 0 && value.length ? new Set(value.map(function (file) {
|
|
376
|
+
return file.id;
|
|
377
|
+
})) : new Set();
|
|
378
|
+
var newFiles = currentKnowledge.filter(function (file) {
|
|
379
|
+
return !filesPrevIds.has(file.id) && file.status !== 'started';
|
|
380
|
+
});
|
|
381
|
+
var nextToUpload = currentActions.toUpload;
|
|
382
|
+
if (!newFiles.length && currentActions.toUpload.length) {
|
|
383
|
+
var _value$map;
|
|
384
|
+
var valueIds = new Set((_value$map = value === null || value === void 0 ? void 0 : value.map(function (file) {
|
|
385
|
+
return file.id;
|
|
386
|
+
})) !== null && _value$map !== void 0 ? _value$map : []);
|
|
387
|
+
nextToUpload = currentActions.toUpload.filter(function (file) {
|
|
388
|
+
return valueIds.has(file.id);
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
return {
|
|
392
|
+
toUpload: nextToUpload,
|
|
393
|
+
toDelete: [].concat(_toConsumableArray(currentActions.toDelete), _toConsumableArray(newFiles))
|
|
394
|
+
};
|
|
395
|
+
};
|
|
396
|
+
export var mergeAbmAgentValuesByKey = function mergeAbmAgentValuesByKey(prev, key, value, deleteKnowledge) {
|
|
397
|
+
if (key === 'knowledge') {
|
|
398
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
399
|
+
knowledge: deleteKnowledge ? value : [].concat(_toConsumableArray(prev.knowledge || []), _toConsumableArray(value || []))
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
if (key === 'accessibility') {
|
|
403
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
404
|
+
accessibility: value
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
408
|
+
general: _objectSpread(_objectSpread({}, prev.general), {}, _defineProperty({}, key, value))
|
|
409
|
+
});
|
|
410
|
+
};
|
|
411
|
+
export var shouldRunAbmCreateSuccessHandler = function shouldRunAbmCreateSuccessHandler(successCreateId, isLoadingCreate, lastHandledCreateId) {
|
|
412
|
+
return Boolean(successCreateId && !isLoadingCreate && lastHandledCreateId !== successCreateId);
|
|
413
|
+
};
|
|
414
|
+
export var mergeAbmOpenAgentValues = function mergeAbmOpenAgentValues(initialValues, incoming) {
|
|
415
|
+
if (!incoming) {
|
|
416
|
+
return initialValues;
|
|
417
|
+
}
|
|
418
|
+
return _objectSpread(_objectSpread(_objectSpread({}, initialValues), incoming), {}, {
|
|
419
|
+
general: _objectSpread(_objectSpread({}, initialValues.general), incoming.general || {}),
|
|
420
|
+
accessibility: _objectSpread(_objectSpread({}, initialValues.accessibility), incoming.accessibility || {}),
|
|
421
|
+
knowledge: incoming.knowledge || []
|
|
422
|
+
});
|
|
423
|
+
};
|
|
424
|
+
export var resolveAbmCreateKnowledgeHandler = function resolveAbmCreateKnowledgeHandler(plan) {
|
|
425
|
+
if (plan === 'deleteAndCreate') return 'deleteAndCreate';
|
|
426
|
+
if (plan === 'deleteOnly') return 'deleteOnly';
|
|
427
|
+
if (plan === 'uploadOnly') return 'uploadOnly';
|
|
428
|
+
return null;
|
|
429
|
+
};
|
|
430
|
+
export var shouldRepeatDeleteKnowledgesOnCreate = function shouldRepeatDeleteKnowledgesOnCreate(plan) {
|
|
431
|
+
return plan === 'deleteOnly';
|
|
432
|
+
};
|
|
433
|
+
export var shouldEnqueueAbmCreateFavoriteToggle = function shouldEnqueueAbmCreateFavoriteToggle(toggleAgent) {
|
|
434
|
+
return Boolean(toggleAgent);
|
|
435
|
+
};
|
|
436
|
+
export var shouldHandleAbmCreateAccessOnlyClient = function shouldHandleAbmCreateAccessOnlyClient(decision) {
|
|
437
|
+
return decision.shouldCallAccessClient;
|
|
438
|
+
};
|
|
439
|
+
export var createInitialAbmModalValues = function createInitialAbmModalValues() {
|
|
440
|
+
return {
|
|
441
|
+
isEditing: false,
|
|
442
|
+
knowledge: [],
|
|
443
|
+
general: {
|
|
444
|
+
name: '',
|
|
445
|
+
emoji: '',
|
|
446
|
+
introduction: '',
|
|
447
|
+
inputPlaceholder: '',
|
|
448
|
+
isActive: false,
|
|
449
|
+
aiModel: null,
|
|
450
|
+
id: null,
|
|
451
|
+
userPrompt: null,
|
|
452
|
+
knowledgeBases: [],
|
|
453
|
+
is_favorite: false
|
|
454
|
+
},
|
|
455
|
+
accessibility: {
|
|
456
|
+
accessType: 'company',
|
|
457
|
+
clients: null,
|
|
458
|
+
corAccess: DEFAULT_COR_ACCESS
|
|
459
|
+
}
|
|
460
|
+
};
|
|
461
|
+
};
|
|
462
|
+
export var shouldProcessKnowledgeWsStatus = function shouldProcessKnowledgeWsStatus(status) {
|
|
463
|
+
return status === 'done' || status === 'failed';
|
|
464
|
+
};
|
|
465
|
+
export var resolveAbmKnowledgeWsChannel = function resolveAbmKnowledgeWsChannel(agentById, successCreateId) {
|
|
466
|
+
var _agentById$id;
|
|
467
|
+
var agentId = (_agentById$id = agentById === null || agentById === void 0 ? void 0 : agentById.id) !== null && _agentById$id !== void 0 ? _agentById$id : successCreateId;
|
|
468
|
+
return agentId != null ? "knowledge-base.status:".concat(agentId) : null;
|
|
469
|
+
};
|
|
470
|
+
export var resolveAbmFavoriteTooltipKey = function resolveAbmFavoriteTooltipKey(isFavorite) {
|
|
471
|
+
return isFavorite ? 'generalSection.removeFavorite' : 'generalSection.addFavorite';
|
|
472
|
+
};
|
|
473
|
+
export var shouldSelectAgentAfterDelete = function shouldSelectAgentAfterDelete(currentSelectedAgentId, deletedAgentId) {
|
|
474
|
+
return currentSelectedAgentId != null && deletedAgentId != null && String(currentSelectedAgentId) === String(deletedAgentId);
|
|
475
|
+
};
|
|
476
|
+
export var shouldRunAbmProcessFilesTimeout = function shouldRunAbmProcessFilesTimeout(hasPendingFiles, isShowProcessFiles) {
|
|
477
|
+
return hasPendingFiles || isShowProcessFiles;
|
|
478
|
+
};
|
|
479
|
+
export var resolveAbmProcessFilesTimeoutSuccessKey = function resolveAbmProcessFilesTimeoutSuccessKey(isEditing) {
|
|
480
|
+
return isEditing ? 'confirmAgentUpdated' : 'confirmAgentCreated';
|
|
481
|
+
};
|
|
482
|
+
export var shouldSyncSelectedAgentAfterMutation = function shouldSyncSelectedAgentAfterMutation(currentSelectedAgentId, mutatedAgentId) {
|
|
483
|
+
return currentSelectedAgentId != null && mutatedAgentId != null && String(currentSelectedAgentId) === String(mutatedAgentId);
|
|
484
|
+
};
|
|
485
|
+
export var shouldIncludeAccessibilityUpdateInKnowledgeBatch = function shouldIncludeAccessibilityUpdateInKnowledgeBatch(accessibilityChanged) {
|
|
486
|
+
return accessibilityChanged;
|
|
487
|
+
};
|
|
488
|
+
export var shouldResetSuccessUpdateAccessOnCreateClose = function shouldResetSuccessUpdateAccessOnCreateClose(successUpdateAccess) {
|
|
489
|
+
return successUpdateAccess;
|
|
490
|
+
};
|
|
491
|
+
export var shouldHydrateAgentConnectorsOnEdit = function shouldHydrateAgentConnectorsOnEdit(agentId, externalConnectorsEnabled) {
|
|
492
|
+
return Boolean(agentId && externalConnectorsEnabled);
|
|
493
|
+
};
|
|
494
|
+
export var shouldShowAbmLoaderFiles = function shouldShowAbmLoaderFiles(isShowProcessFiles, hasPendingFiles) {
|
|
495
|
+
return isShowProcessFiles && hasPendingFiles;
|
|
496
|
+
};
|
|
497
|
+
export var resolveAbmModalTitleKey = function resolveAbmModalTitleKey(isEditing) {
|
|
498
|
+
return isEditing ? 'editAgent' : 'newAgent';
|
|
499
|
+
};
|
|
500
|
+
export var shouldDisableAbmHeaderClose = function shouldDisableAbmHeaderClose(isLoading, isLoadingKnowledge, isLoadingCreate, isLoadingUpdateAccess) {
|
|
501
|
+
return isLoading || isLoadingKnowledge || isLoadingCreate || isLoadingUpdateAccess;
|
|
502
|
+
};
|
|
503
|
+
export var resolveAbmSaveAction = function resolveAbmSaveAction(isEditing, hasSameValues) {
|
|
504
|
+
if (isEditing) {
|
|
505
|
+
return hasSameValues ? 'noop' : 'update';
|
|
506
|
+
}
|
|
507
|
+
return 'create';
|
|
508
|
+
};
|
|
509
|
+
export var resolveProcessFilesTimeoutFlagBeforeSave = function resolveProcessFilesTimeoutFlagBeforeSave() {
|
|
510
|
+
return false;
|
|
511
|
+
};
|
|
512
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDT1JfVE9PTF9HUk9VUF9TTFVHUyIsIkRFRkFVTFRfQ09SX0FDQ0VTUyIsImRlcml2ZUNvckFjY2Vzc0Zyb21Ub29sR3JvdXBTbHVncyIsImRlcml2ZU1jcENvbm5lY3RvclNsdWdzIiwiS05PV0xFREdFX0FUVEFDSE1FTlRfU1RBVFVTRVMiLCJub3JtYWxpemVLbm93bGVkZ2VBdHRhY2htZW50U3RhdHVzIiwic3RhdHVzIiwiaW5jbHVkZXMiLCJpc01vZGFsQWNjZXNzVHlwZSIsInZhbHVlIiwidmFsaWRhdGVGaWVsZFZhbHVlcyIsInZhbHVlVG9WYWxpZGF0ZSIsImdlbmVyYWwiLCJuYW1lIiwidXNlclByb21wdCIsImJ1aWxkRWRpdGluZ01vZGFsVmFsdWVzRnJvbUFnZW50RGV0YWlsIiwiYWdlbnRCeUlkIiwiYWdlbnRNb2RlbHMiLCJwcmV2IiwiX2FnZW50QnlJZCRrbm93bGVkZ2VCIiwiX2FnZW50QnlJZCRjbGllbnRzIiwiYWdlbnRNb2RlbCIsImZpbmQiLCJtb2RlbCIsImlkIiwibW9kZWxBaUlkIiwiX29iamVjdFNwcmVhZCIsImlzRWRpdGluZyIsImVtb2ppIiwiaW50cm9kdWN0aW9uIiwiaW5wdXRQbGFjZWhvbGRlciIsImlzQWN0aXZlIiwiYWlNb2RlbCIsImtub3dsZWRnZUJhc2VzIiwiaXNfZmF2b3JpdGUiLCJrbm93bGVkZ2UiLCJtYXAiLCJrIiwiZmlsZSIsIkZpbGUiLCJmaWxlbmFtZSIsInRvU3RyaW5nIiwic2l6ZSIsImZpbGVfc2l6ZV9ieXRlcyIsInR5cGUiLCJvcmlnaW5hbF9maWxlX3R5cGUiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwiYWNjZXNzaWJpbGl0eSIsImFjY2Vzc1R5cGUiLCJhY2Nlc3MiLCJjbGllbnRzIiwiY2xpZW50IiwiX2NsaWVudCRpZCIsIl9jbGllbnQkaXNfYWN0aXZlIiwiX2NsaWVudCRpc19kZWxldGVkIiwiaXNfYWN0aXZlIiwiaXNfZGVsZXRlZCIsImNvckFjY2VzcyIsInRvb2xHcm91cFNsdWdzIiwic2VsZWN0ZWRDb25uZWN0b3JzIiwiY29ubmVjdG9ycyIsImFyZUFibUNsaWVudHNBcnJheXNFcXVhbCIsImNsaWVudHMxIiwiY2xpZW50czIiLCJsZW5ndGgiLCJjbGllbnRzMUlkcyIsIl9jbGllbnQkY2xpZW50SWQiLCJjbGllbnRJZCIsInNvcnQiLCJjbGllbnRzMklkcyIsIl9jbGllbnQkY2xpZW50SWQyIiwiZXZlcnkiLCJpbmRleCIsImhhc0FjY2Vzc2liaWxpdHlTZWN0aW9uQ2hhbmdlZCIsImN1cnJlbnQiLCJpbml0aWFsIiwiX2N1cnJlbnQkY29yQWNjZXNzIiwiX2luaXRpYWwkY29yQWNjZXNzIiwiYWNjZXNzVHlwZVNhbWUiLCJjbGllbnRzU2FtZSIsImN1cnJlbnRDb3JBY2Nlc3MiLCJpbml0aWFsQ29yQWNjZXNzIiwiY29yQWNjZXNzU2FtZSIsInNsdWciLCJpc1NhbWVBZ2VudE1vZGFsU25hcHNob3QiLCJmaWxlQWN0aW9ucyIsIl9jdXJyZW50JGdlbmVyYWwkYWlNbyIsIl9pbml0aWFsJGdlbmVyYWwkYWlNbyIsIl9jdXJyZW50JGtub3dsZWRnZSIsIl9pbml0aWFsJGtub3dsZWRnZSIsIl9jdXJyZW50JGtub3dsZWRnZTIiLCJfaW5pdGlhbCRrbm93bGVkZ2UyIiwiX2ZpbGVBY3Rpb25zJHRvVXBkYXRlIiwiX2ZpbGVBY3Rpb25zJHRvRGVsZXRlIiwidG9VcGRhdGUiLCJ0b0RlbGV0ZSIsImhhc0FnZW50Q3JlYXRpb25EcmFmdCIsInZhbHVlcyIsImRlZmF1bHRzIiwiX3ZhbHVlcyRnZW5lcmFsJGFpTW9kIiwiX3ZhbHVlcyRnZW5lcmFsJHVzZXJQIiwiaXNEZWZhdWx0QWlNb2RlbCIsImRlZmF1bHRBaU1vZGVsSWQiLCJpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyIiwiZGVmYXVsdElucHV0UGxhY2Vob2xkZXIiLCJpc0RlZmF1bHRVc2VyUHJvbXB0IiwiZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciIsImhhc05hbWUiLCJ0cmltIiwiaGFzRW1vamkiLCJoYXNJbnRyb2R1Y3Rpb24iLCJoYXNJbnB1dFBsYWNlaG9sZGVyIiwiaGFzVXNlclByb21wdCIsImhhc0tub3dsZWRnZSIsImhhc0N1c3RvbUFpTW9kZWwiLCJCb29sZWFuIiwiaGFzQWNjZXNzaWJpbGl0eSIsImhhc0FibVBlbmRpbmdDaGFuZ2VzIiwiX2ZpbGVBY3Rpb25zJHRvRGVsZXRlMiIsIl9maWxlQWN0aW9ucyR0b1VwbG9hZCIsImhhc0NyZWF0aW9uRHJhZnQiLCJoYXNFZGl0aW5nQ2hhbmdlcyIsInRvVXBsb2FkIiwiaGFzSW5hY3RpdmVBY2Nlc3NpYmlsaXR5Q2xpZW50cyIsInNvbWUiLCJyZXNvbHZlS25vd2xlZGdlVXBsb2FkT3V0Y29tZSIsImhhc1BlbmRpbmdGaWxlcyIsImhhc0Vycm9yRmlsZXMiLCJpc0FibVNhdmVEaXNhYmxlZCIsIl9yZWYiLCJfdmFsdWVzJGFjY2Vzc2liaWxpdHkiLCJfcmVmJGlzTG9hZGluZyIsImlzTG9hZGluZyIsIl9yZWYkaXNMb2FkaW5nS25vd2xlZCIsImlzTG9hZGluZ0tub3dsZWRnZSIsIl9yZWYkaXNMb2FkaW5nQ3JlYXRlIiwiaXNMb2FkaW5nQ3JlYXRlIiwiX3JlZiRpc0xvYWRpbmdVcGRhdGVBIiwiaXNMb2FkaW5nVXBkYXRlQWNjZXNzIiwiX3JlZiRoYXNGaWxlRXJyb3JzIiwiaGFzRmlsZUVycm9ycyIsInVuY2hhbmdlZCIsImFwcGx5S25vd2xlZGdlRmlsZVN0YXR1c1VwZGF0ZSIsImZpbGVTdGF0dXMiLCJfZmlsZVN0YXR1cyRrbm93bGVkZ2UiLCJrbm93bGVkZ2VfYmFzZV9pZCIsInNob3VsZENvbmZpcm1BYm1DbG9zZSIsImhhc1BlbmRpbmdDaGFuZ2VzIiwic3VjY2Vzc0ZsYWdzIiwiY3JlYXRlIiwidXBkYXRlIiwiQUJNX0FDQ0VTU19ERU5JRURfRVJST1IiLCJpc0FibUFjY2Vzc0RlbmllZEVycm9yIiwiZXJyb3IiLCJjYW5SZW5kZXJBYm1BZ2VudE1vZGFsIiwicGVybWlzc2lvbnMiLCJlZGl0Iiwic2hvdWxkQ2xvc2VBYm1PbkJhY2tkcm9wQ2xpY2siLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiaXNQcm9jZXNzaW5nRmlsZXMiLCJyZXNvbHZlQWJtUHJvY2Vzc2luZ0tub3dsZWRnZUxhYmVsS2V5IiwiQUJNX09QRU5fSU5JVElBTF9TRUNUSU9OUyIsInJlc29sdmVQZW5kaW5nQWJtSW5pdGlhbFNlY3Rpb24iLCJpbml0aWFsU2VjdGlvbiIsInNob3VsZERlbnlBYm1FZGl0V2l0aG91dE11bHRpQWdlbnRzIiwiaGFzTXVsdGlBZ2VudHNBY2Nlc3MiLCJyZXNvbHZlQWJtQ3JlYXRlQWNjZXNzVXBkYXRlQ29udGV4dCIsImlzRnJvbUNyZWF0aW9uIiwiaXNGcm9tRWRpdGluZyIsImhhc0FjdGlvbkZpbGVzIiwib3BlcmF0aW9uVHlwZSIsImhhc0JlZW5DYWxsZWQiLCJzaG91bGRTeW5jQWJtQ2xpZW50QWNjZXNzT25DcmVhdGUiLCJidWlsZEFibUZhdm9yaXRlVG9nZ2xlQWdlbnRzIiwiY3JlYXRlZEFnZW50IiwibGlzdEFnZW50IiwidG9nZ2xlQWdlbnQiLCJyZXNvbHZlQWJtQ3JlYXRlU3VjY2Vzc1BsYW4iLCJhY3Rpb25zIiwiaGFzRGVsZXRlIiwiaGFzVXBsb2FkIiwic2hvdWxkU2hvd1Byb2Nlc3NGaWxlc0ZvckNyZWF0ZVBsYW4iLCJwbGFuIiwicmVzb2x2ZUFibVVwZGF0ZVN1Y2Nlc3NQbGFuIiwiYWNjZXNzaWJpbGl0eUNoYW5nZWQiLCJjcmVhdGVQbGFuIiwicmVzb2x2ZUFibVVwZGF0ZUFjY2Vzc1VwZGF0ZUNvbnRleHQiLCJyZXNvbHZlQWJtVXBkYXRlQWNjZXNzT25seUNvbnRleHQiLCJyZXNvbHZlQWJtQ3JlYXRlQWNjZXNzT25seURlY2lzaW9uIiwibmV4dENvbnRleHQiLCJzaG91bGRDYWxsQWNjZXNzQ2xpZW50IiwiY3JlYXRlUmVzZXRBYm1BY2Nlc3NVcGRhdGVDb250ZXh0Iiwic2hvdWxkRmluYWxpemVBYm1VcGRhdGVXaXRob3V0UGVuZGluZ1dvcmsiLCJpbnB1dCIsImlzU2hvd1Byb2Nlc3NGaWxlcyIsInRvVXBsb2FkQ291bnQiLCJhY2Nlc3NIYXNBY3Rpb25GaWxlcyIsInN1Y2Nlc3NVcGRhdGVBY2Nlc3MiLCJwcm9jZXNzRmlsZXNUaW1lZE91dCIsInJlc29sdmVLbm93bGVkZ2VXc0NvbXBsZXRpb25FZmZlY3RzIiwidXBsb2FkT3V0Y29tZSIsImNvbnRleHQiLCJhY2Nlc3NIYW5kbGVkIiwiZmlsZXNGaW5pc2hlZCIsImluY3JlbWVudEZpbGVzUHJvY2Vzc2VkIiwibWFya0ZpbGVzRmluaXNoZWRGb3JDcmVhdGUiLCJjbG9zZVByb2Nlc3NGaWxlcyIsInJlc29sdmVBYm1Lbm93bGVkZ2VFcnJvck1lc3NhZ2VLZXkiLCJzaG91bGRCbG9ja0tub3dsZWRnZURlbGV0ZVN1Y2Nlc3NDbG9zZSIsInNob3VsZERlZmVyQWNjZXNzVXBkYXRlVW50aWxGaWxlc0NvbXBsZXRlIiwic2hvdWxkQ2xvc2VDcmVhdGVBZnRlcktub3dsZWRnZVdpdGhvdXRBY2Nlc3MiLCJoYXNTdWNjZXNzQ3JlYXRlIiwic2hvdWxkQ2xvc2VDcmVhdGVBZnRlcktub3dsZWRnZVdpdGhBY2Nlc3MiLCJzaG91bGRBcHBseVBlbmRpbmdTZWN0aW9uQWZ0ZXJPcGVuIiwicGVuZGluZ1NlY3Rpb24iLCJyZXNvbHZlQWJtT3Blbk1vZGFsTG9hZEFjdGlvbiIsInBhcmFtcyIsImhhc1ByZWZldGNoZWRBZ2VudCIsImNhbkFwcGx5QWJtRWRpdGluZ0FnZW50RGV0YWlsIiwic291cmNlIiwic2hvdWxkU2V0RGVmYXVsdEFpTW9kZWxGb3JOZXdBZ2VudCIsImFnZW50TG9hZGluZyIsImhhc0FnZW50QnlJZCIsInNob3VsZFNraXBBYm1Db25maXJtV2l0aG91dE11bHRpQWdlbnRzIiwicmVzb2x2ZUFibURyYWZ0RmF2b3JpdGVWYWx1ZSIsImN1cnJlbnRJc0Zhdm9yaXRlIiwicmVzb2x2ZUFibUNyZWF0ZUZhdm9yaXRlQWdlbnRzIiwibWFya0Zhdm9yaXRlIiwiX2J1aWxkQWJtRmF2b3JpdGVUb2dnIiwiYXBwbHlBYm1Lbm93bGVkZ2VGaWxlQWN0aW9ucyIsImRlbGV0ZUtub3dsZWRnZSIsImN1cnJlbnRLbm93bGVkZ2UiLCJjdXJyZW50QWN0aW9ucyIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImZpbGVzUHJldklkcyIsIlNldCIsIm5ld0ZpbGVzIiwiZmlsdGVyIiwiaGFzIiwibmV4dFRvVXBsb2FkIiwiX3ZhbHVlJG1hcCIsInZhbHVlSWRzIiwibWVyZ2VBYm1BZ2VudFZhbHVlc0J5S2V5Iiwia2V5IiwiX2RlZmluZVByb3BlcnR5Iiwic2hvdWxkUnVuQWJtQ3JlYXRlU3VjY2Vzc0hhbmRsZXIiLCJzdWNjZXNzQ3JlYXRlSWQiLCJsYXN0SGFuZGxlZENyZWF0ZUlkIiwibWVyZ2VBYm1PcGVuQWdlbnRWYWx1ZXMiLCJpbml0aWFsVmFsdWVzIiwiaW5jb21pbmciLCJyZXNvbHZlQWJtQ3JlYXRlS25vd2xlZGdlSGFuZGxlciIsInNob3VsZFJlcGVhdERlbGV0ZUtub3dsZWRnZXNPbkNyZWF0ZSIsInNob3VsZEVucXVldWVBYm1DcmVhdGVGYXZvcml0ZVRvZ2dsZSIsInNob3VsZEhhbmRsZUFibUNyZWF0ZUFjY2Vzc09ubHlDbGllbnQiLCJkZWNpc2lvbiIsImNyZWF0ZUluaXRpYWxBYm1Nb2RhbFZhbHVlcyIsInNob3VsZFByb2Nlc3NLbm93bGVkZ2VXc1N0YXR1cyIsInJlc29sdmVBYm1Lbm93bGVkZ2VXc0NoYW5uZWwiLCJfYWdlbnRCeUlkJGlkIiwiYWdlbnRJZCIsInJlc29sdmVBYm1GYXZvcml0ZVRvb2x0aXBLZXkiLCJpc0Zhdm9yaXRlIiwic2hvdWxkU2VsZWN0QWdlbnRBZnRlckRlbGV0ZSIsImN1cnJlbnRTZWxlY3RlZEFnZW50SWQiLCJkZWxldGVkQWdlbnRJZCIsIlN0cmluZyIsInNob3VsZFJ1bkFibVByb2Nlc3NGaWxlc1RpbWVvdXQiLCJyZXNvbHZlQWJtUHJvY2Vzc0ZpbGVzVGltZW91dFN1Y2Nlc3NLZXkiLCJzaG91bGRTeW5jU2VsZWN0ZWRBZ2VudEFmdGVyTXV0YXRpb24iLCJtdXRhdGVkQWdlbnRJZCIsInNob3VsZEluY2x1ZGVBY2Nlc3NpYmlsaXR5VXBkYXRlSW5Lbm93bGVkZ2VCYXRjaCIsInNob3VsZFJlc2V0U3VjY2Vzc1VwZGF0ZUFjY2Vzc09uQ3JlYXRlQ2xvc2UiLCJzaG91bGRIeWRyYXRlQWdlbnRDb25uZWN0b3JzT25FZGl0IiwiZXh0ZXJuYWxDb25uZWN0b3JzRW5hYmxlZCIsInNob3VsZFNob3dBYm1Mb2FkZXJGaWxlcyIsInJlc29sdmVBYm1Nb2RhbFRpdGxlS2V5Iiwic2hvdWxkRGlzYWJsZUFibUhlYWRlckNsb3NlIiwicmVzb2x2ZUFibVNhdmVBY3Rpb24iLCJoYXNTYW1lVmFsdWVzIiwicmVzb2x2ZVByb2Nlc3NGaWxlc1RpbWVvdXRGbGFnQmVmb3JlU2F2ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwuaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZ2VudE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBNb2RhbFZhbHVlcyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50TW9kYWwnXG5pbXBvcnQgdHlwZSB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7XG4gIENPUl9UT09MX0dST1VQX1NMVUdTLFxuICBERUZBVUxUX0NPUl9BQ0NFU1MsXG4gIGRlcml2ZUNvckFjY2Vzc0Zyb21Ub29sR3JvdXBTbHVncyxcbiAgZGVyaXZlTWNwQ29ubmVjdG9yU2x1Z3MsXG59IGZyb20gJy4uLy4uLy4uL3V0aWxzL25vcm1hbGl6ZUFnZW50Q29ubmVjdG9ycydcblxuY29uc3QgS05PV0xFREdFX0FUVEFDSE1FTlRfU1RBVFVTRVMgPSBbJ3BlbmRpbmcnLCAncHJvY2Vzc2luZycsICdkb25lJywgJ2ZhaWxlZCcsICdzdGFydGVkJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUtub3dsZWRnZUF0dGFjaG1lbnRTdGF0dXMgPSAoc3RhdHVzOiBzdHJpbmcpOiBOb25OdWxsYWJsZTxBdHRhY2htZW50RmlsZVsnc3RhdHVzJ10+ID0+IHtcbiAgaWYgKChLTk9XTEVER0VfQVRUQUNITUVOVF9TVEFUVVNFUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMoc3RhdHVzKSkge1xuICAgIHJldHVybiBzdGF0dXMgYXMgKHR5cGVvZiBLTk9XTEVER0VfQVRUQUNITUVOVF9TVEFUVVNFUylbbnVtYmVyXVxuICB9XG4gIHJldHVybiAncGVuZGluZydcbn1cblxuY29uc3QgaXNNb2RhbEFjY2Vzc1R5cGUgPSAodmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIE1vZGFsVmFsdWVzWydhY2Nlc3NpYmlsaXR5J11bJ2FjY2Vzc1R5cGUnXSA9PlxuICB2YWx1ZSA9PT0gJ2NvbXBhbnknIHx8IHZhbHVlID09PSAnY2xpZW50cycgfHwgdmFsdWUgPT09ICdvbmx5X21lJ1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVGaWVsZFZhbHVlcyA9ICh2YWx1ZVRvVmFsaWRhdGU6IE1vZGFsVmFsdWVzKSA9PiB7XG4gIGlmICghdmFsdWVUb1ZhbGlkYXRlLmdlbmVyYWwubmFtZSB8fCAhdmFsdWVUb1ZhbGlkYXRlLmdlbmVyYWwudXNlclByb21wdCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbnR5cGUgQWdlbnREZXRhaWxTb3VyY2UgPSB7XG4gIGVtb2ppOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGludHJvZHVjdGlvbjogc3RyaW5nXG4gIGlucHV0UGxhY2Vob2xkZXI6IHN0cmluZ1xuICBpc0FjdGl2ZTogYm9vbGVhblxuICBtb2RlbEFpSWQ6IG51bWJlclxuICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gIHVzZXJQcm9tcHQ6IHN0cmluZyB8IG51bGxcbiAgaXNfZmF2b3JpdGU6IGJvb2xlYW5cbiAgY3JlYXRlZEJ5PzogbnVtYmVyXG4gIGtub3dsZWRnZUJhc2VzPzogQXJyYXk8e1xuICAgIGlkOiBudW1iZXJcbiAgICBmaWxlbmFtZTogc3RyaW5nXG4gICAgZmlsZV9zaXplX2J5dGVzPzogbnVtYmVyXG4gICAgb3JpZ2luYWxfZmlsZV90eXBlOiBzdHJpbmdcbiAgICBzdGF0dXM6IHN0cmluZ1xuICAgIHVybF9vcmlnaW5hbD86IHN0cmluZ1xuICAgIHVybF90aHVtYm5haWw/OiBzdHJpbmdcbiAgfT5cbiAgYWNjZXNzOiBzdHJpbmdcbiAgY2xpZW50cz86IEFycmF5PHtcbiAgICBpZD86IG51bWJlciB8IHN0cmluZ1xuICAgIG5hbWU6IHN0cmluZ1xuICAgIGlzX2FjdGl2ZT86IGJvb2xlYW5cbiAgICBpc19kZWxldGVkPzogYm9vbGVhblxuICB9PlxuICB0b29sR3JvdXBTbHVncz86IHVua25vd25cbiAgY29ubmVjdG9ycz86IHVua25vd25cbn1cblxuLyoqIE1pc21hIGVzdHJ1Y3R1cmEgcXVlIGVsIGVmZWN0byBxdWUgaGlkcmF0YSBkZXNkZSB1c2VHZXRBZ2VudEJ5SWQgKHRvZGFzIGxhcyBwZXN0YcOxYXMgZGVsIEFCTSkuICovXG5leHBvcnQgY29uc3QgYnVpbGRFZGl0aW5nTW9kYWxWYWx1ZXNGcm9tQWdlbnREZXRhaWwgPSAoXG4gIGFnZW50QnlJZDogQWdlbnREZXRhaWxTb3VyY2UsXG4gIGFnZW50TW9kZWxzOiBBZ2VudE1vZGVsW10sXG4gIHByZXY6IE1vZGFsVmFsdWVzXG4pOiBNb2RhbFZhbHVlcyA9PiB7XG4gIGNvbnN0IGFnZW50TW9kZWwgPSBhZ2VudE1vZGVscy5maW5kKG1vZGVsID0+IG1vZGVsLmlkID09PSBhZ2VudEJ5SWQubW9kZWxBaUlkKVxuICByZXR1cm4ge1xuICAgIC4uLnByZXYsXG4gICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgIGdlbmVyYWw6IHtcbiAgICAgIGVtb2ppOiBhZ2VudEJ5SWQuZW1vamksXG4gICAgICBuYW1lOiBhZ2VudEJ5SWQubmFtZSxcbiAgICAgIGludHJvZHVjdGlvbjogYWdlbnRCeUlkLmludHJvZHVjdGlvbixcbiAgICAgIGlucHV0UGxhY2Vob2xkZXI6IGFnZW50QnlJZC5pbnB1dFBsYWNlaG9sZGVyLFxuICAgICAgaXNBY3RpdmU6IGFnZW50QnlJZC5pc0FjdGl2ZSxcbiAgICAgIGFpTW9kZWw6IGFnZW50TW9kZWwgfHwgbnVsbCxcbiAgICAgIGlkOiBhZ2VudEJ5SWQuaWQsXG4gICAgICB1c2VyUHJvbXB0OiBhZ2VudEJ5SWQudXNlclByb21wdCxcbiAgICAgIGtub3dsZWRnZUJhc2VzOiBbXSxcbiAgICAgIGlzX2Zhdm9yaXRlOiBhZ2VudEJ5SWQuaXNfZmF2b3JpdGUsXG4gICAgfSxcbiAgICBrbm93bGVkZ2U6XG4gICAgICBhZ2VudEJ5SWQua25vd2xlZGdlQmFzZXM/Lm1hcChrID0+ICh7XG4gICAgICAgIGZpbGU6IG5ldyBGaWxlKFtdLCBrLmZpbGVuYW1lKSxcbiAgICAgICAgaWQ6IGsuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogay5maWxlbmFtZSxcbiAgICAgICAgc2l6ZTogay5maWxlX3NpemVfYnl0ZXMgfHwgMCxcbiAgICAgICAgdHlwZTogay5vcmlnaW5hbF9maWxlX3R5cGUsXG4gICAgICAgIHN0YXR1czogbm9ybWFsaXplS25vd2xlZGdlQXR0YWNobWVudFN0YXR1cyhrLnN0YXR1cyksXG4gICAgICAgIHVybF9vcmlnaW5hbDogay51cmxfb3JpZ2luYWwgfHwgdW5kZWZpbmVkLFxuICAgICAgICB1cmxfdGh1bWJuYWlsOiBrLnVybF90aHVtYm5haWwgfHwgdW5kZWZpbmVkLFxuICAgICAgfSkpIHx8IFtdLFxuICAgIGFjY2Vzc2liaWxpdHk6IHtcbiAgICAgIGFjY2Vzc1R5cGU6IGlzTW9kYWxBY2Nlc3NUeXBlKGFnZW50QnlJZC5hY2Nlc3MpID8gYWdlbnRCeUlkLmFjY2VzcyA6ICdjb21wYW55JyxcbiAgICAgIGNsaWVudHM6XG4gICAgICAgIGFnZW50QnlJZC5jbGllbnRzPy5tYXAoY2xpZW50ID0+ICh7XG4gICAgICAgICAgaWQ6IGNsaWVudC5pZD8udG9TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICBuYW1lOiBjbGllbnQubmFtZSxcbiAgICAgICAgICBpc19hY3RpdmU6IGNsaWVudC5pc19hY3RpdmUgPz8gZmFsc2UsXG4gICAgICAgICAgaXNfZGVsZXRlZDogY2xpZW50LmlzX2RlbGV0ZWQgPz8gZmFsc2UsXG4gICAgICAgIH0pKSB8fCBudWxsLFxuICAgICAgY29yQWNjZXNzOiBkZXJpdmVDb3JBY2Nlc3NGcm9tVG9vbEdyb3VwU2x1Z3MoYWdlbnRCeUlkLnRvb2xHcm91cFNsdWdzKSxcbiAgICAgIHNlbGVjdGVkQ29ubmVjdG9yczogZGVyaXZlTWNwQ29ubmVjdG9yU2x1Z3MoYWdlbnRCeUlkLmNvbm5lY3RvcnMpLFxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQWJtRmlsZUFjdGlvbnMgPSB7XG4gIHRvVXBkYXRlPzogdW5rbm93bltdXG4gIHRvRGVsZXRlPzogdW5rbm93bltdXG4gIHRvVXBsb2FkPzogdW5rbm93bltdXG59XG5cbnR5cGUgQWJtQ2xpZW50Um93ID0ge1xuICBjbGllbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBpZD86IHN0cmluZyB8IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgYXJlQWJtQ2xpZW50c0FycmF5c0VxdWFsID0gKFxuICBjbGllbnRzMTogQWJtQ2xpZW50Um93W10gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjbGllbnRzMjogQWJtQ2xpZW50Um93W10gfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFjbGllbnRzMSAmJiAhY2xpZW50czIpIHJldHVybiB0cnVlXG4gIGlmICghY2xpZW50czEgfHwgIWNsaWVudHMyKSByZXR1cm4gZmFsc2VcbiAgaWYgKGNsaWVudHMxLmxlbmd0aCAhPT0gY2xpZW50czIubGVuZ3RoKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBjbGllbnRzMUlkcyA9IGNsaWVudHMxLm1hcChjbGllbnQgPT4gY2xpZW50LmNsaWVudElkID8/IGNsaWVudC5pZCkuc29ydCgpXG4gIGNvbnN0IGNsaWVudHMySWRzID0gY2xpZW50czIubWFwKGNsaWVudCA9PiBjbGllbnQuY2xpZW50SWQgPz8gY2xpZW50LmlkKS5zb3J0KClcblxuICByZXR1cm4gY2xpZW50czFJZHMuZXZlcnkoKGlkLCBpbmRleCkgPT4gaWQgPT09IGNsaWVudHMySWRzW2luZGV4XSlcbn1cblxuZXhwb3J0IGNvbnN0IGhhc0FjY2Vzc2liaWxpdHlTZWN0aW9uQ2hhbmdlZCA9IChcbiAgY3VycmVudDogTW9kYWxWYWx1ZXNbJ2FjY2Vzc2liaWxpdHknXSB8IHVuZGVmaW5lZCxcbiAgaW5pdGlhbDogTW9kYWxWYWx1ZXNbJ2FjY2Vzc2liaWxpdHknXSB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmICghaW5pdGlhbCB8fCAhY3VycmVudCkgcmV0dXJuIHRydWVcblxuICBjb25zdCBhY2Nlc3NUeXBlU2FtZSA9IGN1cnJlbnQuYWNjZXNzVHlwZSA9PT0gaW5pdGlhbC5hY2Nlc3NUeXBlXG4gIGNvbnN0IGNsaWVudHNTYW1lID0gYXJlQWJtQ2xpZW50c0FycmF5c0VxdWFsKGN1cnJlbnQuY2xpZW50cywgaW5pdGlhbC5jbGllbnRzKVxuICBjb25zdCBjdXJyZW50Q29yQWNjZXNzID0gY3VycmVudC5jb3JBY2Nlc3MgPz8gREVGQVVMVF9DT1JfQUNDRVNTXG4gIGNvbnN0IGluaXRpYWxDb3JBY2Nlc3MgPSBpbml0aWFsLmNvckFjY2VzcyA/PyBERUZBVUxUX0NPUl9BQ0NFU1NcbiAgY29uc3QgY29yQWNjZXNzU2FtZSA9IENPUl9UT09MX0dST1VQX1NMVUdTLmV2ZXJ5KHNsdWcgPT4gY3VycmVudENvckFjY2Vzc1tzbHVnXSA9PT0gaW5pdGlhbENvckFjY2Vzc1tzbHVnXSlcblxuICByZXR1cm4gIWFjY2Vzc1R5cGVTYW1lIHx8ICFjbGllbnRzU2FtZSB8fCAhY29yQWNjZXNzU2FtZVxufVxuXG5leHBvcnQgY29uc3QgaXNTYW1lQWdlbnRNb2RhbFNuYXBzaG90ID0gKFxuICBjdXJyZW50OiBNb2RhbFZhbHVlcyxcbiAgaW5pdGlhbDogTW9kYWxWYWx1ZXMsXG4gIGZpbGVBY3Rpb25zOiBBYm1GaWxlQWN0aW9uc1xuKTogYm9vbGVhbiA9PiB7XG4gIGlmICghaW5pdGlhbC5nZW5lcmFsIHx8ICFjdXJyZW50LmdlbmVyYWwpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiAoXG4gICAgY3VycmVudC5nZW5lcmFsLm5hbWUgPT09IGluaXRpYWwuZ2VuZXJhbC5uYW1lICYmXG4gICAgY3VycmVudC5nZW5lcmFsLmVtb2ppID09PSBpbml0aWFsLmdlbmVyYWwuZW1vamkgJiZcbiAgICBjdXJyZW50LmdlbmVyYWwuaW50cm9kdWN0aW9uID09PSBpbml0aWFsLmdlbmVyYWwuaW50cm9kdWN0aW9uICYmXG4gICAgY3VycmVudC5nZW5lcmFsLmlucHV0UGxhY2Vob2xkZXIgPT09IGluaXRpYWwuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyICYmXG4gICAgY3VycmVudC5nZW5lcmFsLmFpTW9kZWw/LmlkID09PSBpbml0aWFsLmdlbmVyYWwuYWlNb2RlbD8uaWQgJiZcbiAgICBjdXJyZW50LmdlbmVyYWwudXNlclByb21wdCA9PT0gaW5pdGlhbC5nZW5lcmFsLnVzZXJQcm9tcHQgJiZcbiAgICAoY3VycmVudC5rbm93bGVkZ2U/Lmxlbmd0aCA9PT0gaW5pdGlhbC5rbm93bGVkZ2U/Lmxlbmd0aCB8fFxuICAgICAgKCFjdXJyZW50Lmtub3dsZWRnZT8ubGVuZ3RoICYmICFpbml0aWFsLmtub3dsZWRnZT8ubGVuZ3RoKSkgJiZcbiAgICAhZmlsZUFjdGlvbnMudG9VcGRhdGU/Lmxlbmd0aCAmJlxuICAgICFmaWxlQWN0aW9ucy50b0RlbGV0ZT8ubGVuZ3RoICYmXG4gICAgIWhhc0FjY2Vzc2liaWxpdHlTZWN0aW9uQ2hhbmdlZChjdXJyZW50LmFjY2Vzc2liaWxpdHksIGluaXRpYWwuYWNjZXNzaWJpbGl0eSlcbiAgKVxufVxuXG5leHBvcnQgdHlwZSBDcmVhdGlvbkRyYWZ0RGVmYXVsdHMgPSB7XG4gIGRlZmF1bHRJbnB1dFBsYWNlaG9sZGVyOiBzdHJpbmdcbiAgZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlcjogc3RyaW5nXG4gIGRlZmF1bHRBaU1vZGVsSWQ/OiBudW1iZXIgfCBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBoYXNBZ2VudENyZWF0aW9uRHJhZnQgPSAodmFsdWVzOiBNb2RhbFZhbHVlcywgZGVmYXVsdHM6IENyZWF0aW9uRHJhZnREZWZhdWx0cyk6IGJvb2xlYW4gPT4ge1xuICBpZiAodmFsdWVzLmlzRWRpdGluZykgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgaXNEZWZhdWx0QWlNb2RlbCA9IGRlZmF1bHRzLmRlZmF1bHRBaU1vZGVsSWQgIT0gbnVsbCAmJiB2YWx1ZXMuZ2VuZXJhbC5haU1vZGVsPy5pZCA9PT0gZGVmYXVsdHMuZGVmYXVsdEFpTW9kZWxJZFxuICBjb25zdCBpc0RlZmF1bHRJbnB1dFBsYWNlaG9sZGVyID0gdmFsdWVzLmdlbmVyYWwuaW5wdXRQbGFjZWhvbGRlciA9PT0gZGVmYXVsdHMuZGVmYXVsdElucHV0UGxhY2Vob2xkZXJcbiAgY29uc3QgaXNEZWZhdWx0VXNlclByb21wdCA9XG4gICAgdmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gZGVmYXVsdHMuZGVmYXVsdFVzZXJQcm9tcHRQbGFjZWhvbGRlciB8fFxuICAgIHZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQgPT09ICcnIHx8XG4gICAgdmFsdWVzLmdlbmVyYWwudXNlclByb21wdCA9PT0gbnVsbFxuXG4gIGNvbnN0IGhhc05hbWUgPSB2YWx1ZXMuZ2VuZXJhbC5uYW1lLnRyaW0oKSAhPT0gJydcbiAgY29uc3QgaGFzRW1vamkgPSB2YWx1ZXMuZ2VuZXJhbC5lbW9qaS50cmltKCkgIT09ICcnXG4gIGNvbnN0IGhhc0ludHJvZHVjdGlvbiA9IHZhbHVlcy5nZW5lcmFsLmludHJvZHVjdGlvbi50cmltKCkgIT09ICcnXG4gIGNvbnN0IGhhc0lucHV0UGxhY2Vob2xkZXIgPSB2YWx1ZXMuZ2VuZXJhbC5pbnB1dFBsYWNlaG9sZGVyLnRyaW0oKSAhPT0gJycgJiYgIWlzRGVmYXVsdElucHV0UGxhY2Vob2xkZXJcbiAgY29uc3QgaGFzVXNlclByb21wdCA9IHZhbHVlcy5nZW5lcmFsLnVzZXJQcm9tcHQ/LnRyaW0oKSAhPT0gJycgJiYgIWlzRGVmYXVsdFVzZXJQcm9tcHRcbiAgY29uc3QgaGFzS25vd2xlZGdlID0gISF2YWx1ZXMua25vd2xlZGdlLmxlbmd0aFxuICBjb25zdCBoYXNDdXN0b21BaU1vZGVsID0gQm9vbGVhbih2YWx1ZXMuZ2VuZXJhbC5haU1vZGVsICYmICFpc0RlZmF1bHRBaU1vZGVsKVxuICBjb25zdCBoYXNBY2Nlc3NpYmlsaXR5ID0gdmFsdWVzLmFjY2Vzc2liaWxpdHkuYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknXG5cbiAgcmV0dXJuIChcbiAgICBoYXNOYW1lIHx8XG4gICAgaGFzRW1vamkgfHxcbiAgICBoYXNJbnRyb2R1Y3Rpb24gfHxcbiAgICBoYXNJbnB1dFBsYWNlaG9sZGVyIHx8XG4gICAgaGFzVXNlclByb21wdCB8fFxuICAgIGhhc0tub3dsZWRnZSB8fFxuICAgIGhhc0N1c3RvbUFpTW9kZWwgfHxcbiAgICBoYXNBY2Nlc3NpYmlsaXR5XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGhhc0FibVBlbmRpbmdDaGFuZ2VzID0gKFxuICB2YWx1ZXM6IE1vZGFsVmFsdWVzLFxuICBpbml0aWFsOiBNb2RhbFZhbHVlcyB8IG51bGwsXG4gIGZpbGVBY3Rpb25zOiBBYm1GaWxlQWN0aW9ucyxcbiAgZGVmYXVsdHM6IENyZWF0aW9uRHJhZnREZWZhdWx0c1xuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGhhc0NyZWF0aW9uRHJhZnQgPSBoYXNBZ2VudENyZWF0aW9uRHJhZnQodmFsdWVzLCBkZWZhdWx0cylcbiAgY29uc3QgaGFzRWRpdGluZ0NoYW5nZXMgPVxuICAgIHZhbHVlcy5pc0VkaXRpbmcgJiZcbiAgICBCb29sZWFuKGluaXRpYWwpICYmXG4gICAgKCFpc1NhbWVBZ2VudE1vZGFsU25hcHNob3QodmFsdWVzLCBpbml0aWFsIGFzIE1vZGFsVmFsdWVzLCBmaWxlQWN0aW9ucykgfHxcbiAgICAgIEJvb2xlYW4oZmlsZUFjdGlvbnMudG9EZWxldGU/Lmxlbmd0aCkgfHxcbiAgICAgIEJvb2xlYW4oZmlsZUFjdGlvbnMudG9VcGxvYWQ/Lmxlbmd0aCkpXG5cbiAgcmV0dXJuIGhhc0NyZWF0aW9uRHJhZnQgfHwgaGFzRWRpdGluZ0NoYW5nZXNcbn1cblxuZXhwb3J0IGNvbnN0IGhhc0luYWN0aXZlQWNjZXNzaWJpbGl0eUNsaWVudHMgPSAoXG4gIGNsaWVudHM6IEFycmF5PHsgaXNfYWN0aXZlPzogYm9vbGVhbjsgaXNfZGVsZXRlZD86IGJvb2xlYW4gfT4gfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFjbGllbnRzPy5sZW5ndGgpIHJldHVybiBmYWxzZVxuICByZXR1cm4gY2xpZW50cy5zb21lKGNsaWVudCA9PiBjbGllbnQuaXNfYWN0aXZlID09PSBmYWxzZSB8fCBjbGllbnQuaXNfZGVsZXRlZCA9PT0gdHJ1ZSlcbn1cblxuZXhwb3J0IHR5cGUgS25vd2xlZGdlVXBsb2FkT3V0Y29tZSA9ICdwZW5kaW5nJyB8ICdlcnJvcicgfCAnY29tcGxldGUnXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlS25vd2xlZGdlVXBsb2FkT3V0Y29tZSA9IChcbiAga25vd2xlZGdlOiBQaWNrPEF0dGFjaG1lbnRGaWxlLCAnc3RhdHVzJz5bXVxuKTogS25vd2xlZGdlVXBsb2FkT3V0Y29tZSB8IG51bGwgPT4ge1xuICBjb25zdCBoYXNQZW5kaW5nRmlsZXMgPSBrbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAncGVuZGluZycpXG4gIGNvbnN0IGhhc0Vycm9yRmlsZXMgPSBrbm93bGVkZ2Uuc29tZShmaWxlID0+IGZpbGUuc3RhdHVzID09PSAnZmFpbGVkJylcblxuICBpZiAoaGFzUGVuZGluZ0ZpbGVzKSByZXR1cm4gJ3BlbmRpbmcnXG4gIGlmIChoYXNFcnJvckZpbGVzKSByZXR1cm4gJ2Vycm9yJ1xuICBpZiAoa25vd2xlZGdlLmxlbmd0aCA+IDApIHJldHVybiAnY29tcGxldGUnXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCB0eXBlIEFibVNhdmVEaXNhYmxlZElucHV0ID0ge1xuICB2YWx1ZXM6IE1vZGFsVmFsdWVzXG4gIGluaXRpYWw6IE1vZGFsVmFsdWVzIHwgbnVsbFxuICBmaWxlQWN0aW9uczogQWJtRmlsZUFjdGlvbnNcbiAgaXNMb2FkaW5nPzogYm9vbGVhblxuICBpc0xvYWRpbmdLbm93bGVkZ2U/OiBib29sZWFuXG4gIGlzTG9hZGluZ0NyZWF0ZT86IGJvb2xlYW5cbiAgaXNMb2FkaW5nVXBkYXRlQWNjZXNzPzogYm9vbGVhblxuICBoYXNGaWxlRXJyb3JzPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgaXNBYm1TYXZlRGlzYWJsZWQgPSAoe1xuICB2YWx1ZXMsXG4gIGluaXRpYWwsXG4gIGZpbGVBY3Rpb25zLFxuICBpc0xvYWRpbmcgPSBmYWxzZSxcbiAgaXNMb2FkaW5nS25vd2xlZGdlID0gZmFsc2UsXG4gIGlzTG9hZGluZ0NyZWF0ZSA9IGZhbHNlLFxuICBpc0xvYWRpbmdVcGRhdGVBY2Nlc3MgPSBmYWxzZSxcbiAgaGFzRmlsZUVycm9ycyA9IGZhbHNlLFxufTogQWJtU2F2ZURpc2FibGVkSW5wdXQpOiBib29sZWFuID0+IHtcbiAgY29uc3QgdW5jaGFuZ2VkID0gQm9vbGVhbihpbml0aWFsICYmIGlzU2FtZUFnZW50TW9kYWxTbmFwc2hvdCh2YWx1ZXMsIGluaXRpYWwsIGZpbGVBY3Rpb25zKSlcblxuICByZXR1cm4gKFxuICAgICF2YWxpZGF0ZUZpZWxkVmFsdWVzKHZhbHVlcykgfHxcbiAgICB1bmNoYW5nZWQgfHxcbiAgICBpc0xvYWRpbmcgfHxcbiAgICBpc0xvYWRpbmdLbm93bGVkZ2UgfHxcbiAgICBpc0xvYWRpbmdDcmVhdGUgfHxcbiAgICBpc0xvYWRpbmdVcGRhdGVBY2Nlc3MgfHxcbiAgICBoYXNJbmFjdGl2ZUFjY2Vzc2liaWxpdHlDbGllbnRzKHZhbHVlcy5hY2Nlc3NpYmlsaXR5Py5jbGllbnRzKSB8fFxuICAgIGhhc0ZpbGVFcnJvcnNcbiAgKVxufVxuXG5leHBvcnQgdHlwZSBLbm93bGVkZ2VGaWxlU3RhdHVzVXBkYXRlID0ge1xuICBmaWxlbmFtZTogc3RyaW5nXG4gIHN0YXR1czogc3RyaW5nXG4gIGtub3dsZWRnZV9iYXNlX2lkPzogc3RyaW5nIHwgbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBhcHBseUtub3dsZWRnZUZpbGVTdGF0dXNVcGRhdGUgPSAoXG4gIGtub3dsZWRnZTogQXR0YWNobWVudEZpbGVbXSxcbiAgZmlsZVN0YXR1czogS25vd2xlZGdlRmlsZVN0YXR1c1VwZGF0ZVxuKTogQXR0YWNobWVudEZpbGVbXSA9PlxuICBrbm93bGVkZ2UubWFwKGZpbGUgPT4ge1xuICAgIGlmIChmaWxlLm5hbWUgIT09IGZpbGVTdGF0dXMuZmlsZW5hbWUpIHtcbiAgICAgIHJldHVybiBmaWxlXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZpbGUsXG4gICAgICBzdGF0dXM6IG5vcm1hbGl6ZUtub3dsZWRnZUF0dGFjaG1lbnRTdGF0dXMoZmlsZVN0YXR1cy5zdGF0dXMpLFxuICAgICAgaWQ6IGZpbGVTdGF0dXMua25vd2xlZGdlX2Jhc2VfaWQ/LnRvU3RyaW5nKCkgfHwgZmlsZS5pZCxcbiAgICB9XG4gIH0pXG5cbmV4cG9ydCBjb25zdCBzaG91bGRDb25maXJtQWJtQ2xvc2UgPSAoXG4gIGhhc1BlbmRpbmdDaGFuZ2VzOiBib29sZWFuLFxuICBzdWNjZXNzRmxhZ3M6IHsgY3JlYXRlPzogYm9vbGVhbjsgdXBkYXRlPzogYm9vbGVhbjsgZGVsZXRlPzogYm9vbGVhbiB9XG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFoYXNQZW5kaW5nQ2hhbmdlcykgcmV0dXJuIGZhbHNlXG4gIHJldHVybiAhKHN1Y2Nlc3NGbGFncy5jcmVhdGUgfHwgc3VjY2Vzc0ZsYWdzLnVwZGF0ZSB8fCBzdWNjZXNzRmxhZ3MuZGVsZXRlKVxufVxuXG5leHBvcnQgY29uc3QgQUJNX0FDQ0VTU19ERU5JRURfRVJST1IgPSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuXG5leHBvcnQgY29uc3QgaXNBYm1BY2Nlc3NEZW5pZWRFcnJvciA9IChlcnJvcjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4gZXJyb3IgPT09IEFCTV9BQ0NFU1NfREVOSUVEX0VSUk9SXG5cbmV4cG9ydCB0eXBlIEFibVVzZXJQZXJtaXNzaW9ucyA9IHtcbiAgY3JlYXRlPzogYm9vbGVhblxuICBlZGl0PzogYm9vbGVhblxuICBkZWxldGU/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCBjYW5SZW5kZXJBYm1BZ2VudE1vZGFsID0gKHBlcm1pc3Npb25zOiBBYm1Vc2VyUGVybWlzc2lvbnMgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKHBlcm1pc3Npb25zPy5jcmVhdGUgfHwgcGVybWlzc2lvbnM/LmVkaXQgfHwgcGVybWlzc2lvbnM/LmRlbGV0ZSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZENsb3NlQWJtT25CYWNrZHJvcENsaWNrID0gKFxuICB0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCxcbiAgY3VycmVudFRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsLFxuICBpc1Byb2Nlc3NpbmdGaWxlczogYm9vbGVhblxuKTogYm9vbGVhbiA9PiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQgJiYgIWlzUHJvY2Vzc2luZ0ZpbGVzXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlQWJtUHJvY2Vzc2luZ0tub3dsZWRnZUxhYmVsS2V5ID0gKGlzRWRpdGluZzogYm9vbGVhbik6IHN0cmluZyA9PlxuICBpc0VkaXRpbmcgPyAncHJvY2Vzc2luZ0tub3dsZWRnZS5kZXNjcmlwdGlvblVwZGF0ZScgOiAncHJvY2Vzc2luZ0tub3dsZWRnZS5kZXNjcmlwdGlvbkNyZWF0ZSdcblxuZXhwb3J0IHR5cGUgQWJtTW9kYWxJbml0aWFsU2VjdGlvbiA9ICdnZW5lcmFsJyB8ICdrbm93bGVkZ2UnIHwgJ2FjY2Vzc2liaWxpdHknXG5cbmNvbnN0IEFCTV9PUEVOX0lOSVRJQUxfU0VDVElPTlM6IHJlYWRvbmx5IEFibU1vZGFsSW5pdGlhbFNlY3Rpb25bXSA9IFsnZ2VuZXJhbCcsICdrbm93bGVkZ2UnLCAnYWNjZXNzaWJpbGl0eSddXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUGVuZGluZ0FibUluaXRpYWxTZWN0aW9uID0gKGluaXRpYWxTZWN0aW9uPzogc3RyaW5nIHwgbnVsbCk6IEFibU1vZGFsSW5pdGlhbFNlY3Rpb24gfCBudWxsID0+IHtcbiAgaWYgKGluaXRpYWxTZWN0aW9uICYmIChBQk1fT1BFTl9JTklUSUFMX1NFQ1RJT05TIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyhpbml0aWFsU2VjdGlvbikpIHtcbiAgICByZXR1cm4gaW5pdGlhbFNlY3Rpb24gYXMgQWJtTW9kYWxJbml0aWFsU2VjdGlvblxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGREZW55QWJtRWRpdFdpdGhvdXRNdWx0aUFnZW50cyA9IChpc0VkaXRpbmc6IGJvb2xlYW4sIGhhc011bHRpQWdlbnRzQWNjZXNzOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKGlzRWRpdGluZyAmJiAhaGFzTXVsdGlBZ2VudHNBY2Nlc3MpXG5cbmV4cG9ydCB0eXBlIEFibUFjY2Vzc1VwZGF0ZUNvbnRleHQgPSB7XG4gIGlzRnJvbUNyZWF0aW9uOiBib29sZWFuXG4gIGlzRnJvbUVkaXRpbmc6IGJvb2xlYW5cbiAgaGFzQWN0aW9uRmlsZXM6IGJvb2xlYW5cbiAgb3BlcmF0aW9uVHlwZTogJ2NyZWF0ZScgfCAndXBkYXRlJyB8IG51bGxcbiAgaGFzQmVlbkNhbGxlZD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1DcmVhdGVBY2Nlc3NVcGRhdGVDb250ZXh0ID0gKFxuICBhY2Nlc3NUeXBlOiBNb2RhbFZhbHVlc1snYWNjZXNzaWJpbGl0eSddWydhY2Nlc3NUeXBlJ11cbik6IEFibUFjY2Vzc1VwZGF0ZUNvbnRleHQgPT4gKHtcbiAgaXNGcm9tQ3JlYXRpb246IHRydWUsXG4gIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICBoYXNBY3Rpb25GaWxlczogYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknLFxuICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgaGFzQmVlbkNhbGxlZDogZmFsc2UsXG59KVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU3luY0FibUNsaWVudEFjY2Vzc09uQ3JlYXRlID0gKGFjY2Vzc1R5cGU6IE1vZGFsVmFsdWVzWydhY2Nlc3NpYmlsaXR5J11bJ2FjY2Vzc1R5cGUnXSk6IGJvb2xlYW4gPT5cbiAgYWNjZXNzVHlwZSAhPT0gJ2NvbXBhbnknXG5cbmV4cG9ydCBjb25zdCBidWlsZEFibUZhdm9yaXRlVG9nZ2xlQWdlbnRzID0gPFQgZXh0ZW5kcyB7IGlzX2Zhdm9yaXRlPzogYm9vbGVhbiB9PihcbiAgY3JlYXRlZEFnZW50OiBUXG4pOiB7IGxpc3RBZ2VudDogVDsgdG9nZ2xlQWdlbnQ6IFQgfSA9PiAoe1xuICBsaXN0QWdlbnQ6IHsgLi4uY3JlYXRlZEFnZW50LCBpc19mYXZvcml0ZTogdHJ1ZSB9LFxuICB0b2dnbGVBZ2VudDogeyAuLi5jcmVhdGVkQWdlbnQsIGlzX2Zhdm9yaXRlOiBmYWxzZSB9LFxufSlcblxuZXhwb3J0IHR5cGUgQWJtQ3JlYXRlRmlsZUFjdGlvbnNTbmFwc2hvdCA9IHtcbiAgdG9EZWxldGU6IHVua25vd25bXVxuICB0b1VwbG9hZDogdW5rbm93bltdXG59XG5cbmV4cG9ydCB0eXBlIEFibUNyZWF0ZVN1Y2Nlc3NQbGFuID0gJ2RlbGV0ZUFuZENyZWF0ZScgfCAnZGVsZXRlT25seScgfCAndXBsb2FkT25seScgfCAnYWNjZXNzT25seSdcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1DcmVhdGVTdWNjZXNzUGxhbiA9IChhY3Rpb25zOiBBYm1DcmVhdGVGaWxlQWN0aW9uc1NuYXBzaG90KTogQWJtQ3JlYXRlU3VjY2Vzc1BsYW4gPT4ge1xuICBjb25zdCBoYXNEZWxldGUgPSBhY3Rpb25zLnRvRGVsZXRlLmxlbmd0aCA+IDBcbiAgY29uc3QgaGFzVXBsb2FkID0gYWN0aW9ucy50b1VwbG9hZC5sZW5ndGggPiAwXG4gIGlmIChoYXNEZWxldGUgJiYgaGFzVXBsb2FkKSByZXR1cm4gJ2RlbGV0ZUFuZENyZWF0ZSdcbiAgaWYgKGhhc0RlbGV0ZSkgcmV0dXJuICdkZWxldGVPbmx5J1xuICBpZiAoaGFzVXBsb2FkKSByZXR1cm4gJ3VwbG9hZE9ubHknXG4gIHJldHVybiAnYWNjZXNzT25seSdcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dQcm9jZXNzRmlsZXNGb3JDcmVhdGVQbGFuID0gKHBsYW46IEFibUNyZWF0ZVN1Y2Nlc3NQbGFuKTogYm9vbGVhbiA9PiBwbGFuICE9PSAnYWNjZXNzT25seSdcblxuZXhwb3J0IHR5cGUgQWJtVXBkYXRlU3VjY2Vzc1BsYW4gPSAnZGVsZXRlQW5kQ3JlYXRlJyB8ICdkZWxldGVPbmx5JyB8ICd1cGxvYWRPbmx5JyB8ICdhY2Nlc3NPbmx5JyB8ICdnZW5lcmFsT25seSdcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1VcGRhdGVTdWNjZXNzUGxhbiA9IChcbiAgYWN0aW9uczogQWJtQ3JlYXRlRmlsZUFjdGlvbnNTbmFwc2hvdCxcbiAgYWNjZXNzaWJpbGl0eUNoYW5nZWQ6IGJvb2xlYW5cbik6IEFibVVwZGF0ZVN1Y2Nlc3NQbGFuID0+IHtcbiAgY29uc3QgY3JlYXRlUGxhbiA9IHJlc29sdmVBYm1DcmVhdGVTdWNjZXNzUGxhbihhY3Rpb25zKVxuICBpZiAoY3JlYXRlUGxhbiAhPT0gJ2FjY2Vzc09ubHknKSB7XG4gICAgcmV0dXJuIGNyZWF0ZVBsYW5cbiAgfVxuICBpZiAoYWNjZXNzaWJpbGl0eUNoYW5nZWQpIHtcbiAgICByZXR1cm4gJ2FjY2Vzc09ubHknXG4gIH1cbiAgcmV0dXJuICdnZW5lcmFsT25seSdcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1VcGRhdGVBY2Nlc3NVcGRhdGVDb250ZXh0ID0gKCk6IEFibUFjY2Vzc1VwZGF0ZUNvbnRleHQgPT4gKHtcbiAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICBpc0Zyb21FZGl0aW5nOiB0cnVlLFxuICBoYXNBY3Rpb25GaWxlczogdHJ1ZSxcbiAgb3BlcmF0aW9uVHlwZTogJ3VwZGF0ZScsXG4gIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxufSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1VcGRhdGVBY2Nlc3NPbmx5Q29udGV4dCA9IChjdXJyZW50OiBBYm1BY2Nlc3NVcGRhdGVDb250ZXh0KTogQWJtQWNjZXNzVXBkYXRlQ29udGV4dCB8IG51bGwgPT4ge1xuICBpZiAoY3VycmVudC5oYXNCZWVuQ2FsbGVkIHx8IGN1cnJlbnQuaGFzQWN0aW9uRmlsZXMpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHJldHVybiB7XG4gICAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICAgIGlzRnJvbUVkaXRpbmc6IHRydWUsXG4gICAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICAgIG9wZXJhdGlvblR5cGU6ICd1cGRhdGUnLFxuICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICB9XG59XG5cbmV4cG9ydCB0eXBlIEFibUNyZWF0ZUFjY2Vzc09ubHlEZWNpc2lvbiA9IHtcbiAgbmV4dENvbnRleHQ6IEFibUFjY2Vzc1VwZGF0ZUNvbnRleHRcbiAgc2hvdWxkQ2FsbEFjY2Vzc0NsaWVudDogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibUNyZWF0ZUFjY2Vzc09ubHlEZWNpc2lvbiA9IChcbiAgY3VycmVudDogQWJtQWNjZXNzVXBkYXRlQ29udGV4dCxcbiAgYWNjZXNzVHlwZTogTW9kYWxWYWx1ZXNbJ2FjY2Vzc2liaWxpdHknXVsnYWNjZXNzVHlwZSddXG4pOiBBYm1DcmVhdGVBY2Nlc3NPbmx5RGVjaXNpb24gPT4ge1xuICBpZiAoIXNob3VsZFN5bmNBYm1DbGllbnRBY2Nlc3NPbkNyZWF0ZShhY2Nlc3NUeXBlKSkge1xuICAgIHJldHVybiB7IG5leHRDb250ZXh0OiBjdXJyZW50LCBzaG91bGRDYWxsQWNjZXNzQ2xpZW50OiBmYWxzZSB9XG4gIH1cbiAgaWYgKGN1cnJlbnQuaGFzQmVlbkNhbGxlZCkge1xuICAgIHJldHVybiB7IG5leHRDb250ZXh0OiBjdXJyZW50LCBzaG91bGRDYWxsQWNjZXNzQ2xpZW50OiBmYWxzZSB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5leHRDb250ZXh0OiB7XG4gICAgICBpc0Zyb21DcmVhdGlvbjogdHJ1ZSxcbiAgICAgIGlzRnJvbUVkaXRpbmc6IGZhbHNlLFxuICAgICAgaGFzQWN0aW9uRmlsZXM6IGN1cnJlbnQuaGFzQWN0aW9uRmlsZXMgfHwgZmFsc2UsXG4gICAgICBvcGVyYXRpb25UeXBlOiAnY3JlYXRlJyxcbiAgICAgIGhhc0JlZW5DYWxsZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgc2hvdWxkQ2FsbEFjY2Vzc0NsaWVudDogdHJ1ZSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVzZXRBYm1BY2Nlc3NVcGRhdGVDb250ZXh0ID0gKCk6IEFibUFjY2Vzc1VwZGF0ZUNvbnRleHQgPT4gKHtcbiAgaXNGcm9tQ3JlYXRpb246IGZhbHNlLFxuICBpc0Zyb21FZGl0aW5nOiBmYWxzZSxcbiAgaGFzQWN0aW9uRmlsZXM6IGZhbHNlLFxuICBvcGVyYXRpb25UeXBlOiBudWxsLFxuICBoYXNCZWVuQ2FsbGVkOiBmYWxzZSxcbn0pXG5cbmV4cG9ydCB0eXBlIEFibVVwZGF0ZUZpbmFsaXplSW5wdXQgPSB7XG4gIGhhc1BlbmRpbmdGaWxlczogYm9vbGVhblxuICBpc1Nob3dQcm9jZXNzRmlsZXM6IGJvb2xlYW5cbiAgdG9VcGxvYWRDb3VudDogbnVtYmVyXG4gIGFjY2Vzc0hhc0FjdGlvbkZpbGVzOiBib29sZWFuXG4gIHN1Y2Nlc3NVcGRhdGVBY2Nlc3M6IGJvb2xlYW5cbiAgcHJvY2Vzc0ZpbGVzVGltZWRPdXQ6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZEZpbmFsaXplQWJtVXBkYXRlV2l0aG91dFBlbmRpbmdXb3JrID0gKGlucHV0OiBBYm1VcGRhdGVGaW5hbGl6ZUlucHV0KTogYm9vbGVhbiA9PlxuICAhaW5wdXQuaGFzUGVuZGluZ0ZpbGVzICYmXG4gICFpbnB1dC5pc1Nob3dQcm9jZXNzRmlsZXMgJiZcbiAgaW5wdXQudG9VcGxvYWRDb3VudCA9PT0gMCAmJlxuICAhaW5wdXQuYWNjZXNzSGFzQWN0aW9uRmlsZXMgJiZcbiAgIWlucHV0LnN1Y2Nlc3NVcGRhdGVBY2Nlc3MgJiZcbiAgIWlucHV0LnByb2Nlc3NGaWxlc1RpbWVkT3V0XG5cbmV4cG9ydCB0eXBlIEtub3dsZWRnZVdzQ29tcGxldGlvbkVmZmVjdHMgPSB7XG4gIGNsb3NlUHJvY2Vzc0ZpbGVzOiBib29sZWFuXG4gIGluY3JlbWVudEZpbGVzUHJvY2Vzc2VkOiBib29sZWFuXG4gIG1hcmtGaWxlc0ZpbmlzaGVkRm9yQ3JlYXRlOiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlS25vd2xlZGdlV3NDb21wbGV0aW9uRWZmZWN0cyA9IChcbiAgdXBsb2FkT3V0Y29tZTogS25vd2xlZGdlVXBsb2FkT3V0Y29tZSB8IG51bGwsXG4gIGNvbnRleHQ6IFBpY2s8QWJtQWNjZXNzVXBkYXRlQ29udGV4dCwgJ2hhc0FjdGlvbkZpbGVzJyB8ICdvcGVyYXRpb25UeXBlJz4sXG4gIGFjY2Vzc0hhbmRsZWQ6IGJvb2xlYW4sXG4gIGZpbGVzRmluaXNoZWQ6IGJvb2xlYW5cbik6IEtub3dsZWRnZVdzQ29tcGxldGlvbkVmZmVjdHMgfCBudWxsID0+IHtcbiAgaWYgKHVwbG9hZE91dGNvbWUgPT09ICdlcnJvcicgfHwgdXBsb2FkT3V0Y29tZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgIGNvbnN0IGluY3JlbWVudEZpbGVzUHJvY2Vzc2VkID1cbiAgICAgIHVwbG9hZE91dGNvbWUgPT09ICdjb21wbGV0ZScgJiZcbiAgICAgICgoY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJiBhY2Nlc3NIYW5kbGVkKSB8fFxuICAgICAgICAoY29udGV4dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJiAhY29udGV4dC5oYXNBY3Rpb25GaWxlcyAmJiAhZmlsZXNGaW5pc2hlZCkpXG5cbiAgICBjb25zdCBtYXJrRmlsZXNGaW5pc2hlZEZvckNyZWF0ZSA9XG4gICAgICB1cGxvYWRPdXRjb21lID09PSAnY29tcGxldGUnICYmIGNvbnRleHQub3BlcmF0aW9uVHlwZSA9PT0gJ2NyZWF0ZScgJiYgIWNvbnRleHQuaGFzQWN0aW9uRmlsZXMgJiYgIWZpbGVzRmluaXNoZWRcblxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZVByb2Nlc3NGaWxlczogdHJ1ZSxcbiAgICAgIGluY3JlbWVudEZpbGVzUHJvY2Vzc2VkLFxuICAgICAgbWFya0ZpbGVzRmluaXNoZWRGb3JDcmVhdGUsXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1Lbm93bGVkZ2VFcnJvck1lc3NhZ2VLZXkgPSAoaXNFZGl0aW5nOiBib29sZWFuKTogc3RyaW5nID0+XG4gIGlzRWRpdGluZyA/ICdjb25maXJtQWdlbnRVcGRhdGVkV2l0aEZpbGVzRXJyb3InIDogJ2NvbmZpcm1BZ2VudFdpdGhGaWxlc0Vycm9yJ1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQmxvY2tLbm93bGVkZ2VEZWxldGVTdWNjZXNzQ2xvc2UgPSAoaW5wdXQ6IHtcbiAgaGFzUGVuZGluZ0ZpbGVzOiBib29sZWFuXG4gIGlzU2hvd1Byb2Nlc3NGaWxlczogYm9vbGVhblxuICB0b1VwbG9hZENvdW50OiBudW1iZXJcbiAgcHJvY2Vzc0ZpbGVzVGltZWRPdXQ6IGJvb2xlYW5cbn0pOiBib29sZWFuID0+XG4gIGlucHV0Lmhhc1BlbmRpbmdGaWxlcyB8fCBpbnB1dC5pc1Nob3dQcm9jZXNzRmlsZXMgfHwgaW5wdXQudG9VcGxvYWRDb3VudCA+IDAgfHwgaW5wdXQucHJvY2Vzc0ZpbGVzVGltZWRPdXRcblxuZXhwb3J0IGNvbnN0IHNob3VsZERlZmVyQWNjZXNzVXBkYXRlVW50aWxGaWxlc0NvbXBsZXRlID0gKFxuICBjb250ZXh0OiBQaWNrPEFibUFjY2Vzc1VwZGF0ZUNvbnRleHQsICdoYXNBY3Rpb25GaWxlcyc+LFxuICBoYXNQZW5kaW5nRmlsZXM6IGJvb2xlYW4sXG4gIGlzU2hvd1Byb2Nlc3NGaWxlczogYm9vbGVhblxuKTogYm9vbGVhbiA9PiBjb250ZXh0Lmhhc0FjdGlvbkZpbGVzICYmIChoYXNQZW5kaW5nRmlsZXMgfHwgaXNTaG93UHJvY2Vzc0ZpbGVzKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2xvc2VDcmVhdGVBZnRlcktub3dsZWRnZVdpdGhvdXRBY2Nlc3MgPSAoaW5wdXQ6IHtcbiAgb3BlcmF0aW9uVHlwZTogQWJtQWNjZXNzVXBkYXRlQ29udGV4dFsnb3BlcmF0aW9uVHlwZSddXG4gIGhhc0FjdGlvbkZpbGVzOiBib29sZWFuXG4gIGZpbGVzRmluaXNoZWQ6IGJvb2xlYW5cbiAgaGFzU3VjY2Vzc0NyZWF0ZTogYm9vbGVhblxuICBoYXNQZW5kaW5nRmlsZXM6IGJvb2xlYW5cbiAgaXNTaG93UHJvY2Vzc0ZpbGVzOiBib29sZWFuXG59KTogYm9vbGVhbiA9PlxuICBpbnB1dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICAhaW5wdXQuaGFzQWN0aW9uRmlsZXMgJiZcbiAgaW5wdXQuZmlsZXNGaW5pc2hlZCAmJlxuICBpbnB1dC5oYXNTdWNjZXNzQ3JlYXRlICYmXG4gICFpbnB1dC5oYXNQZW5kaW5nRmlsZXMgJiZcbiAgIWlucHV0LmlzU2hvd1Byb2Nlc3NGaWxlc1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2xvc2VDcmVhdGVBZnRlcktub3dsZWRnZVdpdGhBY2Nlc3MgPSAoaW5wdXQ6IHtcbiAgb3BlcmF0aW9uVHlwZTogQWJtQWNjZXNzVXBkYXRlQ29udGV4dFsnb3BlcmF0aW9uVHlwZSddXG4gIGhhc0FjdGlvbkZpbGVzOiBib29sZWFuXG4gIGFjY2Vzc0hhbmRsZWQ6IGJvb2xlYW5cbiAgaGFzU3VjY2Vzc0NyZWF0ZTogYm9vbGVhblxuICBoYXNQZW5kaW5nRmlsZXM6IGJvb2xlYW5cbiAgaXNTaG93UHJvY2Vzc0ZpbGVzOiBib29sZWFuXG59KTogYm9vbGVhbiA9PlxuICBpbnB1dC5vcGVyYXRpb25UeXBlID09PSAnY3JlYXRlJyAmJlxuICBpbnB1dC5oYXNBY3Rpb25GaWxlcyAmJlxuICBpbnB1dC5hY2Nlc3NIYW5kbGVkICYmXG4gIGlucHV0Lmhhc1N1Y2Nlc3NDcmVhdGUgJiZcbiAgIWlucHV0Lmhhc1BlbmRpbmdGaWxlcyAmJlxuICAhaW5wdXQuaXNTaG93UHJvY2Vzc0ZpbGVzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRBcHBseVBlbmRpbmdTZWN0aW9uQWZ0ZXJPcGVuID0gKFxuICBpc0VkaXRpbmc6IGJvb2xlYW4sXG4gIHBlbmRpbmdTZWN0aW9uOiBBYm1Nb2RhbEluaXRpYWxTZWN0aW9uIHwgbnVsbFxuKTogYm9vbGVhbiA9PiBCb29sZWFuKHBlbmRpbmdTZWN0aW9uICYmICFpc0VkaXRpbmcpXG5cbmV4cG9ydCB0eXBlIEFibU9wZW5Nb2RhbExvYWRBY3Rpb24gPSAnZGVueV9lZGl0JyB8ICdwcmVmZXRjaF9lZGl0JyB8ICdmZXRjaF9lZGl0JyB8ICdhcHBseV9jcmVhdGVfdmFsdWVzJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibU9wZW5Nb2RhbExvYWRBY3Rpb24gPSAocGFyYW1zOiB7XG4gIGlzRWRpdGluZz86IGJvb2xlYW5cbiAgaGFzTXVsdGlBZ2VudHNBY2Nlc3M6IGJvb2xlYW5cbiAgaGFzUHJlZmV0Y2hlZEFnZW50OiBib29sZWFuXG59KTogQWJtT3Blbk1vZGFsTG9hZEFjdGlvbiA9PiB7XG4gIGlmICghcGFyYW1zLmlzRWRpdGluZykge1xuICAgIHJldHVybiAnYXBwbHlfY3JlYXRlX3ZhbHVlcydcbiAgfVxuICBpZiAoc2hvdWxkRGVueUFibUVkaXRXaXRob3V0TXVsdGlBZ2VudHModHJ1ZSwgcGFyYW1zLmhhc011bHRpQWdlbnRzQWNjZXNzKSkge1xuICAgIHJldHVybiAnZGVueV9lZGl0J1xuICB9XG4gIGlmIChwYXJhbXMuaGFzUHJlZmV0Y2hlZEFnZW50KSB7XG4gICAgcmV0dXJuICdwcmVmZXRjaF9lZGl0J1xuICB9XG4gIHJldHVybiAnZmV0Y2hfZWRpdCdcbn1cblxuZXhwb3J0IGNvbnN0IGNhbkFwcGx5QWJtRWRpdGluZ0FnZW50RGV0YWlsID0gKHNvdXJjZTogeyB0eXBlPzogc3RyaW5nIH0sIGhhc011bHRpQWdlbnRzQWNjZXNzOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICBzb3VyY2UudHlwZSA9PT0gJ2N1c3RvbScgJiYgaGFzTXVsdGlBZ2VudHNBY2Nlc3NcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNldERlZmF1bHRBaU1vZGVsRm9yTmV3QWdlbnQgPSAocGFyYW1zOiB7XG4gIGlzTG9hZGluZzogYm9vbGVhblxuICBhZ2VudExvYWRpbmc6IGJvb2xlYW5cbiAgaGFzQWdlbnRCeUlkOiBib29sZWFuXG4gIGlzRWRpdGluZzogYm9vbGVhblxufSk6IGJvb2xlYW4gPT4gIXBhcmFtcy5pc0xvYWRpbmcgJiYgIXBhcmFtcy5hZ2VudExvYWRpbmcgJiYgIXBhcmFtcy5oYXNBZ2VudEJ5SWQgJiYgIXBhcmFtcy5pc0VkaXRpbmdcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNraXBBYm1Db25maXJtV2l0aG91dE11bHRpQWdlbnRzID0gKGhhc011bHRpQWdlbnRzQWNjZXNzOiBib29sZWFuKTogYm9vbGVhbiA9PiAhaGFzTXVsdGlBZ2VudHNBY2Nlc3NcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1EcmFmdEZhdm9yaXRlVmFsdWUgPSAoY3VycmVudElzRmF2b3JpdGU6IGJvb2xlYW4pOiBib29sZWFuID0+ICFjdXJyZW50SXNGYXZvcml0ZVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibUNyZWF0ZUZhdm9yaXRlQWdlbnRzID0gPFQgZXh0ZW5kcyB7IGlzX2Zhdm9yaXRlPzogYm9vbGVhbiB9PihcbiAgY3JlYXRlZEFnZW50OiBULFxuICBtYXJrRmF2b3JpdGU6IGJvb2xlYW5cbik6IHsgbGlzdEFnZW50OiBUOyB0b2dnbGVBZ2VudDogVCB8IG51bGwgfSA9PiB7XG4gIGlmICghbWFya0Zhdm9yaXRlKSB7XG4gICAgcmV0dXJuIHsgbGlzdEFnZW50OiBjcmVhdGVkQWdlbnQsIHRvZ2dsZUFnZW50OiBudWxsIH1cbiAgfVxuXG4gIGNvbnN0IHsgbGlzdEFnZW50LCB0b2dnbGVBZ2VudCB9ID0gYnVpbGRBYm1GYXZvcml0ZVRvZ2dsZUFnZW50cyhjcmVhdGVkQWdlbnQpXG4gIHJldHVybiB7IGxpc3RBZ2VudCwgdG9nZ2xlQWdlbnQgfVxufVxuXG5leHBvcnQgdHlwZSBBYm1Lbm93bGVkZ2VGaWxlQWN0aW9ucyA9IHtcbiAgdG9VcGxvYWQ6IEF0dGFjaG1lbnRGaWxlW11cbiAgdG9EZWxldGU6IEF0dGFjaG1lbnRGaWxlW11cbn1cblxuZXhwb3J0IGNvbnN0IGFwcGx5QWJtS25vd2xlZGdlRmlsZUFjdGlvbnMgPSAoXG4gIHZhbHVlOiBBdHRhY2htZW50RmlsZVtdIHwgdW5kZWZpbmVkLFxuICBkZWxldGVLbm93bGVkZ2U6IGJvb2xlYW4sXG4gIGN1cnJlbnRLbm93bGVkZ2U6IEF0dGFjaG1lbnRGaWxlW10sXG4gIGN1cnJlbnRBY3Rpb25zOiBBYm1Lbm93bGVkZ2VGaWxlQWN0aW9uc1xuKTogQWJtS25vd2xlZGdlRmlsZUFjdGlvbnMgPT4ge1xuICBpZiAoIWRlbGV0ZUtub3dsZWRnZSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jdXJyZW50QWN0aW9ucyxcbiAgICAgIHRvVXBsb2FkOiBbLi4uY3VycmVudEFjdGlvbnMudG9VcGxvYWQsIC4uLih2YWx1ZSB8fCBbXSldLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGZpbGVzUHJldklkcyA9IHZhbHVlPy5sZW5ndGggPyBuZXcgU2V0KHZhbHVlLm1hcChmaWxlID0+IGZpbGUuaWQpKSA6IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGNvbnN0IG5ld0ZpbGVzID0gY3VycmVudEtub3dsZWRnZS5maWx0ZXIoZmlsZSA9PiAhZmlsZXNQcmV2SWRzLmhhcyhmaWxlLmlkKSAmJiBmaWxlLnN0YXR1cyAhPT0gJ3N0YXJ0ZWQnKVxuICBsZXQgbmV4dFRvVXBsb2FkID0gY3VycmVudEFjdGlvbnMudG9VcGxvYWRcblxuICBpZiAoIW5ld0ZpbGVzLmxlbmd0aCAmJiBjdXJyZW50QWN0aW9ucy50b1VwbG9hZC5sZW5ndGgpIHtcbiAgICBjb25zdCB2YWx1ZUlkcyA9IG5ldyBTZXQodmFsdWU/Lm1hcChmaWxlID0+IGZpbGUuaWQpID8/IFtdKVxuICAgIG5leHRUb1VwbG9hZCA9IGN1cnJlbnRBY3Rpb25zLnRvVXBsb2FkLmZpbHRlcihmaWxlID0+IHZhbHVlSWRzLmhhcyhmaWxlLmlkKSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9VcGxvYWQ6IG5leHRUb1VwbG9hZCxcbiAgICB0b0RlbGV0ZTogWy4uLmN1cnJlbnRBY3Rpb25zLnRvRGVsZXRlLCAuLi5uZXdGaWxlc10sXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IG1lcmdlQWJtQWdlbnRWYWx1ZXNCeUtleSA9IChcbiAgcHJldjogTW9kYWxWYWx1ZXMsXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbiAgZGVsZXRlS25vd2xlZGdlOiBib29sZWFuXG4pOiBNb2RhbFZhbHVlcyA9PiB7XG4gIGlmIChrZXkgPT09ICdrbm93bGVkZ2UnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBrbm93bGVkZ2U6IGRlbGV0ZUtub3dsZWRnZVxuICAgICAgICA/ICh2YWx1ZSBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICA6IFsuLi4ocHJldi5rbm93bGVkZ2UgfHwgW10pLCAuLi4oKHZhbHVlIGFzIEF0dGFjaG1lbnRGaWxlW10pIHx8IFtdKV0sXG4gICAgfVxuICB9XG5cbiAgaWYgKGtleSA9PT0gJ2FjY2Vzc2liaWxpdHknKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBhY2Nlc3NpYmlsaXR5OiB2YWx1ZSBhcyBNb2RhbFZhbHVlc1snYWNjZXNzaWJpbGl0eSddLFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4ucHJldixcbiAgICBnZW5lcmFsOiB7XG4gICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUnVuQWJtQ3JlYXRlU3VjY2Vzc0hhbmRsZXIgPSAoXG4gIHN1Y2Nlc3NDcmVhdGVJZDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBpc0xvYWRpbmdDcmVhdGU6IGJvb2xlYW4sXG4gIGxhc3RIYW5kbGVkQ3JlYXRlSWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGxcbik6IGJvb2xlYW4gPT4gQm9vbGVhbihzdWNjZXNzQ3JlYXRlSWQgJiYgIWlzTG9hZGluZ0NyZWF0ZSAmJiBsYXN0SGFuZGxlZENyZWF0ZUlkICE9PSBzdWNjZXNzQ3JlYXRlSWQpXG5cbmV4cG9ydCBjb25zdCBtZXJnZUFibU9wZW5BZ2VudFZhbHVlcyA9IChpbml0aWFsVmFsdWVzOiBNb2RhbFZhbHVlcywgaW5jb21pbmc/OiBQYXJ0aWFsPE1vZGFsVmFsdWVzPik6IE1vZGFsVmFsdWVzID0+IHtcbiAgaWYgKCFpbmNvbWluZykge1xuICAgIHJldHVybiBpbml0aWFsVmFsdWVzXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmluaXRpYWxWYWx1ZXMsXG4gICAgLi4uaW5jb21pbmcsXG4gICAgZ2VuZXJhbDoge1xuICAgICAgLi4uaW5pdGlhbFZhbHVlcy5nZW5lcmFsLFxuICAgICAgLi4uKGluY29taW5nLmdlbmVyYWwgfHwge30pLFxuICAgIH0sXG4gICAgYWNjZXNzaWJpbGl0eToge1xuICAgICAgLi4uaW5pdGlhbFZhbHVlcy5hY2Nlc3NpYmlsaXR5LFxuICAgICAgLi4uKGluY29taW5nLmFjY2Vzc2liaWxpdHkgfHwge30pLFxuICAgIH0sXG4gICAga25vd2xlZGdlOiBpbmNvbWluZy5rbm93bGVkZ2UgfHwgW10sXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1DcmVhdGVLbm93bGVkZ2VIYW5kbGVyID0gKFxuICBwbGFuOiBBYm1DcmVhdGVTdWNjZXNzUGxhblxuKTogJ2RlbGV0ZUFuZENyZWF0ZScgfCAnZGVsZXRlT25seScgfCAndXBsb2FkT25seScgfCBudWxsID0+IHtcbiAgaWYgKHBsYW4gPT09ICdkZWxldGVBbmRDcmVhdGUnKSByZXR1cm4gJ2RlbGV0ZUFuZENyZWF0ZSdcbiAgaWYgKHBsYW4gPT09ICdkZWxldGVPbmx5JykgcmV0dXJuICdkZWxldGVPbmx5J1xuICBpZiAocGxhbiA9PT0gJ3VwbG9hZE9ubHknKSByZXR1cm4gJ3VwbG9hZE9ubHknXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZXBlYXREZWxldGVLbm93bGVkZ2VzT25DcmVhdGUgPSAocGxhbjogQWJtQ3JlYXRlU3VjY2Vzc1BsYW4pOiBib29sZWFuID0+IHBsYW4gPT09ICdkZWxldGVPbmx5J1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkRW5xdWV1ZUFibUNyZWF0ZUZhdm9yaXRlVG9nZ2xlID0gKHRvZ2dsZUFnZW50OiB1bmtub3duKTogYm9vbGVhbiA9PiBCb29sZWFuKHRvZ2dsZUFnZW50KVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkSGFuZGxlQWJtQ3JlYXRlQWNjZXNzT25seUNsaWVudCA9IChkZWNpc2lvbjogQWJtQ3JlYXRlQWNjZXNzT25seURlY2lzaW9uKTogYm9vbGVhbiA9PlxuICBkZWNpc2lvbi5zaG91bGRDYWxsQWNjZXNzQ2xpZW50XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJbml0aWFsQWJtTW9kYWxWYWx1ZXMgPSAoKTogTW9kYWxWYWx1ZXMgPT4gKHtcbiAgaXNFZGl0aW5nOiBmYWxzZSxcbiAga25vd2xlZGdlOiBbXSxcbiAgZ2VuZXJhbDoge1xuICAgIG5hbWU6ICcnLFxuICAgIGVtb2ppOiAnJyxcbiAgICBpbnRyb2R1Y3Rpb246ICcnLFxuICAgIGlucHV0UGxhY2Vob2xkZXI6ICcnLFxuICAgIGlzQWN0aXZlOiBmYWxzZSxcbiAgICBhaU1vZGVsOiBudWxsLFxuICAgIGlkOiBudWxsLFxuICAgIHVzZXJQcm9tcHQ6IG51bGwsXG4gICAga25vd2xlZGdlQmFzZXM6IFtdLFxuICAgIGlzX2Zhdm9yaXRlOiBmYWxzZSxcbiAgfSxcbiAgYWNjZXNzaWJpbGl0eToge1xuICAgIGFjY2Vzc1R5cGU6ICdjb21wYW55JyxcbiAgICBjbGllbnRzOiBudWxsLFxuICAgIGNvckFjY2VzczogREVGQVVMVF9DT1JfQUNDRVNTLFxuICB9LFxufSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZFByb2Nlc3NLbm93bGVkZ2VXc1N0YXR1cyA9IChzdGF0dXM6IHN0cmluZyk6IGJvb2xlYW4gPT4gc3RhdHVzID09PSAnZG9uZScgfHwgc3RhdHVzID09PSAnZmFpbGVkJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibUtub3dsZWRnZVdzQ2hhbm5lbCA9IChcbiAgYWdlbnRCeUlkOiB7IGlkPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgc3VjY2Vzc0NyZWF0ZUlkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgYWdlbnRJZCA9IGFnZW50QnlJZD8uaWQgPz8gc3VjY2Vzc0NyZWF0ZUlkXG4gIHJldHVybiBhZ2VudElkICE9IG51bGwgPyBga25vd2xlZGdlLWJhc2Uuc3RhdHVzOiR7YWdlbnRJZH1gIDogbnVsbFxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibUZhdm9yaXRlVG9vbHRpcEtleSA9IChcbiAgaXNGYXZvcml0ZTogYm9vbGVhblxuKTogJ2dlbmVyYWxTZWN0aW9uLnJlbW92ZUZhdm9yaXRlJyB8ICdnZW5lcmFsU2VjdGlvbi5hZGRGYXZvcml0ZScgPT5cbiAgaXNGYXZvcml0ZSA/ICdnZW5lcmFsU2VjdGlvbi5yZW1vdmVGYXZvcml0ZScgOiAnZ2VuZXJhbFNlY3Rpb24uYWRkRmF2b3JpdGUnXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTZWxlY3RBZ2VudEFmdGVyRGVsZXRlID0gKFxuICBjdXJyZW50U2VsZWN0ZWRBZ2VudElkOiBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLFxuICBkZWxldGVkQWdlbnRJZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PlxuICBjdXJyZW50U2VsZWN0ZWRBZ2VudElkICE9IG51bGwgJiYgZGVsZXRlZEFnZW50SWQgIT0gbnVsbCAmJiBTdHJpbmcoY3VycmVudFNlbGVjdGVkQWdlbnRJZCkgPT09IFN0cmluZyhkZWxldGVkQWdlbnRJZClcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJ1bkFibVByb2Nlc3NGaWxlc1RpbWVvdXQgPSAoaGFzUGVuZGluZ0ZpbGVzOiBib29sZWFuLCBpc1Nob3dQcm9jZXNzRmlsZXM6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gIGhhc1BlbmRpbmdGaWxlcyB8fCBpc1Nob3dQcm9jZXNzRmlsZXNcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1Qcm9jZXNzRmlsZXNUaW1lb3V0U3VjY2Vzc0tleSA9IChcbiAgaXNFZGl0aW5nOiBib29sZWFuXG4pOiAnY29uZmlybUFnZW50VXBkYXRlZCcgfCAnY29uZmlybUFnZW50Q3JlYXRlZCcgPT4gKGlzRWRpdGluZyA/ICdjb25maXJtQWdlbnRVcGRhdGVkJyA6ICdjb25maXJtQWdlbnRDcmVhdGVkJylcblxuZXhwb3J0IGNvbnN0IHNob3VsZFN5bmNTZWxlY3RlZEFnZW50QWZ0ZXJNdXRhdGlvbiA9IChcbiAgY3VycmVudFNlbGVjdGVkQWdlbnRJZDogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgbXV0YXRlZEFnZW50SWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT5cbiAgY3VycmVudFNlbGVjdGVkQWdlbnRJZCAhPSBudWxsICYmIG11dGF0ZWRBZ2VudElkICE9IG51bGwgJiYgU3RyaW5nKGN1cnJlbnRTZWxlY3RlZEFnZW50SWQpID09PSBTdHJpbmcobXV0YXRlZEFnZW50SWQpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRJbmNsdWRlQWNjZXNzaWJpbGl0eVVwZGF0ZUluS25vd2xlZGdlQmF0Y2ggPSAoYWNjZXNzaWJpbGl0eUNoYW5nZWQ6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gIGFjY2Vzc2liaWxpdHlDaGFuZ2VkXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZXNldFN1Y2Nlc3NVcGRhdGVBY2Nlc3NPbkNyZWF0ZUNsb3NlID0gKHN1Y2Nlc3NVcGRhdGVBY2Nlc3M6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gIHN1Y2Nlc3NVcGRhdGVBY2Nlc3NcblxuZXhwb3J0IGNvbnN0IHNob3VsZEh5ZHJhdGVBZ2VudENvbm5lY3RvcnNPbkVkaXQgPSAoXG4gIGFnZW50SWQ6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGV4dGVybmFsQ29ubmVjdG9yc0VuYWJsZWQ6IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gQm9vbGVhbihhZ2VudElkICYmIGV4dGVybmFsQ29ubmVjdG9yc0VuYWJsZWQpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93QWJtTG9hZGVyRmlsZXMgPSAoaXNTaG93UHJvY2Vzc0ZpbGVzOiBib29sZWFuLCBoYXNQZW5kaW5nRmlsZXM6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gIGlzU2hvd1Byb2Nlc3NGaWxlcyAmJiBoYXNQZW5kaW5nRmlsZXNcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBYm1Nb2RhbFRpdGxlS2V5ID0gKGlzRWRpdGluZzogYm9vbGVhbik6ICdlZGl0QWdlbnQnIHwgJ25ld0FnZW50JyA9PlxuICBpc0VkaXRpbmcgPyAnZWRpdEFnZW50JyA6ICduZXdBZ2VudCdcblxuZXhwb3J0IGNvbnN0IHNob3VsZERpc2FibGVBYm1IZWFkZXJDbG9zZSA9IChcbiAgaXNMb2FkaW5nOiBib29sZWFuLFxuICBpc0xvYWRpbmdLbm93bGVkZ2U6IGJvb2xlYW4sXG4gIGlzTG9hZGluZ0NyZWF0ZTogYm9vbGVhbixcbiAgaXNMb2FkaW5nVXBkYXRlQWNjZXNzOiBib29sZWFuXG4pOiBib29sZWFuID0+IGlzTG9hZGluZyB8fCBpc0xvYWRpbmdLbm93bGVkZ2UgfHwgaXNMb2FkaW5nQ3JlYXRlIHx8IGlzTG9hZGluZ1VwZGF0ZUFjY2Vzc1xuXG5leHBvcnQgdHlwZSBBYm1TYXZlQWN0aW9uID0gJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdub29wJ1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFibVNhdmVBY3Rpb24gPSAoaXNFZGl0aW5nOiBib29sZWFuLCBoYXNTYW1lVmFsdWVzOiBib29sZWFuKTogQWJtU2F2ZUFjdGlvbiA9PiB7XG4gIGlmIChpc0VkaXRpbmcpIHtcbiAgICByZXR1cm4gaGFzU2FtZVZhbHVlcyA/ICdub29wJyA6ICd1cGRhdGUnXG4gIH1cbiAgcmV0dXJuICdjcmVhdGUnXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvY2Vzc0ZpbGVzVGltZW91dEZsYWdCZWZvcmVTYXZlID0gKCk6IGJvb2xlYW4gPT4gZmFsc2VcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLFNBQ0VBLG9CQUFvQixFQUNwQkMsa0JBQWtCLEVBQ2xCQyxpQ0FBaUMsRUFDakNDLHVCQUF1QixRQUNsQix5Q0FBeUM7QUFFaEQsSUFBTUMsNkJBQTZCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFVO0FBRXJHLE9BQU8sSUFBTUMsa0NBQWtDLEdBQUcsU0FBckNBLGtDQUFrQ0EsQ0FBSUMsTUFBYyxFQUE0QztFQUMzRyxJQUFLRiw2QkFBNkIsQ0FBdUJHLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDLEVBQUU7SUFDekUsT0FBT0EsTUFBTTtFQUNmO0VBQ0EsT0FBTyxTQUFTO0FBQ2xCLENBQUM7QUFFRCxJQUFNRSxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUFJQyxLQUFhO0VBQUEsT0FDdENBLEtBQUssS0FBSyxTQUFTLElBQUlBLEtBQUssS0FBSyxTQUFTLElBQUlBLEtBQUssS0FBSyxTQUFTO0FBQUE7QUFFbkUsT0FBTyxJQUFNQyxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFJQyxlQUE0QixFQUFLO0VBQ25FLElBQUksQ0FBQ0EsZUFBZSxDQUFDQyxPQUFPLENBQUNDLElBQUksSUFBSSxDQUFDRixlQUFlLENBQUNDLE9BQU8sQ0FBQ0UsVUFBVSxFQUFFO0lBQ3hFLE9BQU8sS0FBSztFQUNkO0VBQ0EsT0FBTyxJQUFJO0FBQ2IsQ0FBQztBQWlDRDtBQUNBLE9BQU8sSUFBTUMsc0NBQXNDLEdBQUcsU0FBekNBLHNDQUFzQ0EsQ0FDakRDLFNBQTRCLEVBQzVCQyxXQUF5QixFQUN6QkMsSUFBaUIsRUFDRDtFQUFBLElBQUFDLHFCQUFBLEVBQUFDLGtCQUFBO0VBQ2hCLElBQU1DLFVBQVUsR0FBR0osV0FBVyxDQUFDSyxJQUFJLENBQUMsVUFBQUMsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0MsRUFBRSxLQUFLUixTQUFTLENBQUNTLFNBQVM7RUFBQSxFQUFDO0VBQzlFLE9BQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNLUixJQUFJO0lBQ1BTLFNBQVMsRUFBRSxJQUFJO0lBQ2ZmLE9BQU8sRUFBRTtNQUNQZ0IsS0FBSyxFQUFFWixTQUFTLENBQUNZLEtBQUs7TUFDdEJmLElBQUksRUFBRUcsU0FBUyxDQUFDSCxJQUFJO01BQ3BCZ0IsWUFBWSxFQUFFYixTQUFTLENBQUNhLFlBQVk7TUFDcENDLGdCQUFnQixFQUFFZCxTQUFTLENBQUNjLGdCQUFnQjtNQUM1Q0MsUUFBUSxFQUFFZixTQUFTLENBQUNlLFFBQVE7TUFDNUJDLE9BQU8sRUFBRVgsVUFBVSxJQUFJLElBQUk7TUFDM0JHLEVBQUUsRUFBRVIsU0FBUyxDQUFDUSxFQUFFO01BQ2hCVixVQUFVLEVBQUVFLFNBQVMsQ0FBQ0YsVUFBVTtNQUNoQ21CLGNBQWMsRUFBRSxFQUFFO01BQ2xCQyxXQUFXLEVBQUVsQixTQUFTLENBQUNrQjtJQUN6QixDQUFDO0lBQ0RDLFNBQVMsRUFDUCxFQUFBaEIscUJBQUEsR0FBQUgsU0FBUyxDQUFDaUIsY0FBYyxjQUFBZCxxQkFBQSx1QkFBeEJBLHFCQUFBLENBQTBCaUIsR0FBRyxDQUFDLFVBQUFDLENBQUM7TUFBQSxPQUFLO1FBQ2xDQyxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLEVBQUUsRUFBRUYsQ0FBQyxDQUFDRyxRQUFRLENBQUM7UUFDOUJoQixFQUFFLEVBQUVhLENBQUMsQ0FBQ2IsRUFBRSxDQUFDaUIsUUFBUSxDQUFDLENBQUM7UUFDbkI1QixJQUFJLEVBQUV3QixDQUFDLENBQUNHLFFBQVE7UUFDaEJFLElBQUksRUFBRUwsQ0FBQyxDQUFDTSxlQUFlLElBQUksQ0FBQztRQUM1QkMsSUFBSSxFQUFFUCxDQUFDLENBQUNRLGtCQUFrQjtRQUMxQnZDLE1BQU0sRUFBRUQsa0NBQWtDLENBQUNnQyxDQUFDLENBQUMvQixNQUFNLENBQUM7UUFDcER3QyxZQUFZLEVBQUVULENBQUMsQ0FBQ1MsWUFBWSxJQUFJQyxTQUFTO1FBQ3pDQyxhQUFhLEVBQUVYLENBQUMsQ0FBQ1csYUFBYSxJQUFJRDtNQUNwQyxDQUFDO0lBQUEsQ0FBQyxDQUFDLEtBQUksRUFBRTtJQUNYRSxhQUFhLEVBQUU7TUFDYkMsVUFBVSxFQUFFMUMsaUJBQWlCLENBQUNRLFNBQVMsQ0FBQ21DLE1BQU0sQ0FBQyxHQUFHbkMsU0FBUyxDQUFDbUMsTUFBTSxHQUFHLFNBQVM7TUFDOUVDLE9BQU8sRUFDTCxFQUFBaEMsa0JBQUEsR0FBQUosU0FBUyxDQUFDb0MsT0FBTyxjQUFBaEMsa0JBQUEsdUJBQWpCQSxrQkFBQSxDQUFtQmdCLEdBQUcsQ0FBQyxVQUFBaUIsTUFBTTtRQUFBLElBQUFDLFVBQUEsRUFBQUMsaUJBQUEsRUFBQUMsa0JBQUE7UUFBQSxPQUFLO1VBQ2hDaEMsRUFBRSxFQUFFLEVBQUE4QixVQUFBLEdBQUFELE1BQU0sQ0FBQzdCLEVBQUUsY0FBQThCLFVBQUEsdUJBQVRBLFVBQUEsQ0FBV2IsUUFBUSxDQUFDLENBQUMsS0FBSSxFQUFFO1VBQy9CNUIsSUFBSSxFQUFFd0MsTUFBTSxDQUFDeEMsSUFBSTtVQUNqQjRDLFNBQVMsR0FBQUYsaUJBQUEsR0FBRUYsTUFBTSxDQUFDSSxTQUFTLGNBQUFGLGlCQUFBLGNBQUFBLGlCQUFBLEdBQUksS0FBSztVQUNwQ0csVUFBVSxHQUFBRixrQkFBQSxHQUFFSCxNQUFNLENBQUNLLFVBQVUsY0FBQUYsa0JBQUEsY0FBQUEsa0JBQUEsR0FBSTtRQUNuQyxDQUFDO01BQUEsQ0FBQyxDQUFDLEtBQUksSUFBSTtNQUNiRyxTQUFTLEVBQUV6RCxpQ0FBaUMsQ0FBQ2MsU0FBUyxDQUFDNEMsY0FBYyxDQUFDO01BQ3RFQyxrQkFBa0IsRUFBRTFELHVCQUF1QixDQUFDYSxTQUFTLENBQUM4QyxVQUFVO0lBQ2xFO0VBQUM7QUFFTCxDQUFDO0FBYUQsT0FBTyxJQUFNQyx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUNuQ0MsUUFBMkMsRUFDM0NDLFFBQTJDLEVBQy9CO0VBQ1osSUFBSSxDQUFDRCxRQUFRLElBQUksQ0FBQ0MsUUFBUSxFQUFFLE9BQU8sSUFBSTtFQUN2QyxJQUFJLENBQUNELFFBQVEsSUFBSSxDQUFDQyxRQUFRLEVBQUUsT0FBTyxLQUFLO0VBQ3hDLElBQUlELFFBQVEsQ0FBQ0UsTUFBTSxLQUFLRCxRQUFRLENBQUNDLE1BQU0sRUFBRSxPQUFPLEtBQUs7RUFFckQsSUFBTUMsV0FBVyxHQUFHSCxRQUFRLENBQUM1QixHQUFHLENBQUMsVUFBQWlCLE1BQU07SUFBQSxJQUFBZSxnQkFBQTtJQUFBLFFBQUFBLGdCQUFBLEdBQUlmLE1BQU0sQ0FBQ2dCLFFBQVEsY0FBQUQsZ0JBQUEsY0FBQUEsZ0JBQUEsR0FBSWYsTUFBTSxDQUFDN0IsRUFBRTtFQUFBLEVBQUMsQ0FBQzhDLElBQUksQ0FBQyxDQUFDO0VBQy9FLElBQU1DLFdBQVcsR0FBR04sUUFBUSxDQUFDN0IsR0FBRyxDQUFDLFVBQUFpQixNQUFNO0lBQUEsSUFBQW1CLGlCQUFBO0lBQUEsUUFBQUEsaUJBQUEsR0FBSW5CLE1BQU0sQ0FBQ2dCLFFBQVEsY0FBQUcsaUJBQUEsY0FBQUEsaUJBQUEsR0FBSW5CLE1BQU0sQ0FBQzdCLEVBQUU7RUFBQSxFQUFDLENBQUM4QyxJQUFJLENBQUMsQ0FBQztFQUUvRSxPQUFPSCxXQUFXLENBQUNNLEtBQUssQ0FBQyxVQUFDakQsRUFBRSxFQUFFa0QsS0FBSztJQUFBLE9BQUtsRCxFQUFFLEtBQUsrQyxXQUFXLENBQUNHLEtBQUssQ0FBQztFQUFBLEVBQUM7QUFDcEUsQ0FBQztBQUVELE9BQU8sSUFBTUMsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FDekNDLE9BQWlELEVBQ2pEQyxPQUFpRCxFQUNyQztFQUFBLElBQUFDLGtCQUFBLEVBQUFDLGtCQUFBO0VBQ1osSUFBSSxDQUFDRixPQUFPLElBQUksQ0FBQ0QsT0FBTyxFQUFFLE9BQU8sSUFBSTtFQUVyQyxJQUFNSSxjQUFjLEdBQUdKLE9BQU8sQ0FBQzFCLFVBQVUsS0FBSzJCLE9BQU8sQ0FBQzNCLFVBQVU7RUFDaEUsSUFBTStCLFdBQVcsR0FBR2xCLHdCQUF3QixDQUFDYSxPQUFPLENBQUN4QixPQUFPLEVBQUV5QixPQUFPLENBQUN6QixPQUFPLENBQUM7RUFDOUUsSUFBTThCLGdCQUFnQixJQUFBSixrQkFBQSxHQUFHRixPQUFPLENBQUNqQixTQUFTLGNBQUFtQixrQkFBQSxjQUFBQSxrQkFBQSxHQUFJN0Usa0JBQWtCO0VBQ2hFLElBQU1rRixnQkFBZ0IsSUFBQUosa0JBQUEsR0FBR0YsT0FBTyxDQUFDbEIsU0FBUyxjQUFBb0Isa0JBQUEsY0FBQUEsa0JBQUEsR0FBSTlFLGtCQUFrQjtFQUNoRSxJQUFNbUYsYUFBYSxHQUFHcEYsb0JBQW9CLENBQUN5RSxLQUFLLENBQUMsVUFBQVksSUFBSTtJQUFBLE9BQUlILGdCQUFnQixDQUFDRyxJQUFJLENBQUMsS0FBS0YsZ0JBQWdCLENBQUNFLElBQUksQ0FBQztFQUFBLEVBQUM7RUFFM0csT0FBTyxDQUFDTCxjQUFjLElBQUksQ0FBQ0MsV0FBVyxJQUFJLENBQUNHLGFBQWE7QUFDMUQsQ0FBQztBQUVELE9BQU8sSUFBTUUsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FDbkNWLE9BQW9CLEVBQ3BCQyxPQUFvQixFQUNwQlUsV0FBMkIsRUFDZjtFQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLG1CQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHFCQUFBO0VBQ1osSUFBSSxDQUFDbEIsT0FBTyxDQUFDakUsT0FBTyxJQUFJLENBQUNnRSxPQUFPLENBQUNoRSxPQUFPLEVBQUUsT0FBTyxLQUFLO0VBRXRELE9BQ0VnRSxPQUFPLENBQUNoRSxPQUFPLENBQUNDLElBQUksS0FBS2dFLE9BQU8sQ0FBQ2pFLE9BQU8sQ0FBQ0MsSUFBSSxJQUM3QytELE9BQU8sQ0FBQ2hFLE9BQU8sQ0FBQ2dCLEtBQUssS0FBS2lELE9BQU8sQ0FBQ2pFLE9BQU8sQ0FBQ2dCLEtBQUssSUFDL0NnRCxPQUFPLENBQUNoRSxPQUFPLENBQUNpQixZQUFZLEtBQUtnRCxPQUFPLENBQUNqRSxPQUFPLENBQUNpQixZQUFZLElBQzdEK0MsT0FBTyxDQUFDaEUsT0FBTyxDQUFDa0IsZ0JBQWdCLEtBQUsrQyxPQUFPLENBQUNqRSxPQUFPLENBQUNrQixnQkFBZ0IsSUFDckUsRUFBQTBELHFCQUFBLEdBQUFaLE9BQU8sQ0FBQ2hFLE9BQU8sQ0FBQ29CLE9BQU8sY0FBQXdELHFCQUFBLHVCQUF2QkEscUJBQUEsQ0FBeUJoRSxFQUFFLFFBQUFpRSxxQkFBQSxHQUFLWixPQUFPLENBQUNqRSxPQUFPLENBQUNvQixPQUFPLGNBQUF5RCxxQkFBQSx1QkFBdkJBLHFCQUFBLENBQXlCakUsRUFBRSxLQUMzRG9ELE9BQU8sQ0FBQ2hFLE9BQU8sQ0FBQ0UsVUFBVSxLQUFLK0QsT0FBTyxDQUFDakUsT0FBTyxDQUFDRSxVQUFVLEtBQ3hELEVBQUE0RSxrQkFBQSxHQUFBZCxPQUFPLENBQUN6QyxTQUFTLGNBQUF1RCxrQkFBQSx1QkFBakJBLGtCQUFBLENBQW1CeEIsTUFBTSxRQUFBeUIsa0JBQUEsR0FBS2QsT0FBTyxDQUFDMUMsU0FBUyxjQUFBd0Qsa0JBQUEsdUJBQWpCQSxrQkFBQSxDQUFtQnpCLE1BQU0sS0FDckQsR0FBQTBCLG1CQUFBLEdBQUNoQixPQUFPLENBQUN6QyxTQUFTLGNBQUF5RCxtQkFBQSxlQUFqQkEsbUJBQUEsQ0FBbUIxQixNQUFNLEtBQUksR0FBQTJCLG1CQUFBLEdBQUNoQixPQUFPLENBQUMxQyxTQUFTLGNBQUEwRCxtQkFBQSxlQUFqQkEsbUJBQUEsQ0FBbUIzQixNQUFNLENBQUMsQ0FBQyxJQUM3RCxHQUFBNEIscUJBQUEsR0FBQ1AsV0FBVyxDQUFDUyxRQUFRLGNBQUFGLHFCQUFBLGVBQXBCQSxxQkFBQSxDQUFzQjVCLE1BQU0sS0FDN0IsR0FBQTZCLHFCQUFBLEdBQUNSLFdBQVcsQ0FBQ1UsUUFBUSxjQUFBRixxQkFBQSxlQUFwQkEscUJBQUEsQ0FBc0I3QixNQUFNLEtBQzdCLENBQUNTLDhCQUE4QixDQUFDQyxPQUFPLENBQUMzQixhQUFhLEVBQUU0QixPQUFPLENBQUM1QixhQUFhLENBQUM7QUFFakYsQ0FBQztBQVFELE9BQU8sSUFBTWlELHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLE1BQW1CLEVBQUVDLFFBQStCLEVBQWM7RUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxxQkFBQTtFQUN0RyxJQUFJSCxNQUFNLENBQUN4RSxTQUFTLEVBQUUsT0FBTyxLQUFLO0VBRWxDLElBQU00RSxnQkFBZ0IsR0FBR0gsUUFBUSxDQUFDSSxnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBQUgscUJBQUEsR0FBQUYsTUFBTSxDQUFDdkYsT0FBTyxDQUFDb0IsT0FBTyxjQUFBcUUscUJBQUEsdUJBQXRCQSxxQkFBQSxDQUF3QjdFLEVBQUUsTUFBSzRFLFFBQVEsQ0FBQ0ksZ0JBQWdCO0VBQ3RILElBQU1DLHlCQUF5QixHQUFHTixNQUFNLENBQUN2RixPQUFPLENBQUNrQixnQkFBZ0IsS0FBS3NFLFFBQVEsQ0FBQ00sdUJBQXVCO0VBQ3RHLElBQU1DLG1CQUFtQixHQUN2QlIsTUFBTSxDQUFDdkYsT0FBTyxDQUFDRSxVQUFVLEtBQUtzRixRQUFRLENBQUNRLDRCQUE0QixJQUNuRVQsTUFBTSxDQUFDdkYsT0FBTyxDQUFDRSxVQUFVLEtBQUssRUFBRSxJQUNoQ3FGLE1BQU0sQ0FBQ3ZGLE9BQU8sQ0FBQ0UsVUFBVSxLQUFLLElBQUk7RUFFcEMsSUFBTStGLE9BQU8sR0FBR1YsTUFBTSxDQUFDdkYsT0FBTyxDQUFDQyxJQUFJLENBQUNpRyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7RUFDakQsSUFBTUMsUUFBUSxHQUFHWixNQUFNLENBQUN2RixPQUFPLENBQUNnQixLQUFLLENBQUNrRixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7RUFDbkQsSUFBTUUsZUFBZSxHQUFHYixNQUFNLENBQUN2RixPQUFPLENBQUNpQixZQUFZLENBQUNpRixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7RUFDakUsSUFBTUcsbUJBQW1CLEdBQUdkLE1BQU0sQ0FBQ3ZGLE9BQU8sQ0FBQ2tCLGdCQUFnQixDQUFDZ0YsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQ0wseUJBQXlCO0VBQ3ZHLElBQU1TLGFBQWEsR0FBRyxFQUFBWixxQkFBQSxHQUFBSCxNQUFNLENBQUN2RixPQUFPLENBQUNFLFVBQVUsY0FBQXdGLHFCQUFBLHVCQUF6QkEscUJBQUEsQ0FBMkJRLElBQUksQ0FBQyxDQUFDLE1BQUssRUFBRSxJQUFJLENBQUNILG1CQUFtQjtFQUN0RixJQUFNUSxZQUFZLEdBQUcsQ0FBQyxDQUFDaEIsTUFBTSxDQUFDaEUsU0FBUyxDQUFDK0IsTUFBTTtFQUM5QyxJQUFNa0QsZ0JBQWdCLEdBQUdDLE9BQU8sQ0FBQ2xCLE1BQU0sQ0FBQ3ZGLE9BQU8sQ0FBQ29CLE9BQU8sSUFBSSxDQUFDdUUsZ0JBQWdCLENBQUM7RUFDN0UsSUFBTWUsZ0JBQWdCLEdBQUduQixNQUFNLENBQUNsRCxhQUFhLENBQUNDLFVBQVUsS0FBSyxTQUFTO0VBRXRFLE9BQ0UyRCxPQUFPLElBQ1BFLFFBQVEsSUFDUkMsZUFBZSxJQUNmQyxtQkFBbUIsSUFDbkJDLGFBQWEsSUFDYkMsWUFBWSxJQUNaQyxnQkFBZ0IsSUFDaEJFLGdCQUFnQjtBQUVwQixDQUFDO0FBRUQsT0FBTyxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUMvQnBCLE1BQW1CLEVBQ25CdEIsT0FBMkIsRUFDM0JVLFdBQTJCLEVBQzNCYSxRQUErQixFQUNuQjtFQUFBLElBQUFvQixzQkFBQSxFQUFBQyxxQkFBQTtFQUNaLElBQU1DLGdCQUFnQixHQUFHeEIscUJBQXFCLENBQUNDLE1BQU0sRUFBRUMsUUFBUSxDQUFDO0VBQ2hFLElBQU11QixpQkFBaUIsR0FDckJ4QixNQUFNLENBQUN4RSxTQUFTLElBQ2hCMEYsT0FBTyxDQUFDeEMsT0FBTyxDQUFDLEtBQ2YsQ0FBQ1Msd0JBQXdCLENBQUNhLE1BQU0sRUFBRXRCLE9BQU8sRUFBaUJVLFdBQVcsQ0FBQyxJQUNyRThCLE9BQU8sRUFBQUcsc0JBQUEsR0FBQ2pDLFdBQVcsQ0FBQ1UsUUFBUSxjQUFBdUIsc0JBQUEsdUJBQXBCQSxzQkFBQSxDQUFzQnRELE1BQU0sQ0FBQyxJQUNyQ21ELE9BQU8sRUFBQUkscUJBQUEsR0FBQ2xDLFdBQVcsQ0FBQ3FDLFFBQVEsY0FBQUgscUJBQUEsdUJBQXBCQSxxQkFBQSxDQUFzQnZELE1BQU0sQ0FBQyxDQUFDO0VBRTFDLE9BQU93RCxnQkFBZ0IsSUFBSUMsaUJBQWlCO0FBQzlDLENBQUM7QUFFRCxPQUFPLElBQU1FLCtCQUErQixHQUFHLFNBQWxDQSwrQkFBK0JBLENBQzFDekUsT0FBZ0YsRUFDcEU7RUFDWixJQUFJLEVBQUNBLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUVjLE1BQU0sR0FBRSxPQUFPLEtBQUs7RUFDbEMsT0FBT2QsT0FBTyxDQUFDMEUsSUFBSSxDQUFDLFVBQUF6RSxNQUFNO0lBQUEsT0FBSUEsTUFBTSxDQUFDSSxTQUFTLEtBQUssS0FBSyxJQUFJSixNQUFNLENBQUNLLFVBQVUsS0FBSyxJQUFJO0VBQUEsRUFBQztBQUN6RixDQUFDO0FBSUQsT0FBTyxJQUFNcUUsNkJBQTZCLEdBQUcsU0FBaENBLDZCQUE2QkEsQ0FDeEM1RixTQUEyQyxFQUNUO0VBQ2xDLElBQU02RixlQUFlLEdBQUc3RixTQUFTLENBQUMyRixJQUFJLENBQUMsVUFBQXhGLElBQUk7SUFBQSxPQUFJQSxJQUFJLENBQUNoQyxNQUFNLEtBQUssU0FBUztFQUFBLEVBQUM7RUFDekUsSUFBTTJILGFBQWEsR0FBRzlGLFNBQVMsQ0FBQzJGLElBQUksQ0FBQyxVQUFBeEYsSUFBSTtJQUFBLE9BQUlBLElBQUksQ0FBQ2hDLE1BQU0sS0FBSyxRQUFRO0VBQUEsRUFBQztFQUV0RSxJQUFJMEgsZUFBZSxFQUFFLE9BQU8sU0FBUztFQUNyQyxJQUFJQyxhQUFhLEVBQUUsT0FBTyxPQUFPO0VBQ2pDLElBQUk5RixTQUFTLENBQUMrQixNQUFNLEdBQUcsQ0FBQyxFQUFFLE9BQU8sVUFBVTtFQUMzQyxPQUFPLElBQUk7QUFDYixDQUFDO0FBYUQsT0FBTyxJQUFNZ0UsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBQUMsSUFBQSxFQVNPO0VBQUEsSUFBQUMscUJBQUE7RUFBQSxJQVJuQ2pDLE1BQU0sR0FBQWdDLElBQUEsQ0FBTmhDLE1BQU07SUFDTnRCLE9BQU8sR0FBQXNELElBQUEsQ0FBUHRELE9BQU87SUFDUFUsV0FBVyxHQUFBNEMsSUFBQSxDQUFYNUMsV0FBVztJQUFBOEMsY0FBQSxHQUFBRixJQUFBLENBQ1hHLFNBQVM7SUFBVEEsU0FBUyxHQUFBRCxjQUFBLGNBQUcsS0FBSyxHQUFBQSxjQUFBO0lBQUFFLHFCQUFBLEdBQUFKLElBQUEsQ0FDakJLLGtCQUFrQjtJQUFsQkEsa0JBQWtCLEdBQUFELHFCQUFBLGNBQUcsS0FBSyxHQUFBQSxxQkFBQTtJQUFBRSxvQkFBQSxHQUFBTixJQUFBLENBQzFCTyxlQUFlO0lBQWZBLGVBQWUsR0FBQUQsb0JBQUEsY0FBRyxLQUFLLEdBQUFBLG9CQUFBO0lBQUFFLHFCQUFBLEdBQUFSLElBQUEsQ0FDdkJTLHFCQUFxQjtJQUFyQkEscUJBQXFCLEdBQUFELHFCQUFBLGNBQUcsS0FBSyxHQUFBQSxxQkFBQTtJQUFBRSxrQkFBQSxHQUFBVixJQUFBLENBQzdCVyxhQUFhO0lBQWJBLGFBQWEsR0FBQUQsa0JBQUEsY0FBRyxLQUFLLEdBQUFBLGtCQUFBO0VBRXJCLElBQU1FLFNBQVMsR0FBRzFCLE9BQU8sQ0FBQ3hDLE9BQU8sSUFBSVMsd0JBQXdCLENBQUNhLE1BQU0sRUFBRXRCLE9BQU8sRUFBRVUsV0FBVyxDQUFDLENBQUM7RUFFNUYsT0FDRSxDQUFDN0UsbUJBQW1CLENBQUN5RixNQUFNLENBQUMsSUFDNUI0QyxTQUFTLElBQ1RULFNBQVMsSUFDVEUsa0JBQWtCLElBQ2xCRSxlQUFlLElBQ2ZFLHFCQUFxQixJQUNyQmYsK0JBQStCLEVBQUFPLHFCQUFBLEdBQUNqQyxNQUFNLENBQUNsRCxhQUFhLGNBQUFtRixxQkFBQSx1QkFBcEJBLHFCQUFBLENBQXNCaEYsT0FBTyxDQUFDLElBQzlEMEYsYUFBYTtBQUVqQixDQUFDO0FBUUQsT0FBTyxJQUFNRSw4QkFBOEIsR0FBRyxTQUFqQ0EsOEJBQThCQSxDQUN6QzdHLFNBQTJCLEVBQzNCOEcsVUFBcUM7RUFBQSxPQUVyQzlHLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLFVBQUFFLElBQUksRUFBSTtJQUFBLElBQUE0RyxxQkFBQTtJQUNwQixJQUFJNUcsSUFBSSxDQUFDekIsSUFBSSxLQUFLb0ksVUFBVSxDQUFDekcsUUFBUSxFQUFFO01BQ3JDLE9BQU9GLElBQUk7SUFDYjtJQUVBLE9BQUFaLGFBQUEsQ0FBQUEsYUFBQSxLQUNLWSxJQUFJO01BQ1BoQyxNQUFNLEVBQUVELGtDQUFrQyxDQUFDNEksVUFBVSxDQUFDM0ksTUFBTSxDQUFDO01BQzdEa0IsRUFBRSxFQUFFLEVBQUEwSCxxQkFBQSxHQUFBRCxVQUFVLENBQUNFLGlCQUFpQixjQUFBRCxxQkFBQSx1QkFBNUJBLHFCQUFBLENBQThCekcsUUFBUSxDQUFDLENBQUMsS0FBSUgsSUFBSSxDQUFDZDtJQUFFO0VBRTNELENBQUMsQ0FBQztBQUFBO0FBRUosT0FBTyxJQUFNNEgscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FDaENDLGlCQUEwQixFQUMxQkMsWUFBc0UsRUFDMUQ7RUFDWixJQUFJLENBQUNELGlCQUFpQixFQUFFLE9BQU8sS0FBSztFQUNwQyxPQUFPLEVBQUVDLFlBQVksQ0FBQ0MsTUFBTSxJQUFJRCxZQUFZLENBQUNFLE1BQU0sSUFBSUYsWUFBWSxVQUFPLENBQUM7QUFDN0UsQ0FBQztBQUVELE9BQU8sSUFBTUcsdUJBQXVCLEdBQUcsK0RBQStEO0FBRXRHLE9BQU8sSUFBTUMsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBSUMsS0FBZ0M7RUFBQSxPQUFjQSxLQUFLLEtBQUtGLHVCQUF1QjtBQUFBO0FBUXRILE9BQU8sSUFBTUcsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBSUMsV0FBa0Q7RUFBQSxPQUN2RnhDLE9BQU8sQ0FBQyxDQUFBd0MsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUVOLE1BQU0sTUFBSU0sV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUVDLElBQUksTUFBSUQsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLFVBQVEsRUFBQztBQUFBO0FBRTFFLE9BQU8sSUFBTUUsNkJBQTZCLEdBQUcsU0FBaENBLDZCQUE2QkEsQ0FDeENDLE1BQTBCLEVBQzFCQyxhQUFpQyxFQUNqQ0MsaUJBQTBCO0VBQUEsT0FDZEYsTUFBTSxLQUFLQyxhQUFhLElBQUksQ0FBQ0MsaUJBQWlCO0FBQUE7QUFFNUQsT0FBTyxJQUFNQyxxQ0FBcUMsR0FBRyxTQUF4Q0EscUNBQXFDQSxDQUFJeEksU0FBa0I7RUFBQSxPQUN0RUEsU0FBUyxHQUFHLHVDQUF1QyxHQUFHLHVDQUF1QztBQUFBO0FBSS9GLElBQU15SSx5QkFBNEQsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDO0FBRTlHLE9BQU8sSUFBTUMsK0JBQStCLEdBQUcsU0FBbENBLCtCQUErQkEsQ0FBSUMsY0FBOEIsRUFBb0M7RUFDaEgsSUFBSUEsY0FBYyxJQUFLRix5QkFBeUIsQ0FBdUI3SixRQUFRLENBQUMrSixjQUFjLENBQUMsRUFBRTtJQUMvRixPQUFPQSxjQUFjO0VBQ3ZCO0VBQ0EsT0FBTyxJQUFJO0FBQ2IsQ0FBQztBQUVELE9BQU8sSUFBTUMsbUNBQW1DLEdBQUcsU0FBdENBLG1DQUFtQ0EsQ0FBSTVJLFNBQWtCLEVBQUU2SSxvQkFBNkI7RUFBQSxPQUNuR25ELE9BQU8sQ0FBQzFGLFNBQVMsSUFBSSxDQUFDNkksb0JBQW9CLENBQUM7QUFBQTtBQVU3QyxPQUFPLElBQU1DLG1DQUFtQyxHQUFHLFNBQXRDQSxtQ0FBbUNBLENBQzlDdkgsVUFBc0Q7RUFBQSxPQUMxQjtJQUM1QndILGNBQWMsRUFBRSxJQUFJO0lBQ3BCQyxhQUFhLEVBQUUsS0FBSztJQUNwQkMsY0FBYyxFQUFFMUgsVUFBVSxLQUFLLFNBQVM7SUFDeEMySCxhQUFhLEVBQUUsUUFBUTtJQUN2QkMsYUFBYSxFQUFFO0VBQ2pCLENBQUM7QUFBQSxDQUFDO0FBRUYsT0FBTyxJQUFNQyxpQ0FBaUMsR0FBRyxTQUFwQ0EsaUNBQWlDQSxDQUFJN0gsVUFBc0Q7RUFBQSxPQUN0R0EsVUFBVSxLQUFLLFNBQVM7QUFBQTtBQUUxQixPQUFPLElBQU04SCw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2Q0MsWUFBZTtFQUFBLE9BQ3VCO0lBQ3RDQyxTQUFTLEVBQUF4SixhQUFBLENBQUFBLGFBQUEsS0FBT3VKLFlBQVk7TUFBRS9JLFdBQVcsRUFBRTtJQUFJLEVBQUU7SUFDakRpSixXQUFXLEVBQUF6SixhQUFBLENBQUFBLGFBQUEsS0FBT3VKLFlBQVk7TUFBRS9JLFdBQVcsRUFBRTtJQUFLO0VBQ3BELENBQUM7QUFBQSxDQUFDO0FBU0YsT0FBTyxJQUFNa0osMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBSUMsT0FBcUMsRUFBMkI7RUFDMUcsSUFBTUMsU0FBUyxHQUFHRCxPQUFPLENBQUNwRixRQUFRLENBQUMvQixNQUFNLEdBQUcsQ0FBQztFQUM3QyxJQUFNcUgsU0FBUyxHQUFHRixPQUFPLENBQUN6RCxRQUFRLENBQUMxRCxNQUFNLEdBQUcsQ0FBQztFQUM3QyxJQUFJb0gsU0FBUyxJQUFJQyxTQUFTLEVBQUUsT0FBTyxpQkFBaUI7RUFDcEQsSUFBSUQsU0FBUyxFQUFFLE9BQU8sWUFBWTtFQUNsQyxJQUFJQyxTQUFTLEVBQUUsT0FBTyxZQUFZO0VBQ2xDLE9BQU8sWUFBWTtBQUNyQixDQUFDO0FBRUQsT0FBTyxJQUFNQyxtQ0FBbUMsR0FBRyxTQUF0Q0EsbUNBQW1DQSxDQUFJQyxJQUEwQjtFQUFBLE9BQWNBLElBQUksS0FBSyxZQUFZO0FBQUE7QUFJakgsT0FBTyxJQUFNQywyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUN0Q0wsT0FBcUMsRUFDckNNLG9CQUE2QixFQUNKO0VBQ3pCLElBQU1DLFVBQVUsR0FBR1IsMkJBQTJCLENBQUNDLE9BQU8sQ0FBQztFQUN2RCxJQUFJTyxVQUFVLEtBQUssWUFBWSxFQUFFO0lBQy9CLE9BQU9BLFVBQVU7RUFDbkI7RUFDQSxJQUFJRCxvQkFBb0IsRUFBRTtJQUN4QixPQUFPLFlBQVk7RUFDckI7RUFDQSxPQUFPLGFBQWE7QUFDdEIsQ0FBQztBQUVELE9BQU8sSUFBTUUsbUNBQW1DLEdBQUcsU0FBdENBLG1DQUFtQ0EsQ0FBQTtFQUFBLE9BQWtDO0lBQ2hGbkIsY0FBYyxFQUFFLEtBQUs7SUFDckJDLGFBQWEsRUFBRSxJQUFJO0lBQ25CQyxjQUFjLEVBQUUsSUFBSTtJQUNwQkMsYUFBYSxFQUFFLFFBQVE7SUFDdkJDLGFBQWEsRUFBRTtFQUNqQixDQUFDO0FBQUEsQ0FBQztBQUVGLE9BQU8sSUFBTWdCLGlDQUFpQyxHQUFHLFNBQXBDQSxpQ0FBaUNBLENBQUlsSCxPQUErQixFQUFvQztFQUNuSCxJQUFJQSxPQUFPLENBQUNrRyxhQUFhLElBQUlsRyxPQUFPLENBQUNnRyxjQUFjLEVBQUU7SUFDbkQsT0FBTyxJQUFJO0VBQ2I7RUFDQSxPQUFPO0lBQ0xGLGNBQWMsRUFBRSxLQUFLO0lBQ3JCQyxhQUFhLEVBQUUsSUFBSTtJQUNuQkMsY0FBYyxFQUFFLEtBQUs7SUFDckJDLGFBQWEsRUFBRSxRQUFRO0lBQ3ZCQyxhQUFhLEVBQUU7RUFDakIsQ0FBQztBQUNILENBQUM7QUFPRCxPQUFPLElBQU1pQixrQ0FBa0MsR0FBRyxTQUFyQ0Esa0NBQWtDQSxDQUM3Q25ILE9BQStCLEVBQy9CMUIsVUFBc0QsRUFDdEI7RUFDaEMsSUFBSSxDQUFDNkgsaUNBQWlDLENBQUM3SCxVQUFVLENBQUMsRUFBRTtJQUNsRCxPQUFPO01BQUU4SSxXQUFXLEVBQUVwSCxPQUFPO01BQUVxSCxzQkFBc0IsRUFBRTtJQUFNLENBQUM7RUFDaEU7RUFDQSxJQUFJckgsT0FBTyxDQUFDa0csYUFBYSxFQUFFO0lBQ3pCLE9BQU87TUFBRWtCLFdBQVcsRUFBRXBILE9BQU87TUFBRXFILHNCQUFzQixFQUFFO0lBQU0sQ0FBQztFQUNoRTtFQUVBLE9BQU87SUFDTEQsV0FBVyxFQUFFO01BQ1h0QixjQUFjLEVBQUUsSUFBSTtNQUNwQkMsYUFBYSxFQUFFLEtBQUs7TUFDcEJDLGNBQWMsRUFBRWhHLE9BQU8sQ0FBQ2dHLGNBQWMsSUFBSSxLQUFLO01BQy9DQyxhQUFhLEVBQUUsUUFBUTtNQUN2QkMsYUFBYSxFQUFFO0lBQ2pCLENBQUM7SUFDRG1CLHNCQUFzQixFQUFFO0VBQzFCLENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxJQUFNQyxpQ0FBaUMsR0FBRyxTQUFwQ0EsaUNBQWlDQSxDQUFBO0VBQUEsT0FBa0M7SUFDOUV4QixjQUFjLEVBQUUsS0FBSztJQUNyQkMsYUFBYSxFQUFFLEtBQUs7SUFDcEJDLGNBQWMsRUFBRSxLQUFLO0lBQ3JCQyxhQUFhLEVBQUUsSUFBSTtJQUNuQkMsYUFBYSxFQUFFO0VBQ2pCLENBQUM7QUFBQSxDQUFDO0FBV0YsT0FBTyxJQUFNcUIseUNBQXlDLEdBQUcsU0FBNUNBLHlDQUF5Q0EsQ0FBSUMsS0FBNkI7RUFBQSxPQUNyRixDQUFDQSxLQUFLLENBQUNwRSxlQUFlLElBQ3RCLENBQUNvRSxLQUFLLENBQUNDLGtCQUFrQixJQUN6QkQsS0FBSyxDQUFDRSxhQUFhLEtBQUssQ0FBQyxJQUN6QixDQUFDRixLQUFLLENBQUNHLG9CQUFvQixJQUMzQixDQUFDSCxLQUFLLENBQUNJLG1CQUFtQixJQUMxQixDQUFDSixLQUFLLENBQUNLLG9CQUFvQjtBQUFBO0FBUTdCLE9BQU8sSUFBTUMsbUNBQW1DLEdBQUcsU0FBdENBLG1DQUFtQ0EsQ0FDOUNDLGFBQTRDLEVBQzVDQyxPQUF5RSxFQUN6RUMsYUFBc0IsRUFDdEJDLGFBQXNCLEVBQ2tCO0VBQ3hDLElBQUlILGFBQWEsS0FBSyxPQUFPLElBQUlBLGFBQWEsS0FBSyxVQUFVLEVBQUU7SUFDN0QsSUFBTUksdUJBQXVCLEdBQzNCSixhQUFhLEtBQUssVUFBVSxLQUMxQkMsT0FBTyxDQUFDaEMsY0FBYyxJQUFJaUMsYUFBYSxJQUN0Q0QsT0FBTyxDQUFDL0IsYUFBYSxLQUFLLFFBQVEsSUFBSSxDQUFDK0IsT0FBTyxDQUFDaEMsY0FBYyxJQUFJLENBQUNrQyxhQUFjLENBQUM7SUFFdEYsSUFBTUUsMEJBQTBCLEdBQzlCTCxhQUFhLEtBQUssVUFBVSxJQUFJQyxPQUFPLENBQUMvQixhQUFhLEtBQUssUUFBUSxJQUFJLENBQUMrQixPQUFPLENBQUNoQyxjQUFjLElBQUksQ0FBQ2tDLGFBQWE7SUFFakgsT0FBTztNQUNMRyxpQkFBaUIsRUFBRSxJQUFJO01BQ3ZCRix1QkFBdUIsRUFBdkJBLHVCQUF1QjtNQUN2QkMsMEJBQTBCLEVBQTFCQTtJQUNGLENBQUM7RUFDSDtFQUVBLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRCxPQUFPLElBQU1FLGtDQUFrQyxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQUl2TCxTQUFrQjtFQUFBLE9BQ25FQSxTQUFTLEdBQUcsbUNBQW1DLEdBQUcsNEJBQTRCO0FBQUE7QUFFaEYsT0FBTyxJQUFNd0wsc0NBQXNDLEdBQUcsU0FBekNBLHNDQUFzQ0EsQ0FBSWYsS0FLdEQ7RUFBQSxPQUNDQSxLQUFLLENBQUNwRSxlQUFlLElBQUlvRSxLQUFLLENBQUNDLGtCQUFrQixJQUFJRCxLQUFLLENBQUNFLGFBQWEsR0FBRyxDQUFDLElBQUlGLEtBQUssQ0FBQ0ssb0JBQW9CO0FBQUE7QUFFNUcsT0FBTyxJQUFNVyx5Q0FBeUMsR0FBRyxTQUE1Q0EseUNBQXlDQSxDQUNwRFIsT0FBdUQsRUFDdkQ1RSxlQUF3QixFQUN4QnFFLGtCQUEyQjtFQUFBLE9BQ2ZPLE9BQU8sQ0FBQ2hDLGNBQWMsS0FBSzVDLGVBQWUsSUFBSXFFLGtCQUFrQixDQUFDO0FBQUE7QUFFL0UsT0FBTyxJQUFNZ0IsNENBQTRDLEdBQUcsU0FBL0NBLDRDQUE0Q0EsQ0FBSWpCLEtBTzVEO0VBQUEsT0FDQ0EsS0FBSyxDQUFDdkIsYUFBYSxLQUFLLFFBQVEsSUFDaEMsQ0FBQ3VCLEtBQUssQ0FBQ3hCLGNBQWMsSUFDckJ3QixLQUFLLENBQUNVLGFBQWEsSUFDbkJWLEtBQUssQ0FBQ2tCLGdCQUFnQixJQUN0QixDQUFDbEIsS0FBSyxDQUFDcEUsZUFBZSxJQUN0QixDQUFDb0UsS0FBSyxDQUFDQyxrQkFBa0I7QUFBQTtBQUUzQixPQUFPLElBQU1rQix5Q0FBeUMsR0FBRyxTQUE1Q0EseUNBQXlDQSxDQUFJbkIsS0FPekQ7RUFBQSxPQUNDQSxLQUFLLENBQUN2QixhQUFhLEtBQUssUUFBUSxJQUNoQ3VCLEtBQUssQ0FBQ3hCLGNBQWMsSUFDcEJ3QixLQUFLLENBQUNTLGFBQWEsSUFDbkJULEtBQUssQ0FBQ2tCLGdCQUFnQixJQUN0QixDQUFDbEIsS0FBSyxDQUFDcEUsZUFBZSxJQUN0QixDQUFDb0UsS0FBSyxDQUFDQyxrQkFBa0I7QUFBQTtBQUUzQixPQUFPLElBQU1tQixrQ0FBa0MsR0FBRyxTQUFyQ0Esa0NBQWtDQSxDQUM3QzdMLFNBQWtCLEVBQ2xCOEwsY0FBNkM7RUFBQSxPQUNqQ3BHLE9BQU8sQ0FBQ29HLGNBQWMsSUFBSSxDQUFDOUwsU0FBUyxDQUFDO0FBQUE7QUFJbkQsT0FBTyxJQUFNK0wsNkJBQTZCLEdBQUcsU0FBaENBLDZCQUE2QkEsQ0FBSUMsTUFJN0MsRUFBNkI7RUFDNUIsSUFBSSxDQUFDQSxNQUFNLENBQUNoTSxTQUFTLEVBQUU7SUFDckIsT0FBTyxxQkFBcUI7RUFDOUI7RUFDQSxJQUFJNEksbUNBQW1DLENBQUMsSUFBSSxFQUFFb0QsTUFBTSxDQUFDbkQsb0JBQW9CLENBQUMsRUFBRTtJQUMxRSxPQUFPLFdBQVc7RUFDcEI7RUFDQSxJQUFJbUQsTUFBTSxDQUFDQyxrQkFBa0IsRUFBRTtJQUM3QixPQUFPLGVBQWU7RUFDeEI7RUFDQSxPQUFPLFlBQVk7QUFDckIsQ0FBQztBQUVELE9BQU8sSUFBTUMsNkJBQTZCLEdBQUcsU0FBaENBLDZCQUE2QkEsQ0FBSUMsTUFBeUIsRUFBRXRELG9CQUE2QjtFQUFBLE9BQ3BHc0QsTUFBTSxDQUFDbEwsSUFBSSxLQUFLLFFBQVEsSUFBSTRILG9CQUFvQjtBQUFBO0FBRWxELE9BQU8sSUFBTXVELGtDQUFrQyxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQUlKLE1BS2xEO0VBQUEsT0FBYyxDQUFDQSxNQUFNLENBQUNyRixTQUFTLElBQUksQ0FBQ3FGLE1BQU0sQ0FBQ0ssWUFBWSxJQUFJLENBQUNMLE1BQU0sQ0FBQ00sWUFBWSxJQUFJLENBQUNOLE1BQU0sQ0FBQ2hNLFNBQVM7QUFBQTtBQUVyRyxPQUFPLElBQU11TSxzQ0FBc0MsR0FBRyxTQUF6Q0Esc0NBQXNDQSxDQUFJMUQsb0JBQTZCO0VBQUEsT0FBYyxDQUFDQSxvQkFBb0I7QUFBQTtBQUV2SCxPQUFPLElBQU0yRCw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUFJQyxpQkFBMEI7RUFBQSxPQUFjLENBQUNBLGlCQUFpQjtBQUFBO0FBRXZHLE9BQU8sSUFBTUMsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FDekNwRCxZQUFlLEVBQ2ZxRCxZQUFxQixFQUN1QjtFQUM1QyxJQUFJLENBQUNBLFlBQVksRUFBRTtJQUNqQixPQUFPO01BQUVwRCxTQUFTLEVBQUVELFlBQVk7TUFBRUUsV0FBVyxFQUFFO0lBQUssQ0FBQztFQUN2RDtFQUVBLElBQUFvRCxxQkFBQSxHQUFtQ3ZELDRCQUE0QixDQUFDQyxZQUFZLENBQUM7SUFBckVDLFNBQVMsR0FBQXFELHFCQUFBLENBQVRyRCxTQUFTO0lBQUVDLFdBQVcsR0FBQW9ELHFCQUFBLENBQVhwRCxXQUFXO0VBQzlCLE9BQU87SUFBRUQsU0FBUyxFQUFUQSxTQUFTO0lBQUVDLFdBQVcsRUFBWEE7RUFBWSxDQUFDO0FBQ25DLENBQUM7QUFPRCxPQUFPLElBQU1xRCw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2Qy9OLEtBQW1DLEVBQ25DZ08sZUFBd0IsRUFDeEJDLGdCQUFrQyxFQUNsQ0MsY0FBdUMsRUFDWDtFQUM1QixJQUFJLENBQUNGLGVBQWUsRUFBRTtJQUNwQixPQUFBL00sYUFBQSxDQUFBQSxhQUFBLEtBQ0tpTixjQUFjO01BQ2pCL0csUUFBUSxLQUFBZ0gsTUFBQSxDQUFBQyxrQkFBQSxDQUFNRixjQUFjLENBQUMvRyxRQUFRLEdBQUFpSCxrQkFBQSxDQUFNcE8sS0FBSyxJQUFJLEVBQUU7SUFBRTtFQUU1RDtFQUVBLElBQU1xTyxZQUFZLEdBQUdyTyxLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFeUQsTUFBTSxHQUFHLElBQUk2SyxHQUFHLENBQUN0TyxLQUFLLENBQUMyQixHQUFHLENBQUMsVUFBQUUsSUFBSTtJQUFBLE9BQUlBLElBQUksQ0FBQ2QsRUFBRTtFQUFBLEVBQUMsQ0FBQyxHQUFHLElBQUl1TixHQUFHLENBQVMsQ0FBQztFQUM1RixJQUFNQyxRQUFRLEdBQUdOLGdCQUFnQixDQUFDTyxNQUFNLENBQUMsVUFBQTNNLElBQUk7SUFBQSxPQUFJLENBQUN3TSxZQUFZLENBQUNJLEdBQUcsQ0FBQzVNLElBQUksQ0FBQ2QsRUFBRSxDQUFDLElBQUljLElBQUksQ0FBQ2hDLE1BQU0sS0FBSyxTQUFTO0VBQUEsRUFBQztFQUN6RyxJQUFJNk8sWUFBWSxHQUFHUixjQUFjLENBQUMvRyxRQUFRO0VBRTFDLElBQUksQ0FBQ29ILFFBQVEsQ0FBQzlLLE1BQU0sSUFBSXlLLGNBQWMsQ0FBQy9HLFFBQVEsQ0FBQzFELE1BQU0sRUFBRTtJQUFBLElBQUFrTCxVQUFBO0lBQ3RELElBQU1DLFFBQVEsR0FBRyxJQUFJTixHQUFHLEVBQUFLLFVBQUEsR0FBQzNPLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFMkIsR0FBRyxDQUFDLFVBQUFFLElBQUk7TUFBQSxPQUFJQSxJQUFJLENBQUNkLEVBQUU7SUFBQSxFQUFDLGNBQUE0TixVQUFBLGNBQUFBLFVBQUEsR0FBSSxFQUFFLENBQUM7SUFDM0RELFlBQVksR0FBR1IsY0FBYyxDQUFDL0csUUFBUSxDQUFDcUgsTUFBTSxDQUFDLFVBQUEzTSxJQUFJO01BQUEsT0FBSStNLFFBQVEsQ0FBQ0gsR0FBRyxDQUFDNU0sSUFBSSxDQUFDZCxFQUFFLENBQUM7SUFBQSxFQUFDO0VBQzlFO0VBRUEsT0FBTztJQUNMb0csUUFBUSxFQUFFdUgsWUFBWTtJQUN0QmxKLFFBQVEsS0FBQTJJLE1BQUEsQ0FBQUMsa0JBQUEsQ0FBTUYsY0FBYyxDQUFDMUksUUFBUSxHQUFBNEksa0JBQUEsQ0FBS0csUUFBUTtFQUNwRCxDQUFDO0FBQ0gsQ0FBQztBQUVELE9BQU8sSUFBTU0sd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FDbkNwTyxJQUFpQixFQUNqQnFPLEdBQVcsRUFDWDlPLEtBQWMsRUFDZGdPLGVBQXdCLEVBQ1I7RUFDaEIsSUFBSWMsR0FBRyxLQUFLLFdBQVcsRUFBRTtJQUN2QixPQUFBN04sYUFBQSxDQUFBQSxhQUFBLEtBQ0tSLElBQUk7TUFDUGlCLFNBQVMsRUFBRXNNLGVBQWUsR0FDckJoTyxLQUFLLE1BQUFtTyxNQUFBLENBQUFDLGtCQUFBLENBQ0QzTixJQUFJLENBQUNpQixTQUFTLElBQUksRUFBRSxHQUFBME0sa0JBQUEsQ0FBUXBPLEtBQUssSUFBeUIsRUFBRTtJQUFFO0VBRTNFO0VBRUEsSUFBSThPLEdBQUcsS0FBSyxlQUFlLEVBQUU7SUFDM0IsT0FBQTdOLGFBQUEsQ0FBQUEsYUFBQSxLQUNLUixJQUFJO01BQ1ArQixhQUFhLEVBQUV4QztJQUFxQztFQUV4RDtFQUVBLE9BQUFpQixhQUFBLENBQUFBLGFBQUEsS0FDS1IsSUFBSTtJQUNQTixPQUFPLEVBQUFjLGFBQUEsQ0FBQUEsYUFBQSxLQUNGUixJQUFJLENBQUNOLE9BQU8sT0FBQTRPLGVBQUEsS0FDZEQsR0FBRyxFQUFHOU8sS0FBSztFQUNiO0FBRUwsQ0FBQztBQUVELE9BQU8sSUFBTWdQLGdDQUFnQyxHQUFHLFNBQW5DQSxnQ0FBZ0NBLENBQzNDQyxlQUE0QyxFQUM1Q2hILGVBQXdCLEVBQ3hCaUgsbUJBQTJDO0VBQUEsT0FDL0J0SSxPQUFPLENBQUNxSSxlQUFlLElBQUksQ0FBQ2hILGVBQWUsSUFBSWlILG1CQUFtQixLQUFLRCxlQUFlLENBQUM7QUFBQTtBQUVyRyxPQUFPLElBQU1FLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQUlDLGFBQTBCLEVBQUVDLFFBQStCLEVBQWtCO0VBQ25ILElBQUksQ0FBQ0EsUUFBUSxFQUFFO0lBQ2IsT0FBT0QsYUFBYTtFQUN0QjtFQUVBLE9BQUFuTyxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxLQUNLbU8sYUFBYSxHQUNiQyxRQUFRO0lBQ1hsUCxPQUFPLEVBQUFjLGFBQUEsQ0FBQUEsYUFBQSxLQUNGbU8sYUFBYSxDQUFDalAsT0FBTyxHQUNwQmtQLFFBQVEsQ0FBQ2xQLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FDM0I7SUFDRHFDLGFBQWEsRUFBQXZCLGFBQUEsQ0FBQUEsYUFBQSxLQUNSbU8sYUFBYSxDQUFDNU0sYUFBYSxHQUMxQjZNLFFBQVEsQ0FBQzdNLGFBQWEsSUFBSSxDQUFDLENBQUMsQ0FDakM7SUFDRGQsU0FBUyxFQUFFMk4sUUFBUSxDQUFDM04sU0FBUyxJQUFJO0VBQUU7QUFFdkMsQ0FBQztBQUVELE9BQU8sSUFBTTROLGdDQUFnQyxHQUFHLFNBQW5DQSxnQ0FBZ0NBLENBQzNDdEUsSUFBMEIsRUFDaUM7RUFDM0QsSUFBSUEsSUFBSSxLQUFLLGlCQUFpQixFQUFFLE9BQU8saUJBQWlCO0VBQ3hELElBQUlBLElBQUksS0FBSyxZQUFZLEVBQUUsT0FBTyxZQUFZO0VBQzlDLElBQUlBLElBQUksS0FBSyxZQUFZLEVBQUUsT0FBTyxZQUFZO0VBQzlDLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRCxPQUFPLElBQU11RSxvQ0FBb0MsR0FBRyxTQUF2Q0Esb0NBQW9DQSxDQUFJdkUsSUFBMEI7RUFBQSxPQUFjQSxJQUFJLEtBQUssWUFBWTtBQUFBO0FBRWxILE9BQU8sSUFBTXdFLG9DQUFvQyxHQUFHLFNBQXZDQSxvQ0FBb0NBLENBQUk5RSxXQUFvQjtFQUFBLE9BQWM5RCxPQUFPLENBQUM4RCxXQUFXLENBQUM7QUFBQTtBQUUzRyxPQUFPLElBQU0rRSxxQ0FBcUMsR0FBRyxTQUF4Q0EscUNBQXFDQSxDQUFJQyxRQUFxQztFQUFBLE9BQ3pGQSxRQUFRLENBQUNsRSxzQkFBc0I7QUFBQTtBQUVqQyxPQUFPLElBQU1tRSwyQkFBMkIsR0FBRyxTQUE5QkEsMkJBQTJCQSxDQUFBO0VBQUEsT0FBdUI7SUFDN0R6TyxTQUFTLEVBQUUsS0FBSztJQUNoQlEsU0FBUyxFQUFFLEVBQUU7SUFDYnZCLE9BQU8sRUFBRTtNQUNQQyxJQUFJLEVBQUUsRUFBRTtNQUNSZSxLQUFLLEVBQUUsRUFBRTtNQUNUQyxZQUFZLEVBQUUsRUFBRTtNQUNoQkMsZ0JBQWdCLEVBQUUsRUFBRTtNQUNwQkMsUUFBUSxFQUFFLEtBQUs7TUFDZkMsT0FBTyxFQUFFLElBQUk7TUFDYlIsRUFBRSxFQUFFLElBQUk7TUFDUlYsVUFBVSxFQUFFLElBQUk7TUFDaEJtQixjQUFjLEVBQUUsRUFBRTtNQUNsQkMsV0FBVyxFQUFFO0lBQ2YsQ0FBQztJQUNEZSxhQUFhLEVBQUU7TUFDYkMsVUFBVSxFQUFFLFNBQVM7TUFDckJFLE9BQU8sRUFBRSxJQUFJO01BQ2JPLFNBQVMsRUFBRTFEO0lBQ2I7RUFDRixDQUFDO0FBQUEsQ0FBQztBQUVGLE9BQU8sSUFBTW9RLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQUkvUCxNQUFjO0VBQUEsT0FBY0EsTUFBTSxLQUFLLE1BQU0sSUFBSUEsTUFBTSxLQUFLLFFBQVE7QUFBQTtBQUVuSCxPQUFPLElBQU1nUSw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2Q3RQLFNBQTZELEVBQzdEME8sZUFBbUQsRUFDakM7RUFBQSxJQUFBYSxhQUFBO0VBQ2xCLElBQU1DLE9BQU8sSUFBQUQsYUFBQSxHQUFHdlAsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUVRLEVBQUUsY0FBQStPLGFBQUEsY0FBQUEsYUFBQSxHQUFJYixlQUFlO0VBQ2hELE9BQU9jLE9BQU8sSUFBSSxJQUFJLDRCQUFBNUIsTUFBQSxDQUE0QjRCLE9BQU8sSUFBSyxJQUFJO0FBQ3BFLENBQUM7QUFFRCxPQUFPLElBQU1DLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDQyxVQUFtQjtFQUFBLE9BRW5CQSxVQUFVLEdBQUcsK0JBQStCLEdBQUcsNEJBQTRCO0FBQUE7QUFFN0UsT0FBTyxJQUFNQyw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUN2Q0Msc0JBQTBELEVBQzFEQyxjQUFrRDtFQUFBLE9BRWxERCxzQkFBc0IsSUFBSSxJQUFJLElBQUlDLGNBQWMsSUFBSSxJQUFJLElBQUlDLE1BQU0sQ0FBQ0Ysc0JBQXNCLENBQUMsS0FBS0UsTUFBTSxDQUFDRCxjQUFjLENBQUM7QUFBQTtBQUV2SCxPQUFPLElBQU1FLCtCQUErQixHQUFHLFNBQWxDQSwrQkFBK0JBLENBQUkvSSxlQUF3QixFQUFFcUUsa0JBQTJCO0VBQUEsT0FDbkdyRSxlQUFlLElBQUlxRSxrQkFBa0I7QUFBQTtBQUV2QyxPQUFPLElBQU0yRSx1Q0FBdUMsR0FBRyxTQUExQ0EsdUNBQXVDQSxDQUNsRHJQLFNBQWtCO0VBQUEsT0FDaUNBLFNBQVMsR0FBRyxxQkFBcUIsR0FBRyxxQkFBcUI7QUFBQSxDQUFDO0FBRS9HLE9BQU8sSUFBTXNQLG9DQUFvQyxHQUFHLFNBQXZDQSxvQ0FBb0NBLENBQy9DTCxzQkFBMEQsRUFDMURNLGNBQWtEO0VBQUEsT0FFbEROLHNCQUFzQixJQUFJLElBQUksSUFBSU0sY0FBYyxJQUFJLElBQUksSUFBSUosTUFBTSxDQUFDRixzQkFBc0IsQ0FBQyxLQUFLRSxNQUFNLENBQUNJLGNBQWMsQ0FBQztBQUFBO0FBRXZILE9BQU8sSUFBTUMsZ0RBQWdELEdBQUcsU0FBbkRBLGdEQUFnREEsQ0FBSXhGLG9CQUE2QjtFQUFBLE9BQzVGQSxvQkFBb0I7QUFBQTtBQUV0QixPQUFPLElBQU15RiwyQ0FBMkMsR0FBRyxTQUE5Q0EsMkNBQTJDQSxDQUFJNUUsbUJBQTRCO0VBQUEsT0FDdEZBLG1CQUFtQjtBQUFBO0FBRXJCLE9BQU8sSUFBTTZFLGtDQUFrQyxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQzdDYixPQUEyQyxFQUMzQ2MseUJBQWtDO0VBQUEsT0FDdEJqSyxPQUFPLENBQUNtSixPQUFPLElBQUljLHlCQUF5QixDQUFDO0FBQUE7QUFFM0QsT0FBTyxJQUFNQyx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUFJbEYsa0JBQTJCLEVBQUVyRSxlQUF3QjtFQUFBLE9BQzVGcUUsa0JBQWtCLElBQUlyRSxlQUFlO0FBQUE7QUFFdkMsT0FBTyxJQUFNd0osdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FBSTdQLFNBQWtCO0VBQUEsT0FDeERBLFNBQVMsR0FBRyxXQUFXLEdBQUcsVUFBVTtBQUFBO0FBRXRDLE9BQU8sSUFBTThQLDJCQUEyQixHQUFHLFNBQTlCQSwyQkFBMkJBLENBQ3RDbkosU0FBa0IsRUFDbEJFLGtCQUEyQixFQUMzQkUsZUFBd0IsRUFDeEJFLHFCQUE4QjtFQUFBLE9BQ2xCTixTQUFTLElBQUlFLGtCQUFrQixJQUFJRSxlQUFlLElBQUlFLHFCQUFxQjtBQUFBO0FBSXpGLE9BQU8sSUFBTThJLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQUkvUCxTQUFrQixFQUFFZ1EsYUFBc0IsRUFBb0I7RUFDakcsSUFBSWhRLFNBQVMsRUFBRTtJQUNiLE9BQU9nUSxhQUFhLEdBQUcsTUFBTSxHQUFHLFFBQVE7RUFDMUM7RUFDQSxPQUFPLFFBQVE7QUFDakIsQ0FBQztBQUVELE9BQU8sSUFBTUMsd0NBQXdDLEdBQUcsU0FBM0NBLHdDQUF3Q0EsQ0FBQTtFQUFBLE9BQWtCLEtBQUs7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|