@envive-ai/react-hooks 0.3.53 → 0.3.55

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 (68) hide show
  1. package/dist/application/models/featureGates.cjs +6 -1
  2. package/dist/application/models/featureGates.d.cts +6 -1
  3. package/dist/application/models/featureGates.d.ts +6 -1
  4. package/dist/application/models/featureGates.js +6 -1
  5. package/dist/atoms/app/index.d.cts +6 -6
  6. package/dist/atoms/app/index.d.ts +7 -7
  7. package/dist/atoms/app/variant.d.cts +6 -6
  8. package/dist/atoms/app/variant.d.ts +6 -6
  9. package/dist/atoms/chat/chatState.d.cts +19 -19
  10. package/dist/atoms/chat/chatState.d.ts +19 -19
  11. package/dist/atoms/chat/form.d.cts +2 -2
  12. package/dist/atoms/chat/form.d.ts +3 -3
  13. package/dist/atoms/chat/index.d.cts +3 -3
  14. package/dist/atoms/chat/index.d.ts +3 -3
  15. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  16. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  17. package/dist/atoms/chat/messageQueue.d.cts +6 -6
  18. package/dist/atoms/chat/messageQueue.d.ts +7 -7
  19. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  20. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  21. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  22. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  23. package/dist/atoms/chat/replies.d.cts +3 -3
  24. package/dist/atoms/chat/replies.d.ts +3 -3
  25. package/dist/atoms/chat/suggestions.d.cts +2 -2
  26. package/dist/atoms/chat/suggestions.d.ts +3 -3
  27. package/dist/atoms/envive/enviveConfig.d.cts +14 -14
  28. package/dist/atoms/globalSearch/globalSearch.d.cts +5 -5
  29. package/dist/atoms/globalSearch/globalSearch.d.ts +5 -5
  30. package/dist/atoms/org/customerService.d.cts +6 -6
  31. package/dist/atoms/org/customerService.d.ts +6 -6
  32. package/dist/atoms/org/graphqlConfig.d.cts +4 -4
  33. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  34. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  35. package/dist/atoms/org/orgAnalyticsConfig.d.cts +4 -4
  36. package/dist/atoms/search/chatSearch.d.cts +17 -17
  37. package/dist/atoms/search/searchAPI.d.cts +13 -13
  38. package/dist/atoms/search/types.d.cts +1 -1
  39. package/dist/atoms/widget/chatPreviewLoading.d.cts +3 -3
  40. package/dist/contexts/enviveContext/enviveContext.cjs +1 -1
  41. package/dist/contexts/enviveContext/enviveContext.js +1 -1
  42. package/dist/contexts/enviveContext/types.d.cts +1 -1
  43. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +2 -1
  44. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.cts +3 -2
  45. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.d.ts +3 -2
  46. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +2 -2
  47. package/dist/contexts/featureFlagServiceContext/index.cjs +1 -0
  48. package/dist/contexts/featureFlagServiceContext/index.d.cts +2 -2
  49. package/dist/contexts/featureFlagServiceContext/index.d.ts +2 -2
  50. package/dist/contexts/featureFlagServiceContext/index.js +2 -2
  51. package/dist/contexts/pageContext/pageContext.cjs +31 -6
  52. package/dist/contexts/pageContext/pageContext.js +31 -6
  53. package/dist/contexts/systemSettingsContext/systemSettingsContext.d.cts +2 -2
  54. package/dist/contexts/types.d.cts +1 -1
  55. package/dist/contexts/types.d.ts +1 -1
  56. package/dist/contexts/typesV3.d.cts +1 -1
  57. package/dist/contexts/typesV3.d.ts +1 -1
  58. package/dist/hooks/GrabAndScroll/useGrabAndScroll.d.cts +2 -2
  59. package/dist/hooks/SystemSettingsContext/useSystemSettingsContext.d.cts +2 -2
  60. package/dist/services/amplitudeService/amplitudeService.cjs +6 -2
  61. package/dist/services/amplitudeService/amplitudeService.js +6 -2
  62. package/package.json +1 -1
  63. package/src/application/models/featureGates.ts +8 -0
  64. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +6 -1
  65. package/src/contexts/pageContext/__tests__/pageContext.test.tsx +269 -0
  66. package/src/contexts/pageContext/pageContext.tsx +73 -5
  67. package/src/services/amplitudeService/__tests__/amplitudeService.test.ts +43 -0
  68. package/src/services/amplitudeService/amplitudeService.ts +1 -0
@@ -355,4 +355,4 @@ interface FullPageSalesAgentWidgetV3Config extends BaseWidgetConfig<WidgetTypeV3
355
355
  type WidgetConfigV3 = PromptCarouselWidgetV3Config | SocialProofWidgetV3Config | TitledPromptCarouselWidgetV3Config | ChatPreviewComparisonWidgetV3Config | ChatPreviewLoadingWidgetV3Config | TypingAnimationWidgetV3Config | ChatPreviewWidgetV3Config | PromptButtonCarouselWithImageWidgetV3Config | FloatingChatWidgetV3Config | ProductCardWidgetV3Config | FullPageSalesAgentWidgetV3Config;
356
356
  //#endregion
357
357
  export { type AddToCartConfig, AspectRatioCSSVar, AutoPopupConfig, AutoPopupTrigger, AutomaticPopupTrigger, BorderRadiusCSSVar, ButtonColorsVars, type ChatPreviewComparisonWidgetV3Config, type ChatPreviewLoadingWidgetV3Config, type ChatPreviewWidgetV3Config, ColorsNamesVars, ConfigVersionEnum, type CustomerServiceIntegration, type FloatingButtonConfig, type FloatingChatConfig, type FloatingChatWidgetV3Config, FontFamilyCSSVar, FontSizeCSSVar, FontWeightCSSVar, type FullPageSalesAgentWidgetV3Config, LetterSpacingCSSVar, LineHeightCSSVar, type LookAndFeelConfig, type OrgUIConfigV3, PopupTrigger, type ProductCardWidgetV3Config, ProductCarouselLayoutV3, type PromptButtonCarouselWithImageWidgetV3Config, type PromptCarouselWidgetV3Config, ReferrerPopupTrigger, type SPASettings, type SocialProofWidgetV3Config, ThemeCSSVar, type TitledPromptCarouselWidgetV3Config, type TypingAnimationWidgetV3Config, type WidgetConfigV3, WidgetTypeV3 };
358
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNWMy5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0cy90eXBlc1YzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmxvYXRpbmdCdXR0b25Mb2NhdGlvbiB9IGZyb20gJ0BlbnZpdmUtYWkvcmVhY3QtdG9vbGtpdC12My9GbG9hdGluZ0J1dHRvbic7XG5pbXBvcnQgeyBJbWFnZUdhbGxlcnlJbWFnZSwgSW1hZ2VHYWxsZXJ5TGF5b3V0IH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL0ltYWdlR2FsbGVyeSc7XG5pbXBvcnQgeyBQcm9tcHRCdXR0b25WYXJpYW50IH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL1Byb21wdEJ1dHRvbic7XG5pbXBvcnQgeyBBbmltYXRpb25TcGVlZCwgUHJvbXB0Q2Fyb3VzZWxSb3dzIH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL1Byb21wdENhcm91c2VsJztcbmltcG9ydCB7IER5bmFtaWNMYXlvdXQsIFdpZGdldEtpbmQgfSBmcm9tICdAZW52aXZlLWFpL3JlYWN0LXRvb2xraXQtdjMvU29jaWFsUHJvb2YnO1xuaW1wb3J0IHsgVGhlbWUgfSBmcm9tICdAZW52aXZlLWFpL3JlYWN0LXRvb2xraXQtdjMvVG9rZW5zJztcbmltcG9ydCB7IFNwYXJrbGVJY29uQ29sb3IgfSBmcm9tICdAZW52aXZlLWFpL3JlYWN0LXRvb2xraXQtdjMvV2VsY29tZU1lc3NhZ2UnO1xuaW1wb3J0IHsgV2lkZ2V0V3JhcHBlclZhcmlhbnQgfSBmcm9tICdAZW52aXZlLWFpL3JlYWN0LXRvb2xraXQtdjMvV2lkZ2V0V3JhcHBlcic7XG5pbXBvcnQgeyBDdXN0b21lclNlcnZpY2VUeXBlIH0gZnJvbSAnLi4vdHlwZXMvY3VzdG9tZXJTZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgU2VhcmNoQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgZGVjbGFyZSBlbnVtIExldHRlclNwYWNpbmdDU1NWYXIge1xuICAgIFQxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy10MVwiLFxuICAgIFQyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy10MlwiLFxuICAgIFQzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy10M1wiLFxuICAgIEgxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1oMVwiLFxuICAgIEgyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1oMlwiLFxuICAgIEgzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1oM1wiLFxuICAgIEIxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1iMVwiLFxuICAgIEIyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1iMlwiLFxuICAgIEIzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1iM1wiLFxuICAgIEI0ID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1iNFwiLFxuICAgIEI1ID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1iNVwiLFxuICAgIEwxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1sMVwiLFxuICAgIEwyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1sMlwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIExpbmVIZWlnaHRDU1NWYXIge1xuICAgIFQxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC10MVwiLFxuICAgIFQyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC10MlwiLFxuICAgIFQzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC10M1wiLFxuICAgIEgxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1oMVwiLFxuICAgIEgyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1oMlwiLFxuICAgIEgzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1oM1wiLFxuICAgIEIxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1iMVwiLFxuICAgIEIyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1iMlwiLFxuICAgIEIzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1iM1wiLFxuICAgIEI0ID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1iNFwiLFxuICAgIEI1ID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1iNVwiLFxuICAgIEwxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1sMVwiLFxuICAgIEwyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1sMlwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIEZvbnRXZWlnaHRDU1NWYXIge1xuICAgIFRpdGxlID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXdlaWdodC10aXRsZVwiLFxuICAgIEhlYWRlciA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtaGVhZGVyXCIsXG4gICAgQm9keUVtcGhhc2lzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2R5LWVtcGhhc2lzXCIsXG4gICAgQm9keVN0YW5kYXJkID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2R5LXN0YW5kYXJkXCJcbn1cbmV4cG9ydCBkZWNsYXJlIGVudW0gRm9udFNpemVDU1NWYXIge1xuICAgIFQxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXNpemUtdDFcIixcbiAgICBUMiA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC1zaXplLXQyXCIsXG4gICAgVDMgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtc2l6ZS10M1wiLFxuICAgIEgxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXNpemUtaDFcIixcbiAgICBIMiA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC1zaXplLWgyXCIsXG4gICAgSDMgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtc2l6ZS1oM1wiLFxuICAgIEIxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXNpemUtYjFcIixcbiAgICBCMiA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC1zaXplLWIyXCIsXG4gICAgQjMgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtc2l6ZS1iM1wiLFxuICAgIEI0ID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXNpemUtYjRcIixcbiAgICBCNSA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC1zaXplLWI1XCIsXG4gICAgTDEgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtc2l6ZS1sMVwiLFxuICAgIEwyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXNpemUtbDJcIlxufVxuZXhwb3J0IGRlY2xhcmUgZW51bSBGb250RmFtaWx5Q1NTVmFyIHtcbiAgICBUaXRsZSA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC1mYW1pbHktdGl0bGVcIixcbiAgICBIZWFkZXIgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LWhlYWRlclwiLFxuICAgIEJvZHkgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LWJvZHlcIlxufVxuZXhwb3J0IGRlY2xhcmUgZW51bSBUaGVtZUNTU1ZhciB7XG4gICAgR2xvYmFsQ3VzdG9tID0gXCJlbnZpdmUtZ2xvYmFsLWN1c3RvbS10aGVtZVwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIEFzcGVjdFJhdGlvQ1NTVmFyIHtcbiAgICBHbG9iYWxDdXN0b20gPSBcImVudml2ZS1nbG9iYWwtY3VzdG9tLWFzcGVjdC1yYXRpb1wiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIEJvcmRlclJhZGl1c0NTU1ZhciB7XG4gICAgR2xvYmFsQ3VzdG9tID0gXCJlbnZpdmUtZ2xvYmFsLWN1c3RvbS1ib3JkZXItcmFkaXVzXCJcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGVudW0gQ29sb3JzTmFtZXNWYXJzIHtcbiAgICBUZXh0UHJpbWFyeSA9IFwiZW52aXZlLWNvbG9ycy10ZXh0LXByaW1hcnlcIixcbiAgICBUZXh0U2Vjb25kYXJ5ID0gXCJlbnZpdmUtY29sb3JzLXRleHQtc2Vjb25kYXJ5XCIsXG4gICAgVGV4dEFjY2VudCA9IFwiZW52aXZlLWNvbG9ycy10ZXh0LWFjY2VudFwiLFxuICAgIFRleHRMaW5rID0gXCJlbnZpdmUtY29sb3JzLXRleHQtbGlua1wiLFxuICAgIFRleHRMaWdodCA9IFwiZW52aXZlLWNvbG9ycy10ZXh0LWxpZ2h0XCIsXG4gICAgQmFja2dyb3VuZFByaW1hcnkgPSBcImVudml2ZS1jb2xvcnMtYmFja2dyb3VuZC1wcmltYXJ5XCIsXG4gICAgQmFja2dyb3VuZFNlY29uZGFyeSA9IFwiZW52aXZlLWNvbG9ycy1iYWNrZ3JvdW5kLXNlY29uZGFyeVwiLFxuICAgIEJhY2tncm91bmRUZXJ0aWFyeSA9IFwiZW52aXZlLWNvbG9ycy1iYWNrZ3JvdW5kLXRlcnRpYXJ5XCIsXG4gICAgQmFja2dyb3VuZERhcmsgPSBcImVudml2ZS1jb2xvcnMtYmFja2dyb3VuZC1kYXJrXCIsXG4gICAgQmFja2dyb3VuZExpZ2h0ID0gXCJlbnZpdmUtY29sb3JzLWJhY2tncm91bmQtbGlnaHRcIixcbiAgICBCb3JkZXJMaWdodCA9IFwiZW52aXZlLWNvbG9ycy1ib3JkZXItbGlnaHRcIixcbiAgICBCb3JkZXJNZWRpdW0gPSBcImVudml2ZS1jb2xvcnMtYm9yZGVyLW1lZGl1bVwiLFxuICAgIEJvcmRlckRhcmsgPSBcImVudml2ZS1jb2xvcnMtYm9yZGVyLWRhcmtcIixcbiAgICBBY2NlbnRQcmltYXJ5ID0gXCJlbnZpdmUtY29sb3JzLWFjY2VudC1wcmltYXJ5XCIsXG4gICAgQWNjZW50U2Vjb25kYXJ5ID0gXCJlbnZpdmUtY29sb3JzLWFjY2VudC1zZWNvbmRhcnlcIlxufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgZW51bSBCdXR0b25Db2xvcnNWYXJzIHtcbiAgICBMaWdodEJ1dHRvbkJhY2tncm91bmRDb2xvciA9IFwiZW52aXZlLWNvbG9ycy1idXR0b24tbGlnaHQtYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIExpZ2h0QnV0dG9uQm9yZGVyQ29sb3IgPSBcImVudml2ZS1jb2xvcnMtYnV0dG9uLWxpZ2h0LWJvcmRlci1jb2xvclwiLFxuICAgIExpZ2h0QnV0dG9uSWNvbkNvbG9yID0gXCJlbnZpdmUtY29sb3JzLWJ1dHRvbi1saWdodC1pY29uLWNvbG9yXCIsXG4gICAgRGFya0J1dHRvbkJhY2tncm91bmRDb2xvciA9IFwiZW52aXZlLWNvbG9ycy1idXR0b24tZGFyay1iYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgRGFya0J1dHRvbkljb25Db2xvciA9IFwiZW52aXZlLWNvbG9ycy1idXR0b24tZGFyay1pY29uLWNvbG9yXCJcbn1cbnR5cGUgSW1hZ2VBc3BlY3RSYXRpbyA9ICcxLzEnIHwgJzMvNCc7XG50eXBlIEFkZFRvQ2FydENvbmZpZyA9IHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICB0ZXh0Q29sb3I/OiBzdHJpbmc7XG4gICAgY3RhVGV4dD86IHN0cmluZztcbiAgICBhZGRUb0NhcnRGdW5jdGlvbj86IHN0cmluZztcbn07XG50eXBlIEJ1dHRvbkNvbG9ycyA9IHtcbiAgICBsaWdodEJ1dHRvbkJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIGxpZ2h0QnV0dG9uQm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gICAgbGlnaHRCdXR0b25JY29uQ29sb3I6IHN0cmluZztcbiAgICBkYXJrQnV0dG9uQmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gICAgZGFya0J1dHRvbkljb25Db2xvcjogc3RyaW5nO1xufTtcbnR5cGUgVHlwb2dyYXBoeSA9IHtcbiAgICB0aXRsZUZvbnRGYW1pbHk6IHN0cmluZztcbiAgICBoZWFkZXJGb250RmFtaWx5OiBzdHJpbmc7XG4gICAgYm9keUZvbnRGYW1pbHk6IHN0cmluZztcbiAgICBmb250U2l6ZT86IHtcbiAgICAgICAgdDE6IHN0cmluZztcbiAgICAgICAgdDI6IHN0cmluZztcbiAgICAgICAgdDM6IHN0cmluZztcbiAgICAgICAgaDE6IHN0cmluZztcbiAgICAgICAgaDI6IHN0cmluZztcbiAgICAgICAgaDM6IHN0cmluZztcbiAgICAgICAgYjE6IHN0cmluZztcbiAgICAgICAgYjI6IHN0cmluZztcbiAgICAgICAgYjM6IHN0cmluZztcbiAgICAgICAgYjQ6IHN0cmluZztcbiAgICAgICAgYjU6IHN0cmluZztcbiAgICAgICAgbDE6IHN0cmluZztcbiAgICAgICAgbDI6IHN0cmluZztcbiAgICB9O1xuICAgIGZvbnRXZWlnaHQ/OiB7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGhlYWRlcjogc3RyaW5nO1xuICAgICAgICBib2R5RW1waGFzaXM6IHN0cmluZztcbiAgICAgICAgYm9keVN0YW5kYXJkOiBzdHJpbmc7XG4gICAgfTtcbiAgICBsZXR0ZXJTcGFjaW5nPzoge1xuICAgICAgICB0MTogc3RyaW5nO1xuICAgICAgICB0Mjogc3RyaW5nO1xuICAgICAgICB0Mzogc3RyaW5nO1xuICAgICAgICBoMTogc3RyaW5nO1xuICAgICAgICBoMjogc3RyaW5nO1xuICAgICAgICBoMzogc3RyaW5nO1xuICAgICAgICBiMTogc3RyaW5nO1xuICAgICAgICBiMjogc3RyaW5nO1xuICAgICAgICBiMzogc3RyaW5nO1xuICAgICAgICBiNDogc3RyaW5nO1xuICAgICAgICBiNTogc3RyaW5nO1xuICAgICAgICBsMTogc3RyaW5nO1xuICAgICAgICBsMjogc3RyaW5nO1xuICAgIH07XG4gICAgbGluZUhlaWdodD86IHtcbiAgICAgICAgdDE6IG51bWJlcjtcbiAgICAgICAgdDI6IG51bWJlcjtcbiAgICAgICAgdDM6IG51bWJlcjtcbiAgICAgICAgaDE6IG51bWJlcjtcbiAgICAgICAgaDI6IG51bWJlcjtcbiAgICAgICAgaDM6IG51bWJlcjtcbiAgICAgICAgYjE6IG51bWJlcjtcbiAgICAgICAgYjI6IG51bWJlcjtcbiAgICAgICAgYjM6IG51bWJlcjtcbiAgICAgICAgYjQ6IG51bWJlcjtcbiAgICAgICAgYjU6IG51bWJlcjtcbiAgICAgICAgbDE6IG51bWJlcjtcbiAgICAgICAgbDI6IG51bWJlcjtcbiAgICB9O1xufTtcbnR5cGUgTG9va0FuZEZlZWxDb25maWcgPSB7XG4gICAgdGhlbWU6IFRoZW1lO1xuICAgIGFnZW50TmFtZTogc3RyaW5nO1xuICAgIGNoYXRIZWFkZXJMb2dvRGFya1NyYzogc3RyaW5nO1xuICAgIGNoYXRIZWFkZXJMb2dvTGlnaHRTcmM6IHN0cmluZztcbiAgICB3aWRnZXRMb2dvU3JjOiBzdHJpbmc7XG4gICAgaGlkZVdpZGdldExvZ286IGJvb2xlYW47XG4gICAgdm9pY2VJbnB1dEVuYWJsZWQ/OiBib29sZWFuO1xuICAgIGVsZW1lbnRSYWRpdXM6IG51bWJlcjtcbiAgICBpbWFnZUFzcGVjdFJhdGlvOiBJbWFnZUFzcGVjdFJhdGlvO1xuICAgIGJ1dHRvbkNvbG9yczogQnV0dG9uQ29sb3JzO1xuICAgIHR5cG9ncmFwaHk6IFR5cG9ncmFwaHk7XG4gICAgYWRkVG9DYXJ0PzogQWRkVG9DYXJ0Q29uZmlnO1xufTtcbmV4cG9ydCBkZWNsYXJlIGVudW0gQ29uZmlnVmVyc2lvbkVudW0ge1xuICAgIFYzID0gXCJ2M1wiLFxuICAgIERlcHJlY2F0ZWQgPSBcImRlcHJlY2F0ZWRcIlxufVxudHlwZSBDb25maWdWZXJzaW9uID0gQ29uZmlnVmVyc2lvbkVudW0uVjMgfCBDb25maWdWZXJzaW9uRW51bS5EZXByZWNhdGVkIHwgdW5kZWZpbmVkO1xudHlwZSBNb2RlID0gJ2RhcmsnIHwgJ2xpZ2h0JztcbnR5cGUgU2hvd09wdGlvbnMgPSAnYWx3YXlzJyB8ICdwb3N0SW50ZXJhY3Rpb24nIHwgJ25vbmUnO1xudHlwZSBTdHlsZSA9ICdhdHRhY2hlZCcgfCAnZGV0YWNoZWQnO1xudHlwZSBGbG9hdGluZ0J1dHRvbkNvbmZpZyA9IHtcbiAgICBwb3NpdGlvbjogRmxvYXRpbmdCdXR0b25Mb2NhdGlvbjtcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgbW9kZTogTW9kZTtcbiAgICBzaG93T3B0aW9uOiBTaG93T3B0aW9ucztcbiAgICBpY29uU1ZHU3JjPzogc3RyaW5nO1xuICAgIHN0eWxlOiBTdHlsZTtcbn07XG5leHBvcnQgdHlwZSBSZWZlcnJlclBvcHVwVHJpZ2dlciA9IHtcbiAgICB0eXBlOiAncmVmZXJyZXInO1xuICAgIHJlZmVycmVyczogc3RyaW5nW107XG59O1xuZXhwb3J0IHR5cGUgQXV0b21hdGljUG9wdXBUcmlnZ2VyID0ge1xuICAgIHR5cGU6ICdhdXRvbWF0aWMnO1xufTtcbmV4cG9ydCB0eXBlIFBvcHVwVHJpZ2dlciA9IFJlZmVycmVyUG9wdXBUcmlnZ2VyIHwgQXV0b21hdGljUG9wdXBUcmlnZ2VyO1xuZXhwb3J0IHR5cGUgQXV0b1BvcHVwVHJpZ2dlciA9IHtcbiAgICBkZWxheTogbnVtYmVyO1xuICAgIHRyaWdnZXI6IFBvcHVwVHJpZ2dlcjtcbn07XG5leHBvcnQgaW50ZXJmYWNlIEF1dG9Qb3B1cENvbmZpZyB7XG4gICAgdHJpZ2dlcnM6IEF1dG9Qb3B1cFRyaWdnZXJbXTtcbn1cbnR5cGUgRmxvYXRpbmdDaGF0Q29uZmlnID0ge1xuICAgIGhlYWRlckJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICBoZWFkZXJNb2RlOiBNb2RlO1xuICAgIHdlbGNvbWVNZXNzYWdlSWNvbkNvbG9yOiBTcGFya2xlSWNvbkNvbG9yO1xuICAgIHNob3dWZXJpZmllZEJ1eWVyOiBib29sZWFuO1xuICAgIHVzZXJRdWVyeUlucHV0RW5hYmxlZDogYm9vbGVhbjtcbiAgICBzaG93RW52aXZlTG9nbzogYm9vbGVhbjtcbiAgICBpZ25vcmVGaXJzdE1vZGVsUmVzcG9uc2U/OiBib29sZWFuO1xuICAgIG5ldmVyU2hvd1NpbmdsZVByb2R1Y3RDYXJkcz86IGJvb2xlYW47XG4gICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogc3RyaW5nO1xuICAgIHdlbGNvbWVNZXNzYWdlVGV4dDogc3RyaW5nO1xuICAgIGNoYXRGb290ZXJUZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6IHN0cmluZztcbiAgICBhdXRvUG9wdXBDb25maWc/OiBBdXRvUG9wdXBDb25maWc7XG59O1xudHlwZSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbiA9IHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIHByb3ZpZGVyOiBDdXN0b21lclNlcnZpY2VUeXBlO1xuICAgIHN1cHByZXNzTWVyY2hhbnRCdXR0b24/OiBib29sZWFuO1xufTtcbnR5cGUgU1BBU2V0dGluZ3MgPSB7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICByZWZyZXNoSW50ZXJ2YWw/OiBudW1iZXI7XG59O1xudHlwZSBPcmdVSUNvbmZpZ1YzID0ge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIHZlcnNpb246IENvbmZpZ1ZlcnNpb247XG4gICAgc2hvcnROYW1lOiBzdHJpbmc7XG4gICAgbG9va0FuZEZlZWw6IExvb2tBbmRGZWVsQ29uZmlnO1xuICAgIGZsb2F0aW5nQnV0dG9uOiBGbG9hdGluZ0J1dHRvbkNvbmZpZztcbiAgICBmbG9hdGluZ0NoYXQ6IEZsb2F0aW5nQ2hhdENvbmZpZztcbiAgICBtZXJjaGFudE92ZXJyaWRlQ3NzPzogc3RyaW5nO1xuICAgIGN1c3RvbWVyU2VydmljZUludGVncmF0aW9uPzogQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb247XG4gICAgc2luZ2xlUGFnZUFwcGxpY2F0aW9uU2V0dGluZ3M/OiBTUEFTZXR0aW5ncztcbiAgICBzZWFyY2hDb25maWc/OiBTZWFyY2hDb25maWc7XG59O1xuZXhwb3J0IGRlY2xhcmUgZW51bSBXaWRnZXRUeXBlVjMge1xuICAgIFByb21wdENhcm91c2VsVjMgPSBcIlByb21wdENhcm91c2VsVjNcIixcbiAgICBUaXRsZWRQcm9tcHRDYXJvdXNlbFYzID0gXCJUaXRsZWRQcm9tcHRDYXJvdXNlbFYzXCIsXG4gICAgU29jaWFsUHJvb2ZWMyA9IFwiU29jaWFsUHJvb2ZWM1wiLFxuICAgIFR5cGluZ0FuaW1hdGlvblYzID0gXCJUeXBpbmdBbmltYXRpb25WM1wiLFxuICAgIENoYXRQcmV2aWV3VjMgPSBcIkNoYXRQcmV2aWV3VjNcIixcbiAgICBDaGF0UHJldmlld0NvbXBhcmlzb25WMyA9IFwiQ2hhdFByZXZpZXdDb21wYXJpc29uVjNcIixcbiAgICBDaGF0UHJldmlld0xvYWRpbmdWMyA9IFwiQ2hhdFByZXZpZXdMb2FkaW5nVjNcIixcbiAgICBJbWFnZVByb21wdENhcmRWMyA9IFwiSW1hZ2VQcm9tcHRDYXJkVjNcIixcbiAgICBQcm9tcHRCdXR0b25DYXJvdXNlbFdpdGhJbWFnZVYzID0gXCJQcm9tcHRCdXR0b25DYXJvdXNlbFdpdGhJbWFnZVYzXCIsXG4gICAgSW1hZ2VCYW5uZXJWMyA9IFwiSW1hZ2VCYW5uZXJWM1wiLFxuICAgIFNpbmdsZUltYWdlUHJvbXB0VjMgPSBcIlNpbmdsZUltYWdlUHJvbXB0VjNcIixcbiAgICBGbG9hdGluZ0NoYXRWMyA9IFwiRmxvYXRpbmdDaGF0VjNcIixcbiAgICBGbG9hdGluZ0J1dHRvblYzID0gXCJGbG9hdGluZ0J1dHRvblYzXCIsXG4gICAgUHJvZHVjdENhcmRWMyA9IFwiUHJvZHVjdENhcmRWM1wiLFxuICAgIEZ1bGxQYWdlU2FsZXNBZ2VudFYzID0gXCJGdWxsUGFnZVNhbGVzQWdlbnRWM1wiXG59XG5pbnRlcmZhY2UgQmFzZVdpZGdldENvbmZpZzxUIGV4dGVuZHMgV2lkZ2V0VHlwZVYzPiB7XG4gICAgd2lkZ2V0Q29uZmlnSWQ6IHN0cmluZztcbiAgICB0eXBlOiBUO1xuICAgIGNvbnRlbnRJZD86IHN0cmluZztcbn1cbmludGVyZmFjZSBQcm9tcHRDYXJvdXNlbFdpZGdldFYzQ29uZmlnIGV4dGVuZHMgQmFzZVdpZGdldENvbmZpZzxXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWMz4ge1xuICAgIHByb21wdEJ1dHRvblR5cGU/OiBQcm9tcHRCdXR0b25WYXJpYW50O1xuICAgIGJvbGRGaXJzdEJ1dHRvbj86IGJvb2xlYW47XG4gICAgcHJvbXB0Q2Fyb3VzZWxSb3dzPzogUHJvbXB0Q2Fyb3VzZWxSb3dzO1xuICAgIGFuaW1hdGlvblNwZWVkPzogQW5pbWF0aW9uU3BlZWQ7XG59XG5pbnRlcmZhY2UgVGl0bGVkUHJvbXB0Q2Fyb3VzZWxXaWRnZXRWM0NvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZVYzLlRpdGxlZFByb21wdENhcm91c2VsVjM+IHtcbiAgICBwcm9tcHRCdXR0b25UeXBlPzogUHJvbXB0QnV0dG9uVmFyaWFudDtcbiAgICBib2xkRmlyc3RCdXR0b24/OiBib29sZWFuO1xuICAgIHByb21wdENhcm91c2VsUm93cz86IFByb21wdENhcm91c2VsUm93cztcbiAgICBhbmltYXRpb25TcGVlZD86IEFuaW1hdGlvblNwZWVkO1xufVxuaW50ZXJmYWNlIFNvY2lhbFByb29mV2lkZ2V0VjNDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGVWMy5Tb2NpYWxQcm9vZlYzPiB7XG4gICAga2luZDogV2lkZ2V0S2luZDtcbiAgICB2YXJpYW50OiBXaWRnZXRXcmFwcGVyVmFyaWFudDtcbiAgICBoZXhDYXJkQ29sb3I/OiBzdHJpbmc7XG4gICAgcHJvbXB0Q2Fyb3VzZWxSb3dzOiBQcm9tcHRDYXJvdXNlbFJvd3M7XG4gICAgaGlkZUltYWdlPzogYm9vbGVhbjtcbiAgICBpbWFnZUdhbGxlcnlMYXlvdXQ6IEV4Y2x1ZGU8SW1hZ2VHYWxsZXJ5TGF5b3V0LCAnVFdPX1NJREUnPjtcbiAgICBoaWRlVGV4dEZpZWxkPzogYm9vbGVhbjtcbiAgICBwcmltYXJ5QnV0dG9uVmFyaWFudDogRXhjbHVkZTxQcm9tcHRCdXR0b25WYXJpYW50LCAnc3VnZ2VzdGVkUmVzcG9uc2UnIHwgJ2dob3N0Jz47XG4gICAgc2Vjb25kYXJ5QnV0dG9uVmFyaWFudDogRXhjbHVkZTxQcm9tcHRCdXR0b25WYXJpYW50LCAnc3VnZ2VzdGVkUmVzcG9uc2UnIHwgJ2dob3N0Jz47XG4gICAgZHluYW1pY0xheW91dD86IER5bmFtaWNMYXlvdXQ7XG4gICAgaW1hZ2VzPzogSW1hZ2VHYWxsZXJ5SW1hZ2VbXTtcbn1cbmludGVyZmFjZSBUeXBpbmdBbmltYXRpb25XaWRnZXRWM0NvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZVYzLlR5cGluZ0FuaW1hdGlvblYzPiB7XG4gICAgd2lkZ2V0VmFyaWFudD86IFdpZGdldFdyYXBwZXJWYXJpYW50O1xuICAgIGNhcmRDb2xvcj86IHN0cmluZztcbiAgICBwcm9tcHRCdXR0b25UeXBlPzogUHJvbXB0QnV0dG9uVmFyaWFudDtcbiAgICBwcm9tcHRDYXJvdXNlbFJvd3M/OiBQcm9tcHRDYXJvdXNlbFJvd3M7XG4gICAgc2hvd1RleHRGaWVsZD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdDb21wYXJpc29uV2lkZ2V0VjNDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGVWMy5DaGF0UHJldmlld0NvbXBhcmlzb25WMz4ge1xuICAgIHZhcmlhbnQ6IFdpZGdldFdyYXBwZXJWYXJpYW50O1xuICAgIGhleENhcmRDb2xvcj86IHN0cmluZztcbiAgICBoaWRlSW1hZ2U/OiBib29sZWFuO1xuICAgIGhpZGVUZXh0RmllbGQ/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIENoYXRQcmV2aWV3TG9hZGluZ1dpZGdldFYzQ29uZmlnIGV4dGVuZHMgQmFzZVdpZGdldENvbmZpZzxXaWRnZXRUeXBlVjMuQ2hhdFByZXZpZXdMb2FkaW5nVjM+IHtcbiAgICB2YXJpYW50OiBXaWRnZXRXcmFwcGVyVmFyaWFudDtcbiAgICBoZXhDYXJkQ29sb3I/OiBzdHJpbmc7XG4gICAgaGlkZVRleHRGaWVsZD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdXaWRnZXRWM0NvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3VjM+IHtcbiAgICB2YXJpYW50OiBXaWRnZXRXcmFwcGVyVmFyaWFudDtcbiAgICBoZXhDYXJkQ29sb3I/OiBzdHJpbmc7XG4gICAgaGlkZVRleHRGaWVsZD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgUHJvbXB0QnV0dG9uQ2Fyb3VzZWxXaXRoSW1hZ2VXaWRnZXRWM0NvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZVYzLlByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlVjM+IHtcbiAgICBwcm9tcHRCdXR0b25UeXBlPzogUHJvbXB0QnV0dG9uVmFyaWFudDtcbiAgICBpbWFnZT86IEltYWdlR2FsbGVyeUltYWdlO1xuICAgIGhpZGVUZXh0RmllbGQ/OiBib29sZWFuO1xuICAgIGlzRHluYW1pYz86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgRmxvYXRpbmdDaGF0V2lkZ2V0VjNDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGVWMy5GbG9hdGluZ0NoYXRWMz4ge1xufVxuaW50ZXJmYWNlIFByb2R1Y3RDYXJkV2lkZ2V0VjNDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGVWMy5Qcm9kdWN0Q2FyZFYzPiB7XG4gICAgcHJvbXB0QnV0dG9uVHlwZT86IFByb21wdEJ1dHRvblZhcmlhbnQ7XG4gICAgaXRhbGljaXplSGVhZGxpbmU/OiBib29sZWFuO1xuICAgIGZhbGxiYWNrQ29sb3I/OiBzdHJpbmc7XG4gICAgaW1hZ2VTcmM/OiBzdHJpbmc7XG4gICAgbW9kZT86IE1vZGU7XG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIFByb2R1Y3RDYXJvdXNlbExheW91dFYzIHtcbiAgICBIT1JJWk9OVEFMID0gXCJob3Jpem9udGFsXCIsXG4gICAgR1JJRCA9IFwiZ3JpZFwiLFxuICAgIC8qKiBHcmlkIG9uIG1vYmlsZSwgaG9yaXpvbnRhbCBjYXJvdXNlbCBvbiBkZXNrdG9wLiAqL1xuICAgIEdSSURfTU9CSUxFX0hPUklaT05UQUxfREVTS1RPUCA9IFwiZ3JpZC1tb2JpbGUtaG9yaXpvbnRhbC1kZXNrdG9wXCJcbn1cbmludGVyZmFjZSBGdWxsUGFnZVNhbGVzQWdlbnRXaWRnZXRWM0NvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZVYzLkZ1bGxQYWdlU2FsZXNBZ2VudFYzPiB7XG4gICAgaGVhZGVyQ29udGFpbmVyPzogc3RyaW5nO1xuICAgIGF1dG9IZWlnaHQ/OiBib29sZWFuO1xuICAgIHNwYXJrbGVDb2xvcj86IHN0cmluZztcbiAgICB1c2VCYWNrZ3JvdW5kSW1hZ2U/OiBib29sZWFuO1xuICAgIG1vYmlsZUJhY2tncm91bmRJbWFnZT86IHN0cmluZztcbiAgICBkZXNrdG9wQmFja2dyb3VuZEltYWdlPzogc3RyaW5nO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICBjaGF0QmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25UeXBlPzogUHJvbXB0QnV0dG9uVmFyaWFudDtcbiAgICBwcm9kdWN0Q2Fyb3VzZWxMYXlvdXQ/OiBQcm9kdWN0Q2Fyb3VzZWxMYXlvdXRWMztcbn1cbnR5cGUgV2lkZ2V0Q29uZmlnVjMgPSBQcm9tcHRDYXJvdXNlbFdpZGdldFYzQ29uZmlnIHwgU29jaWFsUHJvb2ZXaWRnZXRWM0NvbmZpZyB8IFRpdGxlZFByb21wdENhcm91c2VsV2lkZ2V0VjNDb25maWcgfCBDaGF0UHJldmlld0NvbXBhcmlzb25XaWRnZXRWM0NvbmZpZyB8IENoYXRQcmV2aWV3TG9hZGluZ1dpZGdldFYzQ29uZmlnIHwgVHlwaW5nQW5pbWF0aW9uV2lkZ2V0VjNDb25maWcgfCBDaGF0UHJldmlld1dpZGdldFYzQ29uZmlnIHwgUHJvbXB0QnV0dG9uQ2Fyb3VzZWxXaXRoSW1hZ2VXaWRnZXRWM0NvbmZpZyB8IEZsb2F0aW5nQ2hhdFdpZGdldFYzQ29uZmlnIHwgUHJvZHVjdENhcmRXaWRnZXRWM0NvbmZpZyB8IEZ1bGxQYWdlU2FsZXNBZ2VudFdpZGdldFYzQ29uZmlnO1xuZXhwb3J0IHR5cGUgeyBBZGRUb0NhcnRDb25maWcsIENoYXRQcmV2aWV3Q29tcGFyaXNvbldpZGdldFYzQ29uZmlnLCBDaGF0UHJldmlld0xvYWRpbmdXaWRnZXRWM0NvbmZpZywgQ2hhdFByZXZpZXdXaWRnZXRWM0NvbmZpZywgQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24sIEZsb2F0aW5nQnV0dG9uQ29uZmlnLCBGbG9hdGluZ0NoYXRDb25maWcsIEZsb2F0aW5nQ2hhdFdpZGdldFYzQ29uZmlnLCBGdWxsUGFnZVNhbGVzQWdlbnRXaWRnZXRWM0NvbmZpZywgTG9va0FuZEZlZWxDb25maWcsIE9yZ1VJQ29uZmlnVjMsIFByb2R1Y3RDYXJkV2lkZ2V0VjNDb25maWcsIFByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlV2lkZ2V0VjNDb25maWcsIFByb21wdENhcm91c2VsV2lkZ2V0VjNDb25maWcsIFNvY2lhbFByb29mV2lkZ2V0VjNDb25maWcsIFNQQVNldHRpbmdzLCBUaXRsZWRQcm9tcHRDYXJvdXNlbFdpZGdldFYzQ29uZmlnLCBUeXBpbmdBbmltYXRpb25XaWRnZXRWM0NvbmZpZywgV2lkZ2V0Q29uZmlnVjMsIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVVBLElBQVcsc0JBQXNCLENBQUMsSUFBSTtBQUN0QyxJQUFXLG1CQUFtQixDQUFDLElBQUk7QUFDbkMsSUFBVyxtQkFBbUIsQ0FBQyxJQUFJO0FBQ25DLElBQVcsaUJBQWlCLENBQUMsSUFBSTtBQUNqQyxJQUFXLG1CQUFtQixDQUFDLElBQUk7QUFDbkMsSUFBVyxjQUFjLENBQUMsSUFBSTtBQUM5QixJQUFXLG9CQUFvQixDQUFDLElBQUk7QUFDcEMsSUFB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
358
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNWMy5kLnRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0cy90eXBlc1YzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmxvYXRpbmdCdXR0b25Mb2NhdGlvbiB9IGZyb20gJ0BlbnZpdmUtYWkvcmVhY3QtdG9vbGtpdC12My9GbG9hdGluZ0J1dHRvbic7XG5pbXBvcnQgeyBJbWFnZUdhbGxlcnlJbWFnZSwgSW1hZ2VHYWxsZXJ5TGF5b3V0IH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL0ltYWdlR2FsbGVyeSc7XG5pbXBvcnQgeyBQcm9tcHRCdXR0b25WYXJpYW50IH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL1Byb21wdEJ1dHRvbic7XG5pbXBvcnQgeyBBbmltYXRpb25TcGVlZCwgUHJvbXB0Q2Fyb3VzZWxSb3dzIH0gZnJvbSAnQGVudml2ZS1haS9yZWFjdC10b29sa2l0LXYzL1Byb21wdENhcm91c2VsJztcbmltcG9ydCB7IER5bmFtaWNMYXlvdXQsIFdpZGdldEtpbmQgfSBmcm9tICdAZW52aXZlLWFpL3JlYWN0LXRvb2xraXQtdjMvU29jaWFsUHJvb2YnO1xuaW1wb3J0IHsgVGhlbWUgfSBmcm9tICdAZW52aXZlLWFpL3JlYWN0LXRvb2xraXQtdjMvVG9rZW5zJztcbmltcG9ydCB7IFNwYXJrbGVJY29uQ29sb3IgfSBmcm9tICdAZW52aXZlLWFpL3JlYWN0LXRvb2xraXQtdjMvV2VsY29tZU1lc3NhZ2UnO1xuaW1wb3J0IHsgV2lkZ2V0V3JhcHBlclZhcmlhbnQgfSBmcm9tICdAZW52aXZlLWFpL3JlYWN0LXRvb2xraXQtdjMvV2lkZ2V0V3JhcHBlcic7XG5pbXBvcnQgeyBDdXN0b21lclNlcnZpY2VUeXBlIH0gZnJvbSAnLi4vdHlwZXMvY3VzdG9tZXJTZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgU2VhcmNoQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgZGVjbGFyZSBlbnVtIExldHRlclNwYWNpbmdDU1NWYXIge1xuICAgIFQxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy10MVwiLFxuICAgIFQyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy10MlwiLFxuICAgIFQzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy10M1wiLFxuICAgIEgxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1oMVwiLFxuICAgIEgyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1oMlwiLFxuICAgIEgzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1oM1wiLFxuICAgIEIxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1iMVwiLFxuICAgIEIyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1iMlwiLFxuICAgIEIzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1iM1wiLFxuICAgIEI0ID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1iNFwiLFxuICAgIEI1ID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1iNVwiLFxuICAgIEwxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1sMVwiLFxuICAgIEwyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1sZXR0ZXItc3BhY2luZy1sMlwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIExpbmVIZWlnaHRDU1NWYXIge1xuICAgIFQxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC10MVwiLFxuICAgIFQyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC10MlwiLFxuICAgIFQzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC10M1wiLFxuICAgIEgxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1oMVwiLFxuICAgIEgyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1oMlwiLFxuICAgIEgzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1oM1wiLFxuICAgIEIxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1iMVwiLFxuICAgIEIyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1iMlwiLFxuICAgIEIzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1iM1wiLFxuICAgIEI0ID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1iNFwiLFxuICAgIEI1ID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1iNVwiLFxuICAgIEwxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1sMVwiLFxuICAgIEwyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1saW5lLWhlaWdodC1sMlwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIEZvbnRXZWlnaHRDU1NWYXIge1xuICAgIFRpdGxlID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXdlaWdodC10aXRsZVwiLFxuICAgIEhlYWRlciA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtaGVhZGVyXCIsXG4gICAgQm9keUVtcGhhc2lzID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2R5LWVtcGhhc2lzXCIsXG4gICAgQm9keVN0YW5kYXJkID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2R5LXN0YW5kYXJkXCJcbn1cbmV4cG9ydCBkZWNsYXJlIGVudW0gRm9udFNpemVDU1NWYXIge1xuICAgIFQxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXNpemUtdDFcIixcbiAgICBUMiA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC1zaXplLXQyXCIsXG4gICAgVDMgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtc2l6ZS10M1wiLFxuICAgIEgxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXNpemUtaDFcIixcbiAgICBIMiA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC1zaXplLWgyXCIsXG4gICAgSDMgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtc2l6ZS1oM1wiLFxuICAgIEIxID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXNpemUtYjFcIixcbiAgICBCMiA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC1zaXplLWIyXCIsXG4gICAgQjMgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtc2l6ZS1iM1wiLFxuICAgIEI0ID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXNpemUtYjRcIixcbiAgICBCNSA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC1zaXplLWI1XCIsXG4gICAgTDEgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtc2l6ZS1sMVwiLFxuICAgIEwyID0gXCJlbnZpdmUtdHlwb2dyYXBoeS1mb250LXNpemUtbDJcIlxufVxuZXhwb3J0IGRlY2xhcmUgZW51bSBGb250RmFtaWx5Q1NTVmFyIHtcbiAgICBUaXRsZSA9IFwiZW52aXZlLXR5cG9ncmFwaHktZm9udC1mYW1pbHktdGl0bGVcIixcbiAgICBIZWFkZXIgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LWhlYWRlclwiLFxuICAgIEJvZHkgPSBcImVudml2ZS10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LWJvZHlcIlxufVxuZXhwb3J0IGRlY2xhcmUgZW51bSBUaGVtZUNTU1ZhciB7XG4gICAgR2xvYmFsQ3VzdG9tID0gXCJlbnZpdmUtZ2xvYmFsLWN1c3RvbS10aGVtZVwiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIEFzcGVjdFJhdGlvQ1NTVmFyIHtcbiAgICBHbG9iYWxDdXN0b20gPSBcImVudml2ZS1nbG9iYWwtY3VzdG9tLWFzcGVjdC1yYXRpb1wiXG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIEJvcmRlclJhZGl1c0NTU1ZhciB7XG4gICAgR2xvYmFsQ3VzdG9tID0gXCJlbnZpdmUtZ2xvYmFsLWN1c3RvbS1ib3JkZXItcmFkaXVzXCJcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGVudW0gQ29sb3JzTmFtZXNWYXJzIHtcbiAgICBUZXh0UHJpbWFyeSA9IFwiZW52aXZlLWNvbG9ycy10ZXh0LXByaW1hcnlcIixcbiAgICBUZXh0U2Vjb25kYXJ5ID0gXCJlbnZpdmUtY29sb3JzLXRleHQtc2Vjb25kYXJ5XCIsXG4gICAgVGV4dEFjY2VudCA9IFwiZW52aXZlLWNvbG9ycy10ZXh0LWFjY2VudFwiLFxuICAgIFRleHRMaW5rID0gXCJlbnZpdmUtY29sb3JzLXRleHQtbGlua1wiLFxuICAgIFRleHRMaWdodCA9IFwiZW52aXZlLWNvbG9ycy10ZXh0LWxpZ2h0XCIsXG4gICAgQmFja2dyb3VuZFByaW1hcnkgPSBcImVudml2ZS1jb2xvcnMtYmFja2dyb3VuZC1wcmltYXJ5XCIsXG4gICAgQmFja2dyb3VuZFNlY29uZGFyeSA9IFwiZW52aXZlLWNvbG9ycy1iYWNrZ3JvdW5kLXNlY29uZGFyeVwiLFxuICAgIEJhY2tncm91bmRUZXJ0aWFyeSA9IFwiZW52aXZlLWNvbG9ycy1iYWNrZ3JvdW5kLXRlcnRpYXJ5XCIsXG4gICAgQmFja2dyb3VuZERhcmsgPSBcImVudml2ZS1jb2xvcnMtYmFja2dyb3VuZC1kYXJrXCIsXG4gICAgQmFja2dyb3VuZExpZ2h0ID0gXCJlbnZpdmUtY29sb3JzLWJhY2tncm91bmQtbGlnaHRcIixcbiAgICBCb3JkZXJMaWdodCA9IFwiZW52aXZlLWNvbG9ycy1ib3JkZXItbGlnaHRcIixcbiAgICBCb3JkZXJNZWRpdW0gPSBcImVudml2ZS1jb2xvcnMtYm9yZGVyLW1lZGl1bVwiLFxuICAgIEJvcmRlckRhcmsgPSBcImVudml2ZS1jb2xvcnMtYm9yZGVyLWRhcmtcIixcbiAgICBBY2NlbnRQcmltYXJ5ID0gXCJlbnZpdmUtY29sb3JzLWFjY2VudC1wcmltYXJ5XCIsXG4gICAgQWNjZW50U2Vjb25kYXJ5ID0gXCJlbnZpdmUtY29sb3JzLWFjY2VudC1zZWNvbmRhcnlcIlxufVxuZXhwb3J0IGRlY2xhcmUgY29uc3QgZW51bSBCdXR0b25Db2xvcnNWYXJzIHtcbiAgICBMaWdodEJ1dHRvbkJhY2tncm91bmRDb2xvciA9IFwiZW52aXZlLWNvbG9ycy1idXR0b24tbGlnaHQtYmFja2dyb3VuZC1jb2xvclwiLFxuICAgIExpZ2h0QnV0dG9uQm9yZGVyQ29sb3IgPSBcImVudml2ZS1jb2xvcnMtYnV0dG9uLWxpZ2h0LWJvcmRlci1jb2xvclwiLFxuICAgIExpZ2h0QnV0dG9uSWNvbkNvbG9yID0gXCJlbnZpdmUtY29sb3JzLWJ1dHRvbi1saWdodC1pY29uLWNvbG9yXCIsXG4gICAgRGFya0J1dHRvbkJhY2tncm91bmRDb2xvciA9IFwiZW52aXZlLWNvbG9ycy1idXR0b24tZGFyay1iYWNrZ3JvdW5kLWNvbG9yXCIsXG4gICAgRGFya0J1dHRvbkljb25Db2xvciA9IFwiZW52aXZlLWNvbG9ycy1idXR0b24tZGFyay1pY29uLWNvbG9yXCJcbn1cbnR5cGUgSW1hZ2VBc3BlY3RSYXRpbyA9ICcxLzEnIHwgJzMvNCc7XG50eXBlIEFkZFRvQ2FydENvbmZpZyA9IHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICB0ZXh0Q29sb3I/OiBzdHJpbmc7XG4gICAgY3RhVGV4dD86IHN0cmluZztcbiAgICBhZGRUb0NhcnRGdW5jdGlvbj86IHN0cmluZztcbn07XG50eXBlIEJ1dHRvbkNvbG9ycyA9IHtcbiAgICBsaWdodEJ1dHRvbkJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIGxpZ2h0QnV0dG9uQm9yZGVyQ29sb3I/OiBzdHJpbmc7XG4gICAgbGlnaHRCdXR0b25JY29uQ29sb3I6IHN0cmluZztcbiAgICBkYXJrQnV0dG9uQmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gICAgZGFya0J1dHRvbkljb25Db2xvcjogc3RyaW5nO1xufTtcbnR5cGUgVHlwb2dyYXBoeSA9IHtcbiAgICB0aXRsZUZvbnRGYW1pbHk6IHN0cmluZztcbiAgICBoZWFkZXJGb250RmFtaWx5OiBzdHJpbmc7XG4gICAgYm9keUZvbnRGYW1pbHk6IHN0cmluZztcbiAgICBmb250U2l6ZT86IHtcbiAgICAgICAgdDE6IHN0cmluZztcbiAgICAgICAgdDI6IHN0cmluZztcbiAgICAgICAgdDM6IHN0cmluZztcbiAgICAgICAgaDE6IHN0cmluZztcbiAgICAgICAgaDI6IHN0cmluZztcbiAgICAgICAgaDM6IHN0cmluZztcbiAgICAgICAgYjE6IHN0cmluZztcbiAgICAgICAgYjI6IHN0cmluZztcbiAgICAgICAgYjM6IHN0cmluZztcbiAgICAgICAgYjQ6IHN0cmluZztcbiAgICAgICAgYjU6IHN0cmluZztcbiAgICAgICAgbDE6IHN0cmluZztcbiAgICAgICAgbDI6IHN0cmluZztcbiAgICB9O1xuICAgIGZvbnRXZWlnaHQ/OiB7XG4gICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGhlYWRlcjogc3RyaW5nO1xuICAgICAgICBib2R5RW1waGFzaXM6IHN0cmluZztcbiAgICAgICAgYm9keVN0YW5kYXJkOiBzdHJpbmc7XG4gICAgfTtcbiAgICBsZXR0ZXJTcGFjaW5nPzoge1xuICAgICAgICB0MTogc3RyaW5nO1xuICAgICAgICB0Mjogc3RyaW5nO1xuICAgICAgICB0Mzogc3RyaW5nO1xuICAgICAgICBoMTogc3RyaW5nO1xuICAgICAgICBoMjogc3RyaW5nO1xuICAgICAgICBoMzogc3RyaW5nO1xuICAgICAgICBiMTogc3RyaW5nO1xuICAgICAgICBiMjogc3RyaW5nO1xuICAgICAgICBiMzogc3RyaW5nO1xuICAgICAgICBiNDogc3RyaW5nO1xuICAgICAgICBiNTogc3RyaW5nO1xuICAgICAgICBsMTogc3RyaW5nO1xuICAgICAgICBsMjogc3RyaW5nO1xuICAgIH07XG4gICAgbGluZUhlaWdodD86IHtcbiAgICAgICAgdDE6IG51bWJlcjtcbiAgICAgICAgdDI6IG51bWJlcjtcbiAgICAgICAgdDM6IG51bWJlcjtcbiAgICAgICAgaDE6IG51bWJlcjtcbiAgICAgICAgaDI6IG51bWJlcjtcbiAgICAgICAgaDM6IG51bWJlcjtcbiAgICAgICAgYjE6IG51bWJlcjtcbiAgICAgICAgYjI6IG51bWJlcjtcbiAgICAgICAgYjM6IG51bWJlcjtcbiAgICAgICAgYjQ6IG51bWJlcjtcbiAgICAgICAgYjU6IG51bWJlcjtcbiAgICAgICAgbDE6IG51bWJlcjtcbiAgICAgICAgbDI6IG51bWJlcjtcbiAgICB9O1xufTtcbnR5cGUgTG9va0FuZEZlZWxDb25maWcgPSB7XG4gICAgdGhlbWU6IFRoZW1lO1xuICAgIGFnZW50TmFtZTogc3RyaW5nO1xuICAgIGNoYXRIZWFkZXJMb2dvRGFya1NyYzogc3RyaW5nO1xuICAgIGNoYXRIZWFkZXJMb2dvTGlnaHRTcmM6IHN0cmluZztcbiAgICB3aWRnZXRMb2dvU3JjOiBzdHJpbmc7XG4gICAgaGlkZVdpZGdldExvZ286IGJvb2xlYW47XG4gICAgdm9pY2VJbnB1dEVuYWJsZWQ/OiBib29sZWFuO1xuICAgIGVsZW1lbnRSYWRpdXM6IG51bWJlcjtcbiAgICBpbWFnZUFzcGVjdFJhdGlvOiBJbWFnZUFzcGVjdFJhdGlvO1xuICAgIGJ1dHRvbkNvbG9yczogQnV0dG9uQ29sb3JzO1xuICAgIHR5cG9ncmFwaHk6IFR5cG9ncmFwaHk7XG4gICAgYWRkVG9DYXJ0PzogQWRkVG9DYXJ0Q29uZmlnO1xufTtcbmV4cG9ydCBkZWNsYXJlIGVudW0gQ29uZmlnVmVyc2lvbkVudW0ge1xuICAgIFYzID0gXCJ2M1wiLFxuICAgIERlcHJlY2F0ZWQgPSBcImRlcHJlY2F0ZWRcIlxufVxudHlwZSBDb25maWdWZXJzaW9uID0gQ29uZmlnVmVyc2lvbkVudW0uVjMgfCBDb25maWdWZXJzaW9uRW51bS5EZXByZWNhdGVkIHwgdW5kZWZpbmVkO1xudHlwZSBNb2RlID0gJ2RhcmsnIHwgJ2xpZ2h0JztcbnR5cGUgU2hvd09wdGlvbnMgPSAnYWx3YXlzJyB8ICdwb3N0SW50ZXJhY3Rpb24nIHwgJ25vbmUnO1xudHlwZSBTdHlsZSA9ICdhdHRhY2hlZCcgfCAnZGV0YWNoZWQnO1xudHlwZSBGbG9hdGluZ0J1dHRvbkNvbmZpZyA9IHtcbiAgICBwb3NpdGlvbjogRmxvYXRpbmdCdXR0b25Mb2NhdGlvbjtcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gICAgbW9kZTogTW9kZTtcbiAgICBzaG93T3B0aW9uOiBTaG93T3B0aW9ucztcbiAgICBpY29uU1ZHU3JjPzogc3RyaW5nO1xuICAgIHN0eWxlOiBTdHlsZTtcbn07XG5leHBvcnQgdHlwZSBSZWZlcnJlclBvcHVwVHJpZ2dlciA9IHtcbiAgICB0eXBlOiAncmVmZXJyZXInO1xuICAgIHJlZmVycmVyczogc3RyaW5nW107XG59O1xuZXhwb3J0IHR5cGUgQXV0b21hdGljUG9wdXBUcmlnZ2VyID0ge1xuICAgIHR5cGU6ICdhdXRvbWF0aWMnO1xufTtcbmV4cG9ydCB0eXBlIFBvcHVwVHJpZ2dlciA9IFJlZmVycmVyUG9wdXBUcmlnZ2VyIHwgQXV0b21hdGljUG9wdXBUcmlnZ2VyO1xuZXhwb3J0IHR5cGUgQXV0b1BvcHVwVHJpZ2dlciA9IHtcbiAgICBkZWxheTogbnVtYmVyO1xuICAgIHRyaWdnZXI6IFBvcHVwVHJpZ2dlcjtcbn07XG5leHBvcnQgaW50ZXJmYWNlIEF1dG9Qb3B1cENvbmZpZyB7XG4gICAgdHJpZ2dlcnM6IEF1dG9Qb3B1cFRyaWdnZXJbXTtcbn1cbnR5cGUgRmxvYXRpbmdDaGF0Q29uZmlnID0ge1xuICAgIGhlYWRlckJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICBoZWFkZXJNb2RlOiBNb2RlO1xuICAgIHdlbGNvbWVNZXNzYWdlSWNvbkNvbG9yOiBTcGFya2xlSWNvbkNvbG9yO1xuICAgIHNob3dWZXJpZmllZEJ1eWVyOiBib29sZWFuO1xuICAgIHVzZXJRdWVyeUlucHV0RW5hYmxlZDogYm9vbGVhbjtcbiAgICBzaG93RW52aXZlTG9nbzogYm9vbGVhbjtcbiAgICBpZ25vcmVGaXJzdE1vZGVsUmVzcG9uc2U/OiBib29sZWFuO1xuICAgIG5ldmVyU2hvd1NpbmdsZVByb2R1Y3RDYXJkcz86IGJvb2xlYW47XG4gICAgd2VsY29tZU1lc3NhZ2VUaXRsZTogc3RyaW5nO1xuICAgIHdlbGNvbWVNZXNzYWdlVGV4dDogc3RyaW5nO1xuICAgIGNoYXRGb290ZXJUZXh0RmllbGRQbGFjZWhvbGRlclRleHQ6IHN0cmluZztcbiAgICBhdXRvUG9wdXBDb25maWc/OiBBdXRvUG9wdXBDb25maWc7XG59O1xudHlwZSBDdXN0b21lclNlcnZpY2VJbnRlZ3JhdGlvbiA9IHtcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIHByb3ZpZGVyOiBDdXN0b21lclNlcnZpY2VUeXBlO1xuICAgIHN1cHByZXNzTWVyY2hhbnRCdXR0b24/OiBib29sZWFuO1xufTtcbnR5cGUgU1BBU2V0dGluZ3MgPSB7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICByZWZyZXNoSW50ZXJ2YWw/OiBudW1iZXI7XG59O1xudHlwZSBPcmdVSUNvbmZpZ1YzID0ge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIHZlcnNpb246IENvbmZpZ1ZlcnNpb247XG4gICAgc2hvcnROYW1lOiBzdHJpbmc7XG4gICAgbG9va0FuZEZlZWw6IExvb2tBbmRGZWVsQ29uZmlnO1xuICAgIGZsb2F0aW5nQnV0dG9uOiBGbG9hdGluZ0J1dHRvbkNvbmZpZztcbiAgICBmbG9hdGluZ0NoYXQ6IEZsb2F0aW5nQ2hhdENvbmZpZztcbiAgICBtZXJjaGFudE92ZXJyaWRlQ3NzPzogc3RyaW5nO1xuICAgIGN1c3RvbWVyU2VydmljZUludGVncmF0aW9uPzogQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb247XG4gICAgc2luZ2xlUGFnZUFwcGxpY2F0aW9uU2V0dGluZ3M/OiBTUEFTZXR0aW5ncztcbiAgICBzZWFyY2hDb25maWc/OiBTZWFyY2hDb25maWc7XG59O1xuZXhwb3J0IGRlY2xhcmUgZW51bSBXaWRnZXRUeXBlVjMge1xuICAgIFByb21wdENhcm91c2VsVjMgPSBcIlByb21wdENhcm91c2VsVjNcIixcbiAgICBUaXRsZWRQcm9tcHRDYXJvdXNlbFYzID0gXCJUaXRsZWRQcm9tcHRDYXJvdXNlbFYzXCIsXG4gICAgU29jaWFsUHJvb2ZWMyA9IFwiU29jaWFsUHJvb2ZWM1wiLFxuICAgIFR5cGluZ0FuaW1hdGlvblYzID0gXCJUeXBpbmdBbmltYXRpb25WM1wiLFxuICAgIENoYXRQcmV2aWV3VjMgPSBcIkNoYXRQcmV2aWV3VjNcIixcbiAgICBDaGF0UHJldmlld0NvbXBhcmlzb25WMyA9IFwiQ2hhdFByZXZpZXdDb21wYXJpc29uVjNcIixcbiAgICBDaGF0UHJldmlld0xvYWRpbmdWMyA9IFwiQ2hhdFByZXZpZXdMb2FkaW5nVjNcIixcbiAgICBJbWFnZVByb21wdENhcmRWMyA9IFwiSW1hZ2VQcm9tcHRDYXJkVjNcIixcbiAgICBQcm9tcHRCdXR0b25DYXJvdXNlbFdpdGhJbWFnZVYzID0gXCJQcm9tcHRCdXR0b25DYXJvdXNlbFdpdGhJbWFnZVYzXCIsXG4gICAgSW1hZ2VCYW5uZXJWMyA9IFwiSW1hZ2VCYW5uZXJWM1wiLFxuICAgIFNpbmdsZUltYWdlUHJvbXB0VjMgPSBcIlNpbmdsZUltYWdlUHJvbXB0VjNcIixcbiAgICBGbG9hdGluZ0NoYXRWMyA9IFwiRmxvYXRpbmdDaGF0VjNcIixcbiAgICBGbG9hdGluZ0J1dHRvblYzID0gXCJGbG9hdGluZ0J1dHRvblYzXCIsXG4gICAgUHJvZHVjdENhcmRWMyA9IFwiUHJvZHVjdENhcmRWM1wiLFxuICAgIEZ1bGxQYWdlU2FsZXNBZ2VudFYzID0gXCJGdWxsUGFnZVNhbGVzQWdlbnRWM1wiXG59XG5pbnRlcmZhY2UgQmFzZVdpZGdldENvbmZpZzxUIGV4dGVuZHMgV2lkZ2V0VHlwZVYzPiB7XG4gICAgd2lkZ2V0Q29uZmlnSWQ6IHN0cmluZztcbiAgICB0eXBlOiBUO1xuICAgIGNvbnRlbnRJZD86IHN0cmluZztcbn1cbmludGVyZmFjZSBQcm9tcHRDYXJvdXNlbFdpZGdldFYzQ29uZmlnIGV4dGVuZHMgQmFzZVdpZGdldENvbmZpZzxXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWMz4ge1xuICAgIHByb21wdEJ1dHRvblR5cGU/OiBQcm9tcHRCdXR0b25WYXJpYW50O1xuICAgIGJvbGRGaXJzdEJ1dHRvbj86IGJvb2xlYW47XG4gICAgcHJvbXB0Q2Fyb3VzZWxSb3dzPzogUHJvbXB0Q2Fyb3VzZWxSb3dzO1xuICAgIGFuaW1hdGlvblNwZWVkPzogQW5pbWF0aW9uU3BlZWQ7XG59XG5pbnRlcmZhY2UgVGl0bGVkUHJvbXB0Q2Fyb3VzZWxXaWRnZXRWM0NvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZVYzLlRpdGxlZFByb21wdENhcm91c2VsVjM+IHtcbiAgICBwcm9tcHRCdXR0b25UeXBlPzogUHJvbXB0QnV0dG9uVmFyaWFudDtcbiAgICBib2xkRmlyc3RCdXR0b24/OiBib29sZWFuO1xuICAgIHByb21wdENhcm91c2VsUm93cz86IFByb21wdENhcm91c2VsUm93cztcbiAgICBhbmltYXRpb25TcGVlZD86IEFuaW1hdGlvblNwZWVkO1xufVxuaW50ZXJmYWNlIFNvY2lhbFByb29mV2lkZ2V0VjNDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGVWMy5Tb2NpYWxQcm9vZlYzPiB7XG4gICAga2luZDogV2lkZ2V0S2luZDtcbiAgICB2YXJpYW50OiBXaWRnZXRXcmFwcGVyVmFyaWFudDtcbiAgICBoZXhDYXJkQ29sb3I/OiBzdHJpbmc7XG4gICAgcHJvbXB0Q2Fyb3VzZWxSb3dzOiBQcm9tcHRDYXJvdXNlbFJvd3M7XG4gICAgaGlkZUltYWdlPzogYm9vbGVhbjtcbiAgICBpbWFnZUdhbGxlcnlMYXlvdXQ6IEV4Y2x1ZGU8SW1hZ2VHYWxsZXJ5TGF5b3V0LCAnVFdPX1NJREUnPjtcbiAgICBoaWRlVGV4dEZpZWxkPzogYm9vbGVhbjtcbiAgICBwcmltYXJ5QnV0dG9uVmFyaWFudDogRXhjbHVkZTxQcm9tcHRCdXR0b25WYXJpYW50LCAnc3VnZ2VzdGVkUmVzcG9uc2UnIHwgJ2dob3N0Jz47XG4gICAgc2Vjb25kYXJ5QnV0dG9uVmFyaWFudDogRXhjbHVkZTxQcm9tcHRCdXR0b25WYXJpYW50LCAnc3VnZ2VzdGVkUmVzcG9uc2UnIHwgJ2dob3N0Jz47XG4gICAgZHluYW1pY0xheW91dD86IER5bmFtaWNMYXlvdXQ7XG4gICAgaW1hZ2VzPzogSW1hZ2VHYWxsZXJ5SW1hZ2VbXTtcbn1cbmludGVyZmFjZSBUeXBpbmdBbmltYXRpb25XaWRnZXRWM0NvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZVYzLlR5cGluZ0FuaW1hdGlvblYzPiB7XG4gICAgd2lkZ2V0VmFyaWFudD86IFdpZGdldFdyYXBwZXJWYXJpYW50O1xuICAgIGNhcmRDb2xvcj86IHN0cmluZztcbiAgICBwcm9tcHRCdXR0b25UeXBlPzogUHJvbXB0QnV0dG9uVmFyaWFudDtcbiAgICBwcm9tcHRDYXJvdXNlbFJvd3M/OiBQcm9tcHRDYXJvdXNlbFJvd3M7XG4gICAgc2hvd1RleHRGaWVsZD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdDb21wYXJpc29uV2lkZ2V0VjNDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGVWMy5DaGF0UHJldmlld0NvbXBhcmlzb25WMz4ge1xuICAgIHZhcmlhbnQ6IFdpZGdldFdyYXBwZXJWYXJpYW50O1xuICAgIGhleENhcmRDb2xvcj86IHN0cmluZztcbiAgICBoaWRlSW1hZ2U/OiBib29sZWFuO1xuICAgIGhpZGVUZXh0RmllbGQ/OiBib29sZWFuO1xufVxuaW50ZXJmYWNlIENoYXRQcmV2aWV3TG9hZGluZ1dpZGdldFYzQ29uZmlnIGV4dGVuZHMgQmFzZVdpZGdldENvbmZpZzxXaWRnZXRUeXBlVjMuQ2hhdFByZXZpZXdMb2FkaW5nVjM+IHtcbiAgICB2YXJpYW50OiBXaWRnZXRXcmFwcGVyVmFyaWFudDtcbiAgICBoZXhDYXJkQ29sb3I/OiBzdHJpbmc7XG4gICAgaGlkZVRleHRGaWVsZD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgQ2hhdFByZXZpZXdXaWRnZXRWM0NvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3VjM+IHtcbiAgICB2YXJpYW50OiBXaWRnZXRXcmFwcGVyVmFyaWFudDtcbiAgICBoZXhDYXJkQ29sb3I/OiBzdHJpbmc7XG4gICAgaGlkZVRleHRGaWVsZD86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgUHJvbXB0QnV0dG9uQ2Fyb3VzZWxXaXRoSW1hZ2VXaWRnZXRWM0NvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZVYzLlByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlVjM+IHtcbiAgICBwcm9tcHRCdXR0b25UeXBlPzogUHJvbXB0QnV0dG9uVmFyaWFudDtcbiAgICBpbWFnZT86IEltYWdlR2FsbGVyeUltYWdlO1xuICAgIGhpZGVUZXh0RmllbGQ/OiBib29sZWFuO1xuICAgIGlzRHluYW1pYz86IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgRmxvYXRpbmdDaGF0V2lkZ2V0VjNDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGVWMy5GbG9hdGluZ0NoYXRWMz4ge1xufVxuaW50ZXJmYWNlIFByb2R1Y3RDYXJkV2lkZ2V0VjNDb25maWcgZXh0ZW5kcyBCYXNlV2lkZ2V0Q29uZmlnPFdpZGdldFR5cGVWMy5Qcm9kdWN0Q2FyZFYzPiB7XG4gICAgcHJvbXB0QnV0dG9uVHlwZT86IFByb21wdEJ1dHRvblZhcmlhbnQ7XG4gICAgaXRhbGljaXplSGVhZGxpbmU/OiBib29sZWFuO1xuICAgIGZhbGxiYWNrQ29sb3I/OiBzdHJpbmc7XG4gICAgaW1hZ2VTcmM/OiBzdHJpbmc7XG4gICAgbW9kZT86IE1vZGU7XG59XG5leHBvcnQgZGVjbGFyZSBlbnVtIFByb2R1Y3RDYXJvdXNlbExheW91dFYzIHtcbiAgICBIT1JJWk9OVEFMID0gXCJob3Jpem9udGFsXCIsXG4gICAgR1JJRCA9IFwiZ3JpZFwiLFxuICAgIC8qKiBHcmlkIG9uIG1vYmlsZSwgaG9yaXpvbnRhbCBjYXJvdXNlbCBvbiBkZXNrdG9wLiAqL1xuICAgIEdSSURfTU9CSUxFX0hPUklaT05UQUxfREVTS1RPUCA9IFwiZ3JpZC1tb2JpbGUtaG9yaXpvbnRhbC1kZXNrdG9wXCJcbn1cbmludGVyZmFjZSBGdWxsUGFnZVNhbGVzQWdlbnRXaWRnZXRWM0NvbmZpZyBleHRlbmRzIEJhc2VXaWRnZXRDb25maWc8V2lkZ2V0VHlwZVYzLkZ1bGxQYWdlU2FsZXNBZ2VudFYzPiB7XG4gICAgaGVhZGVyQ29udGFpbmVyPzogc3RyaW5nO1xuICAgIGF1dG9IZWlnaHQ/OiBib29sZWFuO1xuICAgIHNwYXJrbGVDb2xvcj86IHN0cmluZztcbiAgICB1c2VCYWNrZ3JvdW5kSW1hZ2U/OiBib29sZWFuO1xuICAgIG1vYmlsZUJhY2tncm91bmRJbWFnZT86IHN0cmluZztcbiAgICBkZXNrdG9wQmFja2dyb3VuZEltYWdlPzogc3RyaW5nO1xuICAgIGJhY2tncm91bmRDb2xvcj86IHN0cmluZztcbiAgICBjaGF0QmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHN1Z2dlc3Rpb25CdXR0b25UeXBlPzogUHJvbXB0QnV0dG9uVmFyaWFudDtcbiAgICBwcm9kdWN0Q2Fyb3VzZWxMYXlvdXQ/OiBQcm9kdWN0Q2Fyb3VzZWxMYXlvdXRWMztcbn1cbnR5cGUgV2lkZ2V0Q29uZmlnVjMgPSBQcm9tcHRDYXJvdXNlbFdpZGdldFYzQ29uZmlnIHwgU29jaWFsUHJvb2ZXaWRnZXRWM0NvbmZpZyB8IFRpdGxlZFByb21wdENhcm91c2VsV2lkZ2V0VjNDb25maWcgfCBDaGF0UHJldmlld0NvbXBhcmlzb25XaWRnZXRWM0NvbmZpZyB8IENoYXRQcmV2aWV3TG9hZGluZ1dpZGdldFYzQ29uZmlnIHwgVHlwaW5nQW5pbWF0aW9uV2lkZ2V0VjNDb25maWcgfCBDaGF0UHJldmlld1dpZGdldFYzQ29uZmlnIHwgUHJvbXB0QnV0dG9uQ2Fyb3VzZWxXaXRoSW1hZ2VXaWRnZXRWM0NvbmZpZyB8IEZsb2F0aW5nQ2hhdFdpZGdldFYzQ29uZmlnIHwgUHJvZHVjdENhcmRXaWRnZXRWM0NvbmZpZyB8IEZ1bGxQYWdlU2FsZXNBZ2VudFdpZGdldFYzQ29uZmlnO1xuZXhwb3J0IHR5cGUgeyBBZGRUb0NhcnRDb25maWcsIENoYXRQcmV2aWV3Q29tcGFyaXNvbldpZGdldFYzQ29uZmlnLCBDaGF0UHJldmlld0xvYWRpbmdXaWRnZXRWM0NvbmZpZywgQ2hhdFByZXZpZXdXaWRnZXRWM0NvbmZpZywgQ3VzdG9tZXJTZXJ2aWNlSW50ZWdyYXRpb24sIEZsb2F0aW5nQnV0dG9uQ29uZmlnLCBGbG9hdGluZ0NoYXRDb25maWcsIEZsb2F0aW5nQ2hhdFdpZGdldFYzQ29uZmlnLCBGdWxsUGFnZVNhbGVzQWdlbnRXaWRnZXRWM0NvbmZpZywgTG9va0FuZEZlZWxDb25maWcsIE9yZ1VJQ29uZmlnVjMsIFByb2R1Y3RDYXJkV2lkZ2V0VjNDb25maWcsIFByb21wdEJ1dHRvbkNhcm91c2VsV2l0aEltYWdlV2lkZ2V0VjNDb25maWcsIFByb21wdENhcm91c2VsV2lkZ2V0VjNDb25maWcsIFNvY2lhbFByb29mV2lkZ2V0VjNDb25maWcsIFNQQVNldHRpbmdzLCBUaXRsZWRQcm9tcHRDYXJvdXNlbFdpZGdldFYzQ29uZmlnLCBUeXBpbmdBbmltYXRpb25XaWRnZXRWM0NvbmZpZywgV2lkZ2V0Q29uZmlnVjMsIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVVBLElBQVcsc0JBQXNCLENBQUMsRUFBRTtBQUNwQyxJQUFXLG1CQUFtQixDQUFDLEVBQUU7QUFDakMsSUFBVyxtQkFBbUIsQ0FBQyxFQUFFO0FBQ2pDLElBQVcsaUJBQWlCLENBQUMsR0FBRztBQUNoQyxJQUFXLG1CQUFtQixDQUFDLEdBQUc7QUFDbEMsSUFBVyxjQUFjLENBQUMsR0FBRztBQUM3QixJQUFXLG9CQUFvQixDQUFDLEdBQUc7QUFDbkMsSUFB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
@@ -1,8 +1,8 @@
1
- import * as react0 from "react";
1
+ import * as react1 from "react";
2
2
 
3
3
  //#region src/hooks/GrabAndScroll/useGrabAndScroll.d.ts
4
4
  declare const useGrabAndScroll: (enabled: boolean, chunkWidth: number, speed?: number, offset?: number) => {
5
- containerRef: react0.RefObject<HTMLDivElement | null>;
5
+ containerRef: react1.RefObject<HTMLDivElement | null>;
6
6
  leftArrow: boolean;
7
7
  rightArrow: boolean;
8
8
  animationTrigger: () => void;
@@ -1,12 +1,12 @@
1
1
  import { GenerationParams } from "../../application/models/api/generationParams.cjs";
2
- import * as react1 from "react";
2
+ import * as react0 from "react";
3
3
 
4
4
  //#region src/hooks/SystemSettingsContext/useSystemSettingsContext.d.ts
5
5
  declare const useSystemSettingsContext: () => {
6
6
  generationParams?: GenerationParams;
7
7
  showDebugBar?: boolean;
8
8
  endpointURL?: string;
9
- setGenerationParams: react1.Dispatch<react1.SetStateAction<GenerationParams | undefined>>;
9
+ setGenerationParams: react0.Dispatch<react0.SetStateAction<GenerationParams | undefined>>;
10
10
  };
11
11
  //#endregion
12
12
  export { useSystemSettingsContext };
@@ -109,7 +109,11 @@ var AmplitudeService = class AmplitudeService {
109
109
  setup: async () => void 0,
110
110
  execute: async (event) => {
111
111
  let enrichedEvent;
112
- if (["[Amplitude] Page Viewed", `[Spiffy] ${require_eventNames.SpiffyMetricsEventName.BundleLoaded}`].includes(event.event_type)) {
112
+ if ([
113
+ "[Amplitude] Page Viewed",
114
+ `[Spiffy] ${require_eventNames.SpiffyMetricsEventName.BundleLoaded}`,
115
+ `[Envive] ${require_eventNames.EnviveMetricsEventName.PageViewed}`
116
+ ].includes(event.event_type)) {
113
117
  const globalProperties = {};
114
118
  if (this.config.show != null) globalProperties["globalProperties.show"] = String(this.config.show);
115
119
  globalProperties["globalProperties.env"] = String(this.config.env);
@@ -299,4 +303,4 @@ var AmplitudeService = class AmplitudeService {
299
303
 
300
304
  //#endregion
301
305
  exports.AmplitudeService = AmplitudeService;
302
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5janMiLCJuYW1lcyI6WyJMb2dnZXIiLCJFWFBFUklNRU5UX05BTUVTUEFDRVM6IEV4cGVyaW1lbnROYW1lc3BhY2VbXSIsIkxvY2FsU3RvcmFnZUtleXMiLCJlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luIiwiZW5yaWNoZWRFdmVudDogRXZlbnQiLCJTcGlmZnlNZXRyaWNzRXZlbnROYW1lIiwiZ2xvYmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsIlNwaWZmeUV2ZW50IiwiY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50IiwiV2lkZ2V0VHlwZVYzIiwiQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyIsIkVudml2ZU1ldHJpY3NFdmVudE5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50c0Rpc3BhdGNoZXIsIFNwaWZmeUV2ZW50IH0gZnJvbSAnc3JjL2V2ZW50cyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VLZXlzIH0gZnJvbSAnc3JjL2NvbnRleHRzL2xvY2FsU3RvcmFnZUNvbnRleHQnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHR5cGUge1xuICBCcm93c2VyQ2xpZW50LFxuICBFbnJpY2htZW50UGx1Z2luLFxuICBFdmVudCxcbiAgU2VydmVyWm9uZVR5cGUsXG59IGZyb20gJ0BhbXBsaXR1ZGUvYW5hbHl0aWNzLXR5cGVzJztcbmltcG9ydCB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9mZWF0dXJlRmxhZ1NlcnZpY2UnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuaW1wb3J0IHsgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyc7XG5pbXBvcnQgeyBFeHBlcmltZW50TmFtZXNwYWNlLCBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgcHJvamVjdFRvR0E0IH0gZnJvbSAnLi4vZ2E0UHJvamVjdGlvblNlcnZpY2UvZ2E0UHJvamVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9IGZyb20gJy4vZXZlbnROYW1lcyc7XG5cbi8vIFJlLWV4cG9ydCBldmVudCBuYW1lcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfTtcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignYW1wbGl0dWRlU2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrRXZlbnRQYXJhbXMge1xuICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lO1xuICBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV2ZW50R3JvdXBzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtcGxpdHVkZVNlcnZpY2VDb25maWcge1xuICB1c2VySWQ6IHN0cmluZztcbiAgYW1wbGl0dWRlQXBpS2V5OiBzdHJpbmc7XG4gIGRhdGFSZXNpZGVuY3k6IHN0cmluZztcbiAgZW52OiBzdHJpbmc7XG4gIGNvbnRleHRTb3VyY2U6IHN0cmluZztcbiAgb3JnU2hvcnROYW1lOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIGZlYXR1cmVGbGFnU2VydmljZTogRmVhdHVyZUZsYWdTZXJ2aWNlO1xuICBzaG93OiBib29sZWFuO1xuICBlbnZpdmVPbjogYm9vbGVhbjtcbiAgZW5hYmxlZEZlYXR1cmVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gIGdldExvY2FsU3RvcmFnZUl0ZW06IG51bGwgfCAoKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsKTtcbiAgLy8gQ2FwdHVyZWQgYXQgY29uc3RydWN0aW9uLiBEcml2ZXMgYGV4cGVyaW1lbnQue25zfS4qYCBldmVudC1wcm9wZXJ0eVxuICAvLyBlbnJpY2htZW50LiBTb3VyY2VkIGZyb20gL3YxL29yZy9jb25maWcgd2hlbiB0aGUgYHVzZV91bmlmaWVkX2NvbmZpZ2BcbiAgLy8gZ2F0ZSBpcyBvbjsgb3RoZXJ3aXNlIG9taXR0ZWQgKHByb3BzIGVtaXQgYXMgbnVsbCkuXG4gIGV4cGVyaW1lbnRBc3NpZ25tZW50cz86IE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50W107XG59XG5cbi8vIE5hbWVzcGFjZXMgZW1pdHRlZCBvbiBldmVyeSBldmVudCB3aXRoIGNvbnN0YW50IGtleXMsIHNvIHRoZSBCaWdRdWVyeVxuLy8gc2NoZW1hIGlzIHN0YWJsZSByZWdhcmRsZXNzIG9mIHdoaWNoIChpZiBhbnkpIGV4cGVyaW1lbnQgaXMgcnVubmluZy5cbi8vIEN1cnJlbnRseSBgbWxgICsgYG1lcmNoYW50YDsgbWF0Y2hlcyBgRXhwZXJpbWVudE5hbWVzcGFjZWAuXG5jb25zdCBFWFBFUklNRU5UX05BTUVTUEFDRVM6IEV4cGVyaW1lbnROYW1lc3BhY2VbXSA9IFsnbWwnLCAnbWVyY2hhbnQnXTtcblxuY29uc3QgYnVpbGRFeHBlcmltZW50UHJvcHMgPSAoXG4gIGFzc2lnbm1lbnRzOiBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudFtdIHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8RXhwZXJpbWVudE5hbWVzcGFjZSwgT3JnQ29uZmlnRXhwZXJpbWVudEFzc2lnbm1lbnQ+KCk7XG4gIChhc3NpZ25tZW50cyA/PyBbXSkuZm9yRWFjaChhID0+IHtcbiAgICBpZiAoYS5sYXllcl9uYW1lICE9IG51bGwgJiYgYS5uYW1lc3BhY2UgIT0gbnVsbCkge1xuICAgICAgYnlOYW1lc3BhY2Uuc2V0KGEubmFtZXNwYWNlLCBhKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gRVhQRVJJTUVOVF9OQU1FU1BBQ0VTLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKGFjYywgbnMpID0+IHtcbiAgICBjb25zdCBhID0gYnlOYW1lc3BhY2UuZ2V0KG5zKTtcbiAgICBhY2NbYGV4cGVyaW1lbnQuJHtuc30ubGF5ZXJfbmFtZWBdID0gYT8ubGF5ZXJfbmFtZSA/PyBudWxsO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5leHBlcmltZW50X25hbWVgXSA9IGE/LmFsbG9jYXRlZF9leHBlcmltZW50X25hbWUgPz8gbnVsbDtcbiAgICBhY2NbYGV4cGVyaW1lbnQuJHtuc30uZ3JvdXBfbmFtZWBdID0gYT8uZ3JvdXBfbmFtZSA/PyBudWxsO1xuICAgIC8vIGBydWxlX2lkYCByZXNlcnZlZCDigJQgYmFja2VuZCBkb2Vzbid0IGN1cnJlbnRseSBzdXJmYWNlIGl0LlxuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5ydWxlX2lkYF0gPSBudWxsO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn07XG5cbmV4cG9ydCBjbGFzcyBBbXBsaXR1ZGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBhbXBsaXR1ZGVDbGllbnQ6IEJyb3dzZXJDbGllbnQgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBpbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIHByaXZhdGUgY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnO1xuXG4gIHByaXZhdGUgaW5pdFByb21pc2U6IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0UHJvbWlzZSA9IHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgZ2V0IGlzTW9ja0FwaUtleSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5ID09PSAnbW9jay1hbXBsaXR1ZGUta2V5JztcbiAgfVxuXG4gIC8vIE11c3Qgbm90IGRlcGVuZCBvbiBgYW1wbGl0dWRlQ2xpZW50YDogdGhlIFNESyBub3cgbG9hZHMgdmlhIGR5bmFtaWNcbiAgLy8gaW1wb3J0LCBhbmQgQW1wbGl0dWRlUHJvdmlkZXIgdW5tb3VudHMgaXRzIGVudGlyZSBzdWJ0cmVlIHdoaWxlXG4gIC8vIGlzUmVhZHkgaXMgZmFsc2Ug4oCUIGdhdGluZyBvbiB0aGUgY2xpZW50IHdvdWxkIGJsb2NrIHdpZGdldCByZW5kZXJpbmdcbiAgLy8gb24gdGhlIGFuYWx5dGljcyBjaHVuayBkb3dubG9hZC4gRXZlbnRzIGF3YWl0ZWQgaW4gdHJhY2tFdmVudCBxdWV1ZVxuICAvLyBiZWhpbmQgYGluaXRQcm9taXNlYCBpbnN0ZWFkLlxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJlxuICAgICAgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmXG4gICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgJiZcbiAgICAgICF0aGlzLmlzTW9ja0FwaUtleSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlc29sdmVzIG9uY2UgU0RLIGluaXRpYWxpemF0aW9uIGhhcyBzZXR0bGVkIChuZXZlciByZWplY3RzKS4gKi9cbiAgaW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdFByb21pc2U7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUl0ZW0oa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldExvY2FsU3RvcmFnZUl0ZW0oa2V5KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRUcmFja2luZ1Byb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBmZWF0dXJlR2F0ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdzKCkpO1xuICAgIGNvbnN0IGdhdGVzUHJvcHMgPVxuICAgICAgZmVhdHVyZUdhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBmZWF0dXJlR2F0ZXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PigoYWNjLCBbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2BmZWF0dXJlX2dhdGUuJHtuYW1lfWBdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB7fTtcbiAgICBjb25zdCBleHBlcmltZW50UHJvcHMgPSBidWlsZEV4cGVyaW1lbnRQcm9wcyh0aGlzLmNvbmZpZy5leHBlcmltZW50QXNzaWdubWVudHMpO1xuXG4gICAgY29uc3QgZW52aXJvbm1lbnRQcm9wcyA9IHtcbiAgICAgICdlbnZpcm9ubWVudC5leGVjdXRpb25fY29udGV4dCc6ICdidW5kbGUnLFxuICAgICAgJ2Vudmlyb25tZW50LnBhZ2VfdXJsJzogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX3VzZXJfaWQnOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAnZW52aXJvbm1lbnQuZXhlY3V0aW9uX2Vudmlyb25tZW50JzogdGhpcy5jb25maWcuZW52IHx8ICd1bmtub3duJyxcbiAgICAgICdlbnZpcm9ubWVudC5jb250ZXh0X3NvdXJjZSc6IHRoaXMuY29uZmlnLmNvbnRleHRTb3VyY2UsXG4gICAgICAnZW52aXJvbm1lbnQuc2FsZXNfYWdlbnRfZW5hYmxlZCc6IHRoaXMuY29uZmlnLmVuYWJsZWRGZWF0dXJlcz8uc2FsZXNBZ2VudCA/PyBmYWxzZSxcbiAgICAgICdlbnZpcm9ubWVudC5zZWFyY2hfZW5hYmxlZCc6IHRoaXMuY29uZmlnLmVuYWJsZWRGZWF0dXJlcz8uc2VhcmNoQWdlbnQgPz8gZmFsc2UsXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX29uX3F1ZXJ5X3BhcmFtJzogdGhpcy5jb25maWcuZW52aXZlT24sXG4gICAgICAnZW52aXJvbm1lbnQud2luZG93X3Nob3cnOiB0aGlzLmNvbmZpZy5zaG93LFxuICAgICAgJ2Vudmlyb25tZW50LmVudml2ZV9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5lbnZpdmUsXG4gICAgfTtcblxuICAgIGNvbnN0IG9yZ0xldmVsQW1wbGl0dWRlVHJhY2tpbmdQcm9wcyA9IEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGdWxsRmxhZ1ZhbHVlcygpLFxuICAgICAgICAgIC4uLmV4cGVyaW1lbnRQcm9wcyxcbiAgICAgICAgICAuLi5lbnZpcm9ubWVudFByb3BzLFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAuLi5nYXRlc1Byb3BzLFxuICAgICAgICAgIC4uLmV4cGVyaW1lbnRQcm9wcyxcbiAgICAgICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzLFxuICAgICAgLi4udGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMsXG4gICAgICBhcHBfaWQ6ICdjb21tZXJjZS1jaGF0LXJlYWN0LWNvbXBvbmVudCcsXG4gICAgICBjaGF0X2lkOiB0aGlzLmdldExvY2FsU3RvcmFnZUl0ZW0oTG9jYWxTdG9yYWdlS2V5cy5DaGF0SWQpLFxuICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgYXBwX3NvdXJjZTogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgIG9yZ19pZDogdGhpcy5jb25maWcub3JnSWQsXG4gICAgICAnb3JnLnNob3J0X25hbWUnOiB0aGlzLmNvbmZpZy5vcmdTaG9ydE5hbWUsXG4gICAgICAndXNlci5pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdjZHAudXNlcl9pZCc6IG51bGwsXG4gICAgICAnY2RwLnByb3ZpZGVyJzogbnVsbCxcbiAgICAgICdldmVudC5zb3VyY2UnOiAnd2ViLWJyb3dzZXInLFxuICAgICAgJ2V2ZW50LnR5cGUnOiAndXNlci1hY3Rpdml0eScsXG4gICAgICAnZXZlbnQuaWQnOiBudWxsLFxuICAgICAgJ2V2ZW50LmNoYW5uZWwnOiAnd2ViJyxcbiAgICAgICdldmVudC50aW1lc3RhbXAnOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBwcml2YXRlIGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcHJlZml4ID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhldmVudFByb3BzKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWNjW2Ake3ByZWZpeH0uJHtrZXl9YF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCgpOiBFbnJpY2htZW50UGx1Z2luIHtcbiAgICBpZiAodGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiA9IHtcbiAgICAgIG5hbWU6ICdwYWdlLXZpZXctdHJhY2tpbmctZW5yaWNobWVudCcsXG4gICAgICB0eXBlOiAnZW5yaWNobWVudCcsXG4gICAgICBzZXR1cDogYXN5bmMgKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGV2ZW50OiBFdmVudCk6IFByb21pc2U8RXZlbnQ+ID0+IHtcbiAgICAgICAgbGV0IGVucmljaGVkRXZlbnQ6IEV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGV2ZW50c1RvRW5yaWNoID0gW1xuICAgICAgICAgICdbQW1wbGl0dWRlXSBQYWdlIFZpZXdlZCcsXG4gICAgICAgICAgYFtTcGlmZnldICR7U3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5CdW5kbGVMb2FkZWR9YCxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoZXZlbnRzVG9FbnJpY2guaW5jbHVkZXMoZXZlbnQuZXZlbnRfdHlwZSkpIHtcbiAgICAgICAgICBjb25zdCBnbG9iYWxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAgICAgICBpZiAodGhpcy5jb25maWcuc2hvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLnNob3cnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5zaG93KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZ2xvYmFsUHJvcGVydGllc1snZ2xvYmFsUHJvcGVydGllcy5lbnYnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5lbnYpO1xuXG4gICAgICAgICAgY29uc3QgZW5hYmxlZEZlYXR1cmVzUHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgdGhpcy5jb25maWc/LmVuYWJsZWRGZWF0dXJlcyA/PyAoe30gYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pLFxuICAgICAgICAgICkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuICAgICAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgIFtgZW5hYmxlZEZlYXR1cmVzLiR7a2V5fWBdOiBgJHt2YWx1ZX1gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdGltaW5nUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICd0aW1pbmcuZW5yaWNoZWRfYXRfbXMnOlxuICAgICAgICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5wZXJmb3JtYW5jZT8ubm93KCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSB7XG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uZXZlbnQuZXZlbnRfcHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudF90eXBlIGFzIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAuLi5nbG9iYWxQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi5lbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aW1pbmdQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIEV2ZW50c0Rpc3BhdGNoZXIuZGlzcGF0Y2goU3BpZmZ5RXZlbnQuQU1QTElUVURFX0VWRU5ULCBlbnJpY2hlZEV2ZW50KTtcblxuICAgICAgICByZXR1cm4gZW5yaWNoZWRFdmVudDtcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgPSBlbnJpY2htZW50O1xuICAgIHJldHVybiBlbnJpY2htZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlzUmVhZHkgPSBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmIHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSAmJiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgKTtcblxuICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdBbXBsaXR1ZGVTZXJ2aWNlIGlzIG5vdCByZWFkeScsIHtcbiAgICAgICAgaXNSZWFkeSxcbiAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAgIGhhc0ZlYXR1cmVGbGFnU2VydmljZTogISF0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UsXG4gICAgICAgIGhhc0FtcGxpdHVkZUFwaUtleTogISF0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc01vY2tBcGlLZXkpIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnTW9jayBBUEkga2V5IGRldGVjdGVkIOKAlCBydW5uaW5nIGluIG1vY2sgbW9kZSwgbm8gZXZlbnRzIHdpbGwgYmUgc2VudCB0byBBbXBsaXR1ZGUuJyxcbiAgICAgICAgdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYW1wbGl0dWRlQ2xpZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBEeW5hbWljIGltcG9ydCBrZWVwcyB0aGUgQW1wbGl0dWRlIFNESyBvdXQgb2YgdGhlIGVhZ2VyXG4gICAgICAgIC8vIGluamVjdGlvbi1idW5kbGUgY2h1bms7IHRyYWNrRXZlbnQgcXVldWVzIGJlaGluZCBpbml0UHJvbWlzZS5cbiAgICAgICAgY29uc3QgeyBjcmVhdGVJbnN0YW5jZSB9ID0gYXdhaXQgaW1wb3J0KCdAYW1wbGl0dWRlL2FuYWx5dGljcy1icm93c2VyJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCA9IGNyZWF0ZUluc3RhbmNlKCk7XG5cbiAgICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmFkZCh0aGlzLmdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCkpO1xuICAgICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuaW5pdCh0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksIHRoaXMuY29uZmlnLnVzZXJJZCwge1xuICAgICAgICAgIHNlcnZlclpvbmU6IHRoaXMuY29uZmlnLmRhdGFSZXNpZGVuY3kgYXMgU2VydmVyWm9uZVR5cGUsXG4gICAgICAgICAgdHJhY2tpbmdPcHRpb25zOiB7XG4gICAgICAgICAgICBpcEFkZHJlc3M6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdXRvY2FwdHVyZToge1xuICAgICAgICAgICAgYXR0cmlidXRpb246IHRydWUsXG4gICAgICAgICAgICBwYWdlVmlld3M6IHtcbiAgICAgICAgICAgICAgdHJhY2tIaXN0b3J5Q2hhbmdlczogJ3BhdGhPbmx5JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXNzaW9uczogZmFsc2UsXG4gICAgICAgICAgICBmb3JtSW50ZXJhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICAgIGZpbGVEb3dubG9hZHM6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudCA9IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIubG9nRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9yIGluaXRpYWxpemUgdGhlIEFtcGxpdHVkZSBTREsnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KHdpZGdldFR5cGU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAod2lkZ2V0VHlwZSkge1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuRmxvYXRpbmdCdXR0b25WMzpcbiAgICAgICAgcmV0dXJuICdmbG9hdGluZ19idXR0b24nO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuVHlwaW5nQW5pbWF0aW9uVjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWMzpcbiAgICAgICAgcmV0dXJuICdlbWJlZGRlZF93aWRnZXQnO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuVGl0bGVkUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlByb21wdENhcm91c2VsVjM6XG4gICAgICAgIHJldHVybiAnc3VnZ2VzdGlvbl9iYXInO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvZHVjdENhcmRWMzpcbiAgICAgICAgcmV0dXJuICdpbWFnZV9wcm9tcHRfY2FyZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRyaWdnZXJMb2NhdGlvbikge1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9URVhUX0ZJRUxEOlxuICAgICAgICByZXR1cm4gJ3Byb21wdF9jYXJkJztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9NUFRfQ0FST1VTRUw6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVElUTEVEX1BST01QVF9DQVJPVVNFTDpcbiAgICAgICAgcmV0dXJuICd0b3BfcmV2aWV3c19zbmlwcGV0JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5UWVBJTkdfQU5JTUFUSU9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9QUklNQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfU0VDT05EQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfVEVYVF9GSUVMRDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1RFWFRfRklFTEQ6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1RFWFRfRklFTEQ6XG4gICAgICAgIHJldHVybiAnY2hhdF9wcmV2aWV3JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX09WRVJMQVk6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9DTE9TRV9CVVRUT046XG4gICAgICAgIHJldHVybiAnaW5fY2hhdCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJpZ2dlckxvY2F0aW9uIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICAvLyBUaGlzIGFsbG93cyB1cyB0byBtYXAgdGhlIGV2ZW50IHByb3BzIHRvIHRoZSBjb3JyZWN0IGZvcm1hdCBmb3IgdGhlIGxlZ2FjeSBhbXBsaXR1ZGUgZXZlbnRzXG4gIHN0YXRpYyBtYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgbWVzc2FnZU1ldGFkYXRhID0gZXZlbnRQcm9wcz8ubWVzc2FnZV9tZXRhZGF0YSA/PyB7fTtcbiAgICBjb25zdCB0cmlnZ2VyTG9jYXRpb24gPVxuICAgICAgbWVzc2FnZU1ldGFkYXRhICE9PSBudWxsICYmXG4gICAgICB0eXBlb2YgbWVzc2FnZU1ldGFkYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ3RyaWdnZXJfbG9jYXRpb24nIGluIG1lc3NhZ2VNZXRhZGF0YVxuICAgICAgICA/IG1lc3NhZ2VNZXRhZGF0YS50cmlnZ2VyX2xvY2F0aW9uXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50RXhwYW5kZWQpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24gPVxuICAgICAgICBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnRQcm9wcyxcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIC4uLm1lc3NhZ2VNZXRhZGF0YSxcbiAgICAgICAgICB0cmlnZ2VyX2xvY2F0aW9uOiBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uLFxuICAgICAgICAgIGZ1bGxfdHJpZ2dlcl9sb2NhdGlvbjogdHJpZ2dlckxvY2F0aW9uLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRWaXNpYmxlKSB7XG4gICAgICBjb25zdCBtYXBwZWRXaWRnZXRUeXBlID0gQW1wbGl0dWRlU2VydmljZS5tYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KFxuICAgICAgICBldmVudFByb3BzPy53aWRnZXRfdHlwZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uID1cbiAgICAgICAgQW1wbGl0dWRlU2VydmljZS5tYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIG1lc3NhZ2VfbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5tZXNzYWdlTWV0YWRhdGEsXG4gICAgICAgICAgdHJpZ2dlcl9sb2NhdGlvbjogbWFwcGVkVHJpZ2dlckxvY2NhdGlvbixcbiAgICAgICAgICBmdWxsX3RyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgY2hhdF9jb21wb25lbnQ6IG1hcHBlZFdpZGdldFR5cGUsXG4gICAgICAgICdjaGF0LmNvbXBvbmVudF92aXNpYmxlJzogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBldmVudFByb3BzID8/IHt9O1xuICB9XG5cbiAgc3RhdGljIGlzVjNFbnZpdmVFdmVudChldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoRW52aXZlTWV0cmljc0V2ZW50TmFtZSkuaW5jbHVkZXMoZXZlbnROYW1lIGFzIEVudml2ZU1ldHJpY3NFdmVudE5hbWUpO1xuICB9XG5cbiAgc3RhdGljIGRlY29yYXRlRXZlbnROYW1lKGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUpOiBzdHJpbmcge1xuICAgIGlmIChBbXBsaXR1ZGVTZXJ2aWNlLmlzVjNFbnZpdmVFdmVudChldmVudE5hbWUpKSB7XG4gICAgICByZXR1cm4gYFtFbnZpdmVdICR7ZXZlbnROYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiBgW1NwaWZmeV0gJHtldmVudE5hbWV9YDtcbiAgfVxuXG4gIGFzeW5jIHRyYWNrRXZlbnQoe1xuICAgIGV2ZW50TmFtZSxcbiAgICBldmVudFByb3BzLFxuICAgIGV2ZW50R3JvdXBzLFxuICAgIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgPSBmYWxzZSxcbiAgfTogVHJhY2tFdmVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzTW9ja0FwaUtleSkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuaW5pdFByb21pc2U7XG4gICAgbG9nZ2VyLmxvZ0RlYnVnKCdTdWJtaXR0aW5nIGV2ZW50JywgZXZlbnROYW1lKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb3JhdGVkRXZlbnROYW1lID0gQW1wbGl0dWRlU2VydmljZS5kZWNvcmF0ZUV2ZW50TmFtZShldmVudE5hbWUpO1xuXG4gICAgICBpZiAoIXRoaXMuYW1wbGl0dWRlQ2xpZW50KSB7XG4gICAgICAgIGxvZ2dlci5sb2dXYXJuKCdhbXBsaXR1ZGUgY2xpZW50IHVuZGVmaW5lZCcsIHVuZGVmaW5lZCwge1xuICAgICAgICAgIGV2ZW50X25hbWU6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFwcGVkRXZlbnRQcm9wcyA9IEFtcGxpdHVkZVNlcnZpY2UubWFwRXZlbnRQcm9wcyh7IGV2ZW50TmFtZSwgZXZlbnRQcm9wcyB9KTtcblxuICAgICAgY29uc3QgZXZlbnREYXRhID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHM6IG1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKGV2ZW50RGF0YSk7XG4gICAgICAvLyBjYWxjdWxhdGUgYSBoYXNoIG9mIHRoZSBldmVudCBwcm9wZXJ0aWVzIHRvIHVzZSBhcyB0aGUgaW5zZXJ0X2lkIHNvIHRoYXQgZHVwbGljYXRlIGV2ZW50c1xuICAgICAgLy8gYXJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCBieSBBbXBsaXR1ZGVcbiAgICAgIGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGRhdGEpO1xuICAgICAgY29uc3QgaGFzaEFycmF5ID0gQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShoYXNoQnVmZmVyKSk7XG4gICAgICBjb25zdCBjdXJyZW50SW5zZXJ0SWQgPSBoYXNoQXJyYXkubWFwKGIgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG5cbiAgICAgIGxvZ2dlci5sb2dEZWJ1ZyhgYW1wbGl0dWRlIHRyYWNraW5nICR7ZGVjb3JhdGVkRXZlbnROYW1lfWAsIG51bGwsIHtcbiAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICBwcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudC50cmFjayhcbiAgICAgICAgZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhldmVudE5hbWUpLFxuICAgICAgICAgIC4uLm1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgICAgLi4uKG1hcHBlZEV2ZW50UHJvcHNcbiAgICAgICAgICAgID8gdGhpcy5ldmVudFByb3BzVG9QcmVmaXhlZEV2ZW50UHJvcHMoZXZlbnROYW1lLCBtYXBwZWRFdmVudFByb3BzKVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5ldmVudEdyb3VwcyxcbiAgICAgICAgICBpbnNlcnRfaWQ6IGN1cnJlbnRJbnNlcnRJZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFRPRE86IFB1bGwgZ2FFbmFibGVkIGZyb20gb3JnIGNvbmZpZyB3aGVuIGF2YWlsYWJsZS4gSGFyZGNvZGVkIHRvIHRydWUgZm9yIG5vdy5cbiAgICAgIGNvbnN0IGdhRW5hYmxlZCA9IHRydWU7XG5cbiAgICAgIGlmIChBbXBsaXR1ZGVTZXJ2aWNlLmlzVjNFbnZpdmVFdmVudChldmVudE5hbWUpICYmIGdhRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBtZXJnZWRQcm9wc0ZvckdBNCA9IHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKGV2ZW50TmFtZSksXG4gICAgICAgICAgLi4ubWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgfTtcbiAgICAgICAgcHJvamVjdFRvR0E0KGV2ZW50TmFtZSBhcyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBtZXJnZWRQcm9wc0ZvckdBNCk7XG4gICAgICB9IGVsc2UgaWYgKGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgJiYgZ2FFbmFibGVkKSB7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1ZygnR0EgdHJhY2tpbmcnLCBkZWNvcmF0ZWRFdmVudE5hbWUpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRhdGFMYXllcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55W10pLnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignRXJyb3IgdHJhY2tpbmcgZXZlbnQnLCBlcnIsIHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudFByb3BzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5zdXJlIHRoYXQgc3VwcGxlbWVudGFsIGRlZmF1bHQgcHJvcHMgYXJlIG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBwcm9wc1xuICBzZXRTdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMgPSBwcm9wcztcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQW1CQSxNQUFNLFNBQVMsSUFBSUEsdUJBQU8sbUJBQW1CO0FBK0I3QyxNQUFNQyx3QkFBK0MsQ0FBQyxNQUFNLFdBQVc7QUFFdkUsTUFBTSx3QkFDSixnQkFDNEI7Q0FDNUIsTUFBTSw4QkFBYyxJQUFJLEtBQXlEO0FBQ2pGLEVBQUMsZUFBZSxFQUFFLEVBQUUsU0FBUSxNQUFLO0FBQy9CLE1BQUksRUFBRSxjQUFjLFFBQVEsRUFBRSxhQUFhLEtBQ3pDLGFBQVksSUFBSSxFQUFFLFdBQVcsRUFBRTtHQUVq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
306
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5janMiLCJuYW1lcyI6WyJMb2dnZXIiLCJFWFBFUklNRU5UX05BTUVTUEFDRVM6IEV4cGVyaW1lbnROYW1lc3BhY2VbXSIsIkxvY2FsU3RvcmFnZUtleXMiLCJlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luIiwiZW5yaWNoZWRFdmVudDogRXZlbnQiLCJTcGlmZnlNZXRyaWNzRXZlbnROYW1lIiwiRW52aXZlTWV0cmljc0V2ZW50TmFtZSIsImdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4iLCJTcGlmZnlFdmVudCIsImN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCIsIldpZGdldFR5cGVWMyIsIkNoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvYW1wbGl0dWRlU2VydmljZS9hbXBsaXR1ZGVTZXJ2aWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50c0Rpc3BhdGNoZXIsIFNwaWZmeUV2ZW50IH0gZnJvbSAnc3JjL2V2ZW50cyc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VLZXlzIH0gZnJvbSAnc3JjL2NvbnRleHRzL2xvY2FsU3RvcmFnZUNvbnRleHQnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHR5cGUge1xuICBCcm93c2VyQ2xpZW50LFxuICBFbnJpY2htZW50UGx1Z2luLFxuICBFdmVudCxcbiAgU2VydmVyWm9uZVR5cGUsXG59IGZyb20gJ0BhbXBsaXR1ZGUvYW5hbHl0aWNzLXR5cGVzJztcbmltcG9ydCB7IEZlYXR1cmVGbGFnU2VydmljZSB9IGZyb20gJ3NyYy9zZXJ2aWNlcy9mZWF0dXJlRmxhZ1NlcnZpY2UnO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZVYzIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzVjMnO1xuaW1wb3J0IHsgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMyc7XG5pbXBvcnQgeyBFeHBlcmltZW50TmFtZXNwYWNlLCBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgcHJvamVjdFRvR0E0IH0gZnJvbSAnLi4vZ2E0UHJvamVjdGlvblNlcnZpY2UvZ2E0UHJvamVjdGlvblNlcnZpY2UnO1xuaW1wb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9IGZyb20gJy4vZXZlbnROYW1lcyc7XG5cbi8vIFJlLWV4cG9ydCBldmVudCBuYW1lcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfTtcblxuY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcignYW1wbGl0dWRlU2VydmljZScpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrRXZlbnRQYXJhbXMge1xuICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lO1xuICBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV2ZW50R3JvdXBzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFtcGxpdHVkZVNlcnZpY2VDb25maWcge1xuICB1c2VySWQ6IHN0cmluZztcbiAgYW1wbGl0dWRlQXBpS2V5OiBzdHJpbmc7XG4gIGRhdGFSZXNpZGVuY3k6IHN0cmluZztcbiAgZW52OiBzdHJpbmc7XG4gIGNvbnRleHRTb3VyY2U6IHN0cmluZztcbiAgb3JnU2hvcnROYW1lOiBzdHJpbmc7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIGZlYXR1cmVGbGFnU2VydmljZTogRmVhdHVyZUZsYWdTZXJ2aWNlO1xuICBzaG93OiBib29sZWFuO1xuICBlbnZpdmVPbjogYm9vbGVhbjtcbiAgZW5hYmxlZEZlYXR1cmVzPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG4gIGdldExvY2FsU3RvcmFnZUl0ZW06IG51bGwgfCAoKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsKTtcbiAgLy8gQ2FwdHVyZWQgYXQgY29uc3RydWN0aW9uLiBEcml2ZXMgYGV4cGVyaW1lbnQue25zfS4qYCBldmVudC1wcm9wZXJ0eVxuICAvLyBlbnJpY2htZW50LiBTb3VyY2VkIGZyb20gL3YxL29yZy9jb25maWcgd2hlbiB0aGUgYHVzZV91bmlmaWVkX2NvbmZpZ2BcbiAgLy8gZ2F0ZSBpcyBvbjsgb3RoZXJ3aXNlIG9taXR0ZWQgKHByb3BzIGVtaXQgYXMgbnVsbCkuXG4gIGV4cGVyaW1lbnRBc3NpZ25tZW50cz86IE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50W107XG59XG5cbi8vIE5hbWVzcGFjZXMgZW1pdHRlZCBvbiBldmVyeSBldmVudCB3aXRoIGNvbnN0YW50IGtleXMsIHNvIHRoZSBCaWdRdWVyeVxuLy8gc2NoZW1hIGlzIHN0YWJsZSByZWdhcmRsZXNzIG9mIHdoaWNoIChpZiBhbnkpIGV4cGVyaW1lbnQgaXMgcnVubmluZy5cbi8vIEN1cnJlbnRseSBgbWxgICsgYG1lcmNoYW50YDsgbWF0Y2hlcyBgRXhwZXJpbWVudE5hbWVzcGFjZWAuXG5jb25zdCBFWFBFUklNRU5UX05BTUVTUEFDRVM6IEV4cGVyaW1lbnROYW1lc3BhY2VbXSA9IFsnbWwnLCAnbWVyY2hhbnQnXTtcblxuY29uc3QgYnVpbGRFeHBlcmltZW50UHJvcHMgPSAoXG4gIGFzc2lnbm1lbnRzOiBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudFtdIHwgdW5kZWZpbmVkLFxuKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4ge1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8RXhwZXJpbWVudE5hbWVzcGFjZSwgT3JnQ29uZmlnRXhwZXJpbWVudEFzc2lnbm1lbnQ+KCk7XG4gIChhc3NpZ25tZW50cyA/PyBbXSkuZm9yRWFjaChhID0+IHtcbiAgICBpZiAoYS5sYXllcl9uYW1lICE9IG51bGwgJiYgYS5uYW1lc3BhY2UgIT0gbnVsbCkge1xuICAgICAgYnlOYW1lc3BhY2Uuc2V0KGEubmFtZXNwYWNlLCBhKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gRVhQRVJJTUVOVF9OQU1FU1BBQ0VTLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKGFjYywgbnMpID0+IHtcbiAgICBjb25zdCBhID0gYnlOYW1lc3BhY2UuZ2V0KG5zKTtcbiAgICBhY2NbYGV4cGVyaW1lbnQuJHtuc30ubGF5ZXJfbmFtZWBdID0gYT8ubGF5ZXJfbmFtZSA/PyBudWxsO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5leHBlcmltZW50X25hbWVgXSA9IGE/LmFsbG9jYXRlZF9leHBlcmltZW50X25hbWUgPz8gbnVsbDtcbiAgICBhY2NbYGV4cGVyaW1lbnQuJHtuc30uZ3JvdXBfbmFtZWBdID0gYT8uZ3JvdXBfbmFtZSA/PyBudWxsO1xuICAgIC8vIGBydWxlX2lkYCByZXNlcnZlZCDigJQgYmFja2VuZCBkb2Vzbid0IGN1cnJlbnRseSBzdXJmYWNlIGl0LlxuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5ydWxlX2lkYF0gPSBudWxsO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbn07XG5cbmV4cG9ydCBjbGFzcyBBbXBsaXR1ZGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBhbXBsaXR1ZGVDbGllbnQ6IEJyb3dzZXJDbGllbnQgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBpbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgc3VwcGxlbWVudGFsRGVmYXVsdFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIHByaXZhdGUgY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnO1xuXG4gIHByaXZhdGUgaW5pdFByb21pc2U6IFByb21pc2U8dm9pZD47XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBBbXBsaXR1ZGVTZXJ2aWNlQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0UHJvbWlzZSA9IHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgZ2V0IGlzTW9ja0FwaUtleSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5ID09PSAnbW9jay1hbXBsaXR1ZGUta2V5JztcbiAgfVxuXG4gIC8vIE11c3Qgbm90IGRlcGVuZCBvbiBgYW1wbGl0dWRlQ2xpZW50YDogdGhlIFNESyBub3cgbG9hZHMgdmlhIGR5bmFtaWNcbiAgLy8gaW1wb3J0LCBhbmQgQW1wbGl0dWRlUHJvdmlkZXIgdW5tb3VudHMgaXRzIGVudGlyZSBzdWJ0cmVlIHdoaWxlXG4gIC8vIGlzUmVhZHkgaXMgZmFsc2Ug4oCUIGdhdGluZyBvbiB0aGUgY2xpZW50IHdvdWxkIGJsb2NrIHdpZGdldCByZW5kZXJpbmdcbiAgLy8gb24gdGhlIGFuYWx5dGljcyBjaHVuayBkb3dubG9hZC4gRXZlbnRzIGF3YWl0ZWQgaW4gdHJhY2tFdmVudCBxdWV1ZVxuICAvLyBiZWhpbmQgYGluaXRQcm9taXNlYCBpbnN0ZWFkLlxuICBnZXQgaXNSZWFkeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuY29uZmlnLnVzZXJJZCAmJlxuICAgICAgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmXG4gICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgJiZcbiAgICAgICF0aGlzLmlzTW9ja0FwaUtleSxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlc29sdmVzIG9uY2UgU0RLIGluaXRpYWxpemF0aW9uIGhhcyBzZXR0bGVkIChuZXZlciByZWplY3RzKS4gKi9cbiAgaW5pdGlhbGl6ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaW5pdFByb21pc2U7XG4gIH1cblxuICBwcml2YXRlIGdldExvY2FsU3RvcmFnZUl0ZW0oa2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldExvY2FsU3RvcmFnZUl0ZW0oa2V5KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRUcmFja2luZ1Byb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBmZWF0dXJlR2F0ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UuZ2V0RmVhdHVyZUZsYWdzKCkpO1xuICAgIGNvbnN0IGdhdGVzUHJvcHMgPVxuICAgICAgZmVhdHVyZUdhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBmZWF0dXJlR2F0ZXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+PigoYWNjLCBbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLmFjYywgW2BmZWF0dXJlX2dhdGUuJHtuYW1lfWBdOiB2YWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiB7fTtcbiAgICBjb25zdCBleHBlcmltZW50UHJvcHMgPSBidWlsZEV4cGVyaW1lbnRQcm9wcyh0aGlzLmNvbmZpZy5leHBlcmltZW50QXNzaWdubWVudHMpO1xuXG4gICAgY29uc3QgZW52aXJvbm1lbnRQcm9wcyA9IHtcbiAgICAgICdlbnZpcm9ubWVudC5leGVjdXRpb25fY29udGV4dCc6ICdidW5kbGUnLFxuICAgICAgJ2Vudmlyb25tZW50LnBhZ2VfdXJsJzogd2luZG93LmxvY2F0aW9uLmhyZWYsXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX3VzZXJfaWQnOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAnZW52aXJvbm1lbnQuZXhlY3V0aW9uX2Vudmlyb25tZW50JzogdGhpcy5jb25maWcuZW52IHx8ICd1bmtub3duJyxcbiAgICAgICdlbnZpcm9ubWVudC5jb250ZXh0X3NvdXJjZSc6IHRoaXMuY29uZmlnLmNvbnRleHRTb3VyY2UsXG4gICAgICAnZW52aXJvbm1lbnQuc2FsZXNfYWdlbnRfZW5hYmxlZCc6IHRoaXMuY29uZmlnLmVuYWJsZWRGZWF0dXJlcz8uc2FsZXNBZ2VudCA/PyBmYWxzZSxcbiAgICAgICdlbnZpcm9ubWVudC5zZWFyY2hfZW5hYmxlZCc6IHRoaXMuY29uZmlnLmVuYWJsZWRGZWF0dXJlcz8uc2VhcmNoQWdlbnQgPz8gZmFsc2UsXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX29uX3F1ZXJ5X3BhcmFtJzogdGhpcy5jb25maWcuZW52aXZlT24sXG4gICAgICAnZW52aXJvbm1lbnQud2luZG93X3Nob3cnOiB0aGlzLmNvbmZpZy5zaG93LFxuICAgICAgJ2Vudmlyb25tZW50LmVudml2ZV9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5lbnZpdmUsXG4gICAgfTtcblxuICAgIGNvbnN0IG9yZ0xldmVsQW1wbGl0dWRlVHJhY2tpbmdQcm9wcyA9IEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSlcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGdWxsRmxhZ1ZhbHVlcygpLFxuICAgICAgICAgIC4uLmV4cGVyaW1lbnRQcm9wcyxcbiAgICAgICAgICAuLi5lbnZpcm9ubWVudFByb3BzLFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICAuLi5nYXRlc1Byb3BzLFxuICAgICAgICAgIC4uLmV4cGVyaW1lbnRQcm9wcyxcbiAgICAgICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzLFxuICAgICAgLi4udGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMsXG4gICAgICBhcHBfaWQ6ICdjb21tZXJjZS1jaGF0LXJlYWN0LWNvbXBvbmVudCcsXG4gICAgICBjaGF0X2lkOiB0aGlzLmdldExvY2FsU3RvcmFnZUl0ZW0oTG9jYWxTdG9yYWdlS2V5cy5DaGF0SWQpLFxuICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgYXBwX3NvdXJjZTogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgIG9yZ19pZDogdGhpcy5jb25maWcub3JnSWQsXG4gICAgICAnb3JnLnNob3J0X25hbWUnOiB0aGlzLmNvbmZpZy5vcmdTaG9ydE5hbWUsXG4gICAgICAndXNlci5pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdjZHAudXNlcl9pZCc6IG51bGwsXG4gICAgICAnY2RwLnByb3ZpZGVyJzogbnVsbCxcbiAgICAgICdldmVudC5zb3VyY2UnOiAnd2ViLWJyb3dzZXInLFxuICAgICAgJ2V2ZW50LnR5cGUnOiAndXNlci1hY3Rpdml0eScsXG4gICAgICAnZXZlbnQuaWQnOiBudWxsLFxuICAgICAgJ2V2ZW50LmNoYW5uZWwnOiAnd2ViJyxcbiAgICAgICdldmVudC50aW1lc3RhbXAnOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICBwcml2YXRlIGV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcHJlZml4ID0gZXZlbnROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhldmVudFByb3BzKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgYWNjW2Ake3ByZWZpeH0uJHtrZXl9YF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFdmVudFRyYWNraW5nRW5yaWNobWVudCgpOiBFbnJpY2htZW50UGx1Z2luIHtcbiAgICBpZiAodGhpcy5pbnRlcm5hbEV2ZW50VHJhY2tpbmdFbnJpY2htZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiA9IHtcbiAgICAgIG5hbWU6ICdwYWdlLXZpZXctdHJhY2tpbmctZW5yaWNobWVudCcsXG4gICAgICB0eXBlOiAnZW5yaWNobWVudCcsXG4gICAgICBzZXR1cDogYXN5bmMgKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGV2ZW50OiBFdmVudCk6IFByb21pc2U8RXZlbnQ+ID0+IHtcbiAgICAgICAgbGV0IGVucmljaGVkRXZlbnQ6IEV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGV2ZW50c1RvRW5yaWNoID0gW1xuICAgICAgICAgICdbQW1wbGl0dWRlXSBQYWdlIFZpZXdlZCcsXG4gICAgICAgICAgYFtTcGlmZnldICR7U3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5CdW5kbGVMb2FkZWR9YCxcbiAgICAgICAgICBgW0Vudml2ZV0gJHtFbnZpdmVNZXRyaWNzRXZlbnROYW1lLlBhZ2VWaWV3ZWR9YCxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoZXZlbnRzVG9FbnJpY2guaW5jbHVkZXMoZXZlbnQuZXZlbnRfdHlwZSkpIHtcbiAgICAgICAgICBjb25zdCBnbG9iYWxQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAgICAgICBpZiAodGhpcy5jb25maWcuc2hvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLnNob3cnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5zaG93KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZ2xvYmFsUHJvcGVydGllc1snZ2xvYmFsUHJvcGVydGllcy5lbnYnXSA9IFN0cmluZyh0aGlzLmNvbmZpZy5lbnYpO1xuXG4gICAgICAgICAgY29uc3QgZW5hYmxlZEZlYXR1cmVzUHJvcGVydGllcyA9IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgdGhpcy5jb25maWc/LmVuYWJsZWRGZWF0dXJlcyA/PyAoe30gYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pLFxuICAgICAgICAgICkucmVkdWNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KFxuICAgICAgICAgICAgKGFjYywgW2tleSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgIFtgZW5hYmxlZEZlYXR1cmVzLiR7a2V5fWBdOiBgJHt2YWx1ZX1gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgdGltaW5nUHJvcGVydGllcyA9IHtcbiAgICAgICAgICAgICd0aW1pbmcuZW5yaWNoZWRfYXRfbXMnOlxuICAgICAgICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5wZXJmb3JtYW5jZT8ubm93KCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSB7XG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgLi4uZXZlbnQuZXZlbnRfcHJvcGVydGllcyxcbiAgICAgICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhcbiAgICAgICAgICAgICAgICBldmVudC5ldmVudF90eXBlIGFzIFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAuLi5nbG9iYWxQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi5lbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aW1pbmdQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVucmljaGVkRXZlbnQgPSBldmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIEV2ZW50c0Rpc3BhdGNoZXIuZGlzcGF0Y2goU3BpZmZ5RXZlbnQuQU1QTElUVURFX0VWRU5ULCBlbnJpY2hlZEV2ZW50KTtcblxuICAgICAgICByZXR1cm4gZW5yaWNoZWRFdmVudDtcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgPSBlbnJpY2htZW50O1xuICAgIHJldHVybiBlbnJpY2htZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlzUmVhZHkgPSBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmIHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSAmJiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgKTtcblxuICAgIGlmICghaXNSZWFkeSkge1xuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdBbXBsaXR1ZGVTZXJ2aWNlIGlzIG5vdCByZWFkeScsIHtcbiAgICAgICAgaXNSZWFkeSxcbiAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZy51c2VySWQsXG4gICAgICAgIGhhc0ZlYXR1cmVGbGFnU2VydmljZTogISF0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UsXG4gICAgICAgIGhhc0FtcGxpdHVkZUFwaUtleTogISF0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc01vY2tBcGlLZXkpIHtcbiAgICAgIGxvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnTW9jayBBUEkga2V5IGRldGVjdGVkIOKAlCBydW5uaW5nIGluIG1vY2sgbW9kZSwgbm8gZXZlbnRzIHdpbGwgYmUgc2VudCB0byBBbXBsaXR1ZGUuJyxcbiAgICAgICAgdGhpcy5jb25maWcuYW1wbGl0dWRlQXBpS2V5LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYW1wbGl0dWRlQ2xpZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBEeW5hbWljIGltcG9ydCBrZWVwcyB0aGUgQW1wbGl0dWRlIFNESyBvdXQgb2YgdGhlIGVhZ2VyXG4gICAgICAgIC8vIGluamVjdGlvbi1idW5kbGUgY2h1bms7IHRyYWNrRXZlbnQgcXVldWVzIGJlaGluZCBpbml0UHJvbWlzZS5cbiAgICAgICAgY29uc3QgeyBjcmVhdGVJbnN0YW5jZSB9ID0gYXdhaXQgaW1wb3J0KCdAYW1wbGl0dWRlL2FuYWx5dGljcy1icm93c2VyJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCA9IGNyZWF0ZUluc3RhbmNlKCk7XG5cbiAgICAgICAgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlLmFkZCh0aGlzLmdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCkpO1xuICAgICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuaW5pdCh0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksIHRoaXMuY29uZmlnLnVzZXJJZCwge1xuICAgICAgICAgIHNlcnZlclpvbmU6IHRoaXMuY29uZmlnLmRhdGFSZXNpZGVuY3kgYXMgU2VydmVyWm9uZVR5cGUsXG4gICAgICAgICAgdHJhY2tpbmdPcHRpb25zOiB7XG4gICAgICAgICAgICBpcEFkZHJlc3M6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhdXRvY2FwdHVyZToge1xuICAgICAgICAgICAgYXR0cmlidXRpb246IHRydWUsXG4gICAgICAgICAgICBwYWdlVmlld3M6IHtcbiAgICAgICAgICAgICAgdHJhY2tIaXN0b3J5Q2hhbmdlczogJ3BhdGhPbmx5JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXNzaW9uczogZmFsc2UsXG4gICAgICAgICAgICBmb3JtSW50ZXJhY3Rpb25zOiBmYWxzZSxcbiAgICAgICAgICAgIGZpbGVEb3dubG9hZHM6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudCA9IGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsb2dnZXIubG9nRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG9yIGluaXRpYWxpemUgdGhlIEFtcGxpdHVkZSBTREsnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KHdpZGdldFR5cGU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAod2lkZ2V0VHlwZSkge1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuRmxvYXRpbmdCdXR0b25WMzpcbiAgICAgICAgcmV0dXJuICdmbG9hdGluZ19idXR0b24nO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuVHlwaW5nQW5pbWF0aW9uVjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5DaGF0UHJldmlld1YzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuU29jaWFsUHJvb2ZWMzpcbiAgICAgICAgcmV0dXJuICdlbWJlZGRlZF93aWRnZXQnO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuVGl0bGVkUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLlByb21wdENhcm91c2VsVjM6XG4gICAgICAgIHJldHVybiAnc3VnZ2VzdGlvbl9iYXInO1xuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvZHVjdENhcmRWMzpcbiAgICAgICAgcmV0dXJuICdpbWFnZV9wcm9tcHRfY2FyZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3Vua25vd24nO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBtYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRyaWdnZXJMb2NhdGlvbikge1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST0RVQ1RfQ0FSRF9URVhUX0ZJRUxEOlxuICAgICAgICByZXR1cm4gJ3Byb21wdF9jYXJkJztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5QUk9NUFRfQ0FST1VTRUw6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuVElUTEVEX1BST01QVF9DQVJPVVNFTDpcbiAgICAgICAgcmV0dXJuICd0b3BfcmV2aWV3c19zbmlwcGV0JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5UWVBJTkdfQU5JTUFUSU9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9QUklNQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfU0VDT05EQVJZX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5TT0NJQUxfUFJPT0ZfVEVYVF9GSUVMRDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfQ09NUEFSSVNPTl9QUk9NUFRfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1RFWFRfRklFTEQ6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX1RFWFRfRklFTEQ6XG4gICAgICAgIHJldHVybiAnY2hhdF9wcmV2aWV3JztcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX09WRVJMQVk6XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuRkxPQVRJTkdfQ0hBVF9DTE9TRV9CVVRUT046XG4gICAgICAgIHJldHVybiAnaW5fY2hhdCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJpZ2dlckxvY2F0aW9uIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICAvLyBUaGlzIGFsbG93cyB1cyB0byBtYXAgdGhlIGV2ZW50IHByb3BzIHRvIHRoZSBjb3JyZWN0IGZvcm1hdCBmb3IgdGhlIGxlZ2FjeSBhbXBsaXR1ZGUgZXZlbnRzXG4gIHN0YXRpYyBtYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH06IFRyYWNrRXZlbnRQYXJhbXMpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgbWVzc2FnZU1ldGFkYXRhID0gZXZlbnRQcm9wcz8ubWVzc2FnZV9tZXRhZGF0YSA/PyB7fTtcbiAgICBjb25zdCB0cmlnZ2VyTG9jYXRpb24gPVxuICAgICAgbWVzc2FnZU1ldGFkYXRhICE9PSBudWxsICYmXG4gICAgICB0eXBlb2YgbWVzc2FnZU1ldGFkYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgJ3RyaWdnZXJfbG9jYXRpb24nIGluIG1lc3NhZ2VNZXRhZGF0YVxuICAgICAgICA/IG1lc3NhZ2VNZXRhZGF0YS50cmlnZ2VyX2xvY2F0aW9uXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0Q29tcG9uZW50RXhwYW5kZWQpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24gPVxuICAgICAgICBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnRQcm9wcyxcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIC4uLm1lc3NhZ2VNZXRhZGF0YSxcbiAgICAgICAgICB0cmlnZ2VyX2xvY2F0aW9uOiBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uLFxuICAgICAgICAgIGZ1bGxfdHJpZ2dlcl9sb2NhdGlvbjogdHJpZ2dlckxvY2F0aW9uLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRWaXNpYmxlKSB7XG4gICAgICBjb25zdCBtYXBwZWRXaWRnZXRUeXBlID0gQW1wbGl0dWRlU2VydmljZS5tYXBXaWRnZXRUeXBlVG9DaGF0Q29tcG9uZW50KFxuICAgICAgICBldmVudFByb3BzPy53aWRnZXRfdHlwZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uID1cbiAgICAgICAgQW1wbGl0dWRlU2VydmljZS5tYXBUcmlnZ2VyTG9jYXRpb25Ub0NoYXRDb21wb25lbnQodHJpZ2dlckxvY2F0aW9uKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZW50UHJvcHMsXG4gICAgICAgIG1lc3NhZ2VfbWV0YWRhdGE6IHtcbiAgICAgICAgICAuLi5tZXNzYWdlTWV0YWRhdGEsXG4gICAgICAgICAgdHJpZ2dlcl9sb2NhdGlvbjogbWFwcGVkVHJpZ2dlckxvY2NhdGlvbixcbiAgICAgICAgICBmdWxsX3RyaWdnZXJfbG9jYXRpb246IHRyaWdnZXJMb2NhdGlvbixcbiAgICAgICAgfSxcbiAgICAgICAgY2hhdF9jb21wb25lbnQ6IG1hcHBlZFdpZGdldFR5cGUsXG4gICAgICAgICdjaGF0LmNvbXBvbmVudF92aXNpYmxlJzogdHJ1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBldmVudFByb3BzID8/IHt9O1xuICB9XG5cbiAgc3RhdGljIGlzVjNFbnZpdmVFdmVudChldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfCBFbnZpdmVNZXRyaWNzRXZlbnROYW1lKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoRW52aXZlTWV0cmljc0V2ZW50TmFtZSkuaW5jbHVkZXMoZXZlbnROYW1lIGFzIEVudml2ZU1ldHJpY3NFdmVudE5hbWUpO1xuICB9XG5cbiAgc3RhdGljIGRlY29yYXRlRXZlbnROYW1lKGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUpOiBzdHJpbmcge1xuICAgIGlmIChBbXBsaXR1ZGVTZXJ2aWNlLmlzVjNFbnZpdmVFdmVudChldmVudE5hbWUpKSB7XG4gICAgICByZXR1cm4gYFtFbnZpdmVdICR7ZXZlbnROYW1lfWA7XG4gICAgfVxuICAgIHJldHVybiBgW1NwaWZmeV0gJHtldmVudE5hbWV9YDtcbiAgfVxuXG4gIGFzeW5jIHRyYWNrRXZlbnQoe1xuICAgIGV2ZW50TmFtZSxcbiAgICBldmVudFByb3BzLFxuICAgIGV2ZW50R3JvdXBzLFxuICAgIGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgPSBmYWxzZSxcbiAgfTogVHJhY2tFdmVudFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzTW9ja0FwaUtleSkgcmV0dXJuO1xuICAgIGF3YWl0IHRoaXMuaW5pdFByb21pc2U7XG4gICAgbG9nZ2VyLmxvZ0RlYnVnKCdTdWJtaXR0aW5nIGV2ZW50JywgZXZlbnROYW1lKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGVjb3JhdGVkRXZlbnROYW1lID0gQW1wbGl0dWRlU2VydmljZS5kZWNvcmF0ZUV2ZW50TmFtZShldmVudE5hbWUpO1xuXG4gICAgICBpZiAoIXRoaXMuYW1wbGl0dWRlQ2xpZW50KSB7XG4gICAgICAgIGxvZ2dlci5sb2dXYXJuKCdhbXBsaXR1ZGUgY2xpZW50IHVuZGVmaW5lZCcsIHVuZGVmaW5lZCwge1xuICAgICAgICAgIGV2ZW50X25hbWU6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFwcGVkRXZlbnRQcm9wcyA9IEFtcGxpdHVkZVNlcnZpY2UubWFwRXZlbnRQcm9wcyh7IGV2ZW50TmFtZSwgZXZlbnRQcm9wcyB9KTtcblxuICAgICAgY29uc3QgZXZlbnREYXRhID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHM6IG1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKGV2ZW50RGF0YSk7XG4gICAgICAvLyBjYWxjdWxhdGUgYSBoYXNoIG9mIHRoZSBldmVudCBwcm9wZXJ0aWVzIHRvIHVzZSBhcyB0aGUgaW5zZXJ0X2lkIHNvIHRoYXQgZHVwbGljYXRlIGV2ZW50c1xuICAgICAgLy8gYXJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCBieSBBbXBsaXR1ZGVcbiAgICAgIGNvbnN0IGhhc2hCdWZmZXIgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGRhdGEpO1xuICAgICAgY29uc3QgaGFzaEFycmF5ID0gQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShoYXNoQnVmZmVyKSk7XG4gICAgICBjb25zdCBjdXJyZW50SW5zZXJ0SWQgPSBoYXNoQXJyYXkubWFwKGIgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG5cbiAgICAgIGxvZ2dlci5sb2dEZWJ1ZyhgYW1wbGl0dWRlIHRyYWNraW5nICR7ZGVjb3JhdGVkRXZlbnROYW1lfWAsIG51bGwsIHtcbiAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICBwcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmFtcGxpdHVkZUNsaWVudC50cmFjayhcbiAgICAgICAgZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgLi4udGhpcy5nZXREZWZhdWx0VHJhY2tpbmdQcm9wcyhldmVudE5hbWUpLFxuICAgICAgICAgIC4uLm1hcHBlZEV2ZW50UHJvcHMsXG4gICAgICAgICAgLi4uKG1hcHBlZEV2ZW50UHJvcHNcbiAgICAgICAgICAgID8gdGhpcy5ldmVudFByb3BzVG9QcmVmaXhlZEV2ZW50UHJvcHMoZXZlbnROYW1lLCBtYXBwZWRFdmVudFByb3BzKVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5ldmVudEdyb3VwcyxcbiAgICAgICAgICBpbnNlcnRfaWQ6IGN1cnJlbnRJbnNlcnRJZCxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFRPRE86IFB1bGwgZ2FFbmFibGVkIGZyb20gb3JnIGNvbmZpZyB3aGVuIGF2YWlsYWJsZS4gSGFyZGNvZGVkIHRvIHRydWUgZm9yIG5vdy5cbiAgICAgIGNvbnN0IGdhRW5hYmxlZCA9IHRydWU7XG5cbiAgICAgIGlmIChBbXBsaXR1ZGVTZXJ2aWNlLmlzVjNFbnZpdmVFdmVudChldmVudE5hbWUpICYmIGdhRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBtZXJnZWRQcm9wc0ZvckdBNCA9IHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKGV2ZW50TmFtZSksXG4gICAgICAgICAgLi4ubWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgfTtcbiAgICAgICAgcHJvamVjdFRvR0E0KGV2ZW50TmFtZSBhcyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBtZXJnZWRQcm9wc0ZvckdBNCk7XG4gICAgICB9IGVsc2UgaWYgKGFsc29TZW5kVG9Hb29nbGVBbmFseXRpY3MgJiYgZ2FFbmFibGVkKSB7XG4gICAgICAgIGxvZ2dlci5sb2dEZWJ1ZygnR0EgdHJhY2tpbmcnLCBkZWNvcmF0ZWRFdmVudE5hbWUpO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRhdGFMYXllcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55W10pLnB1c2goe1xuICAgICAgICAgICAgZXZlbnQ6IGRlY29yYXRlZEV2ZW50TmFtZSxcbiAgICAgICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci5sb2dFcnJvcignRXJyb3IgdHJhY2tpbmcgZXZlbnQnLCBlcnIsIHtcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudFByb3BzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRW5zdXJlIHRoYXQgc3VwcGxlbWVudGFsIGRlZmF1bHQgcHJvcHMgYXJlIG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBwcm9wc1xuICBzZXRTdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgdGhpcy5zdXBwbGVtZW50YWxEZWZhdWx0UHJvcHMgPSBwcm9wcztcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQW1CQSxNQUFNLFNBQVMsSUFBSUEsdUJBQU8sbUJBQW1CO0FBK0I3QyxNQUFNQyx3QkFBK0MsQ0FBQyxNQUFNLFdBQVc7QUFFdkUsTUFBTSx3QkFDSixnQkFDNEI7Q0FDNUIsTUFBTSw4QkFBYyxJQUFJLEtBQXlEO0FBQ2pGLEVBQUMsZUFBZSxFQUFFLEVBQUUsU0FBUSxNQUFLO0FBQy9CLE1BQUks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
@@ -109,7 +109,11 @@ var AmplitudeService = class AmplitudeService {
109
109
  setup: async () => void 0,
110
110
  execute: async (event) => {
111
111
  let enrichedEvent;
112
- if (["[Amplitude] Page Viewed", `[Spiffy] ${SpiffyMetricsEventName.BundleLoaded}`].includes(event.event_type)) {
112
+ if ([
113
+ "[Amplitude] Page Viewed",
114
+ `[Spiffy] ${SpiffyMetricsEventName.BundleLoaded}`,
115
+ `[Envive] ${EnviveMetricsEventName.PageViewed}`
116
+ ].includes(event.event_type)) {
113
117
  const globalProperties = {};
114
118
  if (this.config.show != null) globalProperties["globalProperties.show"] = String(this.config.show);
115
119
  globalProperties["globalProperties.env"] = String(this.config.env);
@@ -299,4 +303,4 @@ var AmplitudeService = class AmplitudeService {
299
303
 
300
304
  //#endregion
301
305
  export { AmplitudeService };
302
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbIkxvZ2dlciIsIkVYUEVSSU1FTlRfTkFNRVNQQUNFUzogRXhwZXJpbWVudE5hbWVzcGFjZVtdIiwiZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiIsImVucmljaGVkRXZlbnQ6IEV2ZW50IiwiZ2xvYmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsImN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hbXBsaXR1ZGVTZXJ2aWNlL2FtcGxpdHVkZVNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRzRGlzcGF0Y2hlciwgU3BpZmZ5RXZlbnQgfSBmcm9tICdzcmMvZXZlbnRzJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZUtleXMgfSBmcm9tICdzcmMvY29udGV4dHMvbG9jYWxTdG9yYWdlQ29udGV4dCc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7XG4gIEJyb3dzZXJDbGllbnQsXG4gIEVucmljaG1lbnRQbHVnaW4sXG4gIEV2ZW50LFxuICBTZXJ2ZXJab25lVHlwZSxcbn0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtdHlwZXMnO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL3NlcnZpY2VzL2ZlYXR1cmVGbGFnU2VydmljZSc7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5pbXBvcnQgeyBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzJztcbmltcG9ydCB7IEV4cGVyaW1lbnROYW1lc3BhY2UsIE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBwcm9qZWN0VG9HQTQgfSBmcm9tICcuLi9nYTRQcm9qZWN0aW9uU2VydmljZS9nYTRQcm9qZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSAnLi9ldmVudE5hbWVzJztcblxuLy8gUmUtZXhwb3J0IGV2ZW50IG5hbWVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9O1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdhbXBsaXR1ZGVTZXJ2aWNlJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tFdmVudFBhcmFtcyB7XG4gIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWU7XG4gIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZlbnRHcm91cHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1wbGl0dWRlU2VydmljZUNvbmZpZyB7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBhbXBsaXR1ZGVBcGlLZXk6IHN0cmluZztcbiAgZGF0YVJlc2lkZW5jeTogc3RyaW5nO1xuICBlbnY6IHN0cmluZztcbiAgY29udGV4dFNvdXJjZTogc3RyaW5nO1xuICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIHNob3c6IGJvb2xlYW47XG4gIGVudml2ZU9uOiBib29sZWFuO1xuICBlbmFibGVkRmVhdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgZ2V0TG9jYWxTdG9yYWdlSXRlbTogbnVsbCB8ICgoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwpO1xuICAvLyBDYXB0dXJlZCBhdCBjb25zdHJ1Y3Rpb24uIERyaXZlcyBgZXhwZXJpbWVudC57bnN9LipgIGV2ZW50LXByb3BlcnR5XG4gIC8vIGVucmljaG1lbnQuIFNvdXJjZWQgZnJvbSAvdjEvb3JnL2NvbmZpZyB3aGVuIHRoZSBgdXNlX3VuaWZpZWRfY29uZmlnYFxuICAvLyBnYXRlIGlzIG9uOyBvdGhlcndpc2Ugb21pdHRlZCAocHJvcHMgZW1pdCBhcyBudWxsKS5cbiAgZXhwZXJpbWVudEFzc2lnbm1lbnRzPzogT3JnQ29uZmlnRXhwZXJpbWVudEFzc2lnbm1lbnRbXTtcbn1cblxuLy8gTmFtZXNwYWNlcyBlbWl0dGVkIG9uIGV2ZXJ5IGV2ZW50IHdpdGggY29uc3RhbnQga2V5cywgc28gdGhlIEJpZ1F1ZXJ5XG4vLyBzY2hlbWEgaXMgc3RhYmxlIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggKGlmIGFueSkgZXhwZXJpbWVudCBpcyBydW5uaW5nLlxuLy8gQ3VycmVudGx5IGBtbGAgKyBgbWVyY2hhbnRgOyBtYXRjaGVzIGBFeHBlcmltZW50TmFtZXNwYWNlYC5cbmNvbnN0IEVYUEVSSU1FTlRfTkFNRVNQQUNFUzogRXhwZXJpbWVudE5hbWVzcGFjZVtdID0gWydtbCcsICdtZXJjaGFudCddO1xuXG5jb25zdCBidWlsZEV4cGVyaW1lbnRQcm9wcyA9IChcbiAgYXNzaWdubWVudHM6IE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50W10gfCB1bmRlZmluZWQsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IGJ5TmFtZXNwYWNlID0gbmV3IE1hcDxFeHBlcmltZW50TmFtZXNwYWNlLCBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudD4oKTtcbiAgKGFzc2lnbm1lbnRzID8/IFtdKS5mb3JFYWNoKGEgPT4ge1xuICAgIGlmIChhLmxheWVyX25hbWUgIT0gbnVsbCAmJiBhLm5hbWVzcGFjZSAhPSBudWxsKSB7XG4gICAgICBieU5hbWVzcGFjZS5zZXQoYS5uYW1lc3BhY2UsIGEpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBFWFBFUklNRU5UX05BTUVTUEFDRVMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigoYWNjLCBucykgPT4ge1xuICAgIGNvbnN0IGEgPSBieU5hbWVzcGFjZS5nZXQobnMpO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5sYXllcl9uYW1lYF0gPSBhPy5sYXllcl9uYW1lID8/IG51bGw7XG4gICAgYWNjW2BleHBlcmltZW50LiR7bnN9LmV4cGVyaW1lbnRfbmFtZWBdID0gYT8uYWxsb2NhdGVkX2V4cGVyaW1lbnRfbmFtZSA/PyBudWxsO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5ncm91cF9uYW1lYF0gPSBhPy5ncm91cF9uYW1lID8/IG51bGw7XG4gICAgLy8gYHJ1bGVfaWRgIHJlc2VydmVkIOKAlCBiYWNrZW5kIGRvZXNuJ3QgY3VycmVudGx5IHN1cmZhY2UgaXQuXG4gICAgYWNjW2BleHBlcmltZW50LiR7bnN9LnJ1bGVfaWRgXSA9IG51bGw7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufTtcblxuZXhwb3J0IGNsYXNzIEFtcGxpdHVkZVNlcnZpY2Uge1xuICBwcml2YXRlIGFtcGxpdHVkZUNsaWVudDogQnJvd3NlckNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzdXBwbGVtZW50YWxEZWZhdWx0UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSBjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWc7XG5cbiAgcHJpdmF0ZSBpbml0UHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRQcm9taXNlID0gdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNNb2NrQXBpS2V5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgPT09ICdtb2NrLWFtcGxpdHVkZS1rZXknO1xuICB9XG5cbiAgLy8gTXVzdCBub3QgZGVwZW5kIG9uIGBhbXBsaXR1ZGVDbGllbnRgOiB0aGUgU0RLIG5vdyBsb2FkcyB2aWEgZHluYW1pY1xuICAvLyBpbXBvcnQsIGFuZCBBbXBsaXR1ZGVQcm92aWRlciB1bm1vdW50cyBpdHMgZW50aXJlIHN1YnRyZWUgd2hpbGVcbiAgLy8gaXNSZWFkeSBpcyBmYWxzZSDigJQgZ2F0aW5nIG9uIHRoZSBjbGllbnQgd291bGQgYmxvY2sgd2lkZ2V0IHJlbmRlcmluZ1xuICAvLyBvbiB0aGUgYW5hbHl0aWNzIGNodW5rIGRvd25sb2FkLiBFdmVudHMgYXdhaXRlZCBpbiB0cmFja0V2ZW50IHF1ZXVlXG4gIC8vIGJlaGluZCBgaW5pdFByb21pc2VgIGluc3RlYWQuXG4gIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmXG4gICAgICB0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UgJiZcbiAgICAgIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSAmJlxuICAgICAgIXRoaXMuaXNNb2NrQXBpS2V5LFxuICAgICk7XG4gIH1cblxuICAvKiogUmVzb2x2ZXMgb25jZSBTREsgaW5pdGlhbGl6YXRpb24gaGFzIHNldHRsZWQgKG5ldmVyIHJlamVjdHMpLiAqL1xuICBpbml0aWFsaXplZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5pbml0UHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRMb2NhbFN0b3JhZ2VJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ3MoKSk7XG4gICAgY29uc3QgZ2F0ZXNQcm9wcyA9XG4gICAgICBmZWF0dXJlR2F0ZXMubGVuZ3RoID4gMFxuICAgICAgICA/IGZlYXR1cmVHYXRlcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KChhY2MsIFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbYGZlYXR1cmVfZ2F0ZS4ke25hbWV9YF06IHZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IHt9O1xuICAgIGNvbnN0IGV4cGVyaW1lbnRQcm9wcyA9IGJ1aWxkRXhwZXJpbWVudFByb3BzKHRoaXMuY29uZmlnLmV4cGVyaW1lbnRBc3NpZ25tZW50cyk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFByb3BzID0ge1xuICAgICAgJ2Vudmlyb25tZW50LmV4ZWN1dGlvbl9jb250ZXh0JzogJ2J1bmRsZScsXG4gICAgICAnZW52aXJvbm1lbnQucGFnZV91cmwnOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfdXNlcl9pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdlbnZpcm9ubWVudC5leGVjdXRpb25fZW52aXJvbm1lbnQnOiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgJ2Vudmlyb25tZW50LmNvbnRleHRfc291cmNlJzogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgICdlbnZpcm9ubWVudC5zYWxlc19hZ2VudF9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5zYWxlc0FnZW50ID8/IGZhbHNlLFxuICAgICAgJ2Vudmlyb25tZW50LnNlYXJjaF9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5zZWFyY2hBZ2VudCA/PyBmYWxzZSxcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfb25fcXVlcnlfcGFyYW0nOiB0aGlzLmNvbmZpZy5lbnZpdmVPbixcbiAgICAgICdlbnZpcm9ubWVudC53aW5kb3dfc2hvdyc6IHRoaXMuY29uZmlnLnNob3csXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LmVudml2ZSxcbiAgICB9O1xuXG4gICAgY29uc3Qgb3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzID0gQW1wbGl0dWRlU2VydmljZS5pc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZ1bGxGbGFnVmFsdWVzKCksXG4gICAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgICAgIC4uLmVudmlyb25tZW50UHJvcHMsXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIC4uLmdhdGVzUHJvcHMsXG4gICAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMsXG4gICAgICAuLi50aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyxcbiAgICAgIGFwcF9pZDogJ2NvbW1lcmNlLWNoYXQtcmVhY3QtY29tcG9uZW50JyxcbiAgICAgIGNoYXRfaWQ6IHRoaXMuZ2V0TG9jYWxTdG9yYWdlSXRlbShMb2NhbFN0b3JhZ2VLZXlzLkNoYXRJZCksXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudiB8fCAndW5rbm93bicsXG4gICAgICBhcHBfc291cmNlOiB0aGlzLmNvbmZpZy5jb250ZXh0U291cmNlLFxuICAgICAgb3JnX2lkOiB0aGlzLmNvbmZpZy5vcmdJZCxcbiAgICAgICdvcmcuc2hvcnRfbmFtZSc6IHRoaXMuY29uZmlnLm9yZ1Nob3J0TmFtZSxcbiAgICAgICd1c2VyLmlkJzogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgJ2NkcC51c2VyX2lkJzogbnVsbCxcbiAgICAgICdjZHAucHJvdmlkZXInOiBudWxsLFxuICAgICAgJ2V2ZW50LnNvdXJjZSc6ICd3ZWItYnJvd3NlcicsXG4gICAgICAnZXZlbnQudHlwZSc6ICd1c2VyLWFjdGl2aXR5JyxcbiAgICAgICdldmVudC5pZCc6IG51bGwsXG4gICAgICAnZXZlbnQuY2hhbm5lbCc6ICd3ZWInLFxuICAgICAgJ2V2ZW50LnRpbWVzdGFtcCc6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByaXZhdGUgZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwcmVmaXggPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGV2ZW50UHJvcHMpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2NbYCR7cHJlZml4fS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCk6IEVucmljaG1lbnRQbHVnaW4ge1xuICAgIGlmICh0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luID0ge1xuICAgICAgbmFtZTogJ3BhZ2Utdmlldy10cmFja2luZy1lbnJpY2htZW50JyxcbiAgICAgIHR5cGU6ICdlbnJpY2htZW50JyxcbiAgICAgIHNldHVwOiBhc3luYyAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxFdmVudD4gPT4ge1xuICAgICAgICBsZXQgZW5yaWNoZWRFdmVudDogRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzVG9FbnJpY2ggPSBbXG4gICAgICAgICAgJ1tBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkJyxcbiAgICAgICAgICBgW1NwaWZmeV0gJHtTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChldmVudHNUb0VucmljaC5pbmNsdWRlcyhldmVudC5ldmVudF90eXBlKSkge1xuICAgICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5zaG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuc2hvdyddID0gU3RyaW5nKHRoaXMuY29uZmlnLnNob3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLmVudiddID0gU3RyaW5nKHRoaXMuY29uZmlnLmVudik7XG5cbiAgICAgICAgICBjb25zdCBlbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZz8uZW5hYmxlZEZlYXR1cmVzID8/ICh7fSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiksXG4gICAgICAgICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgW2BlbmFibGVkRmVhdHVyZXMuJHtrZXl9YF06IGAke3ZhbHVlfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB0aW1pbmdQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgJ3RpbWluZy5lbnJpY2hlZF9hdF9tcyc6XG4gICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnBlcmZvcm1hbmNlPy5ub3coKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IHtcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgZXZlbnRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5ldmVudC5ldmVudF9wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50X3R5cGUgYXMgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC4uLmdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLmVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRpbWluZ1Byb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgRXZlbnRzRGlzcGF0Y2hlci5kaXNwYXRjaChTcGlmZnlFdmVudC5BTVBMSVRVREVfRVZFTlQsIGVucmljaGVkRXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBlbnJpY2hlZEV2ZW50O1xuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCA9IGVucmljaG1lbnQ7XG4gICAgcmV0dXJuIGVucmljaG1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNSZWFkeSA9IEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiYgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICApO1xuXG4gICAgaWYgKCFpc1JlYWR5KSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ0FtcGxpdHVkZVNlcnZpY2UgaXMgbm90IHJlYWR5Jywge1xuICAgICAgICBpc1JlYWR5LFxuICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICAgaGFzRmVhdHVyZUZsYWdTZXJ2aWNlOiAhIXRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSxcbiAgICAgICAgaGFzQW1wbGl0dWRlQXBpS2V5OiAhIXRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTW9ja0FwaUtleSkge1xuICAgICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICdNb2NrIEFQSSBrZXkgZGV0ZWN0ZWQg4oCUIHJ1bm5pbmcgaW4gbW9jayBtb2RlLCBubyBldmVudHMgd2lsbCBiZSBzZW50IHRvIEFtcGxpdHVkZS4nLFxuICAgICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIER5bmFtaWMgaW1wb3J0IGtlZXBzIHRoZSBBbXBsaXR1ZGUgU0RLIG91dCBvZiB0aGUgZWFnZXJcbiAgICAgICAgLy8gaW5qZWN0aW9uLWJ1bmRsZSBjaHVuazsgdHJhY2tFdmVudCBxdWV1ZXMgYmVoaW5kIGluaXRQcm9taXNlLlxuICAgICAgICBjb25zdCB7IGNyZWF0ZUluc3RhbmNlIH0gPSBhd2FpdCBpbXBvcnQoJ0BhbXBsaXR1ZGUvYW5hbHl0aWNzLWJyb3dzZXInKTtcbiAgICAgICAgY29uc3QgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50ID0gY3JlYXRlSW5zdGFuY2UoKTtcblxuICAgICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuYWRkKHRoaXMuZ2V0RXZlbnRUcmFja2luZ0VucmljaG1lbnQoKSk7XG4gICAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5pbml0KHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSwgdGhpcy5jb25maWcudXNlcklkLCB7XG4gICAgICAgICAgc2VydmVyWm9uZTogdGhpcy5jb25maWcuZGF0YVJlc2lkZW5jeSBhcyBTZXJ2ZXJab25lVHlwZSxcbiAgICAgICAgICB0cmFja2luZ09wdGlvbnM6IHtcbiAgICAgICAgICAgIGlwQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGF1dG9jYXB0dXJlOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIHBhZ2VWaWV3czoge1xuICAgICAgICAgICAgICB0cmFja0hpc3RvcnlDaGFuZ2VzOiAncGF0aE9ubHknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlc3Npb25zOiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1JbnRlcmFjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgICAgZmlsZURvd25sb2FkczogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50ID0gY3VycmVudEFtcGxpdHVkZUluc3RhbmNlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIGxvYWQgb3IgaW5pdGlhbGl6ZSB0aGUgQW1wbGl0dWRlIFNESycsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQod2lkZ2V0VHlwZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5GbG9hdGluZ0J1dHRvblYzOlxuICAgICAgICByZXR1cm4gJ2Zsb2F0aW5nX2J1dHRvbic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5UeXBpbmdBbmltYXRpb25WMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3VjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Tb2NpYWxQcm9vZlYzOlxuICAgICAgICByZXR1cm4gJ2VtYmVkZGVkX3dpZGdldCc7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgICAgcmV0dXJuICdzdWdnZXN0aW9uX2Jhcic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Qcm9kdWN0Q2FyZFYzOlxuICAgICAgICByZXR1cm4gJ2ltYWdlX3Byb21wdF9jYXJkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb246IHVua25vd24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHJpZ2dlckxvY2F0aW9uKSB7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPRFVDVF9DQVJEX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPRFVDVF9DQVJEX1RFWFRfRklFTEQ6XG4gICAgICAgIHJldHVybiAncHJvbXB0X2NhcmQnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST01QVF9DQVJPVVNFTDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5USVRMRURfUFJPTVBUX0NBUk9VU0VMOlxuICAgICAgICByZXR1cm4gJ3RvcF9yZXZpZXdzX3NuaXBwZXQnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlRZUElOR19BTklNQVRJT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1BSSU1BUllfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9TRUNPTkRBUllfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9URVhUX0ZJRUxEOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX0NPTVBBUklTT05fVEVYVF9GSUVMRDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfVEVYVF9GSUVMRDpcbiAgICAgICAgcmV0dXJuICdjaGF0X3ByZXZpZXcnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkZMT0FUSU5HX0NIQVRfT1ZFUkxBWTpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX0NMT1NFX0JVVFRPTjpcbiAgICAgICAgcmV0dXJuICdpbl9jaGF0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cmlnZ2VyTG9jYXRpb24gYXMgc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG1hcCB0aGUgZXZlbnQgcHJvcHMgdG8gdGhlIGNvcnJlY3QgZm9ybWF0IGZvciB0aGUgbGVnYWN5IGFtcGxpdHVkZSBldmVudHNcbiAgc3RhdGljIG1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfTogVHJhY2tFdmVudFBhcmFtcyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBtZXNzYWdlTWV0YWRhdGEgPSBldmVudFByb3BzPy5tZXNzYWdlX21ldGFkYXRhID8/IHt9O1xuICAgIGNvbnN0IHRyaWdnZXJMb2NhdGlvbiA9XG4gICAgICBtZXNzYWdlTWV0YWRhdGEgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiBtZXNzYWdlTWV0YWRhdGEgPT09ICdvYmplY3QnICYmXG4gICAgICAndHJpZ2dlcl9sb2NhdGlvbicgaW4gbWVzc2FnZU1ldGFkYXRhXG4gICAgICAgID8gbWVzc2FnZU1ldGFkYXRhLnRyaWdnZXJfbG9jYXRpb25cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRFeHBhbmRlZCkge1xuICAgICAgY29uc3QgbWFwcGVkVHJpZ2dlckxvY2NhdGlvbiA9XG4gICAgICAgIEFtcGxpdHVkZVNlcnZpY2UubWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBtZXNzYWdlX21ldGFkYXRhOiB7XG4gICAgICAgICAgLi4ubWVzc2FnZU1ldGFkYXRhLFxuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24sXG4gICAgICAgICAgZnVsbF90cmlnZ2VyX2xvY2F0aW9uOiB0cmlnZ2VyTG9jYXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChldmVudE5hbWUgPT09IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudFZpc2libGUpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFdpZGdldFR5cGUgPSBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQoXG4gICAgICAgIGV2ZW50UHJvcHM/LndpZGdldF90eXBlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24gPVxuICAgICAgICBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnRQcm9wcyxcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIC4uLm1lc3NhZ2VNZXRhZGF0YSxcbiAgICAgICAgICB0cmlnZ2VyX2xvY2F0aW9uOiBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uLFxuICAgICAgICAgIGZ1bGxfdHJpZ2dlcl9sb2NhdGlvbjogdHJpZ2dlckxvY2F0aW9uLFxuICAgICAgICB9LFxuICAgICAgICBjaGF0X2NvbXBvbmVudDogbWFwcGVkV2lkZ2V0VHlwZSxcbiAgICAgICAgJ2NoYXQuY29tcG9uZW50X3Zpc2libGUnOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50UHJvcHMgPz8ge307XG4gIH1cblxuICBzdGF0aWMgaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhFbnZpdmVNZXRyaWNzRXZlbnROYW1lKS5pbmNsdWRlcyhldmVudE5hbWUgYXMgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk7XG4gIH1cblxuICBzdGF0aWMgZGVjb3JhdGVFdmVudE5hbWUoZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk6IHN0cmluZyB7XG4gICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSkpIHtcbiAgICAgIHJldHVybiBgW0Vudml2ZV0gJHtldmVudE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGBbU3BpZmZ5XSAke2V2ZW50TmFtZX1gO1xuICB9XG5cbiAgYXN5bmMgdHJhY2tFdmVudCh7XG4gICAgZXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHMsXG4gICAgZXZlbnRHcm91cHMsXG4gICAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyA9IGZhbHNlLFxuICB9OiBUcmFja0V2ZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNNb2NrQXBpS2V5KSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5pbml0UHJvbWlzZTtcbiAgICBsb2dnZXIubG9nRGVidWcoJ1N1Ym1pdHRpbmcgZXZlbnQnLCBldmVudE5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvcmF0ZWRFdmVudE5hbWUgPSBBbXBsaXR1ZGVTZXJ2aWNlLmRlY29yYXRlRXZlbnROYW1lKGV2ZW50TmFtZSk7XG5cbiAgICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ2FtcGxpdHVkZSBjbGllbnQgdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBwZWRFdmVudFByb3BzID0gQW1wbGl0dWRlU2VydmljZS5tYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH0pO1xuXG4gICAgICBjb25zdCBldmVudERhdGEgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUoZXZlbnREYXRhKTtcbiAgICAgIC8vIGNhbGN1bGF0ZSBhIGhhc2ggb2YgdGhlIGV2ZW50IHByb3BlcnRpZXMgdG8gdXNlIGFzIHRoZSBpbnNlcnRfaWQgc28gdGhhdCBkdXBsaWNhdGUgZXZlbnRzXG4gICAgICAvLyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIGJ5IEFtcGxpdHVkZVxuICAgICAgY29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgZGF0YSk7XG4gICAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnNlcnRJZCA9IGhhc2hBcnJheS5tYXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcblxuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKGBhbXBsaXR1ZGUgdHJhY2tpbmcgJHtkZWNvcmF0ZWRFdmVudE5hbWV9YCwgbnVsbCwge1xuICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHByb3BzOiBtYXBwZWRFdmVudFByb3BzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LnRyYWNrKFxuICAgICAgICBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKGV2ZW50TmFtZSksXG4gICAgICAgICAgLi4ubWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgICAuLi4obWFwcGVkRXZlbnRQcm9wc1xuICAgICAgICAgICAgPyB0aGlzLmV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhldmVudE5hbWUsIG1hcHBlZEV2ZW50UHJvcHMpXG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmV2ZW50R3JvdXBzLFxuICAgICAgICAgIGluc2VydF9pZDogY3VycmVudEluc2VydElkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgLy8gVE9ETzogUHVsbCBnYUVuYWJsZWQgZnJvbSBvcmcgY29uZmlnIHdoZW4gYXZhaWxhYmxlLiBIYXJkY29kZWQgdG8gdHJ1ZSBmb3Igbm93LlxuICAgICAgY29uc3QgZ2FFbmFibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSkgJiYgZ2FFbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IG1lcmdlZFByb3BzRm9yR0E0ID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoZXZlbnROYW1lKSxcbiAgICAgICAgICAuLi5tYXBwZWRFdmVudFByb3BzLFxuICAgICAgICB9O1xuICAgICAgICBwcm9qZWN0VG9HQTQoZXZlbnROYW1lIGFzIEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIG1lcmdlZFByb3BzRm9yR0E0KTtcbiAgICAgIH0gZWxzZSBpZiAoYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyAmJiBnYUVuYWJsZWQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdHQSB0cmFja2luZycsIGRlY29yYXRlZEV2ZW50TmFtZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAod2luZG93LmRhdGFMYXllciBhcyBhbnlbXSkucHVzaCh7XG4gICAgICAgICAgICBldmVudDogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdFcnJvciB0cmFja2luZyBldmVudCcsIGVyciwge1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgdGhhdCBzdXBwbGVtZW50YWwgZGVmYXVsdCBwcm9wcyBhcmUgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIHByb3BzXG4gIHNldFN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyhwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyA9IHByb3BzO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBbUJBLE1BQU0sU0FBUyxJQUFJQSxlQUFPLG1CQUFtQjtBQStCN0MsTUFBTUMsd0JBQStDLENBQUMsTUFBTSxXQUFXO0FBRXZFLE1BQU0sd0JBQ0osZ0JBQzRCO0NBQzVCLE1BQU0sOEJBQWMsSUFBSSxLQUF5RDtBQUNqRixFQUFDLGVBQWUsRUFBRSxFQUFFLFNBQVEsTUFBSztBQUMvQixNQUFJLEVBQUUsY0FBYyxRQUFRLEVBQUUsYUFBYSxLQUN6QyxhQUFZLElBQUksRUFBRSxXQUFXLEVBQUU7R0FFakM7QUFDRixRQUFPLHNCQUFzQixRQUFpQyxLQUFLLE9BQU87RUFDeEUsTUFBTSxJQUFJLFlBQVksSUFBSSxHQUFHO0FBQzdCLE1BQUksY0FBYyxHQUFHLGdCQUFnQixHQUFHLGNBQWM7QUFDdEQsTUFBSSxjQUFjLEdBQUcscUJBQXFC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
306
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1wbGl0dWRlU2VydmljZS5qcyIsIm5hbWVzIjpbIkxvZ2dlciIsIkVYUEVSSU1FTlRfTkFNRVNQQUNFUzogRXhwZXJpbWVudE5hbWVzcGFjZVtdIiwiZW5yaWNobWVudDogRW5yaWNobWVudFBsdWdpbiIsImVucmljaGVkRXZlbnQ6IEV2ZW50IiwiZ2xvYmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiIsImN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZTogQnJvd3NlckNsaWVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9hbXBsaXR1ZGVTZXJ2aWNlL2FtcGxpdHVkZVNlcnZpY2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRzRGlzcGF0Y2hlciwgU3BpZmZ5RXZlbnQgfSBmcm9tICdzcmMvZXZlbnRzJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZUtleXMgfSBmcm9tICdzcmMvY29udGV4dHMvbG9jYWxTdG9yYWdlQ29udGV4dCc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7XG4gIEJyb3dzZXJDbGllbnQsXG4gIEVucmljaG1lbnRQbHVnaW4sXG4gIEV2ZW50LFxuICBTZXJ2ZXJab25lVHlwZSxcbn0gZnJvbSAnQGFtcGxpdHVkZS9hbmFseXRpY3MtdHlwZXMnO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdTZXJ2aWNlIH0gZnJvbSAnc3JjL3NlcnZpY2VzL2ZlYXR1cmVGbGFnU2VydmljZSc7XG5pbXBvcnQgeyBXaWRnZXRUeXBlVjMgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXNWMyc7XG5pbXBvcnQgeyBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzJztcbmltcG9ydCB7IEV4cGVyaW1lbnROYW1lc3BhY2UsIE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBwcm9qZWN0VG9HQTQgfSBmcm9tICcuLi9nYTRQcm9qZWN0aW9uU2VydmljZS9nYTRQcm9qZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgeyBFbnZpdmVNZXRyaWNzRXZlbnROYW1lLCBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSAnLi9ldmVudE5hbWVzJztcblxuLy8gUmUtZXhwb3J0IGV2ZW50IG5hbWVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHsgRW52aXZlTWV0cmljc0V2ZW50TmFtZSwgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9O1xuXG5jb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCdhbXBsaXR1ZGVTZXJ2aWNlJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2tFdmVudFBhcmFtcyB7XG4gIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWU7XG4gIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZlbnRHcm91cHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW1wbGl0dWRlU2VydmljZUNvbmZpZyB7XG4gIHVzZXJJZDogc3RyaW5nO1xuICBhbXBsaXR1ZGVBcGlLZXk6IHN0cmluZztcbiAgZGF0YVJlc2lkZW5jeTogc3RyaW5nO1xuICBlbnY6IHN0cmluZztcbiAgY29udGV4dFNvdXJjZTogc3RyaW5nO1xuICBvcmdTaG9ydE5hbWU6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgZmVhdHVyZUZsYWdTZXJ2aWNlOiBGZWF0dXJlRmxhZ1NlcnZpY2U7XG4gIHNob3c6IGJvb2xlYW47XG4gIGVudml2ZU9uOiBib29sZWFuO1xuICBlbmFibGVkRmVhdHVyZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcbiAgZ2V0TG9jYWxTdG9yYWdlSXRlbTogbnVsbCB8ICgoa2V5OiBzdHJpbmcpID0+IHN0cmluZyB8IG51bGwpO1xuICAvLyBDYXB0dXJlZCBhdCBjb25zdHJ1Y3Rpb24uIERyaXZlcyBgZXhwZXJpbWVudC57bnN9LipgIGV2ZW50LXByb3BlcnR5XG4gIC8vIGVucmljaG1lbnQuIFNvdXJjZWQgZnJvbSAvdjEvb3JnL2NvbmZpZyB3aGVuIHRoZSBgdXNlX3VuaWZpZWRfY29uZmlnYFxuICAvLyBnYXRlIGlzIG9uOyBvdGhlcndpc2Ugb21pdHRlZCAocHJvcHMgZW1pdCBhcyBudWxsKS5cbiAgZXhwZXJpbWVudEFzc2lnbm1lbnRzPzogT3JnQ29uZmlnRXhwZXJpbWVudEFzc2lnbm1lbnRbXTtcbn1cblxuLy8gTmFtZXNwYWNlcyBlbWl0dGVkIG9uIGV2ZXJ5IGV2ZW50IHdpdGggY29uc3RhbnQga2V5cywgc28gdGhlIEJpZ1F1ZXJ5XG4vLyBzY2hlbWEgaXMgc3RhYmxlIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggKGlmIGFueSkgZXhwZXJpbWVudCBpcyBydW5uaW5nLlxuLy8gQ3VycmVudGx5IGBtbGAgKyBgbWVyY2hhbnRgOyBtYXRjaGVzIGBFeHBlcmltZW50TmFtZXNwYWNlYC5cbmNvbnN0IEVYUEVSSU1FTlRfTkFNRVNQQUNFUzogRXhwZXJpbWVudE5hbWVzcGFjZVtdID0gWydtbCcsICdtZXJjaGFudCddO1xuXG5jb25zdCBidWlsZEV4cGVyaW1lbnRQcm9wcyA9IChcbiAgYXNzaWdubWVudHM6IE9yZ0NvbmZpZ0V4cGVyaW1lbnRBc3NpZ25tZW50W10gfCB1bmRlZmluZWQsXG4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IGJ5TmFtZXNwYWNlID0gbmV3IE1hcDxFeHBlcmltZW50TmFtZXNwYWNlLCBPcmdDb25maWdFeHBlcmltZW50QXNzaWdubWVudD4oKTtcbiAgKGFzc2lnbm1lbnRzID8/IFtdKS5mb3JFYWNoKGEgPT4ge1xuICAgIGlmIChhLmxheWVyX25hbWUgIT0gbnVsbCAmJiBhLm5hbWVzcGFjZSAhPSBudWxsKSB7XG4gICAgICBieU5hbWVzcGFjZS5zZXQoYS5uYW1lc3BhY2UsIGEpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBFWFBFUklNRU5UX05BTUVTUEFDRVMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigoYWNjLCBucykgPT4ge1xuICAgIGNvbnN0IGEgPSBieU5hbWVzcGFjZS5nZXQobnMpO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5sYXllcl9uYW1lYF0gPSBhPy5sYXllcl9uYW1lID8/IG51bGw7XG4gICAgYWNjW2BleHBlcmltZW50LiR7bnN9LmV4cGVyaW1lbnRfbmFtZWBdID0gYT8uYWxsb2NhdGVkX2V4cGVyaW1lbnRfbmFtZSA/PyBudWxsO1xuICAgIGFjY1tgZXhwZXJpbWVudC4ke25zfS5ncm91cF9uYW1lYF0gPSBhPy5ncm91cF9uYW1lID8/IG51bGw7XG4gICAgLy8gYHJ1bGVfaWRgIHJlc2VydmVkIOKAlCBiYWNrZW5kIGRvZXNuJ3QgY3VycmVudGx5IHN1cmZhY2UgaXQuXG4gICAgYWNjW2BleHBlcmltZW50LiR7bnN9LnJ1bGVfaWRgXSA9IG51bGw7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufTtcblxuZXhwb3J0IGNsYXNzIEFtcGxpdHVkZVNlcnZpY2Uge1xuICBwcml2YXRlIGFtcGxpdHVkZUNsaWVudDogQnJvd3NlckNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIGludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQ6IEVucmljaG1lbnRQbHVnaW4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzdXBwbGVtZW50YWxEZWZhdWx0UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSBjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWc7XG5cbiAgcHJpdmF0ZSBpbml0UHJvbWlzZTogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFtcGxpdHVkZVNlcnZpY2VDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmluaXRQcm9taXNlID0gdGhpcy5pbml0aWFsaXplKCk7XG4gIH1cblxuICBnZXQgaXNNb2NrQXBpS2V5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXkgPT09ICdtb2NrLWFtcGxpdHVkZS1rZXknO1xuICB9XG5cbiAgLy8gTXVzdCBub3QgZGVwZW5kIG9uIGBhbXBsaXR1ZGVDbGllbnRgOiB0aGUgU0RLIG5vdyBsb2FkcyB2aWEgZHluYW1pY1xuICAvLyBpbXBvcnQsIGFuZCBBbXBsaXR1ZGVQcm92aWRlciB1bm1vdW50cyBpdHMgZW50aXJlIHN1YnRyZWUgd2hpbGVcbiAgLy8gaXNSZWFkeSBpcyBmYWxzZSDigJQgZ2F0aW5nIG9uIHRoZSBjbGllbnQgd291bGQgYmxvY2sgd2lkZ2V0IHJlbmRlcmluZ1xuICAvLyBvbiB0aGUgYW5hbHl0aWNzIGNodW5rIGRvd25sb2FkLiBFdmVudHMgYXdhaXRlZCBpbiB0cmFja0V2ZW50IHF1ZXVlXG4gIC8vIGJlaGluZCBgaW5pdFByb21pc2VgIGluc3RlYWQuXG4gIGdldCBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCb29sZWFuKFxuICAgICAgdGhpcy5jb25maWcudXNlcklkICYmXG4gICAgICB0aGlzLmNvbmZpZy5mZWF0dXJlRmxhZ1NlcnZpY2UgJiZcbiAgICAgIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSAmJlxuICAgICAgIXRoaXMuaXNNb2NrQXBpS2V5LFxuICAgICk7XG4gIH1cblxuICAvKiogUmVzb2x2ZXMgb25jZSBTREsgaW5pdGlhbGl6YXRpb24gaGFzIHNldHRsZWQgKG5ldmVyIHJlamVjdHMpLiAqL1xuICBpbml0aWFsaXplZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5pbml0UHJvbWlzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmNvbmZpZy5nZXRMb2NhbFN0b3JhZ2VJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZ2V0TG9jYWxTdG9yYWdlSXRlbShrZXkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2FsU3RvcmFnZSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSxcbiAgKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZS5nZXRGZWF0dXJlRmxhZ3MoKSk7XG4gICAgY29uc3QgZ2F0ZXNQcm9wcyA9XG4gICAgICBmZWF0dXJlR2F0ZXMubGVuZ3RoID4gMFxuICAgICAgICA/IGZlYXR1cmVHYXRlcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KChhY2MsIFtuYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCBbYGZlYXR1cmVfZ2F0ZS4ke25hbWV9YF06IHZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IHt9O1xuICAgIGNvbnN0IGV4cGVyaW1lbnRQcm9wcyA9IGJ1aWxkRXhwZXJpbWVudFByb3BzKHRoaXMuY29uZmlnLmV4cGVyaW1lbnRBc3NpZ25tZW50cyk7XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFByb3BzID0ge1xuICAgICAgJ2Vudmlyb25tZW50LmV4ZWN1dGlvbl9jb250ZXh0JzogJ2J1bmRsZScsXG4gICAgICAnZW52aXJvbm1lbnQucGFnZV91cmwnOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfdXNlcl9pZCc6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICdlbnZpcm9ubWVudC5leGVjdXRpb25fZW52aXJvbm1lbnQnOiB0aGlzLmNvbmZpZy5lbnYgfHwgJ3Vua25vd24nLFxuICAgICAgJ2Vudmlyb25tZW50LmNvbnRleHRfc291cmNlJzogdGhpcy5jb25maWcuY29udGV4dFNvdXJjZSxcbiAgICAgICdlbnZpcm9ubWVudC5zYWxlc19hZ2VudF9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5zYWxlc0FnZW50ID8/IGZhbHNlLFxuICAgICAgJ2Vudmlyb25tZW50LnNlYXJjaF9lbmFibGVkJzogdGhpcy5jb25maWcuZW5hYmxlZEZlYXR1cmVzPy5zZWFyY2hBZ2VudCA/PyBmYWxzZSxcbiAgICAgICdlbnZpcm9ubWVudC5lbnZpdmVfb25fcXVlcnlfcGFyYW0nOiB0aGlzLmNvbmZpZy5lbnZpdmVPbixcbiAgICAgICdlbnZpcm9ubWVudC53aW5kb3dfc2hvdyc6IHRoaXMuY29uZmlnLnNob3csXG4gICAgICAnZW52aXJvbm1lbnQuZW52aXZlX2VuYWJsZWQnOiB0aGlzLmNvbmZpZy5lbmFibGVkRmVhdHVyZXM/LmVudml2ZSxcbiAgICB9O1xuXG4gICAgY29uc3Qgb3JnTGV2ZWxBbXBsaXR1ZGVUcmFja2luZ1Byb3BzID0gQW1wbGl0dWRlU2VydmljZS5pc1YzRW52aXZlRXZlbnQoZXZlbnROYW1lKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlLmdldEZ1bGxGbGFnVmFsdWVzKCksXG4gICAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgICAgIC4uLmVudmlyb25tZW50UHJvcHMsXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgIC4uLmdhdGVzUHJvcHMsXG4gICAgICAgICAgLi4uZXhwZXJpbWVudFByb3BzLFxuICAgICAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAuLi5vcmdMZXZlbEFtcGxpdHVkZVRyYWNraW5nUHJvcHMsXG4gICAgICAuLi50aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyxcbiAgICAgIGFwcF9pZDogJ2NvbW1lcmNlLWNoYXQtcmVhY3QtY29tcG9uZW50JyxcbiAgICAgIGNoYXRfaWQ6IHRoaXMuZ2V0TG9jYWxTdG9yYWdlSXRlbShMb2NhbFN0b3JhZ2VLZXlzLkNoYXRJZCksXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudiB8fCAndW5rbm93bicsXG4gICAgICBhcHBfc291cmNlOiB0aGlzLmNvbmZpZy5jb250ZXh0U291cmNlLFxuICAgICAgb3JnX2lkOiB0aGlzLmNvbmZpZy5vcmdJZCxcbiAgICAgICdvcmcuc2hvcnRfbmFtZSc6IHRoaXMuY29uZmlnLm9yZ1Nob3J0TmFtZSxcbiAgICAgICd1c2VyLmlkJzogdGhpcy5jb25maWcudXNlcklkLFxuICAgICAgJ2NkcC51c2VyX2lkJzogbnVsbCxcbiAgICAgICdjZHAucHJvdmlkZXInOiBudWxsLFxuICAgICAgJ2V2ZW50LnNvdXJjZSc6ICd3ZWItYnJvd3NlcicsXG4gICAgICAnZXZlbnQudHlwZSc6ICd1c2VyLWFjdGl2aXR5JyxcbiAgICAgICdldmVudC5pZCc6IG51bGwsXG4gICAgICAnZXZlbnQuY2hhbm5lbCc6ICd3ZWInLFxuICAgICAgJ2V2ZW50LnRpbWVzdGFtcCc6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIHByaXZhdGUgZXZlbnRQcm9wc1RvUHJlZml4ZWRFdmVudFByb3BzKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwcmVmaXggPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGV2ZW50UHJvcHMpLnJlZHVjZShcbiAgICAgIChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBhY2NbYCR7cHJlZml4fS4ke2tleX1gXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50VHJhY2tpbmdFbnJpY2htZW50KCk6IEVucmljaG1lbnRQbHVnaW4ge1xuICAgIGlmICh0aGlzLmludGVybmFsRXZlbnRUcmFja2luZ0VucmljaG1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnJpY2htZW50OiBFbnJpY2htZW50UGx1Z2luID0ge1xuICAgICAgbmFtZTogJ3BhZ2Utdmlldy10cmFja2luZy1lbnJpY2htZW50JyxcbiAgICAgIHR5cGU6ICdlbnJpY2htZW50JyxcbiAgICAgIHNldHVwOiBhc3luYyAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBleGVjdXRlOiBhc3luYyAoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxFdmVudD4gPT4ge1xuICAgICAgICBsZXQgZW5yaWNoZWRFdmVudDogRXZlbnQ7XG5cbiAgICAgICAgY29uc3QgZXZlbnRzVG9FbnJpY2ggPSBbXG4gICAgICAgICAgJ1tBbXBsaXR1ZGVdIFBhZ2UgVmlld2VkJyxcbiAgICAgICAgICBgW1NwaWZmeV0gJHtTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZH1gLFxuICAgICAgICAgIGBbRW52aXZlXSAke0Vudml2ZU1ldHJpY3NFdmVudE5hbWUuUGFnZVZpZXdlZH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChldmVudHNUb0VucmljaC5pbmNsdWRlcyhldmVudC5ldmVudF90eXBlKSkge1xuICAgICAgICAgIGNvbnN0IGdsb2JhbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5zaG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdsb2JhbFByb3BlcnRpZXNbJ2dsb2JhbFByb3BlcnRpZXMuc2hvdyddID0gU3RyaW5nKHRoaXMuY29uZmlnLnNob3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBnbG9iYWxQcm9wZXJ0aWVzWydnbG9iYWxQcm9wZXJ0aWVzLmVudiddID0gU3RyaW5nKHRoaXMuY29uZmlnLmVudik7XG5cbiAgICAgICAgICBjb25zdCBlbmFibGVkRmVhdHVyZXNQcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZz8uZW5hYmxlZEZlYXR1cmVzID8/ICh7fSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiksXG4gICAgICAgICAgKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oXG4gICAgICAgICAgICAoYWNjLCBba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAgICAgIC4uLmFjYyxcbiAgICAgICAgICAgICAgW2BlbmFibGVkRmVhdHVyZXMuJHtrZXl9YF06IGAke3ZhbHVlfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB0aW1pbmdQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgJ3RpbWluZy5lbnJpY2hlZF9hdF9tcyc6XG4gICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LnBlcmZvcm1hbmNlPy5ub3coKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IHtcbiAgICAgICAgICAgIC4uLmV2ZW50LFxuICAgICAgICAgICAgZXZlbnRfcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAuLi5ldmVudC5ldmVudF9wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50X3R5cGUgYXMgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIC4uLmdsb2JhbFByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLmVuYWJsZWRGZWF0dXJlc1Byb3BlcnRpZXMsXG4gICAgICAgICAgICAgIC4uLnRpbWluZ1Byb3BlcnRpZXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW5yaWNoZWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgRXZlbnRzRGlzcGF0Y2hlci5kaXNwYXRjaChTcGlmZnlFdmVudC5BTVBMSVRVREVfRVZFTlQsIGVucmljaGVkRXZlbnQpO1xuXG4gICAgICAgIHJldHVybiBlbnJpY2hlZEV2ZW50O1xuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuaW50ZXJuYWxFdmVudFRyYWNraW5nRW5yaWNobWVudCA9IGVucmljaG1lbnQ7XG4gICAgcmV0dXJuIGVucmljaG1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNSZWFkeSA9IEJvb2xlYW4oXG4gICAgICB0aGlzLmNvbmZpZy51c2VySWQgJiYgdGhpcy5jb25maWcuZmVhdHVyZUZsYWdTZXJ2aWNlICYmIHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICApO1xuXG4gICAgaWYgKCFpc1JlYWR5KSB7XG4gICAgICBsb2dnZXIubG9nRGVidWcoJ0FtcGxpdHVkZVNlcnZpY2UgaXMgbm90IHJlYWR5Jywge1xuICAgICAgICBpc1JlYWR5LFxuICAgICAgICB1c2VySWQ6IHRoaXMuY29uZmlnLnVzZXJJZCxcbiAgICAgICAgaGFzRmVhdHVyZUZsYWdTZXJ2aWNlOiAhIXRoaXMuY29uZmlnLmZlYXR1cmVGbGFnU2VydmljZSxcbiAgICAgICAgaGFzQW1wbGl0dWRlQXBpS2V5OiAhIXRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzTW9ja0FwaUtleSkge1xuICAgICAgbG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICdNb2NrIEFQSSBrZXkgZGV0ZWN0ZWQg4oCUIHJ1bm5pbmcgaW4gbW9jayBtb2RlLCBubyBldmVudHMgd2lsbCBiZSBzZW50IHRvIEFtcGxpdHVkZS4nLFxuICAgICAgICB0aGlzLmNvbmZpZy5hbXBsaXR1ZGVBcGlLZXksXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIER5bmFtaWMgaW1wb3J0IGtlZXBzIHRoZSBBbXBsaXR1ZGUgU0RLIG91dCBvZiB0aGUgZWFnZXJcbiAgICAgICAgLy8gaW5qZWN0aW9uLWJ1bmRsZSBjaHVuazsgdHJhY2tFdmVudCBxdWV1ZXMgYmVoaW5kIGluaXRQcm9taXNlLlxuICAgICAgICBjb25zdCB7IGNyZWF0ZUluc3RhbmNlIH0gPSBhd2FpdCBpbXBvcnQoJ0BhbXBsaXR1ZGUvYW5hbHl0aWNzLWJyb3dzZXInKTtcbiAgICAgICAgY29uc3QgY3VycmVudEFtcGxpdHVkZUluc3RhbmNlOiBCcm93c2VyQ2xpZW50ID0gY3JlYXRlSW5zdGFuY2UoKTtcblxuICAgICAgICBjdXJyZW50QW1wbGl0dWRlSW5zdGFuY2UuYWRkKHRoaXMuZ2V0RXZlbnRUcmFja2luZ0VucmljaG1lbnQoKSk7XG4gICAgICAgIGN1cnJlbnRBbXBsaXR1ZGVJbnN0YW5jZS5pbml0KHRoaXMuY29uZmlnLmFtcGxpdHVkZUFwaUtleSwgdGhpcy5jb25maWcudXNlcklkLCB7XG4gICAgICAgICAgc2VydmVyWm9uZTogdGhpcy5jb25maWcuZGF0YVJlc2lkZW5jeSBhcyBTZXJ2ZXJab25lVHlwZSxcbiAgICAgICAgICB0cmFja2luZ09wdGlvbnM6IHtcbiAgICAgICAgICAgIGlwQWRkcmVzczogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGF1dG9jYXB0dXJlOiB7XG4gICAgICAgICAgICBhdHRyaWJ1dGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIHBhZ2VWaWV3czoge1xuICAgICAgICAgICAgICB0cmFja0hpc3RvcnlDaGFuZ2VzOiAncGF0aE9ubHknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlc3Npb25zOiBmYWxzZSxcbiAgICAgICAgICAgIGZvcm1JbnRlcmFjdGlvbnM6IGZhbHNlLFxuICAgICAgICAgICAgZmlsZURvd25sb2FkczogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50ID0gY3VycmVudEFtcGxpdHVkZUluc3RhbmNlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIGxvYWQgb3IgaW5pdGlhbGl6ZSB0aGUgQW1wbGl0dWRlIFNESycsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQod2lkZ2V0VHlwZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5GbG9hdGluZ0J1dHRvblYzOlxuICAgICAgICByZXR1cm4gJ2Zsb2F0aW5nX2J1dHRvbic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5UeXBpbmdBbmltYXRpb25WMzpcbiAgICAgIGNhc2UgV2lkZ2V0VHlwZVYzLkNoYXRQcmV2aWV3VjM6XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Tb2NpYWxQcm9vZlYzOlxuICAgICAgICByZXR1cm4gJ2VtYmVkZGVkX3dpZGdldCc7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5UaXRsZWRQcm9tcHRDYXJvdXNlbFYzOlxuICAgICAgY2FzZSBXaWRnZXRUeXBlVjMuUHJvbXB0Q2Fyb3VzZWxWMzpcbiAgICAgICAgcmV0dXJuICdzdWdnZXN0aW9uX2Jhcic7XG4gICAgICBjYXNlIFdpZGdldFR5cGVWMy5Qcm9kdWN0Q2FyZFYzOlxuICAgICAgICByZXR1cm4gJ2ltYWdlX3Byb21wdF9jYXJkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIG1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb246IHVua25vd24pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHJpZ2dlckxvY2F0aW9uKSB7XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPRFVDVF9DQVJEX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuUFJPRFVDVF9DQVJEX1RFWFRfRklFTEQ6XG4gICAgICAgIHJldHVybiAncHJvbXB0X2NhcmQnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlBST01QVF9DQVJPVVNFTDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5USVRMRURfUFJPTVBUX0NBUk9VU0VMOlxuICAgICAgICByZXR1cm4gJ3RvcF9yZXZpZXdzX3NuaXBwZXQnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlRZUElOR19BTklNQVRJT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuU09DSUFMX1BST09GX1BSSU1BUllfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9TRUNPTkRBUllfQlVUVE9OOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLlNPQ0lBTF9QUk9PRl9URVhUX0ZJRUxEOlxuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkNIQVRfUFJFVklFV19DT01QQVJJU09OX1BST01QVF9CVVRUT046XG4gICAgICBjYXNlIENoYXRFbGVtZW50RGlzcGxheUxvY2F0aW9uVjMuQ0hBVF9QUkVWSUVXX0NPTVBBUklTT05fVEVYVF9GSUVMRDpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfUFJPTVBUX0JVVFRPTjpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5DSEFUX1BSRVZJRVdfVEVYVF9GSUVMRDpcbiAgICAgICAgcmV0dXJuICdjaGF0X3ByZXZpZXcnO1xuICAgICAgY2FzZSBDaGF0RWxlbWVudERpc3BsYXlMb2NhdGlvblYzLkZMT0FUSU5HX0NIQVRfT1ZFUkxBWTpcbiAgICAgIGNhc2UgQ2hhdEVsZW1lbnREaXNwbGF5TG9jYXRpb25WMy5GTE9BVElOR19DSEFUX0NMT1NFX0JVVFRPTjpcbiAgICAgICAgcmV0dXJuICdpbl9jaGF0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cmlnZ2VyTG9jYXRpb24gYXMgc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG1hcCB0aGUgZXZlbnQgcHJvcHMgdG8gdGhlIGNvcnJlY3QgZm9ybWF0IGZvciB0aGUgbGVnYWN5IGFtcGxpdHVkZSBldmVudHNcbiAgc3RhdGljIG1hcEV2ZW50UHJvcHMoeyBldmVudE5hbWUsIGV2ZW50UHJvcHMgfTogVHJhY2tFdmVudFBhcmFtcyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBtZXNzYWdlTWV0YWRhdGEgPSBldmVudFByb3BzPy5tZXNzYWdlX21ldGFkYXRhID8/IHt9O1xuICAgIGNvbnN0IHRyaWdnZXJMb2NhdGlvbiA9XG4gICAgICBtZXNzYWdlTWV0YWRhdGEgIT09IG51bGwgJiZcbiAgICAgIHR5cGVvZiBtZXNzYWdlTWV0YWRhdGEgPT09ICdvYmplY3QnICYmXG4gICAgICAndHJpZ2dlcl9sb2NhdGlvbicgaW4gbWVzc2FnZU1ldGFkYXRhXG4gICAgICAgID8gbWVzc2FnZU1ldGFkYXRhLnRyaWdnZXJfbG9jYXRpb25cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkNoYXRDb21wb25lbnRFeHBhbmRlZCkge1xuICAgICAgY29uc3QgbWFwcGVkVHJpZ2dlckxvY2NhdGlvbiA9XG4gICAgICAgIEFtcGxpdHVkZVNlcnZpY2UubWFwVHJpZ2dlckxvY2F0aW9uVG9DaGF0Q29tcG9uZW50KHRyaWdnZXJMb2NhdGlvbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudFByb3BzLFxuICAgICAgICBtZXNzYWdlX21ldGFkYXRhOiB7XG4gICAgICAgICAgLi4ubWVzc2FnZU1ldGFkYXRhLFxuICAgICAgICAgIHRyaWdnZXJfbG9jYXRpb246IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24sXG4gICAgICAgICAgZnVsbF90cmlnZ2VyX2xvY2F0aW9uOiB0cmlnZ2VyTG9jYXRpb24sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChldmVudE5hbWUgPT09IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQ2hhdENvbXBvbmVudFZpc2libGUpIHtcbiAgICAgIGNvbnN0IG1hcHBlZFdpZGdldFR5cGUgPSBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFdpZGdldFR5cGVUb0NoYXRDb21wb25lbnQoXG4gICAgICAgIGV2ZW50UHJvcHM/LndpZGdldF90eXBlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1hcHBlZFRyaWdnZXJMb2NjYXRpb24gPVxuICAgICAgICBBbXBsaXR1ZGVTZXJ2aWNlLm1hcFRyaWdnZXJMb2NhdGlvblRvQ2hhdENvbXBvbmVudCh0cmlnZ2VyTG9jYXRpb24pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnRQcm9wcyxcbiAgICAgICAgbWVzc2FnZV9tZXRhZGF0YToge1xuICAgICAgICAgIC4uLm1lc3NhZ2VNZXRhZGF0YSxcbiAgICAgICAgICB0cmlnZ2VyX2xvY2F0aW9uOiBtYXBwZWRUcmlnZ2VyTG9jY2F0aW9uLFxuICAgICAgICAgIGZ1bGxfdHJpZ2dlcl9sb2NhdGlvbjogdHJpZ2dlckxvY2F0aW9uLFxuICAgICAgICB9LFxuICAgICAgICBjaGF0X2NvbXBvbmVudDogbWFwcGVkV2lkZ2V0VHlwZSxcbiAgICAgICAgJ2NoYXQuY29tcG9uZW50X3Zpc2libGUnOiB0cnVlLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGV2ZW50UHJvcHMgPz8ge307XG4gIH1cblxuICBzdGF0aWMgaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB8IEVudml2ZU1ldHJpY3NFdmVudE5hbWUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhFbnZpdmVNZXRyaWNzRXZlbnROYW1lKS5pbmNsdWRlcyhldmVudE5hbWUgYXMgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk7XG4gIH1cblxuICBzdGF0aWMgZGVjb3JhdGVFdmVudE5hbWUoZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIHwgRW52aXZlTWV0cmljc0V2ZW50TmFtZSk6IHN0cmluZyB7XG4gICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSkpIHtcbiAgICAgIHJldHVybiBgW0Vudml2ZV0gJHtldmVudE5hbWV9YDtcbiAgICB9XG4gICAgcmV0dXJuIGBbU3BpZmZ5XSAke2V2ZW50TmFtZX1gO1xuICB9XG5cbiAgYXN5bmMgdHJhY2tFdmVudCh7XG4gICAgZXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHMsXG4gICAgZXZlbnRHcm91cHMsXG4gICAgYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyA9IGZhbHNlLFxuICB9OiBUcmFja0V2ZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNNb2NrQXBpS2V5KSByZXR1cm47XG4gICAgYXdhaXQgdGhpcy5pbml0UHJvbWlzZTtcbiAgICBsb2dnZXIubG9nRGVidWcoJ1N1Ym1pdHRpbmcgZXZlbnQnLCBldmVudE5hbWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvcmF0ZWRFdmVudE5hbWUgPSBBbXBsaXR1ZGVTZXJ2aWNlLmRlY29yYXRlRXZlbnROYW1lKGV2ZW50TmFtZSk7XG5cbiAgICAgIGlmICghdGhpcy5hbXBsaXR1ZGVDbGllbnQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ1dhcm4oJ2FtcGxpdHVkZSBjbGllbnQgdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgZXZlbnRfbmFtZTogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBwZWRFdmVudFByb3BzID0gQW1wbGl0dWRlU2VydmljZS5tYXBFdmVudFByb3BzKHsgZXZlbnROYW1lLCBldmVudFByb3BzIH0pO1xuXG4gICAgICBjb25zdCBldmVudERhdGEgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGV2ZW50TmFtZSxcbiAgICAgICAgZXZlbnRQcm9wczogbWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUoZXZlbnREYXRhKTtcbiAgICAgIC8vIGNhbGN1bGF0ZSBhIGhhc2ggb2YgdGhlIGV2ZW50IHByb3BlcnRpZXMgdG8gdXNlIGFzIHRoZSBpbnNlcnRfaWQgc28gdGhhdCBkdXBsaWNhdGUgZXZlbnRzXG4gICAgICAvLyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIGJ5IEFtcGxpdHVkZVxuICAgICAgY29uc3QgaGFzaEJ1ZmZlciA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgZGF0YSk7XG4gICAgICBjb25zdCBoYXNoQXJyYXkgPSBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGhhc2hCdWZmZXIpKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRJbnNlcnRJZCA9IGhhc2hBcnJheS5tYXAoYiA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcblxuICAgICAgbG9nZ2VyLmxvZ0RlYnVnKGBhbXBsaXR1ZGUgdHJhY2tpbmcgJHtkZWNvcmF0ZWRFdmVudE5hbWV9YCwgbnVsbCwge1xuICAgICAgICBldmVudF9uYW1lOiBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHByb3BzOiBtYXBwZWRFdmVudFByb3BzLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYW1wbGl0dWRlQ2xpZW50LnRyYWNrKFxuICAgICAgICBkZWNvcmF0ZWRFdmVudE5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi50aGlzLmdldERlZmF1bHRUcmFja2luZ1Byb3BzKGV2ZW50TmFtZSksXG4gICAgICAgICAgLi4ubWFwcGVkRXZlbnRQcm9wcyxcbiAgICAgICAgICAuLi4obWFwcGVkRXZlbnRQcm9wc1xuICAgICAgICAgICAgPyB0aGlzLmV2ZW50UHJvcHNUb1ByZWZpeGVkRXZlbnRQcm9wcyhldmVudE5hbWUsIG1hcHBlZEV2ZW50UHJvcHMpXG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmV2ZW50R3JvdXBzLFxuICAgICAgICAgIGluc2VydF9pZDogY3VycmVudEluc2VydElkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgLy8gVE9ETzogUHVsbCBnYUVuYWJsZWQgZnJvbSBvcmcgY29uZmlnIHdoZW4gYXZhaWxhYmxlLiBIYXJkY29kZWQgdG8gdHJ1ZSBmb3Igbm93LlxuICAgICAgY29uc3QgZ2FFbmFibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKEFtcGxpdHVkZVNlcnZpY2UuaXNWM0Vudml2ZUV2ZW50KGV2ZW50TmFtZSkgJiYgZ2FFbmFibGVkKSB7XG4gICAgICAgIGNvbnN0IG1lcmdlZFByb3BzRm9yR0E0ID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ2V0RGVmYXVsdFRyYWNraW5nUHJvcHMoZXZlbnROYW1lKSxcbiAgICAgICAgICAuLi5tYXBwZWRFdmVudFByb3BzLFxuICAgICAgICB9O1xuICAgICAgICBwcm9qZWN0VG9HQTQoZXZlbnROYW1lIGFzIEVudml2ZU1ldHJpY3NFdmVudE5hbWUsIG1lcmdlZFByb3BzRm9yR0E0KTtcbiAgICAgIH0gZWxzZSBpZiAoYWxzb1NlbmRUb0dvb2dsZUFuYWx5dGljcyAmJiBnYUVuYWJsZWQpIHtcbiAgICAgICAgbG9nZ2VyLmxvZ0RlYnVnKCdHQSB0cmFja2luZycsIGRlY29yYXRlZEV2ZW50TmFtZSk7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZGF0YUxheWVyKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAod2luZG93LmRhdGFMYXllciBhcyBhbnlbXSkucHVzaCh7XG4gICAgICAgICAgICBldmVudDogZGVjb3JhdGVkRXZlbnROYW1lLFxuICAgICAgICAgICAgZXZlbnRQcm9wcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nZ2VyLmxvZ0Vycm9yKCdFcnJvciB0cmFja2luZyBldmVudCcsIGVyciwge1xuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGV2ZW50UHJvcHMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBFbnN1cmUgdGhhdCBzdXBwbGVtZW50YWwgZGVmYXVsdCBwcm9wcyBhcmUgbWVyZ2VkIHdpdGggdGhlIGV4aXN0aW5nIHByb3BzXG4gIHNldFN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyhwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICB0aGlzLnN1cHBsZW1lbnRhbERlZmF1bHRQcm9wcyA9IHByb3BzO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBbUJBLE1BQU0sU0FBUyxJQUFJQSxlQUFPLG1CQUFtQjtBQStCN0MsTUFBTUMsd0JBQStDLENBQUMsTUFBTSxXQUFXO0FBRXZFLE1BQU0sd0JBQ0osZ0JBQzRCO0NBQzVCLE1BQU0sOEJBQWMsSUFBSSxLQUF5RDtBQUNqRixFQUFDLGVBQWUsRUFBRSxFQUFFLFNBQVEsTUFBSztBQUMvQixNQUFJLEVBQUUsY0FBYyxRQUFRLEVBQUUsYUFBYSxLQUN6QyxhQUFZLElBQUksRUFBRSxXQUFXLEVBQUU7R0FFakM7QUFDRixRQUFPLHNCQUFzQixRQUFpQyxLQUFLLE9BQU87RUFDeEUsTUFBTSxJQUFJLFlBQVksSUFBSSxHQUFHO0FBQzdC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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envive-ai/react-hooks",
3
- "version": "0.3.53",
3
+ "version": "0.3.55",
4
4
  "description": "React hooks for connecting to Envive AI services.",
5
5
  "keywords": [
6
6
  "react",
@@ -27,12 +27,20 @@ export enum FeatureGates {
27
27
  IsAiSuggestionsVariantEnabled = 'is_ai_suggestions_variant_enabled',
28
28
  IsAiSuggestionsVariantAEnabled = 'is_ai_suggestions_variant_a_enabled',
29
29
  IsAiSuggestionsVariantBEnabled = 'is_ai_suggestions_variant_b_enabled',
30
+ IsAiSuggestionsVariantCEnabled = 'is_ai_suggestions_variant_c_enabled',
31
+ IsAiSuggestionsVariantDEnabled = 'is_ai_suggestions_variant_d_enabled',
32
+ IsAiSuggestionsVariantEEnabled = 'is_ai_suggestions_variant_e_enabled',
33
+ IsAiSuggestionsVariantKEnabled = 'is_ai_suggestions_variant_k_enabled',
30
34
  // Serves the agentic storefront (FullPageSalesAgentV3 welcome overlay)
31
35
  // independently of the pdp/plp variant_b experiment. The backend serves the
32
36
  // storefront under this gate and falls back to variant_b only until this
33
37
  // ships, so an org can run the storefront without opting pdp/plp into variant_b.
34
38
  IsAiSuggestionsStorefrontEnabled = 'is_ai_suggestions_storefront_enabled',
35
39
  IsVoiceInputEnabled = 'is_voice_input_enabled',
40
+ // Resets the chat/conversation context to the new product when a PDP variant/color change
41
+ // updates the URL client-side (history.pushState/replaceState) without a full reload.
42
+ // Default OFF; enabled per-org via Statsig (initially Naturalizer) to de-risk rollout.
43
+ IsPdpVariantContextResetEnabled = 'is_pdp_variant_context_reset_enabled',
36
44
  // Statsig experiments / unified getWidgetConfig endpoint migration. When
37
45
  // true, EnviveConfigService calls getWidgetConfig (experiment-aware)
38
46
  // instead of the legacy getProductsConfigByVersion / getColorsAndFrontend
@@ -11,7 +11,12 @@ export interface FeatureFlagContextType {
11
11
  featureFlagService: FeatureFlagService | undefined;
12
12
  }
13
13
 
14
- const FeatureFlagServiceContext = createContext<FeatureFlagContextType | undefined>(undefined);
14
+ // Exported so consumers that must not throw when a provider is absent (e.g. PageProvider
15
+ // rendered bare in unit tests) can read it directly with `useContext` instead of the
16
+ // throwing `useFeatureFlagService` hook.
17
+ export const FeatureFlagServiceContext = createContext<FeatureFlagContextType | undefined>(
18
+ undefined,
19
+ );
15
20
 
16
21
  interface FeatureFlagServiceProviderProps {
17
22
  featureFlagService: FeatureFlagService;