@envive-ai/react-hooks 0.3.17 → 0.3.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/dist/application/commerce-api.cjs +14 -13
  2. package/dist/application/commerce-api.js +14 -13
  3. package/dist/application/logging/logger.cjs +16 -10
  4. package/dist/application/logging/logger.js +16 -10
  5. package/dist/application/models/guards/api/isApiFormResponse.cjs +9 -8
  6. package/dist/application/models/guards/api/isApiFormResponse.js +9 -8
  7. package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.cjs +6 -5
  8. package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.js +6 -5
  9. package/dist/application/models/guards/api/isApiOrderResponseAttributes.cjs +19 -18
  10. package/dist/application/models/guards/api/isApiOrderResponseAttributes.js +19 -18
  11. package/dist/application/models/guards/api/isApiOrgConfigResults.cjs +27 -26
  12. package/dist/application/models/guards/api/isApiOrgConfigResults.js +27 -26
  13. package/dist/application/models/guards/api/isApiOrganizationConfig.cjs +23 -22
  14. package/dist/application/models/guards/api/isApiOrganizationConfig.js +23 -22
  15. package/dist/application/models/guards/api/isApiProductResponseAttributes.cjs +12 -11
  16. package/dist/application/models/guards/api/isApiProductResponseAttributes.js +12 -11
  17. package/dist/application/models/guards/api/isApiResponse.cjs +7 -6
  18. package/dist/application/models/guards/api/isApiResponse.js +7 -6
  19. package/dist/application/models/guards/graphQL/isGraphQLColorsConfig.cjs +5 -4
  20. package/dist/application/models/guards/graphQL/isGraphQLColorsConfig.js +5 -4
  21. package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +15 -14
  22. package/dist/application/models/validators/validateGraphQLFrontendConfig.js +15 -14
  23. package/dist/application/utils/analyticsUtils.cjs +4 -3
  24. package/dist/application/utils/analyticsUtils.js +4 -3
  25. package/dist/application/utils/nextMessageRequestToApiRequest.cjs +3 -1
  26. package/dist/application/utils/nextMessageRequestToApiRequest.js +3 -1
  27. package/dist/application/utils/widgetTextRequestToApiRequest.cjs +2 -2
  28. package/dist/application/utils/widgetTextRequestToApiRequest.js +2 -2
  29. package/dist/atoms/app/index.d.cts +7 -7
  30. package/dist/atoms/app/variant.cjs +3 -2
  31. package/dist/atoms/app/variant.js +3 -2
  32. package/dist/atoms/chat/chatState.d.cts +18 -18
  33. package/dist/atoms/chat/chatState.d.ts +18 -18
  34. package/dist/atoms/chat/form.d.cts +2 -2
  35. package/dist/atoms/chat/form.d.ts +2 -2
  36. package/dist/atoms/chat/index.d.cts +2 -2
  37. package/dist/atoms/chat/index.d.ts +2 -2
  38. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  39. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  40. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  41. package/dist/atoms/chat/messageQueue.d.ts +6 -6
  42. package/dist/atoms/chat/performanceMetrics.cjs +3 -2
  43. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  44. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  45. package/dist/atoms/chat/performanceMetrics.js +3 -2
  46. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  47. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  48. package/dist/atoms/chat/replies.d.cts +2 -2
  49. package/dist/atoms/chat/replies.d.ts +3 -3
  50. package/dist/atoms/chat/suggestions.d.cts +2 -2
  51. package/dist/atoms/chat/suggestions.d.ts +2 -2
  52. package/dist/atoms/envive/enviveConfig.cjs +5 -4
  53. package/dist/atoms/envive/enviveConfig.d.cts +13 -13
  54. package/dist/atoms/envive/enviveConfig.d.ts +13 -13
  55. package/dist/atoms/envive/enviveConfig.js +5 -4
  56. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  57. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  58. package/dist/atoms/org/customerService.d.cts +6 -6
  59. package/dist/atoms/org/customerService.d.ts +6 -6
  60. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  61. package/dist/atoms/org/graphqlConfig.d.ts +4 -4
  62. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  63. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  64. package/dist/atoms/org/orgAnalyticsConfig.d.cts +5 -5
  65. package/dist/atoms/org/orgAnalyticsConfig.d.ts +5 -5
  66. package/dist/atoms/search/chatSearch.d.cts +17 -17
  67. package/dist/atoms/search/chatSearch.d.ts +17 -17
  68. package/dist/atoms/search/searchAPI.d.cts +13 -13
  69. package/dist/atoms/search/searchAPI.d.ts +13 -13
  70. package/dist/atoms/widget/chatPreviewLoading.d.cts +2 -2
  71. package/dist/atoms/widget/chatPreviewLoading.d.ts +2 -2
  72. package/dist/contexts/amplitudeContext/amplitudeContext.cjs +4 -3
  73. package/dist/contexts/amplitudeContext/amplitudeContext.js +3 -2
  74. package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +26 -15
  75. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.cts +2 -4
  76. package/dist/contexts/enviveConfigContext/enviveConfigContext.d.ts +2 -4
  77. package/dist/contexts/enviveConfigContext/enviveConfigContext.js +29 -16
  78. package/dist/contexts/enviveConfigContext/index.cjs +2 -1
  79. package/dist/contexts/enviveConfigContext/index.d.cts +2 -1
  80. package/dist/contexts/enviveConfigContext/index.d.ts +2 -1
  81. package/dist/contexts/enviveConfigContext/index.js +2 -1
  82. package/dist/contexts/enviveConfigContext/useEnviveConfig.cjs +12 -0
  83. package/dist/contexts/enviveConfigContext/useEnviveConfig.d.cts +7 -0
  84. package/dist/contexts/enviveConfigContext/useEnviveConfig.d.ts +7 -0
  85. package/dist/contexts/enviveConfigContext/useEnviveConfig.js +11 -0
  86. package/dist/contexts/enviveContext/WindowChatToggleBinder.cjs +7 -5
  87. package/dist/contexts/enviveContext/WindowChatToggleBinder.js +6 -4
  88. package/dist/contexts/enviveContext/enviveContext.cjs +34 -39
  89. package/dist/contexts/enviveContext/enviveContext.js +35 -40
  90. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +7 -6
  91. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +7 -6
  92. package/dist/contexts/graphqlContext/graphqlContext.cjs +8 -7
  93. package/dist/contexts/graphqlContext/graphqlContext.js +8 -7
  94. package/dist/contexts/hardcopyContext/hardcopyContext.cjs +9 -8
  95. package/dist/contexts/hardcopyContext/hardcopyContext.js +9 -8
  96. package/dist/contexts/localStorageContext/localStorageContext.cjs +4 -3
  97. package/dist/contexts/localStorageContext/localStorageContext.js +4 -3
  98. package/dist/contexts/pageContext/pageContext.cjs +3 -2
  99. package/dist/contexts/pageContext/pageContext.js +3 -2
  100. package/dist/contexts/salesAgentContext/chatAPI.cjs +3 -2
  101. package/dist/contexts/salesAgentContext/chatAPI.js +3 -2
  102. package/dist/contexts/salesAgentContext/salesAgentContext.cjs +4 -3
  103. package/dist/contexts/salesAgentContext/salesAgentContext.js +4 -3
  104. package/dist/contexts/salesAgentContext/salesAgentService.cjs +3 -2
  105. package/dist/contexts/salesAgentContext/salesAgentService.js +3 -2
  106. package/dist/contexts/searchContext/searchContext.cjs +8 -6
  107. package/dist/contexts/searchContext/searchContext.js +7 -5
  108. package/dist/contexts/sessionStorageContext/sessionStorageContext.cjs +3 -2
  109. package/dist/contexts/sessionStorageContext/sessionStorageContext.js +3 -2
  110. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  111. package/dist/contexts/types.d.cts +1 -1
  112. package/dist/contexts/types.d.ts +1 -1
  113. package/dist/contexts/typesV3.d.cts +1 -1
  114. package/dist/contexts/typesV3.d.ts +1 -1
  115. package/dist/contexts/uiConfigContext/index.cjs +0 -1
  116. package/dist/contexts/uiConfigContext/index.d.cts +2 -2
  117. package/dist/contexts/uiConfigContext/index.d.ts +2 -2
  118. package/dist/contexts/uiConfigContext/index.js +2 -2
  119. package/dist/contexts/uiConfigContext/uiConfigContext.cjs +13 -30
  120. package/dist/contexts/uiConfigContext/uiConfigContext.d.cts +5 -9
  121. package/dist/contexts/uiConfigContext/uiConfigContext.d.ts +5 -9
  122. package/dist/contexts/uiConfigContext/uiConfigContext.js +14 -29
  123. package/dist/contexts/userIdentityContext/userIdentityContext.cjs +7 -7
  124. package/dist/contexts/userIdentityContext/userIdentityContext.js +7 -7
  125. package/dist/contexts/widgetConfigContext/widgetConfigContext.cjs +4 -3
  126. package/dist/contexts/widgetConfigContext/widgetConfigContext.js +4 -3
  127. package/dist/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.cjs +4 -3
  128. package/dist/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.js +4 -3
  129. package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
  130. package/dist/hooks/WidgetInteraction/useWidgetInteraction.cjs +2 -2
  131. package/dist/hooks/WidgetInteraction/useWidgetInteraction.js +2 -2
  132. package/dist/hooks/WidgetInteraction/utils.cjs +2 -1
  133. package/dist/hooks/WidgetInteraction/utils.js +2 -1
  134. package/dist/hooks/utils.d.ts +1 -1
  135. package/dist/services/amplitudeService/amplitudeService.cjs +8 -7
  136. package/dist/services/amplitudeService/amplitudeService.js +8 -7
  137. package/dist/services/ga4ProjectionService/ga4ProjectionService.cjs +3 -2
  138. package/dist/services/ga4ProjectionService/ga4ProjectionService.js +3 -2
  139. package/dist/services/userIdentityService/userIdentityService.cjs +8 -7
  140. package/dist/services/userIdentityService/userIdentityService.js +8 -7
  141. package/package.json +2 -2
  142. package/src/application/commerce-api.ts +14 -12
  143. package/src/application/logging/logger.ts +33 -8
  144. package/src/application/models/guards/api/isApiFormResponse.ts +9 -7
  145. package/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts +6 -4
  146. package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +19 -17
  147. package/src/application/models/guards/api/isApiOrgConfigResults.ts +40 -48
  148. package/src/application/models/guards/api/isApiOrganizationConfig.ts +25 -38
  149. package/src/application/models/guards/api/isApiProductResponseAttributes.ts +12 -10
  150. package/src/application/models/guards/api/isApiResponse.ts +7 -5
  151. package/src/application/models/guards/graphQL/isGraphQLColorsConfig.ts +5 -3
  152. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +15 -13
  153. package/src/application/utils/analyticsUtils.ts +4 -4
  154. package/src/application/utils/nextMessageRequestToApiRequest.ts +2 -0
  155. package/src/application/utils/widgetTextRequestToApiRequest.ts +1 -2
  156. package/src/atoms/app/variant.ts +3 -1
  157. package/src/atoms/chat/performanceMetrics.ts +3 -1
  158. package/src/atoms/envive/enviveConfig.ts +5 -3
  159. package/src/contexts/amplitudeContext/amplitudeContext.tsx +1 -1
  160. package/src/contexts/enviveConfigContext/__tests__/enviveConfigContext.test.tsx +4 -3
  161. package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +50 -35
  162. package/src/contexts/enviveConfigContext/index.ts +1 -0
  163. package/src/contexts/enviveConfigContext/useEnviveConfig.ts +9 -0
  164. package/src/contexts/enviveContext/WindowChatToggleBinder.tsx +6 -4
  165. package/src/contexts/enviveContext/enviveContext.tsx +40 -45
  166. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +11 -12
  167. package/src/contexts/graphqlContext/__tests__/graphqlContext.test.tsx +4 -4
  168. package/src/contexts/graphqlContext/graphqlContext.tsx +8 -6
  169. package/src/contexts/hardcopyContext/hardcopyContext.tsx +9 -7
  170. package/src/contexts/localStorageContext/__tests__/localStorageContext.test.tsx +6 -6
  171. package/src/contexts/localStorageContext/localStorageContext.tsx +4 -2
  172. package/src/contexts/pageContext/__tests__/pageContext.test.tsx +5 -5
  173. package/src/contexts/pageContext/pageContext.tsx +3 -1
  174. package/src/contexts/salesAgentContext/chatAPI.ts +5 -5
  175. package/src/contexts/salesAgentContext/salesAgentContext.tsx +4 -2
  176. package/src/contexts/salesAgentContext/salesAgentService.ts +4 -2
  177. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +15 -12
  178. package/src/contexts/searchContext/searchContext.tsx +6 -4
  179. package/src/contexts/sessionStorageContext/sessionStorageContext.tsx +3 -1
  180. package/src/contexts/uiConfigContext/__tests__/uiConfigContext.test.tsx +7 -32
  181. package/src/contexts/uiConfigContext/uiConfigContext.tsx +17 -29
  182. package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +5 -5
  183. package/src/contexts/userIdentityContext/userIdentityContext.tsx +7 -6
  184. package/src/contexts/widgetConfigContext/__tests__/widgetConfigContext.test.tsx +7 -7
  185. package/src/contexts/widgetConfigContext/widgetConfigContext.tsx +4 -2
  186. package/src/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.ts +4 -2
  187. package/src/hooks/Search/__tests__/useSearch.test.tsx +14 -8
  188. package/src/hooks/WidgetInteraction/useWidgetInteraction.ts +3 -2
  189. package/src/hooks/WidgetInteraction/utils.ts +3 -1
  190. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +3 -3
  191. package/src/services/amplitudeService/amplitudeService.ts +8 -6
  192. package/src/services/ga4ProjectionService/ga4ProjectionService.ts +3 -1
  193. package/src/services/userIdentityService/userIdentityService.ts +8 -8
@@ -16,6 +16,7 @@ import { FloatingButtonLocation } from "@envive-ai/react-toolkit-v3/FloatingButt
16
16
 
17
17
  //#region src/contexts/graphqlContext/graphqlContext.tsx
18
18
  const GraphQLContext = createContext(null);
19
+ const logger = new logger_default("graphqlContext");
19
20
  const DEFAULT_PAGE_VARIANTS = [{
20
21
  variantId: "plp",
21
22
  variantType: "plp",
@@ -145,7 +146,7 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
145
146
  const isSemanticColors = !window.location.href.includes("globals=merchant");
146
147
  const isStorybook = window.top?.location.href.includes("?path=");
147
148
  if (!v3RootConfig && mockV3ConfigToDeprecatedConfig || isStorybook && isSemanticColors) {
148
- logger_default.logInfo("GraphQLContext | Returning mock v3 config", {
149
+ logger.logDebug("GraphQLContext | Returning mock v3 config", {
149
150
  colorsConfig: mockV3ColorsConfig,
150
151
  frontendConfig: mockV3FrontendConfig
151
152
  });
@@ -159,7 +160,7 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
159
160
  }
160
161
  };
161
162
  }
162
- logger_default.logInfo("GraphQLContext | Returning v3 config", {
163
+ logger.logDebug("GraphQLContext | Returning v3 config", {
163
164
  colorsConfig: v3ColorsConfig,
164
165
  frontendConfig: v3FrontendConfig,
165
166
  orgPageConfig: {
@@ -182,7 +183,7 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
182
183
  }
183
184
  };
184
185
  } catch (err) {
185
- logger_default.logError("Error fetching graphql colors and frontend config", err);
186
+ logger.logError("Error fetching graphql colors and frontend config", err);
186
187
  return {
187
188
  colorsConfig: void 0,
188
189
  frontendConfig: void 0
@@ -209,7 +210,7 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
209
210
  frontendConfig: mockV3FrontendConfig
210
211
  };
211
212
  } catch (err) {
212
- logger_default.logError("Error fetching graphql colors and frontend config", err);
213
+ logger.logError("Error fetching graphql colors and frontend config", err);
213
214
  return {
214
215
  colorsConfig: void 0,
215
216
  frontendConfig: void 0
@@ -218,10 +219,10 @@ const GraphQLProvider = ({ children, requestV3Config = false, mockV3ConfigToDepr
218
219
  }, [executeQuery]);
219
220
  const getConfig = useCallback(async () => {
220
221
  if (requestV3Config) {
221
- logger_default.logInfo("GraphQLContext | Getting v3 config", requestV3Config);
222
+ logger.logDebug("GraphQLContext | Getting v3 config", requestV3Config);
222
223
  return getV3Config();
223
224
  }
224
- logger_default.logInfo("GraphQLContext | Getting colors and frontend config", requestV3Config);
225
+ logger.logDebug("GraphQLContext | Getting colors and frontend config", requestV3Config);
225
226
  return getColorsAndFrontendConfig();
226
227
  }, [
227
228
  getColorsAndFrontendConfig,
@@ -256,4 +257,4 @@ const useGraphQLClient = () => {
256
257
 
257
258
  //#endregion
258
259
  export { GraphQLProvider, useGraphQLClient };
259
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbnRleHQuanMiLCJuYW1lcyI6WyJERUZBVUxUX1BBR0VfVkFSSUFOVFM6IFBhZ2VWYXJpYW50Q29uZmlnW10iLCJ2M3BhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9ncmFwaHFsQ29udGV4dC9ncmFwaHFsQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IGJhc2VVcmxBdG9tLCBvcmdMZXZlbEFwaUtleUF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnknO1xuaW1wb3J0IHsgdmFsaWRhdGVHcmFwaFFMT3JnSWQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQnO1xuaW1wb3J0IHsgQ29sb3JNYXBwaW5nIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWcnO1xuaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7XG4gIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCxcbiAgdHJhbnNmb3JtU25ha2VUb0NhbWVsLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSc7XG5pbXBvcnQgeyBGcm9udGVuZENvbmZpZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZ1YzJztcbmltcG9ydCB7IENvbG9yTWFwcGluZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdWMyc7XG5pbXBvcnQgeyBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uIH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL0Zsb2F0aW5nQnV0dG9uJztcbmltcG9ydCB7IG1vY2tWM0NvbG9yc0NvbmZpZywgbW9ja1YzRnJvbnRlbmRDb25maWcgfSBmcm9tICcuL21vY2tWM0NvbmZpZyc7XG5pbXBvcnQgeyBDb25maWdWZXJzaW9uRW51bSwgV2lkZ2V0Q29uZmlnVjMgfSBmcm9tICcuLi90eXBlc1YzJztcbmltcG9ydCB7XG4gIE9yZ1BhZ2VDb25maWcsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRNb3VudGluZ0NvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxDb2xvck1hcHBpbmc+O1xuZXhwb3J0IHR5cGUgRnJvbnRlbmRDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZz47XG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdWM1Jlc3BvbnNlID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPENvbG9yTWFwcGluZ1YzPjtcbmV4cG9ydCB0eXBlIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZ1YzPjtcblxuZXhwb3J0IHR5cGUgR3JhcGhRbENvbmZpZ1ZhbHVlcyA9IHtcbiAgY29sb3JzQ29uZmlnPzogQ29sb3JzQ29uZmlnUmVzcG9uc2UgfCBDb2xvcnNDb25maWdWM1Jlc3BvbnNlO1xuICBmcm9udGVuZENvbmZpZz86IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZyB8IEZyb250ZW5kQ29uZmlnVjM+O1xuICBvcmdQYWdlQ29uZmlnPzogT3JnUGFnZUNvbmZpZztcbn07XG5cbmludGVyZmFjZSBHcmFwaFFMQ29udGV4dFZhbHVlIHtcbiAgZXhlY3V0ZVF1ZXJ5OiA8VD4ocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8VD47XG4gIGdldE9yZ0lkOiAoKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBnZXRWM0NvbmZpZzogKCkgPT4gUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPjtcbiAgZ2V0Q29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5jb25zdCBHcmFwaFFMQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8R3JhcGhRTENvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuXG50eXBlIEdyYXBoUUxQcm92aWRlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICByZXF1ZXN0VjNDb25maWc/OiBib29sZWFuO1xuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWc/OiBib29sZWFuO1xufTtcblxuY29uc3QgREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW1xuICB7XG4gICAgdmFyaWFudElkOiAncGxwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BscCcsXG4gICAgcGxwSWRFeHRyYWN0b3I6ICd1cmwtcmVzb2x2ZXItcGxwLWlkJyxcbiAgICB3aWRnZXRNb3VudGluZzogW10sXG4gICAgdmFyaWFudFRlc3RzOiBbXG4gICAgICB7XG4gICAgICAgIHRlc3RUeXBlOiBQYWdlVmFyaWFudFRlc3RUeXBlLlVybFJlc29sdmVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgdmFyaWFudElkOiAncGRwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BkcCcsXG4gICAgcHJvZHVjdElkRXh0cmFjdG9yOiAndXJsLXJlc29sdmVyLXByb2R1Y3QtaWQnLFxuICAgIHdpZGdldE1vdW50aW5nOiBbXSxcbiAgICB2YXJpYW50VGVzdHM6IFtcbiAgICAgIHtcbiAgICAgICAgdGVzdFR5cGU6IFBhZ2VWYXJpYW50VGVzdFR5cGUuVXJsUmVzb2x2ZXIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5dO1xuXG5jb25zdCBtYXBQb3NpdGlvblRvQ2FtZWxDYXNlID0gKHBvc2l0aW9uOiBzdHJpbmcpOiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uID0+IHtcbiAgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uTUlERExFX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLXJpZ2h0Jykge1xuICAgIHJldHVybiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uLk1JRERMRV9SSUdIVDtcbiAgfVxuICBpZiAocG9zaXRpb24gPT09ICdib3R0b20tcmlnaHQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX1JJR0hUO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3NpdGlvbjogJHtwb3NpdGlvbn1gKTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRvIHNvbWUgYWRkaXRpb25hbCBjbGVhbnVwIG9mIHRoZSB2MyBmcm9udGVuZCBjb25maWcgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZyBpcyBpbiB0aGUgY29ycmVjdCBmb3JtYXQuXG4gKi9cbmNvbnN0IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwID0gKFxuICB2M1Jvb3RDb25maWc6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbik6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9PiB7XG4gIGNvbnN0IHsgdWlDb25maWdzIH0gPSB2M1Jvb3RDb25maWc7XG4gIGlmICghdWlDb25maWdzKSB7XG4gICAgcmV0dXJuIHYzUm9vdENvbmZpZztcbiAgfVxuICBjb25zdCB7IGZsb2F0aW5nQnV0dG9uLCBsb29rQW5kRmVlbCB9ID0gdWlDb25maWdzIGFzIGFueTtcbiAgaWYgKCFmbG9hdGluZ0J1dHRvbiB8fCAhbG9va0FuZEZlZWwpIHtcbiAgICByZXR1cm4gdjNSb290Q29uZmlnO1xuICB9XG4gIGNvbnN0IHsgZm9udFNpemUsIGxpbmVIZWlnaHQgfSA9IGxvb2tBbmRGZWVsLnR5cG9ncmFwaHkgYXMgYW55O1xuICByZXR1cm4ge1xuICAgIC4uLnYzUm9vdENvbmZpZyxcbiAgICB1aUNvbmZpZ3M6IHtcbiAgICAgIC4uLnVpQ29uZmlncyxcbiAgICAgIGZsb2F0aW5nQnV0dG9uOiB7XG4gICAgICAgIC4uLmZsb2F0aW5nQnV0dG9uLFxuICAgICAgICBwb3NpdGlvbjogbWFwUG9zaXRpb25Ub0NhbWVsQ2FzZShcbiAgICAgICAgICB2M1Jvb3RDb25maWcudWlDb25maWdzPy5mbG9hdGluZ0J1dHRvbj8ucG9zaXRpb24gYXMgc3RyaW5nLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGxvb2tBbmRGZWVsOiB7XG4gICAgICAgIC4uLmxvb2tBbmRGZWVsLFxuICAgICAgICBjaGF0SGVhZGVyTG9nb0RhcmtTcmM6IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvRGFya1NyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgY2hhdEhlYWRlckxvZ29MaWdodFNyYzogbG9va0FuZEZlZWwuY2hhdEhlYWRlckxvZ29MaWdodFNyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgdHlwb2dyYXBoeToge1xuICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHksXG4gICAgICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgICAgIC8vIFRoZSBmb250cyBzaXplcyBhcmUgZGVmaW5lZCBkaWZmZXJlbnRseSBpbiB0aGUgYmFja2VuZCBjb25maWdcbiAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gbWFwIHRoZSB2YWx1ZXMgdG8gdGhlIGNvcnJlY3QgY2FtZWwgY2FzZSBrZXlzXG4gICAgICAgICAgICBiMTogZm9udFNpemU/LmIxIHx8IGZvbnRTaXplPy5iXzEsXG4gICAgICAgICAgICBiMjogZm9udFNpemU/LmIyIHx8IGZvbnRTaXplPy5iXzIsXG4gICAgICAgICAgICBiMzogZm9udFNpemU/LmIzIHx8IGZvbnRTaXplPy5iXzMsXG4gICAgICAgICAgICBiNDogZm9udFNpemU/LmI0IHx8IGZvbnRTaXplPy5iXzQsXG4gICAgICAgICAgICBiNTogZm9udFNpemU/LmI1IHx8IGZvbnRTaXplPy5iXzUsXG4gICAgICAgICAgICBoMTogZm9udFNpemU/LmgxIHx8IGZvbnRTaXplPy5oXzEsXG4gICAgICAgICAgICBoMjogZm9udFNpemU/LmgyIHx8IGZvbnRTaXplPy5oXzIsXG4gICAgICAgICAgICBoMzogZm9udFNpemU/LmgzIHx8IGZvbnRTaXplPy5oXzMsXG4gICAgICAgICAgICBsMTogZm9udFNpemU/LmwxIHx8IGZvbnRTaXplPy5sXzEsXG4gICAgICAgICAgICBsMjogZm9udFNpemU/LmwyIHx8IGZvbnRTaXplPy5sXzIsXG4gICAgICAgICAgICB0MTogZm9udFNpemU/LnQxIHx8IGZvbnRTaXplPy50XzEsXG4gICAgICAgICAgICB0MjogZm9udFNpemU/LnQyIHx8IGZvbnRTaXplPy50XzIsXG4gICAgICAgICAgICB0MzogZm9udFNpemU/LnQzIHx8IGZvbnRTaXplPy50XzMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaW5lSGVpZ2h0OiB7XG4gICAgICAgICAgICAuLi5sb29rQW5kRmVlbC50eXBvZ3JhcGh5LmxpbmVIZWlnaHQsXG4gICAgICAgICAgICAnMTE0JzogbGluZUhlaWdodD8ubGhfMTE0IHx8IGxpbmVIZWlnaHQ/LlsxMTRdLFxuICAgICAgICAgICAgJzExNic6IGxpbmVIZWlnaHQ/LmxoXzExNiB8fCBsaW5lSGVpZ2h0Py5bMTE2XSxcbiAgICAgICAgICAgICcxMTgnOiBsaW5lSGVpZ2h0Py5saF8xMTggfHwgbGluZUhlaWdodD8uWzExOF0sXG4gICAgICAgICAgICAnMTIwJzogbGluZUhlaWdodD8ubGhfMTIwIHx8IGxpbmVIZWlnaHQ/LlsxMjBdLFxuICAgICAgICAgICAgJzEyNCc6IGxpbmVIZWlnaHQ/LmxoXzEyNCB8fCBsaW5lSGVpZ2h0Py5bMTI0XSxcbiAgICAgICAgICAgICcxMjgnOiBsaW5lSGVpZ2h0Py5saF8xMjggfHwgbGluZUhlaWdodD8uWzEyOF0sXG4gICAgICAgICAgICAnMTMwJzogbGluZUhlaWdodD8ubGhfMTMwIHx8IGxpbmVIZWlnaHQ/LlsxMzBdLFxuICAgICAgICAgICAgJzEzMyc6IGxpbmVIZWlnaHQ/LmxoXzEzMyB8fCBsaW5lSGVpZ2h0Py5bMTMzXSxcbiAgICAgICAgICAgICcxNDAnOiBsaW5lSGVpZ2h0Py5saF8xNDAgfHwgbGluZUhlaWdodD8uWzE0MF0sXG4gICAgICAgICAgICAnMTQ4JzogbGluZUhlaWdodD8ubGhfMTQ4IHx8IGxpbmVIZWlnaHQ/LlsxNDhdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgR3JhcGhRTFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIHJlcXVlc3RWM0NvbmZpZyA9IGZhbHNlLFxuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcgPSBmYWxzZSxcbn06IEdyYXBoUUxQcm92aWRlclByb3BzKSA9PiB7XG4gIGNvbnN0IGFwaUtleSA9IHVzZUF0b21WYWx1ZShvcmdMZXZlbEFwaUtleUF0b20pO1xuICBjb25zdCBiYXNlVXJsID0gdXNlQXRvbVZhbHVlKGJhc2VVcmxBdG9tKTtcbiAgY29uc3QgaXNSZWFkeSA9IHVzZU1lbW8oKCkgPT4gQm9vbGVhbihhcGlLZXkgJiYgYmFzZVVybCksIFthcGlLZXksIGJhc2VVcmxdKTtcblxuICBjb25zdCBleGVjdXRlUXVlcnkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyYXBoUUwgY2xpZW50IG5vdCByZWFkeSAtIG1pc3NpbmcgYXBpS2V5IG9yIGJhc2VVcmwnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS92MS9ncmFwaHFsYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXJ5LCB2YXJpYWJsZXMgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoUUwgcmVxdWVzdCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0sXG4gICAgW2FwaUtleSwgYmFzZVVybCwgaXNSZWFkeV0sXG4gICk7XG5cbiAgY29uc3QgZ2V0T3JnSWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkoZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5KTtcbiAgICByZXR1cm4gdmFsaWRhdGVHcmFwaFFMT3JnSWQocmVzcG9uc2UubWUub3JnPy5pZCk7XG4gIH0sIFtleGVjdXRlUXVlcnldKTtcblxuICBjb25zdCBnZXRWM0NvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5KCk7XG4gICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcgcXVlcnkgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgLy8gV2UgbWF5IHVwZGF0ZSB0aGlzIHJvb3QgY29uZmlnIGxvY2F0aW9uIGluIHRoZSBmdXR1cmVcbiAgICAgIGNvbnN0IHYzUm9vdENvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy52X3RocmVlX2NvbmZpZz8udmFsdWVzO1xuICAgICAgY29uc3QgZnJvbnRlbmRWYWx1ZXMgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uZnJvbnRlbmQ/LnZhbHVlcztcblxuICAgICAgY29uc3QgdjNGcm9udGVuZENvbmZpZyA9IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwKFxuICAgICAgICB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnKSBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIGZyb20gZnJvbnRlbmQudmFsdWVzIGlmIHYzUm9vdENvbmZpZyBpcyBub3QgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmcm9udGVuZE1lcmNoYW50T3ZlcnJpZGVDc3MgPSBmcm9udGVuZFZhbHVlcz8ubWVyY2hhbnRfb3ZlcnJpZGVfY3NzO1xuICAgICAgY29uc3QgdjNNZXJjaGFudE92ZXJyaWRlQ3NzID0gdjNGcm9udGVuZENvbmZpZy51aUNvbmZpZ3M/Lm1lcmNoYW50T3ZlcnJpZGVDc3M7XG4gICAgICBjb25zdCBtZXJjaGFudE92ZXJyaWRlQ3NzID0gdjNNZXJjaGFudE92ZXJyaWRlQ3NzIHx8IGZyb250ZW5kTWVyY2hhbnRPdmVycmlkZUNzcztcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy5tb3VudGluZ19jb25maWdzKSA/P1xuICAgICAgICBbXSkgYXMgdW5rbm93biBhcyB7IGtleTogc3RyaW5nOyBjb25maWc6IFdpZGdldE1vdW50aW5nQ29uZmlnIH1bXTtcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3MgPSB2M01vdW50aW5nQ29uZmlnc0FycmF5LnJlZHVjZShcbiAgICAgICAgKGFjYywgeyBrZXksIGNvbmZpZyB9KSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnKGNvbmZpZywga2V5KTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB2M3dpZGdldENvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy53aWRnZXRfY29uZmlncykgPz9cbiAgICAgICAgW10pIGFzIHVua25vd24gYXMgV2lkZ2V0Q29uZmlnVjNbXTtcbiAgICAgIGNvbnN0IHYzV2lkZ2V0Q29uZmlncyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgdjN3aWRnZXRDb25maWdzQXJyYXk/Lm1hcCgoeyB3aWRnZXRDb25maWdJZCwgLi4ucmVzdCB9OiBXaWRnZXRDb25maWdWMykgPT4gW1xuICAgICAgICAgIHdpZGdldENvbmZpZ0lkLFxuICAgICAgICAgIHsgd2lkZ2V0Q29uZmlnSWQsIC4uLnJlc3QgfSBhcyBXaWRnZXRDb25maWdWMyxcbiAgICAgICAgXSksXG4gICAgICApIGFzIFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZ1YzPjtcbiAgICAgIGNvbnN0IHYzcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gQXJyYXkuaXNBcnJheSh2M1Jvb3RDb25maWc/LnBhZ2VfdmFyaWFudHMpXG4gICAgICAgID8gdjNSb290Q29uZmlnPy5wYWdlX3ZhcmlhbnRzLm1hcCh2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cylcbiAgICAgICAgOiBERUZBVUxUX1BBR0VfVkFSSUFOVFM7XG5cbiAgICAgIGNvbnN0IHYzQ29sb3JzQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8uY29sb3JzPy52YWx1ZXMpO1xuICAgICAgY29uc3QgaXNTZW1hbnRpY0NvbG9ycyA9ICF3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZ2xvYmFscz1tZXJjaGFudCcpO1xuICAgICAgY29uc3QgaXNTdG9yeWJvb2sgPSB3aW5kb3cudG9wPy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCc/cGF0aD0nKTtcblxuICAgICAgLy8gSWYgdGhlIHYzIHJvb3QgY29uZmlnIGlzIG5vdCBmb3VuZCBhbmQgd2UgYXJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIHRoZSBkZXByZWNhdGVkIGNvbmZpZywgd2Ugd2lsbCByZXR1cm4gdGhlIG1vY2tlZCBjb25maWdcbiAgICAgIGlmICgoIXYzUm9vdENvbmZpZyAmJiBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcpIHx8IChpc1N0b3J5Ym9vayAmJiBpc1NlbWFudGljQ29sb3JzKSkge1xuICAgICAgICBMb2dnZXIubG9nSW5mbygnR3JhcGhRTENvbnRleHQgfCBSZXR1cm5pbmcgbW9jayB2MyBjb25maWcnLCB7XG4gICAgICAgICAgY29sb3JzQ29uZmlnOiBtb2NrVjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogbW9ja1YzRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IG1vY2tWM0Zyb250ZW5kQ29uZmlnO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yc0NvbmZpZzogaXNTZW1hbnRpY0NvbG9yc1xuICAgICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgICA6ICh2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICAgIHBhZ2VWYXJpYW50czogW10sXG4gICAgICAgICAgICB3aWRnZXRDb25maWdzOiB7fSxcbiAgICAgICAgICAgIG1vdW50aW5nQ29uZmlnczoge30sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgUmV0dXJuaW5nIHYzIGNvbmZpZycsIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiB2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICBmcm9udGVuZENvbmZpZzogdjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHYzTW91bnRpbmdDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yc0NvbmZpZzogdjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgZnJvbnRlbmRDb25maWc6IHtcbiAgICAgICAgICAuLi4odjNGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UpLFxuICAgICAgICAgIG1lcmNoYW50T3ZlcnJpZGVDc3MsXG4gICAgICAgICAgLy8gTmVlZCB0byByZXBsYWNlIHRoZSBhdXRvbWF0aWMgd2lkZ2V0IGNvbmZpZ3Mgd2l0aCB0aGUgb2JqZWN0IGJhc2VkIG9uZXNcbiAgICAgICAgICB3aWRnZXRDb25maWdzOiB2M1dpZGdldENvbmZpZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIG9yZ1BhZ2VDb25maWc6IHtcbiAgICAgICAgICBwYWdlVmFyaWFudHM6IHYzcGFnZVZhcmlhbnRzLFxuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHYzTW91bnRpbmdDb25maWdzLFxuICAgICAgICB9LFxuICAgICAgICAvLyBUT0RPOiBBZGQgd2lkZ2V0cyBhbmQgb3RoZXIgY29uZmlnIGhlcmVcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0Vycm9yIGZldGNoaW5nIGdyYXBocWwgY29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcnLCBlcnIpO1xuICAgICAgcmV0dXJuIHsgY29sb3JzQ29uZmlnOiB1bmRlZmluZWQsIGZyb250ZW5kQ29uZmlnOiB1bmRlZmluZWQgfTtcbiAgICB9XG4gIH0sIFtleGVjdXRlUXVlcnksIG1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZ10pO1xuXG4gIGNvbnN0IGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8R3JhcGhRbENvbmZpZ1ZhbHVlcz4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeSA9IGF3YWl0IGdldENvbG9yc0FuZEZyb250ZW5kUXVlcnkoKTtcbiAgICAgIGlmICghcXVlcnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZyBxdWVyeSBpcyBub3QgZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkocXVlcnkpO1xuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8udmVyc2lvbiAhPT0gQ29uZmlnVmVyc2lvbkVudW0uVjMgJiZcbiAgICAgICAgIW1vY2tWM0NvbmZpZ1RvRGVwcmVjYXRlZENvbmZpZ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yc0NvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy5jb2xvcnM/LnZhbHVlcztcbiAgICAgICAgY29uc3QgZnJvbnRlbmRDb25maWcgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uZnJvbnRlbmQ/LnZhbHVlcztcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWRDb2xvckNvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChjb2xvcnNDb25maWcpO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZEZyb250ZW5kQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKGZyb250ZW5kQ29uZmlnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2xvcnNDb25maWc6IHRyYW5zZm9ybWVkQ29sb3JDb25maWcgYXMgQ29sb3JzQ29uZmlnUmVzcG9uc2UsXG4gICAgICAgICAgZnJvbnRlbmRDb25maWc6IHRyYW5zZm9ybWVkRnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdSZXNwb25zZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IFJFTU9WRSBNT0NLRUQgQ09ORklHIE9OQ0UgV0UgSEFWRSBUSEUgTkVXIENPTkZJRyBJTVBMRU1FTlRFRCBPTiBCQUNLRU5EXG4gICAgICBjb25zdCBtZXJjaGFudENvbG9yc0NvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy5jb2xvcnM/LnZhbHVlcztcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkTWVyY2hhbnRDb2xvckNvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChtZXJjaGFudENvbG9yc0NvbmZpZyk7XG5cbiAgICAgIGNvbnN0IGlzU2VtYW50aWNDb2xvcnMgPSAhd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2dsb2JhbHM9bWVyY2hhbnQnKTtcblxuICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gbW9ja1YzQ29sb3JzQ29uZmlnO1xuICAgICAgY29uc3QgZnJvbnRlbmRDb25maWcgPSBtb2NrVjNGcm9udGVuZENvbmZpZztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiBpc1NlbWFudGljQ29sb3JzXG4gICAgICAgICAgPyAoY29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpXG4gICAgICAgICAgOiAodHJhbnNmb3JtZWRNZXJjaGFudENvbG9yQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UpLFxuICAgICAgICBmcm9udGVuZENvbmZpZzogZnJvbnRlbmRDb25maWcgYXMgRnJvbnRlbmRDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRXJyb3IgZmV0Y2hpbmcgZ3JhcGhxbCBjb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZycsIGVycik7XG4gICAgICByZXR1cm4geyBjb2xvcnNDb25maWc6IHVuZGVmaW5lZCwgZnJvbnRlbmRDb25maWc6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgfSwgW2V4ZWN1dGVRdWVyeV0pO1xuXG4gIGNvbnN0IGdldENvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICBpZiAocmVxdWVzdFYzQ29uZmlnKSB7XG4gICAgICBMb2dnZXIubG9nSW5mbygnR3JhcGhRTENvbnRleHQgfCBHZXR0aW5nIHYzIGNvbmZpZycsIHJlcXVlc3RWM0NvbmZpZyk7XG4gICAgICByZXR1cm4gZ2V0VjNDb25maWcoKTtcbiAgICB9XG4gICAgTG9nZ2VyLmxvZ0luZm8oJ0dyYXBoUUxDb250ZXh0IHwgR2V0dGluZyBjb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZycsIHJlcXVlc3RWM0NvbmZpZyk7XG4gICAgcmV0dXJuIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnKCk7XG4gIH0sIFtnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZywgZ2V0VjNDb25maWcsIHJlcXVlc3RWM0NvbmZpZ10pO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZXhlY3V0ZVF1ZXJ5LFxuICAgICAgZ2V0T3JnSWQsXG4gICAgICBnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZyxcbiAgICAgIGdldFYzQ29uZmlnLFxuICAgICAgZ2V0Q29uZmlnLFxuICAgICAgaXNSZWFkeSxcbiAgICB9KSxcbiAgICBbZXhlY3V0ZVF1ZXJ5LCBnZXRPcmdJZCwgZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsIGdldFYzQ29uZmlnLCBnZXRDb25maWcsIGlzUmVhZHldLFxuICApO1xuXG4gIHJldHVybiA8R3JhcGhRTENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9HcmFwaFFMQ29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5leHBvcnQgY29uc3QgdXNlR3JhcGhRTENsaWVudCA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoR3JhcGhRTENvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUdyYXBoUUxDbGllbnQgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIEdyYXBoUUxQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQ0Es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
260
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbENvbnRleHQuanMiLCJuYW1lcyI6WyJMb2dnZXIiLCJERUZBVUxUX1BBR0VfVkFSSUFOVFM6IFBhZ2VWYXJpYW50Q29uZmlnW10iLCJ2M3BhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9ncmFwaHFsQ29udGV4dC9ncmFwaHFsQ29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUF0b21WYWx1ZSB9IGZyb20gJ2pvdGFpJztcbmltcG9ydCB7IGJhc2VVcmxBdG9tLCBvcmdMZXZlbEFwaUtleUF0b20gfSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyBnZXRNZXJjaGFudE9yZ0lkUXVlcnkgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2dyYXBocWwvcXVlcmllcy9nZXRNZXJjaGFudE9yZ0lkUXVlcnknO1xuaW1wb3J0IHsgdmFsaWRhdGVHcmFwaFFMT3JnSWQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVHcmFwaFFMT3JnSWQnO1xuaW1wb3J0IHsgQ29sb3JNYXBwaW5nIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWcnO1xuaW1wb3J0IHsgRnJvbnRlbmRDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7XG4gIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCxcbiAgdHJhbnNmb3JtU25ha2VUb0NhbWVsLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnLFxuICB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ncmFwaHFsL3F1ZXJpZXMvZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSc7XG5pbXBvcnQgeyBGcm9udGVuZENvbmZpZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZ1YzJztcbmltcG9ydCB7IENvbG9yTWFwcGluZ1YzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jb2xvcnNDb25maWdWMyc7XG5pbXBvcnQgeyBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uIH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL0Zsb2F0aW5nQnV0dG9uJztcbmltcG9ydCB7IG1vY2tWM0NvbG9yc0NvbmZpZywgbW9ja1YzRnJvbnRlbmRDb25maWcgfSBmcm9tICcuL21vY2tWM0NvbmZpZyc7XG5pbXBvcnQgeyBDb25maWdWZXJzaW9uRW51bSwgV2lkZ2V0Q29uZmlnVjMgfSBmcm9tICcuLi90eXBlc1YzJztcbmltcG9ydCB7XG4gIE9yZ1BhZ2VDb25maWcsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRNb3VudGluZ0NvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxDb2xvck1hcHBpbmc+O1xuZXhwb3J0IHR5cGUgRnJvbnRlbmRDb25maWdSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZz47XG5leHBvcnQgdHlwZSBDb2xvcnNDb25maWdWM1Jlc3BvbnNlID0gQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPENvbG9yTWFwcGluZ1YzPjtcbmV4cG9ydCB0eXBlIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZ1YzPjtcblxuZXhwb3J0IHR5cGUgR3JhcGhRbENvbmZpZ1ZhbHVlcyA9IHtcbiAgY29sb3JzQ29uZmlnPzogQ29sb3JzQ29uZmlnUmVzcG9uc2UgfCBDb2xvcnNDb25maWdWM1Jlc3BvbnNlO1xuICBmcm9udGVuZENvbmZpZz86IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxGcm9udGVuZENvbmZpZyB8IEZyb250ZW5kQ29uZmlnVjM+O1xuICBvcmdQYWdlQ29uZmlnPzogT3JnUGFnZUNvbmZpZztcbn07XG5cbmludGVyZmFjZSBHcmFwaFFMQ29udGV4dFZhbHVlIHtcbiAgZXhlY3V0ZVF1ZXJ5OiA8VD4ocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8VD47XG4gIGdldE9yZ0lkOiAoKSA9PiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBnZXRWM0NvbmZpZzogKCkgPT4gUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPjtcbiAgZ2V0Q29uZmlnOiAoKSA9PiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+O1xuICBpc1JlYWR5OiBib29sZWFuO1xufVxuXG5jb25zdCBHcmFwaFFMQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8R3JhcGhRTENvbnRleHRWYWx1ZSB8IG51bGw+KG51bGwpO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdncmFwaHFsQ29udGV4dCcpO1xuXG50eXBlIEdyYXBoUUxQcm92aWRlclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICByZXF1ZXN0VjNDb25maWc/OiBib29sZWFuO1xuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWc/OiBib29sZWFuO1xufTtcblxuY29uc3QgREVGQVVMVF9QQUdFX1ZBUklBTlRTOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gW1xuICB7XG4gICAgdmFyaWFudElkOiAncGxwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BscCcsXG4gICAgcGxwSWRFeHRyYWN0b3I6ICd1cmwtcmVzb2x2ZXItcGxwLWlkJyxcbiAgICB3aWRnZXRNb3VudGluZzogW10sXG4gICAgdmFyaWFudFRlc3RzOiBbXG4gICAgICB7XG4gICAgICAgIHRlc3RUeXBlOiBQYWdlVmFyaWFudFRlc3RUeXBlLlVybFJlc29sdmVyLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgdmFyaWFudElkOiAncGRwJyxcbiAgICB2YXJpYW50VHlwZTogJ3BkcCcsXG4gICAgcHJvZHVjdElkRXh0cmFjdG9yOiAndXJsLXJlc29sdmVyLXByb2R1Y3QtaWQnLFxuICAgIHdpZGdldE1vdW50aW5nOiBbXSxcbiAgICB2YXJpYW50VGVzdHM6IFtcbiAgICAgIHtcbiAgICAgICAgdGVzdFR5cGU6IFBhZ2VWYXJpYW50VGVzdFR5cGUuVXJsUmVzb2x2ZXIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5dO1xuXG5jb25zdCBtYXBQb3NpdGlvblRvQ2FtZWxDYXNlID0gKHBvc2l0aW9uOiBzdHJpbmcpOiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uID0+IHtcbiAgaWYgKHBvc2l0aW9uID09PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLWxlZnQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uTUlERExFX0xFRlQ7XG4gIH1cbiAgaWYgKHBvc2l0aW9uID09PSAnbWlkZGxlLXJpZ2h0Jykge1xuICAgIHJldHVybiBGbG9hdGluZ0J1dHRvbkxvY2F0aW9uLk1JRERMRV9SSUdIVDtcbiAgfVxuICBpZiAocG9zaXRpb24gPT09ICdib3R0b20tcmlnaHQnKSB7XG4gICAgcmV0dXJuIEZsb2F0aW5nQnV0dG9uTG9jYXRpb24uQk9UVE9NX1JJR0hUO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwb3NpdGlvbjogJHtwb3NpdGlvbn1gKTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRvIHNvbWUgYWRkaXRpb25hbCBjbGVhbnVwIG9mIHRoZSB2MyBmcm9udGVuZCBjb25maWcgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZyBpcyBpbiB0aGUgY29ycmVjdCBmb3JtYXQuXG4gKi9cbmNvbnN0IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwID0gKFxuICB2M1Jvb3RDb25maWc6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbik6IEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSA9PiB7XG4gIGNvbnN0IHsgdWlDb25maWdzIH0gPSB2M1Jvb3RDb25maWc7XG4gIGlmICghdWlDb25maWdzKSB7XG4gICAgcmV0dXJuIHYzUm9vdENvbmZpZztcbiAgfVxuICBjb25zdCB7IGZsb2F0aW5nQnV0dG9uLCBsb29rQW5kRmVlbCB9ID0gdWlDb25maWdzIGFzIGFueTtcbiAgaWYgKCFmbG9hdGluZ0J1dHRvbiB8fCAhbG9va0FuZEZlZWwpIHtcbiAgICByZXR1cm4gdjNSb290Q29uZmlnO1xuICB9XG4gIGNvbnN0IHsgZm9udFNpemUsIGxpbmVIZWlnaHQgfSA9IGxvb2tBbmRGZWVsLnR5cG9ncmFwaHkgYXMgYW55O1xuICByZXR1cm4ge1xuICAgIC4uLnYzUm9vdENvbmZpZyxcbiAgICB1aUNvbmZpZ3M6IHtcbiAgICAgIC4uLnVpQ29uZmlncyxcbiAgICAgIGZsb2F0aW5nQnV0dG9uOiB7XG4gICAgICAgIC4uLmZsb2F0aW5nQnV0dG9uLFxuICAgICAgICBwb3NpdGlvbjogbWFwUG9zaXRpb25Ub0NhbWVsQ2FzZShcbiAgICAgICAgICB2M1Jvb3RDb25maWcudWlDb25maWdzPy5mbG9hdGluZ0J1dHRvbj8ucG9zaXRpb24gYXMgc3RyaW5nLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGxvb2tBbmRGZWVsOiB7XG4gICAgICAgIC4uLmxvb2tBbmRGZWVsLFxuICAgICAgICBjaGF0SGVhZGVyTG9nb0RhcmtTcmM6IGxvb2tBbmRGZWVsLmNoYXRIZWFkZXJMb2dvRGFya1NyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgY2hhdEhlYWRlckxvZ29MaWdodFNyYzogbG9va0FuZEZlZWwuY2hhdEhlYWRlckxvZ29MaWdodFNyYyB8fCBsb29rQW5kRmVlbC5jaGF0SGVhZGVyTG9nb1NyYyxcbiAgICAgICAgdHlwb2dyYXBoeToge1xuICAgICAgICAgIC4uLmxvb2tBbmRGZWVsLnR5cG9ncmFwaHksXG4gICAgICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgICAgIC8vIFRoZSBmb250cyBzaXplcyBhcmUgZGVmaW5lZCBkaWZmZXJlbnRseSBpbiB0aGUgYmFja2VuZCBjb25maWdcbiAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gbWFwIHRoZSB2YWx1ZXMgdG8gdGhlIGNvcnJlY3QgY2FtZWwgY2FzZSBrZXlzXG4gICAgICAgICAgICBiMTogZm9udFNpemU/LmIxIHx8IGZvbnRTaXplPy5iXzEsXG4gICAgICAgICAgICBiMjogZm9udFNpemU/LmIyIHx8IGZvbnRTaXplPy5iXzIsXG4gICAgICAgICAgICBiMzogZm9udFNpemU/LmIzIHx8IGZvbnRTaXplPy5iXzMsXG4gICAgICAgICAgICBiNDogZm9udFNpemU/LmI0IHx8IGZvbnRTaXplPy5iXzQsXG4gICAgICAgICAgICBiNTogZm9udFNpemU/LmI1IHx8IGZvbnRTaXplPy5iXzUsXG4gICAgICAgICAgICBoMTogZm9udFNpemU/LmgxIHx8IGZvbnRTaXplPy5oXzEsXG4gICAgICAgICAgICBoMjogZm9udFNpemU/LmgyIHx8IGZvbnRTaXplPy5oXzIsXG4gICAgICAgICAgICBoMzogZm9udFNpemU/LmgzIHx8IGZvbnRTaXplPy5oXzMsXG4gICAgICAgICAgICBsMTogZm9udFNpemU/LmwxIHx8IGZvbnRTaXplPy5sXzEsXG4gICAgICAgICAgICBsMjogZm9udFNpemU/LmwyIHx8IGZvbnRTaXplPy5sXzIsXG4gICAgICAgICAgICB0MTogZm9udFNpemU/LnQxIHx8IGZvbnRTaXplPy50XzEsXG4gICAgICAgICAgICB0MjogZm9udFNpemU/LnQyIHx8IGZvbnRTaXplPy50XzIsXG4gICAgICAgICAgICB0MzogZm9udFNpemU/LnQzIHx8IGZvbnRTaXplPy50XzMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsaW5lSGVpZ2h0OiB7XG4gICAgICAgICAgICAuLi5sb29rQW5kRmVlbC50eXBvZ3JhcGh5LmxpbmVIZWlnaHQsXG4gICAgICAgICAgICAnMTE0JzogbGluZUhlaWdodD8ubGhfMTE0IHx8IGxpbmVIZWlnaHQ/LlsxMTRdLFxuICAgICAgICAgICAgJzExNic6IGxpbmVIZWlnaHQ/LmxoXzExNiB8fCBsaW5lSGVpZ2h0Py5bMTE2XSxcbiAgICAgICAgICAgICcxMTgnOiBsaW5lSGVpZ2h0Py5saF8xMTggfHwgbGluZUhlaWdodD8uWzExOF0sXG4gICAgICAgICAgICAnMTIwJzogbGluZUhlaWdodD8ubGhfMTIwIHx8IGxpbmVIZWlnaHQ/LlsxMjBdLFxuICAgICAgICAgICAgJzEyNCc6IGxpbmVIZWlnaHQ/LmxoXzEyNCB8fCBsaW5lSGVpZ2h0Py5bMTI0XSxcbiAgICAgICAgICAgICcxMjgnOiBsaW5lSGVpZ2h0Py5saF8xMjggfHwgbGluZUhlaWdodD8uWzEyOF0sXG4gICAgICAgICAgICAnMTMwJzogbGluZUhlaWdodD8ubGhfMTMwIHx8IGxpbmVIZWlnaHQ/LlsxMzBdLFxuICAgICAgICAgICAgJzEzMyc6IGxpbmVIZWlnaHQ/LmxoXzEzMyB8fCBsaW5lSGVpZ2h0Py5bMTMzXSxcbiAgICAgICAgICAgICcxNDAnOiBsaW5lSGVpZ2h0Py5saF8xNDAgfHwgbGluZUhlaWdodD8uWzE0MF0sXG4gICAgICAgICAgICAnMTQ4JzogbGluZUhlaWdodD8ubGhfMTQ4IHx8IGxpbmVIZWlnaHQ/LlsxNDhdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgR3JhcGhRTFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIHJlcXVlc3RWM0NvbmZpZyA9IGZhbHNlLFxuICBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcgPSBmYWxzZSxcbn06IEdyYXBoUUxQcm92aWRlclByb3BzKSA9PiB7XG4gIGNvbnN0IGFwaUtleSA9IHVzZUF0b21WYWx1ZShvcmdMZXZlbEFwaUtleUF0b20pO1xuICBjb25zdCBiYXNlVXJsID0gdXNlQXRvbVZhbHVlKGJhc2VVcmxBdG9tKTtcbiAgY29uc3QgaXNSZWFkeSA9IHVzZU1lbW8oKCkgPT4gQm9vbGVhbihhcGlLZXkgJiYgYmFzZVVybCksIFthcGlLZXksIGJhc2VVcmxdKTtcblxuICBjb25zdCBleGVjdXRlUXVlcnkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocXVlcnk6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyYXBoUUwgY2xpZW50IG5vdCByZWFkeSAtIG1pc3NpbmcgYXBpS2V5IG9yIGJhc2VVcmwnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfS92MS9ncmFwaHFsYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2FwaUtleX1gLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHF1ZXJ5LCB2YXJpYWJsZXMgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoUUwgcmVxdWVzdCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaFFMIGVycm9yczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQuZXJyb3JzKX1gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH0sXG4gICAgW2FwaUtleSwgYmFzZVVybCwgaXNSZWFkeV0sXG4gICk7XG5cbiAgY29uc3QgZ2V0T3JnSWQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBleGVjdXRlUXVlcnkoZ2V0TWVyY2hhbnRPcmdJZFF1ZXJ5KTtcbiAgICByZXR1cm4gdmFsaWRhdGVHcmFwaFFMT3JnSWQocmVzcG9uc2UubWUub3JnPy5pZCk7XG4gIH0sIFtleGVjdXRlUXVlcnldKTtcblxuICBjb25zdCBnZXRWM0NvbmZpZyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpOiBQcm9taXNlPEdyYXBoUWxDb25maWdWYWx1ZXM+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCBnZXRDb2xvcnNBbmRGcm9udGVuZFF1ZXJ5KCk7XG4gICAgICBpZiAoIXF1ZXJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcgcXVlcnkgaXMgbm90IGRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgLy8gV2UgbWF5IHVwZGF0ZSB0aGlzIHJvb3QgY29uZmlnIGxvY2F0aW9uIGluIHRoZSBmdXR1cmVcbiAgICAgIGNvbnN0IHYzUm9vdENvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy52X3RocmVlX2NvbmZpZz8udmFsdWVzO1xuICAgICAgY29uc3QgZnJvbnRlbmRWYWx1ZXMgPSByZXNwb25zZS5tZS5nZXRQcm9kdWN0c0NvbmZpZ0J5VmVyc2lvbj8uZnJvbnRlbmQ/LnZhbHVlcztcblxuICAgICAgY29uc3QgdjNGcm9udGVuZENvbmZpZyA9IHYzRnJvbnRlbmRDb25maWdDbGVhbnVwKFxuICAgICAgICB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnKSBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICApO1xuXG4gICAgICAvLyBHZXQgbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIGZyb20gZnJvbnRlbmQudmFsdWVzIGlmIHYzUm9vdENvbmZpZyBpcyBub3QgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmcm9udGVuZE1lcmNoYW50T3ZlcnJpZGVDc3MgPSBmcm9udGVuZFZhbHVlcz8ubWVyY2hhbnRfb3ZlcnJpZGVfY3NzO1xuICAgICAgY29uc3QgdjNNZXJjaGFudE92ZXJyaWRlQ3NzID0gdjNGcm9udGVuZENvbmZpZy51aUNvbmZpZ3M/Lm1lcmNoYW50T3ZlcnJpZGVDc3M7XG4gICAgICBjb25zdCBtZXJjaGFudE92ZXJyaWRlQ3NzID0gdjNNZXJjaGFudE92ZXJyaWRlQ3NzIHx8IGZyb250ZW5kTWVyY2hhbnRPdmVycmlkZUNzcztcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy5tb3VudGluZ19jb25maWdzKSA/P1xuICAgICAgICBbXSkgYXMgdW5rbm93biBhcyB7IGtleTogc3RyaW5nOyBjb25maWc6IFdpZGdldE1vdW50aW5nQ29uZmlnIH1bXTtcblxuICAgICAgY29uc3QgdjNNb3VudGluZ0NvbmZpZ3MgPSB2M01vdW50aW5nQ29uZmlnc0FycmF5LnJlZHVjZShcbiAgICAgICAgKGFjYywgeyBrZXksIGNvbmZpZyB9KSA9PiB7XG4gICAgICAgICAgYWNjW2tleV0gPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybU1vdW50aW5nQ29uZmlnKGNvbmZpZywga2V5KTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB2M3dpZGdldENvbmZpZ3NBcnJheSA9ICh0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwodjNSb290Q29uZmlnPy53aWRnZXRfY29uZmlncykgPz9cbiAgICAgICAgW10pIGFzIHVua25vd24gYXMgV2lkZ2V0Q29uZmlnVjNbXTtcbiAgICAgIGNvbnN0IHYzV2lkZ2V0Q29uZmlncyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgdjN3aWRnZXRDb25maWdzQXJyYXk/Lm1hcCgoeyB3aWRnZXRDb25maWdJZCwgLi4ucmVzdCB9OiBXaWRnZXRDb25maWdWMykgPT4gW1xuICAgICAgICAgIHdpZGdldENvbmZpZ0lkLFxuICAgICAgICAgIHsgd2lkZ2V0Q29uZmlnSWQsIC4uLnJlc3QgfSBhcyBXaWRnZXRDb25maWdWMyxcbiAgICAgICAgXSksXG4gICAgICApIGFzIFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZ1YzPjtcbiAgICAgIGNvbnN0IHYzcGFnZVZhcmlhbnRzOiBQYWdlVmFyaWFudENvbmZpZ1tdID0gQXJyYXkuaXNBcnJheSh2M1Jvb3RDb25maWc/LnBhZ2VfdmFyaWFudHMpXG4gICAgICAgID8gdjNSb290Q29uZmlnPy5wYWdlX3ZhcmlhbnRzLm1hcCh2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cylcbiAgICAgICAgOiBERUZBVUxUX1BBR0VfVkFSSUFOVFM7XG5cbiAgICAgIGNvbnN0IHYzQ29sb3JzQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKHYzUm9vdENvbmZpZz8uY29sb3JzPy52YWx1ZXMpO1xuICAgICAgY29uc3QgaXNTZW1hbnRpY0NvbG9ycyA9ICF3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZ2xvYmFscz1tZXJjaGFudCcpO1xuICAgICAgY29uc3QgaXNTdG9yeWJvb2sgPSB3aW5kb3cudG9wPy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCc/cGF0aD0nKTtcblxuICAgICAgLy8gSWYgdGhlIHYzIHJvb3QgY29uZmlnIGlzIG5vdCBmb3VuZCBhbmQgd2UgYXJlIGNvbmZpZ3VyZWQgdG8gcmV0dXJuIHRoZSBkZXByZWNhdGVkIGNvbmZpZywgd2Ugd2lsbCByZXR1cm4gdGhlIG1vY2tlZCBjb25maWdcbiAgICAgIGlmICgoIXYzUm9vdENvbmZpZyAmJiBtb2NrVjNDb25maWdUb0RlcHJlY2F0ZWRDb25maWcpIHx8IChpc1N0b3J5Ym9vayAmJiBpc1NlbWFudGljQ29sb3JzKSkge1xuICAgICAgICBsb2dnZXIubG9nRGVidWcoJ0dyYXBoUUxDb250ZXh0IHwgUmV0dXJuaW5nIG1vY2sgdjMgY29uZmlnJywge1xuICAgICAgICAgIGNvbG9yc0NvbmZpZzogbW9ja1YzQ29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICAgICAgZnJvbnRlbmRDb25maWc6IG1vY2tWM0Zyb250ZW5kQ29uZmlnIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbG9yc0NvbmZpZyA9IG1vY2tWM0NvbG9yc0NvbmZpZztcbiAgICAgICAgY29uc3QgZnJvbnRlbmRDb25maWcgPSBtb2NrVjNGcm9udGVuZENvbmZpZztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2xvcnNDb25maWc6IGlzU2VtYW50aWNDb2xvcnNcbiAgICAgICAgICAgID8gKGNvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlKVxuICAgICAgICAgICAgOiAodjNDb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSksXG4gICAgICAgICAgZnJvbnRlbmRDb25maWc6IGZyb250ZW5kQ29uZmlnIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgICBvcmdQYWdlQ29uZmlnOiB7XG4gICAgICAgICAgICBwYWdlVmFyaWFudHM6IFtdLFxuICAgICAgICAgICAgd2lkZ2V0Q29uZmlnczoge30sXG4gICAgICAgICAgICBtb3VudGluZ0NvbmZpZ3M6IHt9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5sb2dEZWJ1ZygnR3JhcGhRTENvbnRleHQgfCBSZXR1cm5pbmcgdjMgY29uZmlnJywge1xuICAgICAgICBjb2xvcnNDb25maWc6IHYzQ29sb3JzQ29uZmlnIGFzIENvbG9yc0NvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICAgIGZyb250ZW5kQ29uZmlnOiB2M0Zyb250ZW5kQ29uZmlnIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSxcbiAgICAgICAgb3JnUGFnZUNvbmZpZzoge1xuICAgICAgICAgIHBhZ2VWYXJpYW50czogdjNwYWdlVmFyaWFudHMsXG4gICAgICAgICAgd2lkZ2V0Q29uZmlnczogdjNXaWRnZXRDb25maWdzLFxuICAgICAgICAgIG1vdW50aW5nQ29uZmlnczogdjNNb3VudGluZ0NvbmZpZ3MsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3JzQ29uZmlnOiB2M0NvbG9yc0NvbmZpZyBhcyBDb2xvcnNDb25maWdWM1Jlc3BvbnNlLFxuICAgICAgICBmcm9udGVuZENvbmZpZzoge1xuICAgICAgICAgIC4uLih2M0Zyb250ZW5kQ29uZmlnIGFzIEZyb250ZW5kQ29uZmlnVjNSZXNwb25zZSksXG4gICAgICAgICAgbWVyY2hhbnRPdmVycmlkZUNzcyxcbiAgICAgICAgICAvLyBOZWVkIHRvIHJlcGxhY2UgdGhlIGF1dG9tYXRpYyB3aWRnZXQgY29uZmlncyB3aXRoIHRoZSBvYmplY3QgYmFzZWQgb25lc1xuICAgICAgICAgIHdpZGdldENvbmZpZ3M6IHYzV2lkZ2V0Q29uZmlncyxcbiAgICAgICAgfSxcbiAgICAgICAgb3JnUGFnZUNvbmZpZzoge1xuICAgICAgICAgIHBhZ2VWYXJpYW50czogdjNwYWdlVmFyaWFudHMsXG4gICAgICAgICAgd2lkZ2V0Q29uZmlnczogdjNXaWRnZXRDb25maWdzLFxuICAgICAgICAgIG1vdW50aW5nQ29uZmlnczogdjNNb3VudGluZ0NvbmZpZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRPRE86IEFkZCB3aWRnZXRzIGFuZCBvdGhlciBjb25maWcgaGVyZVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignRXJyb3IgZmV0Y2hpbmcgZ3JhcGhxbCBjb2xvcnMgYW5kIGZyb250ZW5kIGNvbmZpZycsIGVycik7XG4gICAgICByZXR1cm4geyBjb2xvcnNDb25maWc6IHVuZGVmaW5lZCwgZnJvbnRlbmRDb25maWc6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgfSwgW2V4ZWN1dGVRdWVyeSwgbW9ja1YzQ29uZmlnVG9EZXByZWNhdGVkQ29uZmlnXSk7XG5cbiAgY29uc3QgZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcgPSB1c2VDYWxsYmFjayhhc3luYyAoKTogUHJvbWlzZTxHcmFwaFFsQ29uZmlnVmFsdWVzPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gYXdhaXQgZ2V0Q29sb3JzQW5kRnJvbnRlbmRRdWVyeSgpO1xuICAgICAgaWYgKCFxdWVyeSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbG9ycyBhbmQgZnJvbnRlbmQgY29uZmlnIHF1ZXJ5IGlzIG5vdCBkZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGV4ZWN1dGVRdWVyeShxdWVyeSk7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy52ZXJzaW9uICE9PSBDb25maWdWZXJzaW9uRW51bS5WMyAmJlxuICAgICAgICAhbW9ja1YzQ29uZmlnVG9EZXByZWNhdGVkQ29uZmlnXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY29sb3JzQ29uZmlnID0gcmVzcG9uc2UubWUuZ2V0UHJvZHVjdHNDb25maWdCeVZlcnNpb24/LmNvbG9ycz8udmFsdWVzO1xuICAgICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IHJlc3BvbnNlLm1lLmdldFByb2R1Y3RzQ29uZmlnQnlWZXJzaW9uPy5mcm9udGVuZD8udmFsdWVzO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZENvbG9yQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKGNvbG9yc0NvbmZpZyk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRnJvbnRlbmRDb25maWcgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoZnJvbnRlbmRDb25maWcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbG9yc0NvbmZpZzogdHJhbnNmb3JtZWRDb2xvckNvbmZpZyBhcyBDb2xvcnNDb25maWdSZXNwb25zZSxcbiAgICAgICAgICBmcm9udGVuZENvbmZpZzogdHJhbnNmb3JtZWRGcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1Jlc3BvbnNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8gVE9ETzogUkVNT1ZFIE1PQ0tFRCBDT05GSUcgT05DRSBXRSBIQVZFIFRIRSBORVcgQ09ORklHIElNUExFTUVOVEVEIE9OIEJBQ0tFTkRcbiAgICAgIGNvbnN0IG1lcmNoYW50Q29sb3JzQ29uZmlnID0gcmVzcG9uc2UubWUuZ2V0UHJvZHVjdHNDb25maWdCeVZlcnNpb24/LmNvbG9ycz8udmFsdWVzO1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRNZXJjaGFudENvbG9yQ29uZmlnID0gdHJhbnNmb3JtU25ha2VUb0NhbWVsKG1lcmNoYW50Q29sb3JzQ29uZmlnKTtcblxuICAgICAgY29uc3QgaXNTZW1hbnRpY0NvbG9ycyA9ICF3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZ2xvYmFscz1tZXJjaGFudCcpO1xuXG4gICAgICBjb25zdCBjb2xvcnNDb25maWcgPSBtb2NrVjNDb2xvcnNDb25maWc7XG4gICAgICBjb25zdCBmcm9udGVuZENvbmZpZyA9IG1vY2tWM0Zyb250ZW5kQ29uZmlnO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xvcnNDb25maWc6IGlzU2VtYW50aWNDb2xvcnNcbiAgICAgICAgICA/IChjb2xvcnNDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSlcbiAgICAgICAgICA6ICh0cmFuc2Zvcm1lZE1lcmNoYW50Q29sb3JDb25maWcgYXMgQ29sb3JzQ29uZmlnVjNSZXNwb25zZSksXG4gICAgICAgIGZyb250ZW5kQ29uZmlnOiBmcm9udGVuZENvbmZpZyBhcyBGcm9udGVuZENvbmZpZ1YzUmVzcG9uc2UsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdFcnJvciBmZXRjaGluZyBncmFwaHFsIGNvbG9ycyBhbmQgZnJvbnRlbmQgY29uZmlnJywgZXJyKTtcbiAgICAgIHJldHVybiB7IGNvbG9yc0NvbmZpZzogdW5kZWZpbmVkLCBmcm9udGVuZENvbmZpZzogdW5kZWZpbmVkIH07XG4gICAgfVxuICB9LCBbZXhlY3V0ZVF1ZXJ5XSk7XG5cbiAgY29uc3QgZ2V0Q29uZmlnID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8R3JhcGhRbENvbmZpZ1ZhbHVlcz4gPT4ge1xuICAgIGlmIChyZXF1ZXN0VjNDb25maWcpIHtcbiAgICAgIGxvZ2dlci5sb2dEZWJ1ZygnR3JhcGhRTENvbnRleHQgfCBHZXR0aW5nIHYzIGNvbmZpZycsIHJlcXVlc3RWM0NvbmZpZyk7XG4gICAgICByZXR1cm4gZ2V0VjNDb25maWcoKTtcbiAgICB9XG4gICAgbG9nZ2VyLmxvZ0RlYnVnKCdHcmFwaFFMQ29udGV4dCB8IEdldHRpbmcgY29sb3JzIGFuZCBmcm9udGVuZCBjb25maWcnLCByZXF1ZXN0VjNDb25maWcpO1xuICAgIHJldHVybiBnZXRDb2xvcnNBbmRGcm9udGVuZENvbmZpZygpO1xuICB9LCBbZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsIGdldFYzQ29uZmlnLCByZXF1ZXN0VjNDb25maWddKTtcblxuICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIGV4ZWN1dGVRdWVyeSxcbiAgICAgIGdldE9yZ0lkLFxuICAgICAgZ2V0Q29sb3JzQW5kRnJvbnRlbmRDb25maWcsXG4gICAgICBnZXRWM0NvbmZpZyxcbiAgICAgIGdldENvbmZpZyxcbiAgICAgIGlzUmVhZHksXG4gICAgfSksXG4gICAgW2V4ZWN1dGVRdWVyeSwgZ2V0T3JnSWQsIGdldENvbG9yc0FuZEZyb250ZW5kQ29uZmlnLCBnZXRWM0NvbmZpZywgZ2V0Q29uZmlnLCBpc1JlYWR5XSxcbiAgKTtcblxuICByZXR1cm4gPEdyYXBoUUxDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvR3JhcGhRTENvbnRleHQuUHJvdmlkZXI+O1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUdyYXBoUUxDbGllbnQgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KEdyYXBoUUxDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VHcmFwaFFMQ2xpZW50IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBHcmFwaFFMUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0NBLE1BQU0saUJBQWlCLGNBQTBDLEtBQUs7QUFFdEUsTUFBTSxTQUFTLElBQUlBLGVBQU8saUJBQWlCO0FBUTNDLE1BQU1DLHdCQUE2QyxDQUNqRDtDQUNFLFdBQVc7Q0FDWCxhQUFhO0NBQ2IsZ0JBQWdCO0NBQ2hCLGdCQUFnQixFQUFFO0NBQ2xCLGNBQWMsQ0FDWixFQUNFLFVBQVUsb0JBQW9CLGFBQy9CLENBQ0Y7Q0FDRixFQUNEO0NBQ0UsV0FBVztDQUNYLGFBQWE7Q0FDYixvQkFBb0I7Q0FDcEIsZ0JBQWdCLEVBQUU7Q0FDbEIsY0FBYyxDQUNaLEVBQ0UsVUFBVSxvQkFBb0IsYUFDL0IsQ0FDRjtDQUNGLENBQ0Y7QUFFRCxNQUFNLDBCQUEwQixhQUE2QztBQUMzRSxLQUFJLGFBQWEsY0FDZixRQUFPLHVCQUF1QjtBQUVoQyxLQUFJLGFBQWEsY0FDZixRQUFPLHVCQUF1QjtBQUVoQyxLQUFJLGFBQWEsZUFDZixRQUFPLHVCQUF1QjtBQUVoQyxLQUFJLGFBQWEsZUFDZixRQUFPLHVCQUF1QjtBQUVoQyxPQUFNLElBQUksTUFBTSxxQkFBcUIsV0FBVzs7Ozs7QUFNbEQsTUFBTSwyQkFDSixpQkFDNkI7Q0FDN0IsTUFBTSxFQUFFLGNBQWM7QUFDdEIsS0FBSSxDQUFDLFVBQ0gsUUFBTztDQUVULE1BQU0sRUFBRSxnQkFBZ0IsZ0JBQWdCO0FBQ3hDLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUN0QixRQUFPO0NBRVQsTUFBTSxFQUFFLFVBQVUsZUFBZSxZQUFZO0FBQzdDLFFBQU87RUFDTCxHQUFHO0VBQ0gsV0FBVztHQUNULEdBQUc7R0FDSCxnQkFBZ0I7SUFDZCxHQUFHO0lBQ0gsVUFBVSx1QkFDUixhQUFhLFdBQVcsZ0JBQWdCLFNBQ3pDO0lBQ0Y7R0FDRCxhQUFhO0lBQ1gsR0FBRztJQUNILHVCQUF1QixZQUFZLHlCQUF5QixZQUFZO0lBQ3hFLHdCQUF3QixZQUFZLDBCQUEwQixZQUFZO0lBQzFFLFlBQVk7S0FDVixHQUFHLFlBQVk7S0FDZixVQUFVO01BR1IsSUFBSSxVQUFVLE1BQU0sVUFBVTtNQUM5QixJQUFJLFVBQVUsTUFBTSxVQUFVO01BQzlCLElBQUksVUFBVSxNQUFNLFVBQVU7TUFDOUIsSUFBSSxVQUFVLE1BQU0sVUFBVTtNQUM5QixJQUFJLFVBQVUsTUFBTSxVQUFVO01BQzlCLElBQUksVUFBVSxNQUFNLFVBQVU7TUFDOUIsSUFBSSxVQUFVLE1BQU0sVUFBVTtNQUM5QixJQUFJLFVBQVUsTUFBTSxVQUFVO01BQzlCLElBQUksVUFBVSxNQUFNLFVBQVU7TUFDOUIsSUFBSSxVQUFVLE1BQU0sVUFBVTtNQUM5QixJQUFJLFVBQVUsTUFBTSxVQUFVO01BQzlCLElBQUksVUFBVSxNQUFNLFVBQVU7TUFDOUIsSUFBSSxVQUFVLE1BQU0sVUFBVTtNQUMvQjtLQUNELFlBQVk7TUFDVixHQUFHLFlBQVksV0FBVztNQUMxQixPQUFPLFlBQVksVUFBVSxhQUFhO01BQzFDLE9BQU8sWUFBWSxVQUFVLGFBQWE7TUFDMUMsT0FBTyxZQUFZLFVBQVUsYUFBYTtNQUMxQyxPQUFPLFlBQVksVUFBVSxhQUFhO01BQzFDLE9BQU8sWUFBWSxVQUFVLGFBQWE7TUFDMUMsT0FBTyxZQUFZLFVBQVUsYUFBYTtNQUMxQyxPQUFPLFlBQVksVUFBVSxhQUFhO01BQzFDLE9BQU8sWUFBWSxVQUFVLGFBQWE7TUFDMUMsT0FBTyxZQUFZLFVBQVUsYUFBYTtNQUMxQyxPQUFPLFlBQVksVUFBVSxhQUFhO01BQzNDO0tBQ0Y7SUFDRjtHQUNGO0VBQ0Y7O0FBR0gsTUFBYSxtQkFBbUIsRUFDOUIsVUFDQSxrQkFBa0IsT0FDbEIsaUNBQWlDLFlBQ1A7Q0FDMUIsTUFBTSxTQUFTLGFBQWEsbUJBQW1CO0NBQy9DLE1BQU0sVUFBVSxhQUFhLFlBQVk7Q0FDekMsTUFBTSxVQUFVLGNBQWMsUUFBUSxVQUFVLFFBQVEsRUFBRSxDQUFDLFFBQVEsUUFBUSxDQUFDO0NBRTVFLE1BQU0sZUFBZSxZQUNuQixPQUFPLE9BQWUsY0FBd0M7QUFDNUQsTUFBSSxDQUFDLFFBQ0gsT0FBTSxJQUFJLE1BQU0sdURBQXVEO0VBR3pFLE1BQU0sV0FBVyxNQUFNLE1BQU0sR0FBRyxRQUFRLGNBQWM7R0FDcEQsUUFBUTtHQUNSLFNBQVM7SUFDUCxnQkFBZ0I7SUFDaEIsZUFBZSxVQUFVO0lBQzFCO0dBQ0QsTUFBTSxLQUFLLFVBQVU7SUFBRTtJQUFPO0lBQVcsQ0FBQztHQUMzQyxDQUFDO0FBRUYsTUFBSSxDQUFDLFNBQVMsR0FDWixPQUFNLElBQUksTUFBTSwyQkFBMkIsU0FBUyxhQUFhO0VBR25FLE1BQU0sU0FBUyxNQUFNLFNBQVMsTUFBTTtBQUNwQyxNQUFJLE9BQU8sT0FDVCxPQUFNLElBQUksTUFBTSxtQkFBbUIsS0FBSyxVQUFVLE9BQU8sT0FBTyxHQUFHO0FBR3JFLFNBQU8sT0FBTztJQUVoQjtFQUFDO0VBQVE7RUFBUztFQUFRLENBQzNCO0NBRUQsTUFBTSxXQUFXLFlBQVksWUFBWTtBQUV2QyxTQUFPLHNCQURVLE1BQU0sYUFBYSxzQkFBc0IsRUFDckIsR0FBRyxLQUFLLEdBQUc7SUFDL0MsQ0FBQyxhQUFhLENBQUM7Q0FFbEIsTUFBTSxjQUFjLFlBQVksWUFBMEM7QUFDeEUsTUFBSTtHQUNGLE1BQU0sUUFBUSxNQUFNLDJCQUEyQjtBQUMvQyxPQUFJLENBQUMsTUFDSCxPQUFNLElBQUksTUFBTSxrREFBa0Q7R0FFcEUsTUFBTSxXQUFXLE1BQU0sYUFBYSxNQUFNO0dBRzFDLE1BQU0sZUFBZSxTQUFTLEdBQUcsNEJBQTRCLGdCQUFnQjtHQUM3RSxNQUFNLGlCQUFpQixTQUFTLEdBQUcsNEJBQTRCLFVBQVU7R0FFekUsTUFBTSxtQkFBbUIsd0JBQ3ZCLHNCQUFzQixhQUFhLENBQ3BDO0dBR0QsTUFBTSw4QkFBOEIsZ0JBQWdCO0dBRXBELE1BQU0sc0JBRHdCLGlCQUFpQixXQUFXLHVCQUNMO0dBS3JELE1BQU0scUJBSDBCLHNCQUFzQixjQUFjLGlCQUFpQixJQUNuRixFQUFFLEVBRTZDLFFBQzlDLEtBQUssRUFBRSxLQUFLLGFBQWE7QUFDeEIsUUFBSSxPQUFPLG1DQUFtQyxRQUFRLElBQUk7QUFDMUQsV0FBTztNQUVULEVBQUUsQ0FDSDtHQUVELE1BQU0sdUJBQXdCLHNCQUFzQixjQUFjLGVBQWUsSUFDL0UsRUFBRTtHQUNKLE1BQU0sa0JBQWtCLE9BQU8sWUFDN0Isc0JBQXNCLEtBQUssRUFBRSxnQkFBZ0IsR0FBRyxXQUEyQixDQUN6RSxnQkFDQTtJQUFFO0lBQWdCLEdBQUc7SUFBTSxDQUM1QixDQUFDLENBQ0g7R0FDRCxNQUFNQyxpQkFBc0MsTUFBTSxRQUFRLGNBQWMsY0FBYyxHQUNsRixjQUFjLGNBQWMsSUFBSSxpQ0FBaUMsR0FDakU7R0FFSixNQUFNLGlCQUFpQixzQkFBc0IsY0FBYyxRQUFRLE9BQU87R0FDMUUsTUFBTSxtQkFBbUIsQ0FBQyxPQUFPLFNBQVMsS0FBSyxTQUFTLG1CQUFtQjtHQUMzRSxNQUFNLGNBQWMsT0FBTyxLQUFLLFNBQVMsS0FBSyxTQUFTLFNBQVM7QUFHaEUsT0FBSyxDQUFDLGdCQUFnQixrQ0FBb0MsZUFBZSxrQkFBbUI7QUFDMUYsV0FBTyxTQUFTLDZDQUE2QztLQUMzRCxjQUFjO0tBQ2QsZ0JBQWdCO0tBQ2pCLENBQUM7QUFHRixXQUFPO0tBQ0wsY0FBYyxtQkFISyxxQkFLZDtLQUNMLGdCQUxxQjtLQU1yQixlQUFlO01BQ2IsY0FBYyxFQUFFO01BQ2hCLGVBQWUsRUFBRTtNQUNqQixpQkFBaUIsRUFBRTtNQUNwQjtLQUNGOztBQUdILFVBQU8sU0FBUyx3Q0FBd0M7SUFDdEQsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixlQUFlO0tBQ2IsY0FBYztLQUNkLGVBQWU7S0FDZixpQkFBaUI7S0FDbEI7SUFDRixDQUFDO0FBRUYsVUFBTztJQUNMLGNBQWM7SUFDZCxnQkFBZ0I7S0FDZCxHQUFJO0tBQ0o7S0FFQSxlQUFlO0tBQ2hCO0lBQ0QsZUFBZTtLQUNiLGNBQWM7S0FDZCxlQUFlO0tBQ2YsaUJBQWlCO0tBQ2xCO0lBRUY7V0FDTSxLQUFLO0FBQ1osVUFBTyxTQUFTLHFEQUFxRCxJQUFJO0FBQ3pFLFVBQU87SUFBRSxjQUFjO0lBQVcsZ0JBQWdCO0lBQVc7O0lBRTlELENBQUMsY0FBYywrQkFBK0IsQ0FBQztDQUVsRCxNQUFNLDZCQUE2QixZQUFZLFlBQTBDO0FBQ3ZGLE1BQUk7R0FDRixNQUFNLFFBQVEsTUFBTSwyQkFBMkI7QUFDL0MsT0FBSSxDQUFDLE1BQ0gsT0FBTSxJQUFJLE1BQU0sa0RBQWtEO0dBRXBFLE1BQU0sV0FBVyxNQUFNLGFBQWEsTUFBTTtBQUMxQyxPQUNFLFNBQVMsR0FBRyw0QkFBNEIsWUFBWSxrQkFBa0IsTUFDdEUsQ0FBQyxnQ0FDRDtJQUNBLE1BQU0sZUFBZSxTQUFTLEdBQUcsNEJBQTRCLFFBQVE7SUFDckUsTUFBTSxpQkFBaUIsU0FBUyxHQUFHLDRCQUE0QixVQUFVO0FBR3pFLFdBQU87S0FDTCxjQUg2QixzQkFBc0IsYUFBYTtLQUloRSxnQkFIZ0Msc0JBQXNCLGVBQWU7S0FJdEU7O0dBR0gsTUFBTSx1QkFBdUIsU0FBUyxHQUFHLDRCQUE0QixRQUFRO0dBQzdFLE1BQU0saUNBQWlDLHNCQUFzQixxQkFBcUI7QUFPbEYsVUFBTztJQUNMLGNBTnVCLENBQUMsT0FBTyxTQUFTLEtBQUssU0FBUyxtQkFBbUIsR0FFdEQscUJBTWQ7SUFDTCxnQkFOcUI7SUFPdEI7V0FDTSxLQUFLO0FBQ1osVUFBTyxTQUFTLHFEQUFxRCxJQUFJO0FBQ3pFLFVBQU87SUFBRSxjQUFjO0lBQVcsZ0JBQWdCO0lBQVc7O0lBRTlELENBQUMsYUFBYSxDQUFDO0NBRWxCLE1BQU0sWUFBWSxZQUFZLFlBQTBDO0FBQ3RFLE1BQUksaUJBQWlCO0FBQ25CLFVBQU8sU0FBUyxzQ0FBc0MsZ0JBQWdCO0FBQ3RFLFVBQU8sYUFBYTs7QUFFdEIsU0FBTyxTQUFTLHVEQUF1RCxnQkFBZ0I7QUFDdkYsU0FBTyw0QkFBNEI7SUFDbEM7RUFBQztFQUE0QjtFQUFhO0VBQWdCLENBQUM7Q0FFOUQsTUFBTSxRQUFRLGVBQ0w7RUFDTDtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDRCxHQUNEO0VBQUM7RUFBYztFQUFVO0VBQTRCO0VBQWE7RUFBVztFQUFRLENBQ3RGO0FBRUQsUUFBTyxvQkFBQyxlQUFlO0VBQWdCO0VBQVE7R0FBbUM7O0FBR3BGLE1BQWEseUJBQXlCO0NBQ3BDLE1BQU0sVUFBVSxXQUFXLGVBQWU7QUFDMUMsS0FBSSxDQUFDLFFBQ0gsT0FBTSxJQUFJLE1BQU0seURBQXlEO0FBRTNFLFFBQU8ifQ==
@@ -17,6 +17,7 @@ let jotai = require("jotai");
17
17
  let uuid = require("uuid");
18
18
 
19
19
  //#region src/contexts/hardcopyContext/hardcopyContext.tsx
20
+ const logger = new require_logger.default("hardcopyContext");
20
21
  const convertToHardcopyResponse = (response) => {
21
22
  return {
22
23
  responseId: response.responseId,
@@ -181,7 +182,7 @@ const HardcopyProvider = ({ children, hardcopyOverride }) => {
181
182
  const { featureFlagService } = require_featureFlagServiceContext.useFeatureFlagService();
182
183
  const getHardcopyFromBackend = (0, react.useCallback)(async (request) => {
183
184
  if (hardcopyOverride?.[request.widgetType]) {
184
- require_logger.default.logInfo("hardcopyContext | using hardcopy override", request.widgetType);
185
+ logger.logDebug("using hardcopy override", request.widgetType);
185
186
  return hardcopyOverride[request.widgetType];
186
187
  }
187
188
  const overrideConfigVersion = require_urlsParser.getQueryParam("spiffy_config_version") || require_urlsParser.getQueryParam("envive_config_version") || void 0;
@@ -205,7 +206,7 @@ const HardcopyProvider = ({ children, hardcopyOverride }) => {
205
206
  const response = await require_application_commerce_api.default.getHardcopy(widgetTextRequest);
206
207
  if (response) {
207
208
  const convertedResponse = convertToHardcopyResponse(response);
208
- require_logger.default.logInfo("hardcopyContext | converted response", convertedResponse);
209
+ logger.logDebug("converted response", convertedResponse);
209
210
  trackEvent({
210
211
  eventName: require_eventNames.EnviveMetricsEventName.WidgetTextResponse,
211
212
  eventProps: {
@@ -218,11 +219,11 @@ const HardcopyProvider = ({ children, hardcopyOverride }) => {
218
219
  return convertedResponse;
219
220
  }
220
221
  } catch (error) {
221
- require_logger.default.logError("hardcopyContext | error getting hardcopy from backend", error);
222
+ logger.logError("error getting hardcopy from backend", error);
222
223
  }
223
224
  const mockResponse = MOCK_HARDCOPY_RESPONSE[request.widgetType];
224
225
  if (mockResponse) {
225
- require_logger.default.logInfo("hardcopyContext | no real response, using mock", mockResponse);
226
+ logger.logDebug("no real response, using mock", mockResponse);
226
227
  return mockResponse;
227
228
  }
228
229
  throw new Error(`No hardcopy response found for widget type: ${request.widgetType}`);
@@ -235,10 +236,10 @@ const HardcopyProvider = ({ children, hardcopyOverride }) => {
235
236
  ]);
236
237
  const getHardcopy = (0, react.useCallback)(async (request) => {
237
238
  setIsLoading(true);
238
- require_logger.default.logInfo("hardcopyContext | retrieving hardcopy", languages);
239
- require_logger.default.logInfo("hardcopyContext | request", request);
239
+ logger.logDebug("retrieving hardcopy", languages);
240
+ logger.logDebug("request", request);
240
241
  const response = await getHardcopyFromBackend(request);
241
- require_logger.default.logInfo("hardcopyContext | returning hardcopy response", response);
242
+ logger.logDebug("returning hardcopy response", response);
242
243
  if (!response) {
243
244
  setIsLoading(false);
244
245
  throw new Error(`No hardcopy response found for widget type: ${request.widgetType}`);
@@ -264,4 +265,4 @@ const useHardcopy = () => {
264
265
  //#endregion
265
266
  exports.HardcopyProvider = HardcopyProvider;
266
267
  exports.useHardcopy = useHardcopy;
267
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlDb250ZXh0LmNqcyIsIm5hbWVzIjpbInRvQ2FtZWxDYXNlIiwiTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iLCJXaWRnZXRUeXBlVjMiLCJIYXJkY29weVByb3ZpZGVyOiBSZWFjdC5GQzxIYXJkY29weVByb3ZpZGVyUHJvcHM+IiwiYXBwRGV0YWlsc0F0b20iLCJ1c2VBbXBsaXR1ZGUiLCJ1c2VGZWF0dXJlRmxhZ1NlcnZpY2UiLCJnZXRRdWVyeVBhcmFtIiwid2lkZ2V0VGV4dFJlcXVlc3Q6IFdpZGdldFRleHRSZXF1ZXN0IiwiRW52aXZlTWV0cmljc0V2ZW50TmFtZSIsIkNvbW1lcmNlQXBpQ2xpZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL2hhcmRjb3B5Q29udGV4dC9oYXJkY29weUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlYWN0Tm9kZSwgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IHsgV2lkZ2V0U3RyaW5nLCBXaWRnZXRUZXh0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dCc7XG5pbXBvcnQgeyBXaWRnZXRUZXh0UmVxdWVzdCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3dpZGdldFRleHRSZXF1ZXN0JztcblxuaW1wb3J0IHsgdXNlQXRvbVZhbHVlIH0gZnJvbSAnam90YWknO1xuaW1wb3J0IHsgYXBwRGV0YWlsc0F0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJztcbmltcG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCB7IHRvQ2FtZWxDYXNlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnLi4vdHlwZXNWMyc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICcuLi9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlQW1wbGl0dWRlIH0gZnJvbSAnLi4vYW1wbGl0dWRlQ29udGV4dCc7XG5cbmludGVyZmFjZSBIYXJkY29weVJlcXVlc3Qge1xuICB3aWRnZXRUeXBlOiBXaWRnZXRUeXBlVjM7XG4gIHVzZXJFdmVudDogVXNlckV2ZW50O1xufVxuXG5leHBvcnQgdHlwZSBIYXJkY29weVJlc3BvbnNlID0ge1xuICByZXNwb25zZUlkOiBzdHJpbmc7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHJhd1ZhbHVlcz86IFJlY29yZDxzdHJpbmcsIFdpZGdldFN0cmluZyB8IFdpZGdldFN0cmluZ1tdPjtcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT47XG59O1xuXG5pbnRlcmZhY2UgSGFyZGNvcHlDb250ZXh0VHlwZSB7XG4gIGdldEhhcmRjb3B5OiAoSGFyZGNvcHlSZXF1ZXN0OiBIYXJkY29weVJlcXVlc3QpID0+IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbn1cblxuY29uc3QgY29udmVydFRvSGFyZGNvcHlSZXNwb25zZSA9IChyZXNwb25zZTogV2lkZ2V0VGV4dCk6IEhhcmRjb3B5UmVzcG9uc2UgPT4ge1xuICByZXR1cm4ge1xuICAgIHJlc3BvbnNlSWQ6IHJlc3BvbnNlLnJlc3BvbnNlSWQsXG4gICAgbGFuZ3VhZ2U6IHJlc3BvbnNlLmxhbmd1YWdlLFxuICAgIHJhd1ZhbHVlczogcmVzcG9uc2UudmFsdWVzLFxuICAgIHZhbHVlczogT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UudmFsdWVzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIGtleSBmcm9tIHNuYWtlX2Nhc2UgdG8gY2FtZWxDYXNlXG4gICAgICAgIHRvQ2FtZWxDYXNlKGtleSksXG4gICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdLnZhbHVlIDogdmFsdWUubWFwKHYgPT4gdi52YWx1ZSksXG4gICAgICBdKSxcbiAgICApLFxuICB9O1xufTtcblxuLy8gVGhlc2UgYXJlIGp1c3Qgc2FtcGxlIHJlc3BvbnNlcyBmb3IgdGhlIHNha2Ugb2YgdGVzdGluZy5cbi8vIEFzIHdlIHN0YXJ0IHRvIGJ1aWxkIHRoZSBhY3R1YWwgd2lkZ2V0cyB3ZSBzaG91bGQgZGV0ZXJtaW5lIHdoYXQgdGhlIGFjdHVhbFxuLy8gdmFsdWVzIGFuZCB0aGVpciBuYW1lcyBzaG91bGQgYmUuXG5jb25zdCBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFOiBQYXJ0aWFsPFJlY29yZDxXaWRnZXRUeXBlVjMsIEhhcmRjb3B5UmVzcG9uc2U+PiA9IHtcbiAgW1dpZGdldFR5cGVWMy5Qcm9tcHRDYXJvdXNlbFYzXToge1xuICAgIHJlc3BvbnNlSWQ6IHV1aWQoKSxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHByb21wdEJ1dHRvblRleHRzOiBbXG4gICAgICAgICdXaGF0IGFyZSB5b3VyIGJlc3Qgc2VsbGVycz8nLFxuICAgICAgICAnU2hvdyBtZSBzdW1tZXIgZHJlc3NlcycsXG4gICAgICAgICdEbyB5b3UgaGF2ZSBmcmVlIHNoaXBwaW5nPycsXG4gICAgICAgICdXaGF0IHNpemVzIGFyZSBhdmFpbGFibGU/JyxcbiAgICAgICAgJ0NhbiBJIHJldHVybiBpdGVtcz8nLFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlRpdGxlZFByb21wdENhcm91c2VsVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ05lZWQgc29tZSBoZWxwPycsXG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5Tb2NpYWxQcm9vZlYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgbnVtYmVyT2ZDdXN0b21lcnNUZXh0OiAnMTIzIGN1c3RvbWVycycsXG4gICAgICBjdXN0b21lclF1ZXJ5VGV4dDogJ2ZvdW5kIHdoYXQgdGhleSB3ZXJlIGxvb2tpbmcgZm9yLi4uJyxcbiAgICAgIHByaW1hcnlCdXR0b25UZXh0OiAnU3RhcnQgc2hvcHBpbmcnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uVGl0bGVUZXh0OiAnUG9wdWxhciBzZWFyY2hlcycsXG4gICAgICBzZWNvbmRhcnlCdXR0b25UZXh0czogW1xuICAgICAgICAnV2h5IHNob3VsZCBJIGJ1eSBmcm9tIHlvdT8nLFxuICAgICAgICAnSG93IGRvIEkgcmV0dXJuIGFuIGl0ZW0/JyxcbiAgICAgICAgJ05ldyBhcnJpdmFscycsXG4gICAgICAgICdTYWxlIGl0ZW1zJyxcbiAgICAgICAgJ1BvcHVsYXIgaXRlbXMnLFxuICAgICAgXSxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5UeXBpbmdBbmltYXRpb25WM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIGhlYWRsaW5lVGV4dDogJ05lZWQgaGVscCBmaW5kaW5nJyxcbiAgICAgIGFuaW1hdGVkVGV4dFNlcXVlbmNlOiBbXG4gICAgICAgICd0aGUgcGVyZmVjdCBnaWZ0IGZvciB5b3VyIGxvdmVkIG9uZXM/JyxcbiAgICAgICAgJ3NvbWV0aGluZyBzcGVjaWFsIGZvciB0aGUgaG9saWRheXM/JyxcbiAgICAgICAgJ3RoZSBpZGVhbCBwcmVzZW50IGZvciBzb21lb25lIHNwZWNpYWw/JyxcbiAgICAgIF0sXG4gICAgICBoaW50VGV4dDogJ0FzayBtZSBhbnl0aGluZycsXG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICBdLFxuICAgICAgdGV4dEZpZWxkQXJpYUxhYmVsOiAnQXNrIG1lIGFueXRoaW5nJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3Q29tcGFyaXNvblYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgaGVhZGxpbmVUZXh0OiAnTmVlZCBoZWxwIGNvbXBhcmluZz8nLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3TG9hZGluZ1YzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuUHJvbXB0QnV0dG9uQ2Fyb3VzZWxXaXRoSW1hZ2VWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnTmVlZCBzb21lIGhlbHA/JyxcbiAgICAgIHByb21wdEJ1dHRvbnNUZXh0czogWydIZWxwIG1lIGZpbmQgYSBwcm9kdWN0JywgXCJXaGF0J3Mgb24geW91ciBtaW5kP1wiLCAnVGFsayB0byBhIGh1bWFuJ10sXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuUHJvZHVjdENhcmRWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICBoZWFkbGluZTogJ0Rpc2NvdmVyIFlvdXIgUGVyZmVjdCBTdHlsZScsXG4gICAgICBhbmltYXRlZFRleHQ6IFtcbiAgICAgICAgJ3RoZSBwZXJmZWN0IG91dGZpdCBmb3IgYW55IG9jY2FzaW9uJyxcbiAgICAgICAgJ3RyZW5kaW5nIGZhc2hpb24gdGhhdCBmaXRzIHlvdXIgbGlmZXN0eWxlJyxcbiAgICAgICAgJ3F1YWxpdHkgcGllY2VzIHRoYXQgbGFzdCcsXG4gICAgICBdLFxuICAgICAgcHJvbXB0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgICBwbGFjZWhvbGRlcjogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5GbG9hdGluZ0NoYXRWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB3ZWxjb21lTWVzc2FnZVRpdGxlOiAnV2VsY29tZSB0byBFbnZpdmUgQUknLFxuICAgICAgd2VsY29tZU1lc3NhZ2VUZXh0OlxuICAgICAgICAnWW91ciBwZXJzb25hbCBzaG9wcGVyIHRyYWluZWQgb24gdGhlIGNvbGxlY3RpdmUga25vd2xlZGdlIG9mIHRob3VzYW5kcyBvZiByZWFsIGV4cGVydHMhJyxcbiAgICAgIGNoYXRGb290ZXJUZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgICAgZGlzY2xhaW1lclRleHQ6ICdUaGlzIGlzIGEgZGlzY2xhaW1lci4uLicsXG4gICAgICBsZWZ0VG9nZ2xlTGFiZWw6ICdTaG9wIHdpdGggQUknLFxuICAgICAgcmlnaHRUb2dnbGVMYWJlbDogJ0xpdmUgc3VwcG9ydCcsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5GdWxsUGFnZVNhbGVzQWdlbnRWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB3ZWxjb21lTWVzc2FnZVRpdGxlOiAnV2VsY29tZSB0byBFbnZpdmUgQUknLFxuICAgICAgd2VsY29tZU1lc3NhZ2VUZXh0OlxuICAgICAgICAnWW91ciBwZXJzb25hbCBzaG9wcGVyIHRyYWluZWQgb24gdGhlIGNvbGxlY3RpdmUga25vd2xlZGdlIG9mIHRob3VzYW5kcyBvZiByZWFsIGV4cGVydHMhJyxcbiAgICAgIGNoYXRGb290ZXJUZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgICAgZGlzY2xhaW1lclRleHQ6ICdUaGlzIGlzIGEgZGlzY2xhaW1lci4uLicsXG4gICAgfSxcbiAgfSxcbn07XG5cbmNvbnN0IEhhcmRjb3B5Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8SGFyZGNvcHlDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuaW50ZXJmYWNlIEhhcmRjb3B5UHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGhhcmRjb3B5T3ZlcnJpZGU/OiBQYXJ0aWFsPFJlY29yZDxXaWRnZXRUeXBlVjMsIEhhcmRjb3B5UmVzcG9uc2U+Pjtcbn1cblxuZXhwb3J0IGNvbnN0IEhhcmRjb3B5UHJvdmlkZXI6IFJlYWN0LkZDPEhhcmRjb3B5UHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgaGFyZGNvcHlPdmVycmlkZSxcbn0pID0+IHtcbiAgY29uc3QgbGFuZ3VhZ2VzID0gdXNlTWVtbygoKSA9PiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLCBbXSk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VBdG9tVmFsdWUoYXBwRGV0YWlsc0F0b20pO1xuICBjb25zdCB7IHRyYWNrRXZlbnQgfSA9IHVzZUFtcGxpdHVkZSgpO1xuXG4gIGNvbnN0IHsgZmVhdHVyZUZsYWdTZXJ2aWNlIH0gPSB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UoKTtcbiAgY29uc3QgZ2V0SGFyZGNvcHlGcm9tQmFja2VuZCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChyZXF1ZXN0OiBIYXJkY29weVJlcXVlc3QpOiBQcm9taXNlPEhhcmRjb3B5UmVzcG9uc2U+ID0+IHtcbiAgICAgIGlmIChoYXJkY29weU92ZXJyaWRlPy5bcmVxdWVzdC53aWRnZXRUeXBlXSkge1xuICAgICAgICBMb2dnZXIubG9nSW5mbygnaGFyZGNvcHlDb250ZXh0IHwgdXNpbmcgaGFyZGNvcHkgb3ZlcnJpZGUnLCByZXF1ZXN0LndpZGdldFR5cGUpO1xuICAgICAgICByZXR1cm4gaGFyZGNvcHlPdmVycmlkZVtyZXF1ZXN0LndpZGdldFR5cGVdITtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG92ZXJyaWRlQ29uZmlnVmVyc2lvbiA9XG4gICAgICAgIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICAgIGdldFF1ZXJ5UGFyYW0oJ2Vudml2ZV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHdpZGdldFRleHRSZXF1ZXN0OiBXaWRnZXRUZXh0UmVxdWVzdCA9IHtcbiAgICAgICAgcmVxdWVzdElkOiB1dWlkKCksXG4gICAgICAgIHdpZGdldFR5cGU6IHJlcXVlc3Qud2lkZ2V0VHlwZSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZmVhdHVyZUZsYWdzOiBmZWF0dXJlRmxhZ1NlcnZpY2U/LmdldEZlYXR1cmVGbGFncygpIHx8IHt9LFxuICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VzWzBdIHx8ICdlbicsXG4gICAgICAgIG92ZXJyaWRlQ29uZmlnVmVyc2lvbixcbiAgICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIH07XG4gICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFRleHRSZXF1ZXN0LFxuICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgd2lkZ2V0X3R5cGU6IHJlcXVlc3Qud2lkZ2V0VHlwZSxcbiAgICAgICAgICByZXF1ZXN0X2lkOiB3aWRnZXRUZXh0UmVxdWVzdC5yZXF1ZXN0SWQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SGFyZGNvcHkod2lkZ2V0VGV4dFJlcXVlc3QpO1xuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRSZXNwb25zZSA9IGNvbnZlcnRUb0hhcmRjb3B5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIExvZ2dlci5sb2dJbmZvKCdoYXJkY29weUNvbnRleHQgfCBjb252ZXJ0ZWQgcmVzcG9uc2UnLCBjb252ZXJ0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlc3BvbnNlLFxuICAgICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICAgICAgICByZXNwb25zZV9pZDogcmVzcG9uc2UucmVzcG9uc2VJZCxcbiAgICAgICAgICAgICAgd2lkZ2V0X3RleHQ6IHJlc3BvbnNlLnZhbHVlcyxcbiAgICAgICAgICAgICAgcmVxdWVzdF9pZDogd2lkZ2V0VGV4dFJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gY29udmVydGVkUmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcignaGFyZGNvcHlDb250ZXh0IHwgZXJyb3IgZ2V0dGluZyBoYXJkY29weSBmcm9tIGJhY2tlbmQnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBtb2NrUmVzcG9uc2UgPSBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFW3JlcXVlc3Qud2lkZ2V0VHlwZV07XG4gICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgIExvZ2dlci5sb2dJbmZvKCdoYXJkY29weUNvbnRleHQgfCBubyByZWFsIHJlc3BvbnNlLCB1c2luZyBtb2NrJywgbW9ja1Jlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuIG1vY2tSZXNwb25zZTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gaGFyZGNvcHkgcmVzcG9uc2UgZm91bmQgZm9yIHdpZGdldCB0eXBlOiAke3JlcXVlc3Qud2lkZ2V0VHlwZX1gKTtcbiAgICB9LFxuICAgIFtjb250ZXh0LCBmZWF0dXJlRmxhZ1NlcnZpY2UsIGhhcmRjb3B5T3ZlcnJpZGUsIGxhbmd1YWdlcywgdHJhY2tFdmVudF0sXG4gICk7XG5cbiAgY29uc3QgZ2V0SGFyZGNvcHkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiA9PiB7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICBMb2dnZXIubG9nSW5mbygnaGFyZGNvcHlDb250ZXh0IHwgcmV0cmlldmluZyBoYXJkY29weScsIGxhbmd1YWdlcyk7XG5cbiAgICAgIExvZ2dlci5sb2dJbmZvKCdoYXJkY29weUNvbnRleHQgfCByZXF1ZXN0JywgcmVxdWVzdCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldEhhcmRjb3B5RnJvbUJhY2tlbmQocmVxdWVzdCk7XG4gICAgICBMb2dnZXIubG9nSW5mbygnaGFyZGNvcHlDb250ZXh0IHwgcmV0dXJuaW5nIGhhcmRjb3B5IHJlc3BvbnNlJywgcmVzcG9uc2UpO1xuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gICAgICB9XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG4gICAgW2dldEhhcmRjb3B5RnJvbUJhY2tlbmQsIGxhbmd1YWdlc10sXG4gICk7XG5cbiAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKCgpID0+ICh7IGdldEhhcmRjb3B5LCBpc0xvYWRpbmcgfSksIFtnZXRIYXJkY29weSwgaXNMb2FkaW5nXSk7XG5cbiAgcmV0dXJuIDxIYXJkY29weUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9IYXJkY29weUNvbnRleHQuUHJvdmlkZXI+O1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUhhcmRjb3B5ID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChIYXJkY29weUNvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUhhcmRjb3B5IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBIYXJkY29weVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0NBLE1BQU0sNkJBQTZCLGFBQTJDO0FBQzVFLFFBQU87RUFDTCxZQUFZLFNBQVM7RUFDckIsVUFBVSxTQUFTO0VBQ25CLFdBQVcsU0FBUztFQUNwQixRQUFRLE9BQU8sWUFDYixPQUFPLFFBQVEsU0FBUyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssV0FBVyxDQUVwREEsNENBQVksSUFBSSxFQUNoQixNQUFNLFdBQVcsSUFBSSxNQUFNLEdBQUcsUUFBUSxNQUFNLEtBQUksTUFBSyxFQUFFLE1BQU0sQ0FDOUQsQ0FBQyxDQUNIO0VBQ0Y7O0FBTUgsTUFBTUMseUJBQTBFO0VBQzdFQyxzQ0FBYSxtQkFBbUI7RUFDL0IsMEJBQWtCO0VBQ2xCLFVBQVU7RUFDVixRQUFRLEVBQ04sbUJBQW1CO0dBQ2pCO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDRCxFQUNGO0VBQ0Y7RUFDQUEsc0NBQWEseUJBQXlCO0VBQ3JDLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWixtQkFBbUI7SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0dBQ0Y7RUFDRjtFQUNBQSxzQ0FBYSxnQkFBZ0I7RUFDNUIsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04sWUFBWTtHQUNa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
268
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlDb250ZXh0LmNqcyIsIm5hbWVzIjpbIkxvZ2dlciIsInRvQ2FtZWxDYXNlIiwiTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iLCJXaWRnZXRUeXBlVjMiLCJIYXJkY29weVByb3ZpZGVyOiBSZWFjdC5GQzxIYXJkY29weVByb3ZpZGVyUHJvcHM+IiwiYXBwRGV0YWlsc0F0b20iLCJ1c2VBbXBsaXR1ZGUiLCJ1c2VGZWF0dXJlRmxhZ1NlcnZpY2UiLCJnZXRRdWVyeVBhcmFtIiwid2lkZ2V0VGV4dFJlcXVlc3Q6IFdpZGdldFRleHRSZXF1ZXN0IiwiRW52aXZlTWV0cmljc0V2ZW50TmFtZSIsIkNvbW1lcmNlQXBpQ2xpZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL2hhcmRjb3B5Q29udGV4dC9oYXJkY29weUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlYWN0Tm9kZSwgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IHsgV2lkZ2V0U3RyaW5nLCBXaWRnZXRUZXh0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dCc7XG5pbXBvcnQgeyBXaWRnZXRUZXh0UmVxdWVzdCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3dpZGdldFRleHRSZXF1ZXN0JztcblxuaW1wb3J0IHsgdXNlQXRvbVZhbHVlIH0gZnJvbSAnam90YWknO1xuaW1wb3J0IHsgYXBwRGV0YWlsc0F0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJztcbmltcG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCB7IHRvQ2FtZWxDYXNlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnLi4vdHlwZXNWMyc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICcuLi9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlQW1wbGl0dWRlIH0gZnJvbSAnLi4vYW1wbGl0dWRlQ29udGV4dCc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ2hhcmRjb3B5Q29udGV4dCcpO1xuXG5pbnRlcmZhY2UgSGFyZGNvcHlSZXF1ZXN0IHtcbiAgd2lkZ2V0VHlwZTogV2lkZ2V0VHlwZVYzO1xuICB1c2VyRXZlbnQ6IFVzZXJFdmVudDtcbn1cblxuZXhwb3J0IHR5cGUgSGFyZGNvcHlSZXNwb25zZSA9IHtcbiAgcmVzcG9uc2VJZDogc3RyaW5nO1xuICBsYW5ndWFnZTogc3RyaW5nO1xuICByYXdWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRTdHJpbmcgfCBXaWRnZXRTdHJpbmdbXT47XG4gIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+O1xufTtcblxuaW50ZXJmYWNlIEhhcmRjb3B5Q29udGV4dFR5cGUge1xuICBnZXRIYXJkY29weTogKEhhcmRjb3B5UmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KSA9PiBQcm9taXNlPEhhcmRjb3B5UmVzcG9uc2U+O1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG59XG5cbmNvbnN0IGNvbnZlcnRUb0hhcmRjb3B5UmVzcG9uc2UgPSAocmVzcG9uc2U6IFdpZGdldFRleHQpOiBIYXJkY29weVJlc3BvbnNlID0+IHtcbiAgcmV0dXJuIHtcbiAgICByZXNwb25zZUlkOiByZXNwb25zZS5yZXNwb25zZUlkLFxuICAgIGxhbmd1YWdlOiByZXNwb25zZS5sYW5ndWFnZSxcbiAgICByYXdWYWx1ZXM6IHJlc3BvbnNlLnZhbHVlcyxcbiAgICB2YWx1ZXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLnZhbHVlcykubWFwKChba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBrZXkgZnJvbSBzbmFrZV9jYXNlIHRvIGNhbWVsQ2FzZVxuICAgICAgICB0b0NhbWVsQ2FzZShrZXkpLFxuICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXS52YWx1ZSA6IHZhbHVlLm1hcCh2ID0+IHYudmFsdWUpLFxuICAgICAgXSksXG4gICAgKSxcbiAgfTtcbn07XG5cbi8vIFRoZXNlIGFyZSBqdXN0IHNhbXBsZSByZXNwb25zZXMgZm9yIHRoZSBzYWtlIG9mIHRlc3RpbmcuXG4vLyBBcyB3ZSBzdGFydCB0byBidWlsZCB0aGUgYWN0dWFsIHdpZGdldHMgd2Ugc2hvdWxkIGRldGVybWluZSB3aGF0IHRoZSBhY3R1YWxcbi8vIHZhbHVlcyBhbmQgdGhlaXIgbmFtZXMgc2hvdWxkIGJlLlxuY29uc3QgTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4gPSB7XG4gIFtXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWM106IHtcbiAgICByZXNwb25zZUlkOiB1dWlkKCksXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdOZWVkIHNvbWUgaGVscD8nLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIG51bWJlck9mQ3VzdG9tZXJzVGV4dDogJzEyMyBjdXN0b21lcnMnLFxuICAgICAgY3VzdG9tZXJRdWVyeVRleHQ6ICdmb3VuZCB3aGF0IHRoZXkgd2VyZSBsb29raW5nIGZvci4uLicsXG4gICAgICBwcmltYXJ5QnV0dG9uVGV4dDogJ1N0YXJ0IHNob3BwaW5nJyxcbiAgICAgIHNlY29uZGFyeUJ1dHRvblRpdGxlVGV4dDogJ1BvcHVsYXIgc2VhcmNoZXMnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doeSBzaG91bGQgSSBidXkgZnJvbSB5b3U/JyxcbiAgICAgICAgJ0hvdyBkbyBJIHJldHVybiBhbiBpdGVtPycsXG4gICAgICAgICdOZXcgYXJyaXZhbHMnLFxuICAgICAgICAnU2FsZSBpdGVtcycsXG4gICAgICAgICdQb3B1bGFyIGl0ZW1zJyxcbiAgICAgIF0sXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuVHlwaW5nQW5pbWF0aW9uVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICBoZWFkbGluZVRleHQ6ICdOZWVkIGhlbHAgZmluZGluZycsXG4gICAgICBhbmltYXRlZFRleHRTZXF1ZW5jZTogW1xuICAgICAgICAndGhlIHBlcmZlY3QgZ2lmdCBmb3IgeW91ciBsb3ZlZCBvbmVzPycsXG4gICAgICAgICdzb21ldGhpbmcgc3BlY2lhbCBmb3IgdGhlIGhvbGlkYXlzPycsXG4gICAgICAgICd0aGUgaWRlYWwgcHJlc2VudCBmb3Igc29tZW9uZSBzcGVjaWFsPycsXG4gICAgICBdLFxuICAgICAgaGludFRleHQ6ICdBc2sgbWUgYW55dGhpbmcnLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgXSxcbiAgICAgIHRleHRGaWVsZEFyaWFMYWJlbDogJ0FzayBtZSBhbnl0aGluZycsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0NvbXBhcmlzb25WM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIGhlYWRsaW5lVGV4dDogJ05lZWQgaGVscCBjb21wYXJpbmc/JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0xvYWRpbmdWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ05lZWQgc29tZSBoZWxwPycsXG4gICAgICBwcm9tcHRCdXR0b25zVGV4dHM6IFsnSGVscCBtZSBmaW5kIGEgcHJvZHVjdCcsIFwiV2hhdCdzIG9uIHlvdXIgbWluZD9cIiwgJ1RhbGsgdG8gYSBodW1hbiddLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgaGVhZGxpbmU6ICdEaXNjb3ZlciBZb3VyIFBlcmZlY3QgU3R5bGUnLFxuICAgICAgYW5pbWF0ZWRUZXh0OiBbXG4gICAgICAgICd0aGUgcGVyZmVjdCBvdXRmaXQgZm9yIGFueSBvY2Nhc2lvbicsXG4gICAgICAgICd0cmVuZGluZyBmYXNoaW9uIHRoYXQgZml0cyB5b3VyIGxpZmVzdHlsZScsXG4gICAgICAgICdxdWFsaXR5IHBpZWNlcyB0aGF0IGxhc3QnLFxuICAgICAgXSxcbiAgICAgIHByb21wdHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgICAgcGxhY2Vob2xkZXI6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRmxvYXRpbmdDaGF0VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgICAgbGVmdFRvZ2dsZUxhYmVsOiAnU2hvcCB3aXRoIEFJJyxcbiAgICAgIHJpZ2h0VG9nZ2xlTGFiZWw6ICdMaXZlIHN1cHBvcnQnLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRnVsbFBhZ2VTYWxlc0FnZW50VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgIH0sXG4gIH0sXG59O1xuXG5jb25zdCBIYXJkY29weUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PEhhcmRjb3B5Q29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmludGVyZmFjZSBIYXJkY29weVByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBoYXJkY29weU92ZXJyaWRlPzogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj47XG59XG5cbmV4cG9ydCBjb25zdCBIYXJkY29weVByb3ZpZGVyOiBSZWFjdC5GQzxIYXJkY29weVByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGhhcmRjb3B5T3ZlcnJpZGUsXG59KSA9PiB7XG4gIGNvbnN0IGxhbmd1YWdlcyA9IHVzZU1lbW8oKCkgPT4gbmF2aWdhdG9yLmxhbmd1YWdlcywgW10pO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBjb250ZXh0ID0gdXNlQXRvbVZhbHVlKGFwcERldGFpbHNBdG9tKTtcbiAgY29uc3QgeyB0cmFja0V2ZW50IH0gPSB1c2VBbXBsaXR1ZGUoKTtcblxuICBjb25zdCB7IGZlYXR1cmVGbGFnU2VydmljZSB9ID0gdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKCk7XG4gIGNvbnN0IGdldEhhcmRjb3B5RnJvbUJhY2tlbmQgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiA9PiB7XG4gICAgICBpZiAoaGFyZGNvcHlPdmVycmlkZT8uW3JlcXVlc3Qud2lkZ2V0VHlwZV0pIHtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCd1c2luZyBoYXJkY29weSBvdmVycmlkZScsIHJlcXVlc3Qud2lkZ2V0VHlwZSk7XG4gICAgICAgIHJldHVybiBoYXJkY29weU92ZXJyaWRlW3JlcXVlc3Qud2lkZ2V0VHlwZV0hO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3ZlcnJpZGVDb25maWdWZXJzaW9uID1cbiAgICAgICAgZ2V0UXVlcnlQYXJhbSgnc3BpZmZ5X2NvbmZpZ192ZXJzaW9uJykgfHxcbiAgICAgICAgZ2V0UXVlcnlQYXJhbSgnZW52aXZlX2NvbmZpZ192ZXJzaW9uJykgfHxcbiAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgd2lkZ2V0VGV4dFJlcXVlc3Q6IFdpZGdldFRleHRSZXF1ZXN0ID0ge1xuICAgICAgICByZXF1ZXN0SWQ6IHV1aWQoKSxcbiAgICAgICAgd2lkZ2V0VHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmZWF0dXJlRmxhZ3M6IGZlYXR1cmVGbGFnU2VydmljZT8uZ2V0RmVhdHVyZUZsYWdzKCkgfHwge30sXG4gICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZXNbMF0gfHwgJ2VuJyxcbiAgICAgICAgb3ZlcnJpZGVDb25maWdWZXJzaW9uLFxuICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgfTtcbiAgICAgIHRyYWNrRXZlbnQoe1xuICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlcXVlc3QsXG4gICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICAgIHJlcXVlc3RfaWQ6IHdpZGdldFRleHRSZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRIYXJkY29weSh3aWRnZXRUZXh0UmVxdWVzdCk7XG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFJlc3BvbnNlID0gY29udmVydFRvSGFyZGNvcHlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdjb252ZXJ0ZWQgcmVzcG9uc2UnLCBjb252ZXJ0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlc3BvbnNlLFxuICAgICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICAgICAgICByZXNwb25zZV9pZDogcmVzcG9uc2UucmVzcG9uc2VJZCxcbiAgICAgICAgICAgICAgd2lkZ2V0X3RleHQ6IHJlc3BvbnNlLnZhbHVlcyxcbiAgICAgICAgICAgICAgcmVxdWVzdF9pZDogd2lkZ2V0VGV4dFJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gY29udmVydGVkUmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5sb2dFcnJvcignZXJyb3IgZ2V0dGluZyBoYXJkY29weSBmcm9tIGJhY2tlbmQnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBtb2NrUmVzcG9uc2UgPSBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFW3JlcXVlc3Qud2lkZ2V0VHlwZV07XG4gICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnbm8gcmVhbCByZXNwb25zZSwgdXNpbmcgbW9jaycsIG1vY2tSZXNwb25zZSk7XG4gICAgICAgIHJldHVybiBtb2NrUmVzcG9uc2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gICAgfSxcbiAgICBbY29udGV4dCwgZmVhdHVyZUZsYWdTZXJ2aWNlLCBoYXJkY29weU92ZXJyaWRlLCBsYW5ndWFnZXMsIHRyYWNrRXZlbnRdLFxuICApO1xuXG4gIGNvbnN0IGdldEhhcmRjb3B5ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHJlcXVlc3Q6IEhhcmRjb3B5UmVxdWVzdCk6IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT4gPT4ge1xuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdyZXRyaWV2aW5nIGhhcmRjb3B5JywgbGFuZ3VhZ2VzKTtcblxuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdyZXF1ZXN0JywgcmVxdWVzdCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldEhhcmRjb3B5RnJvbUJhY2tlbmQocmVxdWVzdCk7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ3JldHVybmluZyBoYXJkY29weSByZXNwb25zZScsIHJlc3BvbnNlKTtcbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBoYXJkY29weSByZXNwb25zZSBmb3VuZCBmb3Igd2lkZ2V0IHR5cGU6ICR7cmVxdWVzdC53aWRnZXRUeXBlfWApO1xuICAgICAgfVxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxuICAgIFtnZXRIYXJkY29weUZyb21CYWNrZW5kLCBsYW5ndWFnZXNdLFxuICApO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbygoKSA9PiAoeyBnZXRIYXJkY29weSwgaXNMb2FkaW5nIH0pLCBbZ2V0SGFyZGNvcHksIGlzTG9hZGluZ10pO1xuXG4gIHJldHVybiA8SGFyZGNvcHlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvSGFyZGNvcHlDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VIYXJkY29weSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoSGFyZGNvcHlDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VIYXJkY29weSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgSGFyZGNvcHlQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQSxNQUFNLFNBQVMsSUFBSUEsdUJBQU8sa0JBQWtCO0FBbUI1QyxNQUFNLDZCQUE2QixhQUEyQztBQUM1RSxRQUFPO0VBQ0wsWUFBWSxTQUFTO0VBQ3JCLFVBQVUsU0FBUztFQUNuQixXQUFXLFNBQVM7RUFDcEIsUUFBUSxPQUFPLFlBQ2IsT0FBTyxRQUFRLFNBQVMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLFdBQVcsQ0FFcERDLDRDQUFZLElBQUksRUFDaEIsTUFBTSxXQUFXLElBQUksTUFBTSxHQUFHLFFBQVEsTUFBTSxLQUFJLE1BQUssRUFBRSxNQUFNLENBQzlELENBQUMsQ0FDSDtFQUNGOztBQU1ILE1BQU1DLHlCQUEwRTtFQUM3RUMsc0NBQWEsbUJBQW1CO0VBQy9CLDBCQUFrQjtFQUNsQixVQUFVO0VBQ1YsUUFBUSxFQUNOLG1CQUFtQjtHQUNqQjtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0QsRUFDRjtFQUNGO0VBQ0FBLHNDQUFhLHlCQUF5QjtFQUNyQyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osbUJBQW1CO0lBQ2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNGO0VBQ0Y7RUFDQUEsc0NBQWEsZ0JBQWdCO0VBQzVCLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWix1QkFBdUI7R0FDdkIsbUJBQW1CO0dBQ25CLG1CQUFtQjtHQUNuQiwwQkFBMEI7R0FDMUIsc0JBQXNCO0lBQ3BCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNELDBCQUEwQjtHQUMzQjtFQUNGO0VBQ0FBLHNDQUFhLG9CQUFvQjtFQUNoQyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osY0FBYztHQUNkLHNCQUFzQjtJQUNwQjtJQUNBO0lBQ0E7SUFDRDtHQUNELFVBQVU7R0FDVixtQkFBbUI7SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNELG9CQUFvQjtHQUNyQjtFQUNGO0VBQ0FBLHNDQUFhLDBCQUEwQjtFQUN0QyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osY0FBYztHQUNkLDBCQUEwQjtHQUMzQjtFQUNGO0VBQ0FBLHNDQUFhLHVCQUF1QjtFQUNuQyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osMEJBQTBCO0dBQzNCO0VBQ0Y7RUFDQUEsc0NBQWEsZ0JBQWdCO0VBQzVCLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWiwwQkFBMEI7R0FDM0I7RUFDRjtFQUNBQSxzQ0FBYSxrQ0FBa0M7RUFDOUMsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04sWUFBWTtHQUNaLG9CQUFvQjtJQUFDO0lBQTBCO0lBQXdCO0lBQWtCO0dBQ3pGLDBCQUEwQjtHQUMzQjtFQUNGO0VBQ0FBLHNDQUFhLGdCQUFnQjtFQUM1QixZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixVQUFVO0dBQ1YsY0FBYztJQUNaO0lBQ0E7SUFDQTtJQUNEO0dBQ0QsU0FBUztJQUNQO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNELGFBQWE7R0FDZDtFQUNGO0VBQ0FBLHNDQUFhLGlCQUFpQjtFQUM3QixZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixxQkFBcUI7R0FDckIsb0JBQ0U7R0FDRixvQ0FBb0M7R0FDcEMsZ0JBQWdCO0dBQ2hCLGlCQUFpQjtHQUNqQixrQkFBa0I7R0FDbkI7RUFDRjtFQUNBQSxzQ0FBYSx1QkFBdUI7RUFDbkMsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04scUJBQXFCO0dBQ3JCLG9CQUNFO0dBQ0Ysb0NBQW9DO0dBQ3BDLGdCQUFnQjtHQUNqQjtFQUNGO0NBQ0Y7QUFFRCxNQUFNLDJDQUFpRSxPQUFVO0FBT2pGLE1BQWFDLG9CQUFxRCxFQUNoRSxVQUNBLHVCQUNJO0NBQ0osTUFBTSxxQ0FBMEIsVUFBVSxXQUFXLEVBQUUsQ0FBQztDQUN4RCxNQUFNLENBQUMsV0FBVyxvQ0FBeUIsTUFBTTtDQUNqRCxNQUFNLGtDQUF1QkMsdUNBQWU7Q0FDNUMsTUFBTSxFQUFFLGVBQWVDLHVDQUFjO0NBRXJDLE1BQU0sRUFBRSx1QkFBdUJDLHlEQUF1QjtDQUN0RCxNQUFNLGdEQUNKLE9BQU8sWUFBd0Q7QUFDN0QsTUFBSSxtQkFBbUIsUUFBUSxhQUFhO0FBQzFDLFVBQU8sU0FBUywyQkFBMkIsUUFBUSxXQUFXO0FBQzlELFVBQU8saUJBQWlCLFFBQVE7O0VBRWxDLE1BQU0sd0JBQ0pDLGlDQUFjLHdCQUF3QixJQUN0Q0EsaUNBQWMsd0JBQXdCLElBQ3RDO0VBQ0YsTUFBTUMsb0JBQXVDO0dBQzNDLHlCQUFpQjtHQUNqQixZQUFZLFFBQVE7R0FDcEI7R0FDQSxjQUFjLG9CQUFvQixpQkFBaUIsSUFBSSxFQUFFO0dBQ3pELFVBQVUsVUFBVSxNQUFNO0dBQzFCO0dBQ0EsS0FBSyxPQUFPLFNBQVM7R0FDdEI7QUFDRCxhQUFXO0dBQ1QsV0FBV0MsMENBQXVCO0dBQ2xDLFlBQVk7SUFDVixhQUFhLFFBQVE7SUFDckIsWUFBWSxrQkFBa0I7SUFDL0I7R0FDRixDQUFDO0FBQ0YsTUFBSTtHQUNGLE1BQU0sV0FBVyxNQUFNQyx5Q0FBa0IsWUFBWSxrQkFBa0I7QUFDdkUsT0FBSSxVQUFVO0lBQ1osTUFBTSxvQkFBb0IsMEJBQTBCLFNBQVM7QUFDN0QsV0FBTyxTQUFTLHNCQUFzQixrQkFBa0I7QUFDeEQsZUFBVztLQUNULFdBQVdELDBDQUF1QjtLQUNsQyxZQUFZO01BQ1YsYUFBYSxRQUFRO01BQ3JCLGFBQWEsU0FBUztNQUN0QixhQUFhLFNBQVM7TUFDdEIsWUFBWSxrQkFBa0I7TUFDL0I7S0FDRixDQUFDO0FBQ0YsV0FBTzs7V0FFRixPQUFPO0FBQ2QsVUFBTyxTQUFTLHVDQUF1QyxNQUFNOztFQUUvRCxNQUFNLGVBQWUsdUJBQXVCLFFBQVE7QUFDcEQsTUFBSSxjQUFjO0FBQ2hCLFVBQU8sU0FBUyxnQ0FBZ0MsYUFBYTtBQUM3RCxVQUFPOztBQUVULFFBQU0sSUFBSSxNQUFNLCtDQUErQyxRQUFRLGFBQWE7SUFFdEY7RUFBQztFQUFTO0VBQW9CO0VBQWtCO0VBQVc7RUFBVyxDQUN2RTtDQUVELE1BQU0scUNBQ0osT0FBTyxZQUF3RDtBQUM3RCxlQUFhLEtBQUs7QUFDbEIsU0FBTyxTQUFTLHVCQUF1QixVQUFVO0FBRWpELFNBQU8sU0FBUyxXQUFXLFFBQVE7RUFDbkMsTUFBTSxXQUFXLE1BQU0sdUJBQXVCLFFBQVE7QUFDdEQsU0FBTyxTQUFTLCtCQUErQixTQUFTO0FBQ3hELE1BQUksQ0FBQyxVQUFVO0FBQ2IsZ0JBQWEsTUFBTTtBQUNuQixTQUFNLElBQUksTUFBTSwrQ0FBK0MsUUFBUSxhQUFhOztBQUV0RixlQUFhLE1BQU07QUFDbkIsU0FBTztJQUVULENBQUMsd0JBQXdCLFVBQVUsQ0FDcEM7Q0FFRCxNQUFNLGtDQUF1QjtFQUFFO0VBQWE7RUFBVyxHQUFHLENBQUMsYUFBYSxVQUFVLENBQUM7QUFFbkYsUUFBTywyQ0FBQyxnQkFBZ0I7RUFBZ0I7RUFBUTtHQUFvQzs7QUFHdEYsTUFBYSxvQkFBb0I7Q0FDL0IsTUFBTSxnQ0FBcUIsZ0JBQWdCO0FBQzNDLEtBQUksQ0FBQyxRQUNILE9BQU0sSUFBSSxNQUFNLHFEQUFxRDtBQUV2RSxRQUFPIn0=
@@ -16,6 +16,7 @@ import { useAtomValue } from "jotai";
16
16
  import { v4 } from "uuid";
17
17
 
18
18
  //#region src/contexts/hardcopyContext/hardcopyContext.tsx
19
+ const logger = new logger_default("hardcopyContext");
19
20
  const convertToHardcopyResponse = (response) => {
20
21
  return {
21
22
  responseId: response.responseId,
@@ -180,7 +181,7 @@ const HardcopyProvider = ({ children, hardcopyOverride }) => {
180
181
  const { featureFlagService } = useFeatureFlagService();
181
182
  const getHardcopyFromBackend = useCallback(async (request) => {
182
183
  if (hardcopyOverride?.[request.widgetType]) {
183
- logger_default.logInfo("hardcopyContext | using hardcopy override", request.widgetType);
184
+ logger.logDebug("using hardcopy override", request.widgetType);
184
185
  return hardcopyOverride[request.widgetType];
185
186
  }
186
187
  const overrideConfigVersion = getQueryParam("spiffy_config_version") || getQueryParam("envive_config_version") || void 0;
@@ -204,7 +205,7 @@ const HardcopyProvider = ({ children, hardcopyOverride }) => {
204
205
  const response = await commerce_api_default.getHardcopy(widgetTextRequest);
205
206
  if (response) {
206
207
  const convertedResponse = convertToHardcopyResponse(response);
207
- logger_default.logInfo("hardcopyContext | converted response", convertedResponse);
208
+ logger.logDebug("converted response", convertedResponse);
208
209
  trackEvent({
209
210
  eventName: EnviveMetricsEventName.WidgetTextResponse,
210
211
  eventProps: {
@@ -217,11 +218,11 @@ const HardcopyProvider = ({ children, hardcopyOverride }) => {
217
218
  return convertedResponse;
218
219
  }
219
220
  } catch (error) {
220
- logger_default.logError("hardcopyContext | error getting hardcopy from backend", error);
221
+ logger.logError("error getting hardcopy from backend", error);
221
222
  }
222
223
  const mockResponse = MOCK_HARDCOPY_RESPONSE[request.widgetType];
223
224
  if (mockResponse) {
224
- logger_default.logInfo("hardcopyContext | no real response, using mock", mockResponse);
225
+ logger.logDebug("no real response, using mock", mockResponse);
225
226
  return mockResponse;
226
227
  }
227
228
  throw new Error(`No hardcopy response found for widget type: ${request.widgetType}`);
@@ -234,10 +235,10 @@ const HardcopyProvider = ({ children, hardcopyOverride }) => {
234
235
  ]);
235
236
  const getHardcopy = useCallback(async (request) => {
236
237
  setIsLoading(true);
237
- logger_default.logInfo("hardcopyContext | retrieving hardcopy", languages);
238
- logger_default.logInfo("hardcopyContext | request", request);
238
+ logger.logDebug("retrieving hardcopy", languages);
239
+ logger.logDebug("request", request);
239
240
  const response = await getHardcopyFromBackend(request);
240
- logger_default.logInfo("hardcopyContext | returning hardcopy response", response);
241
+ logger.logDebug("returning hardcopy response", response);
241
242
  if (!response) {
242
243
  setIsLoading(false);
243
244
  throw new Error(`No hardcopy response found for widget type: ${request.widgetType}`);
@@ -262,4 +263,4 @@ const useHardcopy = () => {
262
263
 
263
264
  //#endregion
264
265
  export { HardcopyProvider, useHardcopy };
265
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlDb250ZXh0LmpzIiwibmFtZXMiOlsiTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iLCJ1dWlkIiwiSGFyZGNvcHlQcm92aWRlcjogUmVhY3QuRkM8SGFyZGNvcHlQcm92aWRlclByb3BzPiIsIndpZGdldFRleHRSZXF1ZXN0OiBXaWRnZXRUZXh0UmVxdWVzdCIsIkNvbW1lcmNlQXBpQ2xpZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL2hhcmRjb3B5Q29udGV4dC9oYXJkY29weUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlYWN0Tm9kZSwgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IHsgV2lkZ2V0U3RyaW5nLCBXaWRnZXRUZXh0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dCc7XG5pbXBvcnQgeyBXaWRnZXRUZXh0UmVxdWVzdCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3dpZGdldFRleHRSZXF1ZXN0JztcblxuaW1wb3J0IHsgdXNlQXRvbVZhbHVlIH0gZnJvbSAnam90YWknO1xuaW1wb3J0IHsgYXBwRGV0YWlsc0F0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJztcbmltcG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCB7IHRvQ2FtZWxDYXNlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnLi4vdHlwZXNWMyc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICcuLi9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlQW1wbGl0dWRlIH0gZnJvbSAnLi4vYW1wbGl0dWRlQ29udGV4dCc7XG5cbmludGVyZmFjZSBIYXJkY29weVJlcXVlc3Qge1xuICB3aWRnZXRUeXBlOiBXaWRnZXRUeXBlVjM7XG4gIHVzZXJFdmVudDogVXNlckV2ZW50O1xufVxuXG5leHBvcnQgdHlwZSBIYXJkY29weVJlc3BvbnNlID0ge1xuICByZXNwb25zZUlkOiBzdHJpbmc7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHJhd1ZhbHVlcz86IFJlY29yZDxzdHJpbmcsIFdpZGdldFN0cmluZyB8IFdpZGdldFN0cmluZ1tdPjtcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT47XG59O1xuXG5pbnRlcmZhY2UgSGFyZGNvcHlDb250ZXh0VHlwZSB7XG4gIGdldEhhcmRjb3B5OiAoSGFyZGNvcHlSZXF1ZXN0OiBIYXJkY29weVJlcXVlc3QpID0+IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT47XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbn1cblxuY29uc3QgY29udmVydFRvSGFyZGNvcHlSZXNwb25zZSA9IChyZXNwb25zZTogV2lkZ2V0VGV4dCk6IEhhcmRjb3B5UmVzcG9uc2UgPT4ge1xuICByZXR1cm4ge1xuICAgIHJlc3BvbnNlSWQ6IHJlc3BvbnNlLnJlc3BvbnNlSWQsXG4gICAgbGFuZ3VhZ2U6IHJlc3BvbnNlLmxhbmd1YWdlLFxuICAgIHJhd1ZhbHVlczogcmVzcG9uc2UudmFsdWVzLFxuICAgIHZhbHVlczogT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UudmFsdWVzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gW1xuICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIGtleSBmcm9tIHNuYWtlX2Nhc2UgdG8gY2FtZWxDYXNlXG4gICAgICAgIHRvQ2FtZWxDYXNlKGtleSksXG4gICAgICAgIHZhbHVlLmxlbmd0aCA9PT0gMSA/IHZhbHVlWzBdLnZhbHVlIDogdmFsdWUubWFwKHYgPT4gdi52YWx1ZSksXG4gICAgICBdKSxcbiAgICApLFxuICB9O1xufTtcblxuLy8gVGhlc2UgYXJlIGp1c3Qgc2FtcGxlIHJlc3BvbnNlcyBmb3IgdGhlIHNha2Ugb2YgdGVzdGluZy5cbi8vIEFzIHdlIHN0YXJ0IHRvIGJ1aWxkIHRoZSBhY3R1YWwgd2lkZ2V0cyB3ZSBzaG91bGQgZGV0ZXJtaW5lIHdoYXQgdGhlIGFjdHVhbFxuLy8gdmFsdWVzIGFuZCB0aGVpciBuYW1lcyBzaG91bGQgYmUuXG5jb25zdCBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFOiBQYXJ0aWFsPFJlY29yZDxXaWRnZXRUeXBlVjMsIEhhcmRjb3B5UmVzcG9uc2U+PiA9IHtcbiAgW1dpZGdldFR5cGVWMy5Qcm9tcHRDYXJvdXNlbFYzXToge1xuICAgIHJlc3BvbnNlSWQ6IHV1aWQoKSxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHByb21wdEJ1dHRvblRleHRzOiBbXG4gICAgICAgICdXaGF0IGFyZSB5b3VyIGJlc3Qgc2VsbGVycz8nLFxuICAgICAgICAnU2hvdyBtZSBzdW1tZXIgZHJlc3NlcycsXG4gICAgICAgICdEbyB5b3UgaGF2ZSBmcmVlIHNoaXBwaW5nPycsXG4gICAgICAgICdXaGF0IHNpemVzIGFyZSBhdmFpbGFibGU/JyxcbiAgICAgICAgJ0NhbiBJIHJldHVybiBpdGVtcz8nLFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlRpdGxlZFByb21wdENhcm91c2VsVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ05lZWQgc29tZSBoZWxwPycsXG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5Tb2NpYWxQcm9vZlYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgbnVtYmVyT2ZDdXN0b21lcnNUZXh0OiAnMTIzIGN1c3RvbWVycycsXG4gICAgICBjdXN0b21lclF1ZXJ5VGV4dDogJ2ZvdW5kIHdoYXQgdGhleSB3ZXJlIGxvb2tpbmcgZm9yLi4uJyxcbiAgICAgIHByaW1hcnlCdXR0b25UZXh0OiAnU3RhcnQgc2hvcHBpbmcnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uVGl0bGVUZXh0OiAnUG9wdWxhciBzZWFyY2hlcycsXG4gICAgICBzZWNvbmRhcnlCdXR0b25UZXh0czogW1xuICAgICAgICAnV2h5IHNob3VsZCBJIGJ1eSBmcm9tIHlvdT8nLFxuICAgICAgICAnSG93IGRvIEkgcmV0dXJuIGFuIGl0ZW0/JyxcbiAgICAgICAgJ05ldyBhcnJpdmFscycsXG4gICAgICAgICdTYWxlIGl0ZW1zJyxcbiAgICAgICAgJ1BvcHVsYXIgaXRlbXMnLFxuICAgICAgXSxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5UeXBpbmdBbmltYXRpb25WM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIGhlYWRsaW5lVGV4dDogJ05lZWQgaGVscCBmaW5kaW5nJyxcbiAgICAgIGFuaW1hdGVkVGV4dFNlcXVlbmNlOiBbXG4gICAgICAgICd0aGUgcGVyZmVjdCBnaWZ0IGZvciB5b3VyIGxvdmVkIG9uZXM/JyxcbiAgICAgICAgJ3NvbWV0aGluZyBzcGVjaWFsIGZvciB0aGUgaG9saWRheXM/JyxcbiAgICAgICAgJ3RoZSBpZGVhbCBwcmVzZW50IGZvciBzb21lb25lIHNwZWNpYWw/JyxcbiAgICAgIF0sXG4gICAgICBoaW50VGV4dDogJ0FzayBtZSBhbnl0aGluZycsXG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICBdLFxuICAgICAgdGV4dEZpZWxkQXJpYUxhYmVsOiAnQXNrIG1lIGFueXRoaW5nJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3Q29tcGFyaXNvblYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgaGVhZGxpbmVUZXh0OiAnTmVlZCBoZWxwIGNvbXBhcmluZz8nLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3TG9hZGluZ1YzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuUHJvbXB0QnV0dG9uQ2Fyb3VzZWxXaXRoSW1hZ2VWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnTmVlZCBzb21lIGhlbHA/JyxcbiAgICAgIHByb21wdEJ1dHRvbnNUZXh0czogWydIZWxwIG1lIGZpbmQgYSBwcm9kdWN0JywgXCJXaGF0J3Mgb24geW91ciBtaW5kP1wiLCAnVGFsayB0byBhIGh1bWFuJ10sXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuUHJvZHVjdENhcmRWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICBoZWFkbGluZTogJ0Rpc2NvdmVyIFlvdXIgUGVyZmVjdCBTdHlsZScsXG4gICAgICBhbmltYXRlZFRleHQ6IFtcbiAgICAgICAgJ3RoZSBwZXJmZWN0IG91dGZpdCBmb3IgYW55IG9jY2FzaW9uJyxcbiAgICAgICAgJ3RyZW5kaW5nIGZhc2hpb24gdGhhdCBmaXRzIHlvdXIgbGlmZXN0eWxlJyxcbiAgICAgICAgJ3F1YWxpdHkgcGllY2VzIHRoYXQgbGFzdCcsXG4gICAgICBdLFxuICAgICAgcHJvbXB0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgICBwbGFjZWhvbGRlcjogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5GbG9hdGluZ0NoYXRWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB3ZWxjb21lTWVzc2FnZVRpdGxlOiAnV2VsY29tZSB0byBFbnZpdmUgQUknLFxuICAgICAgd2VsY29tZU1lc3NhZ2VUZXh0OlxuICAgICAgICAnWW91ciBwZXJzb25hbCBzaG9wcGVyIHRyYWluZWQgb24gdGhlIGNvbGxlY3RpdmUga25vd2xlZGdlIG9mIHRob3VzYW5kcyBvZiByZWFsIGV4cGVydHMhJyxcbiAgICAgIGNoYXRGb290ZXJUZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgICAgZGlzY2xhaW1lclRleHQ6ICdUaGlzIGlzIGEgZGlzY2xhaW1lci4uLicsXG4gICAgICBsZWZ0VG9nZ2xlTGFiZWw6ICdTaG9wIHdpdGggQUknLFxuICAgICAgcmlnaHRUb2dnbGVMYWJlbDogJ0xpdmUgc3VwcG9ydCcsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5GdWxsUGFnZVNhbGVzQWdlbnRWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB3ZWxjb21lTWVzc2FnZVRpdGxlOiAnV2VsY29tZSB0byBFbnZpdmUgQUknLFxuICAgICAgd2VsY29tZU1lc3NhZ2VUZXh0OlxuICAgICAgICAnWW91ciBwZXJzb25hbCBzaG9wcGVyIHRyYWluZWQgb24gdGhlIGNvbGxlY3RpdmUga25vd2xlZGdlIG9mIHRob3VzYW5kcyBvZiByZWFsIGV4cGVydHMhJyxcbiAgICAgIGNoYXRGb290ZXJUZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgICAgZGlzY2xhaW1lclRleHQ6ICdUaGlzIGlzIGEgZGlzY2xhaW1lci4uLicsXG4gICAgfSxcbiAgfSxcbn07XG5cbmNvbnN0IEhhcmRjb3B5Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8SGFyZGNvcHlDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuaW50ZXJmYWNlIEhhcmRjb3B5UHJvdmlkZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGhhcmRjb3B5T3ZlcnJpZGU/OiBQYXJ0aWFsPFJlY29yZDxXaWRnZXRUeXBlVjMsIEhhcmRjb3B5UmVzcG9uc2U+Pjtcbn1cblxuZXhwb3J0IGNvbnN0IEhhcmRjb3B5UHJvdmlkZXI6IFJlYWN0LkZDPEhhcmRjb3B5UHJvdmlkZXJQcm9wcz4gPSAoe1xuICBjaGlsZHJlbixcbiAgaGFyZGNvcHlPdmVycmlkZSxcbn0pID0+IHtcbiAgY29uc3QgbGFuZ3VhZ2VzID0gdXNlTWVtbygoKSA9PiBuYXZpZ2F0b3IubGFuZ3VhZ2VzLCBbXSk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VBdG9tVmFsdWUoYXBwRGV0YWlsc0F0b20pO1xuICBjb25zdCB7IHRyYWNrRXZlbnQgfSA9IHVzZUFtcGxpdHVkZSgpO1xuXG4gIGNvbnN0IHsgZmVhdHVyZUZsYWdTZXJ2aWNlIH0gPSB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UoKTtcbiAgY29uc3QgZ2V0SGFyZGNvcHlGcm9tQmFja2VuZCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChyZXF1ZXN0OiBIYXJkY29weVJlcXVlc3QpOiBQcm9taXNlPEhhcmRjb3B5UmVzcG9uc2U+ID0+IHtcbiAgICAgIGlmIChoYXJkY29weU92ZXJyaWRlPy5bcmVxdWVzdC53aWRnZXRUeXBlXSkge1xuICAgICAgICBMb2dnZXIubG9nSW5mbygnaGFyZGNvcHlDb250ZXh0IHwgdXNpbmcgaGFyZGNvcHkgb3ZlcnJpZGUnLCByZXF1ZXN0LndpZGdldFR5cGUpO1xuICAgICAgICByZXR1cm4gaGFyZGNvcHlPdmVycmlkZVtyZXF1ZXN0LndpZGdldFR5cGVdITtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG92ZXJyaWRlQ29uZmlnVmVyc2lvbiA9XG4gICAgICAgIGdldFF1ZXJ5UGFyYW0oJ3NwaWZmeV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICAgIGdldFF1ZXJ5UGFyYW0oJ2Vudml2ZV9jb25maWdfdmVyc2lvbicpIHx8XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHdpZGdldFRleHRSZXF1ZXN0OiBXaWRnZXRUZXh0UmVxdWVzdCA9IHtcbiAgICAgICAgcmVxdWVzdElkOiB1dWlkKCksXG4gICAgICAgIHdpZGdldFR5cGU6IHJlcXVlc3Qud2lkZ2V0VHlwZSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZmVhdHVyZUZsYWdzOiBmZWF0dXJlRmxhZ1NlcnZpY2U/LmdldEZlYXR1cmVGbGFncygpIHx8IHt9LFxuICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2VzWzBdIHx8ICdlbicsXG4gICAgICAgIG92ZXJyaWRlQ29uZmlnVmVyc2lvbixcbiAgICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIH07XG4gICAgICB0cmFja0V2ZW50KHtcbiAgICAgICAgZXZlbnROYW1lOiBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLldpZGdldFRleHRSZXF1ZXN0LFxuICAgICAgICBldmVudFByb3BzOiB7XG4gICAgICAgICAgd2lkZ2V0X3R5cGU6IHJlcXVlc3Qud2lkZ2V0VHlwZSxcbiAgICAgICAgICByZXF1ZXN0X2lkOiB3aWRnZXRUZXh0UmVxdWVzdC5yZXF1ZXN0SWQsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SGFyZGNvcHkod2lkZ2V0VGV4dFJlcXVlc3QpO1xuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRSZXNwb25zZSA9IGNvbnZlcnRUb0hhcmRjb3B5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIExvZ2dlci5sb2dJbmZvKCdoYXJkY29weUNvbnRleHQgfCBjb252ZXJ0ZWQgcmVzcG9uc2UnLCBjb252ZXJ0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlc3BvbnNlLFxuICAgICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICAgICAgICByZXNwb25zZV9pZDogcmVzcG9uc2UucmVzcG9uc2VJZCxcbiAgICAgICAgICAgICAgd2lkZ2V0X3RleHQ6IHJlc3BvbnNlLnZhbHVlcyxcbiAgICAgICAgICAgICAgcmVxdWVzdF9pZDogd2lkZ2V0VGV4dFJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gY29udmVydGVkUmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcignaGFyZGNvcHlDb250ZXh0IHwgZXJyb3IgZ2V0dGluZyBoYXJkY29weSBmcm9tIGJhY2tlbmQnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBtb2NrUmVzcG9uc2UgPSBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFW3JlcXVlc3Qud2lkZ2V0VHlwZV07XG4gICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgIExvZ2dlci5sb2dJbmZvKCdoYXJkY29weUNvbnRleHQgfCBubyByZWFsIHJlc3BvbnNlLCB1c2luZyBtb2NrJywgbW9ja1Jlc3BvbnNlKTtcbiAgICAgICAgcmV0dXJuIG1vY2tSZXNwb25zZTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gaGFyZGNvcHkgcmVzcG9uc2UgZm91bmQgZm9yIHdpZGdldCB0eXBlOiAke3JlcXVlc3Qud2lkZ2V0VHlwZX1gKTtcbiAgICB9LFxuICAgIFtjb250ZXh0LCBmZWF0dXJlRmxhZ1NlcnZpY2UsIGhhcmRjb3B5T3ZlcnJpZGUsIGxhbmd1YWdlcywgdHJhY2tFdmVudF0sXG4gICk7XG5cbiAgY29uc3QgZ2V0SGFyZGNvcHkgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiA9PiB7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICBMb2dnZXIubG9nSW5mbygnaGFyZGNvcHlDb250ZXh0IHwgcmV0cmlldmluZyBoYXJkY29weScsIGxhbmd1YWdlcyk7XG5cbiAgICAgIExvZ2dlci5sb2dJbmZvKCdoYXJkY29weUNvbnRleHQgfCByZXF1ZXN0JywgcmVxdWVzdCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldEhhcmRjb3B5RnJvbUJhY2tlbmQocmVxdWVzdCk7XG4gICAgICBMb2dnZXIubG9nSW5mbygnaGFyZGNvcHlDb250ZXh0IHwgcmV0dXJuaW5nIGhhcmRjb3B5IHJlc3BvbnNlJywgcmVzcG9uc2UpO1xuICAgICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gICAgICB9XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH0sXG4gICAgW2dldEhhcmRjb3B5RnJvbUJhY2tlbmQsIGxhbmd1YWdlc10sXG4gICk7XG5cbiAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKCgpID0+ICh7IGdldEhhcmRjb3B5LCBpc0xvYWRpbmcgfSksIFtnZXRIYXJkY29weSwgaXNMb2FkaW5nXSk7XG5cbiAgcmV0dXJuIDxIYXJkY29weUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9IYXJkY29weUNvbnRleHQuUHJvdmlkZXI+O1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUhhcmRjb3B5ID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChIYXJkY29weUNvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUhhcmRjb3B5IG11c3QgYmUgdXNlZCB3aXRoaW4gYSBIYXJkY29weVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQ0EsTUFBTSw2QkFBNkIsYUFBMkM7QUFDNUUsUUFBTztFQUNMLFlBQVksU0FBUztFQUNyQixVQUFVLFNBQVM7RUFDbkIsV0FBVyxTQUFTO0VBQ3BCLFFBQVEsT0FBTyxZQUNiLE9BQU8sUUFBUSxTQUFTLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBRXBELFlBQVksSUFBSSxFQUNoQixNQUFNLFdBQVcsSUFBSSxNQUFNLEdBQUcsUUFBUSxNQUFNLEtBQUksTUFBSyxFQUFFLE1BQU0sQ0FDOUQsQ0FBQyxDQUNIO0VBQ0Y7O0FBTUgsTUFBTUEseUJBQTBFO0VBQzdFLGFBQWEsbUJBQW1CO0VBQy9CLFlBQVlDLElBQU07RUFDbEIsVUFBVTtFQUNWLFFBQVEsRUFDTixtQkFBbUI7R0FDakI7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNELEVBQ0Y7RUFDRjtFQUNBLGFBQWEseUJBQXlCO0VBQ3JDLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWixtQkFBbUI7SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0dBQ0Y7RUFDRjtFQUNBLGFBQWEsZ0JBQWdCO0VBQzVCLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWix1QkFBdUI7R0FDdkIsbUJBQW1CO0dBQ25CLG1CQUFtQjtHQUNuQiwwQkFBMEI7R0FDMUIsc0JBQXNCO0lBQ3BCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNELDBCQUEwQjtHQUMzQjtFQUNGO0VBQ0EsYUFBYSxv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
266
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFyZGNvcHlDb250ZXh0LmpzIiwibmFtZXMiOlsiTG9nZ2VyIiwiTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4iLCJ1dWlkIiwiSGFyZGNvcHlQcm92aWRlcjogUmVhY3QuRkM8SGFyZGNvcHlQcm92aWRlclByb3BzPiIsIndpZGdldFRleHRSZXF1ZXN0OiBXaWRnZXRUZXh0UmVxdWVzdCIsIkNvbW1lcmNlQXBpQ2xpZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRleHRzL2hhcmRjb3B5Q29udGV4dC9oYXJkY29weUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlYWN0Tm9kZSwgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGknO1xuaW1wb3J0IHsgV2lkZ2V0U3RyaW5nLCBXaWRnZXRUZXh0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvd2lkZ2V0VGV4dCc7XG5pbXBvcnQgeyBXaWRnZXRUZXh0UmVxdWVzdCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3dpZGdldFRleHRSZXF1ZXN0JztcblxuaW1wb3J0IHsgdXNlQXRvbVZhbHVlIH0gZnJvbSAnam90YWknO1xuaW1wb3J0IHsgYXBwRGV0YWlsc0F0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJztcbmltcG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tICdzcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlJztcbmltcG9ydCB7IHRvQ2FtZWxDYXNlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlscy9zbmFrZVRvQ2FtZWxUcmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IGdldFF1ZXJ5UGFyYW0gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnLi4vdHlwZXNWMyc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlRmxhZ1NlcnZpY2UgfSBmcm9tICcuLi9mZWF0dXJlRmxhZ1NlcnZpY2VDb250ZXh0L2ZlYXR1cmVGbGFnU2VydmljZUNvbnRleHQnO1xuaW1wb3J0IHsgdXNlQW1wbGl0dWRlIH0gZnJvbSAnLi4vYW1wbGl0dWRlQ29udGV4dCc7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ2hhcmRjb3B5Q29udGV4dCcpO1xuXG5pbnRlcmZhY2UgSGFyZGNvcHlSZXF1ZXN0IHtcbiAgd2lkZ2V0VHlwZTogV2lkZ2V0VHlwZVYzO1xuICB1c2VyRXZlbnQ6IFVzZXJFdmVudDtcbn1cblxuZXhwb3J0IHR5cGUgSGFyZGNvcHlSZXNwb25zZSA9IHtcbiAgcmVzcG9uc2VJZDogc3RyaW5nO1xuICBsYW5ndWFnZTogc3RyaW5nO1xuICByYXdWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRTdHJpbmcgfCBXaWRnZXRTdHJpbmdbXT47XG4gIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+O1xufTtcblxuaW50ZXJmYWNlIEhhcmRjb3B5Q29udGV4dFR5cGUge1xuICBnZXRIYXJkY29weTogKEhhcmRjb3B5UmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KSA9PiBQcm9taXNlPEhhcmRjb3B5UmVzcG9uc2U+O1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG59XG5cbmNvbnN0IGNvbnZlcnRUb0hhcmRjb3B5UmVzcG9uc2UgPSAocmVzcG9uc2U6IFdpZGdldFRleHQpOiBIYXJkY29weVJlc3BvbnNlID0+IHtcbiAgcmV0dXJuIHtcbiAgICByZXNwb25zZUlkOiByZXNwb25zZS5yZXNwb25zZUlkLFxuICAgIGxhbmd1YWdlOiByZXNwb25zZS5sYW5ndWFnZSxcbiAgICByYXdWYWx1ZXM6IHJlc3BvbnNlLnZhbHVlcyxcbiAgICB2YWx1ZXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLnZhbHVlcykubWFwKChba2V5LCB2YWx1ZV0pID0+IFtcbiAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSBrZXkgZnJvbSBzbmFrZV9jYXNlIHRvIGNhbWVsQ2FzZVxuICAgICAgICB0b0NhbWVsQ2FzZShrZXkpLFxuICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDEgPyB2YWx1ZVswXS52YWx1ZSA6IHZhbHVlLm1hcCh2ID0+IHYudmFsdWUpLFxuICAgICAgXSksXG4gICAgKSxcbiAgfTtcbn07XG5cbi8vIFRoZXNlIGFyZSBqdXN0IHNhbXBsZSByZXNwb25zZXMgZm9yIHRoZSBzYWtlIG9mIHRlc3RpbmcuXG4vLyBBcyB3ZSBzdGFydCB0byBidWlsZCB0aGUgYWN0dWFsIHdpZGdldHMgd2Ugc2hvdWxkIGRldGVybWluZSB3aGF0IHRoZSBhY3R1YWxcbi8vIHZhbHVlcyBhbmQgdGhlaXIgbmFtZXMgc2hvdWxkIGJlLlxuY29uc3QgTU9DS19IQVJEQ09QWV9SRVNQT05TRTogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj4gPSB7XG4gIFtXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWM106IHtcbiAgICByZXNwb25zZUlkOiB1dWlkKCksXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICBwcm9tcHRCdXR0b25UZXh0czogW1xuICAgICAgICAnV2hhdCBhcmUgeW91ciBiZXN0IHNlbGxlcnM/JyxcbiAgICAgICAgJ1Nob3cgbWUgc3VtbWVyIGRyZXNzZXMnLFxuICAgICAgICAnRG8geW91IGhhdmUgZnJlZSBzaGlwcGluZz8nLFxuICAgICAgICAnV2hhdCBzaXplcyBhcmUgYXZhaWxhYmxlPycsXG4gICAgICAgICdDYW4gSSByZXR1cm4gaXRlbXM/JyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdOZWVkIHNvbWUgaGVscD8nLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIG51bWJlck9mQ3VzdG9tZXJzVGV4dDogJzEyMyBjdXN0b21lcnMnLFxuICAgICAgY3VzdG9tZXJRdWVyeVRleHQ6ICdmb3VuZCB3aGF0IHRoZXkgd2VyZSBsb29raW5nIGZvci4uLicsXG4gICAgICBwcmltYXJ5QnV0dG9uVGV4dDogJ1N0YXJ0IHNob3BwaW5nJyxcbiAgICAgIHNlY29uZGFyeUJ1dHRvblRpdGxlVGV4dDogJ1BvcHVsYXIgc2VhcmNoZXMnLFxuICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doeSBzaG91bGQgSSBidXkgZnJvbSB5b3U/JyxcbiAgICAgICAgJ0hvdyBkbyBJIHJldHVybiBhbiBpdGVtPycsXG4gICAgICAgICdOZXcgYXJyaXZhbHMnLFxuICAgICAgICAnU2FsZSBpdGVtcycsXG4gICAgICAgICdQb3B1bGFyIGl0ZW1zJyxcbiAgICAgIF0sXG4gICAgICB0ZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuVHlwaW5nQW5pbWF0aW9uVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ1Nob3BwaW5nIEFzc2lzdGFudCcsXG4gICAgICBoZWFkbGluZVRleHQ6ICdOZWVkIGhlbHAgZmluZGluZycsXG4gICAgICBhbmltYXRlZFRleHRTZXF1ZW5jZTogW1xuICAgICAgICAndGhlIHBlcmZlY3QgZ2lmdCBmb3IgeW91ciBsb3ZlZCBvbmVzPycsXG4gICAgICAgICdzb21ldGhpbmcgc3BlY2lhbCBmb3IgdGhlIGhvbGlkYXlzPycsXG4gICAgICAgICd0aGUgaWRlYWwgcHJlc2VudCBmb3Igc29tZW9uZSBzcGVjaWFsPycsXG4gICAgICBdLFxuICAgICAgaGludFRleHQ6ICdBc2sgbWUgYW55dGhpbmcnLFxuICAgICAgcHJvbXB0QnV0dG9uVGV4dHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgXSxcbiAgICAgIHRleHRGaWVsZEFyaWFMYWJlbDogJ0FzayBtZSBhbnl0aGluZycsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0NvbXBhcmlzb25WM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIGhlYWRsaW5lVGV4dDogJ05lZWQgaGVscCBjb21wYXJpbmc/JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld0xvYWRpbmdWM106IHtcbiAgICByZXNwb25zZUlkOiAnbW9jay1yZXNwb25zZS1pZCcsXG4gICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgdmFsdWVzOiB7XG4gICAgICB0aXRsZUxhYmVsOiAnU2hvcHBpbmcgQXNzaXN0YW50JyxcbiAgICAgIHRleHRGaWVsZFBsYWNlaG9sZGVyVGV4dDogJ0FzayBtZSBhbnl0aGluZy4uLicsXG4gICAgfSxcbiAgfSxcbiAgW1dpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzXToge1xuICAgIHJlc3BvbnNlSWQ6ICdtb2NrLXJlc3BvbnNlLWlkJyxcbiAgICBsYW5ndWFnZTogJ2VuJyxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHRpdGxlTGFiZWw6ICdTaG9wcGluZyBBc3Npc3RhbnQnLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgdGl0bGVMYWJlbDogJ05lZWQgc29tZSBoZWxwPycsXG4gICAgICBwcm9tcHRCdXR0b25zVGV4dHM6IFsnSGVscCBtZSBmaW5kIGEgcHJvZHVjdCcsIFwiV2hhdCdzIG9uIHlvdXIgbWluZD9cIiwgJ1RhbGsgdG8gYSBodW1hbiddLFxuICAgICAgdGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICB9LFxuICB9LFxuICBbV2lkZ2V0VHlwZVYzLlByb2R1Y3RDYXJkVjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgaGVhZGxpbmU6ICdEaXNjb3ZlciBZb3VyIFBlcmZlY3QgU3R5bGUnLFxuICAgICAgYW5pbWF0ZWRUZXh0OiBbXG4gICAgICAgICd0aGUgcGVyZmVjdCBvdXRmaXQgZm9yIGFueSBvY2Nhc2lvbicsXG4gICAgICAgICd0cmVuZGluZyBmYXNoaW9uIHRoYXQgZml0cyB5b3VyIGxpZmVzdHlsZScsXG4gICAgICAgICdxdWFsaXR5IHBpZWNlcyB0aGF0IGxhc3QnLFxuICAgICAgXSxcbiAgICAgIHByb21wdHM6IFtcbiAgICAgICAgJ1doYXQgYXJlIHlvdXIgYmVzdCBzZWxsZXJzPycsXG4gICAgICAgICdTaG93IG1lIHN1bW1lciBkcmVzc2VzJyxcbiAgICAgICAgJ0RvIHlvdSBoYXZlIGZyZWUgc2hpcHBpbmc/JyxcbiAgICAgICAgJ1doYXQgc2l6ZXMgYXJlIGF2YWlsYWJsZT8nLFxuICAgICAgICAnQ2FuIEkgcmV0dXJuIGl0ZW1zPycsXG4gICAgICBdLFxuICAgICAgcGxhY2Vob2xkZXI6ICdBc2sgbWUgYW55dGhpbmcuLi4nLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRmxvYXRpbmdDaGF0VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgICAgbGVmdFRvZ2dsZUxhYmVsOiAnU2hvcCB3aXRoIEFJJyxcbiAgICAgIHJpZ2h0VG9nZ2xlTGFiZWw6ICdMaXZlIHN1cHBvcnQnLFxuICAgIH0sXG4gIH0sXG4gIFtXaWRnZXRUeXBlVjMuRnVsbFBhZ2VTYWxlc0FnZW50VjNdOiB7XG4gICAgcmVzcG9uc2VJZDogJ21vY2stcmVzcG9uc2UtaWQnLFxuICAgIGxhbmd1YWdlOiAnZW4nLFxuICAgIHZhbHVlczoge1xuICAgICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogJ1dlbGNvbWUgdG8gRW52aXZlIEFJJyxcbiAgICAgIHdlbGNvbWVNZXNzYWdlVGV4dDpcbiAgICAgICAgJ1lvdXIgcGVyc29uYWwgc2hvcHBlciB0cmFpbmVkIG9uIHRoZSBjb2xsZWN0aXZlIGtub3dsZWRnZSBvZiB0aG91c2FuZHMgb2YgcmVhbCBleHBlcnRzIScsXG4gICAgICBjaGF0Rm9vdGVyVGV4dEZpZWxkUGxhY2Vob2xkZXJUZXh0OiAnQXNrIG1lIGFueXRoaW5nLi4uJyxcbiAgICAgIGRpc2NsYWltZXJUZXh0OiAnVGhpcyBpcyBhIGRpc2NsYWltZXIuLi4nLFxuICAgIH0sXG4gIH0sXG59O1xuXG5jb25zdCBIYXJkY29weUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PEhhcmRjb3B5Q29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmludGVyZmFjZSBIYXJkY29weVByb3ZpZGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBoYXJkY29weU92ZXJyaWRlPzogUGFydGlhbDxSZWNvcmQ8V2lkZ2V0VHlwZVYzLCBIYXJkY29weVJlc3BvbnNlPj47XG59XG5cbmV4cG9ydCBjb25zdCBIYXJkY29weVByb3ZpZGVyOiBSZWFjdC5GQzxIYXJkY29weVByb3ZpZGVyUHJvcHM+ID0gKHtcbiAgY2hpbGRyZW4sXG4gIGhhcmRjb3B5T3ZlcnJpZGUsXG59KSA9PiB7XG4gIGNvbnN0IGxhbmd1YWdlcyA9IHVzZU1lbW8oKCkgPT4gbmF2aWdhdG9yLmxhbmd1YWdlcywgW10pO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBjb250ZXh0ID0gdXNlQXRvbVZhbHVlKGFwcERldGFpbHNBdG9tKTtcbiAgY29uc3QgeyB0cmFja0V2ZW50IH0gPSB1c2VBbXBsaXR1ZGUoKTtcblxuICBjb25zdCB7IGZlYXR1cmVGbGFnU2VydmljZSB9ID0gdXNlRmVhdHVyZUZsYWdTZXJ2aWNlKCk7XG4gIGNvbnN0IGdldEhhcmRjb3B5RnJvbUJhY2tlbmQgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmVxdWVzdDogSGFyZGNvcHlSZXF1ZXN0KTogUHJvbWlzZTxIYXJkY29weVJlc3BvbnNlPiA9PiB7XG4gICAgICBpZiAoaGFyZGNvcHlPdmVycmlkZT8uW3JlcXVlc3Qud2lkZ2V0VHlwZV0pIHtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCd1c2luZyBoYXJkY29weSBvdmVycmlkZScsIHJlcXVlc3Qud2lkZ2V0VHlwZSk7XG4gICAgICAgIHJldHVybiBoYXJkY29weU92ZXJyaWRlW3JlcXVlc3Qud2lkZ2V0VHlwZV0hO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3ZlcnJpZGVDb25maWdWZXJzaW9uID1cbiAgICAgICAgZ2V0UXVlcnlQYXJhbSgnc3BpZmZ5X2NvbmZpZ192ZXJzaW9uJykgfHxcbiAgICAgICAgZ2V0UXVlcnlQYXJhbSgnZW52aXZlX2NvbmZpZ192ZXJzaW9uJykgfHxcbiAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgd2lkZ2V0VGV4dFJlcXVlc3Q6IFdpZGdldFRleHRSZXF1ZXN0ID0ge1xuICAgICAgICByZXF1ZXN0SWQ6IHV1aWQoKSxcbiAgICAgICAgd2lkZ2V0VHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBmZWF0dXJlRmxhZ3M6IGZlYXR1cmVGbGFnU2VydmljZT8uZ2V0RmVhdHVyZUZsYWdzKCkgfHwge30sXG4gICAgICAgIGxhbmd1YWdlOiBsYW5ndWFnZXNbMF0gfHwgJ2VuJyxcbiAgICAgICAgb3ZlcnJpZGVDb25maWdWZXJzaW9uLFxuICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgfTtcbiAgICAgIHRyYWNrRXZlbnQoe1xuICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlcXVlc3QsXG4gICAgICAgIGV2ZW50UHJvcHM6IHtcbiAgICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICAgIHJlcXVlc3RfaWQ6IHdpZGdldFRleHRSZXF1ZXN0LnJlcXVlc3RJZCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRIYXJkY29weSh3aWRnZXRUZXh0UmVxdWVzdCk7XG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZFJlc3BvbnNlID0gY29udmVydFRvSGFyZGNvcHlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdjb252ZXJ0ZWQgcmVzcG9uc2UnLCBjb252ZXJ0ZWRSZXNwb25zZSk7XG4gICAgICAgICAgdHJhY2tFdmVudCh7XG4gICAgICAgICAgICBldmVudE5hbWU6IEVudml2ZU1ldHJpY3NFdmVudE5hbWUuV2lkZ2V0VGV4dFJlc3BvbnNlLFxuICAgICAgICAgICAgZXZlbnRQcm9wczoge1xuICAgICAgICAgICAgICB3aWRnZXRfdHlwZTogcmVxdWVzdC53aWRnZXRUeXBlLFxuICAgICAgICAgICAgICByZXNwb25zZV9pZDogcmVzcG9uc2UucmVzcG9uc2VJZCxcbiAgICAgICAgICAgICAgd2lkZ2V0X3RleHQ6IHJlc3BvbnNlLnZhbHVlcyxcbiAgICAgICAgICAgICAgcmVxdWVzdF9pZDogd2lkZ2V0VGV4dFJlcXVlc3QucmVxdWVzdElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gY29udmVydGVkUmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5sb2dFcnJvcignZXJyb3IgZ2V0dGluZyBoYXJkY29weSBmcm9tIGJhY2tlbmQnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBtb2NrUmVzcG9uc2UgPSBNT0NLX0hBUkRDT1BZX1JFU1BPTlNFW3JlcXVlc3Qud2lkZ2V0VHlwZV07XG4gICAgICBpZiAobW9ja1Jlc3BvbnNlKSB7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1Zygnbm8gcmVhbCByZXNwb25zZSwgdXNpbmcgbW9jaycsIG1vY2tSZXNwb25zZSk7XG4gICAgICAgIHJldHVybiBtb2NrUmVzcG9uc2U7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGhhcmRjb3B5IHJlc3BvbnNlIGZvdW5kIGZvciB3aWRnZXQgdHlwZTogJHtyZXF1ZXN0LndpZGdldFR5cGV9YCk7XG4gICAgfSxcbiAgICBbY29udGV4dCwgZmVhdHVyZUZsYWdTZXJ2aWNlLCBoYXJkY29weU92ZXJyaWRlLCBsYW5ndWFnZXMsIHRyYWNrRXZlbnRdLFxuICApO1xuXG4gIGNvbnN0IGdldEhhcmRjb3B5ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHJlcXVlc3Q6IEhhcmRjb3B5UmVxdWVzdCk6IFByb21pc2U8SGFyZGNvcHlSZXNwb25zZT4gPT4ge1xuICAgICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdyZXRyaWV2aW5nIGhhcmRjb3B5JywgbGFuZ3VhZ2VzKTtcblxuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdyZXF1ZXN0JywgcmVxdWVzdCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdldEhhcmRjb3B5RnJvbUJhY2tlbmQocmVxdWVzdCk7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ3JldHVybmluZyBoYXJkY29weSByZXNwb25zZScsIHJlc3BvbnNlKTtcbiAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBoYXJkY29weSByZXNwb25zZSBmb3VuZCBmb3Igd2lkZ2V0IHR5cGU6ICR7cmVxdWVzdC53aWRnZXRUeXBlfWApO1xuICAgICAgfVxuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9LFxuICAgIFtnZXRIYXJkY29weUZyb21CYWNrZW5kLCBsYW5ndWFnZXNdLFxuICApO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbygoKSA9PiAoeyBnZXRIYXJkY29weSwgaXNMb2FkaW5nIH0pLCBbZ2V0SGFyZGNvcHksIGlzTG9hZGluZ10pO1xuXG4gIHJldHVybiA8SGFyZGNvcHlDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvSGFyZGNvcHlDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VIYXJkY29weSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoSGFyZGNvcHlDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VIYXJkY29weSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgSGFyZGNvcHlQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBLE1BQU0sU0FBUyxJQUFJQSxlQUFPLGtCQUFrQjtBQW1CNUMsTUFBTSw2QkFBNkIsYUFBMkM7QUFDNUUsUUFBTztFQUNMLFlBQVksU0FBUztFQUNyQixVQUFVLFNBQVM7RUFDbkIsV0FBVyxTQUFTO0VBQ3BCLFFBQVEsT0FBTyxZQUNiLE9BQU8sUUFBUSxTQUFTLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxXQUFXLENBRXBELFlBQVksSUFBSSxFQUNoQixNQUFNLFdBQVcsSUFBSSxNQUFNLEdBQUcsUUFBUSxNQUFNLEtBQUksTUFBSyxFQUFFLE1BQU0sQ0FDOUQsQ0FBQyxDQUNIO0VBQ0Y7O0FBTUgsTUFBTUMseUJBQTBFO0VBQzdFLGFBQWEsbUJBQW1CO0VBQy9CLFlBQVlDLElBQU07RUFDbEIsVUFBVTtFQUNWLFFBQVEsRUFDTixtQkFBbUI7R0FDakI7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNELEVBQ0Y7RUFDRjtFQUNBLGFBQWEseUJBQXlCO0VBQ3JDLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWixtQkFBbUI7SUFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNEO0dBQ0Y7RUFDRjtFQUNBLGFBQWEsZ0JBQWdCO0VBQzVCLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWix1QkFBdUI7R0FDdkIsbUJBQW1CO0dBQ25CLG1CQUFtQjtHQUNuQiwwQkFBMEI7R0FDMUIsc0JBQXNCO0lBQ3BCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNELDBCQUEwQjtHQUMzQjtFQUNGO0VBQ0EsYUFBYSxvQkFBb0I7RUFDaEMsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04sWUFBWTtHQUNaLGNBQWM7R0FDZCxzQkFBc0I7SUFDcEI7SUFDQTtJQUNBO0lBQ0Q7R0FDRCxVQUFVO0dBQ1YsbUJBQW1CO0lBQ2pCO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7R0FDRCxvQkFBb0I7R0FDckI7RUFDRjtFQUNBLGFBQWEsMEJBQTBCO0VBQ3RDLFlBQVk7RUFDWixVQUFVO0VBQ1YsUUFBUTtHQUNOLFlBQVk7R0FDWixjQUFjO0dBQ2QsMEJBQTBCO0dBQzNCO0VBQ0Y7RUFDQSxhQUFhLHVCQUF1QjtFQUNuQyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osMEJBQTBCO0dBQzNCO0VBQ0Y7RUFDQSxhQUFhLGdCQUFnQjtFQUM1QixZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osMEJBQTBCO0dBQzNCO0VBQ0Y7RUFDQSxhQUFhLGtDQUFrQztFQUM5QyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixZQUFZO0dBQ1osb0JBQW9CO0lBQUM7SUFBMEI7SUFBd0I7SUFBa0I7R0FDekYsMEJBQTBCO0dBQzNCO0VBQ0Y7RUFDQSxhQUFhLGdCQUFnQjtFQUM1QixZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixVQUFVO0dBQ1YsY0FBYztJQUNaO0lBQ0E7SUFDQTtJQUNEO0dBQ0QsU0FBUztJQUNQO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDRDtHQUNELGFBQWE7R0FDZDtFQUNGO0VBQ0EsYUFBYSxpQkFBaUI7RUFDN0IsWUFBWTtFQUNaLFVBQVU7RUFDVixRQUFRO0dBQ04scUJBQXFCO0dBQ3JCLG9CQUNFO0dBQ0Ysb0NBQW9DO0dBQ3BDLGdCQUFnQjtHQUNoQixpQkFBaUI7R0FDakIsa0JBQWtCO0dBQ25CO0VBQ0Y7RUFDQSxhQUFhLHVCQUF1QjtFQUNuQyxZQUFZO0VBQ1osVUFBVTtFQUNWLFFBQVE7R0FDTixxQkFBcUI7R0FDckIsb0JBQ0U7R0FDRixvQ0FBb0M7R0FDcEMsZ0JBQWdCO0dBQ2pCO0VBQ0Y7Q0FDRjtBQUVELE1BQU0sa0JBQWtCLGNBQStDLE9BQVU7QUFPakYsTUFBYUMsb0JBQXFELEVBQ2hFLFVBQ0EsdUJBQ0k7Q0FDSixNQUFNLFlBQVksY0FBYyxVQUFVLFdBQVcsRUFBRSxDQUFDO0NBQ3hELE1BQU0sQ0FBQyxXQUFXLGdCQUFnQixTQUFTLE1BQU07Q0FDakQsTUFBTSxVQUFVLGFBQWEsZUFBZTtDQUM1QyxNQUFNLEVBQUUsZUFBZSxjQUFjO0NBRXJDLE1BQU0sRUFBRSx1QkFBdUIsdUJBQXVCO0NBQ3RELE1BQU0seUJBQXlCLFlBQzdCLE9BQU8sWUFBd0Q7QUFDN0QsTUFBSSxtQkFBbUIsUUFBUSxhQUFhO0FBQzFDLFVBQU8sU0FBUywyQkFBMkIsUUFBUSxXQUFXO0FBQzlELFVBQU8saUJBQWlCLFFBQVE7O0VBRWxDLE1BQU0sd0JBQ0osY0FBYyx3QkFBd0IsSUFDdEMsY0FBYyx3QkFBd0IsSUFDdEM7RUFDRixNQUFNQyxvQkFBdUM7R0FDM0MsV0FBV0YsSUFBTTtHQUNqQixZQUFZLFFBQVE7R0FDcEI7R0FDQSxjQUFjLG9CQUFvQixpQkFBaUIsSUFBSSxFQUFFO0dBQ3pELFVBQVUsVUFBVSxNQUFNO0dBQzFCO0dBQ0EsS0FBSyxPQUFPLFNBQVM7R0FDdEI7QUFDRCxhQUFXO0dBQ1QsV0FBVyx1QkFBdUI7R0FDbEMsWUFBWTtJQUNWLGFBQWEsUUFBUTtJQUNyQixZQUFZLGtCQUFrQjtJQUMvQjtHQUNGLENBQUM7QUFDRixNQUFJO0dBQ0YsTUFBTSxXQUFXLE1BQU1HLHFCQUFrQixZQUFZLGtCQUFrQjtBQUN2RSxPQUFJLFVBQVU7SUFDWixNQUFNLG9CQUFvQiwwQkFBMEIsU0FBUztBQUM3RCxXQUFPLFNBQVMsc0JBQXNCLGtCQUFrQjtBQUN4RCxlQUFXO0tBQ1QsV0FBVyx1QkFBdUI7S0FDbEMsWUFBWTtNQUNWLGFBQWEsUUFBUTtNQUNyQixhQUFhLFNBQVM7TUFDdEIsYUFBYSxTQUFTO01BQ3RCLFlBQVksa0JBQWtCO01BQy9CO0tBQ0YsQ0FBQztBQUNGLFdBQU87O1dBRUYsT0FBTztBQUNkLFVBQU8sU0FBUyx1Q0FBdUMsTUFBTTs7RUFFL0QsTUFBTSxlQUFlLHVCQUF1QixRQUFRO0FBQ3BELE1BQUksY0FBYztBQUNoQixVQUFPLFNBQVMsZ0NBQWdDLGFBQWE7QUFDN0QsVUFBTzs7QUFFVCxRQUFNLElBQUksTUFBTSwrQ0FBK0MsUUFBUSxhQUFhO0lBRXRGO0VBQUM7RUFBUztFQUFvQjtFQUFrQjtFQUFXO0VBQVcsQ0FDdkU7Q0FFRCxNQUFNLGNBQWMsWUFDbEIsT0FBTyxZQUF3RDtBQUM3RCxlQUFhLEtBQUs7QUFDbEIsU0FBTyxTQUFTLHVCQUF1QixVQUFVO0FBRWpELFNBQU8sU0FBUyxXQUFXLFFBQVE7RUFDbkMsTUFBTSxXQUFXLE1BQU0sdUJBQXVCLFFBQVE7QUFDdEQsU0FBTyxTQUFTLCtCQUErQixTQUFTO0FBQ3hELE1BQUksQ0FBQyxVQUFVO0FBQ2IsZ0JBQWEsTUFBTTtBQUNuQixTQUFNLElBQUksTUFBTSwrQ0FBK0MsUUFBUSxhQUFhOztBQUV0RixlQUFhLE1BQU07QUFDbkIsU0FBTztJQUVULENBQUMsd0JBQXdCLFVBQVUsQ0FDcEM7Q0FFRCxNQUFNLFFBQVEsZUFBZTtFQUFFO0VBQWE7RUFBVyxHQUFHLENBQUMsYUFBYSxVQUFVLENBQUM7QUFFbkYsUUFBTyxvQkFBQyxnQkFBZ0I7RUFBZ0I7RUFBUTtHQUFvQzs7QUFHdEYsTUFBYSxvQkFBb0I7Q0FDL0IsTUFBTSxVQUFVLFdBQVcsZ0JBQWdCO0FBQzNDLEtBQUksQ0FBQyxRQUNILE9BQU0sSUFBSSxNQUFNLHFEQUFxRDtBQUV2RSxRQUFPIn0=
@@ -12,6 +12,7 @@ let LocalStorageKeys = /* @__PURE__ */ function(LocalStorageKeys$1) {
12
12
  return LocalStorageKeys$1;
13
13
  }({});
14
14
  const LocalStorageContext = (0, react.createContext)(null);
15
+ const logger = new require_logger.default("localStorageContext");
15
16
  const LocalStorageProvider = ({ children }) => {
16
17
  const isAvailable = (0, react.useMemo)(() => {
17
18
  try {
@@ -21,7 +22,7 @@ const LocalStorageProvider = ({ children }) => {
21
22
  }
22
23
  }, []);
23
24
  (0, react.useEffect)(() => {
24
- if (!isAvailable) require_logger.default.logError("localStorage is not available", void 0);
25
+ if (!isAvailable) logger.logError("localStorage is not available", void 0);
25
26
  }, [isAvailable]);
26
27
  const setItem = (0, react.useCallback)((key, value$1) => {
27
28
  if (!isAvailable) return;
@@ -49,7 +50,7 @@ const LocalStorageProvider = ({ children }) => {
49
50
  if (!listenersCache.has(listener.storageKey)) {
50
51
  const handler = (event) => {
51
52
  if (event.key !== listener.storageKey) return;
52
- require_logger.default.logDebug(`[spiffy-ai] Storage event key=${event.key}, value=`, event.newValue);
53
+ logger.logDebug(`Storage event key=${event.key}, value=`, event.newValue);
53
54
  listener.listener(event);
54
55
  };
55
56
  listenersCache.set(listener.storageKey, handler);
@@ -96,4 +97,4 @@ const useLocalStorage = () => {
96
97
  exports.LocalStorageKeys = LocalStorageKeys;
97
98
  exports.LocalStorageProvider = LocalStorageProvider;
98
99
  exports.useLocalStorage = useLocalStorage;
99
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxTdG9yYWdlQ29udGV4dC5janMiLCJuYW1lcyI6WyJMb2NhbFN0b3JhZ2VQcm92aWRlcjogUmVhY3QuRkM8eyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0+IiwidmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvbG9jYWxTdG9yYWdlQ29udGV4dC9sb2NhbFN0b3JhZ2VDb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2xvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXInO1xuXG5leHBvcnQgZW51bSBMb2NhbFN0b3JhZ2VLZXlzIHtcbiAgQ2hhdElkID0gJ3YxLXNwaWZmeS1jaGF0LXNlc3Npb24taWQnLFxuICBTcGlmZnlPbk92ZXJyaWRlID0gJ3NwaWZmeV9vbicsXG4gIEVudml2ZU9uT3ZlcnJpZGUgPSAnZW52aXZlX29uJyxcbn1cblxuaW50ZXJmYWNlIExvY2FsU3RvcmFnZUNvbnRleHRUeXBlIHtcbiAgc2V0SXRlbTogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBnZXRJdGVtOiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGw7XG4gIHNldFNwaWZmeU9uRmVhdHVyZUZsYWc6ICh2YWx1ZTogYm9vbGVhbiB8IG51bGwpID0+IHZvaWQ7XG4gIGdldFNwaWZmeU9uRmVhdHVyZUZsYWc6ICgpID0+IHN0cmluZyB8IG51bGw7XG4gIGF0dGFjaExpc3RlbmVyOiAobGlzdGVuZXI6IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIpID0+IHZvaWQ7XG4gIGRldGFjaExpc3RlbmVyOiAobGlzdGVuZXI6IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIpID0+IHZvaWQ7XG4gIGlzQXZhaWxhYmxlOiBib29sZWFuO1xufVxuXG5jb25zdCBMb2NhbFN0b3JhZ2VDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxMb2NhbFN0b3JhZ2VDb250ZXh0VHlwZSB8IG51bGw+KG51bGwpO1xuXG5leHBvcnQgY29uc3QgTG9jYWxTdG9yYWdlUHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9PiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgaXNBdmFpbGFibGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICEhd2luZG93LmxvY2FsU3RvcmFnZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNBdmFpbGFibGUpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignbG9jYWxTdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUnLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfSwgW2lzQXZhaWxhYmxlXSk7XG5cbiAgY29uc3Qgc2V0SXRlbSA9IHVzZUNhbGxiYWNrKFxuICAgIChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFpc0F2YWlsYWJsZSkgcmV0dXJuO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgU3RvcmFnZUV2ZW50KCdzdG9yYWdlJywgeyBrZXksIG5ld1ZhbHVlOiB2YWx1ZSB9KSk7XG4gICAgfSxcbiAgICBbaXNBdmFpbGFibGVdLFxuICApO1xuXG4gIGNvbnN0IGdldEl0ZW0gPSB1c2VDYWxsYmFjayhcbiAgICAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghaXNBdmFpbGFibGUpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgfSxcbiAgICBbaXNBdmFpbGFibGVdLFxuICApO1xuXG4gIGNvbnN0IHNldFNwaWZmeU9uRmVhdHVyZUZsYWcgPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IGJvb2xlYW4gfCBudWxsKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIWlzQXZhaWxhYmxlKSByZXR1cm47XG4gICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5cy5TcGlmZnlPbk92ZXJyaWRlLCAndHJ1ZScpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5cy5TcGlmZnlPbk92ZXJyaWRlLCAnZmFsc2UnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpc0F2YWlsYWJsZV0sXG4gICk7XG5cbiAgY29uc3QgZ2V0U3BpZmZ5T25GZWF0dXJlRmxhZyA9IHVzZUNhbGxiYWNrKCgpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgICBpZiAoIWlzQXZhaWxhYmxlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlS2V5cy5TcGlmZnlPbk92ZXJyaWRlKTtcbiAgfSwgW2lzQXZhaWxhYmxlXSk7XG5cbiAgY29uc3QgbGlzdGVuZXJzQ2FjaGUgPSB1c2VNZW1vKCgpID0+IG5ldyBNYXA8c3RyaW5nLCAoZXZlbnQ6IFN0b3JhZ2VFdmVudCkgPT4gdm9pZD4oKSwgW10pO1xuXG4gIGNvbnN0IGxpc3RlbmVyRm9yS2V5ID0gdXNlQ2FsbGJhY2soXG4gICAgKGxpc3RlbmVyOiBMb2NhbFN0b3JhZ2VFdmVudExpc3RlbmVyKTogKChldmVudDogU3RvcmFnZUV2ZW50KSA9PiB2b2lkKSA9PiB7XG4gICAgICBpZiAoIWxpc3RlbmVyc0NhY2hlLmhhcyhsaXN0ZW5lci5zdG9yYWdlS2V5KSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKGV2ZW50OiBTdG9yYWdlRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ICE9PSBsaXN0ZW5lci5zdG9yYWdlS2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIExvZ2dlci5sb2dEZWJ1ZyhgW3NwaWZmeS1haV0gU3RvcmFnZSBldmVudCBrZXk9JHtldmVudC5rZXl9LCB2YWx1ZT1gLCBldmVudC5uZXdWYWx1ZSk7XG4gICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIoZXZlbnQpO1xuICAgICAgICB9O1xuICAgICAgICBsaXN0ZW5lcnNDYWNoZS5zZXQobGlzdGVuZXIuc3RvcmFnZUtleSwgaGFuZGxlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdGVuZXJzQ2FjaGUuZ2V0KGxpc3RlbmVyLnN0b3JhZ2VLZXkpITtcbiAgICB9LFxuICAgIFtsaXN0ZW5lcnNDYWNoZV0sXG4gICk7XG5cbiAgY29uc3QgYXR0YWNoTGlzdGVuZXIgPSB1c2VDYWxsYmFjayhcbiAgICAobGlzdGVuZXI6IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIpOiB2b2lkID0+IHtcbiAgICAgIGlmICghaXNBdmFpbGFibGUpIHJldHVybjtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgbGlzdGVuZXJGb3JLZXkobGlzdGVuZXIpKTtcbiAgICB9LFxuICAgIFtpc0F2YWlsYWJsZSwgbGlzdGVuZXJGb3JLZXldLFxuICApO1xuXG4gIGNvbnN0IGRldGFjaExpc3RlbmVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGxpc3RlbmVyOiBMb2NhbFN0b3JhZ2VFdmVudExpc3RlbmVyKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIWlzQXZhaWxhYmxlKSByZXR1cm47XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIGxpc3RlbmVyRm9yS2V5KGxpc3RlbmVyKSk7XG4gICAgfSxcbiAgICBbaXNBdmFpbGFibGUsIGxpc3RlbmVyRm9yS2V5XSxcbiAgKTtcblxuICBjb25zdCB2YWx1ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIHNldEl0ZW0sXG4gICAgICBnZXRJdGVtLFxuICAgICAgc2V0U3BpZmZ5T25GZWF0dXJlRmxhZyxcbiAgICAgIGdldFNwaWZmeU9uRmVhdHVyZUZsYWcsXG4gICAgICBhdHRhY2hMaXN0ZW5lcixcbiAgICAgIGRldGFjaExpc3RlbmVyLFxuICAgICAgaXNBdmFpbGFibGUsXG4gICAgfSksXG4gICAgW1xuICAgICAgc2V0SXRlbSxcbiAgICAgIGdldEl0ZW0sXG4gICAgICBzZXRTcGlmZnlPbkZlYXR1cmVGbGFnLFxuICAgICAgZ2V0U3BpZmZ5T25GZWF0dXJlRmxhZyxcbiAgICAgIGF0dGFjaExpc3RlbmVyLFxuICAgICAgZGV0YWNoTGlzdGVuZXIsXG4gICAgICBpc0F2YWlsYWJsZSxcbiAgICBdLFxuICApO1xuXG4gIHJldHVybiA8TG9jYWxTdG9yYWdlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dmFsdWV9PntjaGlsZHJlbn08L0xvY2FsU3RvcmFnZUNvbnRleHQuUHJvdmlkZXI+O1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUxvY2FsU3RvcmFnZSA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTG9jYWxTdG9yYWdlQ29udGV4dCk7XG4gIGlmICghY29udGV4dCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlTG9jYWxTdG9yYWdlIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBMb2NhbFN0b3JhZ2VQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBLElB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
100
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxTdG9yYWdlQ29udGV4dC5janMiLCJuYW1lcyI6WyJMb2dnZXIiLCJMb2NhbFN0b3JhZ2VQcm92aWRlcjogUmVhY3QuRkM8eyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0+IiwidmFsdWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvbG9jYWxTdG9yYWdlQ29udGV4dC9sb2NhbFN0b3JhZ2VDb250ZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgY3JlYXRlQ29udGV4dCwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2xvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXInO1xuXG5leHBvcnQgZW51bSBMb2NhbFN0b3JhZ2VLZXlzIHtcbiAgQ2hhdElkID0gJ3YxLXNwaWZmeS1jaGF0LXNlc3Npb24taWQnLFxuICBTcGlmZnlPbk92ZXJyaWRlID0gJ3NwaWZmeV9vbicsXG4gIEVudml2ZU9uT3ZlcnJpZGUgPSAnZW52aXZlX29uJyxcbn1cblxuaW50ZXJmYWNlIExvY2FsU3RvcmFnZUNvbnRleHRUeXBlIHtcbiAgc2V0SXRlbTogKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBnZXRJdGVtOiAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGw7XG4gIHNldFNwaWZmeU9uRmVhdHVyZUZsYWc6ICh2YWx1ZTogYm9vbGVhbiB8IG51bGwpID0+IHZvaWQ7XG4gIGdldFNwaWZmeU9uRmVhdHVyZUZsYWc6ICgpID0+IHN0cmluZyB8IG51bGw7XG4gIGF0dGFjaExpc3RlbmVyOiAobGlzdGVuZXI6IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIpID0+IHZvaWQ7XG4gIGRldGFjaExpc3RlbmVyOiAobGlzdGVuZXI6IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIpID0+IHZvaWQ7XG4gIGlzQXZhaWxhYmxlOiBib29sZWFuO1xufVxuXG5jb25zdCBMb2NhbFN0b3JhZ2VDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxMb2NhbFN0b3JhZ2VDb250ZXh0VHlwZSB8IG51bGw+KG51bGwpO1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdsb2NhbFN0b3JhZ2VDb250ZXh0Jyk7XG5cbmV4cG9ydCBjb25zdCBMb2NhbFN0b3JhZ2VQcm92aWRlcjogUmVhY3QuRkM8eyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0+ID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCBpc0F2YWlsYWJsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgISF3aW5kb3cubG9jYWxTdG9yYWdlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0F2YWlsYWJsZSkge1xuICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdsb2NhbFN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZScsIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9LCBbaXNBdmFpbGFibGVdKTtcblxuICBjb25zdCBzZXRJdGVtID0gdXNlQ2FsbGJhY2soXG4gICAgKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWlzQXZhaWxhYmxlKSByZXR1cm47XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBTdG9yYWdlRXZlbnQoJ3N0b3JhZ2UnLCB7IGtleSwgbmV3VmFsdWU6IHZhbHVlIH0pKTtcbiAgICB9LFxuICAgIFtpc0F2YWlsYWJsZV0sXG4gICk7XG5cbiAgY29uc3QgZ2V0SXRlbSA9IHVzZUNhbGxiYWNrKFxuICAgIChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFpc0F2YWlsYWJsZSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9LFxuICAgIFtpc0F2YWlsYWJsZV0sXG4gICk7XG5cbiAgY29uc3Qgc2V0U3BpZmZ5T25GZWF0dXJlRmxhZyA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZTogYm9vbGVhbiB8IG51bGwpOiB2b2lkID0+IHtcbiAgICAgIGlmICghaXNBdmFpbGFibGUpIHJldHVybjtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXlzLlNwaWZmeU9uT3ZlcnJpZGUsICd0cnVlJyk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXlzLlNwaWZmeU9uT3ZlcnJpZGUsICdmYWxzZScpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2lzQXZhaWxhYmxlXSxcbiAgKTtcblxuICBjb25zdCBnZXRTcGlmZnlPbkZlYXR1cmVGbGFnID0gdXNlQ2FsbGJhY2soKCk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGlmICghaXNBdmFpbGFibGUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VLZXlzLlNwaWZmeU9uT3ZlcnJpZGUpO1xuICB9LCBbaXNBdmFpbGFibGVdKTtcblxuICBjb25zdCBsaXN0ZW5lcnNDYWNoZSA9IHVzZU1lbW8oKCkgPT4gbmV3IE1hcDxzdHJpbmcsIChldmVudDogU3RvcmFnZUV2ZW50KSA9PiB2b2lkPigpLCBbXSk7XG5cbiAgY29uc3QgbGlzdGVuZXJGb3JLZXkgPSB1c2VDYWxsYmFjayhcbiAgICAobGlzdGVuZXI6IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIpOiAoKGV2ZW50OiBTdG9yYWdlRXZlbnQpID0+IHZvaWQpID0+IHtcbiAgICAgIGlmICghbGlzdGVuZXJzQ2FjaGUuaGFzKGxpc3RlbmVyLnN0b3JhZ2VLZXkpKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IFN0b3JhZ2VFdmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgIT09IGxpc3RlbmVyLnN0b3JhZ2VLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKGBTdG9yYWdlIGV2ZW50IGtleT0ke2V2ZW50LmtleX0sIHZhbHVlPWAsIGV2ZW50Lm5ld1ZhbHVlKTtcbiAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lcihldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGxpc3RlbmVyc0NhY2hlLnNldChsaXN0ZW5lci5zdG9yYWdlS2V5LCBoYW5kbGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNDYWNoZS5nZXQobGlzdGVuZXIuc3RvcmFnZUtleSkhO1xuICAgIH0sXG4gICAgW2xpc3RlbmVyc0NhY2hlXSxcbiAgKTtcblxuICBjb25zdCBhdHRhY2hMaXN0ZW5lciA9IHVzZUNhbGxiYWNrKFxuICAgIChsaXN0ZW5lcjogTG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lcik6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFpc0F2YWlsYWJsZSkgcmV0dXJuO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBsaXN0ZW5lckZvcktleShsaXN0ZW5lcikpO1xuICAgIH0sXG4gICAgW2lzQXZhaWxhYmxlLCBsaXN0ZW5lckZvcktleV0sXG4gICk7XG5cbiAgY29uc3QgZGV0YWNoTGlzdGVuZXIgPSB1c2VDYWxsYmFjayhcbiAgICAobGlzdGVuZXI6IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIpOiB2b2lkID0+IHtcbiAgICAgIGlmICghaXNBdmFpbGFibGUpIHJldHVybjtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgbGlzdGVuZXJGb3JLZXkobGlzdGVuZXIpKTtcbiAgICB9LFxuICAgIFtpc0F2YWlsYWJsZSwgbGlzdGVuZXJGb3JLZXldLFxuICApO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgc2V0SXRlbSxcbiAgICAgIGdldEl0ZW0sXG4gICAgICBzZXRTcGlmZnlPbkZlYXR1cmVGbGFnLFxuICAgICAgZ2V0U3BpZmZ5T25GZWF0dXJlRmxhZyxcbiAgICAgIGF0dGFjaExpc3RlbmVyLFxuICAgICAgZGV0YWNoTGlzdGVuZXIsXG4gICAgICBpc0F2YWlsYWJsZSxcbiAgICB9KSxcbiAgICBbXG4gICAgICBzZXRJdGVtLFxuICAgICAgZ2V0SXRlbSxcbiAgICAgIHNldFNwaWZmeU9uRmVhdHVyZUZsYWcsXG4gICAgICBnZXRTcGlmZnlPbkZlYXR1cmVGbGFnLFxuICAgICAgYXR0YWNoTGlzdGVuZXIsXG4gICAgICBkZXRhY2hMaXN0ZW5lcixcbiAgICAgIGlzQXZhaWxhYmxlLFxuICAgIF0sXG4gICk7XG5cbiAgcmV0dXJuIDxMb2NhbFN0b3JhZ2VDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvTG9jYWxTdG9yYWdlQ29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5leHBvcnQgY29uc3QgdXNlTG9jYWxTdG9yYWdlID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChMb2NhbFN0b3JhZ2VDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VMb2NhbFN0b3JhZ2UgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIExvY2FsU3RvcmFnZVByb3ZpZGVyJyk7XG4gIH1cbiAg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
@@ -10,6 +10,7 @@ let LocalStorageKeys = /* @__PURE__ */ function(LocalStorageKeys$1) {
10
10
  return LocalStorageKeys$1;
11
11
  }({});
12
12
  const LocalStorageContext = createContext(null);
13
+ const logger = new logger_default("localStorageContext");
13
14
  const LocalStorageProvider = ({ children }) => {
14
15
  const isAvailable = useMemo(() => {
15
16
  try {
@@ -19,7 +20,7 @@ const LocalStorageProvider = ({ children }) => {
19
20
  }
20
21
  }, []);
21
22
  useEffect(() => {
22
- if (!isAvailable) logger_default.logError("localStorage is not available", void 0);
23
+ if (!isAvailable) logger.logError("localStorage is not available", void 0);
23
24
  }, [isAvailable]);
24
25
  const setItem = useCallback((key, value$1) => {
25
26
  if (!isAvailable) return;
@@ -47,7 +48,7 @@ const LocalStorageProvider = ({ children }) => {
47
48
  if (!listenersCache.has(listener.storageKey)) {
48
49
  const handler = (event) => {
49
50
  if (event.key !== listener.storageKey) return;
50
- logger_default.logDebug(`[spiffy-ai] Storage event key=${event.key}, value=`, event.newValue);
51
+ logger.logDebug(`Storage event key=${event.key}, value=`, event.newValue);
51
52
  listener.listener(event);
52
53
  };
53
54
  listenersCache.set(listener.storageKey, handler);
@@ -92,4 +93,4 @@ const useLocalStorage = () => {
92
93
 
93
94
  //#endregion
94
95
  export { LocalStorageKeys, LocalStorageProvider, useLocalStorage };
95
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxTdG9yYWdlQ29udGV4dC5qcyIsIm5hbWVzIjpbIkxvY2FsU3RvcmFnZVByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4iLCJ2YWx1ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9sb2NhbFN0b3JhZ2VDb250ZXh0L2xvY2FsU3RvcmFnZUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lciB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvbG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lcic7XG5cbmV4cG9ydCBlbnVtIExvY2FsU3RvcmFnZUtleXMge1xuICBDaGF0SWQgPSAndjEtc3BpZmZ5LWNoYXQtc2Vzc2lvbi1pZCcsXG4gIFNwaWZmeU9uT3ZlcnJpZGUgPSAnc3BpZmZ5X29uJyxcbiAgRW52aXZlT25PdmVycmlkZSA9ICdlbnZpdmVfb24nLFxufVxuXG5pbnRlcmZhY2UgTG9jYWxTdG9yYWdlQ29udGV4dFR5cGUge1xuICBzZXRJdGVtOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcbiAgc2V0U3BpZmZ5T25GZWF0dXJlRmxhZzogKHZhbHVlOiBib29sZWFuIHwgbnVsbCkgPT4gdm9pZDtcbiAgZ2V0U3BpZmZ5T25GZWF0dXJlRmxhZzogKCkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgYXR0YWNoTGlzdGVuZXI6IChsaXN0ZW5lcjogTG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lcikgPT4gdm9pZDtcbiAgZGV0YWNoTGlzdGVuZXI6IChsaXN0ZW5lcjogTG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lcikgPT4gdm9pZDtcbiAgaXNBdmFpbGFibGU6IGJvb2xlYW47XG59XG5cbmNvbnN0IExvY2FsU3RvcmFnZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PExvY2FsU3RvcmFnZUNvbnRleHRUeXBlIHwgbnVsbD4obnVsbCk7XG5cbmV4cG9ydCBjb25zdCBMb2NhbFN0b3JhZ2VQcm92aWRlcjogUmVhY3QuRkM8eyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0+ID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCBpc0F2YWlsYWJsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgISF3aW5kb3cubG9jYWxTdG9yYWdlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0F2YWlsYWJsZSkge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdsb2NhbFN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZScsIHVuZGVmaW5lZCk7XG4gICAgfVxuICB9LCBbaXNBdmFpbGFibGVdKTtcblxuICBjb25zdCBzZXRJdGVtID0gdXNlQ2FsbGJhY2soXG4gICAgKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWlzQXZhaWxhYmxlKSByZXR1cm47XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIHZhbHVlKTtcbiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBTdG9yYWdlRXZlbnQoJ3N0b3JhZ2UnLCB7IGtleSwgbmV3VmFsdWU6IHZhbHVlIH0pKTtcbiAgICB9LFxuICAgIFtpc0F2YWlsYWJsZV0sXG4gICk7XG5cbiAgY29uc3QgZ2V0SXRlbSA9IHVzZUNhbGxiYWNrKFxuICAgIChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFpc0F2YWlsYWJsZSkgcmV0dXJuIG51bGw7XG4gICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9LFxuICAgIFtpc0F2YWlsYWJsZV0sXG4gICk7XG5cbiAgY29uc3Qgc2V0U3BpZmZ5T25GZWF0dXJlRmxhZyA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZTogYm9vbGVhbiB8IG51bGwpOiB2b2lkID0+IHtcbiAgICAgIGlmICghaXNBdmFpbGFibGUpIHJldHVybjtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXlzLlNwaWZmeU9uT3ZlcnJpZGUsICd0cnVlJyk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXlzLlNwaWZmeU9uT3ZlcnJpZGUsICdmYWxzZScpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2lzQXZhaWxhYmxlXSxcbiAgKTtcblxuICBjb25zdCBnZXRTcGlmZnlPbkZlYXR1cmVGbGFnID0gdXNlQ2FsbGJhY2soKCk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGlmICghaXNBdmFpbGFibGUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VLZXlzLlNwaWZmeU9uT3ZlcnJpZGUpO1xuICB9LCBbaXNBdmFpbGFibGVdKTtcblxuICBjb25zdCBsaXN0ZW5lcnNDYWNoZSA9IHVzZU1lbW8oKCkgPT4gbmV3IE1hcDxzdHJpbmcsIChldmVudDogU3RvcmFnZUV2ZW50KSA9PiB2b2lkPigpLCBbXSk7XG5cbiAgY29uc3QgbGlzdGVuZXJGb3JLZXkgPSB1c2VDYWxsYmFjayhcbiAgICAobGlzdGVuZXI6IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIpOiAoKGV2ZW50OiBTdG9yYWdlRXZlbnQpID0+IHZvaWQpID0+IHtcbiAgICAgIGlmICghbGlzdGVuZXJzQ2FjaGUuaGFzKGxpc3RlbmVyLnN0b3JhZ2VLZXkpKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IFN0b3JhZ2VFdmVudCkgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5rZXkgIT09IGxpc3RlbmVyLnN0b3JhZ2VLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgTG9nZ2VyLmxvZ0RlYnVnKGBbc3BpZmZ5LWFpXSBTdG9yYWdlIGV2ZW50IGtleT0ke2V2ZW50LmtleX0sIHZhbHVlPWAsIGV2ZW50Lm5ld1ZhbHVlKTtcbiAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lcihldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGxpc3RlbmVyc0NhY2hlLnNldChsaXN0ZW5lci5zdG9yYWdlS2V5LCBoYW5kbGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNDYWNoZS5nZXQobGlzdGVuZXIuc3RvcmFnZUtleSkhO1xuICAgIH0sXG4gICAgW2xpc3RlbmVyc0NhY2hlXSxcbiAgKTtcblxuICBjb25zdCBhdHRhY2hMaXN0ZW5lciA9IHVzZUNhbGxiYWNrKFxuICAgIChsaXN0ZW5lcjogTG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lcik6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFpc0F2YWlsYWJsZSkgcmV0dXJuO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBsaXN0ZW5lckZvcktleShsaXN0ZW5lcikpO1xuICAgIH0sXG4gICAgW2lzQXZhaWxhYmxlLCBsaXN0ZW5lckZvcktleV0sXG4gICk7XG5cbiAgY29uc3QgZGV0YWNoTGlzdGVuZXIgPSB1c2VDYWxsYmFjayhcbiAgICAobGlzdGVuZXI6IExvY2FsU3RvcmFnZUV2ZW50TGlzdGVuZXIpOiB2b2lkID0+IHtcbiAgICAgIGlmICghaXNBdmFpbGFibGUpIHJldHVybjtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgbGlzdGVuZXJGb3JLZXkobGlzdGVuZXIpKTtcbiAgICB9LFxuICAgIFtpc0F2YWlsYWJsZSwgbGlzdGVuZXJGb3JLZXldLFxuICApO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgc2V0SXRlbSxcbiAgICAgIGdldEl0ZW0sXG4gICAgICBzZXRTcGlmZnlPbkZlYXR1cmVGbGFnLFxuICAgICAgZ2V0U3BpZmZ5T25GZWF0dXJlRmxhZyxcbiAgICAgIGF0dGFjaExpc3RlbmVyLFxuICAgICAgZGV0YWNoTGlzdGVuZXIsXG4gICAgICBpc0F2YWlsYWJsZSxcbiAgICB9KSxcbiAgICBbXG4gICAgICBzZXRJdGVtLFxuICAgICAgZ2V0SXRlbSxcbiAgICAgIHNldFNwaWZmeU9uRmVhdHVyZUZsYWcsXG4gICAgICBnZXRTcGlmZnlPbkZlYXR1cmVGbGFnLFxuICAgICAgYXR0YWNoTGlzdGVuZXIsXG4gICAgICBkZXRhY2hMaXN0ZW5lcixcbiAgICAgIGlzQXZhaWxhYmxlLFxuICAgIF0sXG4gICk7XG5cbiAgcmV0dXJuIDxMb2NhbFN0b3JhZ2VDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt2YWx1ZX0+e2NoaWxkcmVufTwvTG9jYWxTdG9yYWdlQ29udGV4dC5Qcm92aWRlcj47XG59O1xuXG5leHBvcnQgY29uc3QgdXNlTG9jYWxTdG9yYWdlID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChMb2NhbFN0b3JhZ2VDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VMb2NhbFN0b3JhZ2UgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIExvY2FsU3RvcmFnZVByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUlBLElBQVks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
96
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxTdG9yYWdlQ29udGV4dC5qcyIsIm5hbWVzIjpbIkxvZ2dlciIsIkxvY2FsU3RvcmFnZVByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4iLCJ2YWx1ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9sb2NhbFN0b3JhZ2VDb250ZXh0L2xvY2FsU3RvcmFnZUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lciB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvbG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lcic7XG5cbmV4cG9ydCBlbnVtIExvY2FsU3RvcmFnZUtleXMge1xuICBDaGF0SWQgPSAndjEtc3BpZmZ5LWNoYXQtc2Vzc2lvbi1pZCcsXG4gIFNwaWZmeU9uT3ZlcnJpZGUgPSAnc3BpZmZ5X29uJyxcbiAgRW52aXZlT25PdmVycmlkZSA9ICdlbnZpdmVfb24nLFxufVxuXG5pbnRlcmZhY2UgTG9jYWxTdG9yYWdlQ29udGV4dFR5cGUge1xuICBzZXRJdGVtOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcbiAgc2V0U3BpZmZ5T25GZWF0dXJlRmxhZzogKHZhbHVlOiBib29sZWFuIHwgbnVsbCkgPT4gdm9pZDtcbiAgZ2V0U3BpZmZ5T25GZWF0dXJlRmxhZzogKCkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgYXR0YWNoTGlzdGVuZXI6IChsaXN0ZW5lcjogTG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lcikgPT4gdm9pZDtcbiAgZGV0YWNoTGlzdGVuZXI6IChsaXN0ZW5lcjogTG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lcikgPT4gdm9pZDtcbiAgaXNBdmFpbGFibGU6IGJvb2xlYW47XG59XG5cbmNvbnN0IExvY2FsU3RvcmFnZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PExvY2FsU3RvcmFnZUNvbnRleHRUeXBlIHwgbnVsbD4obnVsbCk7XG5cbmNvbnN0IGxvZ2dlciA9IG5ldyBMb2dnZXIoJ2xvY2FsU3RvcmFnZUNvbnRleHQnKTtcblxuZXhwb3J0IGNvbnN0IExvY2FsU3RvcmFnZVByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IGlzQXZhaWxhYmxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhIXdpbmRvdy5sb2NhbFN0b3JhZ2U7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzQXZhaWxhYmxlKSB7XG4gICAgICBsb2dnZXIubG9nRXJyb3IoJ2xvY2FsU3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlJywgdW5kZWZpbmVkKTtcbiAgICB9XG4gIH0sIFtpc0F2YWlsYWJsZV0pO1xuXG4gIGNvbnN0IHNldEl0ZW0gPSB1c2VDYWxsYmFjayhcbiAgICAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghaXNBdmFpbGFibGUpIHJldHVybjtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IFN0b3JhZ2VFdmVudCgnc3RvcmFnZScsIHsga2V5LCBuZXdWYWx1ZTogdmFsdWUgfSkpO1xuICAgIH0sXG4gICAgW2lzQXZhaWxhYmxlXSxcbiAgKTtcblxuICBjb25zdCBnZXRJdGVtID0gdXNlQ2FsbGJhY2soXG4gICAgKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWlzQXZhaWxhYmxlKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIH0sXG4gICAgW2lzQXZhaWxhYmxlXSxcbiAgKTtcblxuICBjb25zdCBzZXRTcGlmZnlPbkZlYXR1cmVGbGFnID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBib29sZWFuIHwgbnVsbCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFpc0F2YWlsYWJsZSkgcmV0dXJuO1xuICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZUtleXMuU3BpZmZ5T25PdmVycmlkZSwgJ3RydWUnKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZUtleXMuU3BpZmZ5T25PdmVycmlkZSwgJ2ZhbHNlJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbaXNBdmFpbGFibGVdLFxuICApO1xuXG4gIGNvbnN0IGdldFNwaWZmeU9uRmVhdHVyZUZsYWcgPSB1c2VDYWxsYmFjaygoKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gICAgaWYgKCFpc0F2YWlsYWJsZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZUtleXMuU3BpZmZ5T25PdmVycmlkZSk7XG4gIH0sIFtpc0F2YWlsYWJsZV0pO1xuXG4gIGNvbnN0IGxpc3RlbmVyc0NhY2hlID0gdXNlTWVtbygoKSA9PiBuZXcgTWFwPHN0cmluZywgKGV2ZW50OiBTdG9yYWdlRXZlbnQpID0+IHZvaWQ+KCksIFtdKTtcblxuICBjb25zdCBsaXN0ZW5lckZvcktleSA9IHVzZUNhbGxiYWNrKFxuICAgIChsaXN0ZW5lcjogTG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lcik6ICgoZXZlbnQ6IFN0b3JhZ2VFdmVudCkgPT4gdm9pZCkgPT4ge1xuICAgICAgaWYgKCFsaXN0ZW5lcnNDYWNoZS5oYXMobGlzdGVuZXIuc3RvcmFnZUtleSkpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IChldmVudDogU3RvcmFnZUV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSAhPT0gbGlzdGVuZXIuc3RvcmFnZUtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb2dnZXIubG9nRGVidWcoYFN0b3JhZ2UgZXZlbnQga2V5PSR7ZXZlbnQua2V5fSwgdmFsdWU9YCwgZXZlbnQubmV3VmFsdWUpO1xuICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyKGV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgbGlzdGVuZXJzQ2FjaGUuc2V0KGxpc3RlbmVyLnN0b3JhZ2VLZXksIGhhbmRsZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RlbmVyc0NhY2hlLmdldChsaXN0ZW5lci5zdG9yYWdlS2V5KSE7XG4gICAgfSxcbiAgICBbbGlzdGVuZXJzQ2FjaGVdLFxuICApO1xuXG4gIGNvbnN0IGF0dGFjaExpc3RlbmVyID0gdXNlQ2FsbGJhY2soXG4gICAgKGxpc3RlbmVyOiBMb2NhbFN0b3JhZ2VFdmVudExpc3RlbmVyKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIWlzQXZhaWxhYmxlKSByZXR1cm47XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIGxpc3RlbmVyRm9yS2V5KGxpc3RlbmVyKSk7XG4gICAgfSxcbiAgICBbaXNBdmFpbGFibGUsIGxpc3RlbmVyRm9yS2V5XSxcbiAgKTtcblxuICBjb25zdCBkZXRhY2hMaXN0ZW5lciA9IHVzZUNhbGxiYWNrKFxuICAgIChsaXN0ZW5lcjogTG9jYWxTdG9yYWdlRXZlbnRMaXN0ZW5lcik6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFpc0F2YWlsYWJsZSkgcmV0dXJuO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBsaXN0ZW5lckZvcktleShsaXN0ZW5lcikpO1xuICAgIH0sXG4gICAgW2lzQXZhaWxhYmxlLCBsaXN0ZW5lckZvcktleV0sXG4gICk7XG5cbiAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBzZXRJdGVtLFxuICAgICAgZ2V0SXRlbSxcbiAgICAgIHNldFNwaWZmeU9uRmVhdHVyZUZsYWcsXG4gICAgICBnZXRTcGlmZnlPbkZlYXR1cmVGbGFnLFxuICAgICAgYXR0YWNoTGlzdGVuZXIsXG4gICAgICBkZXRhY2hMaXN0ZW5lcixcbiAgICAgIGlzQXZhaWxhYmxlLFxuICAgIH0pLFxuICAgIFtcbiAgICAgIHNldEl0ZW0sXG4gICAgICBnZXRJdGVtLFxuICAgICAgc2V0U3BpZmZ5T25GZWF0dXJlRmxhZyxcbiAgICAgIGdldFNwaWZmeU9uRmVhdHVyZUZsYWcsXG4gICAgICBhdHRhY2hMaXN0ZW5lcixcbiAgICAgIGRldGFjaExpc3RlbmVyLFxuICAgICAgaXNBdmFpbGFibGUsXG4gICAgXSxcbiAgKTtcblxuICByZXR1cm4gPExvY2FsU3RvcmFnZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9Mb2NhbFN0b3JhZ2VDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VMb2NhbFN0b3JhZ2UgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KExvY2FsU3RvcmFnZUNvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUxvY2FsU3RvcmFnZSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTG9jYWxTdG9yYWdlUHJvdmlkZXInKTtcbiAgfVxuICBy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