@dextinity/cms-admin 2.0.0-canary-20260729062014
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/blocks/AnchorBlock.d.ts +5 -0
- package/lib/blocks/AnchorBlock.d.ts.map +1 -0
- package/lib/blocks/AnchorBlock.js +65 -0
- package/lib/blocks/DamVideoBlock.d.ts +9 -0
- package/lib/blocks/DamVideoBlock.d.ts.map +1 -0
- package/lib/blocks/DamVideoBlock.generated.d.ts +25 -0
- package/lib/blocks/DamVideoBlock.generated.d.ts.map +1 -0
- package/lib/blocks/DamVideoBlock.generated.js +5 -0
- package/lib/blocks/DamVideoBlock.js +214 -0
- package/lib/blocks/EmailLinkBlock.d.ts +4 -0
- package/lib/blocks/EmailLinkBlock.d.ts.map +1 -0
- package/lib/blocks/EmailLinkBlock.js +66 -0
- package/lib/blocks/ExternalLinkBlock.d.ts +6 -0
- package/lib/blocks/ExternalLinkBlock.d.ts.map +1 -0
- package/lib/blocks/ExternalLinkBlock.js +125 -0
- package/lib/blocks/InternalLinkBlock.d.ts +6 -0
- package/lib/blocks/InternalLinkBlock.d.ts.map +1 -0
- package/lib/blocks/InternalLinkBlock.generated.d.ts +20 -0
- package/lib/blocks/InternalLinkBlock.generated.d.ts.map +1 -0
- package/lib/blocks/InternalLinkBlock.generated.js +5 -0
- package/lib/blocks/InternalLinkBlock.js +200 -0
- package/lib/blocks/PhoneLinkBlock.d.ts +4 -0
- package/lib/blocks/PhoneLinkBlock.d.ts.map +1 -0
- package/lib/blocks/PhoneLinkBlock.js +60 -0
- package/lib/blocks/PixelImageBlock.d.ts +5 -0
- package/lib/blocks/PixelImageBlock.d.ts.map +1 -0
- package/lib/blocks/PixelImageBlock.fragment.d.ts +2 -0
- package/lib/blocks/PixelImageBlock.fragment.d.ts.map +1 -0
- package/lib/blocks/PixelImageBlock.fragment.generated.d.ts +20 -0
- package/lib/blocks/PixelImageBlock.fragment.generated.d.ts.map +1 -0
- package/lib/blocks/PixelImageBlock.fragment.generated.js +5 -0
- package/lib/blocks/PixelImageBlock.fragment.js +4 -0
- package/lib/blocks/PixelImageBlock.generated.d.ts +38 -0
- package/lib/blocks/PixelImageBlock.generated.d.ts.map +1 -0
- package/lib/blocks/PixelImageBlock.generated.js +5 -0
- package/lib/blocks/PixelImageBlock.js +296 -0
- package/lib/blocks/SpaceBlock.d.ts +7 -0
- package/lib/blocks/SpaceBlock.d.ts.map +1 -0
- package/lib/blocks/SpaceBlock.js +87 -0
- package/lib/blocks/SvgImageBlock.d.ts +6 -0
- package/lib/blocks/SvgImageBlock.d.ts.map +1 -0
- package/lib/blocks/SvgImageBlock.generated.d.ts +25 -0
- package/lib/blocks/SvgImageBlock.generated.d.ts.map +1 -0
- package/lib/blocks/SvgImageBlock.generated.js +5 -0
- package/lib/blocks/SvgImageBlock.js +195 -0
- package/lib/blocks/VimeoVideoBlock.d.ts +9 -0
- package/lib/blocks/VimeoVideoBlock.d.ts.map +1 -0
- package/lib/blocks/VimeoVideoBlock.js +162 -0
- package/lib/blocks/YouTubeVideoBlock.d.ts +9 -0
- package/lib/blocks/YouTubeVideoBlock.d.ts.map +1 -0
- package/lib/blocks/YouTubeVideoBlock.js +161 -0
- package/lib/blocks/clipboard/CannotPasteBlockDialog.d.ts +9 -0
- package/lib/blocks/clipboard/CannotPasteBlockDialog.d.ts.map +1 -0
- package/lib/blocks/clipboard/CannotPasteBlockDialog.js +38 -0
- package/lib/blocks/clipboard/useBlockClipboard.d.ts +26 -0
- package/lib/blocks/clipboard/useBlockClipboard.d.ts.map +1 -0
- package/lib/blocks/clipboard/useBlockClipboard.js +180 -0
- package/lib/blocks/common/AddBlockDrawer.d.ts +10 -0
- package/lib/blocks/common/AddBlockDrawer.d.ts.map +1 -0
- package/lib/blocks/common/AddBlockDrawer.js +268 -0
- package/lib/blocks/common/AdminComponentStickyFooter.d.ts +2 -0
- package/lib/blocks/common/AdminComponentStickyFooter.d.ts.map +1 -0
- package/lib/blocks/common/AdminComponentStickyFooter.js +13 -0
- package/lib/blocks/common/AdminComponentStickyHeader.d.ts +2 -0
- package/lib/blocks/common/AdminComponentStickyHeader.d.ts.map +1 -0
- package/lib/blocks/common/AdminComponentStickyHeader.js +13 -0
- package/lib/blocks/common/AdminTabsTabContent.d.ts +7 -0
- package/lib/blocks/common/AdminTabsTabContent.d.ts.map +1 -0
- package/lib/blocks/common/AdminTabsTabContent.js +48 -0
- package/lib/blocks/common/BlockAdminComponentButton.d.ts +11 -0
- package/lib/blocks/common/BlockAdminComponentButton.d.ts.map +1 -0
- package/lib/blocks/common/BlockAdminComponentButton.js +31 -0
- package/lib/blocks/common/BlockAdminComponentNestedButton.d.ts +11 -0
- package/lib/blocks/common/BlockAdminComponentNestedButton.d.ts.map +1 -0
- package/lib/blocks/common/BlockAdminComponentNestedButton.js +56 -0
- package/lib/blocks/common/BlockAdminComponentPaper.d.ts +8 -0
- package/lib/blocks/common/BlockAdminComponentPaper.d.ts.map +1 -0
- package/lib/blocks/common/BlockAdminComponentPaper.js +29 -0
- package/lib/blocks/common/BlockAdminComponentRoot.d.ts +7 -0
- package/lib/blocks/common/BlockAdminComponentRoot.d.ts.map +1 -0
- package/lib/blocks/common/BlockAdminComponentRoot.js +46 -0
- package/lib/blocks/common/BlockAdminComponentSection.d.ts +9 -0
- package/lib/blocks/common/BlockAdminComponentSection.d.ts.map +1 -0
- package/lib/blocks/common/BlockAdminComponentSection.js +52 -0
- package/lib/blocks/common/BlockAdminComponentSectionGroup.d.ts +7 -0
- package/lib/blocks/common/BlockAdminComponentSectionGroup.d.ts.map +1 -0
- package/lib/blocks/common/BlockAdminComponentSectionGroup.js +26 -0
- package/lib/blocks/common/BlockAdminTabLabel.d.ts +7 -0
- package/lib/blocks/common/BlockAdminTabLabel.d.ts.map +1 -0
- package/lib/blocks/common/BlockAdminTabLabel.js +22 -0
- package/lib/blocks/common/BlockAdminTabs.d.ts +7 -0
- package/lib/blocks/common/BlockAdminTabs.d.ts.map +1 -0
- package/lib/blocks/common/BlockAdminTabs.js +93 -0
- package/lib/blocks/common/Collapsible.d.ts +9 -0
- package/lib/blocks/common/Collapsible.d.ts.map +1 -0
- package/lib/blocks/common/Collapsible.js +24 -0
- package/lib/blocks/common/CollapsibleSwitchButtonHeader.d.ts +8 -0
- package/lib/blocks/common/CollapsibleSwitchButtonHeader.d.ts.map +1 -0
- package/lib/blocks/common/CollapsibleSwitchButtonHeader.js +28 -0
- package/lib/blocks/common/HiddenInSubroute.d.ts +5 -0
- package/lib/blocks/common/HiddenInSubroute.d.ts.map +1 -0
- package/lib/blocks/common/HiddenInSubroute.js +11 -0
- package/lib/blocks/common/blockRow/BlockPreviewContent.d.ts +12 -0
- package/lib/blocks/common/blockRow/BlockPreviewContent.d.ts.map +1 -0
- package/lib/blocks/common/blockRow/BlockPreviewContent.js +47 -0
- package/lib/blocks/common/blockRow/BlockPreviewContent.sc.d.ts +6 -0
- package/lib/blocks/common/blockRow/BlockPreviewContent.sc.d.ts.map +1 -0
- package/lib/blocks/common/blockRow/BlockPreviewContent.sc.js +60 -0
- package/lib/blocks/common/blockRow/BlockRow.d.ts +23 -0
- package/lib/blocks/common/blockRow/BlockRow.d.ts.map +1 -0
- package/lib/blocks/common/blockRow/BlockRow.js +226 -0
- package/lib/blocks/common/blockRow/BlockRow.sc.d.ts +17 -0
- package/lib/blocks/common/blockRow/BlockRow.sc.d.ts.map +1 -0
- package/lib/blocks/common/blockRow/BlockRow.sc.js +151 -0
- package/lib/blocks/common/blockRow/image/StackedImages.d.ts +8 -0
- package/lib/blocks/common/blockRow/image/StackedImages.d.ts.map +1 -0
- package/lib/blocks/common/blockRow/image/StackedImages.js +42 -0
- package/lib/blocks/common/blockRow/image/StackedImages.sc.d.ts +9 -0
- package/lib/blocks/common/blockRow/image/StackedImages.sc.d.ts.map +1 -0
- package/lib/blocks/common/blockRow/image/StackedImages.sc.js +132 -0
- package/lib/blocks/common/usePromise.d.ts +8 -0
- package/lib/blocks/common/usePromise.d.ts.map +1 -0
- package/lib/blocks/common/usePromise.js +56 -0
- package/lib/blocks/common/useScrollRestoration.d.ts +8 -0
- package/lib/blocks/common/useScrollRestoration.d.ts.map +1 -0
- package/lib/blocks/common/useScrollRestoration.js +23 -0
- package/lib/blocks/config/BlocksConfigContext.d.ts +16 -0
- package/lib/blocks/config/BlocksConfigContext.d.ts.map +1 -0
- package/lib/blocks/config/BlocksConfigContext.js +17 -0
- package/lib/blocks/context/BlockContext.d.ts +10 -0
- package/lib/blocks/context/BlockContext.d.ts.map +1 -0
- package/lib/blocks/context/BlockContext.js +2 -0
- package/lib/blocks/context/BlockContextProvider.d.ts +8 -0
- package/lib/blocks/context/BlockContextProvider.d.ts.map +1 -0
- package/lib/blocks/context/BlockContextProvider.js +10 -0
- package/lib/blocks/context/useBlockContext.d.ts +3 -0
- package/lib/blocks/context/useBlockContext.d.ts.map +1 -0
- package/lib/blocks/context/useBlockContext.js +26 -0
- package/lib/blocks/createImageLinkBlock.d.ts +11 -0
- package/lib/blocks/createImageLinkBlock.d.ts.map +1 -0
- package/lib/blocks/createImageLinkBlock.js +38 -0
- package/lib/blocks/createLinkBlock.d.ts +11 -0
- package/lib/blocks/createLinkBlock.d.ts.map +1 -0
- package/lib/blocks/createLinkBlock.js +172 -0
- package/lib/blocks/createRichTextBlock.d.ts +19 -0
- package/lib/blocks/createRichTextBlock.d.ts.map +1 -0
- package/lib/blocks/createRichTextBlock.js +346 -0
- package/lib/blocks/createSeoBlock.d.ts +7 -0
- package/lib/blocks/createSeoBlock.d.ts.map +1 -0
- package/lib/blocks/createSeoBlock.js +455 -0
- package/lib/blocks/createTableBlock.d.ts +23 -0
- package/lib/blocks/createTableBlock.d.ts.map +1 -0
- package/lib/blocks/createTableBlock.js +243 -0
- package/lib/blocks/createTextImageBlock.d.ts +19 -0
- package/lib/blocks/createTextImageBlock.d.ts.map +1 -0
- package/lib/blocks/createTextImageBlock.js +132 -0
- package/lib/blocks/createTextLinkBlock.d.ts +12 -0
- package/lib/blocks/createTextLinkBlock.d.ts.map +1 -0
- package/lib/blocks/createTextLinkBlock.js +140 -0
- package/lib/blocks/factories/columnsBlock/ColumnsIcon.d.ts +8 -0
- package/lib/blocks/factories/columnsBlock/ColumnsIcon.d.ts.map +1 -0
- package/lib/blocks/factories/columnsBlock/ColumnsIcon.js +81 -0
- package/lib/blocks/factories/columnsBlock/ColumnsLayoutPreview.d.ts +13 -0
- package/lib/blocks/factories/columnsBlock/ColumnsLayoutPreview.d.ts.map +1 -0
- package/lib/blocks/factories/columnsBlock/ColumnsLayoutPreview.js +63 -0
- package/lib/blocks/factories/columnsBlock/FinalFormColumnsSelect.d.ts +7 -0
- package/lib/blocks/factories/columnsBlock/FinalFormColumnsSelect.d.ts.map +1 -0
- package/lib/blocks/factories/columnsBlock/FinalFormColumnsSelect.js +26 -0
- package/lib/blocks/factories/columnsBlock/FinalFormLayoutSelect.d.ts +8 -0
- package/lib/blocks/factories/columnsBlock/FinalFormLayoutSelect.d.ts.map +1 -0
- package/lib/blocks/factories/columnsBlock/FinalFormLayoutSelect.js +161 -0
- package/lib/blocks/factories/createBlocksBlock.d.ts +59 -0
- package/lib/blocks/factories/createBlocksBlock.d.ts.map +1 -0
- package/lib/blocks/factories/createBlocksBlock.js +1071 -0
- package/lib/blocks/factories/createColumnsBlock.d.ts +37 -0
- package/lib/blocks/factories/createColumnsBlock.d.ts.map +1 -0
- package/lib/blocks/factories/createColumnsBlock.js +672 -0
- package/lib/blocks/factories/createCompositeBlock.d.ts +94 -0
- package/lib/blocks/factories/createCompositeBlock.d.ts.map +1 -0
- package/lib/blocks/factories/createCompositeBlock.js +308 -0
- package/lib/blocks/factories/createListBlock.d.ts +59 -0
- package/lib/blocks/factories/createListBlock.d.ts.map +1 -0
- package/lib/blocks/factories/createListBlock.js +686 -0
- package/lib/blocks/factories/createOneOfBlock.d.ts +52 -0
- package/lib/blocks/factories/createOneOfBlock.d.ts.map +1 -0
- package/lib/blocks/factories/createOneOfBlock.js +644 -0
- package/lib/blocks/factories/createOptionalBlock.d.ts +21 -0
- package/lib/blocks/factories/createOptionalBlock.d.ts.map +1 -0
- package/lib/blocks/factories/createOptionalBlock.js +253 -0
- package/lib/blocks/factories/listBlock/createUseAdminComponent.d.ts +29 -0
- package/lib/blocks/factories/listBlock/createUseAdminComponent.d.ts.map +1 -0
- package/lib/blocks/factories/listBlock/createUseAdminComponent.js +297 -0
- package/lib/blocks/factories/spaceBlock/createSpaceBlock.d.ts +15 -0
- package/lib/blocks/factories/spaceBlock/createSpaceBlock.d.ts.map +1 -0
- package/lib/blocks/factories/spaceBlock/createSpaceBlock.js +72 -0
- package/lib/blocks/form/AutosaveFinalForm.d.ts +7 -0
- package/lib/blocks/form/AutosaveFinalForm.d.ts.map +1 -0
- package/lib/blocks/form/AutosaveFinalForm.js +39 -0
- package/lib/blocks/form/BlocksFinalForm.d.ts +4 -0
- package/lib/blocks/form/BlocksFinalForm.d.ts.map +1 -0
- package/lib/blocks/form/BlocksFinalForm.js +73 -0
- package/lib/blocks/form/createFinalFormBlock.d.ts +5 -0
- package/lib/blocks/form/createFinalFormBlock.d.ts.map +1 -0
- package/lib/blocks/form/createFinalFormBlock.js +19 -0
- package/lib/blocks/helpers/VideoOptionsFields.d.ts +2 -0
- package/lib/blocks/helpers/VideoOptionsFields.d.ts.map +1 -0
- package/lib/blocks/helpers/VideoOptionsFields.js +42 -0
- package/lib/blocks/helpers/composeBlocks/composeBlocks.d.ts +23 -0
- package/lib/blocks/helpers/composeBlocks/composeBlocks.d.ts.map +1 -0
- package/lib/blocks/helpers/composeBlocks/composeBlocks.js +364 -0
- package/lib/blocks/helpers/composeBlocks/createCompositeBlockField.d.ts +13 -0
- package/lib/blocks/helpers/composeBlocks/createCompositeBlockField.d.ts.map +1 -0
- package/lib/blocks/helpers/composeBlocks/createCompositeBlockField.js +17 -0
- package/lib/blocks/helpers/composeBlocks/createCompositeBlockFields.d.ts +12 -0
- package/lib/blocks/helpers/composeBlocks/createCompositeBlockFields.d.ts.map +1 -0
- package/lib/blocks/helpers/composeBlocks/createCompositeBlockFields.js +17 -0
- package/lib/blocks/helpers/composeBlocks/createSettingsBlock.d.ts +12 -0
- package/lib/blocks/helpers/composeBlocks/createSettingsBlock.d.ts.map +1 -0
- package/lib/blocks/helpers/composeBlocks/createSettingsBlock.js +78 -0
- package/lib/blocks/helpers/composeBlocks/types.d.ts +58 -0
- package/lib/blocks/helpers/composeBlocks/types.d.ts.map +1 -0
- package/lib/blocks/helpers/composeBlocks/types.js +1 -0
- package/lib/blocks/helpers/composeBlocks/utility-types.d.ts +7 -0
- package/lib/blocks/helpers/composeBlocks/utility-types.d.ts.map +1 -0
- package/lib/blocks/helpers/composeBlocks/utility-types.js +1 -0
- package/lib/blocks/helpers/composeBlocks/utils.d.ts +12 -0
- package/lib/blocks/helpers/composeBlocks/utils.d.ts.map +1 -0
- package/lib/blocks/helpers/composeBlocks/utils.js +136 -0
- package/lib/blocks/helpers/createBlockSkeleton.d.ts +8 -0
- package/lib/blocks/helpers/createBlockSkeleton.d.ts.map +1 -0
- package/lib/blocks/helpers/createBlockSkeleton.js +130 -0
- package/lib/blocks/helpers/createCompositeBlockSelectField.d.ts +17 -0
- package/lib/blocks/helpers/createCompositeBlockSelectField.d.ts.map +1 -0
- package/lib/blocks/helpers/createCompositeBlockSelectField.js +48 -0
- package/lib/blocks/helpers/createCompositeBlockSwitchField.d.ts +11 -0
- package/lib/blocks/helpers/createCompositeBlockSwitchField.d.ts.map +1 -0
- package/lib/blocks/helpers/createCompositeBlockSwitchField.js +45 -0
- package/lib/blocks/helpers/createCompositeBlockTextField.d.ts +16 -0
- package/lib/blocks/helpers/createCompositeBlockTextField.d.ts.map +1 -0
- package/lib/blocks/helpers/createCompositeBlockTextField.js +61 -0
- package/lib/blocks/helpers/decomposeUpdateStateAction.d.ts +13 -0
- package/lib/blocks/helpers/decomposeUpdateStateAction.d.ts.map +1 -0
- package/lib/blocks/helpers/decomposeUpdateStateAction.js +42 -0
- package/lib/blocks/helpers/deduplicateBlockDependencies.d.ts +3 -0
- package/lib/blocks/helpers/deduplicateBlockDependencies.d.ts.map +1 -0
- package/lib/blocks/helpers/deduplicateBlockDependencies.js +28 -0
- package/lib/blocks/helpers/isBlockInterface.d.ts +3 -0
- package/lib/blocks/helpers/isBlockInterface.d.ts.map +1 -0
- package/lib/blocks/helpers/isBlockInterface.js +7 -0
- package/lib/blocks/helpers/withAdditionalBlockAttributes.d.ts +7 -0
- package/lib/blocks/helpers/withAdditionalBlockAttributes.d.ts.map +1 -0
- package/lib/blocks/helpers/withAdditionalBlockAttributes.js +59 -0
- package/lib/blocks/iframebridge/HoverPreviewComponent.d.ts +7 -0
- package/lib/blocks/iframebridge/HoverPreviewComponent.d.ts.map +1 -0
- package/lib/blocks/iframebridge/HoverPreviewComponent.js +53 -0
- package/lib/blocks/iframebridge/HoverPreviewComponent.sc.d.ts +8 -0
- package/lib/blocks/iframebridge/HoverPreviewComponent.sc.d.ts.map +1 -0
- package/lib/blocks/iframebridge/HoverPreviewComponent.sc.js +47 -0
- package/lib/blocks/iframebridge/IFrameBridge.d.ts +20 -0
- package/lib/blocks/iframebridge/IFrameBridge.d.ts.map +1 -0
- package/lib/blocks/iframebridge/IFrameBridge.js +155 -0
- package/lib/blocks/iframebridge/IFrameMessage.d.ts +122 -0
- package/lib/blocks/iframebridge/IFrameMessage.d.ts.map +1 -0
- package/lib/blocks/iframebridge/IFrameMessage.js +75 -0
- package/lib/blocks/iframebridge/SelectPreviewComponent.d.ts +5 -0
- package/lib/blocks/iframebridge/SelectPreviewComponent.d.ts.map +1 -0
- package/lib/blocks/iframebridge/SelectPreviewComponent.js +17 -0
- package/lib/blocks/iframebridge/useIFrameBridge.d.ts +3 -0
- package/lib/blocks/iframebridge/useIFrameBridge.d.ts.map +1 -0
- package/lib/blocks/iframebridge/useIFrameBridge.js +5 -0
- package/lib/blocks/image/EditImageDialog.d.ts +31 -0
- package/lib/blocks/image/EditImageDialog.d.ts.map +1 -0
- package/lib/blocks/image/EditImageDialog.js +268 -0
- package/lib/blocks/rte/extension/CmsLink/Decorator.d.ts +4 -0
- package/lib/blocks/rte/extension/CmsLink/Decorator.d.ts.map +1 -0
- package/lib/blocks/rte/extension/CmsLink/Decorator.js +12 -0
- package/lib/blocks/rte/extension/CmsLink/EditorComponent.d.ts +9 -0
- package/lib/blocks/rte/extension/CmsLink/EditorComponent.d.ts.map +1 -0
- package/lib/blocks/rte/extension/CmsLink/EditorComponent.js +10 -0
- package/lib/blocks/rte/extension/CmsLink/createCmsLinkToolbarButton.d.ts +13 -0
- package/lib/blocks/rte/extension/CmsLink/createCmsLinkToolbarButton.d.ts.map +1 -0
- package/lib/blocks/rte/extension/CmsLink/createCmsLinkToolbarButton.js +164 -0
- package/lib/blocks/seo/useSeoTagGeneration.d.ts +3 -0
- package/lib/blocks/seo/useSeoTagGeneration.d.ts.map +1 -0
- package/lib/blocks/seo/useSeoTagGeneration.generated.d.ts +21 -0
- package/lib/blocks/seo/useSeoTagGeneration.generated.d.ts.map +1 -0
- package/lib/blocks/seo/useSeoTagGeneration.generated.js +5 -0
- package/lib/blocks/seo/useSeoTagGeneration.js +167 -0
- package/lib/blocks/seo/useSitemapChangeFrequencyFormOptions.d.ts +6 -0
- package/lib/blocks/seo/useSitemapChangeFrequencyFormOptions.d.ts.map +1 -0
- package/lib/blocks/seo/useSitemapChangeFrequencyFormOptions.js +48 -0
- package/lib/blocks/seo/useSitemapPagePriorityFormOptions.d.ts +6 -0
- package/lib/blocks/seo/useSitemapPagePriorityFormOptions.d.ts.map +1 -0
- package/lib/blocks/seo/useSitemapPagePriorityFormOptions.js +48 -0
- package/lib/blocks/table/CellValue.d.ts +9 -0
- package/lib/blocks/table/CellValue.d.ts.map +1 -0
- package/lib/blocks/table/CellValue.js +86 -0
- package/lib/blocks/table/ColumnHeader.d.ts +16 -0
- package/lib/blocks/table/ColumnHeader.d.ts.map +1 -0
- package/lib/blocks/table/ColumnHeader.js +296 -0
- package/lib/blocks/table/EditCell.d.ts +3 -0
- package/lib/blocks/table/EditCell.d.ts.map +1 -0
- package/lib/blocks/table/EditCell.js +119 -0
- package/lib/blocks/table/FailedToPasteSnackbar.d.ts +3 -0
- package/lib/blocks/table/FailedToPasteSnackbar.d.ts.map +1 -0
- package/lib/blocks/table/FailedToPasteSnackbar.js +23 -0
- package/lib/blocks/table/RowActionsCell.d.ts +13 -0
- package/lib/blocks/table/RowActionsCell.d.ts.map +1 -0
- package/lib/blocks/table/RowActionsCell.js +240 -0
- package/lib/blocks/table/TableBlockContext.d.ts +11 -0
- package/lib/blocks/table/TableBlockContext.d.ts.map +1 -0
- package/lib/blocks/table/TableBlockContext.js +20 -0
- package/lib/blocks/table/TableBlockGrid.d.ts +9 -0
- package/lib/blocks/table/TableBlockGrid.d.ts.map +1 -0
- package/lib/blocks/table/TableBlockGrid.js +244 -0
- package/lib/blocks/table/__mocks__/TableBlockData.mocks.js +203 -0
- package/lib/blocks/table/dataGridStyles.d.ts +3 -0
- package/lib/blocks/table/dataGridStyles.d.ts.map +1 -0
- package/lib/blocks/table/dataGridStyles.js +59 -0
- package/lib/blocks/table/utils/column.d.ts +43 -0
- package/lib/blocks/table/utils/column.d.ts.map +1 -0
- package/lib/blocks/table/utils/column.js +138 -0
- package/lib/blocks/table/utils/ensureMinimumTableState.d.ts +4 -0
- package/lib/blocks/table/utils/ensureMinimumTableState.d.ts.map +1 -0
- package/lib/blocks/table/utils/ensureMinimumTableState.js +49 -0
- package/lib/blocks/table/utils/getClipboardValueForSchema.d.ts +3 -0
- package/lib/blocks/table/utils/getClipboardValueForSchema.d.ts.map +1 -0
- package/lib/blocks/table/utils/getClipboardValueForSchema.js +45 -0
- package/lib/blocks/table/utils/row.d.ts +18 -0
- package/lib/blocks/table/utils/row.d.ts.map +1 -0
- package/lib/blocks/table/utils/row.js +124 -0
- package/lib/blocks/table/utils/rteSchema.d.ts +5 -0
- package/lib/blocks/table/utils/rteSchema.d.ts.map +1 -0
- package/lib/blocks/table/utils/rteSchema.js +4 -0
- package/lib/blocks/table/utils/useRecentlyPastedIds.d.ts +5 -0
- package/lib/blocks/table/utils/useRecentlyPastedIds.d.ts.map +1 -0
- package/lib/blocks/table/utils/useRecentlyPastedIds.js +45 -0
- package/lib/blocks/tipTap/ChildBlocksContext.d.ts +3 -0
- package/lib/blocks/tipTap/ChildBlocksContext.d.ts.map +1 -0
- package/lib/blocks/tipTap/ChildBlocksContext.js +2 -0
- package/lib/blocks/tipTap/InlineStyleContext.d.ts +3 -0
- package/lib/blocks/tipTap/InlineStyleContext.d.ts.map +1 -0
- package/lib/blocks/tipTap/InlineStyleContext.js +2 -0
- package/lib/blocks/tipTap/TextBlockStyleContext.d.ts +3 -0
- package/lib/blocks/tipTap/TextBlockStyleContext.d.ts.map +1 -0
- package/lib/blocks/tipTap/TextBlockStyleContext.js +2 -0
- package/lib/blocks/tipTap/TipTapBlockDialog.d.ts +12 -0
- package/lib/blocks/tipTap/TipTapBlockDialog.d.ts.map +1 -0
- package/lib/blocks/tipTap/TipTapBlockDialog.js +94 -0
- package/lib/blocks/tipTap/TipTapLinkDialog.d.ts +10 -0
- package/lib/blocks/tipTap/TipTapLinkDialog.d.ts.map +1 -0
- package/lib/blocks/tipTap/TipTapLinkDialog.js +105 -0
- package/lib/blocks/tipTap/TipTapToolbar.d.ts +14 -0
- package/lib/blocks/tipTap/TipTapToolbar.d.ts.map +1 -0
- package/lib/blocks/tipTap/TipTapToolbar.js +745 -0
- package/lib/blocks/tipTap/createTipTapRichTextBlock.d.ts +79 -0
- package/lib/blocks/tipTap/createTipTapRichTextBlock.d.ts.map +1 -0
- package/lib/blocks/tipTap/createTipTapRichTextBlock.js +763 -0
- package/lib/blocks/tipTap/extensions/CmsBlock.d.ts +20 -0
- package/lib/blocks/tipTap/extensions/CmsBlock.d.ts.map +1 -0
- package/lib/blocks/tipTap/extensions/CmsBlock.js +204 -0
- package/lib/blocks/tipTap/extensions/CmsLink.d.ts +13 -0
- package/lib/blocks/tipTap/extensions/CmsLink.d.ts.map +1 -0
- package/lib/blocks/tipTap/extensions/CmsLink.js +42 -0
- package/lib/blocks/tipTap/extensions/InlineStyleMark.d.ts +13 -0
- package/lib/blocks/tipTap/extensions/InlineStyleMark.d.ts.map +1 -0
- package/lib/blocks/tipTap/extensions/InlineStyleMark.js +71 -0
- package/lib/blocks/tipTap/extensions/NonBreakingSpace.d.ts +10 -0
- package/lib/blocks/tipTap/extensions/NonBreakingSpace.d.ts.map +1 -0
- package/lib/blocks/tipTap/extensions/NonBreakingSpace.js +57 -0
- package/lib/blocks/tipTap/extensions/Placeholder.d.ts +10 -0
- package/lib/blocks/tipTap/extensions/Placeholder.d.ts.map +1 -0
- package/lib/blocks/tipTap/extensions/Placeholder.js +78 -0
- package/lib/blocks/tipTap/extensions/SoftHyphen.d.ts +10 -0
- package/lib/blocks/tipTap/extensions/SoftHyphen.d.ts.map +1 -0
- package/lib/blocks/tipTap/extensions/SoftHyphen.js +51 -0
- package/lib/blocks/tipTap/extensions/TextBlockStyleHeading.d.ts +2 -0
- package/lib/blocks/tipTap/extensions/TextBlockStyleHeading.d.ts.map +1 -0
- package/lib/blocks/tipTap/extensions/TextBlockStyleHeading.js +57 -0
- package/lib/blocks/tipTap/extensions/TextBlockStyleParagraph.d.ts +2 -0
- package/lib/blocks/tipTap/extensions/TextBlockStyleParagraph.d.ts.map +1 -0
- package/lib/blocks/tipTap/extensions/TextBlockStyleParagraph.js +56 -0
- package/lib/blocks/tipTap/listLevelMaxHelpers.d.ts +6 -0
- package/lib/blocks/tipTap/listLevelMaxHelpers.d.ts.map +1 -0
- package/lib/blocks/tipTap/listLevelMaxHelpers.js +108 -0
- package/lib/blocks/types.d.ts +137 -0
- package/lib/blocks/types.d.ts.map +1 -0
- package/lib/blocks/types.js +61 -0
- package/lib/blocks/utils/parallelAsyncEvery.d.ts +2 -0
- package/lib/blocks/utils/parallelAsyncEvery.d.ts.map +1 -0
- package/lib/blocks/utils/parallelAsyncEvery.js +9 -0
- package/lib/blocks/utils.d.ts +8 -0
- package/lib/blocks/utils.d.ts.map +1 -0
- package/lib/blocks/utils.js +13 -0
- package/lib/blocks/validators/isValidUrl.d.ts +2 -0
- package/lib/blocks/validators/isValidUrl.d.ts.map +1 -0
- package/lib/blocks/validators/isValidUrl.js +9 -0
- package/lib/blocks.generated.d.ts +314 -0
- package/lib/blocks.generated.d.ts.map +1 -0
- package/lib/blocks.generated.js +1 -0
- package/lib/builds/BuildEntry.d.ts +2 -0
- package/lib/builds/BuildEntry.d.ts.map +1 -0
- package/lib/builds/BuildEntry.generated.d.ts +29 -0
- package/lib/builds/BuildEntry.generated.d.ts.map +1 -0
- package/lib/builds/BuildEntry.generated.js +5 -0
- package/lib/builds/BuildEntry.js +165 -0
- package/lib/builds/PublishButton.d.ts +2 -0
- package/lib/builds/PublishButton.d.ts.map +1 -0
- package/lib/builds/PublishButton.js +46 -0
- package/lib/builds/PublisherPage.d.ts +2 -0
- package/lib/builds/PublisherPage.d.ts.map +1 -0
- package/lib/builds/PublisherPage.generated.d.ts +23 -0
- package/lib/builds/PublisherPage.generated.d.ts.map +1 -0
- package/lib/builds/PublisherPage.generated.js +5 -0
- package/lib/builds/PublisherPage.js +119 -0
- package/lib/builds/StartBuildsDialog.d.ts +7 -0
- package/lib/builds/StartBuildsDialog.d.ts.map +1 -0
- package/lib/builds/StartBuildsDialog.generated.d.ts +29 -0
- package/lib/builds/StartBuildsDialog.generated.d.ts.map +1 -0
- package/lib/builds/StartBuildsDialog.generated.js +8 -0
- package/lib/builds/StartBuildsDialog.js +126 -0
- package/lib/common/DropdownMenuItem.d.ts +13 -0
- package/lib/common/DropdownMenuItem.d.ts.map +1 -0
- package/lib/common/DropdownMenuItem.js +78 -0
- package/lib/common/DropdownMenuItem.sc.d.ts +12 -0
- package/lib/common/DropdownMenuItem.sc.d.ts.map +1 -0
- package/lib/common/DropdownMenuItem.sc.js +88 -0
- package/lib/common/InsertInBetweenAction.d.ts +9 -0
- package/lib/common/InsertInBetweenAction.d.ts.map +1 -0
- package/lib/common/InsertInBetweenAction.js +51 -0
- package/lib/common/InsertInBetweenActionButton.d.ts +3 -0
- package/lib/common/InsertInBetweenActionButton.d.ts.map +1 -0
- package/lib/common/InsertInBetweenActionButton.js +35 -0
- package/lib/common/MarkedMatches.d.ts +11 -0
- package/lib/common/MarkedMatches.d.ts.map +1 -0
- package/lib/common/MarkedMatches.js +78 -0
- package/lib/common/MasterMenu.d.ts +58 -0
- package/lib/common/MasterMenu.d.ts.map +1 -0
- package/lib/common/MasterMenu.js +133 -0
- package/lib/common/MasterMenuRoutes.d.ts +8 -0
- package/lib/common/MasterMenuRoutes.d.ts.map +1 -0
- package/lib/common/MasterMenuRoutes.js +87 -0
- package/lib/common/PageList.d.ts +18 -0
- package/lib/common/PageList.d.ts.map +1 -0
- package/lib/common/PageList.js +73 -0
- package/lib/common/PageName.d.ts +7 -0
- package/lib/common/PageName.d.ts.map +1 -0
- package/lib/common/PageName.generated.d.ts +28 -0
- package/lib/common/PageName.generated.d.ts.map +1 -0
- package/lib/common/PageName.generated.js +8 -0
- package/lib/common/PageName.js +42 -0
- package/lib/common/SearchInput.d.ts +12 -0
- package/lib/common/SearchInput.d.ts.map +1 -0
- package/lib/common/SearchInput.js +107 -0
- package/lib/common/apollo/links/includeInvisibleContentContext.d.ts +5 -0
- package/lib/common/apollo/links/includeInvisibleContentContext.d.ts.map +1 -0
- package/lib/common/apollo/links/includeInvisibleContentContext.js +27 -0
- package/lib/common/errors/errorMessages.d.ts +5 -0
- package/lib/common/errors/errorMessages.d.ts.map +1 -0
- package/lib/common/errors/errorMessages.js +28 -0
- package/lib/common/header/Header.d.ts +7 -0
- package/lib/common/header/Header.d.ts.map +1 -0
- package/lib/common/header/Header.js +27 -0
- package/lib/common/header/ImpersonationInlay.d.ts +2 -0
- package/lib/common/header/ImpersonationInlay.d.ts.map +1 -0
- package/lib/common/header/ImpersonationInlay.js +82 -0
- package/lib/common/header/UserHeaderItem.d.ts +9 -0
- package/lib/common/header/UserHeaderItem.d.ts.map +1 -0
- package/lib/common/header/UserHeaderItem.js +192 -0
- package/lib/common/header/about/AboutModal.d.ts +9 -0
- package/lib/common/header/about/AboutModal.d.ts.map +1 -0
- package/lib/common/header/about/AboutModal.js +162 -0
- package/lib/common/header/about/build-information/buildInformation.d.ts +6 -0
- package/lib/common/header/about/build-information/buildInformation.d.ts.map +1 -0
- package/lib/common/header/about/build-information/buildInformation.js +1 -0
- package/lib/common/header/about/build-information/useBuildInformation.d.ts +3 -0
- package/lib/common/header/about/build-information/useBuildInformation.d.ts.map +1 -0
- package/lib/common/header/about/build-information/useBuildInformation.js +4 -0
- package/lib/common/image/ChooseFocalPoint.d.ts +8 -0
- package/lib/common/image/ChooseFocalPoint.d.ts.map +1 -0
- package/lib/common/image/ChooseFocalPoint.js +42 -0
- package/lib/common/image/ImageCrop.d.ts +9 -0
- package/lib/common/image/ImageCrop.d.ts.map +1 -0
- package/lib/common/image/ImageCrop.js +75 -0
- package/lib/common/image/ImageCrop.sc.d.ts +9 -0
- package/lib/common/image/ImageCrop.sc.d.ts.map +1 -0
- package/lib/common/image/ImageCrop.sc.js +49 -0
- package/lib/common/impersonation/commonImpersonationMessages.d.ts +6 -0
- package/lib/common/impersonation/commonImpersonationMessages.d.ts.map +1 -0
- package/lib/common/impersonation/commonImpersonationMessages.js +16 -0
- package/lib/common/signOutButton/SignOutButton.d.ts +6 -0
- package/lib/common/signOutButton/SignOutButton.d.ts.map +1 -0
- package/lib/common/signOutButton/SignOutButton.gql.d.ts +2 -0
- package/lib/common/signOutButton/SignOutButton.gql.d.ts.map +1 -0
- package/lib/common/signOutButton/SignOutButton.gql.generated.d.ts +14 -0
- package/lib/common/signOutButton/SignOutButton.gql.generated.d.ts.map +1 -0
- package/lib/common/signOutButton/SignOutButton.gql.generated.js +5 -0
- package/lib/common/signOutButton/SignOutButton.gql.js +4 -0
- package/lib/common/signOutButton/SignOutButton.js +59 -0
- package/lib/common/useEditState.d.ts +27 -0
- package/lib/common/useEditState.d.ts.map +1 -0
- package/lib/common/useEditState.js +57 -0
- package/lib/common/useSaveState.d.ts +22 -0
- package/lib/common/useSaveState.d.ts.map +1 -0
- package/lib/common/useSaveState.js +136 -0
- package/lib/config/CometConfigContext.d.ts +37 -0
- package/lib/config/CometConfigContext.d.ts.map +1 -0
- package/lib/config/CometConfigContext.js +44 -0
- package/lib/contentLanguage/contentLanguageConfig.d.ts +6 -0
- package/lib/contentLanguage/contentLanguageConfig.d.ts.map +1 -0
- package/lib/contentLanguage/contentLanguageConfig.js +12 -0
- package/lib/contentLanguage/useContentLanguage.d.ts +7 -0
- package/lib/contentLanguage/useContentLanguage.d.ts.map +1 -0
- package/lib/contentLanguage/useContentLanguage.js +7 -0
- package/lib/contentScope/ContentScopeIndicator.d.ts +9 -0
- package/lib/contentScope/ContentScopeIndicator.d.ts.map +1 -0
- package/lib/contentScope/ContentScopeIndicator.js +134 -0
- package/lib/contentScope/ContentScopeSelect.d.ts +22 -0
- package/lib/contentScope/ContentScopeSelect.d.ts.map +1 -0
- package/lib/contentScope/ContentScopeSelect.js +354 -0
- package/lib/contentScope/Controls.d.ts +10 -0
- package/lib/contentScope/Controls.d.ts.map +1 -0
- package/lib/contentScope/Controls.js +27 -0
- package/lib/contentScope/Provider.d.ts +47 -0
- package/lib/contentScope/Provider.d.ts.map +1 -0
- package/lib/contentScope/Provider.js +160 -0
- package/lib/contentScope/noContentScopeFallback/NoContentScopeFallback.d.ts +3 -0
- package/lib/contentScope/noContentScopeFallback/NoContentScopeFallback.d.ts.map +1 -0
- package/lib/contentScope/noContentScopeFallback/NoContentScopeFallback.js +78 -0
- package/lib/contentScope/useContentScopeConfig.d.ts +5 -0
- package/lib/contentScope/useContentScopeConfig.d.ts.map +1 -0
- package/lib/contentScope/useContentScopeConfig.js +13 -0
- package/lib/contentScope/utils/createPathFromDimensionValues.d.ts +10 -0
- package/lib/contentScope/utils/createPathFromDimensionValues.d.ts.map +1 -0
- package/lib/contentScope/utils/createPathFromDimensionValues.js +13 -0
- package/lib/contentScope/utils/defaultCreatePath.d.ts +9 -0
- package/lib/contentScope/utils/defaultCreatePath.d.ts.map +1 -0
- package/lib/contentScope/utils/defaultCreatePath.js +26 -0
- package/lib/contentScope/utils/groupObjectsIntoArrays.d.ts +15 -0
- package/lib/contentScope/utils/groupObjectsIntoArrays.d.ts.map +1 -0
- package/lib/contentScope/utils/groupObjectsIntoArrays.js +24 -0
- package/lib/cronJobs/CronJobsGrid.d.ts +2 -0
- package/lib/cronJobs/CronJobsGrid.d.ts.map +1 -0
- package/lib/cronJobs/CronJobsGrid.generated.d.ts +44 -0
- package/lib/cronJobs/CronJobsGrid.generated.d.ts.map +1 -0
- package/lib/cronJobs/CronJobsGrid.generated.js +8 -0
- package/lib/cronJobs/CronJobsGrid.js +219 -0
- package/lib/cronJobs/CronJobsPage.d.ts +2 -0
- package/lib/cronJobs/CronJobsPage.d.ts.map +1 -0
- package/lib/cronJobs/CronJobsPage.js +57 -0
- package/lib/cronJobs/JobLogs.d.ts +4 -0
- package/lib/cronJobs/JobLogs.d.ts.map +1 -0
- package/lib/cronJobs/JobLogs.generated.d.ts +20 -0
- package/lib/cronJobs/JobLogs.generated.d.ts.map +1 -0
- package/lib/cronJobs/JobLogs.generated.js +5 -0
- package/lib/cronJobs/JobLogs.js +68 -0
- package/lib/cronJobs/JobRuntime.d.ts +7 -0
- package/lib/cronJobs/JobRuntime.d.ts.map +1 -0
- package/lib/cronJobs/JobRuntime.js +40 -0
- package/lib/cronJobs/JobStatus.d.ts +5 -0
- package/lib/cronJobs/JobStatus.d.ts.map +1 -0
- package/lib/cronJobs/JobStatus.js +16 -0
- package/lib/cronJobs/JobsGrid.d.ts +6 -0
- package/lib/cronJobs/JobsGrid.d.ts.map +1 -0
- package/lib/cronJobs/JobsGrid.generated.d.ts +34 -0
- package/lib/cronJobs/JobsGrid.generated.d.ts.map +1 -0
- package/lib/cronJobs/JobsGrid.generated.js +6 -0
- package/lib/cronJobs/JobsGrid.js +145 -0
- package/lib/dam/CurrentDamFolderProvider.d.ts +10 -0
- package/lib/dam/CurrentDamFolderProvider.d.ts.map +1 -0
- package/lib/dam/CurrentDamFolderProvider.js +22 -0
- package/lib/dam/DamPage.d.ts +12 -0
- package/lib/dam/DamPage.d.ts.map +1 -0
- package/lib/dam/DamPage.js +43 -0
- package/lib/dam/DamTable.d.ts +31 -0
- package/lib/dam/DamTable.d.ts.map +1 -0
- package/lib/dam/DamTable.js +127 -0
- package/lib/dam/DataGrid/DamContextMenu.d.ts +12 -0
- package/lib/dam/DataGrid/DamContextMenu.d.ts.map +1 -0
- package/lib/dam/DataGrid/DamContextMenu.generated.d.ts +14 -0
- package/lib/dam/DataGrid/DamContextMenu.generated.d.ts.map +1 -0
- package/lib/dam/DataGrid/DamContextMenu.generated.js +5 -0
- package/lib/dam/DataGrid/DamContextMenu.gql.d.ts +4 -0
- package/lib/dam/DataGrid/DamContextMenu.gql.d.ts.map +1 -0
- package/lib/dam/DataGrid/DamContextMenu.gql.generated.d.ts +38 -0
- package/lib/dam/DataGrid/DamContextMenu.gql.generated.d.ts.map +1 -0
- package/lib/dam/DataGrid/DamContextMenu.gql.generated.js +7 -0
- package/lib/dam/DataGrid/DamContextMenu.gql.js +6 -0
- package/lib/dam/DataGrid/DamContextMenu.js +294 -0
- package/lib/dam/DataGrid/FolderDataGrid.d.ts +14 -0
- package/lib/dam/DataGrid/FolderDataGrid.d.ts.map +1 -0
- package/lib/dam/DataGrid/FolderDataGrid.gql.d.ts +6 -0
- package/lib/dam/DataGrid/FolderDataGrid.gql.d.ts.map +1 -0
- package/lib/dam/DataGrid/FolderDataGrid.gql.generated.d.ts +207 -0
- package/lib/dam/DataGrid/FolderDataGrid.gql.generated.d.ts.map +1 -0
- package/lib/dam/DataGrid/FolderDataGrid.gql.generated.js +15 -0
- package/lib/dam/DataGrid/FolderDataGrid.gql.js +11 -0
- package/lib/dam/DataGrid/FolderDataGrid.js +737 -0
- package/lib/dam/DataGrid/FolderDataGrid.sc.d.ts +6 -0
- package/lib/dam/DataGrid/FolderDataGrid.sc.d.ts.map +1 -0
- package/lib/dam/DataGrid/FolderDataGrid.sc.js +27 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.d.ts +18 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.d.ts.map +1 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.d.ts +2 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.d.ts.map +1 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.generated.d.ts +20 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.generated.d.ts.map +1 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.generated.js +5 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.gql.js +4 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManualDuplicatedFilenamesHandler.js +177 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManuallyHandleDuplicatedFilenamesDialog.d.ts +12 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManuallyHandleDuplicatedFilenamesDialog.d.ts.map +1 -0
- package/lib/dam/DataGrid/duplicatedFilenames/ManuallyHandleDuplicatedFilenamesDialog.js +175 -0
- package/lib/dam/DataGrid/fileUpload/FileUploadContext.d.ts +18 -0
- package/lib/dam/DataGrid/fileUpload/FileUploadContext.d.ts.map +1 -0
- package/lib/dam/DataGrid/fileUpload/FileUploadContext.js +71 -0
- package/lib/dam/DataGrid/fileUpload/FileUploadErrorDialog.d.ts +9 -0
- package/lib/dam/DataGrid/fileUpload/FileUploadErrorDialog.d.ts.map +1 -0
- package/lib/dam/DataGrid/fileUpload/FileUploadErrorDialog.js +126 -0
- package/lib/dam/DataGrid/fileUpload/ProgressDialog.d.ts +8 -0
- package/lib/dam/DataGrid/fileUpload/ProgressDialog.d.ts.map +1 -0
- package/lib/dam/DataGrid/fileUpload/ProgressDialog.js +80 -0
- package/lib/dam/DataGrid/fileUpload/UploadFilesButton.d.ts +9 -0
- package/lib/dam/DataGrid/fileUpload/UploadFilesButton.d.ts.map +1 -0
- package/lib/dam/DataGrid/fileUpload/UploadFilesButton.js +77 -0
- package/lib/dam/DataGrid/fileUpload/fileUpload.utils.d.ts +3 -0
- package/lib/dam/DataGrid/fileUpload/fileUpload.utils.d.ts.map +1 -0
- package/lib/dam/DataGrid/fileUpload/fileUpload.utils.js +21 -0
- package/lib/dam/DataGrid/fileUpload/fileUploadErrorMessages.d.ts +22 -0
- package/lib/dam/DataGrid/fileUpload/fileUploadErrorMessages.d.ts.map +1 -0
- package/lib/dam/DataGrid/fileUpload/fileUploadErrorMessages.js +80 -0
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.d.ts +61 -0
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.d.ts.map +1 -0
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.d.ts +3 -0
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.d.ts.map +1 -0
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.generated.d.ts +34 -0
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.generated.d.ts.map +1 -0
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.generated.js +8 -0
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.gql.js +5 -0
- package/lib/dam/DataGrid/fileUpload/useDamFileUpload.js +774 -0
- package/lib/dam/DataGrid/filter/DamTableFilter.d.ts +9 -0
- package/lib/dam/DataGrid/filter/DamTableFilter.d.ts.map +1 -0
- package/lib/dam/DataGrid/filter/DamTableFilter.js +38 -0
- package/lib/dam/DataGrid/footer/DamFooter.d.ts +7 -0
- package/lib/dam/DataGrid/footer/DamFooter.d.ts.map +1 -0
- package/lib/dam/DataGrid/footer/DamFooter.js +31 -0
- package/lib/dam/DataGrid/footer/UploadFooter.d.ts +7 -0
- package/lib/dam/DataGrid/footer/UploadFooter.d.ts.map +1 -0
- package/lib/dam/DataGrid/footer/UploadFooter.js +57 -0
- package/lib/dam/DataGrid/label/DamItemLabel.d.ts +11 -0
- package/lib/dam/DataGrid/label/DamItemLabel.d.ts.map +1 -0
- package/lib/dam/DataGrid/label/DamItemLabel.js +91 -0
- package/lib/dam/DataGrid/label/DamItemLabelColumn.d.ts +35 -0
- package/lib/dam/DataGrid/label/DamItemLabelColumn.d.ts.map +1 -0
- package/lib/dam/DataGrid/label/DamItemLabelColumn.js +140 -0
- package/lib/dam/DataGrid/selection/DamMoreActions.d.ts +13 -0
- package/lib/dam/DataGrid/selection/DamMoreActions.d.ts.map +1 -0
- package/lib/dam/DataGrid/selection/DamMoreActions.js +191 -0
- package/lib/dam/DataGrid/selection/DamSelectionContext.d.ts +30 -0
- package/lib/dam/DataGrid/selection/DamSelectionContext.d.ts.map +1 -0
- package/lib/dam/DataGrid/selection/DamSelectionContext.generated.d.ts +55 -0
- package/lib/dam/DataGrid/selection/DamSelectionContext.generated.d.ts.map +1 -0
- package/lib/dam/DataGrid/selection/DamSelectionContext.generated.js +11 -0
- package/lib/dam/DataGrid/selection/DamSelectionContext.js +405 -0
- package/lib/dam/DataGrid/tags/ArchivedTag.d.ts +2 -0
- package/lib/dam/DataGrid/tags/ArchivedTag.d.ts.map +1 -0
- package/lib/dam/DataGrid/tags/ArchivedTag.js +27 -0
- package/lib/dam/DataGrid/tags/LicenseValidityTags.d.ts +9 -0
- package/lib/dam/DataGrid/tags/LicenseValidityTags.d.ts.map +1 -0
- package/lib/dam/DataGrid/tags/LicenseValidityTags.js +47 -0
- package/lib/dam/DataGrid/tags/Tag.d.ts +4 -0
- package/lib/dam/DataGrid/tags/Tag.d.ts.map +1 -0
- package/lib/dam/DataGrid/tags/Tag.js +29 -0
- package/lib/dam/DataGrid/thumbnail/AudioThumbnail.d.ts +2 -0
- package/lib/dam/DataGrid/thumbnail/AudioThumbnail.d.ts.map +1 -0
- package/lib/dam/DataGrid/thumbnail/AudioThumbnail.js +26 -0
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.d.ts +13 -0
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.d.ts.map +1 -0
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.d.ts +2 -0
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.d.ts.map +1 -0
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.generated.d.ts +10 -0
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.generated.d.ts.map +1 -0
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.generated.js +5 -0
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.gql.js +4 -0
- package/lib/dam/DataGrid/thumbnail/DamThumbnail.js +140 -0
- package/lib/dam/DataGrid/thumbnail/VideoThumbnail.d.ts +2 -0
- package/lib/dam/DataGrid/thumbnail/VideoThumbnail.d.ts.map +1 -0
- package/lib/dam/DataGrid/thumbnail/VideoThumbnail.js +26 -0
- package/lib/dam/DataGrid/useDamSearchHighlighting.d.ts +16 -0
- package/lib/dam/DataGrid/useDamSearchHighlighting.d.ts.map +1 -0
- package/lib/dam/DataGrid/useDamSearchHighlighting.js +34 -0
- package/lib/dam/FileActions/ConfirmDeleteDialog.d.ts +9 -0
- package/lib/dam/FileActions/ConfirmDeleteDialog.d.ts.map +1 -0
- package/lib/dam/FileActions/ConfirmDeleteDialog.js +82 -0
- package/lib/dam/FileActions/ConfirmDeleteDialog.sc.d.ts +8 -0
- package/lib/dam/FileActions/ConfirmDeleteDialog.sc.d.ts.map +1 -0
- package/lib/dam/FileActions/ConfirmDeleteDialog.sc.js +77 -0
- package/lib/dam/FileForm/CropSettingsFields.d.ts +7 -0
- package/lib/dam/FileForm/CropSettingsFields.d.ts.map +1 -0
- package/lib/dam/FileForm/CropSettingsFields.js +124 -0
- package/lib/dam/FileForm/Duplicates.d.ts +5 -0
- package/lib/dam/FileForm/Duplicates.d.ts.map +1 -0
- package/lib/dam/FileForm/Duplicates.generated.d.ts +31 -0
- package/lib/dam/FileForm/Duplicates.generated.d.ts.map +1 -0
- package/lib/dam/FileForm/Duplicates.generated.js +5 -0
- package/lib/dam/FileForm/Duplicates.js +160 -0
- package/lib/dam/FileForm/EditFile.d.ts +30 -0
- package/lib/dam/FileForm/EditFile.d.ts.map +1 -0
- package/lib/dam/FileForm/EditFile.gql.d.ts +4 -0
- package/lib/dam/FileForm/EditFile.gql.d.ts.map +1 -0
- package/lib/dam/FileForm/EditFile.gql.generated.d.ts +185 -0
- package/lib/dam/FileForm/EditFile.gql.generated.d.ts.map +1 -0
- package/lib/dam/FileForm/EditFile.gql.generated.js +12 -0
- package/lib/dam/FileForm/EditFile.gql.js +7 -0
- package/lib/dam/FileForm/EditFile.js +345 -0
- package/lib/dam/FileForm/FilePreview.d.ts +7 -0
- package/lib/dam/FileForm/FilePreview.d.ts.map +1 -0
- package/lib/dam/FileForm/FilePreview.gql.d.ts +4 -0
- package/lib/dam/FileForm/FilePreview.gql.d.ts.map +1 -0
- package/lib/dam/FileForm/FilePreview.gql.generated.d.ts +38 -0
- package/lib/dam/FileForm/FilePreview.gql.generated.d.ts.map +1 -0
- package/lib/dam/FileForm/FilePreview.gql.generated.js +7 -0
- package/lib/dam/FileForm/FilePreview.gql.js +6 -0
- package/lib/dam/FileForm/FilePreview.js +198 -0
- package/lib/dam/FileForm/FileSettingsFields.d.ts +7 -0
- package/lib/dam/FileForm/FileSettingsFields.d.ts.map +1 -0
- package/lib/dam/FileForm/FileSettingsFields.generated.d.ts +16 -0
- package/lib/dam/FileForm/FileSettingsFields.generated.d.ts.map +1 -0
- package/lib/dam/FileForm/FileSettingsFields.generated.js +5 -0
- package/lib/dam/FileForm/FileSettingsFields.gql.d.ts +3 -0
- package/lib/dam/FileForm/FileSettingsFields.gql.d.ts.map +1 -0
- package/lib/dam/FileForm/FileSettingsFields.gql.generated.d.ts +24 -0
- package/lib/dam/FileForm/FileSettingsFields.gql.generated.d.ts.map +1 -0
- package/lib/dam/FileForm/FileSettingsFields.gql.generated.js +6 -0
- package/lib/dam/FileForm/FileSettingsFields.gql.js +5 -0
- package/lib/dam/FileForm/FileSettingsFields.js +423 -0
- package/lib/dam/FileForm/ImageInfos.d.ts +15 -0
- package/lib/dam/FileForm/ImageInfos.d.ts.map +1 -0
- package/lib/dam/FileForm/ImageInfos.js +136 -0
- package/lib/dam/FileForm/ReplaceFileButton.d.ts +7 -0
- package/lib/dam/FileForm/ReplaceFileButton.d.ts.map +1 -0
- package/lib/dam/FileForm/ReplaceFileButton.js +141 -0
- package/lib/dam/FileForm/licenseType.d.ts +8 -0
- package/lib/dam/FileForm/licenseType.d.ts.map +1 -0
- package/lib/dam/FileForm/licenseType.js +14 -0
- package/lib/dam/FileForm/previews/AudioPreview.d.ts +7 -0
- package/lib/dam/FileForm/previews/AudioPreview.d.ts.map +1 -0
- package/lib/dam/FileForm/previews/AudioPreview.js +77 -0
- package/lib/dam/FileForm/previews/DefaultFilePreview.d.ts +7 -0
- package/lib/dam/FileForm/previews/DefaultFilePreview.d.ts.map +1 -0
- package/lib/dam/FileForm/previews/DefaultFilePreview.js +44 -0
- package/lib/dam/FileForm/previews/ImagePreview.d.ts +8 -0
- package/lib/dam/FileForm/previews/ImagePreview.d.ts.map +1 -0
- package/lib/dam/FileForm/previews/ImagePreview.js +13 -0
- package/lib/dam/FileForm/previews/PdfPreview.d.ts +7 -0
- package/lib/dam/FileForm/previews/PdfPreview.d.ts.map +1 -0
- package/lib/dam/FileForm/previews/PdfPreview.js +37 -0
- package/lib/dam/FileForm/previews/VideoPreview.d.ts +8 -0
- package/lib/dam/FileForm/previews/VideoPreview.d.ts.map +1 -0
- package/lib/dam/FileForm/previews/VideoPreview.generated.d.ts +28 -0
- package/lib/dam/FileForm/previews/VideoPreview.generated.d.ts.map +1 -0
- package/lib/dam/FileForm/previews/VideoPreview.generated.js +5 -0
- package/lib/dam/FileForm/previews/VideoPreview.js +59 -0
- package/lib/dam/FolderForm/AddFolder.d.ts +6 -0
- package/lib/dam/FolderForm/AddFolder.d.ts.map +1 -0
- package/lib/dam/FolderForm/AddFolder.gql.d.ts +2 -0
- package/lib/dam/FolderForm/AddFolder.gql.d.ts.map +1 -0
- package/lib/dam/FolderForm/AddFolder.gql.generated.d.ts +20 -0
- package/lib/dam/FolderForm/AddFolder.gql.generated.d.ts.map +1 -0
- package/lib/dam/FolderForm/AddFolder.gql.generated.js +5 -0
- package/lib/dam/FolderForm/AddFolder.gql.js +4 -0
- package/lib/dam/FolderForm/AddFolder.js +60 -0
- package/lib/dam/FolderForm/EditFolder.d.ts +6 -0
- package/lib/dam/FolderForm/EditFolder.d.ts.map +1 -0
- package/lib/dam/FolderForm/EditFolder.gql.d.ts +3 -0
- package/lib/dam/FolderForm/EditFolder.gql.d.ts.map +1 -0
- package/lib/dam/FolderForm/EditFolder.gql.generated.d.ts +34 -0
- package/lib/dam/FolderForm/EditFolder.gql.generated.d.ts.map +1 -0
- package/lib/dam/FolderForm/EditFolder.gql.generated.js +8 -0
- package/lib/dam/FolderForm/EditFolder.gql.js +5 -0
- package/lib/dam/FolderForm/EditFolder.js +62 -0
- package/lib/dam/FolderForm/FolderFormFields.d.ts +5 -0
- package/lib/dam/FolderForm/FolderFormFields.d.ts.map +1 -0
- package/lib/dam/FolderForm/FolderFormFields.js +17 -0
- package/lib/dam/MoveDamItemDialog/ChooseFolder.d.ts +15 -0
- package/lib/dam/MoveDamItemDialog/ChooseFolder.d.ts.map +1 -0
- package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.d.ts +2 -0
- package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.d.ts.map +1 -0
- package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.generated.d.ts +23 -0
- package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.generated.d.ts.map +1 -0
- package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.generated.js +5 -0
- package/lib/dam/MoveDamItemDialog/ChooseFolder.gql.js +4 -0
- package/lib/dam/MoveDamItemDialog/ChooseFolder.js +156 -0
- package/lib/dam/MoveDamItemDialog/MoveDamItemDialog.d.ts +21 -0
- package/lib/dam/MoveDamItemDialog/MoveDamItemDialog.d.ts.map +1 -0
- package/lib/dam/MoveDamItemDialog/MoveDamItemDialog.js +256 -0
- package/lib/dam/MoveDamItemDialog/useFolderTree.d.ts +29 -0
- package/lib/dam/MoveDamItemDialog/useFolderTree.d.ts.map +1 -0
- package/lib/dam/MoveDamItemDialog/useFolderTree.js +100 -0
- package/lib/dam/MoveDamItemDialog/useFolderTreeSearch.d.ts +25 -0
- package/lib/dam/MoveDamItemDialog/useFolderTreeSearch.d.ts.map +1 -0
- package/lib/dam/MoveDamItemDialog/useFolderTreeSearch.js +138 -0
- package/lib/dam/VideoPerformanceWarningAlert.d.ts +5 -0
- package/lib/dam/VideoPerformanceWarningAlert.d.ts.map +1 -0
- package/lib/dam/VideoPerformanceWarningAlert.js +23 -0
- package/lib/dam/blocks/DamFileDownloadLinkBlock.d.ts +4 -0
- package/lib/dam/blocks/DamFileDownloadLinkBlock.d.ts.map +1 -0
- package/lib/dam/blocks/DamFileDownloadLinkBlock.generated.d.ts +21 -0
- package/lib/dam/blocks/DamFileDownloadLinkBlock.generated.d.ts.map +1 -0
- package/lib/dam/blocks/DamFileDownloadLinkBlock.generated.js +5 -0
- package/lib/dam/blocks/DamFileDownloadLinkBlock.js +178 -0
- package/lib/dam/blocks/DamImageBlock.d.ts +4 -0
- package/lib/dam/blocks/DamImageBlock.d.ts.map +1 -0
- package/lib/dam/blocks/DamImageBlock.js +106 -0
- package/lib/dam/config/DamScopeContext.d.ts +2 -0
- package/lib/dam/config/DamScopeContext.d.ts.map +1 -0
- package/lib/dam/config/DamScopeContext.js +2 -0
- package/lib/dam/config/DamScopeProvider.d.ts +5 -0
- package/lib/dam/config/DamScopeProvider.d.ts.map +1 -0
- package/lib/dam/config/DamScopeProvider.js +22 -0
- package/lib/dam/config/damConfig.d.ts +33 -0
- package/lib/dam/config/damConfig.d.ts.map +1 -0
- package/lib/dam/config/damConfig.js +29 -0
- package/lib/dam/config/damDefaultAcceptedMimeTypes.d.ts +2 -0
- package/lib/dam/config/damDefaultAcceptedMimeTypes.d.ts.map +1 -0
- package/lib/dam/config/damDefaultAcceptedMimeTypes.js +26 -0
- package/lib/dam/config/useDamAcceptedMimeTypes.d.ts +15 -0
- package/lib/dam/config/useDamAcceptedMimeTypes.d.ts.map +1 -0
- package/lib/dam/config/useDamAcceptedMimeTypes.js +40 -0
- package/lib/dam/config/useDamScope.d.ts +3 -0
- package/lib/dam/config/useDamScope.d.ts.map +1 -0
- package/lib/dam/config/useDamScope.js +6 -0
- package/lib/dam/dependencies/createDamFileDependency.d.ts +4 -0
- package/lib/dam/dependencies/createDamFileDependency.d.ts.map +1 -0
- package/lib/dam/dependencies/createDamFileDependency.generated.d.ts +25 -0
- package/lib/dam/dependencies/createDamFileDependency.generated.d.ts.map +1 -0
- package/lib/dam/dependencies/createDamFileDependency.generated.js +5 -0
- package/lib/dam/dependencies/createDamFileDependency.js +65 -0
- package/lib/dam/helpers/clearDamItemCache.d.ts +3 -0
- package/lib/dam/helpers/clearDamItemCache.d.ts.map +1 -0
- package/lib/dam/helpers/clearDamItemCache.js +6 -0
- package/lib/dam/helpers/isFile.d.ts +3 -0
- package/lib/dam/helpers/isFile.d.ts.map +1 -0
- package/lib/dam/helpers/isFile.js +3 -0
- package/lib/dam/helpers/isFolder.d.ts +3 -0
- package/lib/dam/helpers/isFolder.d.ts.map +1 -0
- package/lib/dam/helpers/isFolder.js +3 -0
- package/lib/dam/helpers/slugifyFilename.d.ts +2 -0
- package/lib/dam/helpers/slugifyFilename.d.ts.map +1 -0
- package/lib/dam/helpers/slugifyFilename.js +5 -0
- package/lib/dam/mediaAlternatives/MediaAlternativeForm.d.ts +14 -0
- package/lib/dam/mediaAlternatives/MediaAlternativeForm.d.ts.map +1 -0
- package/lib/dam/mediaAlternatives/MediaAlternativeForm.generated.d.ts +57 -0
- package/lib/dam/mediaAlternatives/MediaAlternativeForm.generated.d.ts.map +1 -0
- package/lib/dam/mediaAlternatives/MediaAlternativeForm.generated.js +9 -0
- package/lib/dam/mediaAlternatives/MediaAlternativeForm.js +147 -0
- package/lib/dam/mediaAlternatives/MediaAlternativesGrid.d.ts +14 -0
- package/lib/dam/mediaAlternatives/MediaAlternativesGrid.d.ts.map +1 -0
- package/lib/dam/mediaAlternatives/MediaAlternativesGrid.generated.d.ts +72 -0
- package/lib/dam/mediaAlternatives/MediaAlternativesGrid.generated.d.ts.map +1 -0
- package/lib/dam/mediaAlternatives/MediaAlternativesGrid.generated.js +11 -0
- package/lib/dam/mediaAlternatives/MediaAlternativesGrid.js +201 -0
- package/lib/dashboard/DashboardHeader.d.ts +11 -0
- package/lib/dashboard/DashboardHeader.d.ts.map +1 -0
- package/lib/dashboard/DashboardHeader.js +58 -0
- package/lib/dashboard/DateTime.d.ts +2 -0
- package/lib/dashboard/DateTime.d.ts.map +1 -0
- package/lib/dashboard/DateTime.js +74 -0
- package/lib/dashboard/DefaultGreeting.d.ts +2 -0
- package/lib/dashboard/DefaultGreeting.d.ts.map +1 -0
- package/lib/dashboard/DefaultGreeting.js +13 -0
- package/lib/dashboard/widgets/DashboardWidgetRoot.d.ts +7 -0
- package/lib/dashboard/widgets/DashboardWidgetRoot.d.ts.map +1 -0
- package/lib/dashboard/widgets/DashboardWidgetRoot.js +29 -0
- package/lib/dashboard/widgets/LatestBuildsDashboardWidget.d.ts +2 -0
- package/lib/dashboard/widgets/LatestBuildsDashboardWidget.d.ts.map +1 -0
- package/lib/dashboard/widgets/LatestBuildsDashboardWidget.generated.d.ts +22 -0
- package/lib/dashboard/widgets/LatestBuildsDashboardWidget.generated.d.ts.map +1 -0
- package/lib/dashboard/widgets/LatestBuildsDashboardWidget.generated.js +5 -0
- package/lib/dashboard/widgets/LatestBuildsDashboardWidget.js +76 -0
- package/lib/dashboard/widgets/LatestContentUpdatesDashboardWidget.d.ts +14 -0
- package/lib/dashboard/widgets/LatestContentUpdatesDashboardWidget.d.ts.map +1 -0
- package/lib/dashboard/widgets/LatestContentUpdatesDashboardWidget.js +75 -0
- package/lib/dataGrid/DataGrid.d.ts +3 -0
- package/lib/dataGrid/DataGrid.d.ts.map +1 -0
- package/lib/dataGrid/DataGrid.js +19 -0
- package/lib/dependencies/DependenciesList.d.ts +30 -0
- package/lib/dependencies/DependenciesList.d.ts.map +1 -0
- package/lib/dependencies/DependenciesList.js +285 -0
- package/lib/dependencies/DependentsList.d.ts +30 -0
- package/lib/dependencies/DependentsList.d.ts.map +1 -0
- package/lib/dependencies/DependentsList.js +285 -0
- package/lib/dependencies/createDependencyMethods.d.ts +22 -0
- package/lib/dependencies/createDependencyMethods.d.ts.map +1 -0
- package/lib/dependencies/createDependencyMethods.js +67 -0
- package/lib/dependencies/createDocumentDependencyMethods.d.ts +19 -0
- package/lib/dependencies/createDocumentDependencyMethods.d.ts.map +1 -0
- package/lib/dependencies/createDocumentDependencyMethods.js +79 -0
- package/lib/dependencies/dependenciesConfig.d.ts +10 -0
- package/lib/dependencies/dependenciesConfig.d.ts.map +1 -0
- package/lib/dependencies/dependenciesConfig.js +10 -0
- package/lib/dependencies/getDisplayNameString.d.ts +4 -0
- package/lib/dependencies/getDisplayNameString.d.ts.map +1 -0
- package/lib/dependencies/getDisplayNameString.js +14 -0
- package/lib/dependencies/types.d.ts +12 -0
- package/lib/dependencies/types.d.ts.map +1 -0
- package/lib/dependencies/types.js +1 -0
- package/lib/documents/ContentGenerationConfigContext.d.ts +9 -0
- package/lib/documents/ContentGenerationConfigContext.d.ts.map +1 -0
- package/lib/documents/ContentGenerationConfigContext.js +17 -0
- package/lib/documents/createDocumentRootBlocksMethods.d.ts +4 -0
- package/lib/documents/createDocumentRootBlocksMethods.d.ts.map +1 -0
- package/lib/documents/createDocumentRootBlocksMethods.js +54 -0
- package/lib/documents/types.d.ts +53 -0
- package/lib/documents/types.d.ts.map +1 -0
- package/lib/documents/types.js +1 -0
- package/lib/form/SyncFields.d.ts +8 -0
- package/lib/form/SyncFields.d.ts.map +1 -0
- package/lib/form/SyncFields.js +24 -0
- package/lib/form/file/DamPathLazy.d.ts +6 -0
- package/lib/form/file/DamPathLazy.d.ts.map +1 -0
- package/lib/form/file/DamPathLazy.generated.d.ts +17 -0
- package/lib/form/file/DamPathLazy.generated.d.ts.map +1 -0
- package/lib/form/file/DamPathLazy.generated.js +5 -0
- package/lib/form/file/DamPathLazy.js +22 -0
- package/lib/form/file/FileField.d.ts +21 -0
- package/lib/form/file/FileField.d.ts.map +1 -0
- package/lib/form/file/FileField.gql.d.ts +4 -0
- package/lib/form/file/FileField.gql.d.ts.map +1 -0
- package/lib/form/file/FileField.gql.generated.d.ts +106 -0
- package/lib/form/file/FileField.gql.generated.d.ts.map +1 -0
- package/lib/form/file/FileField.gql.generated.js +9 -0
- package/lib/form/file/FileField.gql.js +8 -0
- package/lib/form/file/FileField.js +291 -0
- package/lib/form/file/FileFieldMenu.d.ts +17 -0
- package/lib/form/file/FileFieldMenu.d.ts.map +1 -0
- package/lib/form/file/FileFieldMenu.js +91 -0
- package/lib/form/file/FileFieldRow.d.ts +12 -0
- package/lib/form/file/FileFieldRow.d.ts.map +1 -0
- package/lib/form/file/FileFieldRow.js +96 -0
- package/lib/form/file/FileUploadField.d.ts +9 -0
- package/lib/form/file/FileUploadField.d.ts.map +1 -0
- package/lib/form/file/FileUploadField.js +20 -0
- package/lib/form/file/FinalFormFileUpload.d.ts +28 -0
- package/lib/form/file/FinalFormFileUpload.d.ts.map +1 -0
- package/lib/form/file/FinalFormFileUpload.generated.d.ts +21 -0
- package/lib/form/file/FinalFormFileUpload.generated.d.ts.map +1 -0
- package/lib/form/file/FinalFormFileUpload.generated.js +6 -0
- package/lib/form/file/FinalFormFileUpload.js +256 -0
- package/lib/form/file/chooseFile/BaseChooseDamFileDialog.d.ts +20 -0
- package/lib/form/file/chooseFile/BaseChooseDamFileDialog.d.ts.map +1 -0
- package/lib/form/file/chooseFile/BaseChooseDamFileDialog.js +106 -0
- package/lib/form/file/chooseFile/ChooseDamFileDialog.d.ts +10 -0
- package/lib/form/file/chooseFile/ChooseDamFileDialog.d.ts.map +1 -0
- package/lib/form/file/chooseFile/ChooseDamFileDialog.js +63 -0
- package/lib/form/file/chooseFile/ChooseDamFilesDialog.d.ts +9 -0
- package/lib/form/file/chooseFile/ChooseDamFilesDialog.d.ts.map +1 -0
- package/lib/form/file/chooseFile/ChooseDamFilesDialog.js +117 -0
- package/lib/form/file/chooseFile/RedirectToPersistedDamLocation.d.ts +6 -0
- package/lib/form/file/chooseFile/RedirectToPersistedDamLocation.d.ts.map +1 -0
- package/lib/form/file/chooseFile/RedirectToPersistedDamLocation.js +36 -0
- package/lib/form/file/upload.d.ts +44 -0
- package/lib/form/file/upload.d.ts.map +1 -0
- package/lib/form/file/upload.js +120 -0
- package/lib/form/queryUpdatedAt.d.ts +3 -0
- package/lib/form/queryUpdatedAt.d.ts.map +1 -0
- package/lib/form/queryUpdatedAt.js +41 -0
- package/lib/form/serializeInitialValues.d.ts +2 -0
- package/lib/form/serializeInitialValues.d.ts.map +1 -0
- package/lib/form/serializeInitialValues.js +4 -0
- package/lib/form/useFormSaveConflict.d.ts +10 -0
- package/lib/form/useFormSaveConflict.d.ts.map +1 -0
- package/lib/form/useFormSaveConflict.js +58 -0
- package/lib/fullTextSearch/SearchHeaderItem.d.ts +2 -0
- package/lib/fullTextSearch/SearchHeaderItem.d.ts.map +1 -0
- package/lib/fullTextSearch/SearchHeaderItem.generated.d.ts +25 -0
- package/lib/fullTextSearch/SearchHeaderItem.generated.d.ts.map +1 -0
- package/lib/fullTextSearch/SearchHeaderItem.generated.js +5 -0
- package/lib/fullTextSearch/SearchHeaderItem.js +175 -0
- package/lib/graphql.generated.d.ts +1166 -0
- package/lib/graphql.generated.d.ts.map +1 -0
- package/lib/graphql.generated.js +1 -0
- package/lib/index.d.ts +188 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +155 -0
- package/lib/pages/LocalPageTreeNodeDocumentAnchors.d.ts +9 -0
- package/lib/pages/LocalPageTreeNodeDocumentAnchors.d.ts.map +1 -0
- package/lib/pages/LocalPageTreeNodeDocumentAnchors.js +15 -0
- package/lib/pages/SaveConflictDialog.d.ts +8 -0
- package/lib/pages/SaveConflictDialog.d.ts.map +1 -0
- package/lib/pages/SaveConflictDialog.js +177 -0
- package/lib/pages/config/usePageTreeScope.d.ts +3 -0
- package/lib/pages/config/usePageTreeScope.d.ts.map +1 -0
- package/lib/pages/config/usePageTreeScope.js +18 -0
- package/lib/pages/createEditPageNode.d.ts +25 -0
- package/lib/pages/createEditPageNode.d.ts.map +1 -0
- package/lib/pages/createEditPageNode.generated.d.ts +96 -0
- package/lib/pages/createEditPageNode.generated.d.ts.map +1 -0
- package/lib/pages/createEditPageNode.generated.js +12 -0
- package/lib/pages/createEditPageNode.js +512 -0
- package/lib/pages/createUsePage.d.ts +82 -0
- package/lib/pages/createUsePage.d.ts.map +1 -0
- package/lib/pages/createUsePage.generated.d.ts +30 -0
- package/lib/pages/createUsePage.generated.d.ts.map +1 -0
- package/lib/pages/createUsePage.generated.js +8 -0
- package/lib/pages/createUsePage.js +545 -0
- package/lib/pages/pageSearch/PageSearch.d.ts +9 -0
- package/lib/pages/pageSearch/PageSearch.d.ts.map +1 -0
- package/lib/pages/pageSearch/PageSearch.js +15 -0
- package/lib/pages/pageSearch/usePageSearch.d.ts +31 -0
- package/lib/pages/pageSearch/usePageSearch.d.ts.map +1 -0
- package/lib/pages/pageSearch/usePageSearch.generated.d.ts +12 -0
- package/lib/pages/pageSearch/usePageSearch.generated.d.ts.map +1 -0
- package/lib/pages/pageSearch/usePageSearch.generated.js +5 -0
- package/lib/pages/pageSearch/usePageSearch.js +221 -0
- package/lib/pages/pageTree/CopyPasteMenuItem.d.ts +7 -0
- package/lib/pages/pageTree/CopyPasteMenuItem.d.ts.map +1 -0
- package/lib/pages/pageTree/CopyPasteMenuItem.js +77 -0
- package/lib/pages/pageTree/MovePageMenuItem.d.ts +7 -0
- package/lib/pages/pageTree/MovePageMenuItem.d.ts.map +1 -0
- package/lib/pages/pageTree/MovePageMenuItem.generated.d.ts +19 -0
- package/lib/pages/pageTree/MovePageMenuItem.generated.d.ts.map +1 -0
- package/lib/pages/pageTree/MovePageMenuItem.generated.js +5 -0
- package/lib/pages/pageTree/MovePageMenuItem.js +105 -0
- package/lib/pages/pageTree/Page.d.ts +3 -0
- package/lib/pages/pageTree/Page.d.ts.map +1 -0
- package/lib/pages/pageTree/Page.generated.d.ts +14 -0
- package/lib/pages/pageTree/Page.generated.d.ts.map +1 -0
- package/lib/pages/pageTree/Page.generated.js +5 -0
- package/lib/pages/pageTree/Page.js +4 -0
- package/lib/pages/pageTree/PageActions.d.ts +11 -0
- package/lib/pages/pageTree/PageActions.d.ts.map +1 -0
- package/lib/pages/pageTree/PageActions.js +192 -0
- package/lib/pages/pageTree/PageDeleteDialog.d.ts +10 -0
- package/lib/pages/pageTree/PageDeleteDialog.d.ts.map +1 -0
- package/lib/pages/pageTree/PageDeleteDialog.js +165 -0
- package/lib/pages/pageTree/PageDeleteDialog.sc.d.ts +6 -0
- package/lib/pages/pageTree/PageDeleteDialog.sc.d.ts.map +1 -0
- package/lib/pages/pageTree/PageDeleteDialog.sc.js +57 -0
- package/lib/pages/pageTree/PageInfo.d.ts +9 -0
- package/lib/pages/pageTree/PageInfo.d.ts.map +1 -0
- package/lib/pages/pageTree/PageInfo.js +65 -0
- package/lib/pages/pageTree/PageLabel.d.ts +10 -0
- package/lib/pages/pageTree/PageLabel.d.ts.map +1 -0
- package/lib/pages/pageTree/PageLabel.js +113 -0
- package/lib/pages/pageTree/PageTree.d.ts +17 -0
- package/lib/pages/pageTree/PageTree.d.ts.map +1 -0
- package/lib/pages/pageTree/PageTree.generated.d.ts +76 -0
- package/lib/pages/pageTree/PageTree.generated.d.ts.map +1 -0
- package/lib/pages/pageTree/PageTree.generated.js +13 -0
- package/lib/pages/pageTree/PageTree.js +478 -0
- package/lib/pages/pageTree/PageTreeContext.d.ts +17 -0
- package/lib/pages/pageTree/PageTreeContext.d.ts.map +1 -0
- package/lib/pages/pageTree/PageTreeContext.js +2 -0
- package/lib/pages/pageTree/PageTreeDragLayer.d.ts +6 -0
- package/lib/pages/pageTree/PageTreeDragLayer.d.ts.map +1 -0
- package/lib/pages/pageTree/PageTreeDragLayer.js +56 -0
- package/lib/pages/pageTree/PageTreeDragLayer.sc.d.ts +3 -0
- package/lib/pages/pageTree/PageTreeDragLayer.sc.d.ts.map +1 -0
- package/lib/pages/pageTree/PageTreeDragLayer.sc.js +28 -0
- package/lib/pages/pageTree/PageTreeRow.d.ts +26 -0
- package/lib/pages/pageTree/PageTreeRow.d.ts.map +1 -0
- package/lib/pages/pageTree/PageTreeRow.js +275 -0
- package/lib/pages/pageTree/PageTreeRow.sc.d.ts +7 -0
- package/lib/pages/pageTree/PageTreeRow.sc.d.ts.map +1 -0
- package/lib/pages/pageTree/PageTreeRow.sc.js +94 -0
- package/lib/pages/pageTree/PageTreeRowDivider.d.ts +8 -0
- package/lib/pages/pageTree/PageTreeRowDivider.d.ts.map +1 -0
- package/lib/pages/pageTree/PageTreeRowDivider.js +70 -0
- package/lib/pages/pageTree/PageTreeService.d.ts +43 -0
- package/lib/pages/pageTree/PageTreeService.d.ts.map +1 -0
- package/lib/pages/pageTree/PageTreeService.js +388 -0
- package/lib/pages/pageTree/PageTypeIcon.d.ts +9 -0
- package/lib/pages/pageTree/PageTypeIcon.d.ts.map +1 -0
- package/lib/pages/pageTree/PageTypeIcon.js +30 -0
- package/lib/pages/pageTree/PageVisibility.d.ts +8 -0
- package/lib/pages/pageTree/PageVisibility.d.ts.map +1 -0
- package/lib/pages/pageTree/PageVisibility.generated.d.ts +21 -0
- package/lib/pages/pageTree/PageVisibility.generated.d.ts.map +1 -0
- package/lib/pages/pageTree/PageVisibility.generated.js +5 -0
- package/lib/pages/pageTree/PageVisibility.js +149 -0
- package/lib/pages/pageTree/PageVisibilityIcon.d.ts +9 -0
- package/lib/pages/pageTree/PageVisibilityIcon.d.ts.map +1 -0
- package/lib/pages/pageTree/PageVisibilityIcon.js +21 -0
- package/lib/pages/pageTree/common/PageTreeTableRow.d.ts +15 -0
- package/lib/pages/pageTree/common/PageTreeTableRow.d.ts.map +1 -0
- package/lib/pages/pageTree/common/PageTreeTableRow.js +94 -0
- package/lib/pages/pageTree/findAvailableSlug.d.ts +11 -0
- package/lib/pages/pageTree/findAvailableSlug.d.ts.map +1 -0
- package/lib/pages/pageTree/findAvailableSlug.generated.d.ts +16 -0
- package/lib/pages/pageTree/findAvailableSlug.generated.d.ts.map +1 -0
- package/lib/pages/pageTree/findAvailableSlug.generated.js +5 -0
- package/lib/pages/pageTree/findAvailableSlug.js +62 -0
- package/lib/pages/pageTree/transformToSlug.d.ts +2 -0
- package/lib/pages/pageTree/transformToSlug.d.ts.map +1 -0
- package/lib/pages/pageTree/transformToSlug.js +12 -0
- package/lib/pages/pageTree/treemap/TreeMapUtils.d.ts +95 -0
- package/lib/pages/pageTree/treemap/TreeMapUtils.d.ts.map +1 -0
- package/lib/pages/pageTree/treemap/TreeMapUtils.js +236 -0
- package/lib/pages/pageTree/useButtonHoverStates.d.ts +11 -0
- package/lib/pages/pageTree/useButtonHoverStates.d.ts.map +1 -0
- package/lib/pages/pageTree/useButtonHoverStates.js +39 -0
- package/lib/pages/pageTree/useCopyPastePages/createInboxFolder.d.ts +10 -0
- package/lib/pages/pageTree/useCopyPastePages/createInboxFolder.d.ts.map +1 -0
- package/lib/pages/pageTree/useCopyPastePages/createInboxFolder.generated.d.ts +18 -0
- package/lib/pages/pageTree/useCopyPastePages/createInboxFolder.generated.d.ts.map +1 -0
- package/lib/pages/pageTree/useCopyPastePages/createInboxFolder.generated.js +5 -0
- package/lib/pages/pageTree/useCopyPastePages/createInboxFolder.js +44 -0
- package/lib/pages/pageTree/useCopyPastePages/sendPages.d.ts +40 -0
- package/lib/pages/pageTree/useCopyPastePages/sendPages.d.ts.map +1 -0
- package/lib/pages/pageTree/useCopyPastePages/sendPages.generated.d.ts +56 -0
- package/lib/pages/pageTree/useCopyPastePages/sendPages.generated.d.ts.map +1 -0
- package/lib/pages/pageTree/useCopyPastePages/sendPages.generated.js +9 -0
- package/lib/pages/pageTree/useCopyPastePages/sendPages.js +605 -0
- package/lib/pages/pageTree/useCopyPastePages.d.ts +52 -0
- package/lib/pages/pageTree/useCopyPastePages.d.ts.map +1 -0
- package/lib/pages/pageTree/useCopyPastePages.js +269 -0
- package/lib/pages/pageTree/useDndWindowScroll/ScrollManager.d.ts +13 -0
- package/lib/pages/pageTree/useDndWindowScroll/ScrollManager.d.ts.map +1 -0
- package/lib/pages/pageTree/useDndWindowScroll/ScrollManager.js +54 -0
- package/lib/pages/pageTree/useDndWindowScroll/useAnimationFrame.d.ts +2 -0
- package/lib/pages/pageTree/useDndWindowScroll/useAnimationFrame.d.ts.map +1 -0
- package/lib/pages/pageTree/useDndWindowScroll/useAnimationFrame.js +26 -0
- package/lib/pages/pageTree/useDndWindowScroll/useDndWindowScroll.d.ts +9 -0
- package/lib/pages/pageTree/useDndWindowScroll/useDndWindowScroll.d.ts.map +1 -0
- package/lib/pages/pageTree/useDndWindowScroll/useDndWindowScroll.js +51 -0
- package/lib/pages/pageTree/usePageTree.d.ts +34 -0
- package/lib/pages/pageTree/usePageTree.d.ts.map +1 -0
- package/lib/pages/pageTree/usePageTree.generated.d.ts +20 -0
- package/lib/pages/pageTree/usePageTree.generated.d.ts.map +1 -0
- package/lib/pages/pageTree/usePageTree.generated.js +5 -0
- package/lib/pages/pageTree/usePageTree.js +177 -0
- package/lib/pages/pageTree/usePageTreeContext.d.ts +3 -0
- package/lib/pages/pageTree/usePageTreeContext.d.ts.map +1 -0
- package/lib/pages/pageTree/usePageTreeContext.js +9 -0
- package/lib/pages/pageTree/useProgressDialog.d.ts +11 -0
- package/lib/pages/pageTree/useProgressDialog.d.ts.map +1 -0
- package/lib/pages/pageTree/useProgressDialog.js +103 -0
- package/lib/pages/pageTree/useTranslatePagesAction.d.ts +16 -0
- package/lib/pages/pageTree/useTranslatePagesAction.d.ts.map +1 -0
- package/lib/pages/pageTree/useTranslatePagesAction.generated.d.ts +20 -0
- package/lib/pages/pageTree/useTranslatePagesAction.generated.d.ts.map +1 -0
- package/lib/pages/pageTree/useTranslatePagesAction.generated.js +5 -0
- package/lib/pages/pageTree/useTranslatePagesAction.js +339 -0
- package/lib/pages/pageTreeConfig.d.ts +19 -0
- package/lib/pages/pageTreeConfig.d.ts.map +1 -0
- package/lib/pages/pageTreeConfig.js +8 -0
- package/lib/pages/pageTreeSelect/FinalFormPageTreeSelect.d.ts +7 -0
- package/lib/pages/pageTreeSelect/FinalFormPageTreeSelect.d.ts.map +1 -0
- package/lib/pages/pageTreeSelect/FinalFormPageTreeSelect.js +9 -0
- package/lib/pages/pageTreeSelect/PageTreeSelect.d.ts +8 -0
- package/lib/pages/pageTreeSelect/PageTreeSelect.d.ts.map +1 -0
- package/lib/pages/pageTreeSelect/PageTreeSelect.generated.d.ts +17 -0
- package/lib/pages/pageTreeSelect/PageTreeSelect.generated.d.ts.map +1 -0
- package/lib/pages/pageTreeSelect/PageTreeSelect.generated.js +5 -0
- package/lib/pages/pageTreeSelect/PageTreeSelect.js +72 -0
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.d.ts +18 -0
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.d.ts.map +1 -0
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.generated.d.ts +13 -0
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.generated.d.ts.map +1 -0
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.generated.js +5 -0
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.js +389 -0
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.sc.d.ts +5 -0
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.sc.d.ts.map +1 -0
- package/lib/pages/pageTreeSelect/PageTreeSelectDialog.sc.js +55 -0
- package/lib/pages/pagesPage/ConfirmPageActionDialog.d.ts +10 -0
- package/lib/pages/pagesPage/ConfirmPageActionDialog.d.ts.map +1 -0
- package/lib/pages/pagesPage/ConfirmPageActionDialog.js +100 -0
- package/lib/pages/pagesPage/PageCanNotDeleteDialog.d.ts +7 -0
- package/lib/pages/pagesPage/PageCanNotDeleteDialog.d.ts.map +1 -0
- package/lib/pages/pagesPage/PageCanNotDeleteDialog.js +37 -0
- package/lib/pages/pagesPage/PagesPage.d.ts +14 -0
- package/lib/pages/pagesPage/PagesPage.d.ts.map +1 -0
- package/lib/pages/pagesPage/PagesPage.js +322 -0
- package/lib/pages/pagesPage/PagesPageActionToolbar.d.ts +13 -0
- package/lib/pages/pagesPage/PagesPageActionToolbar.d.ts.map +1 -0
- package/lib/pages/pagesPage/PagesPageActionToolbar.js +505 -0
- package/lib/pages/pagesPage/PagesPageActionToolbar.sc.d.ts +9 -0
- package/lib/pages/pagesPage/PagesPageActionToolbar.sc.d.ts.map +1 -0
- package/lib/pages/pagesPage/PagesPageActionToolbar.sc.js +50 -0
- package/lib/pages/pagesPage/PagesPageActionToolbarBatchUpdateHelper.d.ts +6 -0
- package/lib/pages/pagesPage/PagesPageActionToolbarBatchUpdateHelper.d.ts.map +1 -0
- package/lib/pages/pagesPage/PagesPageActionToolbarBatchUpdateHelper.js +83 -0
- package/lib/pages/pagesPage/areAllSubTreesFullSelected.d.ts +3 -0
- package/lib/pages/pagesPage/areAllSubTreesFullSelected.d.ts.map +1 -0
- package/lib/pages/pagesPage/areAllSubTreesFullSelected.js +16 -0
- package/lib/pages/pagesPage/createPagesQuery.d.ts +11 -0
- package/lib/pages/pagesPage/createPagesQuery.d.ts.map +1 -0
- package/lib/pages/pagesPage/createPagesQuery.generated.d.ts +27 -0
- package/lib/pages/pagesPage/createPagesQuery.generated.d.ts.map +1 -0
- package/lib/pages/pagesPage/createPagesQuery.generated.js +5 -0
- package/lib/pages/pagesPage/createPagesQuery.js +11 -0
- package/lib/pages/resolveHasSaveConflict.d.ts +2 -0
- package/lib/pages/resolveHasSaveConflict.d.ts.map +1 -0
- package/lib/pages/resolveHasSaveConflict.js +9 -0
- package/lib/pages/usePageTreeDocumentAnchors.d.ts +6 -0
- package/lib/pages/usePageTreeDocumentAnchors.d.ts.map +1 -0
- package/lib/pages/usePageTreeDocumentAnchors.generated.d.ts +17 -0
- package/lib/pages/usePageTreeDocumentAnchors.generated.d.ts.map +1 -0
- package/lib/pages/usePageTreeDocumentAnchors.generated.js +5 -0
- package/lib/pages/usePageTreeDocumentAnchors.js +41 -0
- package/lib/pages/useSaveConflict.d.ts +15 -0
- package/lib/pages/useSaveConflict.d.ts.map +1 -0
- package/lib/pages/useSaveConflict.js +149 -0
- package/lib/pages/useSaveConflictQuery.d.ts +14 -0
- package/lib/pages/useSaveConflictQuery.d.ts.map +1 -0
- package/lib/pages/useSaveConflictQuery.js +70 -0
- package/lib/preview/block/BlockPreview.d.ts +9 -0
- package/lib/preview/block/BlockPreview.d.ts.map +1 -0
- package/lib/preview/block/BlockPreview.generated.d.ts +16 -0
- package/lib/preview/block/BlockPreview.generated.d.ts.map +1 -0
- package/lib/preview/block/BlockPreview.generated.js +5 -0
- package/lib/preview/block/BlockPreview.js +119 -0
- package/lib/preview/block/BlockPreviewWithTabs.d.ts +11 -0
- package/lib/preview/block/BlockPreviewWithTabs.d.ts.map +1 -0
- package/lib/preview/block/BlockPreviewWithTabs.js +38 -0
- package/lib/preview/block/SplitPreview.d.ts +11 -0
- package/lib/preview/block/SplitPreview.d.ts.map +1 -0
- package/lib/preview/block/SplitPreview.js +77 -0
- package/lib/preview/block/SplitPreview.sc.d.ts +18 -0
- package/lib/preview/block/SplitPreview.sc.d.ts.map +1 -0
- package/lib/preview/block/SplitPreview.sc.js +89 -0
- package/lib/preview/block/useBlockPreview.d.ts +13 -0
- package/lib/preview/block/useBlockPreview.d.ts.map +1 -0
- package/lib/preview/block/useBlockPreview.js +31 -0
- package/lib/preview/common/Device.d.ts +8 -0
- package/lib/preview/common/Device.d.ts.map +1 -0
- package/lib/preview/common/Device.js +10 -0
- package/lib/preview/common/DeviceToggle.d.ts +8 -0
- package/lib/preview/common/DeviceToggle.d.ts.map +1 -0
- package/lib/preview/common/DeviceToggle.js +50 -0
- package/lib/preview/common/IFrameViewer.d.ts +8 -0
- package/lib/preview/common/IFrameViewer.d.ts.map +1 -0
- package/lib/preview/common/IFrameViewer.js +127 -0
- package/lib/preview/common/ToggleButton.d.ts +3 -0
- package/lib/preview/common/ToggleButton.d.ts.map +1 -0
- package/lib/preview/common/ToggleButton.js +18 -0
- package/lib/preview/common/VisibilityToggle.d.ts +7 -0
- package/lib/preview/common/VisibilityToggle.d.ts.map +1 -0
- package/lib/preview/common/VisibilityToggle.js +23 -0
- package/lib/preview/openSitePreviewWindow.d.ts +7 -0
- package/lib/preview/openSitePreviewWindow.d.ts.map +1 -0
- package/lib/preview/openSitePreviewWindow.js +13 -0
- package/lib/preview/site/OpenLinkDialog.d.ts +9 -0
- package/lib/preview/site/OpenLinkDialog.d.ts.map +1 -0
- package/lib/preview/site/OpenLinkDialog.js +86 -0
- package/lib/preview/site/SitePreview.d.ts +10 -0
- package/lib/preview/site/SitePreview.d.ts.map +1 -0
- package/lib/preview/site/SitePreview.generated.d.ts +16 -0
- package/lib/preview/site/SitePreview.generated.d.ts.map +1 -0
- package/lib/preview/site/SitePreview.generated.js +5 -0
- package/lib/preview/site/SitePreview.js +217 -0
- package/lib/preview/site/SitePreview.sc.d.ts +7 -0
- package/lib/preview/site/SitePreview.sc.d.ts.map +1 -0
- package/lib/preview/site/SitePreview.sc.js +69 -0
- package/lib/preview/site/iframebridge/SitePreviewIFrameMessage.d.ts +18 -0
- package/lib/preview/site/iframebridge/SitePreviewIFrameMessage.d.ts.map +1 -0
- package/lib/preview/site/iframebridge/SitePreviewIFrameMessage.js +9 -0
- package/lib/preview/site/iframebridge/useSitePreviewIFrameBridge.d.ts +3 -0
- package/lib/preview/site/iframebridge/useSitePreviewIFrameBridge.d.ts.map +1 -0
- package/lib/preview/site/iframebridge/useSitePreviewIFrameBridge.js +22 -0
- package/lib/redirects/RedirectActiveness.d.ts +9 -0
- package/lib/redirects/RedirectActiveness.d.ts.map +1 -0
- package/lib/redirects/RedirectActiveness.generated.d.ts +28 -0
- package/lib/redirects/RedirectActiveness.generated.d.ts.map +1 -0
- package/lib/redirects/RedirectActiveness.generated.js +8 -0
- package/lib/redirects/RedirectActiveness.js +100 -0
- package/lib/redirects/RedirectForm.d.ts +20 -0
- package/lib/redirects/RedirectForm.d.ts.map +1 -0
- package/lib/redirects/RedirectForm.generated.d.ts +15 -0
- package/lib/redirects/RedirectForm.generated.d.ts.map +1 -0
- package/lib/redirects/RedirectForm.generated.js +5 -0
- package/lib/redirects/RedirectForm.gql.d.ts +4 -0
- package/lib/redirects/RedirectForm.gql.d.ts.map +1 -0
- package/lib/redirects/RedirectForm.gql.generated.d.ts +75 -0
- package/lib/redirects/RedirectForm.gql.generated.d.ts.map +1 -0
- package/lib/redirects/RedirectForm.gql.generated.js +12 -0
- package/lib/redirects/RedirectForm.gql.js +7 -0
- package/lib/redirects/RedirectForm.js +313 -0
- package/lib/redirects/RedirectsGrid.d.ts +9 -0
- package/lib/redirects/RedirectsGrid.d.ts.map +1 -0
- package/lib/redirects/RedirectsGrid.gql.d.ts +4 -0
- package/lib/redirects/RedirectsGrid.gql.d.ts.map +1 -0
- package/lib/redirects/RedirectsGrid.gql.generated.d.ts +65 -0
- package/lib/redirects/RedirectsGrid.gql.generated.d.ts.map +1 -0
- package/lib/redirects/RedirectsGrid.gql.generated.js +12 -0
- package/lib/redirects/RedirectsGrid.gql.js +11 -0
- package/lib/redirects/RedirectsGrid.js +313 -0
- package/lib/redirects/createRedirectsPage.d.ts +12 -0
- package/lib/redirects/createRedirectsPage.d.ts.map +1 -0
- package/lib/redirects/createRedirectsPage.js +137 -0
- package/lib/redirects/redirectsConfig.d.ts +7 -0
- package/lib/redirects/redirectsConfig.d.ts.map +1 -0
- package/lib/redirects/redirectsConfig.js +20 -0
- package/lib/redirects/submitMutation.d.ts +9 -0
- package/lib/redirects/submitMutation.d.ts.map +1 -0
- package/lib/redirects/submitMutation.js +53 -0
- package/lib/siteConfigs/siteConfigsConfig.d.ts +12 -0
- package/lib/siteConfigs/siteConfigsConfig.d.ts.map +1 -0
- package/lib/siteConfigs/siteConfigsConfig.js +1 -0
- package/lib/siteConfigs/useSiteConfig.d.ts +6 -0
- package/lib/siteConfigs/useSiteConfig.d.ts.map +1 -0
- package/lib/siteConfigs/useSiteConfig.js +17 -0
- package/lib/siteConfigs/useSiteConfigs.d.ts +3 -0
- package/lib/siteConfigs/useSiteConfigs.d.ts.map +1 -0
- package/lib/siteConfigs/useSiteConfigs.js +8 -0
- package/lib/storybook.d.js +1 -0
- package/lib/testing/test-utils.d.ts +6 -0
- package/lib/testing/test-utils.d.ts.map +1 -0
- package/lib/testing/test-utils.js +34 -0
- package/lib/translation/AzureAiTranslatorProvider.d.ts +8 -0
- package/lib/translation/AzureAiTranslatorProvider.d.ts.map +1 -0
- package/lib/translation/AzureAiTranslatorProvider.generated.d.ts +22 -0
- package/lib/translation/AzureAiTranslatorProvider.generated.d.ts.map +1 -0
- package/lib/translation/AzureAiTranslatorProvider.generated.js +6 -0
- package/lib/translation/AzureAiTranslatorProvider.js +91 -0
- package/lib/translation/TranslatableInterface.d.ts +4 -0
- package/lib/translation/TranslatableInterface.d.ts.map +1 -0
- package/lib/translation/TranslatableInterface.js +1 -0
- package/lib/translation/TranslateContentMenuItem.d.ts +7 -0
- package/lib/translation/TranslateContentMenuItem.d.ts.map +1 -0
- package/lib/translation/TranslateContentMenuItem.js +99 -0
- package/lib/translation/createDocumentTranslationMethods.d.ts +4 -0
- package/lib/translation/createDocumentTranslationMethods.d.ts.map +1 -0
- package/lib/translation/createDocumentTranslationMethods.js +62 -0
- package/lib/userPermissions/ImpersonateMenuItem.d.ts +4 -0
- package/lib/userPermissions/ImpersonateMenuItem.d.ts.map +1 -0
- package/lib/userPermissions/ImpersonateMenuItem.generated.d.ts +18 -0
- package/lib/userPermissions/ImpersonateMenuItem.generated.d.ts.map +1 -0
- package/lib/userPermissions/ImpersonateMenuItem.generated.js +5 -0
- package/lib/userPermissions/ImpersonateMenuItem.js +63 -0
- package/lib/userPermissions/UserGrid.d.ts +11 -0
- package/lib/userPermissions/UserGrid.d.ts.map +1 -0
- package/lib/userPermissions/UserGrid.generated.d.ts +53 -0
- package/lib/userPermissions/UserGrid.generated.d.ts.map +1 -0
- package/lib/userPermissions/UserGrid.generated.js +9 -0
- package/lib/userPermissions/UserGrid.js +225 -0
- package/lib/userPermissions/UserPermissionsPage.d.ts +2 -0
- package/lib/userPermissions/UserPermissionsPage.d.ts.map +1 -0
- package/lib/userPermissions/UserPermissionsPage.js +89 -0
- package/lib/userPermissions/hooks/currentUser.d.ts +39 -0
- package/lib/userPermissions/hooks/currentUser.d.ts.map +1 -0
- package/lib/userPermissions/hooks/currentUser.generated.d.ts +36 -0
- package/lib/userPermissions/hooks/currentUser.generated.d.ts.map +1 -0
- package/lib/userPermissions/hooks/currentUser.generated.js +5 -0
- package/lib/userPermissions/hooks/currentUser.js +100 -0
- package/lib/userPermissions/user/ImpersonationButtons.d.ts +6 -0
- package/lib/userPermissions/user/ImpersonationButtons.d.ts.map +1 -0
- package/lib/userPermissions/user/ImpersonationButtons.js +76 -0
- package/lib/userPermissions/user/UserPageToolbar.d.ts +4 -0
- package/lib/userPermissions/user/UserPageToolbar.d.ts.map +1 -0
- package/lib/userPermissions/user/UserPageToolbar.generated.d.ts +19 -0
- package/lib/userPermissions/user/UserPageToolbar.generated.d.ts.map +1 -0
- package/lib/userPermissions/user/UserPageToolbar.generated.js +5 -0
- package/lib/userPermissions/user/UserPageToolbar.js +83 -0
- package/lib/userPermissions/user/basicData/UserBasicData.d.ts +4 -0
- package/lib/userPermissions/user/basicData/UserBasicData.d.ts.map +1 -0
- package/lib/userPermissions/user/basicData/UserBasicData.generated.d.ts +19 -0
- package/lib/userPermissions/user/basicData/UserBasicData.generated.d.ts.map +1 -0
- package/lib/userPermissions/user/basicData/UserBasicData.generated.js +5 -0
- package/lib/userPermissions/user/basicData/UserBasicData.js +71 -0
- package/lib/userPermissions/user/permissions/ContentScopeGrid.d.ts +7 -0
- package/lib/userPermissions/user/permissions/ContentScopeGrid.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/ContentScopeGrid.generated.d.ts +20 -0
- package/lib/userPermissions/user/permissions/ContentScopeGrid.generated.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/ContentScopeGrid.generated.js +5 -0
- package/lib/userPermissions/user/permissions/ContentScopeGrid.js +146 -0
- package/lib/userPermissions/user/permissions/OverrideContentScopesDialog.d.ts +8 -0
- package/lib/userPermissions/user/permissions/OverrideContentScopesDialog.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/OverrideContentScopesDialog.generated.d.ts +38 -0
- package/lib/userPermissions/user/permissions/OverrideContentScopesDialog.generated.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/OverrideContentScopesDialog.generated.js +8 -0
- package/lib/userPermissions/user/permissions/OverrideContentScopesDialog.js +169 -0
- package/lib/userPermissions/user/permissions/PermissionDialog.d.ts +8 -0
- package/lib/userPermissions/user/permissions/PermissionDialog.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/PermissionDialog.generated.d.ts +71 -0
- package/lib/userPermissions/user/permissions/PermissionDialog.generated.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/PermissionDialog.generated.js +13 -0
- package/lib/userPermissions/user/permissions/PermissionDialog.js +242 -0
- package/lib/userPermissions/user/permissions/PermissionGrid.d.ts +4 -0
- package/lib/userPermissions/user/permissions/PermissionGrid.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/PermissionGrid.generated.d.ts +50 -0
- package/lib/userPermissions/user/permissions/PermissionGrid.generated.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/PermissionGrid.generated.js +11 -0
- package/lib/userPermissions/user/permissions/PermissionGrid.js +216 -0
- package/lib/userPermissions/user/permissions/PermissionsPanel.d.ts +4 -0
- package/lib/userPermissions/user/permissions/PermissionsPanel.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/PermissionsPanel.js +18 -0
- package/lib/userPermissions/user/permissions/selectScopesDialogContent/SelectScopesDialogContent.d.ts +10 -0
- package/lib/userPermissions/user/permissions/selectScopesDialogContent/SelectScopesDialogContent.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/selectScopesDialogContent/SelectScopesDialogContent.generated.d.ts +29 -0
- package/lib/userPermissions/user/permissions/selectScopesDialogContent/SelectScopesDialogContent.generated.d.ts.map +1 -0
- package/lib/userPermissions/user/permissions/selectScopesDialogContent/SelectScopesDialogContent.generated.js +8 -0
- package/lib/userPermissions/user/permissions/selectScopesDialogContent/SelectScopesDialogContent.js +129 -0
- package/lib/userPermissions/utils/camelCaseToHumanReadable.d.ts +2 -0
- package/lib/userPermissions/utils/camelCaseToHumanReadable.d.ts.map +1 -0
- package/lib/userPermissions/utils/camelCaseToHumanReadable.js +6 -0
- package/lib/userPermissions/utils/handleImpersonation.d.ts +3 -0
- package/lib/userPermissions/utils/handleImpersonation.d.ts.map +1 -0
- package/lib/userPermissions/utils/handleImpersonation.js +37 -0
- package/lib/validation/isLinkTarget.d.ts +2 -0
- package/lib/validation/isLinkTarget.d.ts.map +1 -0
- package/lib/validation/isLinkTarget.js +18 -0
- package/lib/validation/isPhoneNumber.d.ts +2 -0
- package/lib/validation/isPhoneNumber.d.ts.map +1 -0
- package/lib/validation/isPhoneNumber.js +4 -0
- package/lib/validation/validateJson.d.ts +2 -0
- package/lib/validation/validateJson.d.ts.map +1 -0
- package/lib/validation/validateJson.js +15 -0
- package/lib/validation/validateLinkTarget.d.ts +2 -0
- package/lib/validation/validateLinkTarget.d.ts.map +1 -0
- package/lib/validation/validateLinkTarget.js +11 -0
- package/lib/validation/validatePhoneNumber.d.ts +2 -0
- package/lib/validation/validatePhoneNumber.d.ts.map +1 -0
- package/lib/validation/validatePhoneNumber.js +11 -0
- package/lib/validation/validateUrl.d.ts +2 -0
- package/lib/validation/validateUrl.d.ts.map +1 -0
- package/lib/validation/validateUrl.js +11 -0
- package/lib/vendors.d.js +1 -0
- package/lib/warnings/LatestWarningsDashboardWidget.d.ts +2 -0
- package/lib/warnings/LatestWarningsDashboardWidget.d.ts.map +1 -0
- package/lib/warnings/LatestWarningsDashboardWidget.generated.d.ts +47 -0
- package/lib/warnings/LatestWarningsDashboardWidget.generated.d.ts.map +1 -0
- package/lib/warnings/LatestWarningsDashboardWidget.generated.js +8 -0
- package/lib/warnings/LatestWarningsDashboardWidget.js +105 -0
- package/lib/warnings/WarningActions.d.ts +13 -0
- package/lib/warnings/WarningActions.d.ts.map +1 -0
- package/lib/warnings/WarningActions.js +115 -0
- package/lib/warnings/WarningMessage.d.ts +8 -0
- package/lib/warnings/WarningMessage.d.ts.map +1 -0
- package/lib/warnings/WarningMessage.js +11 -0
- package/lib/warnings/WarningSeverity.d.ts +7 -0
- package/lib/warnings/WarningSeverity.d.ts.map +1 -0
- package/lib/warnings/WarningSeverity.js +37 -0
- package/lib/warnings/WarningsGrid.d.ts +2 -0
- package/lib/warnings/WarningsGrid.d.ts.map +1 -0
- package/lib/warnings/WarningsGrid.generated.d.ts +67 -0
- package/lib/warnings/WarningsGrid.generated.d.ts.map +1 -0
- package/lib/warnings/WarningsGrid.generated.js +8 -0
- package/lib/warnings/WarningsGrid.js +286 -0
- package/lib/warnings/WarningsPage.d.ts +2 -0
- package/lib/warnings/WarningsPage.d.ts.map +1 -0
- package/lib/warnings/WarningsPage.js +19 -0
- package/lib/warnings/warningMessages.d.ts +10 -0
- package/lib/warnings/warningMessages.d.ts.map +1 -0
- package/lib/warnings/warningMessages.js +32 -0
- package/lib/warnings/warningsConfig.d.ts +6 -0
- package/lib/warnings/warningsConfig.d.ts.map +1 -0
- package/lib/warnings/warningsConfig.js +15 -0
- package/package.json +185 -0
|
@@ -0,0 +1,1071 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
3
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
4
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
5
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
6
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
7
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
8
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
9
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
10
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
11
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
12
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
13
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
14
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
15
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
16
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
17
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
18
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
19
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
20
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
21
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
22
|
+
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
23
|
+
import { RowActionsItem, RowActionsMenu, StackPage, StackPageTitle, StackSwitch, StackSwitchApiContext, Tooltip, UndoSnackbar, useSnackbarApi } from "@dextinity/admin";
|
|
24
|
+
import { Add, Copy, Delete, Invisible, Paste, Visible } from "@dextinity/admin-icons";
|
|
25
|
+
import { Box, Checkbox, FormControlLabel, IconButton, Typography } from "@mui/material";
|
|
26
|
+
import { styled } from "@mui/material/styles";
|
|
27
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
28
|
+
import { FormattedMessage } from "react-intl";
|
|
29
|
+
import { v4 as uuid } from "uuid";
|
|
30
|
+
import { useContentScope } from "../../contentScope/Provider";
|
|
31
|
+
import { CannotPasteBlockDialog } from "../clipboard/CannotPasteBlockDialog";
|
|
32
|
+
import { useBlockClipboard } from "../clipboard/useBlockClipboard";
|
|
33
|
+
import { AddBlockDrawer } from "../common/AddBlockDrawer";
|
|
34
|
+
import { AdminComponentStickyFooter } from "../common/AdminComponentStickyFooter";
|
|
35
|
+
import { AdminComponentStickyHeader } from "../common/AdminComponentStickyHeader";
|
|
36
|
+
import { BlockAdminComponentButton } from "../common/BlockAdminComponentButton";
|
|
37
|
+
import { BlockAdminComponentPaper } from "../common/BlockAdminComponentPaper";
|
|
38
|
+
import { BlockPreviewContent } from "../common/blockRow/BlockPreviewContent";
|
|
39
|
+
import { BlockRow } from "../common/blockRow/BlockRow";
|
|
40
|
+
import { useBlocksConfig } from "../config/BlocksConfigContext";
|
|
41
|
+
import { createBlockSkeleton } from "../helpers/createBlockSkeleton";
|
|
42
|
+
import { deduplicateBlockDependencies } from "../helpers/deduplicateBlockDependencies";
|
|
43
|
+
import { HoverPreviewComponent } from "../iframebridge/HoverPreviewComponent";
|
|
44
|
+
import { SelectPreviewComponent } from "../iframebridge/SelectPreviewComponent";
|
|
45
|
+
import { resolveNewState } from "../utils";
|
|
46
|
+
import { parallelAsyncEvery } from "../utils/parallelAsyncEvery";
|
|
47
|
+
|
|
48
|
+
// Using {} instead of Record<string, never> because never and unknown are incompatible.
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
50
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
51
|
+
export function createBlocksBlock(_ref, override) {
|
|
52
|
+
var supportedBlocks = _ref.supportedBlocks,
|
|
53
|
+
name = _ref.name,
|
|
54
|
+
_ref$displayName = _ref.displayName,
|
|
55
|
+
displayName = _ref$displayName === void 0 ? /*#__PURE__*/_jsx(FormattedMessage, {
|
|
56
|
+
id: "comet.blocks.blocks.name",
|
|
57
|
+
defaultMessage: "Blocks"
|
|
58
|
+
}) : _ref$displayName,
|
|
59
|
+
maxVisibleBlocks = _ref.maxVisibleBlocks,
|
|
60
|
+
additionalItemFields = _ref.additionalItemFields,
|
|
61
|
+
AdditionalItemContextMenuItems = _ref.AdditionalItemContextMenuItems,
|
|
62
|
+
AdditionalItemContent = _ref.AdditionalItemContent,
|
|
63
|
+
tags = _ref.tags;
|
|
64
|
+
if (Object.keys(supportedBlocks).length === 0) {
|
|
65
|
+
throw new Error("Blocks block with no supported block is not allowed. Please specify at least two supported blocks.");
|
|
66
|
+
}
|
|
67
|
+
if (Object.keys(supportedBlocks).length === 1) {
|
|
68
|
+
throw new Error("Blocks block with a single block is not allowed. Please use a list block (createListBlock()) instead.");
|
|
69
|
+
}
|
|
70
|
+
function blockForType(type) {
|
|
71
|
+
var _supportedBlocks$type;
|
|
72
|
+
return (_supportedBlocks$type = supportedBlocks[type]) !== null && _supportedBlocks$type !== void 0 ? _supportedBlocks$type : null;
|
|
73
|
+
}
|
|
74
|
+
function typeForBlock(targetBlock) {
|
|
75
|
+
var _Object$entries$find$, _Object$entries$find;
|
|
76
|
+
return (_Object$entries$find$ = (_Object$entries$find = Object.entries(supportedBlocks).find(function (_ref2) {
|
|
77
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
78
|
+
block = _ref3[1];
|
|
79
|
+
return block.name === targetBlock.name;
|
|
80
|
+
})) === null || _Object$entries$find === void 0 ? void 0 : _Object$entries$find[0]) !== null && _Object$entries$find$ !== void 0 ? _Object$entries$find$ : null;
|
|
81
|
+
}
|
|
82
|
+
var childTags = Object.values(supportedBlocks).reduce(function (acc, block) {
|
|
83
|
+
if (block.tags) {
|
|
84
|
+
return [].concat(_toConsumableArray(acc), _toConsumableArray(block.tags));
|
|
85
|
+
}
|
|
86
|
+
return acc;
|
|
87
|
+
}, []);
|
|
88
|
+
var BlocksBlock = _objectSpread(_objectSpread({}, createBlockSkeleton()), {}, {
|
|
89
|
+
name: name,
|
|
90
|
+
displayName: displayName,
|
|
91
|
+
tags: tags ? tags : childTags,
|
|
92
|
+
defaultValues: function defaultValues() {
|
|
93
|
+
return {
|
|
94
|
+
blocks: []
|
|
95
|
+
};
|
|
96
|
+
},
|
|
97
|
+
input2State: function input2State(input) {
|
|
98
|
+
var blocks = [];
|
|
99
|
+
var _iterator = _createForOfIteratorHelper(input.blocks),
|
|
100
|
+
_step;
|
|
101
|
+
try {
|
|
102
|
+
var _loop = function _loop() {
|
|
103
|
+
var child = _step.value;
|
|
104
|
+
var block = blockForType(child.type);
|
|
105
|
+
if (!block) {
|
|
106
|
+
console.warn("Unknown block type \"".concat(child.type, "\""));
|
|
107
|
+
return 1; // continue
|
|
108
|
+
}
|
|
109
|
+
blocks.push(_objectSpread(_objectSpread(_objectSpread({}, child), {}, {
|
|
110
|
+
props: block.input2State(child.props)
|
|
111
|
+
}, Object.keys(additionalItemFields !== null && additionalItemFields !== void 0 ? additionalItemFields : {}).reduce(function (fields, field) {
|
|
112
|
+
return _objectSpread(_objectSpread({}, fields), {}, _defineProperty({}, field, child[field]));
|
|
113
|
+
}, {})), {}, {
|
|
114
|
+
selected: false,
|
|
115
|
+
slideIn: false
|
|
116
|
+
}));
|
|
117
|
+
};
|
|
118
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
119
|
+
if (_loop()) continue;
|
|
120
|
+
}
|
|
121
|
+
} catch (err) {
|
|
122
|
+
_iterator.e(err);
|
|
123
|
+
} finally {
|
|
124
|
+
_iterator.f();
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
blocks: blocks
|
|
128
|
+
};
|
|
129
|
+
},
|
|
130
|
+
state2Output: function state2Output(state) {
|
|
131
|
+
return {
|
|
132
|
+
blocks: state.blocks.map(function (child) {
|
|
133
|
+
var block = blockForType(child.type);
|
|
134
|
+
if (!block) {
|
|
135
|
+
throw new Error("No Block found for type ".concat(child.type)); // for TS
|
|
136
|
+
}
|
|
137
|
+
return _objectSpread({
|
|
138
|
+
key: child.key,
|
|
139
|
+
visible: child.visible,
|
|
140
|
+
type: child.type,
|
|
141
|
+
props: block.state2Output(child.props)
|
|
142
|
+
}, Object.keys(additionalItemFields !== null && additionalItemFields !== void 0 ? additionalItemFields : {}).reduce(function (fields, field) {
|
|
143
|
+
return _objectSpread(_objectSpread({}, fields), {}, _defineProperty({}, field, child[field]));
|
|
144
|
+
}, {}));
|
|
145
|
+
})
|
|
146
|
+
};
|
|
147
|
+
},
|
|
148
|
+
output2State: function () {
|
|
149
|
+
var _output2State = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(output, context) {
|
|
150
|
+
var state, _iterator2, _step2, child, block, _t, _t2, _t3, _t4, _t5, _t6;
|
|
151
|
+
return _regenerator().w(function (_context) {
|
|
152
|
+
while (1) switch (_context.p = _context.n) {
|
|
153
|
+
case 0:
|
|
154
|
+
state = {
|
|
155
|
+
blocks: []
|
|
156
|
+
};
|
|
157
|
+
_iterator2 = _createForOfIteratorHelper(output.blocks);
|
|
158
|
+
_context.p = 1;
|
|
159
|
+
_iterator2.s();
|
|
160
|
+
case 2:
|
|
161
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
162
|
+
_context.n = 6;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
child = _step2.value;
|
|
166
|
+
block = blockForType(child.type);
|
|
167
|
+
if (block) {
|
|
168
|
+
_context.n = 3;
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
throw new Error("No Block found for type ".concat(child.type));
|
|
172
|
+
case 3:
|
|
173
|
+
_t = state.blocks;
|
|
174
|
+
_t2 = _objectSpread;
|
|
175
|
+
_t3 = _objectSpread({
|
|
176
|
+
slideIn: false
|
|
177
|
+
}, child);
|
|
178
|
+
_t4 = {};
|
|
179
|
+
_context.n = 4;
|
|
180
|
+
return block.output2State(child.props, context);
|
|
181
|
+
case 4:
|
|
182
|
+
_t5 = _context.v;
|
|
183
|
+
_t.push.call(_t, _t2(_t3, _t4, {
|
|
184
|
+
props: _t5,
|
|
185
|
+
selected: false
|
|
186
|
+
}));
|
|
187
|
+
case 5:
|
|
188
|
+
_context.n = 2;
|
|
189
|
+
break;
|
|
190
|
+
case 6:
|
|
191
|
+
_context.n = 8;
|
|
192
|
+
break;
|
|
193
|
+
case 7:
|
|
194
|
+
_context.p = 7;
|
|
195
|
+
_t6 = _context.v;
|
|
196
|
+
_iterator2.e(_t6);
|
|
197
|
+
case 8:
|
|
198
|
+
_context.p = 8;
|
|
199
|
+
_iterator2.f();
|
|
200
|
+
return _context.f(8);
|
|
201
|
+
case 9:
|
|
202
|
+
return _context.a(2, state);
|
|
203
|
+
}
|
|
204
|
+
}, _callee, null, [[1, 7, 8, 9]]);
|
|
205
|
+
}));
|
|
206
|
+
function output2State(_x, _x2) {
|
|
207
|
+
return _output2State.apply(this, arguments);
|
|
208
|
+
}
|
|
209
|
+
return output2State;
|
|
210
|
+
}(),
|
|
211
|
+
createPreviewState: function createPreviewState(state, previewCtx) {
|
|
212
|
+
return {
|
|
213
|
+
adminRoute: previewCtx.parentUrl,
|
|
214
|
+
blocks: state.blocks.filter(function (child) {
|
|
215
|
+
return previewCtx.showVisibleOnly ? child.visible : true;
|
|
216
|
+
}) // depending on context show all blocks or only visible blocks
|
|
217
|
+
.map(function (child) {
|
|
218
|
+
var _previewCtx$parentUrl;
|
|
219
|
+
var blockAdminRoute = "".concat((_previewCtx$parentUrl = previewCtx.parentUrlSubRoute) !== null && _previewCtx$parentUrl !== void 0 ? _previewCtx$parentUrl : previewCtx.parentUrl, "/").concat(child.key, "/blocks");
|
|
220
|
+
var block = blockForType(child.type);
|
|
221
|
+
if (!block) {
|
|
222
|
+
throw new Error("No Block found for type ".concat(child.type)); // for TS
|
|
223
|
+
}
|
|
224
|
+
return _objectSpread({
|
|
225
|
+
key: child.key,
|
|
226
|
+
visible: child.visible,
|
|
227
|
+
type: child.type,
|
|
228
|
+
adminRoute: blockAdminRoute,
|
|
229
|
+
props: block.createPreviewState(child.props, _objectSpread(_objectSpread({}, previewCtx), {}, {
|
|
230
|
+
parentUrlSubRoute: undefined,
|
|
231
|
+
parentUrl: blockAdminRoute
|
|
232
|
+
}))
|
|
233
|
+
}, Object.keys(additionalItemFields !== null && additionalItemFields !== void 0 ? additionalItemFields : {}).reduce(function (fields, field) {
|
|
234
|
+
return _objectSpread(_objectSpread({}, fields), {}, _defineProperty({}, field, child[field]));
|
|
235
|
+
}, {}));
|
|
236
|
+
}),
|
|
237
|
+
adminMeta: {
|
|
238
|
+
route: previewCtx.parentUrl
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
},
|
|
242
|
+
isValid: function () {
|
|
243
|
+
var _isValid = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(state) {
|
|
244
|
+
return _regenerator().w(function (_context3) {
|
|
245
|
+
while (1) switch (_context3.n) {
|
|
246
|
+
case 0:
|
|
247
|
+
return _context3.a(2, parallelAsyncEvery(state.blocks, /*#__PURE__*/function () {
|
|
248
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(c) {
|
|
249
|
+
var block;
|
|
250
|
+
return _regenerator().w(function (_context2) {
|
|
251
|
+
while (1) switch (_context2.n) {
|
|
252
|
+
case 0:
|
|
253
|
+
block = blockForType(c.type);
|
|
254
|
+
if (block) {
|
|
255
|
+
_context2.n = 1;
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
throw new Error("No Block found for type ".concat(c.type));
|
|
259
|
+
case 1:
|
|
260
|
+
return _context2.a(2, block.isValid(c.props));
|
|
261
|
+
}
|
|
262
|
+
}, _callee2);
|
|
263
|
+
}));
|
|
264
|
+
return function (_x4) {
|
|
265
|
+
return _ref4.apply(this, arguments);
|
|
266
|
+
};
|
|
267
|
+
}()));
|
|
268
|
+
}
|
|
269
|
+
}, _callee3);
|
|
270
|
+
}));
|
|
271
|
+
function isValid(_x3) {
|
|
272
|
+
return _isValid.apply(this, arguments);
|
|
273
|
+
}
|
|
274
|
+
return isValid;
|
|
275
|
+
}(),
|
|
276
|
+
childBlockCount: function childBlockCount(state) {
|
|
277
|
+
return state.blocks.length;
|
|
278
|
+
},
|
|
279
|
+
anchors: function anchors(state) {
|
|
280
|
+
return state.blocks.reduce(function (anchors, child) {
|
|
281
|
+
var _block$anchors, _block$anchors2;
|
|
282
|
+
var block = blockForType(child.type);
|
|
283
|
+
if (!block) {
|
|
284
|
+
throw new Error("No Block found for type ".concat(child.type)); // for TS
|
|
285
|
+
}
|
|
286
|
+
return [].concat(_toConsumableArray(anchors), _toConsumableArray((_block$anchors = (_block$anchors2 = block.anchors) === null || _block$anchors2 === void 0 ? void 0 : _block$anchors2.call(block, child.props)) !== null && _block$anchors !== void 0 ? _block$anchors : []));
|
|
287
|
+
}, []);
|
|
288
|
+
},
|
|
289
|
+
dependencies: function dependencies(state) {
|
|
290
|
+
var mergedDependencies = state.blocks.reduce(function (dependencies, child) {
|
|
291
|
+
var _block$dependencies, _block$dependencies2;
|
|
292
|
+
var block = blockForType(child.type);
|
|
293
|
+
if (!block) {
|
|
294
|
+
throw new Error("No Block found for type ".concat(child.type)); // for TS
|
|
295
|
+
}
|
|
296
|
+
return [].concat(_toConsumableArray(dependencies), _toConsumableArray((_block$dependencies = (_block$dependencies2 = block.dependencies) === null || _block$dependencies2 === void 0 ? void 0 : _block$dependencies2.call(block, child.props)) !== null && _block$dependencies !== void 0 ? _block$dependencies : []));
|
|
297
|
+
}, []);
|
|
298
|
+
return deduplicateBlockDependencies(mergedDependencies);
|
|
299
|
+
},
|
|
300
|
+
replaceDependenciesInOutput: function replaceDependenciesInOutput(output, replacements) {
|
|
301
|
+
var newOutput = {
|
|
302
|
+
blocks: []
|
|
303
|
+
};
|
|
304
|
+
var _iterator3 = _createForOfIteratorHelper(output.blocks),
|
|
305
|
+
_step3;
|
|
306
|
+
try {
|
|
307
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
308
|
+
var child = _step3.value;
|
|
309
|
+
var block = blockForType(child.type);
|
|
310
|
+
if (!block) {
|
|
311
|
+
throw new Error("No Block found for type ".concat(child.type));
|
|
312
|
+
}
|
|
313
|
+
newOutput.blocks.push(_objectSpread(_objectSpread({}, child), {}, {
|
|
314
|
+
props: block.replaceDependenciesInOutput(child.props, replacements)
|
|
315
|
+
}));
|
|
316
|
+
}
|
|
317
|
+
} catch (err) {
|
|
318
|
+
_iterator3.e(err);
|
|
319
|
+
} finally {
|
|
320
|
+
_iterator3.f();
|
|
321
|
+
}
|
|
322
|
+
return newOutput;
|
|
323
|
+
},
|
|
324
|
+
definesOwnPadding: true,
|
|
325
|
+
AdminComponent: function AdminComponent(_ref5) {
|
|
326
|
+
var state = _ref5.state,
|
|
327
|
+
updateState = _ref5.updateState;
|
|
328
|
+
var toggleVisible = useCallback(function (blockKey) {
|
|
329
|
+
updateState(function (prevState) {
|
|
330
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
331
|
+
blocks: prevState.blocks.map(function (c) {
|
|
332
|
+
return c.key === blockKey ? _objectSpread(_objectSpread({}, c), {}, {
|
|
333
|
+
visible: !c.visible
|
|
334
|
+
}) : c;
|
|
335
|
+
})
|
|
336
|
+
});
|
|
337
|
+
});
|
|
338
|
+
}, [updateState]);
|
|
339
|
+
var _useState = useState(false),
|
|
340
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
341
|
+
showAddBlockDrawer = _useState2[0],
|
|
342
|
+
setShowAddBlockDrawer = _useState2[1];
|
|
343
|
+
var _useState3 = useState(),
|
|
344
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
345
|
+
beforeIndex = _useState4[0],
|
|
346
|
+
setBeforeIndex = _useState4[1];
|
|
347
|
+
var _useState5 = useState(),
|
|
348
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
349
|
+
cannotPasteBlockError = _useState6[0],
|
|
350
|
+
setCannotPasteBlockError = _useState6[1];
|
|
351
|
+
var snackbarApi = useSnackbarApi();
|
|
352
|
+
var totalVisibleBlocks = state.blocks.filter(function (block) {
|
|
353
|
+
return block.visible;
|
|
354
|
+
}).length;
|
|
355
|
+
useEffect(function () {
|
|
356
|
+
if (state.blocks.some(function (block) {
|
|
357
|
+
return block.slideIn;
|
|
358
|
+
})) {
|
|
359
|
+
var timeoutHandle = window.setTimeout(function () {
|
|
360
|
+
updateState(function (prevState) {
|
|
361
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
362
|
+
blocks: prevState.blocks.map(function (block) {
|
|
363
|
+
return _objectSpread(_objectSpread({}, block), {}, {
|
|
364
|
+
slideIn: false
|
|
365
|
+
});
|
|
366
|
+
})
|
|
367
|
+
});
|
|
368
|
+
});
|
|
369
|
+
}, 1000);
|
|
370
|
+
return function () {
|
|
371
|
+
window.clearTimeout(timeoutHandle);
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
}, [state.blocks, updateState]);
|
|
375
|
+
var handleUndoClick = useCallback(function (removedBlocks) {
|
|
376
|
+
if (!removedBlocks) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
updateState(function (prevState) {
|
|
380
|
+
var blocks = _toConsumableArray(prevState.blocks);
|
|
381
|
+
removedBlocks === null || removedBlocks === void 0 || removedBlocks.forEach(function (removedBlock) {
|
|
382
|
+
var removedAt = removedBlock.removedAt;
|
|
383
|
+
var block = _objectSpread({}, removedBlock);
|
|
384
|
+
delete block.removedAt;
|
|
385
|
+
blocks.splice(removedAt, 0, block);
|
|
386
|
+
});
|
|
387
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
388
|
+
blocks: blocks
|
|
389
|
+
});
|
|
390
|
+
});
|
|
391
|
+
}, [updateState]);
|
|
392
|
+
var deleteBlocks = useCallback(function (blockKeys) {
|
|
393
|
+
updateState(function (prevState) {
|
|
394
|
+
var blocksToRemove = prevState.blocks.map(function (block, index) {
|
|
395
|
+
return _objectSpread(_objectSpread({}, block), {}, {
|
|
396
|
+
removedAt: index
|
|
397
|
+
});
|
|
398
|
+
}).filter(function (block) {
|
|
399
|
+
return blockKeys.includes(block.key);
|
|
400
|
+
});
|
|
401
|
+
snackbarApi.showSnackbar(/*#__PURE__*/_jsx(UndoSnackbar, {
|
|
402
|
+
message: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
403
|
+
id: "comet.blocks.list.blockDeleted",
|
|
404
|
+
defaultMessage: "{count, plural, one {block} other {# blocks}} deleted",
|
|
405
|
+
values: {
|
|
406
|
+
count: blocksToRemove.length
|
|
407
|
+
}
|
|
408
|
+
}),
|
|
409
|
+
payload: blocksToRemove,
|
|
410
|
+
onUndoClick: function onUndoClick(blocksToRemove) {
|
|
411
|
+
handleUndoClick(blocksToRemove);
|
|
412
|
+
}
|
|
413
|
+
}));
|
|
414
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
415
|
+
blocks: prevState.blocks.filter(function (c) {
|
|
416
|
+
return !blockKeys.includes(c.key);
|
|
417
|
+
})
|
|
418
|
+
});
|
|
419
|
+
});
|
|
420
|
+
}, [handleUndoClick, snackbarApi, updateState]);
|
|
421
|
+
var handleToggleVisibilityOfAllSelectedBlocks = function handleToggleVisibilityOfAllSelectedBlocks() {
|
|
422
|
+
var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
423
|
+
var blocksToShow = state.blocks.map(function (c) {
|
|
424
|
+
if (c.selected) {
|
|
425
|
+
c.visible = visible;
|
|
426
|
+
}
|
|
427
|
+
return c;
|
|
428
|
+
});
|
|
429
|
+
updateState(function (prevState) {
|
|
430
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
431
|
+
blocks: blocksToShow
|
|
432
|
+
});
|
|
433
|
+
});
|
|
434
|
+
};
|
|
435
|
+
var handleDeleteAllSelectedBlocks = function handleDeleteAllSelectedBlocks() {
|
|
436
|
+
var blocksToDelete = state.blocks.filter(function (c) {
|
|
437
|
+
return c.selected;
|
|
438
|
+
});
|
|
439
|
+
deleteBlocks(blocksToDelete.map(function (block) {
|
|
440
|
+
return block.key;
|
|
441
|
+
}));
|
|
442
|
+
};
|
|
443
|
+
var addNewBlock = function addNewBlock(type, beforeIndex) {
|
|
444
|
+
var key = uuid();
|
|
445
|
+
var block = blockForType(type);
|
|
446
|
+
if (!block) {
|
|
447
|
+
throw new Error("No Block found for type ".concat(type));
|
|
448
|
+
}
|
|
449
|
+
var newItem = _objectSpread({
|
|
450
|
+
key: key,
|
|
451
|
+
type: type,
|
|
452
|
+
visible: maxVisibleBlocks ? totalVisibleBlocks < maxVisibleBlocks : true,
|
|
453
|
+
selected: false,
|
|
454
|
+
props: block.defaultValues(),
|
|
455
|
+
slideIn: true
|
|
456
|
+
}, Object.entries(additionalItemFields !== null && additionalItemFields !== void 0 ? additionalItemFields : {}).reduce(function (fields, _ref6) {
|
|
457
|
+
var _ref7 = _slicedToArray(_ref6, 2),
|
|
458
|
+
field = _ref7[0],
|
|
459
|
+
defaultValue = _ref7[1].defaultValue;
|
|
460
|
+
return _objectSpread(_objectSpread({}, fields), {}, _defineProperty({}, field, defaultValue));
|
|
461
|
+
}, {}));
|
|
462
|
+
var newBlocks = _toConsumableArray(state.blocks);
|
|
463
|
+
if (beforeIndex !== undefined) {
|
|
464
|
+
newBlocks.splice(beforeIndex, 0, newItem);
|
|
465
|
+
} else {
|
|
466
|
+
newBlocks.push(newItem);
|
|
467
|
+
}
|
|
468
|
+
updateState(function (prevState) {
|
|
469
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
470
|
+
blocks: newBlocks
|
|
471
|
+
});
|
|
472
|
+
});
|
|
473
|
+
return key;
|
|
474
|
+
};
|
|
475
|
+
var createUpdateSubBlocksFn = useCallback(function (blockKey) {
|
|
476
|
+
var updateSubBlocksFn = function updateSubBlocksFn(setStateAction) {
|
|
477
|
+
updateState(function (prevState) {
|
|
478
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
479
|
+
blocks: prevState.blocks.map(function (c) {
|
|
480
|
+
return c.key === blockKey ? _objectSpread(_objectSpread({}, c), {}, {
|
|
481
|
+
props: resolveNewState({
|
|
482
|
+
prevState: c.props,
|
|
483
|
+
setStateAction: setStateAction
|
|
484
|
+
})
|
|
485
|
+
}) : c;
|
|
486
|
+
})
|
|
487
|
+
});
|
|
488
|
+
});
|
|
489
|
+
};
|
|
490
|
+
return updateSubBlocksFn;
|
|
491
|
+
}, [updateState]);
|
|
492
|
+
var _useContentScope = useContentScope(),
|
|
493
|
+
scope = _useContentScope.scope;
|
|
494
|
+
var _useBlocksConfig = useBlocksConfig(),
|
|
495
|
+
isBlockSupported = _useBlocksConfig.isBlockSupported;
|
|
496
|
+
var filteredSupportedBlocks = useMemo(function () {
|
|
497
|
+
if (isBlockSupported) {
|
|
498
|
+
return Object.fromEntries(Object.entries(supportedBlocks).filter(function (_ref8) {
|
|
499
|
+
var _ref9 = _slicedToArray(_ref8, 2),
|
|
500
|
+
block = _ref9[1];
|
|
501
|
+
return isBlockSupported(block, scope);
|
|
502
|
+
}));
|
|
503
|
+
} else {
|
|
504
|
+
return supportedBlocks;
|
|
505
|
+
}
|
|
506
|
+
}, [scope, isBlockSupported]);
|
|
507
|
+
var _useBlockClipboard = useBlockClipboard({
|
|
508
|
+
supports: Object.values(filteredSupportedBlocks)
|
|
509
|
+
}),
|
|
510
|
+
updateClipboardContent = _useBlockClipboard.updateClipboardContent,
|
|
511
|
+
getClipboardContent = _useBlockClipboard.getClipboardContent;
|
|
512
|
+
var pasteBlock = /*#__PURE__*/function () {
|
|
513
|
+
var _ref0 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(insertAt) {
|
|
514
|
+
var response, content;
|
|
515
|
+
return _regenerator().w(function (_context4) {
|
|
516
|
+
while (1) switch (_context4.n) {
|
|
517
|
+
case 0:
|
|
518
|
+
_context4.n = 1;
|
|
519
|
+
return getClipboardContent();
|
|
520
|
+
case 1:
|
|
521
|
+
response = _context4.v;
|
|
522
|
+
if (response.canPaste) {
|
|
523
|
+
_context4.n = 2;
|
|
524
|
+
break;
|
|
525
|
+
}
|
|
526
|
+
setCannotPasteBlockError(response.error);
|
|
527
|
+
return _context4.a(2);
|
|
528
|
+
case 2:
|
|
529
|
+
content = response.content;
|
|
530
|
+
updateState(function (prevState) {
|
|
531
|
+
var clipboardVisibleBlocks = content.filter(function (block) {
|
|
532
|
+
return block.visible;
|
|
533
|
+
}).length;
|
|
534
|
+
var canAddVisibleBlock = maxVisibleBlocks ? totalVisibleBlocks + clipboardVisibleBlocks <= maxVisibleBlocks : true;
|
|
535
|
+
var newBlocks = content.map(function (block) {
|
|
536
|
+
var type = typeForBlock(block);
|
|
537
|
+
if (!type) {
|
|
538
|
+
throw new Error("No type found for block \"".concat(block.name, "\""));
|
|
539
|
+
}
|
|
540
|
+
return _objectSpread({
|
|
541
|
+
key: uuid(),
|
|
542
|
+
type: type,
|
|
543
|
+
selected: false,
|
|
544
|
+
visible: canAddVisibleBlock ? block.visible : false,
|
|
545
|
+
props: block.state,
|
|
546
|
+
slideIn: true
|
|
547
|
+
}, block.additionalFields);
|
|
548
|
+
});
|
|
549
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
550
|
+
blocks: [].concat(_toConsumableArray(prevState.blocks.slice(0, insertAt)), _toConsumableArray(newBlocks), _toConsumableArray(prevState.blocks.slice(insertAt))).map(function (block) {
|
|
551
|
+
return _objectSpread(_objectSpread({}, block), {}, {
|
|
552
|
+
selected: false
|
|
553
|
+
});
|
|
554
|
+
})
|
|
555
|
+
});
|
|
556
|
+
});
|
|
557
|
+
case 3:
|
|
558
|
+
return _context4.a(2);
|
|
559
|
+
}
|
|
560
|
+
}, _callee4);
|
|
561
|
+
}));
|
|
562
|
+
return function pasteBlock(_x5) {
|
|
563
|
+
return _ref0.apply(this, arguments);
|
|
564
|
+
};
|
|
565
|
+
}();
|
|
566
|
+
var handleAddBlockClick = function handleAddBlockClick(beforeIndex) {
|
|
567
|
+
setShowAddBlockDrawer(true);
|
|
568
|
+
setBeforeIndex(beforeIndex);
|
|
569
|
+
};
|
|
570
|
+
var handleCloseAddBlockDrawer = function handleCloseAddBlockDrawer() {
|
|
571
|
+
setShowAddBlockDrawer(false);
|
|
572
|
+
setBeforeIndex(undefined);
|
|
573
|
+
};
|
|
574
|
+
var handleToggleSelectAll = function handleToggleSelectAll(event) {
|
|
575
|
+
var selected = event.target.checked;
|
|
576
|
+
updateState(function (prevState) {
|
|
577
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
578
|
+
blocks: prevState.blocks.map(function (block) {
|
|
579
|
+
return _objectSpread(_objectSpread({}, block), {}, {
|
|
580
|
+
selected: selected
|
|
581
|
+
});
|
|
582
|
+
})
|
|
583
|
+
});
|
|
584
|
+
});
|
|
585
|
+
};
|
|
586
|
+
var handleSelectBlock = function handleSelectBlock(currentBlock, select) {
|
|
587
|
+
updateState(function (prevState) {
|
|
588
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
589
|
+
blocks: prevState.blocks.map(function (block) {
|
|
590
|
+
return _objectSpread(_objectSpread({}, block), {}, {
|
|
591
|
+
selected: block === currentBlock ? select : block.selected
|
|
592
|
+
});
|
|
593
|
+
})
|
|
594
|
+
});
|
|
595
|
+
});
|
|
596
|
+
};
|
|
597
|
+
var handleCopySelectedBlocks = function handleCopySelectedBlocks() {
|
|
598
|
+
var blocksToCopy = state.blocks.filter(function (block) {
|
|
599
|
+
return block.selected;
|
|
600
|
+
}).map(function (block) {
|
|
601
|
+
var blockInterface = blockForType(block.type);
|
|
602
|
+
if (!blockInterface) {
|
|
603
|
+
throw new Error("No Block found for type ".concat(block.type));
|
|
604
|
+
}
|
|
605
|
+
return {
|
|
606
|
+
name: blockInterface.name,
|
|
607
|
+
visible: block.visible,
|
|
608
|
+
state: block.props,
|
|
609
|
+
additionalFields: Object.keys(additionalItemFields !== null && additionalItemFields !== void 0 ? additionalItemFields : {}).reduce(function (fields, field) {
|
|
610
|
+
return _objectSpread(_objectSpread({}, fields), {}, _defineProperty({}, field, block[field]));
|
|
611
|
+
}, {})
|
|
612
|
+
};
|
|
613
|
+
});
|
|
614
|
+
updateClipboardContent(blocksToCopy);
|
|
615
|
+
};
|
|
616
|
+
var selectedCount = state.blocks.filter(function (block) {
|
|
617
|
+
return block.selected;
|
|
618
|
+
}).length;
|
|
619
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
620
|
+
children: [/*#__PURE__*/_jsxs(StackSwitch, {
|
|
621
|
+
disableForcePromptRoute: true,
|
|
622
|
+
children: [/*#__PURE__*/_jsx(StackPage, {
|
|
623
|
+
name: "main",
|
|
624
|
+
children: /*#__PURE__*/_jsx(StackSwitchApiContext.Consumer, {
|
|
625
|
+
children: function children(stackApi) {
|
|
626
|
+
return /*#__PURE__*/_jsxs(SelectPreviewComponent, {
|
|
627
|
+
children: [/*#__PURE__*/_jsxs(BlockAdminComponentPaper, {
|
|
628
|
+
disablePadding: true,
|
|
629
|
+
children: [/*#__PURE__*/_jsx(AdminComponentStickyHeader, {
|
|
630
|
+
children: /*#__PURE__*/_jsxs(BlockListHeader, {
|
|
631
|
+
children: [state.blocks.length ? /*#__PURE__*/_jsx(SelectAllFromControlLabel, {
|
|
632
|
+
control: /*#__PURE__*/_jsx(Checkbox, {
|
|
633
|
+
checked: selectedCount === state.blocks.length && selectedCount > 0,
|
|
634
|
+
indeterminate: selectedCount > 0 && selectedCount !== state.blocks.length,
|
|
635
|
+
onChange: handleToggleSelectAll
|
|
636
|
+
}),
|
|
637
|
+
label: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
638
|
+
id: "comet.blocks.list.selectAll",
|
|
639
|
+
defaultMessage: "Select all"
|
|
640
|
+
})
|
|
641
|
+
}) : /*#__PURE__*/_jsx("div", {}), /*#__PURE__*/_jsx(BlockListHeaderActionContainer, {
|
|
642
|
+
children: /*#__PURE__*/_jsxs(RowActionsMenu, {
|
|
643
|
+
children: [!maxVisibleBlocks && /*#__PURE__*/_jsxs(_Fragment, {
|
|
644
|
+
children: [/*#__PURE__*/_jsx(RowActionsItem, {
|
|
645
|
+
icon: /*#__PURE__*/_jsx(Visible, {}),
|
|
646
|
+
disabled: selectedCount === 0,
|
|
647
|
+
onClick: function onClick() {
|
|
648
|
+
return handleToggleVisibilityOfAllSelectedBlocks(true);
|
|
649
|
+
},
|
|
650
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
651
|
+
id: "comet.blocks.list.action.visible",
|
|
652
|
+
defaultMessage: "Make visible"
|
|
653
|
+
})
|
|
654
|
+
}), /*#__PURE__*/_jsx(RowActionsItem, {
|
|
655
|
+
icon: /*#__PURE__*/_jsx(Invisible, {}),
|
|
656
|
+
disabled: selectedCount === 0,
|
|
657
|
+
onClick: function onClick() {
|
|
658
|
+
return handleToggleVisibilityOfAllSelectedBlocks();
|
|
659
|
+
},
|
|
660
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
661
|
+
id: "comet.blocks.list.action.invisible",
|
|
662
|
+
defaultMessage: "Make invisible"
|
|
663
|
+
})
|
|
664
|
+
})]
|
|
665
|
+
}), /*#__PURE__*/_jsx(Separator, {}), /*#__PURE__*/_jsx(RowActionsItem, {
|
|
666
|
+
icon: /*#__PURE__*/_jsx(Delete, {}),
|
|
667
|
+
disabled: selectedCount === 0,
|
|
668
|
+
onClick: handleDeleteAllSelectedBlocks,
|
|
669
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
670
|
+
id: "comet.blocks.list.action.delete",
|
|
671
|
+
defaultMessage: "Delete"
|
|
672
|
+
})
|
|
673
|
+
}), /*#__PURE__*/_jsx(RowActionsItem, {
|
|
674
|
+
icon: /*#__PURE__*/_jsx(Copy, {}),
|
|
675
|
+
disabled: selectedCount === 0,
|
|
676
|
+
onClick: handleCopySelectedBlocks,
|
|
677
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
678
|
+
id: "comet.blocks.list.action.copy",
|
|
679
|
+
defaultMessage: "Copy"
|
|
680
|
+
})
|
|
681
|
+
}), /*#__PURE__*/_jsx(RowActionsItem, {
|
|
682
|
+
icon: /*#__PURE__*/_jsx(Paste, {}),
|
|
683
|
+
onClick: function onClick() {
|
|
684
|
+
return pasteBlock(0);
|
|
685
|
+
},
|
|
686
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
687
|
+
id: "comet.blocks.list.action.paste",
|
|
688
|
+
defaultMessage: "Paste"
|
|
689
|
+
})
|
|
690
|
+
})]
|
|
691
|
+
})
|
|
692
|
+
})]
|
|
693
|
+
})
|
|
694
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
695
|
+
children: [state.blocks.map(function (data, blockIndex) {
|
|
696
|
+
var block = blockForType(data.type);
|
|
697
|
+
if (!block) {
|
|
698
|
+
return null;
|
|
699
|
+
}
|
|
700
|
+
var isMaxVisibleBlocksReached = !!maxVisibleBlocks && totalVisibleBlocks >= maxVisibleBlocks;
|
|
701
|
+
var canToggleVisibility = isMaxVisibleBlocksReached ? data.visible : true;
|
|
702
|
+
var showMaxBlocksAllowedMessage = isMaxVisibleBlocksReached && !data.visible;
|
|
703
|
+
return /*#__PURE__*/_jsx(HoverPreviewComponent, {
|
|
704
|
+
componentSlug: "".concat(data.key, "/blocks"),
|
|
705
|
+
children: /*#__PURE__*/_jsx(BlockRow, {
|
|
706
|
+
id: data.key,
|
|
707
|
+
renderPreviewContent: function renderPreviewContent() {
|
|
708
|
+
return /*#__PURE__*/_jsx(BlockPreviewContent, {
|
|
709
|
+
block: block,
|
|
710
|
+
state: data.props
|
|
711
|
+
});
|
|
712
|
+
},
|
|
713
|
+
index: blockIndex,
|
|
714
|
+
onContentClick: function onContentClick() {
|
|
715
|
+
stackApi.activatePage("blocks", data.key);
|
|
716
|
+
},
|
|
717
|
+
onDeleteClick: function onDeleteClick() {
|
|
718
|
+
deleteBlocks([data.key]);
|
|
719
|
+
},
|
|
720
|
+
moveBlock: function moveBlock(from, to) {
|
|
721
|
+
updateState(function (prevState) {
|
|
722
|
+
var blocks = _toConsumableArray(prevState.blocks);
|
|
723
|
+
var blockToMove = blocks.splice(from, 1)[0];
|
|
724
|
+
blocks.splice(to, 0, blockToMove);
|
|
725
|
+
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
726
|
+
blocks: blocks
|
|
727
|
+
});
|
|
728
|
+
});
|
|
729
|
+
},
|
|
730
|
+
visibilityButton: /*#__PURE__*/_jsx(Tooltip, {
|
|
731
|
+
title: showMaxBlocksAllowedMessage ? /*#__PURE__*/_jsx(FormattedMessage, {
|
|
732
|
+
id: "comet.blocks.block.maxVisibleBlocks",
|
|
733
|
+
defaultMessage: "Max. visible blocks allowed: {maxVisibleBlocks}",
|
|
734
|
+
values: {
|
|
735
|
+
maxVisibleBlocks: maxVisibleBlocks
|
|
736
|
+
}
|
|
737
|
+
}) : null,
|
|
738
|
+
children: /*#__PURE__*/_jsx(Box, {
|
|
739
|
+
component: "span",
|
|
740
|
+
children: /*#__PURE__*/_jsx(IconButton, {
|
|
741
|
+
onClick: function onClick() {
|
|
742
|
+
return canToggleVisibility && toggleVisible(data.key);
|
|
743
|
+
},
|
|
744
|
+
size: "small",
|
|
745
|
+
disabled: !canToggleVisibility,
|
|
746
|
+
children: data.visible ? /*#__PURE__*/_jsx(Visible, {
|
|
747
|
+
color: "success"
|
|
748
|
+
}) : /*#__PURE__*/_jsx(Invisible, {
|
|
749
|
+
color: "action"
|
|
750
|
+
})
|
|
751
|
+
})
|
|
752
|
+
})
|
|
753
|
+
}),
|
|
754
|
+
onAddNewBlock: handleAddBlockClick,
|
|
755
|
+
onCopyClick: function onCopyClick() {
|
|
756
|
+
var block = blockForType(data.type);
|
|
757
|
+
if (!block) {
|
|
758
|
+
throw new Error("No Block found for type ".concat(data.type));
|
|
759
|
+
}
|
|
760
|
+
updateClipboardContent([{
|
|
761
|
+
name: block.name,
|
|
762
|
+
visible: data.visible,
|
|
763
|
+
state: data.props,
|
|
764
|
+
additionalFields: Object.keys(additionalItemFields !== null && additionalItemFields !== void 0 ? additionalItemFields : {}).reduce(function (fields, field) {
|
|
765
|
+
return _objectSpread(_objectSpread({}, fields), {}, _defineProperty({}, field, data[field]));
|
|
766
|
+
}, {})
|
|
767
|
+
}]);
|
|
768
|
+
},
|
|
769
|
+
onPasteClick: function onPasteClick() {
|
|
770
|
+
pasteBlock(blockIndex + 1);
|
|
771
|
+
},
|
|
772
|
+
selected: data.selected,
|
|
773
|
+
onSelectedClick: function onSelectedClick(selected) {
|
|
774
|
+
handleSelectBlock(data, selected);
|
|
775
|
+
},
|
|
776
|
+
isValidFn: function isValidFn() {
|
|
777
|
+
return block.isValid(data.props);
|
|
778
|
+
},
|
|
779
|
+
slideIn: data.slideIn,
|
|
780
|
+
hideBottomInsertBetweenButton: blockIndex >= state.blocks.length - 1,
|
|
781
|
+
additionalMenuItems: function additionalMenuItems(onMenuClose) {
|
|
782
|
+
return AdditionalItemContextMenuItems ? /*#__PURE__*/_jsx(AdditionalItemContextMenuItems, {
|
|
783
|
+
item: data,
|
|
784
|
+
onChange: function onChange(updatedItem) {
|
|
785
|
+
updateState(function (previousState) {
|
|
786
|
+
return {
|
|
787
|
+
blocks: previousState.blocks.map(function (block) {
|
|
788
|
+
return block.key === data.key ? updatedItem : block;
|
|
789
|
+
})
|
|
790
|
+
};
|
|
791
|
+
});
|
|
792
|
+
},
|
|
793
|
+
onMenuClose: onMenuClose
|
|
794
|
+
}) : undefined;
|
|
795
|
+
},
|
|
796
|
+
additionalContent: AdditionalItemContent ? /*#__PURE__*/_jsx(AdditionalItemContent, {
|
|
797
|
+
item: data
|
|
798
|
+
}) : undefined
|
|
799
|
+
})
|
|
800
|
+
}, data.key);
|
|
801
|
+
}), state.blocks.length === 0 ? /*#__PURE__*/_jsx(BlockAdminComponentButton, {
|
|
802
|
+
onClick: function onClick() {
|
|
803
|
+
return handleAddBlockClick();
|
|
804
|
+
},
|
|
805
|
+
variant: "primary",
|
|
806
|
+
size: "large",
|
|
807
|
+
children: /*#__PURE__*/_jsxs(LargeAddButtonContent, {
|
|
808
|
+
children: [/*#__PURE__*/_jsx(LargeAddButtonIcon, {}), /*#__PURE__*/_jsx(Typography, {
|
|
809
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
810
|
+
id: "comet.blocks.list.addNewBlock",
|
|
811
|
+
defaultMessage: "Add block"
|
|
812
|
+
})
|
|
813
|
+
})]
|
|
814
|
+
})
|
|
815
|
+
}) : /*#__PURE__*/_jsx(AdminComponentStickyFooter, {
|
|
816
|
+
children: /*#__PURE__*/_jsx(BlockAdminComponentButton, {
|
|
817
|
+
onClick: function onClick() {
|
|
818
|
+
return handleAddBlockClick();
|
|
819
|
+
},
|
|
820
|
+
variant: "primary",
|
|
821
|
+
size: "large",
|
|
822
|
+
startIcon: /*#__PURE__*/_jsx(Add, {}),
|
|
823
|
+
children: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
824
|
+
id: "comet.blocks.list.addNewBlock",
|
|
825
|
+
defaultMessage: "Add block"
|
|
826
|
+
})
|
|
827
|
+
})
|
|
828
|
+
})]
|
|
829
|
+
})]
|
|
830
|
+
}), /*#__PURE__*/_jsx(AddBlockDrawer, {
|
|
831
|
+
open: showAddBlockDrawer,
|
|
832
|
+
onClose: handleCloseAddBlockDrawer,
|
|
833
|
+
blocks: filteredSupportedBlocks,
|
|
834
|
+
onAddNewBlock: function onAddNewBlock(type, addAndEdit) {
|
|
835
|
+
var key = addNewBlock(type, beforeIndex);
|
|
836
|
+
if (addAndEdit) {
|
|
837
|
+
stackApi.activatePage("blocks", key);
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
})]
|
|
841
|
+
});
|
|
842
|
+
}
|
|
843
|
+
})
|
|
844
|
+
}), /*#__PURE__*/_jsx(StackPage, {
|
|
845
|
+
name: "blocks",
|
|
846
|
+
title: "Block bearbeiten",
|
|
847
|
+
children: function children(id) {
|
|
848
|
+
return /*#__PURE__*/_jsx(StackSwitchApiContext.Consumer, {
|
|
849
|
+
children: function children(stackApi) {
|
|
850
|
+
var match = state.blocks.find(function (c) {
|
|
851
|
+
return c.key === id;
|
|
852
|
+
});
|
|
853
|
+
if (!match) {
|
|
854
|
+
stackApi.activatePage("main", "");
|
|
855
|
+
return;
|
|
856
|
+
}
|
|
857
|
+
var block = blockForType(match.type);
|
|
858
|
+
if (!block) {
|
|
859
|
+
stackApi.activatePage("main", "");
|
|
860
|
+
return;
|
|
861
|
+
}
|
|
862
|
+
return /*#__PURE__*/_jsx(StackPageTitle, {
|
|
863
|
+
title: block.displayName,
|
|
864
|
+
children: /*#__PURE__*/_jsx(block.AdminComponent, {
|
|
865
|
+
state: match.props,
|
|
866
|
+
updateState: createUpdateSubBlocksFn(id)
|
|
867
|
+
})
|
|
868
|
+
});
|
|
869
|
+
}
|
|
870
|
+
});
|
|
871
|
+
}
|
|
872
|
+
})]
|
|
873
|
+
}), cannotPasteBlockError !== undefined && /*#__PURE__*/_jsx(CannotPasteBlockDialog, {
|
|
874
|
+
open: true,
|
|
875
|
+
onClose: function onClose() {
|
|
876
|
+
return setCannotPasteBlockError(undefined);
|
|
877
|
+
},
|
|
878
|
+
error: cannotPasteBlockError
|
|
879
|
+
})]
|
|
880
|
+
});
|
|
881
|
+
},
|
|
882
|
+
previewContent: function previewContent(state, ctx) {
|
|
883
|
+
if (state.blocks.length === 0) {
|
|
884
|
+
return [{
|
|
885
|
+
type: "text",
|
|
886
|
+
content: /*#__PURE__*/_jsx(FormattedMessage, {
|
|
887
|
+
id: "comet.blocks.list.count",
|
|
888
|
+
defaultMessage: "{count, plural, =0 {No blocks} one {# block} other {# blocks}}",
|
|
889
|
+
values: {
|
|
890
|
+
count: state.blocks.length
|
|
891
|
+
}
|
|
892
|
+
})
|
|
893
|
+
}];
|
|
894
|
+
}
|
|
895
|
+
return state.blocks.reduce(function (prev, next) {
|
|
896
|
+
var block = blockForType(next.type);
|
|
897
|
+
if (block) {
|
|
898
|
+
var nextPreviewContent = block.previewContent(next.props, ctx);
|
|
899
|
+
return [].concat(_toConsumableArray(prev), _toConsumableArray(nextPreviewContent));
|
|
900
|
+
} else {
|
|
901
|
+
return prev;
|
|
902
|
+
}
|
|
903
|
+
}, []);
|
|
904
|
+
},
|
|
905
|
+
resolveDependencyPath: function resolveDependencyPath(state, jsonPath) {
|
|
906
|
+
if (!/^blocks.\d+.props/.test(jsonPath)) {
|
|
907
|
+
throw new Error("BlocksBlock: Invalid jsonPath");
|
|
908
|
+
}
|
|
909
|
+
var pathArr = jsonPath.split(".");
|
|
910
|
+
var num = Number(pathArr[1]);
|
|
911
|
+
var blockItem = state.blocks[num];
|
|
912
|
+
var block = blockForType(blockItem.type);
|
|
913
|
+
if (block === null) {
|
|
914
|
+
throw new Error("BlocksBlock: Block is null");
|
|
915
|
+
}
|
|
916
|
+
var childPath = block.resolveDependencyPath(blockItem.props, pathArr.slice(3).join("."));
|
|
917
|
+
return "".concat(blockItem.key, "/blocks/").concat(childPath);
|
|
918
|
+
},
|
|
919
|
+
extractTextContents: function extractTextContents(state, options) {
|
|
920
|
+
var _options$includeInvis;
|
|
921
|
+
var includeInvisibleContent = (_options$includeInvis = options === null || options === void 0 ? void 0 : options.includeInvisibleContent) !== null && _options$includeInvis !== void 0 ? _options$includeInvis : false;
|
|
922
|
+
return state.blocks.reduce(function (content, child) {
|
|
923
|
+
var _block$extractTextCon, _block$extractTextCon2;
|
|
924
|
+
var block = blockForType(child.type);
|
|
925
|
+
if (!block) {
|
|
926
|
+
throw new Error("No Block found for type ".concat(child.type)); // for TS
|
|
927
|
+
}
|
|
928
|
+
if (!child.visible && !includeInvisibleContent) {
|
|
929
|
+
return content;
|
|
930
|
+
}
|
|
931
|
+
return [].concat(_toConsumableArray(content), _toConsumableArray((_block$extractTextCon = (_block$extractTextCon2 = block.extractTextContents) === null || _block$extractTextCon2 === void 0 ? void 0 : _block$extractTextCon2.call(block, child.props, options)) !== null && _block$extractTextCon !== void 0 ? _block$extractTextCon : []));
|
|
932
|
+
}, []);
|
|
933
|
+
},
|
|
934
|
+
translateContent: function () {
|
|
935
|
+
var _translateContent = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(state, translate) {
|
|
936
|
+
var translatedBlocks;
|
|
937
|
+
return _regenerator().w(function (_context6) {
|
|
938
|
+
while (1) switch (_context6.n) {
|
|
939
|
+
case 0:
|
|
940
|
+
_context6.n = 1;
|
|
941
|
+
return Promise.all(state.blocks.map(/*#__PURE__*/function () {
|
|
942
|
+
var _ref1 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(child) {
|
|
943
|
+
var block, translatedProps, _t7;
|
|
944
|
+
return _regenerator().w(function (_context5) {
|
|
945
|
+
while (1) switch (_context5.n) {
|
|
946
|
+
case 0:
|
|
947
|
+
block = blockForType(child.type);
|
|
948
|
+
if (block) {
|
|
949
|
+
_context5.n = 1;
|
|
950
|
+
break;
|
|
951
|
+
}
|
|
952
|
+
throw new Error("No Block found for type ".concat(child.type));
|
|
953
|
+
case 1:
|
|
954
|
+
if (!block.translateContent) {
|
|
955
|
+
_context5.n = 3;
|
|
956
|
+
break;
|
|
957
|
+
}
|
|
958
|
+
_context5.n = 2;
|
|
959
|
+
return block.translateContent(child.props, translate);
|
|
960
|
+
case 2:
|
|
961
|
+
_t7 = _context5.v;
|
|
962
|
+
_context5.n = 4;
|
|
963
|
+
break;
|
|
964
|
+
case 3:
|
|
965
|
+
_t7 = child.props;
|
|
966
|
+
case 4:
|
|
967
|
+
translatedProps = _t7;
|
|
968
|
+
return _context5.a(2, _objectSpread(_objectSpread({}, child), {}, {
|
|
969
|
+
props: translatedProps
|
|
970
|
+
}));
|
|
971
|
+
}
|
|
972
|
+
}, _callee5);
|
|
973
|
+
}));
|
|
974
|
+
return function (_x8) {
|
|
975
|
+
return _ref1.apply(this, arguments);
|
|
976
|
+
};
|
|
977
|
+
}()));
|
|
978
|
+
case 1:
|
|
979
|
+
translatedBlocks = _context6.v;
|
|
980
|
+
return _context6.a(2, _objectSpread(_objectSpread({}, state), {}, {
|
|
981
|
+
blocks: translatedBlocks
|
|
982
|
+
}));
|
|
983
|
+
}
|
|
984
|
+
}, _callee6);
|
|
985
|
+
}));
|
|
986
|
+
function translateContent(_x6, _x7) {
|
|
987
|
+
return _translateContent.apply(this, arguments);
|
|
988
|
+
}
|
|
989
|
+
return translateContent;
|
|
990
|
+
}()
|
|
991
|
+
});
|
|
992
|
+
if (override) {
|
|
993
|
+
return override(BlocksBlock);
|
|
994
|
+
}
|
|
995
|
+
return BlocksBlock;
|
|
996
|
+
}
|
|
997
|
+
var BlockListHeader = /*#__PURE__*/styled("div", process.env.NODE_ENV === "production" ? {
|
|
998
|
+
target: "e15z4m3g5"
|
|
999
|
+
} : {
|
|
1000
|
+
target: "e15z4m3g5",
|
|
1001
|
+
label: "BlockListHeader"
|
|
1002
|
+
})("display:flex;justify-content:space-between;align-items:center;padding:", function (_ref10) {
|
|
1003
|
+
var theme = _ref10.theme;
|
|
1004
|
+
return theme.spacing(0, 1);
|
|
1005
|
+
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFxN0JxQyIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAZGV4dGluaXR5L2FkbWluXCI7XG5pbXBvcnQgeyBBZGQsIENvcHksIERlbGV0ZSwgSW52aXNpYmxlLCBQYXN0ZSwgVmlzaWJsZSB9IGZyb20gXCJAZGV4dGluaXR5L2FkbWluLWljb25zXCI7XG5pbXBvcnQgeyBCb3gsIENoZWNrYm94LCBGb3JtQ29udHJvbExhYmVsLCBJY29uQnV0dG9uLCBUeXBvZ3JhcGh5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsL3N0eWxlc1wiO1xuaW1wb3J0IHtcbiAgICB0eXBlIENoYW5nZUV2ZW50LFxuICAgIHR5cGUgRGlzcGF0Y2gsXG4gICAgdHlwZSBGdW5jdGlvbkNvbXBvbmVudCxcbiAgICB0eXBlIFJlYWN0Tm9kZSxcbiAgICB0eXBlIFNldFN0YXRlQWN0aW9uLFxuICAgIHVzZUNhbGxiYWNrLFxuICAgIHVzZUVmZmVjdCxcbiAgICB1c2VNZW1vLFxuICAgIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZvcm1hdHRlZE1lc3NhZ2UsIHR5cGUgTWVzc2FnZURlc2NyaXB0b3IgfSBmcm9tIFwicmVhY3QtaW50bFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbmltcG9ydCB7IHVzZUNvbnRlbnRTY29wZSB9IGZyb20gXCIuLi8uLi9jb250ZW50U2NvcGUvUHJvdmlkZXJcIjtcbmltcG9ydCB7IENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgfSBmcm9tIFwiLi4vY2xpcGJvYXJkL0Nhbm5vdFBhc3RlQmxvY2tEaWFsb2dcIjtcbmltcG9ydCB7IHVzZUJsb2NrQ2xpcGJvYXJkIH0gZnJvbSBcIi4uL2NsaXBib2FyZC91c2VCbG9ja0NsaXBib2FyZFwiO1xuaW1wb3J0IHsgQWRkQmxvY2tEcmF3ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkZEJsb2NrRHJhd2VyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUZvb3RlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXJcIjtcbmltcG9ydCB7IEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlclwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvbiB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvblwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXJcIjtcbmltcG9ydCB7IEJsb2NrUHJldmlld0NvbnRlbnQgfSBmcm9tIFwiLi4vY29tbW9uL2Jsb2NrUm93L0Jsb2NrUHJldmlld0NvbnRlbnRcIjtcbmltcG9ydCB7IEJsb2NrUm93IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1Jvd1wiO1xuaW1wb3J0IHsgdXNlQmxvY2tzQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9CbG9ja3NDb25maWdDb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVCbG9ja1NrZWxldG9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvY3JlYXRlQmxvY2tTa2VsZXRvblwiO1xuaW1wb3J0IHsgZGVkdXBsaWNhdGVCbG9ja0RlcGVuZGVuY2llcyB9IGZyb20gXCIuLi9oZWxwZXJzL2RlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IEhvdmVyUHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvSG92ZXJQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgeyBTZWxlY3RQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSBcIi4uL2lmcmFtZWJyaWRnZS9TZWxlY3RQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEJsb2NrRGVwZW5kZW5jeSwgQmxvY2tJbnRlcmZhY2UsIEJsb2NrU3RhdGUsIFByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlTmV3U3RhdGUgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IHBhcmFsbGVsQXN5bmNFdmVyeSB9IGZyb20gXCIuLi91dGlscy9wYXJhbGxlbEFzeW5jRXZlcnlcIjtcblxuLy8gVXNpbmcge30gaW5zdGVhZCBvZiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gYmVjYXVzZSBuZXZlciBhbmQgdW5rbm93biBhcmUgaW5jb21wYXRpYmxlLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxudHlwZSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMgPSB7fTtcblxudHlwZSBCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSB7XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICBrZXk6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBwcm9wczogQmxvY2tTdGF0ZTxUPjtcbiAgICBzbGlkZUluOiBib29sZWFuO1xufSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzO1xuXG50eXBlIFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSBCbG9ja3NCbG9ja0l0ZW08VCwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ICYgeyByZW1vdmVkQXQ6IG51bWJlciB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQXJyYXk8XG4gICAgICAgIHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgcHJvcHM6IGFueTtcbiAgICAgICAgfSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzXG4gICAgPjtcbn1cblxudHlwZSBCbG9ja1R5cGUgPSBzdHJpbmc7XG5cbmludGVyZmFjZSBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8VmFsdWUgPSB1bmtub3duPiB7XG4gICAgZGVmYXVsdFZhbHVlOiBWYWx1ZTtcbn1cblxuaW50ZXJmYWNlIENyZWF0ZUJsb2Nrc0Jsb2NrT3B0aW9uczxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRpc3BsYXlOYW1lPzogUmVhY3ROb2RlO1xuICAgIHN1cHBvcnRlZEJsb2NrczogUmVjb3JkPEJsb2NrVHlwZSwgQmxvY2tJbnRlcmZhY2U+O1xuICAgIG1heFZpc2libGVCbG9ja3M/OiBudW1iZXI7XG4gICAgYWRkaXRpb25hbEl0ZW1GaWVsZHM/OiB7XG4gICAgICAgIFtLZXkgaW4ga2V5b2YgQWRkaXRpb25hbEl0ZW1GaWVsZHNdOiBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8QWRkaXRpb25hbEl0ZW1GaWVsZHNbS2V5XT47XG4gICAgfTtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXM/OiBGdW5jdGlvbkNvbXBvbmVudDx7XG4gICAgICAgIGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+O1xuICAgICAgICBvbkNoYW5nZTogKGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+KSA9PiB2b2lkO1xuICAgICAgICBvbk1lbnVDbG9zZTogKCkgPT4gdm9pZDtcbiAgICB9PjtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQ/OiBGdW5jdGlvbkNvbXBvbmVudDx7IGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+IH0+O1xuICAgIHRhZ3M/OiBBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbG9ja3NCbG9jazxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPihcbiAgICB7XG4gICAgICAgIHN1cHBvcnRlZEJsb2NrcyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGlzcGxheU5hbWUgPSA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5ibG9ja3MubmFtZVwiIGRlZmF1bHRNZXNzYWdlPVwiQmxvY2tzXCIgLz4sXG4gICAgICAgIG1heFZpc2libGVCbG9ja3MsXG4gICAgICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCxcbiAgICAgICAgdGFncyxcbiAgICB9OiBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgIG92ZXJyaWRlPzogKFxuICAgICAgICBibG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgICAgICBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgICAgID4sXG4gICAgKSA9PiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4sXG4pOiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4ge1xuICAgIGlmIChPYmplY3Qua2V5cyhzdXBwb3J0ZWRCbG9ja3MpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3MgYmxvY2sgd2l0aCBubyBzdXBwb3J0ZWQgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSBzcGVjaWZ5IGF0IGxlYXN0IHR3byBzdXBwb3J0ZWQgYmxvY2tzLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggYSBzaW5nbGUgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB1c2UgYSBsaXN0IGJsb2NrIChjcmVhdGVMaXN0QmxvY2soKSkgaW5zdGVhZC5cIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmxvY2tGb3JUeXBlKHR5cGU6IHN0cmluZyk6IEJsb2NrSW50ZXJmYWNlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3NbdHlwZV0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0eXBlRm9yQmxvY2sodGFyZ2V0QmxvY2s6IFBpY2s8QmxvY2tJbnRlcmZhY2UsIFwibmFtZVwiPik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3VwcG9ydGVkQmxvY2tzKS5maW5kKChbLCBibG9ja10pID0+IGJsb2NrLm5hbWUgPT09IHRhcmdldEJsb2NrLm5hbWUpPy5bMF0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFRhZ3MgPSBPYmplY3QudmFsdWVzKHN1cHBvcnRlZEJsb2NrcykucmVkdWNlPEFycmF5PE1lc3NhZ2VEZXNjcmlwdG9yIHwgc3RyaW5nPj4oKGFjYywgYmxvY2spID0+IHtcbiAgICAgICAgaWYgKGJsb2NrLnRhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWNjLCAuLi5ibG9jay50YWdzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IEJsb2Nrc0Jsb2NrOiBCbG9ja0ludGVyZmFjZTxcbiAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz5cbiAgICA+ID0ge1xuICAgICAgICAuLi5jcmVhdGVCbG9ja1NrZWxldG9uKCksXG5cbiAgICAgICAgbmFtZSxcblxuICAgICAgICBkaXNwbGF5TmFtZSxcblxuICAgICAgICB0YWdzOiB0YWdzID8gdGFncyA6IGNoaWxkVGFncyxcblxuICAgICAgICBkZWZhdWx0VmFsdWVzOiAoKSA9PiAoeyBibG9ja3M6IFtdIH0pLFxuXG4gICAgICAgIGlucHV0MlN0YXRlOiAoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGlucHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gYmxvY2sgdHlwZSBcIiR7Y2hpbGQudHlwZX1cImApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suaW5wdXQyU3RhdGUoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSwge30pLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2NrcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RhdGUyT3V0cHV0OiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3MubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNoaWxkLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLnN0YXRlMk91dHB1dChjaGlsZC5wcm9wcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICBvdXRwdXQyU3RhdGU6IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICBibG9ja3M6IFtdLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYXdhaXQgYmxvY2sub3V0cHV0MlN0YXRlKGNoaWxkLnByb3BzLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlUHJldmlld1N0YXRlOiAoc3RhdGUsIHByZXZpZXdDdHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogcHJldmlld0N0eC5wYXJlbnRVcmwsXG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY2hpbGQpID0+IChwcmV2aWV3Q3R4LnNob3dWaXNpYmxlT25seSA/IGNoaWxkLnZpc2libGUgOiB0cnVlKSkgLy8gZGVwZW5kaW5nIG9uIGNvbnRleHQgc2hvdyBhbGwgYmxvY2tzIG9yIG9ubHkgdmlzaWJsZSBibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQWRtaW5Sb3V0ZSA9IGAke3ByZXZpZXdDdHgucGFyZW50VXJsU3ViUm91dGUgPz8gcHJldmlld0N0eC5wYXJlbnRVcmx9LyR7Y2hpbGQua2V5fS9ibG9ja3NgO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNoaWxkLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogYmxvY2tBZG1pblJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5jcmVhdGVQcmV2aWV3U3RhdGUoY2hpbGQucHJvcHMsIHsgLi4ucHJldmlld0N0eCwgcGFyZW50VXJsU3ViUm91dGU6IHVuZGVmaW5lZCwgcGFyZW50VXJsOiBibG9ja0FkbWluUm91dGUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBhZG1pbk1ldGE6IHsgcm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBpc1ZhbGlkOiBhc3luYyAoc3RhdGUpID0+XG4gICAgICAgICAgICBwYXJhbGxlbEFzeW5jRXZlcnkoc3RhdGUuYmxvY2tzLCBhc3luYyAoYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGMudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Yy50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmlzVmFsaWQoYy5wcm9wcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgY2hpbGRCbG9ja0NvdW50OiAoc3RhdGUpID0+IHN0YXRlLmJsb2Nrcy5sZW5ndGgsXG5cbiAgICAgICAgYW5jaG9yczogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxzdHJpbmdbXT4oKGFuY2hvcnMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYW5jaG9ycywgLi4uKGJsb2NrLmFuY2hvcnM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcblxuICAgICAgICBkZXBlbmRlbmNpZXM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkRGVwZW5kZW5jaWVzID0gc3RhdGUuYmxvY2tzLnJlZHVjZTxCbG9ja0RlcGVuZGVuY3lbXT4oKGRlcGVuZGVuY2llcywgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5kZXBlbmRlbmNpZXMsIC4uLihibG9jay5kZXBlbmRlbmNpZXM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMobWVyZ2VkRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQ6IChvdXRwdXQsIHJlcGxhY2VtZW50cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3T3V0cHV0OiBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IGJsb2NrczogW10gfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXdPdXRwdXQuYmxvY2tzLnB1c2goeyAuLi5jaGlsZCwgcHJvcHM6IGJsb2NrLnJlcGxhY2VEZXBlbmRlbmNpZXNJbk91dHB1dChjaGlsZC5wcm9wcywgcmVwbGFjZW1lbnRzKSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ld091dHB1dDtcbiAgICAgICAgfSxcblxuICAgICAgICBkZWZpbmVzT3duUGFkZGluZzogdHJ1ZSxcblxuICAgICAgICBBZG1pbkNvbXBvbmVudDogKHsgc3RhdGUsIHVwZGF0ZVN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVZpc2libGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYykgPT4gKGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgdmlzaWJsZTogIWMudmlzaWJsZSB9IDogYykpLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgW3Nob3dBZGRCbG9ja0RyYXdlciwgc2V0U2hvd0FkZEJsb2NrRHJhd2VyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IFtiZWZvcmVJbmRleCwgc2V0QmVmb3JlSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPigpO1xuICAgICAgICAgICAgY29uc3QgW2Nhbm5vdFBhc3RlQmxvY2tFcnJvciwgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yXSA9IHVzZVN0YXRlPFJlYWN0Tm9kZT4oKTtcblxuICAgICAgICAgICAgY29uc3Qgc25hY2tiYXJBcGkgPSB1c2VTbmFja2JhckFwaSgpO1xuXG4gICAgICAgICAgICBjb25zdCB0b3RhbFZpc2libGVCbG9ja3MgPSBzdGF0ZS5ibG9ja3MuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuXG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ibG9ja3Muc29tZSgoYmxvY2spID0+IGJsb2NrLnNsaWRlSW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRIYW5kbGUgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoeyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoeyAuLi5ibG9jaywgc2xpZGVJbjogZmFsc2UgfSkpIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3N0YXRlLmJsb2NrcywgdXBkYXRlU3RhdGVdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVW5kb0NsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKHJlbW92ZWRCbG9ja3M6IFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZEJsb2Nrcz8uZm9yRWFjaCgocmVtb3ZlZEJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkQXQgfSA9IHJlbW92ZWRCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jazogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IC4uLnJlbW92ZWRCbG9jayB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBibG9jay5yZW1vdmVkQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZShyZW1vdmVkQXQsIDAsIGJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrcyB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVCbG9ja3MgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXlzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1JlbW92ZSA9IHByZXZTdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHJlbW92ZWRBdDogaW5kZXggfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9ja0tleXMuaW5jbHVkZXMoYmxvY2sua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc25hY2tiYXJBcGkuc2hvd1NuYWNrYmFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVbmRvU25hY2tiYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYmxvY2tEZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCBvbmUge2Jsb2NrfSBvdGhlciB7IyBibG9ja3N9fSBkZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgY291bnQ6IGJsb2Nrc1RvUmVtb3ZlLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkPXtibG9ja3NUb1JlbW92ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VbmRvQ2xpY2s9eyhibG9ja3NUb1JlbW92ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVW5kb0NsaWNrKGJsb2Nrc1RvUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4gIWJsb2NrS2V5cy5pbmNsdWRlcyhjLmtleSkpIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW2hhbmRsZVVuZG9DbGljaywgc25hY2tiYXJBcGksIHVwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzID0gKHZpc2libGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvU2hvdyA9IHN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMudmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBibG9ja3NUb1Nob3cgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvRGVsZXRlID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRlbGV0ZUJsb2NrcyhcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tzVG9EZWxldGUubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmtleTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZE5ld0Jsb2NrID0gKHR5cGU6IEJsb2NrVHlwZSwgYmVmb3JlSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB1dWlkKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZSh0eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHt0eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzIDwgbWF4VmlzaWJsZUJsb2NrcyA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmRlZmF1bHRWYWx1ZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5lbnRyaWVzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBbZmllbGQsIHsgZGVmYXVsdFZhbHVlIH1dKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRlZmF1bHRWYWx1ZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzID0gWy4uLnN0YXRlLmJsb2Nrc107XG5cbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3Muc3BsaWNlKGJlZm9yZUluZGV4LCAwLCBuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3MucHVzaChuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrczogbmV3QmxvY2tzLFxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVVcGRhdGVTdWJCbG9ja3NGbiA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChibG9ja0tleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVN1YkJsb2Nrc0ZuOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjx1bmtub3duPj4gPSAoc2V0U3RhdGVBY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgcHJvcHM6IHJlc29sdmVOZXdTdGF0ZSh7IHByZXZTdGF0ZTogYy5wcm9wcywgc2V0U3RhdGVBY3Rpb24gfSkgfSA6IGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1YkJsb2Nrc0ZuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgc2NvcGUgfSA9IHVzZUNvbnRlbnRTY29wZSgpO1xuICAgICAgICAgICAgY29uc3QgeyBpc0Jsb2NrU3VwcG9ydGVkIH0gPSB1c2VCbG9ja3NDb25maWcoKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCbG9ja1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmlsdGVyKChbLCBibG9ja10pID0+IGlzQmxvY2tTdXBwb3J0ZWQoYmxvY2ssIHNjb3BlKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3Njb3BlLCBpc0Jsb2NrU3VwcG9ydGVkXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgdXBkYXRlQ2xpcGJvYXJkQ29udGVudCwgZ2V0Q2xpcGJvYXJkQ29udGVudCB9ID0gdXNlQmxvY2tDbGlwYm9hcmQoeyBzdXBwb3J0czogT2JqZWN0LnZhbHVlcyhmaWx0ZXJlZFN1cHBvcnRlZEJsb2NrcykgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhc3RlQmxvY2sgPSBhc3luYyAoaW5zZXJ0QXQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ2V0Q2xpcGJvYXJkQ29udGVudCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5jYW5QYXN0ZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IocmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb250ZW50IH0gPSByZXNwb25zZTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA9IGNvbnRlbnQuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5BZGRWaXNpYmxlQmxvY2sgPSBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzICsgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA8PSBtYXhWaXNpYmxlQmxvY2tzIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdCbG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBjb250ZW50Lm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRm9yQmxvY2soYmxvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHR5cGUgZm91bmQgZm9yIGJsb2NrIFwiJHtibG9jay5uYW1lfVwiYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB1dWlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2FuQWRkVmlzaWJsZUJsb2NrID8gYmxvY2sudmlzaWJsZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihibG9jay5hZGRpdGlvbmFsRmllbGRzIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IFsuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKDAsIGluc2VydEF0KSwgLi4ubmV3QmxvY2tzLCAuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKGluc2VydEF0KV0ubWFwKChibG9jaykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBZGRCbG9ja0NsaWNrID0gKGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKHRydWUpO1xuICAgICAgICAgICAgICAgIHNldEJlZm9yZUluZGV4KGJlZm9yZUluZGV4KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNsb3NlQWRkQmxvY2tEcmF3ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVG9nZ2xlU2VsZWN0QWxsID0gKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5ibG9jaywgc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0QmxvY2sgPSAoY3VycmVudEJsb2NrOiBCbG9ja3NCbG9ja0l0ZW0sIHNlbGVjdDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkOiBibG9jayA9PT0gY3VycmVudEJsb2NrID8gc2VsZWN0IDogYmxvY2suc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvQ29weSA9IHN0YXRlLmJsb2Nrc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4gYmxvY2suc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0ludGVyZmFjZSA9IGJsb2NrRm9yVHlwZShibG9jay50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9ja0ludGVyZmFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtibG9jay50eXBlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrSW50ZXJmYWNlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogYmxvY2sucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgZmllbGQpID0+ICh7IC4uLmZpZWxkcywgW2ZpZWxkXTogYmxvY2tbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KGJsb2Nrc1RvQ29weSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKS5sZW5ndGg7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFN0YWNrU3dpdGNoIGRpc2FibGVGb3JjZVByb21wdFJvdXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoc3RhY2tBcGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50UGFwZXIgZGlzYWJsZVBhZGRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0QWxsRnJvbUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkQ291bnQgPT09IHN0YXRlLmJsb2Nrcy5sZW5ndGggJiYgc2VsZWN0ZWRDb3VudCA+IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtzZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3RlZENvdW50ICE9PSBzdGF0ZS5ibG9ja3MubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRvZ2dsZVNlbGVjdEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LnNlbGVjdEFsbFwiIGRlZmF1bHRNZXNzYWdlPVwiU2VsZWN0IGFsbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LyogRG8gbm90IHNob3cgdG9nZ2xlIHZpc2liaWxpdHkgb2YgYWxsIHNlbGVjdGVkIGJsb2NrcyBidXR0b25zIHdoZW4gbWF4VmlzaWJsZUJsb2NrcyBpcyBzZXQgKi99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFtYXhWaXNpYmxlQmxvY2tzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxWaXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1ha2UgdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8SW52aXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uaW52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIGludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8RGVsZXRlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlQWxsU2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5kZWxldGVcIiBkZWZhdWx0TWVzc2FnZT1cIkRlbGV0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PENvcHkgLz59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5U2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5jb3B5XCIgZGVmYXVsdE1lc3NhZ2U9XCJDb3B5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbSBpY29uPXs8UGFzdGUgLz59IG9uQ2xpY2s9eygpID0+IHBhc3RlQmxvY2soMCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5wYXN0ZVwiIGRlZmF1bHRNZXNzYWdlPVwiUGFzdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNNZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubWFwKChkYXRhLCBibG9ja0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGRhdGEudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIW1heFZpc2libGVCbG9ja3MgJiYgdG90YWxWaXNpYmxlQmxvY2tzID49IG1heFZpc2libGVCbG9ja3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhblRvZ2dsZVZpc2liaWxpdHkgPSBpc01heFZpc2libGVCbG9ja3NSZWFjaGVkID8gZGF0YS52aXNpYmxlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCAmJiAhZGF0YS52aXNpYmxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SG92ZXJQcmV2aWV3Q29tcG9uZW50IGtleT17ZGF0YS5rZXl9IGNvbXBvbmVudFNsdWc9e2Ake2RhdGEua2V5fS9ibG9ja3NgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2RhdGEua2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQcmV2aWV3Q29udGVudD17KCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUHJldmlld0NvbnRlbnQgYmxvY2s9e2Jsb2NrfSBzdGF0ZT17ZGF0YS5wcm9wc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2Jsb2NrSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29udGVudENsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJibG9ja3NcIiwgZGF0YS5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoW2RhdGEua2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVCbG9jaz17KGZyb20sIHRvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrVG9Nb3ZlID0gYmxvY2tzLnNwbGljZShmcm9tLCAxKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3Muc3BsaWNlKHRvLCAwLCBibG9ja1RvTW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5QnV0dG9uPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TWF4QmxvY2tzQWxsb3dlZE1lc3NhZ2UgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmJsb2NrLm1heFZpc2libGVCbG9ja3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWF4LiB2aXNpYmxlIGJsb2NrcyBhbGxvd2VkOiB7bWF4VmlzaWJsZUJsb2Nrc31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBtYXhWaXNpYmxlQmxvY2tzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGNvbXBvbmVudD1cInNwYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNhblRvZ2dsZVZpc2liaWxpdHkgJiYgdG9nZ2xlVmlzaWJsZShkYXRhLmtleSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5Ub2dnbGVWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF0YS52aXNpYmxlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWaXNpYmxlIGNvbG9yPVwic3VjY2Vzc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnZpc2libGUgY29sb3I9XCJhY3Rpb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9e2hhbmRsZUFkZEJsb2NrQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29weUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2RhdGEudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNsaXBib2FyZENvbnRlbnQoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYmxvY2submFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZGF0YS52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogZGF0YS5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRhdGFbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblBhc3RlQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlQmxvY2soYmxvY2tJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZD17ZGF0YS5zZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RlZENsaWNrPXsoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEJsb2NrKGRhdGEsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZEZuPXsoKSA9PiBibG9jay5pc1ZhbGlkKGRhdGEucHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluPXtkYXRhLnNsaWRlSW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVCb3R0b21JbnNlcnRCZXR3ZWVuQnV0dG9uPXtibG9ja0luZGV4ID49IHN0YXRlLmJsb2Nrcy5sZW5ndGggLSAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWVudUl0ZW1zPXsob25NZW51Q2xvc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZGl0aW9uYWxJdGVtQ29udGV4dE1lbnVJdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPXtkYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHVwZGF0ZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldmlvdXNTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZpb3VzU3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmtleSA9PT0gZGF0YS5rZXkgPyB1cGRhdGVkSXRlbSA6IGJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxDb250ZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCA/IDxBZGRpdGlvbmFsSXRlbUNvbnRlbnQgaXRlbT17ZGF0YX0gLz4gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hvdmVyUHJldmlld0NvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFkZEJsb2NrQ2xpY2soKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhcmdlQWRkQnV0dG9uSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJY29uPXs8QWRkIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWRkTmV3QmxvY2tcIiBkZWZhdWx0TWVzc2FnZT1cIkFkZCBibG9ja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRQYXBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZEJsb2NrRHJhd2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXtzaG93QWRkQmxvY2tEcmF3ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzPXtmaWx0ZXJlZFN1cHBvcnRlZEJsb2Nrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9eyh0eXBlLCBhZGRBbmRFZGl0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYWRkTmV3QmxvY2sodHlwZSwgYmVmb3JlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEFuZEVkaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tQYWdlIG5hbWU9XCJibG9ja3NcIiB0aXRsZT1cIkJsb2NrIGJlYXJiZWl0ZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGlkKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBzdGF0ZS5ibG9ja3MuZmluZCgoYykgPT4gYy5rZXkgPT09IGlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG1hdGNoLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJtYWluXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZVRpdGxlIHRpdGxlPXtibG9jay5kaXNwbGF5TmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmxvY2suQWRtaW5Db21wb25lbnQgc3RhdGU9e21hdGNoLnByb3BzfSB1cGRhdGVTdGF0ZT17Y3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4oaWQpfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrUGFnZVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2Fubm90UGFzdGVCbG9ja0RpYWxvZyBvcGVuIG9uQ2xvc2U9eygpID0+IHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcih1bmRlZmluZWQpfSBlcnJvcj17Y2Fubm90UGFzdGVCbG9ja0Vycm9yfSAvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld0NvbnRlbnQ6IChzdGF0ZSwgY3R4KSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCA9MCB7Tm8gYmxvY2tzfSBvbmUgeyMgYmxvY2t9IG90aGVyIHsjIGJsb2Nrc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBzdGF0ZS5ibG9ja3MubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPFByZXZpZXdDb250ZW50W10+KChwcmV2LCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUobmV4dC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFByZXZpZXdDb250ZW50ID0gYmxvY2sucHJldmlld0NvbnRlbnQobmV4dC5wcm9wcywgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5uZXh0UHJldmlld0NvbnRlbnRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZURlcGVuZGVuY3lQYXRoOiAoc3RhdGUsIGpzb25QYXRoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIS9eYmxvY2tzLlxcZCsucHJvcHMvLnRlc3QoanNvblBhdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEludmFsaWQganNvblBhdGhcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdGhBcnIgPSBqc29uUGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIocGF0aEFyclsxXSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja0l0ZW0gPSBzdGF0ZS5ibG9ja3NbbnVtXTtcblxuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoYmxvY2tJdGVtLnR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoYmxvY2sgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3NCbG9jazogQmxvY2sgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gYmxvY2sucmVzb2x2ZURlcGVuZGVuY3lQYXRoKGJsb2NrSXRlbS5wcm9wcywgcGF0aEFyci5zbGljZSgzKS5qb2luKFwiLlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gYCR7YmxvY2tJdGVtLmtleX0vYmxvY2tzLyR7Y2hpbGRQYXRofWA7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dHJhY3RUZXh0Q29udGVudHM6IChzdGF0ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPSBvcHRpb25zPy5pbmNsdWRlSW52aXNpYmxlQ29udGVudCA/PyBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChjb250ZW50LCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSAmJiAhaW5jbHVkZUludmlzaWJsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5jb250ZW50LCAuLi4oYmxvY2suZXh0cmFjdFRleHRDb250ZW50cz8uKGNoaWxkLnByb3BzLCBvcHRpb25zKSA/PyBbXSldO1xuICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGVDb250ZW50OiBhc3luYyAoc3RhdGUsIHRyYW5zbGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZEJsb2NrcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5tYXAoYXN5bmMgKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQcm9wcyA9IGJsb2NrLnRyYW5zbGF0ZUNvbnRlbnQgPyBhd2FpdCBibG9jay50cmFuc2xhdGVDb250ZW50KGNoaWxkLnByb3BzLCB0cmFuc2xhdGUpIDogY2hpbGQucHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmNoaWxkLCBwcm9wczogdHJhbnNsYXRlZFByb3BzIH07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGJsb2NrczogdHJhbnNsYXRlZEJsb2NrcyB9O1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlKEJsb2Nrc0Jsb2NrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQmxvY2tzQmxvY2s7XG59XG5cbmNvbnN0IEJsb2NrTGlzdEhlYWRlciA9IHN0eWxlZChcImRpdlwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygwLCAxKX07XG5gO1xuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEycHggMDtcbmA7XG5cbmNvbnN0IFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWwgPSBzdHlsZWQoRm9ybUNvbnRyb2xMYWJlbClgXG4gICAgcGFkZGluZzogMTVweCAxMHB4IDE1cHggN3B4O1xuYDtcblxuY29uc3QgTGFyZ2VBZGRCdXR0b25Db250ZW50ID0gc3R5bGVkKFwic3BhblwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiA0cHggMDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uSWNvbiA9IHN0eWxlZChBZGQpYFxuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG5gO1xuXG5jb25zdCBTZXBhcmF0b3IgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsocHJvcHMpID0+IHByb3BzLnRoZW1lLnBhbGV0dGUuZ3JleVtcIjEwMFwiXX07XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgbWFyZ2luLWxlZnQ6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygxKX07XG4gICAgbWFyZ2luLXJpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuYDtcbiJdfQ== */"));
|
|
1006
|
+
var BlockListHeaderActionContainer = /*#__PURE__*/styled("div", process.env.NODE_ENV === "production" ? {
|
|
1007
|
+
target: "e15z4m3g4"
|
|
1008
|
+
} : {
|
|
1009
|
+
target: "e15z4m3g4",
|
|
1010
|
+
label: "BlockListHeaderActionContainer"
|
|
1011
|
+
})(process.env.NODE_ENV === "production" ? {
|
|
1012
|
+
name: "1n729k6",
|
|
1013
|
+
styles: "display:flex;align-items:center;padding:12px 0"
|
|
1014
|
+
} : {
|
|
1015
|
+
name: "1n729k6",
|
|
1016
|
+
styles: "display:flex;align-items:center;padding:12px 0/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0N0JvRCIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAZGV4dGluaXR5L2FkbWluXCI7XG5pbXBvcnQgeyBBZGQsIENvcHksIERlbGV0ZSwgSW52aXNpYmxlLCBQYXN0ZSwgVmlzaWJsZSB9IGZyb20gXCJAZGV4dGluaXR5L2FkbWluLWljb25zXCI7XG5pbXBvcnQgeyBCb3gsIENoZWNrYm94LCBGb3JtQ29udHJvbExhYmVsLCBJY29uQnV0dG9uLCBUeXBvZ3JhcGh5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsL3N0eWxlc1wiO1xuaW1wb3J0IHtcbiAgICB0eXBlIENoYW5nZUV2ZW50LFxuICAgIHR5cGUgRGlzcGF0Y2gsXG4gICAgdHlwZSBGdW5jdGlvbkNvbXBvbmVudCxcbiAgICB0eXBlIFJlYWN0Tm9kZSxcbiAgICB0eXBlIFNldFN0YXRlQWN0aW9uLFxuICAgIHVzZUNhbGxiYWNrLFxuICAgIHVzZUVmZmVjdCxcbiAgICB1c2VNZW1vLFxuICAgIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZvcm1hdHRlZE1lc3NhZ2UsIHR5cGUgTWVzc2FnZURlc2NyaXB0b3IgfSBmcm9tIFwicmVhY3QtaW50bFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbmltcG9ydCB7IHVzZUNvbnRlbnRTY29wZSB9IGZyb20gXCIuLi8uLi9jb250ZW50U2NvcGUvUHJvdmlkZXJcIjtcbmltcG9ydCB7IENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgfSBmcm9tIFwiLi4vY2xpcGJvYXJkL0Nhbm5vdFBhc3RlQmxvY2tEaWFsb2dcIjtcbmltcG9ydCB7IHVzZUJsb2NrQ2xpcGJvYXJkIH0gZnJvbSBcIi4uL2NsaXBib2FyZC91c2VCbG9ja0NsaXBib2FyZFwiO1xuaW1wb3J0IHsgQWRkQmxvY2tEcmF3ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkZEJsb2NrRHJhd2VyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUZvb3RlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXJcIjtcbmltcG9ydCB7IEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlclwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvbiB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvblwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXJcIjtcbmltcG9ydCB7IEJsb2NrUHJldmlld0NvbnRlbnQgfSBmcm9tIFwiLi4vY29tbW9uL2Jsb2NrUm93L0Jsb2NrUHJldmlld0NvbnRlbnRcIjtcbmltcG9ydCB7IEJsb2NrUm93IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1Jvd1wiO1xuaW1wb3J0IHsgdXNlQmxvY2tzQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9CbG9ja3NDb25maWdDb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVCbG9ja1NrZWxldG9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvY3JlYXRlQmxvY2tTa2VsZXRvblwiO1xuaW1wb3J0IHsgZGVkdXBsaWNhdGVCbG9ja0RlcGVuZGVuY2llcyB9IGZyb20gXCIuLi9oZWxwZXJzL2RlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IEhvdmVyUHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvSG92ZXJQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgeyBTZWxlY3RQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSBcIi4uL2lmcmFtZWJyaWRnZS9TZWxlY3RQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEJsb2NrRGVwZW5kZW5jeSwgQmxvY2tJbnRlcmZhY2UsIEJsb2NrU3RhdGUsIFByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlTmV3U3RhdGUgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IHBhcmFsbGVsQXN5bmNFdmVyeSB9IGZyb20gXCIuLi91dGlscy9wYXJhbGxlbEFzeW5jRXZlcnlcIjtcblxuLy8gVXNpbmcge30gaW5zdGVhZCBvZiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gYmVjYXVzZSBuZXZlciBhbmQgdW5rbm93biBhcmUgaW5jb21wYXRpYmxlLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxudHlwZSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMgPSB7fTtcblxudHlwZSBCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSB7XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICBrZXk6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBwcm9wczogQmxvY2tTdGF0ZTxUPjtcbiAgICBzbGlkZUluOiBib29sZWFuO1xufSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzO1xuXG50eXBlIFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSBCbG9ja3NCbG9ja0l0ZW08VCwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ICYgeyByZW1vdmVkQXQ6IG51bWJlciB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQXJyYXk8XG4gICAgICAgIHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgcHJvcHM6IGFueTtcbiAgICAgICAgfSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzXG4gICAgPjtcbn1cblxudHlwZSBCbG9ja1R5cGUgPSBzdHJpbmc7XG5cbmludGVyZmFjZSBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8VmFsdWUgPSB1bmtub3duPiB7XG4gICAgZGVmYXVsdFZhbHVlOiBWYWx1ZTtcbn1cblxuaW50ZXJmYWNlIENyZWF0ZUJsb2Nrc0Jsb2NrT3B0aW9uczxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRpc3BsYXlOYW1lPzogUmVhY3ROb2RlO1xuICAgIHN1cHBvcnRlZEJsb2NrczogUmVjb3JkPEJsb2NrVHlwZSwgQmxvY2tJbnRlcmZhY2U+O1xuICAgIG1heFZpc2libGVCbG9ja3M/OiBudW1iZXI7XG4gICAgYWRkaXRpb25hbEl0ZW1GaWVsZHM/OiB7XG4gICAgICAgIFtLZXkgaW4ga2V5b2YgQWRkaXRpb25hbEl0ZW1GaWVsZHNdOiBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8QWRkaXRpb25hbEl0ZW1GaWVsZHNbS2V5XT47XG4gICAgfTtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXM/OiBGdW5jdGlvbkNvbXBvbmVudDx7XG4gICAgICAgIGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+O1xuICAgICAgICBvbkNoYW5nZTogKGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+KSA9PiB2b2lkO1xuICAgICAgICBvbk1lbnVDbG9zZTogKCkgPT4gdm9pZDtcbiAgICB9PjtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQ/OiBGdW5jdGlvbkNvbXBvbmVudDx7IGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+IH0+O1xuICAgIHRhZ3M/OiBBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbG9ja3NCbG9jazxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPihcbiAgICB7XG4gICAgICAgIHN1cHBvcnRlZEJsb2NrcyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGlzcGxheU5hbWUgPSA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5ibG9ja3MubmFtZVwiIGRlZmF1bHRNZXNzYWdlPVwiQmxvY2tzXCIgLz4sXG4gICAgICAgIG1heFZpc2libGVCbG9ja3MsXG4gICAgICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCxcbiAgICAgICAgdGFncyxcbiAgICB9OiBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgIG92ZXJyaWRlPzogKFxuICAgICAgICBibG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgICAgICBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgICAgID4sXG4gICAgKSA9PiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4sXG4pOiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4ge1xuICAgIGlmIChPYmplY3Qua2V5cyhzdXBwb3J0ZWRCbG9ja3MpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3MgYmxvY2sgd2l0aCBubyBzdXBwb3J0ZWQgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSBzcGVjaWZ5IGF0IGxlYXN0IHR3byBzdXBwb3J0ZWQgYmxvY2tzLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggYSBzaW5nbGUgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB1c2UgYSBsaXN0IGJsb2NrIChjcmVhdGVMaXN0QmxvY2soKSkgaW5zdGVhZC5cIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmxvY2tGb3JUeXBlKHR5cGU6IHN0cmluZyk6IEJsb2NrSW50ZXJmYWNlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3NbdHlwZV0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0eXBlRm9yQmxvY2sodGFyZ2V0QmxvY2s6IFBpY2s8QmxvY2tJbnRlcmZhY2UsIFwibmFtZVwiPik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3VwcG9ydGVkQmxvY2tzKS5maW5kKChbLCBibG9ja10pID0+IGJsb2NrLm5hbWUgPT09IHRhcmdldEJsb2NrLm5hbWUpPy5bMF0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFRhZ3MgPSBPYmplY3QudmFsdWVzKHN1cHBvcnRlZEJsb2NrcykucmVkdWNlPEFycmF5PE1lc3NhZ2VEZXNjcmlwdG9yIHwgc3RyaW5nPj4oKGFjYywgYmxvY2spID0+IHtcbiAgICAgICAgaWYgKGJsb2NrLnRhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWNjLCAuLi5ibG9jay50YWdzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IEJsb2Nrc0Jsb2NrOiBCbG9ja0ludGVyZmFjZTxcbiAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz5cbiAgICA+ID0ge1xuICAgICAgICAuLi5jcmVhdGVCbG9ja1NrZWxldG9uKCksXG5cbiAgICAgICAgbmFtZSxcblxuICAgICAgICBkaXNwbGF5TmFtZSxcblxuICAgICAgICB0YWdzOiB0YWdzID8gdGFncyA6IGNoaWxkVGFncyxcblxuICAgICAgICBkZWZhdWx0VmFsdWVzOiAoKSA9PiAoeyBibG9ja3M6IFtdIH0pLFxuXG4gICAgICAgIGlucHV0MlN0YXRlOiAoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGlucHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gYmxvY2sgdHlwZSBcIiR7Y2hpbGQudHlwZX1cImApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suaW5wdXQyU3RhdGUoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSwge30pLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2NrcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RhdGUyT3V0cHV0OiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3MubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNoaWxkLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLnN0YXRlMk91dHB1dChjaGlsZC5wcm9wcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICBvdXRwdXQyU3RhdGU6IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICBibG9ja3M6IFtdLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYXdhaXQgYmxvY2sub3V0cHV0MlN0YXRlKGNoaWxkLnByb3BzLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlUHJldmlld1N0YXRlOiAoc3RhdGUsIHByZXZpZXdDdHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogcHJldmlld0N0eC5wYXJlbnRVcmwsXG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY2hpbGQpID0+IChwcmV2aWV3Q3R4LnNob3dWaXNpYmxlT25seSA/IGNoaWxkLnZpc2libGUgOiB0cnVlKSkgLy8gZGVwZW5kaW5nIG9uIGNvbnRleHQgc2hvdyBhbGwgYmxvY2tzIG9yIG9ubHkgdmlzaWJsZSBibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQWRtaW5Sb3V0ZSA9IGAke3ByZXZpZXdDdHgucGFyZW50VXJsU3ViUm91dGUgPz8gcHJldmlld0N0eC5wYXJlbnRVcmx9LyR7Y2hpbGQua2V5fS9ibG9ja3NgO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNoaWxkLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogYmxvY2tBZG1pblJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5jcmVhdGVQcmV2aWV3U3RhdGUoY2hpbGQucHJvcHMsIHsgLi4ucHJldmlld0N0eCwgcGFyZW50VXJsU3ViUm91dGU6IHVuZGVmaW5lZCwgcGFyZW50VXJsOiBibG9ja0FkbWluUm91dGUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBhZG1pbk1ldGE6IHsgcm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBpc1ZhbGlkOiBhc3luYyAoc3RhdGUpID0+XG4gICAgICAgICAgICBwYXJhbGxlbEFzeW5jRXZlcnkoc3RhdGUuYmxvY2tzLCBhc3luYyAoYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGMudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Yy50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmlzVmFsaWQoYy5wcm9wcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgY2hpbGRCbG9ja0NvdW50OiAoc3RhdGUpID0+IHN0YXRlLmJsb2Nrcy5sZW5ndGgsXG5cbiAgICAgICAgYW5jaG9yczogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxzdHJpbmdbXT4oKGFuY2hvcnMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYW5jaG9ycywgLi4uKGJsb2NrLmFuY2hvcnM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcblxuICAgICAgICBkZXBlbmRlbmNpZXM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkRGVwZW5kZW5jaWVzID0gc3RhdGUuYmxvY2tzLnJlZHVjZTxCbG9ja0RlcGVuZGVuY3lbXT4oKGRlcGVuZGVuY2llcywgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5kZXBlbmRlbmNpZXMsIC4uLihibG9jay5kZXBlbmRlbmNpZXM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMobWVyZ2VkRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQ6IChvdXRwdXQsIHJlcGxhY2VtZW50cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3T3V0cHV0OiBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IGJsb2NrczogW10gfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXdPdXRwdXQuYmxvY2tzLnB1c2goeyAuLi5jaGlsZCwgcHJvcHM6IGJsb2NrLnJlcGxhY2VEZXBlbmRlbmNpZXNJbk91dHB1dChjaGlsZC5wcm9wcywgcmVwbGFjZW1lbnRzKSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ld091dHB1dDtcbiAgICAgICAgfSxcblxuICAgICAgICBkZWZpbmVzT3duUGFkZGluZzogdHJ1ZSxcblxuICAgICAgICBBZG1pbkNvbXBvbmVudDogKHsgc3RhdGUsIHVwZGF0ZVN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVZpc2libGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYykgPT4gKGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgdmlzaWJsZTogIWMudmlzaWJsZSB9IDogYykpLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgW3Nob3dBZGRCbG9ja0RyYXdlciwgc2V0U2hvd0FkZEJsb2NrRHJhd2VyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IFtiZWZvcmVJbmRleCwgc2V0QmVmb3JlSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPigpO1xuICAgICAgICAgICAgY29uc3QgW2Nhbm5vdFBhc3RlQmxvY2tFcnJvciwgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yXSA9IHVzZVN0YXRlPFJlYWN0Tm9kZT4oKTtcblxuICAgICAgICAgICAgY29uc3Qgc25hY2tiYXJBcGkgPSB1c2VTbmFja2JhckFwaSgpO1xuXG4gICAgICAgICAgICBjb25zdCB0b3RhbFZpc2libGVCbG9ja3MgPSBzdGF0ZS5ibG9ja3MuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuXG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ibG9ja3Muc29tZSgoYmxvY2spID0+IGJsb2NrLnNsaWRlSW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRIYW5kbGUgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoeyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoeyAuLi5ibG9jaywgc2xpZGVJbjogZmFsc2UgfSkpIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3N0YXRlLmJsb2NrcywgdXBkYXRlU3RhdGVdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVW5kb0NsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKHJlbW92ZWRCbG9ja3M6IFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZEJsb2Nrcz8uZm9yRWFjaCgocmVtb3ZlZEJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkQXQgfSA9IHJlbW92ZWRCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jazogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IC4uLnJlbW92ZWRCbG9jayB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBibG9jay5yZW1vdmVkQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZShyZW1vdmVkQXQsIDAsIGJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrcyB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVCbG9ja3MgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXlzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1JlbW92ZSA9IHByZXZTdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHJlbW92ZWRBdDogaW5kZXggfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9ja0tleXMuaW5jbHVkZXMoYmxvY2sua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc25hY2tiYXJBcGkuc2hvd1NuYWNrYmFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVbmRvU25hY2tiYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYmxvY2tEZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCBvbmUge2Jsb2NrfSBvdGhlciB7IyBibG9ja3N9fSBkZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgY291bnQ6IGJsb2Nrc1RvUmVtb3ZlLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkPXtibG9ja3NUb1JlbW92ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VbmRvQ2xpY2s9eyhibG9ja3NUb1JlbW92ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVW5kb0NsaWNrKGJsb2Nrc1RvUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4gIWJsb2NrS2V5cy5pbmNsdWRlcyhjLmtleSkpIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW2hhbmRsZVVuZG9DbGljaywgc25hY2tiYXJBcGksIHVwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzID0gKHZpc2libGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvU2hvdyA9IHN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMudmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBibG9ja3NUb1Nob3cgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvRGVsZXRlID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRlbGV0ZUJsb2NrcyhcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tzVG9EZWxldGUubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmtleTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZE5ld0Jsb2NrID0gKHR5cGU6IEJsb2NrVHlwZSwgYmVmb3JlSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB1dWlkKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZSh0eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHt0eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzIDwgbWF4VmlzaWJsZUJsb2NrcyA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmRlZmF1bHRWYWx1ZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5lbnRyaWVzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBbZmllbGQsIHsgZGVmYXVsdFZhbHVlIH1dKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRlZmF1bHRWYWx1ZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzID0gWy4uLnN0YXRlLmJsb2Nrc107XG5cbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3Muc3BsaWNlKGJlZm9yZUluZGV4LCAwLCBuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3MucHVzaChuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrczogbmV3QmxvY2tzLFxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVVcGRhdGVTdWJCbG9ja3NGbiA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChibG9ja0tleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVN1YkJsb2Nrc0ZuOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjx1bmtub3duPj4gPSAoc2V0U3RhdGVBY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgcHJvcHM6IHJlc29sdmVOZXdTdGF0ZSh7IHByZXZTdGF0ZTogYy5wcm9wcywgc2V0U3RhdGVBY3Rpb24gfSkgfSA6IGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1YkJsb2Nrc0ZuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgc2NvcGUgfSA9IHVzZUNvbnRlbnRTY29wZSgpO1xuICAgICAgICAgICAgY29uc3QgeyBpc0Jsb2NrU3VwcG9ydGVkIH0gPSB1c2VCbG9ja3NDb25maWcoKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCbG9ja1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmlsdGVyKChbLCBibG9ja10pID0+IGlzQmxvY2tTdXBwb3J0ZWQoYmxvY2ssIHNjb3BlKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3Njb3BlLCBpc0Jsb2NrU3VwcG9ydGVkXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgdXBkYXRlQ2xpcGJvYXJkQ29udGVudCwgZ2V0Q2xpcGJvYXJkQ29udGVudCB9ID0gdXNlQmxvY2tDbGlwYm9hcmQoeyBzdXBwb3J0czogT2JqZWN0LnZhbHVlcyhmaWx0ZXJlZFN1cHBvcnRlZEJsb2NrcykgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhc3RlQmxvY2sgPSBhc3luYyAoaW5zZXJ0QXQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ2V0Q2xpcGJvYXJkQ29udGVudCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5jYW5QYXN0ZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IocmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb250ZW50IH0gPSByZXNwb25zZTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA9IGNvbnRlbnQuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5BZGRWaXNpYmxlQmxvY2sgPSBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzICsgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA8PSBtYXhWaXNpYmxlQmxvY2tzIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdCbG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBjb250ZW50Lm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRm9yQmxvY2soYmxvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHR5cGUgZm91bmQgZm9yIGJsb2NrIFwiJHtibG9jay5uYW1lfVwiYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB1dWlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2FuQWRkVmlzaWJsZUJsb2NrID8gYmxvY2sudmlzaWJsZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihibG9jay5hZGRpdGlvbmFsRmllbGRzIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IFsuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKDAsIGluc2VydEF0KSwgLi4ubmV3QmxvY2tzLCAuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKGluc2VydEF0KV0ubWFwKChibG9jaykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBZGRCbG9ja0NsaWNrID0gKGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKHRydWUpO1xuICAgICAgICAgICAgICAgIHNldEJlZm9yZUluZGV4KGJlZm9yZUluZGV4KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNsb3NlQWRkQmxvY2tEcmF3ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVG9nZ2xlU2VsZWN0QWxsID0gKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5ibG9jaywgc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0QmxvY2sgPSAoY3VycmVudEJsb2NrOiBCbG9ja3NCbG9ja0l0ZW0sIHNlbGVjdDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkOiBibG9jayA9PT0gY3VycmVudEJsb2NrID8gc2VsZWN0IDogYmxvY2suc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvQ29weSA9IHN0YXRlLmJsb2Nrc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4gYmxvY2suc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0ludGVyZmFjZSA9IGJsb2NrRm9yVHlwZShibG9jay50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9ja0ludGVyZmFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtibG9jay50eXBlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrSW50ZXJmYWNlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogYmxvY2sucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgZmllbGQpID0+ICh7IC4uLmZpZWxkcywgW2ZpZWxkXTogYmxvY2tbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KGJsb2Nrc1RvQ29weSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKS5sZW5ndGg7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFN0YWNrU3dpdGNoIGRpc2FibGVGb3JjZVByb21wdFJvdXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoc3RhY2tBcGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50UGFwZXIgZGlzYWJsZVBhZGRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0QWxsRnJvbUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkQ291bnQgPT09IHN0YXRlLmJsb2Nrcy5sZW5ndGggJiYgc2VsZWN0ZWRDb3VudCA+IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtzZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3RlZENvdW50ICE9PSBzdGF0ZS5ibG9ja3MubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRvZ2dsZVNlbGVjdEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LnNlbGVjdEFsbFwiIGRlZmF1bHRNZXNzYWdlPVwiU2VsZWN0IGFsbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LyogRG8gbm90IHNob3cgdG9nZ2xlIHZpc2liaWxpdHkgb2YgYWxsIHNlbGVjdGVkIGJsb2NrcyBidXR0b25zIHdoZW4gbWF4VmlzaWJsZUJsb2NrcyBpcyBzZXQgKi99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFtYXhWaXNpYmxlQmxvY2tzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxWaXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1ha2UgdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8SW52aXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uaW52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIGludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8RGVsZXRlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlQWxsU2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5kZWxldGVcIiBkZWZhdWx0TWVzc2FnZT1cIkRlbGV0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PENvcHkgLz59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5U2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5jb3B5XCIgZGVmYXVsdE1lc3NhZ2U9XCJDb3B5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbSBpY29uPXs8UGFzdGUgLz59IG9uQ2xpY2s9eygpID0+IHBhc3RlQmxvY2soMCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5wYXN0ZVwiIGRlZmF1bHRNZXNzYWdlPVwiUGFzdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNNZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubWFwKChkYXRhLCBibG9ja0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGRhdGEudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIW1heFZpc2libGVCbG9ja3MgJiYgdG90YWxWaXNpYmxlQmxvY2tzID49IG1heFZpc2libGVCbG9ja3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhblRvZ2dsZVZpc2liaWxpdHkgPSBpc01heFZpc2libGVCbG9ja3NSZWFjaGVkID8gZGF0YS52aXNpYmxlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCAmJiAhZGF0YS52aXNpYmxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SG92ZXJQcmV2aWV3Q29tcG9uZW50IGtleT17ZGF0YS5rZXl9IGNvbXBvbmVudFNsdWc9e2Ake2RhdGEua2V5fS9ibG9ja3NgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2RhdGEua2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQcmV2aWV3Q29udGVudD17KCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUHJldmlld0NvbnRlbnQgYmxvY2s9e2Jsb2NrfSBzdGF0ZT17ZGF0YS5wcm9wc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2Jsb2NrSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29udGVudENsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJibG9ja3NcIiwgZGF0YS5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoW2RhdGEua2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVCbG9jaz17KGZyb20sIHRvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrVG9Nb3ZlID0gYmxvY2tzLnNwbGljZShmcm9tLCAxKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3Muc3BsaWNlKHRvLCAwLCBibG9ja1RvTW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5QnV0dG9uPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TWF4QmxvY2tzQWxsb3dlZE1lc3NhZ2UgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmJsb2NrLm1heFZpc2libGVCbG9ja3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWF4LiB2aXNpYmxlIGJsb2NrcyBhbGxvd2VkOiB7bWF4VmlzaWJsZUJsb2Nrc31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBtYXhWaXNpYmxlQmxvY2tzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGNvbXBvbmVudD1cInNwYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNhblRvZ2dsZVZpc2liaWxpdHkgJiYgdG9nZ2xlVmlzaWJsZShkYXRhLmtleSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5Ub2dnbGVWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF0YS52aXNpYmxlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWaXNpYmxlIGNvbG9yPVwic3VjY2Vzc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnZpc2libGUgY29sb3I9XCJhY3Rpb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9e2hhbmRsZUFkZEJsb2NrQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29weUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2RhdGEudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNsaXBib2FyZENvbnRlbnQoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYmxvY2submFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZGF0YS52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogZGF0YS5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRhdGFbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblBhc3RlQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlQmxvY2soYmxvY2tJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZD17ZGF0YS5zZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RlZENsaWNrPXsoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEJsb2NrKGRhdGEsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZEZuPXsoKSA9PiBibG9jay5pc1ZhbGlkKGRhdGEucHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluPXtkYXRhLnNsaWRlSW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVCb3R0b21JbnNlcnRCZXR3ZWVuQnV0dG9uPXtibG9ja0luZGV4ID49IHN0YXRlLmJsb2Nrcy5sZW5ndGggLSAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWVudUl0ZW1zPXsob25NZW51Q2xvc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZGl0aW9uYWxJdGVtQ29udGV4dE1lbnVJdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPXtkYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHVwZGF0ZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldmlvdXNTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZpb3VzU3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmtleSA9PT0gZGF0YS5rZXkgPyB1cGRhdGVkSXRlbSA6IGJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxDb250ZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCA/IDxBZGRpdGlvbmFsSXRlbUNvbnRlbnQgaXRlbT17ZGF0YX0gLz4gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hvdmVyUHJldmlld0NvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFkZEJsb2NrQ2xpY2soKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhcmdlQWRkQnV0dG9uSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJY29uPXs8QWRkIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWRkTmV3QmxvY2tcIiBkZWZhdWx0TWVzc2FnZT1cIkFkZCBibG9ja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRQYXBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZEJsb2NrRHJhd2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXtzaG93QWRkQmxvY2tEcmF3ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzPXtmaWx0ZXJlZFN1cHBvcnRlZEJsb2Nrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9eyh0eXBlLCBhZGRBbmRFZGl0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYWRkTmV3QmxvY2sodHlwZSwgYmVmb3JlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEFuZEVkaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tQYWdlIG5hbWU9XCJibG9ja3NcIiB0aXRsZT1cIkJsb2NrIGJlYXJiZWl0ZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGlkKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBzdGF0ZS5ibG9ja3MuZmluZCgoYykgPT4gYy5rZXkgPT09IGlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG1hdGNoLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJtYWluXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZVRpdGxlIHRpdGxlPXtibG9jay5kaXNwbGF5TmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmxvY2suQWRtaW5Db21wb25lbnQgc3RhdGU9e21hdGNoLnByb3BzfSB1cGRhdGVTdGF0ZT17Y3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4oaWQpfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrUGFnZVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2Fubm90UGFzdGVCbG9ja0RpYWxvZyBvcGVuIG9uQ2xvc2U9eygpID0+IHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcih1bmRlZmluZWQpfSBlcnJvcj17Y2Fubm90UGFzdGVCbG9ja0Vycm9yfSAvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld0NvbnRlbnQ6IChzdGF0ZSwgY3R4KSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCA9MCB7Tm8gYmxvY2tzfSBvbmUgeyMgYmxvY2t9IG90aGVyIHsjIGJsb2Nrc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBzdGF0ZS5ibG9ja3MubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPFByZXZpZXdDb250ZW50W10+KChwcmV2LCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUobmV4dC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFByZXZpZXdDb250ZW50ID0gYmxvY2sucHJldmlld0NvbnRlbnQobmV4dC5wcm9wcywgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5uZXh0UHJldmlld0NvbnRlbnRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZURlcGVuZGVuY3lQYXRoOiAoc3RhdGUsIGpzb25QYXRoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIS9eYmxvY2tzLlxcZCsucHJvcHMvLnRlc3QoanNvblBhdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEludmFsaWQganNvblBhdGhcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdGhBcnIgPSBqc29uUGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIocGF0aEFyclsxXSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja0l0ZW0gPSBzdGF0ZS5ibG9ja3NbbnVtXTtcblxuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoYmxvY2tJdGVtLnR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoYmxvY2sgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3NCbG9jazogQmxvY2sgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gYmxvY2sucmVzb2x2ZURlcGVuZGVuY3lQYXRoKGJsb2NrSXRlbS5wcm9wcywgcGF0aEFyci5zbGljZSgzKS5qb2luKFwiLlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gYCR7YmxvY2tJdGVtLmtleX0vYmxvY2tzLyR7Y2hpbGRQYXRofWA7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dHJhY3RUZXh0Q29udGVudHM6IChzdGF0ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPSBvcHRpb25zPy5pbmNsdWRlSW52aXNpYmxlQ29udGVudCA/PyBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChjb250ZW50LCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSAmJiAhaW5jbHVkZUludmlzaWJsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5jb250ZW50LCAuLi4oYmxvY2suZXh0cmFjdFRleHRDb250ZW50cz8uKGNoaWxkLnByb3BzLCBvcHRpb25zKSA/PyBbXSldO1xuICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGVDb250ZW50OiBhc3luYyAoc3RhdGUsIHRyYW5zbGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZEJsb2NrcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5tYXAoYXN5bmMgKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQcm9wcyA9IGJsb2NrLnRyYW5zbGF0ZUNvbnRlbnQgPyBhd2FpdCBibG9jay50cmFuc2xhdGVDb250ZW50KGNoaWxkLnByb3BzLCB0cmFuc2xhdGUpIDogY2hpbGQucHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmNoaWxkLCBwcm9wczogdHJhbnNsYXRlZFByb3BzIH07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGJsb2NrczogdHJhbnNsYXRlZEJsb2NrcyB9O1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlKEJsb2Nrc0Jsb2NrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQmxvY2tzQmxvY2s7XG59XG5cbmNvbnN0IEJsb2NrTGlzdEhlYWRlciA9IHN0eWxlZChcImRpdlwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygwLCAxKX07XG5gO1xuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEycHggMDtcbmA7XG5cbmNvbnN0IFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWwgPSBzdHlsZWQoRm9ybUNvbnRyb2xMYWJlbClgXG4gICAgcGFkZGluZzogMTVweCAxMHB4IDE1cHggN3B4O1xuYDtcblxuY29uc3QgTGFyZ2VBZGRCdXR0b25Db250ZW50ID0gc3R5bGVkKFwic3BhblwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiA0cHggMDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uSWNvbiA9IHN0eWxlZChBZGQpYFxuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG5gO1xuXG5jb25zdCBTZXBhcmF0b3IgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsocHJvcHMpID0+IHByb3BzLnRoZW1lLnBhbGV0dGUuZ3JleVtcIjEwMFwiXX07XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgbWFyZ2luLWxlZnQ6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygxKX07XG4gICAgbWFyZ2luLXJpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuYDtcbiJdfQ== */",
|
|
1017
|
+
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
1018
|
+
});
|
|
1019
|
+
var SelectAllFromControlLabel = /*#__PURE__*/styled(FormControlLabel, process.env.NODE_ENV === "production" ? {
|
|
1020
|
+
target: "e15z4m3g3"
|
|
1021
|
+
} : {
|
|
1022
|
+
target: "e15z4m3g3",
|
|
1023
|
+
label: "SelectAllFromControlLabel"
|
|
1024
|
+
})(process.env.NODE_ENV === "production" ? {
|
|
1025
|
+
name: "gqnhuy",
|
|
1026
|
+
styles: "padding:15px 10px 15px 7px"
|
|
1027
|
+
} : {
|
|
1028
|
+
name: "gqnhuy",
|
|
1029
|
+
styles: "padding:15px 10px 15px 7px/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrOEIwRCIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAZGV4dGluaXR5L2FkbWluXCI7XG5pbXBvcnQgeyBBZGQsIENvcHksIERlbGV0ZSwgSW52aXNpYmxlLCBQYXN0ZSwgVmlzaWJsZSB9IGZyb20gXCJAZGV4dGluaXR5L2FkbWluLWljb25zXCI7XG5pbXBvcnQgeyBCb3gsIENoZWNrYm94LCBGb3JtQ29udHJvbExhYmVsLCBJY29uQnV0dG9uLCBUeXBvZ3JhcGh5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsL3N0eWxlc1wiO1xuaW1wb3J0IHtcbiAgICB0eXBlIENoYW5nZUV2ZW50LFxuICAgIHR5cGUgRGlzcGF0Y2gsXG4gICAgdHlwZSBGdW5jdGlvbkNvbXBvbmVudCxcbiAgICB0eXBlIFJlYWN0Tm9kZSxcbiAgICB0eXBlIFNldFN0YXRlQWN0aW9uLFxuICAgIHVzZUNhbGxiYWNrLFxuICAgIHVzZUVmZmVjdCxcbiAgICB1c2VNZW1vLFxuICAgIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZvcm1hdHRlZE1lc3NhZ2UsIHR5cGUgTWVzc2FnZURlc2NyaXB0b3IgfSBmcm9tIFwicmVhY3QtaW50bFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbmltcG9ydCB7IHVzZUNvbnRlbnRTY29wZSB9IGZyb20gXCIuLi8uLi9jb250ZW50U2NvcGUvUHJvdmlkZXJcIjtcbmltcG9ydCB7IENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgfSBmcm9tIFwiLi4vY2xpcGJvYXJkL0Nhbm5vdFBhc3RlQmxvY2tEaWFsb2dcIjtcbmltcG9ydCB7IHVzZUJsb2NrQ2xpcGJvYXJkIH0gZnJvbSBcIi4uL2NsaXBib2FyZC91c2VCbG9ja0NsaXBib2FyZFwiO1xuaW1wb3J0IHsgQWRkQmxvY2tEcmF3ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkZEJsb2NrRHJhd2VyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUZvb3RlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXJcIjtcbmltcG9ydCB7IEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlclwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvbiB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvblwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXJcIjtcbmltcG9ydCB7IEJsb2NrUHJldmlld0NvbnRlbnQgfSBmcm9tIFwiLi4vY29tbW9uL2Jsb2NrUm93L0Jsb2NrUHJldmlld0NvbnRlbnRcIjtcbmltcG9ydCB7IEJsb2NrUm93IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1Jvd1wiO1xuaW1wb3J0IHsgdXNlQmxvY2tzQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9CbG9ja3NDb25maWdDb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVCbG9ja1NrZWxldG9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvY3JlYXRlQmxvY2tTa2VsZXRvblwiO1xuaW1wb3J0IHsgZGVkdXBsaWNhdGVCbG9ja0RlcGVuZGVuY2llcyB9IGZyb20gXCIuLi9oZWxwZXJzL2RlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IEhvdmVyUHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvSG92ZXJQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgeyBTZWxlY3RQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSBcIi4uL2lmcmFtZWJyaWRnZS9TZWxlY3RQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEJsb2NrRGVwZW5kZW5jeSwgQmxvY2tJbnRlcmZhY2UsIEJsb2NrU3RhdGUsIFByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlTmV3U3RhdGUgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IHBhcmFsbGVsQXN5bmNFdmVyeSB9IGZyb20gXCIuLi91dGlscy9wYXJhbGxlbEFzeW5jRXZlcnlcIjtcblxuLy8gVXNpbmcge30gaW5zdGVhZCBvZiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gYmVjYXVzZSBuZXZlciBhbmQgdW5rbm93biBhcmUgaW5jb21wYXRpYmxlLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxudHlwZSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMgPSB7fTtcblxudHlwZSBCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSB7XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICBrZXk6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBwcm9wczogQmxvY2tTdGF0ZTxUPjtcbiAgICBzbGlkZUluOiBib29sZWFuO1xufSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzO1xuXG50eXBlIFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSBCbG9ja3NCbG9ja0l0ZW08VCwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ICYgeyByZW1vdmVkQXQ6IG51bWJlciB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQXJyYXk8XG4gICAgICAgIHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgcHJvcHM6IGFueTtcbiAgICAgICAgfSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzXG4gICAgPjtcbn1cblxudHlwZSBCbG9ja1R5cGUgPSBzdHJpbmc7XG5cbmludGVyZmFjZSBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8VmFsdWUgPSB1bmtub3duPiB7XG4gICAgZGVmYXVsdFZhbHVlOiBWYWx1ZTtcbn1cblxuaW50ZXJmYWNlIENyZWF0ZUJsb2Nrc0Jsb2NrT3B0aW9uczxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRpc3BsYXlOYW1lPzogUmVhY3ROb2RlO1xuICAgIHN1cHBvcnRlZEJsb2NrczogUmVjb3JkPEJsb2NrVHlwZSwgQmxvY2tJbnRlcmZhY2U+O1xuICAgIG1heFZpc2libGVCbG9ja3M/OiBudW1iZXI7XG4gICAgYWRkaXRpb25hbEl0ZW1GaWVsZHM/OiB7XG4gICAgICAgIFtLZXkgaW4ga2V5b2YgQWRkaXRpb25hbEl0ZW1GaWVsZHNdOiBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8QWRkaXRpb25hbEl0ZW1GaWVsZHNbS2V5XT47XG4gICAgfTtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXM/OiBGdW5jdGlvbkNvbXBvbmVudDx7XG4gICAgICAgIGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+O1xuICAgICAgICBvbkNoYW5nZTogKGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+KSA9PiB2b2lkO1xuICAgICAgICBvbk1lbnVDbG9zZTogKCkgPT4gdm9pZDtcbiAgICB9PjtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQ/OiBGdW5jdGlvbkNvbXBvbmVudDx7IGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+IH0+O1xuICAgIHRhZ3M/OiBBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbG9ja3NCbG9jazxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPihcbiAgICB7XG4gICAgICAgIHN1cHBvcnRlZEJsb2NrcyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGlzcGxheU5hbWUgPSA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5ibG9ja3MubmFtZVwiIGRlZmF1bHRNZXNzYWdlPVwiQmxvY2tzXCIgLz4sXG4gICAgICAgIG1heFZpc2libGVCbG9ja3MsXG4gICAgICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCxcbiAgICAgICAgdGFncyxcbiAgICB9OiBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgIG92ZXJyaWRlPzogKFxuICAgICAgICBibG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgICAgICBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgICAgID4sXG4gICAgKSA9PiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4sXG4pOiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4ge1xuICAgIGlmIChPYmplY3Qua2V5cyhzdXBwb3J0ZWRCbG9ja3MpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3MgYmxvY2sgd2l0aCBubyBzdXBwb3J0ZWQgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSBzcGVjaWZ5IGF0IGxlYXN0IHR3byBzdXBwb3J0ZWQgYmxvY2tzLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggYSBzaW5nbGUgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB1c2UgYSBsaXN0IGJsb2NrIChjcmVhdGVMaXN0QmxvY2soKSkgaW5zdGVhZC5cIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmxvY2tGb3JUeXBlKHR5cGU6IHN0cmluZyk6IEJsb2NrSW50ZXJmYWNlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3NbdHlwZV0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0eXBlRm9yQmxvY2sodGFyZ2V0QmxvY2s6IFBpY2s8QmxvY2tJbnRlcmZhY2UsIFwibmFtZVwiPik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3VwcG9ydGVkQmxvY2tzKS5maW5kKChbLCBibG9ja10pID0+IGJsb2NrLm5hbWUgPT09IHRhcmdldEJsb2NrLm5hbWUpPy5bMF0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFRhZ3MgPSBPYmplY3QudmFsdWVzKHN1cHBvcnRlZEJsb2NrcykucmVkdWNlPEFycmF5PE1lc3NhZ2VEZXNjcmlwdG9yIHwgc3RyaW5nPj4oKGFjYywgYmxvY2spID0+IHtcbiAgICAgICAgaWYgKGJsb2NrLnRhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWNjLCAuLi5ibG9jay50YWdzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IEJsb2Nrc0Jsb2NrOiBCbG9ja0ludGVyZmFjZTxcbiAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz5cbiAgICA+ID0ge1xuICAgICAgICAuLi5jcmVhdGVCbG9ja1NrZWxldG9uKCksXG5cbiAgICAgICAgbmFtZSxcblxuICAgICAgICBkaXNwbGF5TmFtZSxcblxuICAgICAgICB0YWdzOiB0YWdzID8gdGFncyA6IGNoaWxkVGFncyxcblxuICAgICAgICBkZWZhdWx0VmFsdWVzOiAoKSA9PiAoeyBibG9ja3M6IFtdIH0pLFxuXG4gICAgICAgIGlucHV0MlN0YXRlOiAoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGlucHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gYmxvY2sgdHlwZSBcIiR7Y2hpbGQudHlwZX1cImApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suaW5wdXQyU3RhdGUoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSwge30pLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2NrcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RhdGUyT3V0cHV0OiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3MubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNoaWxkLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLnN0YXRlMk91dHB1dChjaGlsZC5wcm9wcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICBvdXRwdXQyU3RhdGU6IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICBibG9ja3M6IFtdLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYXdhaXQgYmxvY2sub3V0cHV0MlN0YXRlKGNoaWxkLnByb3BzLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlUHJldmlld1N0YXRlOiAoc3RhdGUsIHByZXZpZXdDdHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogcHJldmlld0N0eC5wYXJlbnRVcmwsXG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY2hpbGQpID0+IChwcmV2aWV3Q3R4LnNob3dWaXNpYmxlT25seSA/IGNoaWxkLnZpc2libGUgOiB0cnVlKSkgLy8gZGVwZW5kaW5nIG9uIGNvbnRleHQgc2hvdyBhbGwgYmxvY2tzIG9yIG9ubHkgdmlzaWJsZSBibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQWRtaW5Sb3V0ZSA9IGAke3ByZXZpZXdDdHgucGFyZW50VXJsU3ViUm91dGUgPz8gcHJldmlld0N0eC5wYXJlbnRVcmx9LyR7Y2hpbGQua2V5fS9ibG9ja3NgO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNoaWxkLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogYmxvY2tBZG1pblJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5jcmVhdGVQcmV2aWV3U3RhdGUoY2hpbGQucHJvcHMsIHsgLi4ucHJldmlld0N0eCwgcGFyZW50VXJsU3ViUm91dGU6IHVuZGVmaW5lZCwgcGFyZW50VXJsOiBibG9ja0FkbWluUm91dGUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBhZG1pbk1ldGE6IHsgcm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBpc1ZhbGlkOiBhc3luYyAoc3RhdGUpID0+XG4gICAgICAgICAgICBwYXJhbGxlbEFzeW5jRXZlcnkoc3RhdGUuYmxvY2tzLCBhc3luYyAoYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGMudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Yy50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmlzVmFsaWQoYy5wcm9wcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgY2hpbGRCbG9ja0NvdW50OiAoc3RhdGUpID0+IHN0YXRlLmJsb2Nrcy5sZW5ndGgsXG5cbiAgICAgICAgYW5jaG9yczogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxzdHJpbmdbXT4oKGFuY2hvcnMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYW5jaG9ycywgLi4uKGJsb2NrLmFuY2hvcnM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcblxuICAgICAgICBkZXBlbmRlbmNpZXM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkRGVwZW5kZW5jaWVzID0gc3RhdGUuYmxvY2tzLnJlZHVjZTxCbG9ja0RlcGVuZGVuY3lbXT4oKGRlcGVuZGVuY2llcywgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5kZXBlbmRlbmNpZXMsIC4uLihibG9jay5kZXBlbmRlbmNpZXM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMobWVyZ2VkRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQ6IChvdXRwdXQsIHJlcGxhY2VtZW50cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3T3V0cHV0OiBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IGJsb2NrczogW10gfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXdPdXRwdXQuYmxvY2tzLnB1c2goeyAuLi5jaGlsZCwgcHJvcHM6IGJsb2NrLnJlcGxhY2VEZXBlbmRlbmNpZXNJbk91dHB1dChjaGlsZC5wcm9wcywgcmVwbGFjZW1lbnRzKSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ld091dHB1dDtcbiAgICAgICAgfSxcblxuICAgICAgICBkZWZpbmVzT3duUGFkZGluZzogdHJ1ZSxcblxuICAgICAgICBBZG1pbkNvbXBvbmVudDogKHsgc3RhdGUsIHVwZGF0ZVN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVZpc2libGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYykgPT4gKGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgdmlzaWJsZTogIWMudmlzaWJsZSB9IDogYykpLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgW3Nob3dBZGRCbG9ja0RyYXdlciwgc2V0U2hvd0FkZEJsb2NrRHJhd2VyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IFtiZWZvcmVJbmRleCwgc2V0QmVmb3JlSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPigpO1xuICAgICAgICAgICAgY29uc3QgW2Nhbm5vdFBhc3RlQmxvY2tFcnJvciwgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yXSA9IHVzZVN0YXRlPFJlYWN0Tm9kZT4oKTtcblxuICAgICAgICAgICAgY29uc3Qgc25hY2tiYXJBcGkgPSB1c2VTbmFja2JhckFwaSgpO1xuXG4gICAgICAgICAgICBjb25zdCB0b3RhbFZpc2libGVCbG9ja3MgPSBzdGF0ZS5ibG9ja3MuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuXG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ibG9ja3Muc29tZSgoYmxvY2spID0+IGJsb2NrLnNsaWRlSW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRIYW5kbGUgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoeyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoeyAuLi5ibG9jaywgc2xpZGVJbjogZmFsc2UgfSkpIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3N0YXRlLmJsb2NrcywgdXBkYXRlU3RhdGVdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVW5kb0NsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKHJlbW92ZWRCbG9ja3M6IFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZEJsb2Nrcz8uZm9yRWFjaCgocmVtb3ZlZEJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkQXQgfSA9IHJlbW92ZWRCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jazogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IC4uLnJlbW92ZWRCbG9jayB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBibG9jay5yZW1vdmVkQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZShyZW1vdmVkQXQsIDAsIGJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrcyB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVCbG9ja3MgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXlzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1JlbW92ZSA9IHByZXZTdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHJlbW92ZWRBdDogaW5kZXggfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9ja0tleXMuaW5jbHVkZXMoYmxvY2sua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc25hY2tiYXJBcGkuc2hvd1NuYWNrYmFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVbmRvU25hY2tiYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYmxvY2tEZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCBvbmUge2Jsb2NrfSBvdGhlciB7IyBibG9ja3N9fSBkZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgY291bnQ6IGJsb2Nrc1RvUmVtb3ZlLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkPXtibG9ja3NUb1JlbW92ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VbmRvQ2xpY2s9eyhibG9ja3NUb1JlbW92ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVW5kb0NsaWNrKGJsb2Nrc1RvUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4gIWJsb2NrS2V5cy5pbmNsdWRlcyhjLmtleSkpIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW2hhbmRsZVVuZG9DbGljaywgc25hY2tiYXJBcGksIHVwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzID0gKHZpc2libGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvU2hvdyA9IHN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMudmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBibG9ja3NUb1Nob3cgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvRGVsZXRlID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRlbGV0ZUJsb2NrcyhcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tzVG9EZWxldGUubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmtleTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZE5ld0Jsb2NrID0gKHR5cGU6IEJsb2NrVHlwZSwgYmVmb3JlSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB1dWlkKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZSh0eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHt0eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzIDwgbWF4VmlzaWJsZUJsb2NrcyA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmRlZmF1bHRWYWx1ZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5lbnRyaWVzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBbZmllbGQsIHsgZGVmYXVsdFZhbHVlIH1dKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRlZmF1bHRWYWx1ZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzID0gWy4uLnN0YXRlLmJsb2Nrc107XG5cbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3Muc3BsaWNlKGJlZm9yZUluZGV4LCAwLCBuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3MucHVzaChuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrczogbmV3QmxvY2tzLFxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVVcGRhdGVTdWJCbG9ja3NGbiA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChibG9ja0tleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVN1YkJsb2Nrc0ZuOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjx1bmtub3duPj4gPSAoc2V0U3RhdGVBY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgcHJvcHM6IHJlc29sdmVOZXdTdGF0ZSh7IHByZXZTdGF0ZTogYy5wcm9wcywgc2V0U3RhdGVBY3Rpb24gfSkgfSA6IGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1YkJsb2Nrc0ZuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgc2NvcGUgfSA9IHVzZUNvbnRlbnRTY29wZSgpO1xuICAgICAgICAgICAgY29uc3QgeyBpc0Jsb2NrU3VwcG9ydGVkIH0gPSB1c2VCbG9ja3NDb25maWcoKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCbG9ja1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmlsdGVyKChbLCBibG9ja10pID0+IGlzQmxvY2tTdXBwb3J0ZWQoYmxvY2ssIHNjb3BlKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3Njb3BlLCBpc0Jsb2NrU3VwcG9ydGVkXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgdXBkYXRlQ2xpcGJvYXJkQ29udGVudCwgZ2V0Q2xpcGJvYXJkQ29udGVudCB9ID0gdXNlQmxvY2tDbGlwYm9hcmQoeyBzdXBwb3J0czogT2JqZWN0LnZhbHVlcyhmaWx0ZXJlZFN1cHBvcnRlZEJsb2NrcykgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhc3RlQmxvY2sgPSBhc3luYyAoaW5zZXJ0QXQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ2V0Q2xpcGJvYXJkQ29udGVudCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5jYW5QYXN0ZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IocmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb250ZW50IH0gPSByZXNwb25zZTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA9IGNvbnRlbnQuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5BZGRWaXNpYmxlQmxvY2sgPSBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzICsgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA8PSBtYXhWaXNpYmxlQmxvY2tzIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdCbG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBjb250ZW50Lm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRm9yQmxvY2soYmxvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHR5cGUgZm91bmQgZm9yIGJsb2NrIFwiJHtibG9jay5uYW1lfVwiYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB1dWlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2FuQWRkVmlzaWJsZUJsb2NrID8gYmxvY2sudmlzaWJsZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihibG9jay5hZGRpdGlvbmFsRmllbGRzIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IFsuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKDAsIGluc2VydEF0KSwgLi4ubmV3QmxvY2tzLCAuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKGluc2VydEF0KV0ubWFwKChibG9jaykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBZGRCbG9ja0NsaWNrID0gKGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKHRydWUpO1xuICAgICAgICAgICAgICAgIHNldEJlZm9yZUluZGV4KGJlZm9yZUluZGV4KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNsb3NlQWRkQmxvY2tEcmF3ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVG9nZ2xlU2VsZWN0QWxsID0gKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5ibG9jaywgc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0QmxvY2sgPSAoY3VycmVudEJsb2NrOiBCbG9ja3NCbG9ja0l0ZW0sIHNlbGVjdDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkOiBibG9jayA9PT0gY3VycmVudEJsb2NrID8gc2VsZWN0IDogYmxvY2suc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvQ29weSA9IHN0YXRlLmJsb2Nrc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4gYmxvY2suc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0ludGVyZmFjZSA9IGJsb2NrRm9yVHlwZShibG9jay50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9ja0ludGVyZmFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtibG9jay50eXBlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrSW50ZXJmYWNlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogYmxvY2sucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgZmllbGQpID0+ICh7IC4uLmZpZWxkcywgW2ZpZWxkXTogYmxvY2tbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KGJsb2Nrc1RvQ29weSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKS5sZW5ndGg7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFN0YWNrU3dpdGNoIGRpc2FibGVGb3JjZVByb21wdFJvdXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoc3RhY2tBcGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50UGFwZXIgZGlzYWJsZVBhZGRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0QWxsRnJvbUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkQ291bnQgPT09IHN0YXRlLmJsb2Nrcy5sZW5ndGggJiYgc2VsZWN0ZWRDb3VudCA+IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtzZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3RlZENvdW50ICE9PSBzdGF0ZS5ibG9ja3MubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRvZ2dsZVNlbGVjdEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LnNlbGVjdEFsbFwiIGRlZmF1bHRNZXNzYWdlPVwiU2VsZWN0IGFsbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LyogRG8gbm90IHNob3cgdG9nZ2xlIHZpc2liaWxpdHkgb2YgYWxsIHNlbGVjdGVkIGJsb2NrcyBidXR0b25zIHdoZW4gbWF4VmlzaWJsZUJsb2NrcyBpcyBzZXQgKi99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFtYXhWaXNpYmxlQmxvY2tzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxWaXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1ha2UgdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8SW52aXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uaW52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIGludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8RGVsZXRlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlQWxsU2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5kZWxldGVcIiBkZWZhdWx0TWVzc2FnZT1cIkRlbGV0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PENvcHkgLz59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5U2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5jb3B5XCIgZGVmYXVsdE1lc3NhZ2U9XCJDb3B5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbSBpY29uPXs8UGFzdGUgLz59IG9uQ2xpY2s9eygpID0+IHBhc3RlQmxvY2soMCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5wYXN0ZVwiIGRlZmF1bHRNZXNzYWdlPVwiUGFzdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNNZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubWFwKChkYXRhLCBibG9ja0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGRhdGEudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIW1heFZpc2libGVCbG9ja3MgJiYgdG90YWxWaXNpYmxlQmxvY2tzID49IG1heFZpc2libGVCbG9ja3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhblRvZ2dsZVZpc2liaWxpdHkgPSBpc01heFZpc2libGVCbG9ja3NSZWFjaGVkID8gZGF0YS52aXNpYmxlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCAmJiAhZGF0YS52aXNpYmxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SG92ZXJQcmV2aWV3Q29tcG9uZW50IGtleT17ZGF0YS5rZXl9IGNvbXBvbmVudFNsdWc9e2Ake2RhdGEua2V5fS9ibG9ja3NgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2RhdGEua2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQcmV2aWV3Q29udGVudD17KCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUHJldmlld0NvbnRlbnQgYmxvY2s9e2Jsb2NrfSBzdGF0ZT17ZGF0YS5wcm9wc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2Jsb2NrSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29udGVudENsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJibG9ja3NcIiwgZGF0YS5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoW2RhdGEua2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVCbG9jaz17KGZyb20sIHRvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrVG9Nb3ZlID0gYmxvY2tzLnNwbGljZShmcm9tLCAxKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3Muc3BsaWNlKHRvLCAwLCBibG9ja1RvTW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5QnV0dG9uPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TWF4QmxvY2tzQWxsb3dlZE1lc3NhZ2UgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmJsb2NrLm1heFZpc2libGVCbG9ja3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWF4LiB2aXNpYmxlIGJsb2NrcyBhbGxvd2VkOiB7bWF4VmlzaWJsZUJsb2Nrc31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBtYXhWaXNpYmxlQmxvY2tzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGNvbXBvbmVudD1cInNwYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNhblRvZ2dsZVZpc2liaWxpdHkgJiYgdG9nZ2xlVmlzaWJsZShkYXRhLmtleSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5Ub2dnbGVWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF0YS52aXNpYmxlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWaXNpYmxlIGNvbG9yPVwic3VjY2Vzc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnZpc2libGUgY29sb3I9XCJhY3Rpb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9e2hhbmRsZUFkZEJsb2NrQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29weUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2RhdGEudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNsaXBib2FyZENvbnRlbnQoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYmxvY2submFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZGF0YS52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogZGF0YS5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRhdGFbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblBhc3RlQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlQmxvY2soYmxvY2tJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZD17ZGF0YS5zZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RlZENsaWNrPXsoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEJsb2NrKGRhdGEsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZEZuPXsoKSA9PiBibG9jay5pc1ZhbGlkKGRhdGEucHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluPXtkYXRhLnNsaWRlSW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVCb3R0b21JbnNlcnRCZXR3ZWVuQnV0dG9uPXtibG9ja0luZGV4ID49IHN0YXRlLmJsb2Nrcy5sZW5ndGggLSAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWVudUl0ZW1zPXsob25NZW51Q2xvc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZGl0aW9uYWxJdGVtQ29udGV4dE1lbnVJdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPXtkYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHVwZGF0ZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldmlvdXNTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZpb3VzU3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmtleSA9PT0gZGF0YS5rZXkgPyB1cGRhdGVkSXRlbSA6IGJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxDb250ZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCA/IDxBZGRpdGlvbmFsSXRlbUNvbnRlbnQgaXRlbT17ZGF0YX0gLz4gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hvdmVyUHJldmlld0NvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFkZEJsb2NrQ2xpY2soKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhcmdlQWRkQnV0dG9uSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJY29uPXs8QWRkIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWRkTmV3QmxvY2tcIiBkZWZhdWx0TWVzc2FnZT1cIkFkZCBibG9ja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRQYXBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZEJsb2NrRHJhd2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXtzaG93QWRkQmxvY2tEcmF3ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzPXtmaWx0ZXJlZFN1cHBvcnRlZEJsb2Nrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9eyh0eXBlLCBhZGRBbmRFZGl0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYWRkTmV3QmxvY2sodHlwZSwgYmVmb3JlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEFuZEVkaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tQYWdlIG5hbWU9XCJibG9ja3NcIiB0aXRsZT1cIkJsb2NrIGJlYXJiZWl0ZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGlkKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBzdGF0ZS5ibG9ja3MuZmluZCgoYykgPT4gYy5rZXkgPT09IGlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG1hdGNoLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJtYWluXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZVRpdGxlIHRpdGxlPXtibG9jay5kaXNwbGF5TmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmxvY2suQWRtaW5Db21wb25lbnQgc3RhdGU9e21hdGNoLnByb3BzfSB1cGRhdGVTdGF0ZT17Y3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4oaWQpfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrUGFnZVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2Fubm90UGFzdGVCbG9ja0RpYWxvZyBvcGVuIG9uQ2xvc2U9eygpID0+IHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcih1bmRlZmluZWQpfSBlcnJvcj17Y2Fubm90UGFzdGVCbG9ja0Vycm9yfSAvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld0NvbnRlbnQ6IChzdGF0ZSwgY3R4KSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCA9MCB7Tm8gYmxvY2tzfSBvbmUgeyMgYmxvY2t9IG90aGVyIHsjIGJsb2Nrc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBzdGF0ZS5ibG9ja3MubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPFByZXZpZXdDb250ZW50W10+KChwcmV2LCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUobmV4dC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFByZXZpZXdDb250ZW50ID0gYmxvY2sucHJldmlld0NvbnRlbnQobmV4dC5wcm9wcywgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5uZXh0UHJldmlld0NvbnRlbnRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZURlcGVuZGVuY3lQYXRoOiAoc3RhdGUsIGpzb25QYXRoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIS9eYmxvY2tzLlxcZCsucHJvcHMvLnRlc3QoanNvblBhdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEludmFsaWQganNvblBhdGhcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdGhBcnIgPSBqc29uUGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIocGF0aEFyclsxXSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja0l0ZW0gPSBzdGF0ZS5ibG9ja3NbbnVtXTtcblxuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoYmxvY2tJdGVtLnR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoYmxvY2sgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3NCbG9jazogQmxvY2sgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gYmxvY2sucmVzb2x2ZURlcGVuZGVuY3lQYXRoKGJsb2NrSXRlbS5wcm9wcywgcGF0aEFyci5zbGljZSgzKS5qb2luKFwiLlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gYCR7YmxvY2tJdGVtLmtleX0vYmxvY2tzLyR7Y2hpbGRQYXRofWA7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dHJhY3RUZXh0Q29udGVudHM6IChzdGF0ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPSBvcHRpb25zPy5pbmNsdWRlSW52aXNpYmxlQ29udGVudCA/PyBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChjb250ZW50LCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSAmJiAhaW5jbHVkZUludmlzaWJsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5jb250ZW50LCAuLi4oYmxvY2suZXh0cmFjdFRleHRDb250ZW50cz8uKGNoaWxkLnByb3BzLCBvcHRpb25zKSA/PyBbXSldO1xuICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGVDb250ZW50OiBhc3luYyAoc3RhdGUsIHRyYW5zbGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZEJsb2NrcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5tYXAoYXN5bmMgKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQcm9wcyA9IGJsb2NrLnRyYW5zbGF0ZUNvbnRlbnQgPyBhd2FpdCBibG9jay50cmFuc2xhdGVDb250ZW50KGNoaWxkLnByb3BzLCB0cmFuc2xhdGUpIDogY2hpbGQucHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmNoaWxkLCBwcm9wczogdHJhbnNsYXRlZFByb3BzIH07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGJsb2NrczogdHJhbnNsYXRlZEJsb2NrcyB9O1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlKEJsb2Nrc0Jsb2NrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQmxvY2tzQmxvY2s7XG59XG5cbmNvbnN0IEJsb2NrTGlzdEhlYWRlciA9IHN0eWxlZChcImRpdlwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygwLCAxKX07XG5gO1xuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEycHggMDtcbmA7XG5cbmNvbnN0IFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWwgPSBzdHlsZWQoRm9ybUNvbnRyb2xMYWJlbClgXG4gICAgcGFkZGluZzogMTVweCAxMHB4IDE1cHggN3B4O1xuYDtcblxuY29uc3QgTGFyZ2VBZGRCdXR0b25Db250ZW50ID0gc3R5bGVkKFwic3BhblwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiA0cHggMDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uSWNvbiA9IHN0eWxlZChBZGQpYFxuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG5gO1xuXG5jb25zdCBTZXBhcmF0b3IgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsocHJvcHMpID0+IHByb3BzLnRoZW1lLnBhbGV0dGUuZ3JleVtcIjEwMFwiXX07XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgbWFyZ2luLWxlZnQ6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygxKX07XG4gICAgbWFyZ2luLXJpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuYDtcbiJdfQ== */",
|
|
1030
|
+
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
1031
|
+
});
|
|
1032
|
+
var LargeAddButtonContent = /*#__PURE__*/styled("span", process.env.NODE_ENV === "production" ? {
|
|
1033
|
+
target: "e15z4m3g2"
|
|
1034
|
+
} : {
|
|
1035
|
+
target: "e15z4m3g2",
|
|
1036
|
+
label: "LargeAddButtonContent"
|
|
1037
|
+
})(process.env.NODE_ENV === "production" ? {
|
|
1038
|
+
name: "3g6o2",
|
|
1039
|
+
styles: "display:flex;flex-direction:column;align-items:center;padding:4px 0"
|
|
1040
|
+
} : {
|
|
1041
|
+
name: "3g6o2",
|
|
1042
|
+
styles: "display:flex;flex-direction:column;align-items:center;padding:4px 0/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzOEI0QyIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAZGV4dGluaXR5L2FkbWluXCI7XG5pbXBvcnQgeyBBZGQsIENvcHksIERlbGV0ZSwgSW52aXNpYmxlLCBQYXN0ZSwgVmlzaWJsZSB9IGZyb20gXCJAZGV4dGluaXR5L2FkbWluLWljb25zXCI7XG5pbXBvcnQgeyBCb3gsIENoZWNrYm94LCBGb3JtQ29udHJvbExhYmVsLCBJY29uQnV0dG9uLCBUeXBvZ3JhcGh5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsL3N0eWxlc1wiO1xuaW1wb3J0IHtcbiAgICB0eXBlIENoYW5nZUV2ZW50LFxuICAgIHR5cGUgRGlzcGF0Y2gsXG4gICAgdHlwZSBGdW5jdGlvbkNvbXBvbmVudCxcbiAgICB0eXBlIFJlYWN0Tm9kZSxcbiAgICB0eXBlIFNldFN0YXRlQWN0aW9uLFxuICAgIHVzZUNhbGxiYWNrLFxuICAgIHVzZUVmZmVjdCxcbiAgICB1c2VNZW1vLFxuICAgIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZvcm1hdHRlZE1lc3NhZ2UsIHR5cGUgTWVzc2FnZURlc2NyaXB0b3IgfSBmcm9tIFwicmVhY3QtaW50bFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbmltcG9ydCB7IHVzZUNvbnRlbnRTY29wZSB9IGZyb20gXCIuLi8uLi9jb250ZW50U2NvcGUvUHJvdmlkZXJcIjtcbmltcG9ydCB7IENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgfSBmcm9tIFwiLi4vY2xpcGJvYXJkL0Nhbm5vdFBhc3RlQmxvY2tEaWFsb2dcIjtcbmltcG9ydCB7IHVzZUJsb2NrQ2xpcGJvYXJkIH0gZnJvbSBcIi4uL2NsaXBib2FyZC91c2VCbG9ja0NsaXBib2FyZFwiO1xuaW1wb3J0IHsgQWRkQmxvY2tEcmF3ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkZEJsb2NrRHJhd2VyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUZvb3RlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXJcIjtcbmltcG9ydCB7IEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlclwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvbiB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvblwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXJcIjtcbmltcG9ydCB7IEJsb2NrUHJldmlld0NvbnRlbnQgfSBmcm9tIFwiLi4vY29tbW9uL2Jsb2NrUm93L0Jsb2NrUHJldmlld0NvbnRlbnRcIjtcbmltcG9ydCB7IEJsb2NrUm93IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1Jvd1wiO1xuaW1wb3J0IHsgdXNlQmxvY2tzQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9CbG9ja3NDb25maWdDb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVCbG9ja1NrZWxldG9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvY3JlYXRlQmxvY2tTa2VsZXRvblwiO1xuaW1wb3J0IHsgZGVkdXBsaWNhdGVCbG9ja0RlcGVuZGVuY2llcyB9IGZyb20gXCIuLi9oZWxwZXJzL2RlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IEhvdmVyUHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvSG92ZXJQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgeyBTZWxlY3RQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSBcIi4uL2lmcmFtZWJyaWRnZS9TZWxlY3RQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEJsb2NrRGVwZW5kZW5jeSwgQmxvY2tJbnRlcmZhY2UsIEJsb2NrU3RhdGUsIFByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlTmV3U3RhdGUgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IHBhcmFsbGVsQXN5bmNFdmVyeSB9IGZyb20gXCIuLi91dGlscy9wYXJhbGxlbEFzeW5jRXZlcnlcIjtcblxuLy8gVXNpbmcge30gaW5zdGVhZCBvZiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gYmVjYXVzZSBuZXZlciBhbmQgdW5rbm93biBhcmUgaW5jb21wYXRpYmxlLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxudHlwZSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMgPSB7fTtcblxudHlwZSBCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSB7XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICBrZXk6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBwcm9wczogQmxvY2tTdGF0ZTxUPjtcbiAgICBzbGlkZUluOiBib29sZWFuO1xufSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzO1xuXG50eXBlIFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSBCbG9ja3NCbG9ja0l0ZW08VCwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ICYgeyByZW1vdmVkQXQ6IG51bWJlciB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQXJyYXk8XG4gICAgICAgIHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgcHJvcHM6IGFueTtcbiAgICAgICAgfSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzXG4gICAgPjtcbn1cblxudHlwZSBCbG9ja1R5cGUgPSBzdHJpbmc7XG5cbmludGVyZmFjZSBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8VmFsdWUgPSB1bmtub3duPiB7XG4gICAgZGVmYXVsdFZhbHVlOiBWYWx1ZTtcbn1cblxuaW50ZXJmYWNlIENyZWF0ZUJsb2Nrc0Jsb2NrT3B0aW9uczxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRpc3BsYXlOYW1lPzogUmVhY3ROb2RlO1xuICAgIHN1cHBvcnRlZEJsb2NrczogUmVjb3JkPEJsb2NrVHlwZSwgQmxvY2tJbnRlcmZhY2U+O1xuICAgIG1heFZpc2libGVCbG9ja3M/OiBudW1iZXI7XG4gICAgYWRkaXRpb25hbEl0ZW1GaWVsZHM/OiB7XG4gICAgICAgIFtLZXkgaW4ga2V5b2YgQWRkaXRpb25hbEl0ZW1GaWVsZHNdOiBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8QWRkaXRpb25hbEl0ZW1GaWVsZHNbS2V5XT47XG4gICAgfTtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXM/OiBGdW5jdGlvbkNvbXBvbmVudDx7XG4gICAgICAgIGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+O1xuICAgICAgICBvbkNoYW5nZTogKGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+KSA9PiB2b2lkO1xuICAgICAgICBvbk1lbnVDbG9zZTogKCkgPT4gdm9pZDtcbiAgICB9PjtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQ/OiBGdW5jdGlvbkNvbXBvbmVudDx7IGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+IH0+O1xuICAgIHRhZ3M/OiBBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbG9ja3NCbG9jazxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPihcbiAgICB7XG4gICAgICAgIHN1cHBvcnRlZEJsb2NrcyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGlzcGxheU5hbWUgPSA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5ibG9ja3MubmFtZVwiIGRlZmF1bHRNZXNzYWdlPVwiQmxvY2tzXCIgLz4sXG4gICAgICAgIG1heFZpc2libGVCbG9ja3MsXG4gICAgICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCxcbiAgICAgICAgdGFncyxcbiAgICB9OiBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgIG92ZXJyaWRlPzogKFxuICAgICAgICBibG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgICAgICBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgICAgID4sXG4gICAgKSA9PiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4sXG4pOiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4ge1xuICAgIGlmIChPYmplY3Qua2V5cyhzdXBwb3J0ZWRCbG9ja3MpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3MgYmxvY2sgd2l0aCBubyBzdXBwb3J0ZWQgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSBzcGVjaWZ5IGF0IGxlYXN0IHR3byBzdXBwb3J0ZWQgYmxvY2tzLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggYSBzaW5nbGUgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB1c2UgYSBsaXN0IGJsb2NrIChjcmVhdGVMaXN0QmxvY2soKSkgaW5zdGVhZC5cIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmxvY2tGb3JUeXBlKHR5cGU6IHN0cmluZyk6IEJsb2NrSW50ZXJmYWNlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3NbdHlwZV0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0eXBlRm9yQmxvY2sodGFyZ2V0QmxvY2s6IFBpY2s8QmxvY2tJbnRlcmZhY2UsIFwibmFtZVwiPik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3VwcG9ydGVkQmxvY2tzKS5maW5kKChbLCBibG9ja10pID0+IGJsb2NrLm5hbWUgPT09IHRhcmdldEJsb2NrLm5hbWUpPy5bMF0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFRhZ3MgPSBPYmplY3QudmFsdWVzKHN1cHBvcnRlZEJsb2NrcykucmVkdWNlPEFycmF5PE1lc3NhZ2VEZXNjcmlwdG9yIHwgc3RyaW5nPj4oKGFjYywgYmxvY2spID0+IHtcbiAgICAgICAgaWYgKGJsb2NrLnRhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWNjLCAuLi5ibG9jay50YWdzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IEJsb2Nrc0Jsb2NrOiBCbG9ja0ludGVyZmFjZTxcbiAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz5cbiAgICA+ID0ge1xuICAgICAgICAuLi5jcmVhdGVCbG9ja1NrZWxldG9uKCksXG5cbiAgICAgICAgbmFtZSxcblxuICAgICAgICBkaXNwbGF5TmFtZSxcblxuICAgICAgICB0YWdzOiB0YWdzID8gdGFncyA6IGNoaWxkVGFncyxcblxuICAgICAgICBkZWZhdWx0VmFsdWVzOiAoKSA9PiAoeyBibG9ja3M6IFtdIH0pLFxuXG4gICAgICAgIGlucHV0MlN0YXRlOiAoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGlucHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gYmxvY2sgdHlwZSBcIiR7Y2hpbGQudHlwZX1cImApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suaW5wdXQyU3RhdGUoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSwge30pLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2NrcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RhdGUyT3V0cHV0OiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3MubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNoaWxkLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLnN0YXRlMk91dHB1dChjaGlsZC5wcm9wcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICBvdXRwdXQyU3RhdGU6IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICBibG9ja3M6IFtdLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYXdhaXQgYmxvY2sub3V0cHV0MlN0YXRlKGNoaWxkLnByb3BzLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlUHJldmlld1N0YXRlOiAoc3RhdGUsIHByZXZpZXdDdHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogcHJldmlld0N0eC5wYXJlbnRVcmwsXG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY2hpbGQpID0+IChwcmV2aWV3Q3R4LnNob3dWaXNpYmxlT25seSA/IGNoaWxkLnZpc2libGUgOiB0cnVlKSkgLy8gZGVwZW5kaW5nIG9uIGNvbnRleHQgc2hvdyBhbGwgYmxvY2tzIG9yIG9ubHkgdmlzaWJsZSBibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQWRtaW5Sb3V0ZSA9IGAke3ByZXZpZXdDdHgucGFyZW50VXJsU3ViUm91dGUgPz8gcHJldmlld0N0eC5wYXJlbnRVcmx9LyR7Y2hpbGQua2V5fS9ibG9ja3NgO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNoaWxkLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogYmxvY2tBZG1pblJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5jcmVhdGVQcmV2aWV3U3RhdGUoY2hpbGQucHJvcHMsIHsgLi4ucHJldmlld0N0eCwgcGFyZW50VXJsU3ViUm91dGU6IHVuZGVmaW5lZCwgcGFyZW50VXJsOiBibG9ja0FkbWluUm91dGUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBhZG1pbk1ldGE6IHsgcm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBpc1ZhbGlkOiBhc3luYyAoc3RhdGUpID0+XG4gICAgICAgICAgICBwYXJhbGxlbEFzeW5jRXZlcnkoc3RhdGUuYmxvY2tzLCBhc3luYyAoYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGMudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Yy50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmlzVmFsaWQoYy5wcm9wcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgY2hpbGRCbG9ja0NvdW50OiAoc3RhdGUpID0+IHN0YXRlLmJsb2Nrcy5sZW5ndGgsXG5cbiAgICAgICAgYW5jaG9yczogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxzdHJpbmdbXT4oKGFuY2hvcnMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYW5jaG9ycywgLi4uKGJsb2NrLmFuY2hvcnM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcblxuICAgICAgICBkZXBlbmRlbmNpZXM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkRGVwZW5kZW5jaWVzID0gc3RhdGUuYmxvY2tzLnJlZHVjZTxCbG9ja0RlcGVuZGVuY3lbXT4oKGRlcGVuZGVuY2llcywgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5kZXBlbmRlbmNpZXMsIC4uLihibG9jay5kZXBlbmRlbmNpZXM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMobWVyZ2VkRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQ6IChvdXRwdXQsIHJlcGxhY2VtZW50cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3T3V0cHV0OiBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IGJsb2NrczogW10gfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXdPdXRwdXQuYmxvY2tzLnB1c2goeyAuLi5jaGlsZCwgcHJvcHM6IGJsb2NrLnJlcGxhY2VEZXBlbmRlbmNpZXNJbk91dHB1dChjaGlsZC5wcm9wcywgcmVwbGFjZW1lbnRzKSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ld091dHB1dDtcbiAgICAgICAgfSxcblxuICAgICAgICBkZWZpbmVzT3duUGFkZGluZzogdHJ1ZSxcblxuICAgICAgICBBZG1pbkNvbXBvbmVudDogKHsgc3RhdGUsIHVwZGF0ZVN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVZpc2libGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYykgPT4gKGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgdmlzaWJsZTogIWMudmlzaWJsZSB9IDogYykpLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgW3Nob3dBZGRCbG9ja0RyYXdlciwgc2V0U2hvd0FkZEJsb2NrRHJhd2VyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IFtiZWZvcmVJbmRleCwgc2V0QmVmb3JlSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPigpO1xuICAgICAgICAgICAgY29uc3QgW2Nhbm5vdFBhc3RlQmxvY2tFcnJvciwgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yXSA9IHVzZVN0YXRlPFJlYWN0Tm9kZT4oKTtcblxuICAgICAgICAgICAgY29uc3Qgc25hY2tiYXJBcGkgPSB1c2VTbmFja2JhckFwaSgpO1xuXG4gICAgICAgICAgICBjb25zdCB0b3RhbFZpc2libGVCbG9ja3MgPSBzdGF0ZS5ibG9ja3MuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuXG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ibG9ja3Muc29tZSgoYmxvY2spID0+IGJsb2NrLnNsaWRlSW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRIYW5kbGUgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoeyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoeyAuLi5ibG9jaywgc2xpZGVJbjogZmFsc2UgfSkpIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3N0YXRlLmJsb2NrcywgdXBkYXRlU3RhdGVdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVW5kb0NsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKHJlbW92ZWRCbG9ja3M6IFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZEJsb2Nrcz8uZm9yRWFjaCgocmVtb3ZlZEJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkQXQgfSA9IHJlbW92ZWRCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jazogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IC4uLnJlbW92ZWRCbG9jayB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBibG9jay5yZW1vdmVkQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZShyZW1vdmVkQXQsIDAsIGJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrcyB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVCbG9ja3MgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXlzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1JlbW92ZSA9IHByZXZTdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHJlbW92ZWRBdDogaW5kZXggfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9ja0tleXMuaW5jbHVkZXMoYmxvY2sua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc25hY2tiYXJBcGkuc2hvd1NuYWNrYmFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVbmRvU25hY2tiYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYmxvY2tEZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCBvbmUge2Jsb2NrfSBvdGhlciB7IyBibG9ja3N9fSBkZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgY291bnQ6IGJsb2Nrc1RvUmVtb3ZlLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkPXtibG9ja3NUb1JlbW92ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VbmRvQ2xpY2s9eyhibG9ja3NUb1JlbW92ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVW5kb0NsaWNrKGJsb2Nrc1RvUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4gIWJsb2NrS2V5cy5pbmNsdWRlcyhjLmtleSkpIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW2hhbmRsZVVuZG9DbGljaywgc25hY2tiYXJBcGksIHVwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzID0gKHZpc2libGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvU2hvdyA9IHN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMudmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBibG9ja3NUb1Nob3cgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvRGVsZXRlID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRlbGV0ZUJsb2NrcyhcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tzVG9EZWxldGUubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmtleTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZE5ld0Jsb2NrID0gKHR5cGU6IEJsb2NrVHlwZSwgYmVmb3JlSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB1dWlkKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZSh0eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHt0eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzIDwgbWF4VmlzaWJsZUJsb2NrcyA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmRlZmF1bHRWYWx1ZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5lbnRyaWVzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBbZmllbGQsIHsgZGVmYXVsdFZhbHVlIH1dKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRlZmF1bHRWYWx1ZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzID0gWy4uLnN0YXRlLmJsb2Nrc107XG5cbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3Muc3BsaWNlKGJlZm9yZUluZGV4LCAwLCBuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3MucHVzaChuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrczogbmV3QmxvY2tzLFxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVVcGRhdGVTdWJCbG9ja3NGbiA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChibG9ja0tleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVN1YkJsb2Nrc0ZuOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjx1bmtub3duPj4gPSAoc2V0U3RhdGVBY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgcHJvcHM6IHJlc29sdmVOZXdTdGF0ZSh7IHByZXZTdGF0ZTogYy5wcm9wcywgc2V0U3RhdGVBY3Rpb24gfSkgfSA6IGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1YkJsb2Nrc0ZuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgc2NvcGUgfSA9IHVzZUNvbnRlbnRTY29wZSgpO1xuICAgICAgICAgICAgY29uc3QgeyBpc0Jsb2NrU3VwcG9ydGVkIH0gPSB1c2VCbG9ja3NDb25maWcoKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCbG9ja1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmlsdGVyKChbLCBibG9ja10pID0+IGlzQmxvY2tTdXBwb3J0ZWQoYmxvY2ssIHNjb3BlKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3Njb3BlLCBpc0Jsb2NrU3VwcG9ydGVkXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgdXBkYXRlQ2xpcGJvYXJkQ29udGVudCwgZ2V0Q2xpcGJvYXJkQ29udGVudCB9ID0gdXNlQmxvY2tDbGlwYm9hcmQoeyBzdXBwb3J0czogT2JqZWN0LnZhbHVlcyhmaWx0ZXJlZFN1cHBvcnRlZEJsb2NrcykgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhc3RlQmxvY2sgPSBhc3luYyAoaW5zZXJ0QXQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ2V0Q2xpcGJvYXJkQ29udGVudCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5jYW5QYXN0ZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IocmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb250ZW50IH0gPSByZXNwb25zZTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA9IGNvbnRlbnQuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5BZGRWaXNpYmxlQmxvY2sgPSBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzICsgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA8PSBtYXhWaXNpYmxlQmxvY2tzIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdCbG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBjb250ZW50Lm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRm9yQmxvY2soYmxvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHR5cGUgZm91bmQgZm9yIGJsb2NrIFwiJHtibG9jay5uYW1lfVwiYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB1dWlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2FuQWRkVmlzaWJsZUJsb2NrID8gYmxvY2sudmlzaWJsZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihibG9jay5hZGRpdGlvbmFsRmllbGRzIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IFsuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKDAsIGluc2VydEF0KSwgLi4ubmV3QmxvY2tzLCAuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKGluc2VydEF0KV0ubWFwKChibG9jaykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBZGRCbG9ja0NsaWNrID0gKGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKHRydWUpO1xuICAgICAgICAgICAgICAgIHNldEJlZm9yZUluZGV4KGJlZm9yZUluZGV4KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNsb3NlQWRkQmxvY2tEcmF3ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVG9nZ2xlU2VsZWN0QWxsID0gKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5ibG9jaywgc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0QmxvY2sgPSAoY3VycmVudEJsb2NrOiBCbG9ja3NCbG9ja0l0ZW0sIHNlbGVjdDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkOiBibG9jayA9PT0gY3VycmVudEJsb2NrID8gc2VsZWN0IDogYmxvY2suc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvQ29weSA9IHN0YXRlLmJsb2Nrc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4gYmxvY2suc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0ludGVyZmFjZSA9IGJsb2NrRm9yVHlwZShibG9jay50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9ja0ludGVyZmFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtibG9jay50eXBlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrSW50ZXJmYWNlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogYmxvY2sucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgZmllbGQpID0+ICh7IC4uLmZpZWxkcywgW2ZpZWxkXTogYmxvY2tbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KGJsb2Nrc1RvQ29weSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKS5sZW5ndGg7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFN0YWNrU3dpdGNoIGRpc2FibGVGb3JjZVByb21wdFJvdXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoc3RhY2tBcGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50UGFwZXIgZGlzYWJsZVBhZGRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0QWxsRnJvbUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkQ291bnQgPT09IHN0YXRlLmJsb2Nrcy5sZW5ndGggJiYgc2VsZWN0ZWRDb3VudCA+IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtzZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3RlZENvdW50ICE9PSBzdGF0ZS5ibG9ja3MubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRvZ2dsZVNlbGVjdEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LnNlbGVjdEFsbFwiIGRlZmF1bHRNZXNzYWdlPVwiU2VsZWN0IGFsbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LyogRG8gbm90IHNob3cgdG9nZ2xlIHZpc2liaWxpdHkgb2YgYWxsIHNlbGVjdGVkIGJsb2NrcyBidXR0b25zIHdoZW4gbWF4VmlzaWJsZUJsb2NrcyBpcyBzZXQgKi99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFtYXhWaXNpYmxlQmxvY2tzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxWaXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1ha2UgdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8SW52aXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uaW52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIGludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8RGVsZXRlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlQWxsU2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5kZWxldGVcIiBkZWZhdWx0TWVzc2FnZT1cIkRlbGV0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PENvcHkgLz59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5U2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5jb3B5XCIgZGVmYXVsdE1lc3NhZ2U9XCJDb3B5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbSBpY29uPXs8UGFzdGUgLz59IG9uQ2xpY2s9eygpID0+IHBhc3RlQmxvY2soMCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5wYXN0ZVwiIGRlZmF1bHRNZXNzYWdlPVwiUGFzdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNNZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubWFwKChkYXRhLCBibG9ja0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGRhdGEudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIW1heFZpc2libGVCbG9ja3MgJiYgdG90YWxWaXNpYmxlQmxvY2tzID49IG1heFZpc2libGVCbG9ja3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhblRvZ2dsZVZpc2liaWxpdHkgPSBpc01heFZpc2libGVCbG9ja3NSZWFjaGVkID8gZGF0YS52aXNpYmxlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCAmJiAhZGF0YS52aXNpYmxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SG92ZXJQcmV2aWV3Q29tcG9uZW50IGtleT17ZGF0YS5rZXl9IGNvbXBvbmVudFNsdWc9e2Ake2RhdGEua2V5fS9ibG9ja3NgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2RhdGEua2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQcmV2aWV3Q29udGVudD17KCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUHJldmlld0NvbnRlbnQgYmxvY2s9e2Jsb2NrfSBzdGF0ZT17ZGF0YS5wcm9wc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2Jsb2NrSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29udGVudENsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJibG9ja3NcIiwgZGF0YS5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoW2RhdGEua2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVCbG9jaz17KGZyb20sIHRvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrVG9Nb3ZlID0gYmxvY2tzLnNwbGljZShmcm9tLCAxKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3Muc3BsaWNlKHRvLCAwLCBibG9ja1RvTW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5QnV0dG9uPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TWF4QmxvY2tzQWxsb3dlZE1lc3NhZ2UgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmJsb2NrLm1heFZpc2libGVCbG9ja3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWF4LiB2aXNpYmxlIGJsb2NrcyBhbGxvd2VkOiB7bWF4VmlzaWJsZUJsb2Nrc31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBtYXhWaXNpYmxlQmxvY2tzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGNvbXBvbmVudD1cInNwYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNhblRvZ2dsZVZpc2liaWxpdHkgJiYgdG9nZ2xlVmlzaWJsZShkYXRhLmtleSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5Ub2dnbGVWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF0YS52aXNpYmxlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWaXNpYmxlIGNvbG9yPVwic3VjY2Vzc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnZpc2libGUgY29sb3I9XCJhY3Rpb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9e2hhbmRsZUFkZEJsb2NrQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29weUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2RhdGEudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNsaXBib2FyZENvbnRlbnQoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYmxvY2submFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZGF0YS52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogZGF0YS5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRhdGFbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblBhc3RlQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlQmxvY2soYmxvY2tJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZD17ZGF0YS5zZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RlZENsaWNrPXsoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEJsb2NrKGRhdGEsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZEZuPXsoKSA9PiBibG9jay5pc1ZhbGlkKGRhdGEucHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluPXtkYXRhLnNsaWRlSW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVCb3R0b21JbnNlcnRCZXR3ZWVuQnV0dG9uPXtibG9ja0luZGV4ID49IHN0YXRlLmJsb2Nrcy5sZW5ndGggLSAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWVudUl0ZW1zPXsob25NZW51Q2xvc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZGl0aW9uYWxJdGVtQ29udGV4dE1lbnVJdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPXtkYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHVwZGF0ZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldmlvdXNTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZpb3VzU3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmtleSA9PT0gZGF0YS5rZXkgPyB1cGRhdGVkSXRlbSA6IGJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxDb250ZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCA/IDxBZGRpdGlvbmFsSXRlbUNvbnRlbnQgaXRlbT17ZGF0YX0gLz4gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hvdmVyUHJldmlld0NvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFkZEJsb2NrQ2xpY2soKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhcmdlQWRkQnV0dG9uSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJY29uPXs8QWRkIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWRkTmV3QmxvY2tcIiBkZWZhdWx0TWVzc2FnZT1cIkFkZCBibG9ja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRQYXBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZEJsb2NrRHJhd2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXtzaG93QWRkQmxvY2tEcmF3ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzPXtmaWx0ZXJlZFN1cHBvcnRlZEJsb2Nrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9eyh0eXBlLCBhZGRBbmRFZGl0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYWRkTmV3QmxvY2sodHlwZSwgYmVmb3JlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEFuZEVkaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tQYWdlIG5hbWU9XCJibG9ja3NcIiB0aXRsZT1cIkJsb2NrIGJlYXJiZWl0ZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGlkKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBzdGF0ZS5ibG9ja3MuZmluZCgoYykgPT4gYy5rZXkgPT09IGlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG1hdGNoLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJtYWluXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZVRpdGxlIHRpdGxlPXtibG9jay5kaXNwbGF5TmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmxvY2suQWRtaW5Db21wb25lbnQgc3RhdGU9e21hdGNoLnByb3BzfSB1cGRhdGVTdGF0ZT17Y3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4oaWQpfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrUGFnZVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2Fubm90UGFzdGVCbG9ja0RpYWxvZyBvcGVuIG9uQ2xvc2U9eygpID0+IHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcih1bmRlZmluZWQpfSBlcnJvcj17Y2Fubm90UGFzdGVCbG9ja0Vycm9yfSAvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld0NvbnRlbnQ6IChzdGF0ZSwgY3R4KSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCA9MCB7Tm8gYmxvY2tzfSBvbmUgeyMgYmxvY2t9IG90aGVyIHsjIGJsb2Nrc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBzdGF0ZS5ibG9ja3MubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPFByZXZpZXdDb250ZW50W10+KChwcmV2LCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUobmV4dC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFByZXZpZXdDb250ZW50ID0gYmxvY2sucHJldmlld0NvbnRlbnQobmV4dC5wcm9wcywgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5uZXh0UHJldmlld0NvbnRlbnRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZURlcGVuZGVuY3lQYXRoOiAoc3RhdGUsIGpzb25QYXRoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIS9eYmxvY2tzLlxcZCsucHJvcHMvLnRlc3QoanNvblBhdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEludmFsaWQganNvblBhdGhcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdGhBcnIgPSBqc29uUGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIocGF0aEFyclsxXSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja0l0ZW0gPSBzdGF0ZS5ibG9ja3NbbnVtXTtcblxuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoYmxvY2tJdGVtLnR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoYmxvY2sgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3NCbG9jazogQmxvY2sgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gYmxvY2sucmVzb2x2ZURlcGVuZGVuY3lQYXRoKGJsb2NrSXRlbS5wcm9wcywgcGF0aEFyci5zbGljZSgzKS5qb2luKFwiLlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gYCR7YmxvY2tJdGVtLmtleX0vYmxvY2tzLyR7Y2hpbGRQYXRofWA7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dHJhY3RUZXh0Q29udGVudHM6IChzdGF0ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPSBvcHRpb25zPy5pbmNsdWRlSW52aXNpYmxlQ29udGVudCA/PyBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChjb250ZW50LCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSAmJiAhaW5jbHVkZUludmlzaWJsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5jb250ZW50LCAuLi4oYmxvY2suZXh0cmFjdFRleHRDb250ZW50cz8uKGNoaWxkLnByb3BzLCBvcHRpb25zKSA/PyBbXSldO1xuICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGVDb250ZW50OiBhc3luYyAoc3RhdGUsIHRyYW5zbGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZEJsb2NrcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5tYXAoYXN5bmMgKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQcm9wcyA9IGJsb2NrLnRyYW5zbGF0ZUNvbnRlbnQgPyBhd2FpdCBibG9jay50cmFuc2xhdGVDb250ZW50KGNoaWxkLnByb3BzLCB0cmFuc2xhdGUpIDogY2hpbGQucHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmNoaWxkLCBwcm9wczogdHJhbnNsYXRlZFByb3BzIH07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGJsb2NrczogdHJhbnNsYXRlZEJsb2NrcyB9O1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlKEJsb2Nrc0Jsb2NrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQmxvY2tzQmxvY2s7XG59XG5cbmNvbnN0IEJsb2NrTGlzdEhlYWRlciA9IHN0eWxlZChcImRpdlwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygwLCAxKX07XG5gO1xuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEycHggMDtcbmA7XG5cbmNvbnN0IFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWwgPSBzdHlsZWQoRm9ybUNvbnRyb2xMYWJlbClgXG4gICAgcGFkZGluZzogMTVweCAxMHB4IDE1cHggN3B4O1xuYDtcblxuY29uc3QgTGFyZ2VBZGRCdXR0b25Db250ZW50ID0gc3R5bGVkKFwic3BhblwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiA0cHggMDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uSWNvbiA9IHN0eWxlZChBZGQpYFxuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG5gO1xuXG5jb25zdCBTZXBhcmF0b3IgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsocHJvcHMpID0+IHByb3BzLnRoZW1lLnBhbGV0dGUuZ3JleVtcIjEwMFwiXX07XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgbWFyZ2luLWxlZnQ6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygxKX07XG4gICAgbWFyZ2luLXJpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuYDtcbiJdfQ== */",
|
|
1043
|
+
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
1044
|
+
});
|
|
1045
|
+
var LargeAddButtonIcon = /*#__PURE__*/styled(Add, process.env.NODE_ENV === "production" ? {
|
|
1046
|
+
target: "e15z4m3g1"
|
|
1047
|
+
} : {
|
|
1048
|
+
target: "e15z4m3g1",
|
|
1049
|
+
label: "LargeAddButtonIcon"
|
|
1050
|
+
})(process.env.NODE_ENV === "production" ? {
|
|
1051
|
+
name: "1yvy7h3",
|
|
1052
|
+
styles: "font-size:24px;margin-bottom:8px"
|
|
1053
|
+
} : {
|
|
1054
|
+
name: "1yvy7h3",
|
|
1055
|
+
styles: "font-size:24px;margin-bottom:8px/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2OEJzQyIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAZGV4dGluaXR5L2FkbWluXCI7XG5pbXBvcnQgeyBBZGQsIENvcHksIERlbGV0ZSwgSW52aXNpYmxlLCBQYXN0ZSwgVmlzaWJsZSB9IGZyb20gXCJAZGV4dGluaXR5L2FkbWluLWljb25zXCI7XG5pbXBvcnQgeyBCb3gsIENoZWNrYm94LCBGb3JtQ29udHJvbExhYmVsLCBJY29uQnV0dG9uLCBUeXBvZ3JhcGh5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsL3N0eWxlc1wiO1xuaW1wb3J0IHtcbiAgICB0eXBlIENoYW5nZUV2ZW50LFxuICAgIHR5cGUgRGlzcGF0Y2gsXG4gICAgdHlwZSBGdW5jdGlvbkNvbXBvbmVudCxcbiAgICB0eXBlIFJlYWN0Tm9kZSxcbiAgICB0eXBlIFNldFN0YXRlQWN0aW9uLFxuICAgIHVzZUNhbGxiYWNrLFxuICAgIHVzZUVmZmVjdCxcbiAgICB1c2VNZW1vLFxuICAgIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZvcm1hdHRlZE1lc3NhZ2UsIHR5cGUgTWVzc2FnZURlc2NyaXB0b3IgfSBmcm9tIFwicmVhY3QtaW50bFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbmltcG9ydCB7IHVzZUNvbnRlbnRTY29wZSB9IGZyb20gXCIuLi8uLi9jb250ZW50U2NvcGUvUHJvdmlkZXJcIjtcbmltcG9ydCB7IENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgfSBmcm9tIFwiLi4vY2xpcGJvYXJkL0Nhbm5vdFBhc3RlQmxvY2tEaWFsb2dcIjtcbmltcG9ydCB7IHVzZUJsb2NrQ2xpcGJvYXJkIH0gZnJvbSBcIi4uL2NsaXBib2FyZC91c2VCbG9ja0NsaXBib2FyZFwiO1xuaW1wb3J0IHsgQWRkQmxvY2tEcmF3ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkZEJsb2NrRHJhd2VyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUZvb3RlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXJcIjtcbmltcG9ydCB7IEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlclwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvbiB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvblwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXJcIjtcbmltcG9ydCB7IEJsb2NrUHJldmlld0NvbnRlbnQgfSBmcm9tIFwiLi4vY29tbW9uL2Jsb2NrUm93L0Jsb2NrUHJldmlld0NvbnRlbnRcIjtcbmltcG9ydCB7IEJsb2NrUm93IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1Jvd1wiO1xuaW1wb3J0IHsgdXNlQmxvY2tzQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9CbG9ja3NDb25maWdDb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVCbG9ja1NrZWxldG9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvY3JlYXRlQmxvY2tTa2VsZXRvblwiO1xuaW1wb3J0IHsgZGVkdXBsaWNhdGVCbG9ja0RlcGVuZGVuY2llcyB9IGZyb20gXCIuLi9oZWxwZXJzL2RlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IEhvdmVyUHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvSG92ZXJQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgeyBTZWxlY3RQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSBcIi4uL2lmcmFtZWJyaWRnZS9TZWxlY3RQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEJsb2NrRGVwZW5kZW5jeSwgQmxvY2tJbnRlcmZhY2UsIEJsb2NrU3RhdGUsIFByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlTmV3U3RhdGUgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IHBhcmFsbGVsQXN5bmNFdmVyeSB9IGZyb20gXCIuLi91dGlscy9wYXJhbGxlbEFzeW5jRXZlcnlcIjtcblxuLy8gVXNpbmcge30gaW5zdGVhZCBvZiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gYmVjYXVzZSBuZXZlciBhbmQgdW5rbm93biBhcmUgaW5jb21wYXRpYmxlLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxudHlwZSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMgPSB7fTtcblxudHlwZSBCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSB7XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICBrZXk6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBwcm9wczogQmxvY2tTdGF0ZTxUPjtcbiAgICBzbGlkZUluOiBib29sZWFuO1xufSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzO1xuXG50eXBlIFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSBCbG9ja3NCbG9ja0l0ZW08VCwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ICYgeyByZW1vdmVkQXQ6IG51bWJlciB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQXJyYXk8XG4gICAgICAgIHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgcHJvcHM6IGFueTtcbiAgICAgICAgfSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzXG4gICAgPjtcbn1cblxudHlwZSBCbG9ja1R5cGUgPSBzdHJpbmc7XG5cbmludGVyZmFjZSBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8VmFsdWUgPSB1bmtub3duPiB7XG4gICAgZGVmYXVsdFZhbHVlOiBWYWx1ZTtcbn1cblxuaW50ZXJmYWNlIENyZWF0ZUJsb2Nrc0Jsb2NrT3B0aW9uczxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRpc3BsYXlOYW1lPzogUmVhY3ROb2RlO1xuICAgIHN1cHBvcnRlZEJsb2NrczogUmVjb3JkPEJsb2NrVHlwZSwgQmxvY2tJbnRlcmZhY2U+O1xuICAgIG1heFZpc2libGVCbG9ja3M/OiBudW1iZXI7XG4gICAgYWRkaXRpb25hbEl0ZW1GaWVsZHM/OiB7XG4gICAgICAgIFtLZXkgaW4ga2V5b2YgQWRkaXRpb25hbEl0ZW1GaWVsZHNdOiBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8QWRkaXRpb25hbEl0ZW1GaWVsZHNbS2V5XT47XG4gICAgfTtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXM/OiBGdW5jdGlvbkNvbXBvbmVudDx7XG4gICAgICAgIGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+O1xuICAgICAgICBvbkNoYW5nZTogKGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+KSA9PiB2b2lkO1xuICAgICAgICBvbk1lbnVDbG9zZTogKCkgPT4gdm9pZDtcbiAgICB9PjtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQ/OiBGdW5jdGlvbkNvbXBvbmVudDx7IGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+IH0+O1xuICAgIHRhZ3M/OiBBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbG9ja3NCbG9jazxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPihcbiAgICB7XG4gICAgICAgIHN1cHBvcnRlZEJsb2NrcyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGlzcGxheU5hbWUgPSA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5ibG9ja3MubmFtZVwiIGRlZmF1bHRNZXNzYWdlPVwiQmxvY2tzXCIgLz4sXG4gICAgICAgIG1heFZpc2libGVCbG9ja3MsXG4gICAgICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCxcbiAgICAgICAgdGFncyxcbiAgICB9OiBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgIG92ZXJyaWRlPzogKFxuICAgICAgICBibG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgICAgICBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgICAgID4sXG4gICAgKSA9PiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4sXG4pOiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4ge1xuICAgIGlmIChPYmplY3Qua2V5cyhzdXBwb3J0ZWRCbG9ja3MpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3MgYmxvY2sgd2l0aCBubyBzdXBwb3J0ZWQgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSBzcGVjaWZ5IGF0IGxlYXN0IHR3byBzdXBwb3J0ZWQgYmxvY2tzLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggYSBzaW5nbGUgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB1c2UgYSBsaXN0IGJsb2NrIChjcmVhdGVMaXN0QmxvY2soKSkgaW5zdGVhZC5cIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmxvY2tGb3JUeXBlKHR5cGU6IHN0cmluZyk6IEJsb2NrSW50ZXJmYWNlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3NbdHlwZV0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0eXBlRm9yQmxvY2sodGFyZ2V0QmxvY2s6IFBpY2s8QmxvY2tJbnRlcmZhY2UsIFwibmFtZVwiPik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3VwcG9ydGVkQmxvY2tzKS5maW5kKChbLCBibG9ja10pID0+IGJsb2NrLm5hbWUgPT09IHRhcmdldEJsb2NrLm5hbWUpPy5bMF0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFRhZ3MgPSBPYmplY3QudmFsdWVzKHN1cHBvcnRlZEJsb2NrcykucmVkdWNlPEFycmF5PE1lc3NhZ2VEZXNjcmlwdG9yIHwgc3RyaW5nPj4oKGFjYywgYmxvY2spID0+IHtcbiAgICAgICAgaWYgKGJsb2NrLnRhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWNjLCAuLi5ibG9jay50YWdzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IEJsb2Nrc0Jsb2NrOiBCbG9ja0ludGVyZmFjZTxcbiAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz5cbiAgICA+ID0ge1xuICAgICAgICAuLi5jcmVhdGVCbG9ja1NrZWxldG9uKCksXG5cbiAgICAgICAgbmFtZSxcblxuICAgICAgICBkaXNwbGF5TmFtZSxcblxuICAgICAgICB0YWdzOiB0YWdzID8gdGFncyA6IGNoaWxkVGFncyxcblxuICAgICAgICBkZWZhdWx0VmFsdWVzOiAoKSA9PiAoeyBibG9ja3M6IFtdIH0pLFxuXG4gICAgICAgIGlucHV0MlN0YXRlOiAoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGlucHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gYmxvY2sgdHlwZSBcIiR7Y2hpbGQudHlwZX1cImApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suaW5wdXQyU3RhdGUoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSwge30pLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2NrcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RhdGUyT3V0cHV0OiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3MubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNoaWxkLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLnN0YXRlMk91dHB1dChjaGlsZC5wcm9wcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICBvdXRwdXQyU3RhdGU6IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICBibG9ja3M6IFtdLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYXdhaXQgYmxvY2sub3V0cHV0MlN0YXRlKGNoaWxkLnByb3BzLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlUHJldmlld1N0YXRlOiAoc3RhdGUsIHByZXZpZXdDdHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogcHJldmlld0N0eC5wYXJlbnRVcmwsXG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY2hpbGQpID0+IChwcmV2aWV3Q3R4LnNob3dWaXNpYmxlT25seSA/IGNoaWxkLnZpc2libGUgOiB0cnVlKSkgLy8gZGVwZW5kaW5nIG9uIGNvbnRleHQgc2hvdyBhbGwgYmxvY2tzIG9yIG9ubHkgdmlzaWJsZSBibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQWRtaW5Sb3V0ZSA9IGAke3ByZXZpZXdDdHgucGFyZW50VXJsU3ViUm91dGUgPz8gcHJldmlld0N0eC5wYXJlbnRVcmx9LyR7Y2hpbGQua2V5fS9ibG9ja3NgO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNoaWxkLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogYmxvY2tBZG1pblJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5jcmVhdGVQcmV2aWV3U3RhdGUoY2hpbGQucHJvcHMsIHsgLi4ucHJldmlld0N0eCwgcGFyZW50VXJsU3ViUm91dGU6IHVuZGVmaW5lZCwgcGFyZW50VXJsOiBibG9ja0FkbWluUm91dGUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBhZG1pbk1ldGE6IHsgcm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBpc1ZhbGlkOiBhc3luYyAoc3RhdGUpID0+XG4gICAgICAgICAgICBwYXJhbGxlbEFzeW5jRXZlcnkoc3RhdGUuYmxvY2tzLCBhc3luYyAoYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGMudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Yy50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmlzVmFsaWQoYy5wcm9wcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgY2hpbGRCbG9ja0NvdW50OiAoc3RhdGUpID0+IHN0YXRlLmJsb2Nrcy5sZW5ndGgsXG5cbiAgICAgICAgYW5jaG9yczogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxzdHJpbmdbXT4oKGFuY2hvcnMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYW5jaG9ycywgLi4uKGJsb2NrLmFuY2hvcnM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcblxuICAgICAgICBkZXBlbmRlbmNpZXM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkRGVwZW5kZW5jaWVzID0gc3RhdGUuYmxvY2tzLnJlZHVjZTxCbG9ja0RlcGVuZGVuY3lbXT4oKGRlcGVuZGVuY2llcywgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5kZXBlbmRlbmNpZXMsIC4uLihibG9jay5kZXBlbmRlbmNpZXM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMobWVyZ2VkRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQ6IChvdXRwdXQsIHJlcGxhY2VtZW50cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3T3V0cHV0OiBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IGJsb2NrczogW10gfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXdPdXRwdXQuYmxvY2tzLnB1c2goeyAuLi5jaGlsZCwgcHJvcHM6IGJsb2NrLnJlcGxhY2VEZXBlbmRlbmNpZXNJbk91dHB1dChjaGlsZC5wcm9wcywgcmVwbGFjZW1lbnRzKSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ld091dHB1dDtcbiAgICAgICAgfSxcblxuICAgICAgICBkZWZpbmVzT3duUGFkZGluZzogdHJ1ZSxcblxuICAgICAgICBBZG1pbkNvbXBvbmVudDogKHsgc3RhdGUsIHVwZGF0ZVN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVZpc2libGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYykgPT4gKGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgdmlzaWJsZTogIWMudmlzaWJsZSB9IDogYykpLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgW3Nob3dBZGRCbG9ja0RyYXdlciwgc2V0U2hvd0FkZEJsb2NrRHJhd2VyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IFtiZWZvcmVJbmRleCwgc2V0QmVmb3JlSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPigpO1xuICAgICAgICAgICAgY29uc3QgW2Nhbm5vdFBhc3RlQmxvY2tFcnJvciwgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yXSA9IHVzZVN0YXRlPFJlYWN0Tm9kZT4oKTtcblxuICAgICAgICAgICAgY29uc3Qgc25hY2tiYXJBcGkgPSB1c2VTbmFja2JhckFwaSgpO1xuXG4gICAgICAgICAgICBjb25zdCB0b3RhbFZpc2libGVCbG9ja3MgPSBzdGF0ZS5ibG9ja3MuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuXG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ibG9ja3Muc29tZSgoYmxvY2spID0+IGJsb2NrLnNsaWRlSW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRIYW5kbGUgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoeyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoeyAuLi5ibG9jaywgc2xpZGVJbjogZmFsc2UgfSkpIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3N0YXRlLmJsb2NrcywgdXBkYXRlU3RhdGVdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVW5kb0NsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKHJlbW92ZWRCbG9ja3M6IFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZEJsb2Nrcz8uZm9yRWFjaCgocmVtb3ZlZEJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkQXQgfSA9IHJlbW92ZWRCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jazogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IC4uLnJlbW92ZWRCbG9jayB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBibG9jay5yZW1vdmVkQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZShyZW1vdmVkQXQsIDAsIGJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrcyB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVCbG9ja3MgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXlzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1JlbW92ZSA9IHByZXZTdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHJlbW92ZWRBdDogaW5kZXggfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9ja0tleXMuaW5jbHVkZXMoYmxvY2sua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc25hY2tiYXJBcGkuc2hvd1NuYWNrYmFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVbmRvU25hY2tiYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYmxvY2tEZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCBvbmUge2Jsb2NrfSBvdGhlciB7IyBibG9ja3N9fSBkZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgY291bnQ6IGJsb2Nrc1RvUmVtb3ZlLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkPXtibG9ja3NUb1JlbW92ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VbmRvQ2xpY2s9eyhibG9ja3NUb1JlbW92ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVW5kb0NsaWNrKGJsb2Nrc1RvUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4gIWJsb2NrS2V5cy5pbmNsdWRlcyhjLmtleSkpIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW2hhbmRsZVVuZG9DbGljaywgc25hY2tiYXJBcGksIHVwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzID0gKHZpc2libGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvU2hvdyA9IHN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMudmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBibG9ja3NUb1Nob3cgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvRGVsZXRlID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRlbGV0ZUJsb2NrcyhcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tzVG9EZWxldGUubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmtleTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZE5ld0Jsb2NrID0gKHR5cGU6IEJsb2NrVHlwZSwgYmVmb3JlSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB1dWlkKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZSh0eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHt0eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzIDwgbWF4VmlzaWJsZUJsb2NrcyA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmRlZmF1bHRWYWx1ZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5lbnRyaWVzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBbZmllbGQsIHsgZGVmYXVsdFZhbHVlIH1dKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRlZmF1bHRWYWx1ZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzID0gWy4uLnN0YXRlLmJsb2Nrc107XG5cbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3Muc3BsaWNlKGJlZm9yZUluZGV4LCAwLCBuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3MucHVzaChuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrczogbmV3QmxvY2tzLFxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVVcGRhdGVTdWJCbG9ja3NGbiA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChibG9ja0tleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVN1YkJsb2Nrc0ZuOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjx1bmtub3duPj4gPSAoc2V0U3RhdGVBY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgcHJvcHM6IHJlc29sdmVOZXdTdGF0ZSh7IHByZXZTdGF0ZTogYy5wcm9wcywgc2V0U3RhdGVBY3Rpb24gfSkgfSA6IGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1YkJsb2Nrc0ZuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgc2NvcGUgfSA9IHVzZUNvbnRlbnRTY29wZSgpO1xuICAgICAgICAgICAgY29uc3QgeyBpc0Jsb2NrU3VwcG9ydGVkIH0gPSB1c2VCbG9ja3NDb25maWcoKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCbG9ja1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmlsdGVyKChbLCBibG9ja10pID0+IGlzQmxvY2tTdXBwb3J0ZWQoYmxvY2ssIHNjb3BlKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3Njb3BlLCBpc0Jsb2NrU3VwcG9ydGVkXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgdXBkYXRlQ2xpcGJvYXJkQ29udGVudCwgZ2V0Q2xpcGJvYXJkQ29udGVudCB9ID0gdXNlQmxvY2tDbGlwYm9hcmQoeyBzdXBwb3J0czogT2JqZWN0LnZhbHVlcyhmaWx0ZXJlZFN1cHBvcnRlZEJsb2NrcykgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhc3RlQmxvY2sgPSBhc3luYyAoaW5zZXJ0QXQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ2V0Q2xpcGJvYXJkQ29udGVudCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5jYW5QYXN0ZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IocmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb250ZW50IH0gPSByZXNwb25zZTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA9IGNvbnRlbnQuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5BZGRWaXNpYmxlQmxvY2sgPSBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzICsgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA8PSBtYXhWaXNpYmxlQmxvY2tzIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdCbG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBjb250ZW50Lm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRm9yQmxvY2soYmxvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHR5cGUgZm91bmQgZm9yIGJsb2NrIFwiJHtibG9jay5uYW1lfVwiYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB1dWlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2FuQWRkVmlzaWJsZUJsb2NrID8gYmxvY2sudmlzaWJsZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihibG9jay5hZGRpdGlvbmFsRmllbGRzIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IFsuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKDAsIGluc2VydEF0KSwgLi4ubmV3QmxvY2tzLCAuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKGluc2VydEF0KV0ubWFwKChibG9jaykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBZGRCbG9ja0NsaWNrID0gKGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKHRydWUpO1xuICAgICAgICAgICAgICAgIHNldEJlZm9yZUluZGV4KGJlZm9yZUluZGV4KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNsb3NlQWRkQmxvY2tEcmF3ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVG9nZ2xlU2VsZWN0QWxsID0gKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5ibG9jaywgc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0QmxvY2sgPSAoY3VycmVudEJsb2NrOiBCbG9ja3NCbG9ja0l0ZW0sIHNlbGVjdDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkOiBibG9jayA9PT0gY3VycmVudEJsb2NrID8gc2VsZWN0IDogYmxvY2suc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvQ29weSA9IHN0YXRlLmJsb2Nrc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4gYmxvY2suc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0ludGVyZmFjZSA9IGJsb2NrRm9yVHlwZShibG9jay50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9ja0ludGVyZmFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtibG9jay50eXBlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrSW50ZXJmYWNlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogYmxvY2sucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgZmllbGQpID0+ICh7IC4uLmZpZWxkcywgW2ZpZWxkXTogYmxvY2tbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KGJsb2Nrc1RvQ29weSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKS5sZW5ndGg7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFN0YWNrU3dpdGNoIGRpc2FibGVGb3JjZVByb21wdFJvdXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoc3RhY2tBcGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50UGFwZXIgZGlzYWJsZVBhZGRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0QWxsRnJvbUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkQ291bnQgPT09IHN0YXRlLmJsb2Nrcy5sZW5ndGggJiYgc2VsZWN0ZWRDb3VudCA+IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtzZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3RlZENvdW50ICE9PSBzdGF0ZS5ibG9ja3MubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRvZ2dsZVNlbGVjdEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LnNlbGVjdEFsbFwiIGRlZmF1bHRNZXNzYWdlPVwiU2VsZWN0IGFsbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LyogRG8gbm90IHNob3cgdG9nZ2xlIHZpc2liaWxpdHkgb2YgYWxsIHNlbGVjdGVkIGJsb2NrcyBidXR0b25zIHdoZW4gbWF4VmlzaWJsZUJsb2NrcyBpcyBzZXQgKi99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFtYXhWaXNpYmxlQmxvY2tzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxWaXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1ha2UgdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8SW52aXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uaW52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIGludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8RGVsZXRlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlQWxsU2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5kZWxldGVcIiBkZWZhdWx0TWVzc2FnZT1cIkRlbGV0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PENvcHkgLz59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5U2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5jb3B5XCIgZGVmYXVsdE1lc3NhZ2U9XCJDb3B5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbSBpY29uPXs8UGFzdGUgLz59IG9uQ2xpY2s9eygpID0+IHBhc3RlQmxvY2soMCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5wYXN0ZVwiIGRlZmF1bHRNZXNzYWdlPVwiUGFzdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNNZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubWFwKChkYXRhLCBibG9ja0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGRhdGEudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIW1heFZpc2libGVCbG9ja3MgJiYgdG90YWxWaXNpYmxlQmxvY2tzID49IG1heFZpc2libGVCbG9ja3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhblRvZ2dsZVZpc2liaWxpdHkgPSBpc01heFZpc2libGVCbG9ja3NSZWFjaGVkID8gZGF0YS52aXNpYmxlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCAmJiAhZGF0YS52aXNpYmxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SG92ZXJQcmV2aWV3Q29tcG9uZW50IGtleT17ZGF0YS5rZXl9IGNvbXBvbmVudFNsdWc9e2Ake2RhdGEua2V5fS9ibG9ja3NgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2RhdGEua2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQcmV2aWV3Q29udGVudD17KCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUHJldmlld0NvbnRlbnQgYmxvY2s9e2Jsb2NrfSBzdGF0ZT17ZGF0YS5wcm9wc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2Jsb2NrSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29udGVudENsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJibG9ja3NcIiwgZGF0YS5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoW2RhdGEua2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVCbG9jaz17KGZyb20sIHRvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrVG9Nb3ZlID0gYmxvY2tzLnNwbGljZShmcm9tLCAxKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3Muc3BsaWNlKHRvLCAwLCBibG9ja1RvTW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5QnV0dG9uPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TWF4QmxvY2tzQWxsb3dlZE1lc3NhZ2UgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmJsb2NrLm1heFZpc2libGVCbG9ja3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWF4LiB2aXNpYmxlIGJsb2NrcyBhbGxvd2VkOiB7bWF4VmlzaWJsZUJsb2Nrc31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBtYXhWaXNpYmxlQmxvY2tzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGNvbXBvbmVudD1cInNwYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNhblRvZ2dsZVZpc2liaWxpdHkgJiYgdG9nZ2xlVmlzaWJsZShkYXRhLmtleSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5Ub2dnbGVWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF0YS52aXNpYmxlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWaXNpYmxlIGNvbG9yPVwic3VjY2Vzc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnZpc2libGUgY29sb3I9XCJhY3Rpb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9e2hhbmRsZUFkZEJsb2NrQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29weUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2RhdGEudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNsaXBib2FyZENvbnRlbnQoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYmxvY2submFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZGF0YS52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogZGF0YS5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRhdGFbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblBhc3RlQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlQmxvY2soYmxvY2tJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZD17ZGF0YS5zZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RlZENsaWNrPXsoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEJsb2NrKGRhdGEsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZEZuPXsoKSA9PiBibG9jay5pc1ZhbGlkKGRhdGEucHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluPXtkYXRhLnNsaWRlSW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVCb3R0b21JbnNlcnRCZXR3ZWVuQnV0dG9uPXtibG9ja0luZGV4ID49IHN0YXRlLmJsb2Nrcy5sZW5ndGggLSAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWVudUl0ZW1zPXsob25NZW51Q2xvc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZGl0aW9uYWxJdGVtQ29udGV4dE1lbnVJdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPXtkYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHVwZGF0ZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldmlvdXNTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZpb3VzU3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmtleSA9PT0gZGF0YS5rZXkgPyB1cGRhdGVkSXRlbSA6IGJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxDb250ZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCA/IDxBZGRpdGlvbmFsSXRlbUNvbnRlbnQgaXRlbT17ZGF0YX0gLz4gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hvdmVyUHJldmlld0NvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFkZEJsb2NrQ2xpY2soKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhcmdlQWRkQnV0dG9uSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJY29uPXs8QWRkIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWRkTmV3QmxvY2tcIiBkZWZhdWx0TWVzc2FnZT1cIkFkZCBibG9ja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRQYXBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZEJsb2NrRHJhd2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXtzaG93QWRkQmxvY2tEcmF3ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzPXtmaWx0ZXJlZFN1cHBvcnRlZEJsb2Nrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9eyh0eXBlLCBhZGRBbmRFZGl0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYWRkTmV3QmxvY2sodHlwZSwgYmVmb3JlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEFuZEVkaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tQYWdlIG5hbWU9XCJibG9ja3NcIiB0aXRsZT1cIkJsb2NrIGJlYXJiZWl0ZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGlkKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBzdGF0ZS5ibG9ja3MuZmluZCgoYykgPT4gYy5rZXkgPT09IGlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG1hdGNoLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJtYWluXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZVRpdGxlIHRpdGxlPXtibG9jay5kaXNwbGF5TmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmxvY2suQWRtaW5Db21wb25lbnQgc3RhdGU9e21hdGNoLnByb3BzfSB1cGRhdGVTdGF0ZT17Y3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4oaWQpfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrUGFnZVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2Fubm90UGFzdGVCbG9ja0RpYWxvZyBvcGVuIG9uQ2xvc2U9eygpID0+IHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcih1bmRlZmluZWQpfSBlcnJvcj17Y2Fubm90UGFzdGVCbG9ja0Vycm9yfSAvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld0NvbnRlbnQ6IChzdGF0ZSwgY3R4KSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCA9MCB7Tm8gYmxvY2tzfSBvbmUgeyMgYmxvY2t9IG90aGVyIHsjIGJsb2Nrc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBzdGF0ZS5ibG9ja3MubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPFByZXZpZXdDb250ZW50W10+KChwcmV2LCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUobmV4dC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFByZXZpZXdDb250ZW50ID0gYmxvY2sucHJldmlld0NvbnRlbnQobmV4dC5wcm9wcywgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5uZXh0UHJldmlld0NvbnRlbnRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZURlcGVuZGVuY3lQYXRoOiAoc3RhdGUsIGpzb25QYXRoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIS9eYmxvY2tzLlxcZCsucHJvcHMvLnRlc3QoanNvblBhdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEludmFsaWQganNvblBhdGhcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdGhBcnIgPSBqc29uUGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIocGF0aEFyclsxXSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja0l0ZW0gPSBzdGF0ZS5ibG9ja3NbbnVtXTtcblxuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoYmxvY2tJdGVtLnR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoYmxvY2sgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3NCbG9jazogQmxvY2sgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gYmxvY2sucmVzb2x2ZURlcGVuZGVuY3lQYXRoKGJsb2NrSXRlbS5wcm9wcywgcGF0aEFyci5zbGljZSgzKS5qb2luKFwiLlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gYCR7YmxvY2tJdGVtLmtleX0vYmxvY2tzLyR7Y2hpbGRQYXRofWA7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dHJhY3RUZXh0Q29udGVudHM6IChzdGF0ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPSBvcHRpb25zPy5pbmNsdWRlSW52aXNpYmxlQ29udGVudCA/PyBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChjb250ZW50LCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSAmJiAhaW5jbHVkZUludmlzaWJsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5jb250ZW50LCAuLi4oYmxvY2suZXh0cmFjdFRleHRDb250ZW50cz8uKGNoaWxkLnByb3BzLCBvcHRpb25zKSA/PyBbXSldO1xuICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGVDb250ZW50OiBhc3luYyAoc3RhdGUsIHRyYW5zbGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZEJsb2NrcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5tYXAoYXN5bmMgKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQcm9wcyA9IGJsb2NrLnRyYW5zbGF0ZUNvbnRlbnQgPyBhd2FpdCBibG9jay50cmFuc2xhdGVDb250ZW50KGNoaWxkLnByb3BzLCB0cmFuc2xhdGUpIDogY2hpbGQucHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmNoaWxkLCBwcm9wczogdHJhbnNsYXRlZFByb3BzIH07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGJsb2NrczogdHJhbnNsYXRlZEJsb2NrcyB9O1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlKEJsb2Nrc0Jsb2NrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQmxvY2tzQmxvY2s7XG59XG5cbmNvbnN0IEJsb2NrTGlzdEhlYWRlciA9IHN0eWxlZChcImRpdlwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygwLCAxKX07XG5gO1xuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEycHggMDtcbmA7XG5cbmNvbnN0IFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWwgPSBzdHlsZWQoRm9ybUNvbnRyb2xMYWJlbClgXG4gICAgcGFkZGluZzogMTVweCAxMHB4IDE1cHggN3B4O1xuYDtcblxuY29uc3QgTGFyZ2VBZGRCdXR0b25Db250ZW50ID0gc3R5bGVkKFwic3BhblwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiA0cHggMDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uSWNvbiA9IHN0eWxlZChBZGQpYFxuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG5gO1xuXG5jb25zdCBTZXBhcmF0b3IgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsocHJvcHMpID0+IHByb3BzLnRoZW1lLnBhbGV0dGUuZ3JleVtcIjEwMFwiXX07XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgbWFyZ2luLWxlZnQ6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygxKX07XG4gICAgbWFyZ2luLXJpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuYDtcbiJdfQ== */",
|
|
1056
|
+
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
1057
|
+
});
|
|
1058
|
+
var Separator = /*#__PURE__*/styled("div", process.env.NODE_ENV === "production" ? {
|
|
1059
|
+
target: "e15z4m3g0"
|
|
1060
|
+
} : {
|
|
1061
|
+
target: "e15z4m3g0",
|
|
1062
|
+
label: "Separator"
|
|
1063
|
+
})("background-color:", function (props) {
|
|
1064
|
+
return props.theme.palette.grey["100"];
|
|
1065
|
+
}, ";height:22px;width:1px;margin-left:", function (_ref11) {
|
|
1066
|
+
var theme = _ref11.theme;
|
|
1067
|
+
return theme.spacing(1);
|
|
1068
|
+
}, ";margin-right:", function (_ref12) {
|
|
1069
|
+
var theme = _ref12.theme;
|
|
1070
|
+
return theme.spacing(1);
|
|
1071
|
+
}, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ibG9ja3MvZmFjdG9yaWVzL2NyZWF0ZUJsb2Nrc0Jsb2NrLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrOUIrQiIsImZpbGUiOiIuLi8uLi8uLi9zcmMvYmxvY2tzL2ZhY3Rvcmllcy9jcmVhdGVCbG9ja3NCbG9jay50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFJvd0FjdGlvbnNJdGVtLFxuICAgIFJvd0FjdGlvbnNNZW51LFxuICAgIFN0YWNrUGFnZSxcbiAgICBTdGFja1BhZ2VUaXRsZSxcbiAgICBTdGFja1N3aXRjaCxcbiAgICBTdGFja1N3aXRjaEFwaUNvbnRleHQsXG4gICAgVG9vbHRpcCxcbiAgICBVbmRvU25hY2tiYXIsXG4gICAgdXNlU25hY2tiYXJBcGksXG59IGZyb20gXCJAZGV4dGluaXR5L2FkbWluXCI7XG5pbXBvcnQgeyBBZGQsIENvcHksIERlbGV0ZSwgSW52aXNpYmxlLCBQYXN0ZSwgVmlzaWJsZSB9IGZyb20gXCJAZGV4dGluaXR5L2FkbWluLWljb25zXCI7XG5pbXBvcnQgeyBCb3gsIENoZWNrYm94LCBGb3JtQ29udHJvbExhYmVsLCBJY29uQnV0dG9uLCBUeXBvZ3JhcGh5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsL3N0eWxlc1wiO1xuaW1wb3J0IHtcbiAgICB0eXBlIENoYW5nZUV2ZW50LFxuICAgIHR5cGUgRGlzcGF0Y2gsXG4gICAgdHlwZSBGdW5jdGlvbkNvbXBvbmVudCxcbiAgICB0eXBlIFJlYWN0Tm9kZSxcbiAgICB0eXBlIFNldFN0YXRlQWN0aW9uLFxuICAgIHVzZUNhbGxiYWNrLFxuICAgIHVzZUVmZmVjdCxcbiAgICB1c2VNZW1vLFxuICAgIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZvcm1hdHRlZE1lc3NhZ2UsIHR5cGUgTWVzc2FnZURlc2NyaXB0b3IgfSBmcm9tIFwicmVhY3QtaW50bFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbmltcG9ydCB7IHVzZUNvbnRlbnRTY29wZSB9IGZyb20gXCIuLi8uLi9jb250ZW50U2NvcGUvUHJvdmlkZXJcIjtcbmltcG9ydCB7IENhbm5vdFBhc3RlQmxvY2tEaWFsb2cgfSBmcm9tIFwiLi4vY2xpcGJvYXJkL0Nhbm5vdFBhc3RlQmxvY2tEaWFsb2dcIjtcbmltcG9ydCB7IHVzZUJsb2NrQ2xpcGJvYXJkIH0gZnJvbSBcIi4uL2NsaXBib2FyZC91c2VCbG9ja0NsaXBib2FyZFwiO1xuaW1wb3J0IHsgQWRkQmxvY2tEcmF3ZXIgfSBmcm9tIFwiLi4vY29tbW9uL0FkZEJsb2NrRHJhd2VyXCI7XG5pbXBvcnQgeyBBZG1pbkNvbXBvbmVudFN0aWNreUZvb3RlciB9IGZyb20gXCIuLi9jb21tb24vQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXJcIjtcbmltcG9ydCB7IEFkbWluQ29tcG9uZW50U3RpY2t5SGVhZGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9BZG1pbkNvbXBvbmVudFN0aWNreUhlYWRlclwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvbiB9IGZyb20gXCIuLi9jb21tb24vQmxvY2tBZG1pbkNvbXBvbmVudEJ1dHRvblwiO1xuaW1wb3J0IHsgQmxvY2tBZG1pbkNvbXBvbmVudFBhcGVyIH0gZnJvbSBcIi4uL2NvbW1vbi9CbG9ja0FkbWluQ29tcG9uZW50UGFwZXJcIjtcbmltcG9ydCB7IEJsb2NrUHJldmlld0NvbnRlbnQgfSBmcm9tIFwiLi4vY29tbW9uL2Jsb2NrUm93L0Jsb2NrUHJldmlld0NvbnRlbnRcIjtcbmltcG9ydCB7IEJsb2NrUm93IH0gZnJvbSBcIi4uL2NvbW1vbi9ibG9ja1Jvdy9CbG9ja1Jvd1wiO1xuaW1wb3J0IHsgdXNlQmxvY2tzQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9CbG9ja3NDb25maWdDb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVCbG9ja1NrZWxldG9uIH0gZnJvbSBcIi4uL2hlbHBlcnMvY3JlYXRlQmxvY2tTa2VsZXRvblwiO1xuaW1wb3J0IHsgZGVkdXBsaWNhdGVCbG9ja0RlcGVuZGVuY2llcyB9IGZyb20gXCIuLi9oZWxwZXJzL2RlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IEhvdmVyUHJldmlld0NvbXBvbmVudCB9IGZyb20gXCIuLi9pZnJhbWVicmlkZ2UvSG92ZXJQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgeyBTZWxlY3RQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSBcIi4uL2lmcmFtZWJyaWRnZS9TZWxlY3RQcmV2aWV3Q29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEJsb2NrRGVwZW5kZW5jeSwgQmxvY2tJbnRlcmZhY2UsIEJsb2NrU3RhdGUsIFByZXZpZXdDb250ZW50IH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlTmV3U3RhdGUgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7IHBhcmFsbGVsQXN5bmNFdmVyeSB9IGZyb20gXCIuLi91dGlscy9wYXJhbGxlbEFzeW5jRXZlcnlcIjtcblxuLy8gVXNpbmcge30gaW5zdGVhZCBvZiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj4gYmVjYXVzZSBuZXZlciBhbmQgdW5rbm93biBhcmUgaW5jb21wYXRpYmxlLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxudHlwZSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHMgPSB7fTtcblxudHlwZSBCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSB7XG4gICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICBrZXk6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdmlzaWJsZTogYm9vbGVhbjtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICBwcm9wczogQmxvY2tTdGF0ZTxUPjtcbiAgICBzbGlkZUluOiBib29sZWFuO1xufSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzO1xuXG50eXBlIFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08XG4gICAgVCBleHRlbmRzIEJsb2NrSW50ZXJmYWNlID0gQmxvY2tJbnRlcmZhY2UsXG4gICAgQWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcyxcbj4gPSBCbG9ja3NCbG9ja0l0ZW08VCwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+ICYgeyByZW1vdmVkQXQ6IG51bWJlciB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBEZWZhdWx0QWRkaXRpb25hbEl0ZW1GaWVsZHM+IHtcbiAgICBibG9ja3M6IEFycmF5PFxuICAgICAgICB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICAgICAgICAgICAga2V5OiBzdHJpbmc7XG4gICAgICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICAgICAgICB2aXNpYmxlOiBib29sZWFuO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgICAgIHByb3BzOiBhbnk7XG4gICAgICAgIH0gJiBBZGRpdGlvbmFsSXRlbUZpZWxkc1xuICAgID47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IERlZmF1bHRBZGRpdGlvbmFsSXRlbUZpZWxkcz4ge1xuICAgIGJsb2NrczogQXJyYXk8XG4gICAgICAgIHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgICAgIHZpc2libGU6IGJvb2xlYW47XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgICAgcHJvcHM6IGFueTtcbiAgICAgICAgfSAmIEFkZGl0aW9uYWxJdGVtRmllbGRzXG4gICAgPjtcbn1cblxudHlwZSBCbG9ja1R5cGUgPSBzdHJpbmc7XG5cbmludGVyZmFjZSBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8VmFsdWUgPSB1bmtub3duPiB7XG4gICAgZGVmYXVsdFZhbHVlOiBWYWx1ZTtcbn1cblxuaW50ZXJmYWNlIENyZWF0ZUJsb2Nrc0Jsb2NrT3B0aW9uczxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRpc3BsYXlOYW1lPzogUmVhY3ROb2RlO1xuICAgIHN1cHBvcnRlZEJsb2NrczogUmVjb3JkPEJsb2NrVHlwZSwgQmxvY2tJbnRlcmZhY2U+O1xuICAgIG1heFZpc2libGVCbG9ja3M/OiBudW1iZXI7XG4gICAgYWRkaXRpb25hbEl0ZW1GaWVsZHM/OiB7XG4gICAgICAgIFtLZXkgaW4ga2V5b2YgQWRkaXRpb25hbEl0ZW1GaWVsZHNdOiBCbG9ja3NCbG9ja0FkZGl0aW9uYWxJdGVtRmllbGQ8QWRkaXRpb25hbEl0ZW1GaWVsZHNbS2V5XT47XG4gICAgfTtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXM/OiBGdW5jdGlvbkNvbXBvbmVudDx7XG4gICAgICAgIGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+O1xuICAgICAgICBvbkNoYW5nZTogKGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+KSA9PiB2b2lkO1xuICAgICAgICBvbk1lbnVDbG9zZTogKCkgPT4gdm9pZDtcbiAgICB9PjtcbiAgICBBZGRpdGlvbmFsSXRlbUNvbnRlbnQ/OiBGdW5jdGlvbkNvbXBvbmVudDx7IGl0ZW06IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+IH0+O1xuICAgIHRhZ3M/OiBBcnJheTxNZXNzYWdlRGVzY3JpcHRvciB8IHN0cmluZz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCbG9ja3NCbG9jazxBZGRpdGlvbmFsSXRlbUZpZWxkcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gRGVmYXVsdEFkZGl0aW9uYWxJdGVtRmllbGRzPihcbiAgICB7XG4gICAgICAgIHN1cHBvcnRlZEJsb2NrcyxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGlzcGxheU5hbWUgPSA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5ibG9ja3MubmFtZVwiIGRlZmF1bHRNZXNzYWdlPVwiQmxvY2tzXCIgLz4sXG4gICAgICAgIG1heFZpc2libGVCbG9ja3MsXG4gICAgICAgIGFkZGl0aW9uYWxJdGVtRmllbGRzLFxuICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMsXG4gICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCxcbiAgICAgICAgdGFncyxcbiAgICB9OiBDcmVhdGVCbG9ja3NCbG9ja09wdGlvbnM8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgIG92ZXJyaWRlPzogKFxuICAgICAgICBibG9jazogQmxvY2tJbnRlcmZhY2U8XG4gICAgICAgICAgICBCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPixcbiAgICAgICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICAgICAgQmxvY2tzQmxvY2tPdXRwdXQ8QWRkaXRpb25hbEl0ZW1GaWVsZHM+XG4gICAgICAgID4sXG4gICAgKSA9PiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4sXG4pOiBCbG9ja0ludGVyZmFjZTxCbG9ja3NCbG9ja0ZyYWdtZW50PEFkZGl0aW9uYWxJdGVtRmllbGRzPiwgQmxvY2tzQmxvY2tTdGF0ZTxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sIEJsb2Nrc0Jsb2NrT3V0cHV0PEFkZGl0aW9uYWxJdGVtRmllbGRzPj4ge1xuICAgIGlmIChPYmplY3Qua2V5cyhzdXBwb3J0ZWRCbG9ja3MpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3MgYmxvY2sgd2l0aCBubyBzdXBwb3J0ZWQgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSBzcGVjaWZ5IGF0IGxlYXN0IHR3byBzdXBwb3J0ZWQgYmxvY2tzLlwiKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoc3VwcG9ydGVkQmxvY2tzKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzIGJsb2NrIHdpdGggYSBzaW5nbGUgYmxvY2sgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB1c2UgYSBsaXN0IGJsb2NrIChjcmVhdGVMaXN0QmxvY2soKSkgaW5zdGVhZC5cIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmxvY2tGb3JUeXBlKHR5cGU6IHN0cmluZyk6IEJsb2NrSW50ZXJmYWNlIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3NbdHlwZV0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0eXBlRm9yQmxvY2sodGFyZ2V0QmxvY2s6IFBpY2s8QmxvY2tJbnRlcmZhY2UsIFwibmFtZVwiPik6IHN0cmluZyB8IG51bGwge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoc3VwcG9ydGVkQmxvY2tzKS5maW5kKChbLCBibG9ja10pID0+IGJsb2NrLm5hbWUgPT09IHRhcmdldEJsb2NrLm5hbWUpPy5bMF0gPz8gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFRhZ3MgPSBPYmplY3QudmFsdWVzKHN1cHBvcnRlZEJsb2NrcykucmVkdWNlPEFycmF5PE1lc3NhZ2VEZXNjcmlwdG9yIHwgc3RyaW5nPj4oKGFjYywgYmxvY2spID0+IHtcbiAgICAgICAgaWYgKGJsb2NrLnRhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWNjLCAuLi5ibG9jay50YWdzXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IEJsb2Nrc0Jsb2NrOiBCbG9ja0ludGVyZmFjZTxcbiAgICAgICAgQmxvY2tzQmxvY2tGcmFnbWVudDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4sXG4gICAgICAgIEJsb2Nrc0Jsb2NrU3RhdGU8QWRkaXRpb25hbEl0ZW1GaWVsZHM+LFxuICAgICAgICBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz5cbiAgICA+ID0ge1xuICAgICAgICAuLi5jcmVhdGVCbG9ja1NrZWxldG9uKCksXG5cbiAgICAgICAgbmFtZSxcblxuICAgICAgICBkaXNwbGF5TmFtZSxcblxuICAgICAgICB0YWdzOiB0YWdzID8gdGFncyA6IGNoaWxkVGFncyxcblxuICAgICAgICBkZWZhdWx0VmFsdWVzOiAoKSA9PiAoeyBibG9ja3M6IFtdIH0pLFxuXG4gICAgICAgIGlucHV0MlN0YXRlOiAoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrczogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz5bXSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGlucHV0LmJsb2Nrcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFVua25vd24gYmxvY2sgdHlwZSBcIiR7Y2hpbGQudHlwZX1cImApO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBibG9ja3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYmxvY2suaW5wdXQyU3RhdGUoY2hpbGQucHJvcHMpLFxuICAgICAgICAgICAgICAgICAgICAuLi5PYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSwge30pLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlSW46IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJsb2NrcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RhdGUyT3V0cHV0OiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3MubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGNoaWxkLnZpc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLnN0YXRlMk91dHB1dChjaGlsZC5wcm9wcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlIGNhc3QgdG8gc3VwcHJlc3MgXCInQWRkaXRpb25hbEl0ZW1GaWVsZHMnIGNvdWxkIGJlIGluc3RhbnRpYXRlZCB3aXRoIGEgZGlmZmVyZW50IHN1YnR5cGUgb2YgY29uc3RyYWludCAnUmVjb3JkPHN0cmluZywgdW5rbm93bj4nXCIgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhhZGRpdGlvbmFsSXRlbUZpZWxkcyA/PyB7fSkucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgQWRkaXRpb25hbEl0ZW1GaWVsZHMpLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICBvdXRwdXQyU3RhdGU6IGFzeW5jIChvdXRwdXQsIGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBCbG9ja3NCbG9ja1N0YXRlPEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICBibG9ja3M6IFtdLFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogYXdhaXQgYmxvY2sub3V0cHV0MlN0YXRlKGNoaWxkLnByb3BzLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG5cbiAgICAgICAgY3JlYXRlUHJldmlld1N0YXRlOiAoc3RhdGUsIHByZXZpZXdDdHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogcHJldmlld0N0eC5wYXJlbnRVcmwsXG4gICAgICAgICAgICAgICAgYmxvY2tzOiBzdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoY2hpbGQpID0+IChwcmV2aWV3Q3R4LnNob3dWaXNpYmxlT25seSA/IGNoaWxkLnZpc2libGUgOiB0cnVlKSkgLy8gZGVwZW5kaW5nIG9uIGNvbnRleHQgc2hvdyBhbGwgYmxvY2tzIG9yIG9ubHkgdmlzaWJsZSBibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrQWRtaW5Sb3V0ZSA9IGAke3ByZXZpZXdDdHgucGFyZW50VXJsU3ViUm91dGUgPz8gcHJldmlld0N0eC5wYXJlbnRVcmx9LyR7Y2hpbGQua2V5fS9ibG9ja3NgO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGNoaWxkLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBjaGlsZC52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNoaWxkLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRtaW5Sb3V0ZTogYmxvY2tBZG1pblJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5jcmVhdGVQcmV2aWV3U3RhdGUoY2hpbGQucHJvcHMsIHsgLi4ucHJldmlld0N0eCwgcGFyZW50VXJsU3ViUm91dGU6IHVuZGVmaW5lZCwgcGFyZW50VXJsOiBibG9ja0FkbWluUm91dGUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHlwZSBjYXN0IHRvIHN1cHByZXNzIFwiJ0FkZGl0aW9uYWxJdGVtRmllbGRzJyBjb3VsZCBiZSBpbnN0YW50aWF0ZWQgd2l0aCBhIGRpZmZlcmVudCBzdWJ0eXBlIG9mIGNvbnN0cmFpbnQgJ1JlY29yZDxzdHJpbmcsIHVua25vd24+J1wiIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5rZXlzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGNoaWxkW2ZpZWxkXSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBBZGRpdGlvbmFsSXRlbUZpZWxkcyksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBhZG1pbk1ldGE6IHsgcm91dGU6IHByZXZpZXdDdHgucGFyZW50VXJsIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICBpc1ZhbGlkOiBhc3luYyAoc3RhdGUpID0+XG4gICAgICAgICAgICBwYXJhbGxlbEFzeW5jRXZlcnkoc3RhdGUuYmxvY2tzLCBhc3luYyAoYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGMudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Yy50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmlzVmFsaWQoYy5wcm9wcyk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgY2hpbGRCbG9ja0NvdW50OiAoc3RhdGUpID0+IHN0YXRlLmJsb2Nrcy5sZW5ndGgsXG5cbiAgICAgICAgYW5jaG9yczogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuYmxvY2tzLnJlZHVjZTxzdHJpbmdbXT4oKGFuY2hvcnMsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTsgLy8gZm9yIFRTXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbLi4uYW5jaG9ycywgLi4uKGJsb2NrLmFuY2hvcnM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcblxuICAgICAgICBkZXBlbmRlbmNpZXM6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbWVyZ2VkRGVwZW5kZW5jaWVzID0gc3RhdGUuYmxvY2tzLnJlZHVjZTxCbG9ja0RlcGVuZGVuY3lbXT4oKGRlcGVuZGVuY2llcywgY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShjaGlsZC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtjaGlsZC50eXBlfWApOyAvLyBmb3IgVFNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5kZXBlbmRlbmNpZXMsIC4uLihibG9jay5kZXBlbmRlbmNpZXM/LihjaGlsZC5wcm9wcykgPz8gW10pXTtcbiAgICAgICAgICAgIH0sIFtdKTtcblxuICAgICAgICAgICAgcmV0dXJuIGRlZHVwbGljYXRlQmxvY2tEZXBlbmRlbmNpZXMobWVyZ2VkRGVwZW5kZW5jaWVzKTtcbiAgICAgICAgfSxcblxuICAgICAgICByZXBsYWNlRGVwZW5kZW5jaWVzSW5PdXRwdXQ6IChvdXRwdXQsIHJlcGxhY2VtZW50cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3T3V0cHV0OiBCbG9ja3NCbG9ja091dHB1dDxBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IGJsb2NrczogW10gfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBvdXRwdXQuYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoY2hpbGQudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuZXdPdXRwdXQuYmxvY2tzLnB1c2goeyAuLi5jaGlsZCwgcHJvcHM6IGJsb2NrLnJlcGxhY2VEZXBlbmRlbmNpZXNJbk91dHB1dChjaGlsZC5wcm9wcywgcmVwbGFjZW1lbnRzKSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ld091dHB1dDtcbiAgICAgICAgfSxcblxuICAgICAgICBkZWZpbmVzT3duUGFkZGluZzogdHJ1ZSxcblxuICAgICAgICBBZG1pbkNvbXBvbmVudDogKHsgc3RhdGUsIHVwZGF0ZVN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVZpc2libGUgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYykgPT4gKGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgdmlzaWJsZTogIWMudmlzaWJsZSB9IDogYykpLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbdXBkYXRlU3RhdGVdLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgW3Nob3dBZGRCbG9ja0RyYXdlciwgc2V0U2hvd0FkZEJsb2NrRHJhd2VyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IFtiZWZvcmVJbmRleCwgc2V0QmVmb3JlSW5kZXhdID0gdXNlU3RhdGU8bnVtYmVyPigpO1xuICAgICAgICAgICAgY29uc3QgW2Nhbm5vdFBhc3RlQmxvY2tFcnJvciwgc2V0Q2Fubm90UGFzdGVCbG9ja0Vycm9yXSA9IHVzZVN0YXRlPFJlYWN0Tm9kZT4oKTtcblxuICAgICAgICAgICAgY29uc3Qgc25hY2tiYXJBcGkgPSB1c2VTbmFja2JhckFwaSgpO1xuXG4gICAgICAgICAgICBjb25zdCB0b3RhbFZpc2libGVCbG9ja3MgPSBzdGF0ZS5ibG9ja3MuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuXG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ibG9ja3Muc29tZSgoYmxvY2spID0+IGJsb2NrLnNsaWRlSW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRIYW5kbGUgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoeyAuLi5wcmV2U3RhdGUsIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoeyAuLi5ibG9jaywgc2xpZGVJbjogZmFsc2UgfSkpIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3N0YXRlLmJsb2NrcywgdXBkYXRlU3RhdGVdKTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVW5kb0NsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgKHJlbW92ZWRCbG9ja3M6IFJlbW92ZWRCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPltdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlZEJsb2Nrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZEJsb2Nrcz8uZm9yRWFjaCgocmVtb3ZlZEJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkQXQgfSA9IHJlbW92ZWRCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jazogQmxvY2tzQmxvY2tJdGVtPEJsb2NrSW50ZXJmYWNlLCBBZGRpdGlvbmFsSXRlbUZpZWxkcz4gPSB7IC4uLnJlbW92ZWRCbG9jayB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBibG9jay5yZW1vdmVkQXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLnNwbGljZShyZW1vdmVkQXQsIDAsIGJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5wcmV2U3RhdGUsIGJsb2NrcyB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFt1cGRhdGVTdGF0ZV0sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb25zdCBkZWxldGVCbG9ja3MgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgICAgICAgICAoYmxvY2tLZXlzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja3NUb1JlbW92ZSA9IHByZXZTdGF0ZS5ibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChibG9jaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHJlbW92ZWRBdDogaW5kZXggfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBibG9ja0tleXMuaW5jbHVkZXMoYmxvY2sua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc25hY2tiYXJBcGkuc2hvd1NuYWNrYmFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxVbmRvU25hY2tiYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYmxvY2tEZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCBvbmUge2Jsb2NrfSBvdGhlciB7IyBibG9ja3N9fSBkZWxldGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9e3sgY291bnQ6IGJsb2Nrc1RvUmVtb3ZlLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkPXtibG9ja3NUb1JlbW92ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VbmRvQ2xpY2s9eyhibG9ja3NUb1JlbW92ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVW5kb0NsaWNrKGJsb2Nrc1RvUmVtb3ZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPixcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4gIWJsb2NrS2V5cy5pbmNsdWRlcyhjLmtleSkpIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW2hhbmRsZVVuZG9DbGljaywgc25hY2tiYXJBcGksIHVwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzID0gKHZpc2libGUgPSBmYWxzZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvU2hvdyA9IHN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMudmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLnByZXZTdGF0ZSwgYmxvY2tzOiBibG9ja3NUb1Nob3cgfTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZURlbGV0ZUFsbFNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvRGVsZXRlID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRlbGV0ZUJsb2NrcyhcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tzVG9EZWxldGUubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrLmtleTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZE5ld0Jsb2NrID0gKHR5cGU6IEJsb2NrVHlwZSwgYmVmb3JlSW5kZXg/OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSB1dWlkKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZSh0eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHt0eXBlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtOiBCbG9ja3NCbG9ja0l0ZW08QmxvY2tJbnRlcmZhY2UsIEFkZGl0aW9uYWxJdGVtRmllbGRzPiA9IHtcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzIDwgbWF4VmlzaWJsZUJsb2NrcyA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGJsb2NrLmRlZmF1bHRWYWx1ZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKE9iamVjdC5lbnRyaWVzKGFkZGl0aW9uYWxJdGVtRmllbGRzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAoZmllbGRzLCBbZmllbGQsIHsgZGVmYXVsdFZhbHVlIH1dKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRlZmF1bHRWYWx1ZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICApIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3QmxvY2tzID0gWy4uLnN0YXRlLmJsb2Nrc107XG5cbiAgICAgICAgICAgICAgICBpZiAoYmVmb3JlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3Muc3BsaWNlKGJlZm9yZUluZGV4LCAwLCBuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja3MucHVzaChuZXdJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrczogbmV3QmxvY2tzLFxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjcmVhdGVVcGRhdGVTdWJCbG9ja3NGbiA9IHVzZUNhbGxiYWNrKFxuICAgICAgICAgICAgICAgIChibG9ja0tleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVN1YkJsb2Nrc0ZuOiBEaXNwYXRjaDxTZXRTdGF0ZUFjdGlvbjx1bmtub3duPj4gPSAoc2V0U3RhdGVBY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGMpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMua2V5ID09PSBibG9ja0tleSA/IHsgLi4uYywgcHJvcHM6IHJlc29sdmVOZXdTdGF0ZSh7IHByZXZTdGF0ZTogYy5wcm9wcywgc2V0U3RhdGVBY3Rpb24gfSkgfSA6IGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1YkJsb2Nrc0ZuO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW3VwZGF0ZVN0YXRlXSxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgc2NvcGUgfSA9IHVzZUNvbnRlbnRTY29wZSgpO1xuICAgICAgICAgICAgY29uc3QgeyBpc0Jsb2NrU3VwcG9ydGVkIH0gPSB1c2VCbG9ja3NDb25maWcoKTtcblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRTdXBwb3J0ZWRCbG9ja3MgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNCbG9ja1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKHN1cHBvcnRlZEJsb2NrcykuZmlsdGVyKChbLCBibG9ja10pID0+IGlzQmxvY2tTdXBwb3J0ZWQoYmxvY2ssIHNjb3BlKSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRCbG9ja3M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgW3Njb3BlLCBpc0Jsb2NrU3VwcG9ydGVkXSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgdXBkYXRlQ2xpcGJvYXJkQ29udGVudCwgZ2V0Q2xpcGJvYXJkQ29udGVudCB9ID0gdXNlQmxvY2tDbGlwYm9hcmQoeyBzdXBwb3J0czogT2JqZWN0LnZhbHVlcyhmaWx0ZXJlZFN1cHBvcnRlZEJsb2NrcykgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhc3RlQmxvY2sgPSBhc3luYyAoaW5zZXJ0QXQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ2V0Q2xpcGJvYXJkQ29udGVudCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5jYW5QYXN0ZSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDYW5ub3RQYXN0ZUJsb2NrRXJyb3IocmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb250ZW50IH0gPSByZXNwb25zZTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA9IGNvbnRlbnQuZmlsdGVyKChibG9jaykgPT4gYmxvY2sudmlzaWJsZSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW5BZGRWaXNpYmxlQmxvY2sgPSBtYXhWaXNpYmxlQmxvY2tzID8gdG90YWxWaXNpYmxlQmxvY2tzICsgY2xpcGJvYXJkVmlzaWJsZUJsb2NrcyA8PSBtYXhWaXNpYmxlQmxvY2tzIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdCbG9ja3M6IEJsb2Nrc0Jsb2NrSXRlbTxCbG9ja0ludGVyZmFjZSwgQWRkaXRpb25hbEl0ZW1GaWVsZHM+W10gPSBjb250ZW50Lm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB0eXBlRm9yQmxvY2soYmxvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHR5cGUgZm91bmQgZm9yIGJsb2NrIFwiJHtibG9jay5uYW1lfVwiYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiB1dWlkKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogY2FuQWRkVmlzaWJsZUJsb2NrID8gYmxvY2sudmlzaWJsZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBibG9jay5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR5cGUgY2FzdCB0byBzdXBwcmVzcyBcIidBZGRpdGlvbmFsSXRlbUZpZWxkcycgY291bGQgYmUgaW5zdGFudGlhdGVkIHdpdGggYSBkaWZmZXJlbnQgc3VidHlwZSBvZiBjb25zdHJhaW50ICdSZWNvcmQ8c3RyaW5nLCB1bmtub3duPidcIiBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihibG9jay5hZGRpdGlvbmFsRmllbGRzIGFzIEFkZGl0aW9uYWxJdGVtRmllbGRzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wcmV2U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IFsuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKDAsIGluc2VydEF0KSwgLi4ubmV3QmxvY2tzLCAuLi5wcmV2U3RhdGUuYmxvY2tzLnNsaWNlKGluc2VydEF0KV0ubWFwKChibG9jaykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5ibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBZGRCbG9ja0NsaWNrID0gKGJlZm9yZUluZGV4PzogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKHRydWUpO1xuICAgICAgICAgICAgICAgIHNldEJlZm9yZUluZGV4KGJlZm9yZUluZGV4KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUNsb3NlQWRkQmxvY2tEcmF3ZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2hvd0FkZEJsb2NrRHJhd2VyKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBzZXRCZWZvcmVJbmRleCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlVG9nZ2xlU2VsZWN0QWxsID0gKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdXBkYXRlU3RhdGUoKHByZXZTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzOiBwcmV2U3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5ibG9jaywgc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0QmxvY2sgPSAoY3VycmVudEJsb2NrOiBCbG9ja3NCbG9ja0l0ZW0sIHNlbGVjdDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlKChwcmV2U3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrczogcHJldlN0YXRlLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIHNlbGVjdGVkOiBibG9jayA9PT0gY3VycmVudEJsb2NrID8gc2VsZWN0IDogYmxvY2suc2VsZWN0ZWQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgaGFuZGxlQ29weVNlbGVjdGVkQmxvY2tzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2Nrc1RvQ29weSA9IHN0YXRlLmJsb2Nrc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChibG9jaykgPT4gYmxvY2suc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0ludGVyZmFjZSA9IGJsb2NrRm9yVHlwZShibG9jay50eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9ja0ludGVyZmFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gQmxvY2sgZm91bmQgZm9yIHR5cGUgJHtibG9jay50eXBlfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGJsb2NrSW50ZXJmYWNlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogYmxvY2sucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpZWxkcywgZmllbGQpID0+ICh7IC4uLmZpZWxkcywgW2ZpZWxkXTogYmxvY2tbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVDbGlwYm9hcmRDb250ZW50KGJsb2Nrc1RvQ29weSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gc3RhdGUuYmxvY2tzLmZpbHRlcigoYmxvY2spID0+IGJsb2NrLnNlbGVjdGVkKS5sZW5ndGg7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFN0YWNrU3dpdGNoIGRpc2FibGVGb3JjZVByb21wdFJvdXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZSBuYW1lPVwibWFpblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsoc3RhY2tBcGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCbG9ja0FkbWluQ29tcG9uZW50UGFwZXIgZGlzYWJsZVBhZGRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0YXRlLmJsb2Nrcy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VsZWN0QWxsRnJvbUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkQ291bnQgPT09IHN0YXRlLmJsb2Nrcy5sZW5ndGggJiYgc2VsZWN0ZWRDb3VudCA+IDB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtzZWxlY3RlZENvdW50ID4gMCAmJiBzZWxlY3RlZENvdW50ICE9PSBzdGF0ZS5ibG9ja3MubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRvZ2dsZVNlbGVjdEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LnNlbGVjdEFsbFwiIGRlZmF1bHRNZXNzYWdlPVwiU2VsZWN0IGFsbFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zTWVudT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7LyogRG8gbm90IHNob3cgdG9nZ2xlIHZpc2liaWxpdHkgb2YgYWxsIHNlbGVjdGVkIGJsb2NrcyBidXR0b25zIHdoZW4gbWF4VmlzaWJsZUJsb2NrcyBpcyBzZXQgKi99XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyFtYXhWaXNpYmxlQmxvY2tzICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxWaXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWN0aW9uLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIk1ha2UgdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8SW52aXNpYmxlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVRvZ2dsZVZpc2liaWxpdHlPZkFsbFNlbGVjdGVkQmxvY2tzKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb21ldC5ibG9ja3MubGlzdC5hY3Rpb24uaW52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdE1lc3NhZ2U9XCJNYWtlIGludmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlcGFyYXRvciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8RGVsZXRlIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VsZWN0ZWRDb3VudCA9PT0gMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlRGVsZXRlQWxsU2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5kZWxldGVcIiBkZWZhdWx0TWVzc2FnZT1cIkRlbGV0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Sb3dBY3Rpb25zSXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Um93QWN0aW9uc0l0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PENvcHkgLz59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtzZWxlY3RlZENvdW50ID09PSAwfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5U2VsZWN0ZWRCbG9ja3N9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5jb3B5XCIgZGVmYXVsdE1lc3NhZ2U9XCJDb3B5XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxSb3dBY3Rpb25zSXRlbSBpY29uPXs8UGFzdGUgLz59IG9uQ2xpY2s9eygpID0+IHBhc3RlQmxvY2soMCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFjdGlvbi5wYXN0ZVwiIGRlZmF1bHRNZXNzYWdlPVwiUGFzdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvUm93QWN0aW9uc0l0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1Jvd0FjdGlvbnNNZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlckFjdGlvbkNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrTGlzdEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdGF0ZS5ibG9ja3MubWFwKChkYXRhLCBibG9ja0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGRhdGEudHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIW1heFZpc2libGVCbG9ja3MgJiYgdG90YWxWaXNpYmxlQmxvY2tzID49IG1heFZpc2libGVCbG9ja3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhblRvZ2dsZVZpc2liaWxpdHkgPSBpc01heFZpc2libGVCbG9ja3NSZWFjaGVkID8gZGF0YS52aXNpYmxlIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvd01heEJsb2Nrc0FsbG93ZWRNZXNzYWdlID0gaXNNYXhWaXNpYmxlQmxvY2tzUmVhY2hlZCAmJiAhZGF0YS52aXNpYmxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SG92ZXJQcmV2aWV3Q29tcG9uZW50IGtleT17ZGF0YS5rZXl9IGNvbXBvbmVudFNsdWc9e2Ake2RhdGEua2V5fS9ibG9ja3NgfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmxvY2tSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9e2RhdGEua2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJQcmV2aWV3Q29udGVudD17KCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrUHJldmlld0NvbnRlbnQgYmxvY2s9e2Jsb2NrfSBzdGF0ZT17ZGF0YS5wcm9wc30gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2Jsb2NrSW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29udGVudENsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJibG9ja3NcIiwgZGF0YS5rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVCbG9ja3MoW2RhdGEua2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVCbG9jaz17KGZyb20sIHRvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldlN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gWy4uLnByZXZTdGF0ZS5ibG9ja3NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrVG9Nb3ZlID0gYmxvY2tzLnNwbGljZShmcm9tLCAxKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3Muc3BsaWNlKHRvLCAwLCBibG9ja1RvTW92ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucHJldlN0YXRlLCBibG9ja3MgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5QnV0dG9uPXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TWF4QmxvY2tzQWxsb3dlZE1lc3NhZ2UgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmJsb2NrLm1heFZpc2libGVCbG9ja3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlPVwiTWF4LiB2aXNpYmxlIGJsb2NrcyBhbGxvd2VkOiB7bWF4VmlzaWJsZUJsb2Nrc31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz17eyBtYXhWaXNpYmxlQmxvY2tzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Qm94IGNvbXBvbmVudD1cInNwYW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNhblRvZ2dsZVZpc2liaWxpdHkgJiYgdG9nZ2xlVmlzaWJsZShkYXRhLmtleSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5Ub2dnbGVWaXNpYmlsaXR5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZGF0YS52aXNpYmxlID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxWaXNpYmxlIGNvbG9yPVwic3VjY2Vzc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJbnZpc2libGUgY29sb3I9XCJhY3Rpb25cIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9e2hhbmRsZUFkZEJsb2NrQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29weUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrRm9yVHlwZShkYXRhLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2RhdGEudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNsaXBib2FyZENvbnRlbnQoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYmxvY2submFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZGF0YS52aXNpYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogZGF0YS5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZpZWxkczogT2JqZWN0LmtleXMoYWRkaXRpb25hbEl0ZW1GaWVsZHMgPz8ge30pLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWVsZHMsIGZpZWxkKSA9PiAoeyAuLi5maWVsZHMsIFtmaWVsZF06IGRhdGFbZmllbGRdIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblBhc3RlQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlQmxvY2soYmxvY2tJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZD17ZGF0YS5zZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RlZENsaWNrPXsoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEJsb2NrKGRhdGEsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZEZuPXsoKSA9PiBibG9jay5pc1ZhbGlkKGRhdGEucHJvcHMpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZUluPXtkYXRhLnNsaWRlSW59XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVCb3R0b21JbnNlcnRCZXR3ZWVuQnV0dG9uPXtibG9ja0luZGV4ID49IHN0YXRlLmJsb2Nrcy5sZW5ndGggLSAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsTWVudUl0ZW1zPXsob25NZW51Q2xvc2UpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsSXRlbUNvbnRleHRNZW51SXRlbXMgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZGl0aW9uYWxJdGVtQ29udGV4dE1lbnVJdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtPXtkYXRhfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHVwZGF0ZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZSgocHJldmlvdXNTdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3M6IHByZXZpb3VzU3RhdGUuYmxvY2tzLm1hcCgoYmxvY2spID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLmtleSA9PT0gZGF0YS5rZXkgPyB1cGRhdGVkSXRlbSA6IGJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTWVudUNsb3NlPXtvbk1lbnVDbG9zZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxDb250ZW50PXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWxJdGVtQ29udGVudCA/IDxBZGRpdGlvbmFsSXRlbUNvbnRlbnQgaXRlbT17ZGF0YX0gLz4gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0hvdmVyUHJldmlld0NvbXBvbmVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUFkZEJsb2NrQ2xpY2soKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxMYXJnZUFkZEJ1dHRvbkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPExhcmdlQWRkQnV0dG9uSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD1cImNvbWV0LmJsb2Nrcy5saXN0LmFkZE5ld0Jsb2NrXCIgZGVmYXVsdE1lc3NhZ2U9XCJBZGQgYmxvY2tcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvTGFyZ2VBZGRCdXR0b25Db250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkbWluQ29tcG9uZW50U3RpY2t5Rm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJsb2NrQWRtaW5Db21wb25lbnRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBZGRCbG9ja0NsaWNrKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJY29uPXs8QWRkIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuYWRkTmV3QmxvY2tcIiBkZWZhdWx0TWVzc2FnZT1cIkFkZCBibG9ja1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQWRtaW5Db21wb25lbnRTdGlja3lGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0Jsb2NrQWRtaW5Db21wb25lbnRQYXBlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFkZEJsb2NrRHJhd2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuPXtzaG93QWRkQmxvY2tEcmF3ZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZUFkZEJsb2NrRHJhd2VyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzPXtmaWx0ZXJlZFN1cHBvcnRlZEJsb2Nrc31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkTmV3QmxvY2s9eyh0eXBlLCBhZGRBbmRFZGl0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYWRkTmV3QmxvY2sodHlwZSwgYmVmb3JlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEFuZEVkaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwiYmxvY2tzXCIsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NlbGVjdFByZXZpZXdDb21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2hBcGlDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U3RhY2tQYWdlIG5hbWU9XCJibG9ja3NcIiB0aXRsZT1cIkJsb2NrIGJlYXJiZWl0ZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KGlkKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTdGFja1N3aXRjaEFwaUNvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7KHN0YWNrQXBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBzdGF0ZS5ibG9ja3MuZmluZCgoYykgPT4gYy5rZXkgPT09IGlkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tBcGkuYWN0aXZhdGVQYWdlKFwibWFpblwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKG1hdGNoLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0FwaS5hY3RpdmF0ZVBhZ2UoXCJtYWluXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFN0YWNrUGFnZVRpdGxlIHRpdGxlPXtibG9jay5kaXNwbGF5TmFtZX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmxvY2suQWRtaW5Db21wb25lbnQgc3RhdGU9e21hdGNoLnByb3BzfSB1cGRhdGVTdGF0ZT17Y3JlYXRlVXBkYXRlU3ViQmxvY2tzRm4oaWQpfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrUGFnZVRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1N0YWNrU3dpdGNoQXBpQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TdGFja1BhZ2U+XG4gICAgICAgICAgICAgICAgICAgIDwvU3RhY2tTd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIHtjYW5ub3RQYXN0ZUJsb2NrRXJyb3IgIT09IHVuZGVmaW5lZCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8Q2Fubm90UGFzdGVCbG9ja0RpYWxvZyBvcGVuIG9uQ2xvc2U9eygpID0+IHNldENhbm5vdFBhc3RlQmxvY2tFcnJvcih1bmRlZmluZWQpfSBlcnJvcj17Y2Fubm90UGFzdGVCbG9ja0Vycm9yfSAvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgcHJldmlld0NvbnRlbnQ6IChzdGF0ZSwgY3R4KSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUuYmxvY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY29tZXQuYmxvY2tzLmxpc3QuY291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWVzc2FnZT1cIntjb3VudCwgcGx1cmFsLCA9MCB7Tm8gYmxvY2tzfSBvbmUgeyMgYmxvY2t9IG90aGVyIHsjIGJsb2Nrc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPXt7IGNvdW50OiBzdGF0ZS5ibG9ja3MubGVuZ3RoIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5ibG9ja3MucmVkdWNlPFByZXZpZXdDb250ZW50W10+KChwcmV2LCBuZXh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUobmV4dC50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFByZXZpZXdDb250ZW50ID0gYmxvY2sucHJldmlld0NvbnRlbnQobmV4dC5wcm9wcywgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5wcmV2LCAuLi5uZXh0UHJldmlld0NvbnRlbnRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZURlcGVuZGVuY3lQYXRoOiAoc3RhdGUsIGpzb25QYXRoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIS9eYmxvY2tzLlxcZCsucHJvcHMvLnRlc3QoanNvblBhdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmxvY2tzQmxvY2s6IEludmFsaWQganNvblBhdGhcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHBhdGhBcnIgPSBqc29uUGF0aC5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIocGF0aEFyclsxXSk7XG4gICAgICAgICAgICBjb25zdCBibG9ja0l0ZW0gPSBzdGF0ZS5ibG9ja3NbbnVtXTtcblxuICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBibG9ja0ZvclR5cGUoYmxvY2tJdGVtLnR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoYmxvY2sgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCbG9ja3NCbG9jazogQmxvY2sgaXMgbnVsbFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gYmxvY2sucmVzb2x2ZURlcGVuZGVuY3lQYXRoKGJsb2NrSXRlbS5wcm9wcywgcGF0aEFyci5zbGljZSgzKS5qb2luKFwiLlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gYCR7YmxvY2tJdGVtLmtleX0vYmxvY2tzLyR7Y2hpbGRQYXRofWA7XG4gICAgICAgIH0sXG4gICAgICAgIGV4dHJhY3RUZXh0Q29udGVudHM6IChzdGF0ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5jbHVkZUludmlzaWJsZUNvbnRlbnQgPSBvcHRpb25zPy5pbmNsdWRlSW52aXNpYmxlQ29udGVudCA/PyBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmJsb2Nrcy5yZWR1Y2U8c3RyaW5nW10+KChjb250ZW50LCBjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICghYmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBCbG9jayBmb3VuZCBmb3IgdHlwZSAke2NoaWxkLnR5cGV9YCk7IC8vIGZvciBUU1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghY2hpbGQudmlzaWJsZSAmJiAhaW5jbHVkZUludmlzaWJsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi5jb250ZW50LCAuLi4oYmxvY2suZXh0cmFjdFRleHRDb250ZW50cz8uKGNoaWxkLnByb3BzLCBvcHRpb25zKSA/PyBbXSldO1xuICAgICAgICAgICAgfSwgW10pO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGVDb250ZW50OiBhc3luYyAoc3RhdGUsIHRyYW5zbGF0ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZEJsb2NrcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgIHN0YXRlLmJsb2Nrcy5tYXAoYXN5bmMgKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gYmxvY2tGb3JUeXBlKGNoaWxkLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIEJsb2NrIGZvdW5kIGZvciB0eXBlICR7Y2hpbGQudHlwZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRQcm9wcyA9IGJsb2NrLnRyYW5zbGF0ZUNvbnRlbnQgPyBhd2FpdCBibG9jay50cmFuc2xhdGVDb250ZW50KGNoaWxkLnByb3BzLCB0cmFuc2xhdGUpIDogY2hpbGQucHJvcHM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLmNoaWxkLCBwcm9wczogdHJhbnNsYXRlZFByb3BzIH07XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGJsb2NrczogdHJhbnNsYXRlZEJsb2NrcyB9O1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAob3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIG92ZXJyaWRlKEJsb2Nrc0Jsb2NrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQmxvY2tzQmxvY2s7XG59XG5cbmNvbnN0IEJsb2NrTGlzdEhlYWRlciA9IHN0eWxlZChcImRpdlwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygwLCAxKX07XG5gO1xuXG5jb25zdCBCbG9ja0xpc3RIZWFkZXJBY3Rpb25Db250YWluZXIgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEycHggMDtcbmA7XG5cbmNvbnN0IFNlbGVjdEFsbEZyb21Db250cm9sTGFiZWwgPSBzdHlsZWQoRm9ybUNvbnRyb2xMYWJlbClgXG4gICAgcGFkZGluZzogMTVweCAxMHB4IDE1cHggN3B4O1xuYDtcblxuY29uc3QgTGFyZ2VBZGRCdXR0b25Db250ZW50ID0gc3R5bGVkKFwic3BhblwiKWBcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiA0cHggMDtcbmA7XG5cbmNvbnN0IExhcmdlQWRkQnV0dG9uSWNvbiA9IHN0eWxlZChBZGQpYFxuICAgIGZvbnQtc2l6ZTogMjRweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG5gO1xuXG5jb25zdCBTZXBhcmF0b3IgPSBzdHlsZWQoXCJkaXZcIilgXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsocHJvcHMpID0+IHByb3BzLnRoZW1lLnBhbGV0dGUuZ3JleVtcIjEwMFwiXX07XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgbWFyZ2luLWxlZnQ6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuc3BhY2luZygxKX07XG4gICAgbWFyZ2luLXJpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnNwYWNpbmcoMSl9O1xuYDtcbiJdfQ== */"));
|