@nlabs/gothamui 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/MIGRATION.md +36 -0
- package/README.md +768 -0
- package/docs/assets/gothamui-app-architecture.svg +159 -0
- package/docs/assets/gothamui-logo.png +0 -0
- package/docs/assets/gothamui-logo.svg +42 -0
- package/docs/render-performance.md +34 -0
- package/lib/actions/GothamActions.d.ts +42 -0
- package/lib/actions/GothamActions.js +67 -0
- package/lib/actions/MarkdownActions.d.ts +4 -0
- package/lib/actions/MarkdownActions.js +48 -0
- package/lib/app.d.ts +1 -0
- package/lib/app.js +198 -0
- package/lib/components/Alert/Alert.d.ts +8 -0
- package/lib/components/Alert/Alert.js +24 -0
- package/lib/components/Alert/Alert.stories.js +59 -0
- package/lib/components/AuthRoute/AuthRoute.d.ts +3 -0
- package/lib/components/AuthRoute/AuthRoute.js +21 -0
- package/lib/components/AuthRoute/AuthRoute.stories.js +45 -0
- package/lib/components/AutocompleteField/AutocompleteField.d.ts +24 -0
- package/lib/components/AutocompleteField/AutocompleteField.js +148 -0
- package/lib/components/AutocompleteField/AutocompleteField.stories.js +62 -0
- package/lib/components/Avatar/Avatar.d.ts +29 -0
- package/lib/components/Avatar/Avatar.js +154 -0
- package/lib/components/Avatar/Avatar.stories.js +105 -0
- package/lib/components/Badge/Badge.d.ts +9 -0
- package/lib/components/Badge/Badge.js +22 -0
- package/lib/components/Badge/Badge.stories.js +53 -0
- package/lib/components/Breadcrumbs/Breadcrumbs.d.ts +19 -0
- package/lib/components/Breadcrumbs/Breadcrumbs.js +74 -0
- package/lib/components/Breadcrumbs/Breadcrumbs.stories.js +95 -0
- package/lib/components/Button/Button.d.ts +25 -0
- package/lib/components/Button/Button.js +157 -0
- package/lib/components/Button/Button.stories.js +119 -0
- package/lib/components/Card/Card.d.ts +8 -0
- package/lib/components/Card/Card.js +39 -0
- package/lib/components/Card/Card.stories.js +60 -0
- package/lib/components/CategoryGrid/CategoryGrid.d.ts +15 -0
- package/lib/components/CategoryGrid/CategoryGrid.js +42 -0
- package/lib/components/CategoryGrid/CategoryGrid.stories.js +35 -0
- package/lib/components/Chat/AudioMessage/AudioMessage.css +1 -0
- package/lib/components/Chat/AudioMessage/AudioMessage.d.ts +3 -0
- package/lib/components/Chat/AudioMessage/AudioMessage.js +28 -0
- package/lib/components/Chat/Avatar/Avatar.css +1 -0
- package/lib/components/Chat/Avatar/Avatar.d.ts +3 -0
- package/lib/components/Chat/Avatar/Avatar.js +72 -0
- package/lib/components/Chat/Button/Button.css +1 -0
- package/lib/components/Chat/Button/Button.d.ts +3 -0
- package/lib/components/Chat/Button/Button.js +37 -0
- package/lib/components/Chat/Chat.stories.js +688 -0
- package/lib/components/Chat/ChatItem/ChatItem.css +1 -0
- package/lib/components/Chat/ChatItem/ChatItem.d.ts +3 -0
- package/lib/components/Chat/ChatItem/ChatItem.js +183 -0
- package/lib/components/Chat/ChatList/ChatList.css +1 -0
- package/lib/components/Chat/ChatList/ChatList.d.ts +3 -0
- package/lib/components/Chat/ChatList/ChatList.js +84 -0
- package/lib/components/Chat/Circle/Circle.d.ts +3 -0
- package/lib/components/Chat/Circle/Circle.js +27 -0
- package/lib/components/Chat/Dropdown/Dropdown.css +1 -0
- package/lib/components/Chat/Dropdown/Dropdown.d.ts +3 -0
- package/lib/components/Chat/Dropdown/Dropdown.js +66 -0
- package/lib/components/Chat/FileMessage/FileMessage.css +1 -0
- package/lib/components/Chat/FileMessage/FileMessage.d.ts +3 -0
- package/lib/components/Chat/FileMessage/FileMessage.js +77 -0
- package/lib/components/Chat/Input/Input.css +1 -0
- package/lib/components/Chat/Input/Input.d.ts +3 -0
- package/lib/components/Chat/Input/Input.js +108 -0
- package/lib/components/Chat/LocationMessage/LocationMessage.css +1 -0
- package/lib/components/Chat/LocationMessage/LocationMessage.d.ts +3 -0
- package/lib/components/Chat/LocationMessage/LocationMessage.js +36 -0
- package/lib/components/Chat/MeetingItem/MeetingItem.css +1 -0
- package/lib/components/Chat/MeetingItem/MeetingItem.d.ts +3 -0
- package/lib/components/Chat/MeetingItem/MeetingItem.js +106 -0
- package/lib/components/Chat/MeetingLink/MeetingLink.css +1 -0
- package/lib/components/Chat/MeetingLink/MeetingLink.d.ts +3 -0
- package/lib/components/Chat/MeetingLink/MeetingLink.js +26 -0
- package/lib/components/Chat/MeetingList/MeetingList.css +1 -0
- package/lib/components/Chat/MeetingList/MeetingList.d.ts +3 -0
- package/lib/components/Chat/MeetingList/MeetingList.js +52 -0
- package/lib/components/Chat/MeetingMessage/MeetingMessage.css +1 -0
- package/lib/components/Chat/MeetingMessage/MeetingMessage.d.ts +3 -0
- package/lib/components/Chat/MeetingMessage/MeetingMessage.js +227 -0
- package/lib/components/Chat/MessageBox/MessageBox.css +1 -0
- package/lib/components/Chat/MessageBox/MessageBox.d.ts +3 -0
- package/lib/components/Chat/MessageBox/MessageBox.js +263 -0
- package/lib/components/Chat/MessageList/MessageList.css +1 -0
- package/lib/components/Chat/MessageList/MessageList.d.ts +2 -0
- package/lib/components/Chat/MessageList/MessageList.js +196 -0
- package/lib/components/Chat/Navbar/Navbar.css +1 -0
- package/lib/components/Chat/Navbar/Navbar.d.ts +3 -0
- package/lib/components/Chat/Navbar/Navbar.js +21 -0
- package/lib/components/Chat/PhotoMessage/PhotoMessage.css +1 -0
- package/lib/components/Chat/PhotoMessage/PhotoMessage.d.ts +3 -0
- package/lib/components/Chat/PhotoMessage/PhotoMessage.js +73 -0
- package/lib/components/Chat/Popup/Popup.css +1 -0
- package/lib/components/Chat/Popup/Popup.d.ts +3 -0
- package/lib/components/Chat/Popup/Popup.js +45 -0
- package/lib/components/Chat/README.md +50 -0
- package/lib/components/Chat/ReplyMessage/ReplyMessage.css +1 -0
- package/lib/components/Chat/ReplyMessage/ReplyMessage.d.ts +3 -0
- package/lib/components/Chat/ReplyMessage/ReplyMessage.js +42 -0
- package/lib/components/Chat/SideBar/SideBar.css +1 -0
- package/lib/components/Chat/SideBar/SideBar.d.ts +3 -0
- package/lib/components/Chat/SideBar/SideBar.js +21 -0
- package/lib/components/Chat/SpotifyMessage/SpotifyMessage.css +1 -0
- package/lib/components/Chat/SpotifyMessage/SpotifyMessage.d.ts +3 -0
- package/lib/components/Chat/SpotifyMessage/SpotifyMessage.js +28 -0
- package/lib/components/Chat/SystemMessage/SystemMessage.css +1 -0
- package/lib/components/Chat/SystemMessage/SystemMessage.d.ts +3 -0
- package/lib/components/Chat/SystemMessage/SystemMessage.js +14 -0
- package/lib/components/Chat/VideoMessage/VideoMessage.css +1 -0
- package/lib/components/Chat/VideoMessage/VideoMessage.d.ts +3 -0
- package/lib/components/Chat/VideoMessage/VideoMessage.js +88 -0
- package/lib/components/Chat/assets/img/leftArrow.svg +6 -0
- package/lib/components/Chat/assets/img/rightArrow.svg +6 -0
- package/lib/components/Chat/index.d.ts +25 -0
- package/lib/components/Chat/index.js +27 -0
- package/lib/components/Chat/type.d.js +52 -0
- package/lib/components/Chat/utils/formatRelativeDate.d.ts +4 -0
- package/lib/components/Chat/utils/formatRelativeDate.js +110 -0
- package/lib/components/Checkbox/Checkbox.d.ts +15 -0
- package/lib/components/Checkbox/Checkbox.js +106 -0
- package/lib/components/Checkbox/Checkbox.stories.js +51 -0
- package/lib/components/ComponentUtils/renderWithAsChild.d.ts +9 -0
- package/lib/components/ComponentUtils/renderWithAsChild.js +27 -0
- package/lib/components/Container/Container.d.ts +7 -0
- package/lib/components/Container/Container.js +16 -0
- package/lib/components/Container/Container.stories.js +36 -0
- package/lib/components/DateField/DateField.d.ts +22 -0
- package/lib/components/DateField/DateField.js +145 -0
- package/lib/components/DateField/DateField.stories.js +125 -0
- package/lib/components/DateField/DatePicker.d.ts +9 -0
- package/lib/components/DateField/DatePicker.js +205 -0
- package/lib/components/DateField/DatePicker.stories.js +33 -0
- package/lib/components/DescriptionList/DescriptionList.d.ts +4 -0
- package/lib/components/DescriptionList/DescriptionList.js +19 -0
- package/lib/components/DescriptionList/DescriptionList.stories.js +34 -0
- package/lib/components/Dialog/Dialog.d.ts +25 -0
- package/lib/components/Dialog/Dialog.js +66 -0
- package/lib/components/Dialog/Dialog.stories.js +88 -0
- package/lib/components/DropUpload/DropUpload.d.ts +37 -0
- package/lib/components/DropUpload/DropUpload.js +323 -0
- package/lib/components/DropUpload/DropUpload.stories.js +48 -0
- package/lib/components/Empty/Empty.d.ts +11 -0
- package/lib/components/Empty/Empty.js +39 -0
- package/lib/components/Empty/Empty.stories.js +52 -0
- package/lib/components/EmptyState/EmptyState.d.ts +15 -0
- package/lib/components/EmptyState/EmptyState.js +44 -0
- package/lib/components/EmptyState/EmptyState.stories.js +36 -0
- package/lib/components/ErrorMessage/ErrorMessage.d.ts +7 -0
- package/lib/components/ErrorMessage/ErrorMessage.js +20 -0
- package/lib/components/ErrorMessage/ErrorMessage.stories.js +25 -0
- package/lib/components/FaqSection/FaqSection.d.ts +14 -0
- package/lib/components/FaqSection/FaqSection.js +37 -0
- package/lib/components/FaqSection/FaqSection.stories.js +31 -0
- package/lib/components/Fieldset/Fieldset.d.ts +21 -0
- package/lib/components/Fieldset/Fieldset.js +39 -0
- package/lib/components/Fieldset/Fieldset.stories.js +42 -0
- package/lib/components/Footer/Footer.d.ts +26 -0
- package/lib/components/Footer/Footer.js +119 -0
- package/lib/components/Footer/Footer.stories.js +184 -0
- package/lib/components/Form/Form.d.ts +42 -0
- package/lib/components/Form/Form.js +198 -0
- package/lib/components/Form/Form.stories.js +65 -0
- package/lib/components/Form/FormContext.d.ts +35 -0
- package/lib/components/Form/FormContext.js +71 -0
- package/lib/components/GothamRoute/GothamRoute.d.ts +0 -0
- package/lib/components/GothamRoute/GothamRoute.js +56 -0
- package/lib/components/GothamRouter/GothamRouter.d.ts +0 -0
- package/lib/components/GothamRouter/GothamRouter.js +52 -0
- package/lib/components/Heading/Heading.d.ts +7 -0
- package/lib/components/Heading/Heading.js +20 -0
- package/lib/components/Heading/Heading.stories.js +51 -0
- package/lib/components/IncentiveGrid/IncentiveGrid.d.ts +15 -0
- package/lib/components/IncentiveGrid/IncentiveGrid.js +34 -0
- package/lib/components/IncentiveGrid/IncentiveGrid.stories.js +41 -0
- package/lib/components/InputField/InputField.d.ts +25 -0
- package/lib/components/InputField/InputField.js +68 -0
- package/lib/components/InputField/InputField.stories.js +58 -0
- package/lib/components/Item/Item.d.ts +25 -0
- package/lib/components/Item/Item.js +79 -0
- package/lib/components/Item/Item.stories.js +94 -0
- package/lib/components/Kbd/Kbd.d.ts +2 -0
- package/lib/components/Kbd/Kbd.js +9 -0
- package/lib/components/Kbd/Kbd.stories.js +24 -0
- package/lib/components/Label/Label.d.ts +11 -0
- package/lib/components/Label/Label.js +23 -0
- package/lib/components/Label/Label.stories.js +38 -0
- package/lib/components/Link/Link.d.ts +7 -0
- package/lib/components/Link/Link.js +13 -0
- package/lib/components/Link/Link.stories.js +28 -0
- package/lib/components/ListContainer/ListContainer.d.ts +8 -0
- package/lib/components/ListContainer/ListContainer.js +14 -0
- package/lib/components/ListContainer/ListContainer.stories.js +45 -0
- package/lib/components/Loader/Loader.d.ts +9 -0
- package/lib/components/Loader/Loader.js +36 -0
- package/lib/components/Loader/Loader.stories.js +94 -0
- package/lib/components/LogoCloud/LogoCloud.d.ts +15 -0
- package/lib/components/LogoCloud/LogoCloud.js +43 -0
- package/lib/components/LogoCloud/LogoCloud.stories.js +28 -0
- package/lib/components/Markdown/Markdown.d.ts +8 -0
- package/lib/components/Markdown/Markdown.js +64 -0
- package/lib/components/Markdown/Markdown.stories.js +34 -0
- package/lib/components/MediaLightbox/MediaLightbox.d.ts +22 -0
- package/lib/components/MediaLightbox/MediaLightbox.js +80 -0
- package/lib/components/MediaObject/MediaObject.d.ts +8 -0
- package/lib/components/MediaObject/MediaObject.js +37 -0
- package/lib/components/MediaObject/MediaObject.stories.js +28 -0
- package/lib/components/Navbar/Navbar.d.ts +43 -0
- package/lib/components/Navbar/Navbar.js +213 -0
- package/lib/components/Navbar/Navbar.stories.js +235 -0
- package/lib/components/NotFound/NotFound.d.ts +34 -0
- package/lib/components/NotFound/NotFound.js +351 -0
- package/lib/components/NotFound/NotFound.stories.js +80 -0
- package/lib/components/Notify/Notify.d.ts +18 -0
- package/lib/components/Notify/Notify.js +178 -0
- package/lib/components/Notify/Notify.stories.js +148 -0
- package/lib/components/Notify/NotifyExample.d.ts +1 -0
- package/lib/components/Notify/NotifyExample.js +174 -0
- package/lib/components/Notify/README.md +103 -0
- package/lib/components/Pagination/Pagination.d.ts +18 -0
- package/lib/components/Pagination/Pagination.js +225 -0
- package/lib/components/Pagination/Pagination.stories.js +69 -0
- package/lib/components/PasswordStrengthMeter/PasswordStrengthMeter.d.ts +12 -0
- package/lib/components/PasswordStrengthMeter/PasswordStrengthMeter.js +88 -0
- package/lib/components/PasswordStrengthMeter/PasswordStrengthMeter.stories.js +16 -0
- package/lib/components/PaymentMethodPanel/PaymentMethodPanel.d.ts +18 -0
- package/lib/components/PaymentMethodPanel/PaymentMethodPanel.js +113 -0
- package/lib/components/PaymentMethodPanel/PaymentMethodPanel.stories.js +88 -0
- package/lib/components/Pricing/Pricing.d.ts +78 -0
- package/lib/components/Pricing/Pricing.js +764 -0
- package/lib/components/Pricing/Pricing.stories.js +146 -0
- package/lib/components/ProductGrid/ProductGrid.d.ts +23 -0
- package/lib/components/ProductGrid/ProductGrid.js +79 -0
- package/lib/components/ProductGrid/ProductGrid.stories.js +50 -0
- package/lib/components/ProgressSteps/ProgressSteps.d.ts +13 -0
- package/lib/components/ProgressSteps/ProgressSteps.js +51 -0
- package/lib/components/ProgressSteps/ProgressSteps.stories.js +35 -0
- package/lib/components/RadioField/RadioField.d.ts +16 -0
- package/lib/components/RadioField/RadioField.js +63 -0
- package/lib/components/RadioField/RadioField.stories.js +140 -0
- package/lib/components/ReviewList/ReviewList.d.ts +15 -0
- package/lib/components/ReviewList/ReviewList.js +51 -0
- package/lib/components/ReviewList/ReviewList.stories.js +29 -0
- package/lib/components/SectionHeader/SectionHeader.d.ts +9 -0
- package/lib/components/SectionHeader/SectionHeader.js +36 -0
- package/lib/components/SectionHeader/SectionHeader.stories.js +35 -0
- package/lib/components/SelectField/SelectField.d.ts +18 -0
- package/lib/components/SelectField/SelectField.js +145 -0
- package/lib/components/SelectField/SelectField.stories.js +155 -0
- package/lib/components/SelectField/SelectOption.d.ts +13 -0
- package/lib/components/SelectField/SelectOption.js +40 -0
- package/lib/components/SelectField/SelectOption.stories.js +40 -0
- package/lib/components/Separator/Separator.d.ts +6 -0
- package/lib/components/Separator/Separator.js +13 -0
- package/lib/components/Separator/Separator.stories.js +70 -0
- package/lib/components/Skeleton/Skeleton.d.ts +2 -0
- package/lib/components/Skeleton/Skeleton.js +9 -0
- package/lib/components/Skeleton/Skeleton.stories.js +24 -0
- package/lib/components/Svg/Svg.d.ts +9 -0
- package/lib/components/Svg/Svg.js +25 -0
- package/lib/components/Svg/Svg.stories.js +34 -0
- package/lib/components/Switch/Switch.d.ts +12 -0
- package/lib/components/Switch/Switch.js +54 -0
- package/lib/components/Switch/Switch.stories.js +61 -0
- package/lib/components/Table/Table.d.ts +18 -0
- package/lib/components/Table/Table.js +99 -0
- package/lib/components/Table/Table.stories.js +79 -0
- package/lib/components/Tabs/Tabs.d.ts +17 -0
- package/lib/components/Tabs/Tabs.js +85 -0
- package/lib/components/Tabs/Tabs.stories.js +45 -0
- package/lib/components/Text/Text.d.ts +5 -0
- package/lib/components/Text/Text.js +24 -0
- package/lib/components/Text/Text.stories.js +35 -0
- package/lib/components/TextField/TextField.d.ts +31 -0
- package/lib/components/TextField/TextField.js +91 -0
- package/lib/components/TextField/TextField.stories.js +158 -0
- package/lib/components/Textarea/Textarea.d.ts +5 -0
- package/lib/components/Textarea/Textarea.js +10 -0
- package/lib/components/Textarea/Textarea.stories.js +32 -0
- package/lib/components/index.d.ts +60 -0
- package/lib/components/index.js +62 -0
- package/lib/config/appConfig.d.ts +5 -0
- package/lib/config/appConfig.js +20 -0
- package/lib/constants/AuthConstants.d.ts +8 -0
- package/lib/constants/AuthConstants.js +9 -0
- package/lib/constants/GothamConstants.d.ts +24 -0
- package/lib/constants/GothamConstants.js +25 -0
- package/lib/constants/MarkdownConstants.d.ts +8 -0
- package/lib/constants/MarkdownConstants.js +9 -0
- package/lib/constants/MessageConstants.d.ts +10 -0
- package/lib/constants/MessageConstants.js +11 -0
- package/lib/docs/analytics.md +231 -0
- package/lib/docs/api-reference.md +364 -0
- package/lib/docs/comparison.md +83 -0
- package/lib/docs/containers.md +11 -0
- package/lib/docs/gettingStarted.md +338 -0
- package/lib/docs/payments.md +79 -0
- package/lib/editor/CodeEditor.d.ts +11 -0
- package/lib/editor/CodeEditor.js +15 -0
- package/lib/editor/CodeEditor.stories.js +24 -0
- package/lib/editor/index.d.ts +1 -0
- package/lib/editor/index.js +3 -0
- package/lib/errors/UserError.d.ts +8 -0
- package/lib/errors/UserError.js +12 -0
- package/lib/examples/OptimizedFormExample.d.ts +1 -0
- package/lib/examples/OptimizedFormExample.js +130 -0
- package/lib/form/index.d.ts +11 -0
- package/lib/form/index.js +13 -0
- package/lib/hooks/useIsMobile.d.ts +1 -0
- package/lib/hooks/useIsMobile.js +12 -0
- package/lib/i18n/index.d.ts +8 -0
- package/lib/i18n/index.js +7 -0
- package/lib/icons/Dual Ring-1s-100px.svg +1 -0
- package/lib/icons/gotham-logo.svg +17 -0
- package/lib/icons/gotham.svg +8 -0
- package/lib/icons/index.d.ts +5 -0
- package/lib/icons/index.js +6 -0
- package/lib/icons/pencil.svg +6 -0
- package/lib/img/arkhamjs-logo.png +0 -0
- package/lib/img/logo.png +0 -0
- package/lib/index.d.ts +25 -0
- package/lib/index.js +25 -0
- package/lib/router/index.d.ts +5 -0
- package/lib/router/index.js +6 -0
- package/lib/stores/GothamAppStore.d.ts +35 -0
- package/lib/stores/GothamAppStore.js +70 -0
- package/lib/stories/Button.d.ts +28 -0
- package/lib/stories/Button.js +22 -0
- package/lib/stories/Header.d.ts +12 -0
- package/lib/stories/Header.js +78 -0
- package/lib/stories/Page.d.ts +3 -0
- package/lib/stories/Page.js +108 -0
- package/lib/stories/assets/accessibility.png +0 -0
- package/lib/stories/assets/accessibility.svg +5 -0
- package/lib/stories/assets/addon-library.png +0 -0
- package/lib/stories/assets/assets.png +0 -0
- package/lib/stories/assets/context.png +0 -0
- package/lib/stories/assets/discord.svg +15 -0
- package/lib/stories/assets/docs.png +0 -0
- package/lib/stories/assets/figma-plugin.png +0 -0
- package/lib/stories/assets/github.svg +3 -0
- package/lib/stories/assets/share.png +0 -0
- package/lib/stories/assets/styling.png +0 -0
- package/lib/stories/assets/testing.png +0 -0
- package/lib/stories/assets/theming.png +0 -0
- package/lib/stories/assets/tutorials.svg +12 -0
- package/lib/stories/assets/youtube.svg +4 -0
- package/lib/stories/button.css +1 -0
- package/lib/stories/header.css +1 -0
- package/lib/stories/page.css +1 -0
- package/lib/styles/chat.css +1 -0
- package/lib/styles/index.css +2 -0
- package/lib/styles/tailwind.css +1 -0
- package/lib/types/assets.d.js +2 -0
- package/lib/types/gotham.d.ts +12 -0
- package/lib/types/gotham.js +3 -0
- package/lib/types/vitest-globals.d.js +3 -0
- package/lib/utils/GothamContext.d.ts +14 -0
- package/lib/utils/GothamContext.js +14 -0
- package/lib/utils/awsRum.d.ts +23 -0
- package/lib/utils/awsRum.js +50 -0
- package/lib/utils/colorUtils.d.ts +20 -0
- package/lib/utils/colorUtils.js +499 -0
- package/lib/utils/contentUtils.d.ts +2 -0
- package/lib/utils/contentUtils.js +18 -0
- package/lib/utils/i18nUtil.d.ts +1 -0
- package/lib/utils/i18nUtil.js +7 -0
- package/lib/utils/imageUtils.d.ts +5 -0
- package/lib/utils/imageUtils.js +48 -0
- package/lib/utils/interactionAnalytics.d.ts +10 -0
- package/lib/utils/interactionAnalytics.js +142 -0
- package/lib/utils/navEventQueue.d.ts +6 -0
- package/lib/utils/navEventQueue.js +50 -0
- package/lib/utils/refUtils.d.ts +2 -0
- package/lib/utils/refUtils.js +11 -0
- package/lib/utils/routeUtils.d.ts +12 -0
- package/lib/utils/routeUtils.js +109 -0
- package/lib/utils/sizeUtils.d.ts +5 -0
- package/lib/utils/sizeUtils.js +6 -0
- package/lib/utils/storyInteractions.d.ts +6 -0
- package/lib/utils/storyInteractions.js +45 -0
- package/lib/utils/storyUtils.d.ts +1 -0
- package/lib/utils/storyUtils.js +11 -0
- package/lib/utils/testUtils.d.ts +3 -0
- package/lib/utils/testUtils.js +56 -0
- package/lib/utils/timer.d.ts +21 -0
- package/lib/utils/timer.js +38 -0
- package/lib/utils/useBreakpoint.d.ts +6 -0
- package/lib/utils/useBreakpoint.js +56 -0
- package/lib/utils/viewPerformance.d.ts +34 -0
- package/lib/utils/viewPerformance.js +103 -0
- package/lib/utils/viewUtils.d.ts +9 -0
- package/lib/utils/viewUtils.js +44 -0
- package/lib/views/AuthSignInView/AuthSignInView.d.ts +20 -0
- package/lib/views/AuthSignInView/AuthSignInView.js +107 -0
- package/lib/views/AuthSignInView/AuthSignInView.stories.js +29 -0
- package/lib/views/AuthSignUpView/AuthSignUpView.d.ts +21 -0
- package/lib/views/AuthSignUpView/AuthSignUpView.js +146 -0
- package/lib/views/AuthSignUpView/AuthSignUpView.stories.js +30 -0
- package/lib/views/AuthView/AuthView.d.ts +16 -0
- package/lib/views/AuthView/AuthView.js +60 -0
- package/lib/views/AuthView/AuthView.stories.js +34 -0
- package/lib/views/DefaultView/DefaultView.d.ts +5 -0
- package/lib/views/DefaultView/DefaultView.js +134 -0
- package/lib/views/Gotham/Gotham.d.ts +44 -0
- package/lib/views/Gotham/Gotham.js +24 -0
- package/lib/views/Gotham/Gotham.stories.js +31 -0
- package/lib/views/Gotham/GothamListeners.d.ts +0 -0
- package/lib/views/Gotham/GothamListeners.js +2 -0
- package/lib/views/Gotham/GothamProvider.d.ts +43 -0
- package/lib/views/Gotham/GothamProvider.js +217 -0
- package/lib/views/Gotham/GothamRoot.d.ts +6 -0
- package/lib/views/Gotham/GothamRoot.js +69 -0
- package/lib/views/HomeView/HomeView.d.ts +10 -0
- package/lib/views/HomeView/HomeView.js +134 -0
- package/lib/views/LoaderView/LoaderView.d.ts +8 -0
- package/lib/views/LoaderView/LoaderView.js +30 -0
- package/lib/views/MenuView/MenuView.d.ts +13 -0
- package/lib/views/MenuView/MenuView.js +305 -0
- package/lib/views/NotFoundView/NotFoundView.d.ts +2 -0
- package/lib/views/NotFoundView/NotFoundView.js +12 -0
- package/lib/views/index.d.ts +11 -0
- package/lib/views/index.js +13 -0
- package/package.json +202 -0
- package/styles/tailwind.css +1 -0
|
@@ -0,0 +1,764 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '@nlabs/utils';
|
|
3
|
+
import { memo, useMemo, useState } from 'react';
|
|
4
|
+
import { Check, Minus, Plus, X } from '../../icons/index.js';
|
|
5
|
+
const toneClasses = {
|
|
6
|
+
dark: 'bg-gray-950 text-white',
|
|
7
|
+
default: 'bg-white text-gray-900 dark:bg-gray-900 dark:text-white',
|
|
8
|
+
gradient: 'bg-white dark:bg-gray-900'
|
|
9
|
+
};
|
|
10
|
+
const headerToneClasses = {
|
|
11
|
+
dark: {
|
|
12
|
+
description: 'text-gray-300',
|
|
13
|
+
eyebrow: 'text-primary-dark-300',
|
|
14
|
+
title: 'text-white'
|
|
15
|
+
},
|
|
16
|
+
default: {
|
|
17
|
+
description: 'text-gray-600 dark:text-gray-400',
|
|
18
|
+
eyebrow: 'text-primary dark:text-primary-dark-300',
|
|
19
|
+
title: 'text-gray-900 dark:text-white'
|
|
20
|
+
},
|
|
21
|
+
gradient: {
|
|
22
|
+
description: 'text-gray-600 dark:text-gray-400',
|
|
23
|
+
eyebrow: 'text-primary dark:text-primary-dark-300',
|
|
24
|
+
title: 'text-gray-900 dark:text-white'
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
const frequencyShellClasses = {
|
|
28
|
+
dark: 'bg-white/5 ring-1 ring-white/10',
|
|
29
|
+
default: 'ring-1 ring-border bg-background',
|
|
30
|
+
gradient: 'ring-1 ring-border bg-background'
|
|
31
|
+
};
|
|
32
|
+
const frequencyItemClasses = {
|
|
33
|
+
dark: 'has-checked:bg-primary-dark text-gray-300 has-checked:text-white',
|
|
34
|
+
default: 'has-checked:bg-primary text-gray-500 has-checked:text-white dark:text-gray-400 dark:has-checked:bg-primary-dark',
|
|
35
|
+
gradient: 'has-checked:bg-primary text-gray-500 has-checked:text-white dark:text-gray-400 dark:has-checked:bg-primary-dark'
|
|
36
|
+
};
|
|
37
|
+
const cardToneClasses = {
|
|
38
|
+
dark: {
|
|
39
|
+
contrast: {
|
|
40
|
+
body: 'bg-white/5 ring-1 ring-white/10',
|
|
41
|
+
cta: 'bg-white/10 text-white ring-1 ring-white/10 hover:bg-white/20',
|
|
42
|
+
featuredBody: 'bg-white text-gray-900 shadow-2xl ring-1 ring-black/5 dark:bg-gray-800 dark:text-white dark:ring-white/10 dark:shadow-none',
|
|
43
|
+
featuredCta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
44
|
+
muted: 'text-gray-300',
|
|
45
|
+
title: 'text-white'
|
|
46
|
+
},
|
|
47
|
+
default: {
|
|
48
|
+
body: 'bg-white/5 ring-1 ring-white/10',
|
|
49
|
+
cta: 'bg-white/10 text-white ring-1 ring-white/10 hover:bg-white/20',
|
|
50
|
+
featuredBody: 'bg-gray-900 ring-1 ring-gray-900 shadow-2xl dark:bg-gray-800 dark:ring-white/10 dark:shadow-none',
|
|
51
|
+
featuredCta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
52
|
+
muted: 'text-gray-300',
|
|
53
|
+
title: 'text-white'
|
|
54
|
+
},
|
|
55
|
+
solid: {
|
|
56
|
+
body: 'bg-gray-900 ring-1 ring-white/10',
|
|
57
|
+
cta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
58
|
+
featuredBody: 'bg-primary-dark ring-2 ring-primary-dark-300 shadow-2xl',
|
|
59
|
+
featuredCta: 'bg-white text-gray-900 hover:bg-gray-100',
|
|
60
|
+
muted: 'text-gray-300',
|
|
61
|
+
title: 'text-white'
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
default: {
|
|
65
|
+
contrast: {
|
|
66
|
+
body: 'bg-white/70 ring-1 ring-black/10 dark:bg-white/5 dark:ring-white/10',
|
|
67
|
+
cta: 'bg-white text-primary ring-1 ring-primary/20 hover:ring-primary/40 dark:bg-white/10 dark:text-white dark:ring-white/10 dark:hover:bg-white/20',
|
|
68
|
+
featuredBody: 'bg-gray-900 text-white shadow-2xl ring-1 ring-gray-900/10 dark:bg-gray-800 dark:ring-white/10 dark:shadow-none',
|
|
69
|
+
featuredCta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
70
|
+
muted: 'text-gray-600 dark:text-gray-300',
|
|
71
|
+
title: 'text-gray-900 dark:text-white'
|
|
72
|
+
},
|
|
73
|
+
default: {
|
|
74
|
+
body: 'bg-white ring-1 ring-border dark:bg-gray-800/50 dark:ring-white/10',
|
|
75
|
+
cta: 'bg-white text-primary ring-1 ring-primary/20 hover:ring-primary/40 dark:bg-white/10 dark:text-white dark:ring-white/10 dark:hover:bg-white/20',
|
|
76
|
+
featuredBody: 'bg-white ring-2 ring-primary shadow-xl dark:bg-gray-800/50 dark:ring-primary-dark-300 dark:shadow-none',
|
|
77
|
+
featuredCta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
78
|
+
muted: 'text-gray-600 dark:text-gray-300',
|
|
79
|
+
title: 'text-gray-900 dark:text-white'
|
|
80
|
+
},
|
|
81
|
+
solid: {
|
|
82
|
+
body: 'bg-white ring-1 ring-border shadow-lg dark:bg-gray-800/50 dark:ring-white/10 dark:shadow-none',
|
|
83
|
+
cta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
84
|
+
featuredBody: 'bg-white ring-2 ring-primary shadow-2xl dark:bg-gray-800 dark:ring-primary-dark-300 dark:shadow-none',
|
|
85
|
+
featuredCta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
86
|
+
muted: 'text-gray-600 dark:text-gray-300',
|
|
87
|
+
title: 'text-gray-900 dark:text-white'
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
gradient: {
|
|
91
|
+
contrast: {
|
|
92
|
+
body: 'bg-white/75 ring-1 ring-black/10 dark:bg-white/5 dark:ring-white/10',
|
|
93
|
+
cta: 'bg-white text-primary ring-1 ring-primary/20 hover:ring-primary/40 dark:bg-white/10 dark:text-white dark:ring-white/10 dark:hover:bg-white/20',
|
|
94
|
+
featuredBody: 'bg-gray-900 text-white shadow-2xl ring-1 ring-gray-900/10 dark:bg-gray-800 dark:ring-white/10 dark:shadow-none',
|
|
95
|
+
featuredCta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
96
|
+
muted: 'text-gray-600 dark:text-gray-300',
|
|
97
|
+
title: 'text-gray-900 dark:text-white'
|
|
98
|
+
},
|
|
99
|
+
default: {
|
|
100
|
+
body: 'bg-white ring-1 ring-border dark:bg-gray-800/50 dark:ring-white/10',
|
|
101
|
+
cta: 'bg-white text-primary ring-1 ring-primary/20 hover:ring-primary/40 dark:bg-white/10 dark:text-white dark:ring-white/10 dark:hover:bg-white/20',
|
|
102
|
+
featuredBody: 'bg-white shadow-xl ring-2 ring-primary dark:bg-gray-800/50 dark:ring-primary-dark-300 dark:shadow-none',
|
|
103
|
+
featuredCta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
104
|
+
muted: 'text-gray-600 dark:text-gray-300',
|
|
105
|
+
title: 'text-gray-900 dark:text-white'
|
|
106
|
+
},
|
|
107
|
+
solid: {
|
|
108
|
+
body: 'bg-white ring-1 ring-border shadow-lg dark:bg-gray-800/50 dark:ring-white/10 dark:shadow-none',
|
|
109
|
+
cta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
110
|
+
featuredBody: 'bg-white shadow-2xl ring-2 ring-primary dark:bg-gray-800 dark:ring-primary-dark-300 dark:shadow-none',
|
|
111
|
+
featuredCta: 'bg-primary text-white hover:bg-primary-700 dark:bg-primary-dark dark:hover:bg-primary-dark-300',
|
|
112
|
+
muted: 'text-gray-600 dark:text-gray-300',
|
|
113
|
+
title: 'text-gray-900 dark:text-white'
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const featuredTextClasses = (tone, cardStyle)=>{
|
|
118
|
+
const lightFeaturedCard = tone === 'dark' && cardStyle === 'contrast' || (tone === 'default' || tone === 'gradient') && (cardStyle === 'default' || cardStyle === 'solid');
|
|
119
|
+
return lightFeaturedCard ? {
|
|
120
|
+
badge: 'bg-primary/10 text-primary dark:bg-primary-dark-300/10 dark:text-primary-dark-300',
|
|
121
|
+
icon: 'text-primary dark:text-primary-dark-300',
|
|
122
|
+
muted: 'text-gray-600 dark:text-gray-300',
|
|
123
|
+
title: 'text-gray-900 dark:text-white'
|
|
124
|
+
} : {
|
|
125
|
+
badge: 'bg-white/10 text-white dark:bg-primary-dark-300/15 dark:text-primary-dark-300',
|
|
126
|
+
icon: 'text-primary-dark-300',
|
|
127
|
+
muted: 'text-gray-300 dark:text-gray-300',
|
|
128
|
+
title: 'text-white dark:text-white'
|
|
129
|
+
};
|
|
130
|
+
};
|
|
131
|
+
const comparisonPanelToneClasses = {
|
|
132
|
+
dark: 'bg-gray-900/60 border-white/10',
|
|
133
|
+
default: 'bg-white border-border dark:bg-gray-800/50 dark:border-white/10',
|
|
134
|
+
gradient: 'bg-white border-border dark:bg-gray-800/50 dark:border-white/10'
|
|
135
|
+
};
|
|
136
|
+
const comparisonGridClasses = {
|
|
137
|
+
1: 'lg:grid-cols-1',
|
|
138
|
+
2: 'lg:grid-cols-2',
|
|
139
|
+
3: 'lg:grid-cols-3',
|
|
140
|
+
4: 'md:grid-cols-2 xl:grid-cols-4'
|
|
141
|
+
};
|
|
142
|
+
const comparisonColClasses = {
|
|
143
|
+
1: 'w-full',
|
|
144
|
+
2: 'w-1/2',
|
|
145
|
+
3: 'w-1/3',
|
|
146
|
+
4: 'w-1/4'
|
|
147
|
+
};
|
|
148
|
+
const gradientDecoration = /*#__PURE__*/ _jsx("div", {
|
|
149
|
+
"aria-hidden": "true",
|
|
150
|
+
className: "pointer-events-none absolute inset-x-0 top-0 -z-10 overflow-hidden blur-3xl",
|
|
151
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
152
|
+
className: "mx-auto aspect-[1155/678] w-[72rem] bg-linear-to-tr from-primary/25 via-secondary/20 to-primary-dark/25 opacity-70 dark:opacity-40",
|
|
153
|
+
style: {
|
|
154
|
+
clipPath: 'polygon(74.1% 44.1%,100% 61.6%,97.5% 26.9%,85.5% 0.1%,80.7% 2%,72.5% 32.5%,60.2% 62.4%,52.4% 68.1%,47.5% 58.3%,45.2% 34.5%,27.5% 76.7%,0.1% 64.9%,17.9% 100%,27.6% 76.8%,76.1% 97.7%,74.1% 44.1%)'
|
|
155
|
+
}
|
|
156
|
+
})
|
|
157
|
+
});
|
|
158
|
+
const getDefaultFrequency = (frequencies, tiers, defaultFrequency)=>{
|
|
159
|
+
if (defaultFrequency) {
|
|
160
|
+
return defaultFrequency;
|
|
161
|
+
}
|
|
162
|
+
if (frequencies?.[0]?.value) {
|
|
163
|
+
return frequencies[0].value;
|
|
164
|
+
}
|
|
165
|
+
const firstPrice = tiers?.find((tier)=>typeof tier.price !== 'string' && Object.keys(tier.price).length > 0)?.price;
|
|
166
|
+
if (firstPrice && typeof firstPrice !== 'string') {
|
|
167
|
+
return Object.keys(firstPrice)[0] ?? 'monthly';
|
|
168
|
+
}
|
|
169
|
+
return 'monthly';
|
|
170
|
+
};
|
|
171
|
+
const getPriceForTier = (tier, activeFrequency)=>{
|
|
172
|
+
if (typeof tier.price === 'string') {
|
|
173
|
+
return tier.price;
|
|
174
|
+
}
|
|
175
|
+
return tier.price[activeFrequency] ?? Object.values(tier.price)[0] ?? '';
|
|
176
|
+
};
|
|
177
|
+
const getPriceSuffixForTier = (tier, frequencies, activeFrequency)=>{
|
|
178
|
+
if (typeof tier.price === 'string' && typeof tier.priceSuffix === 'string') {
|
|
179
|
+
return tier.priceSuffix;
|
|
180
|
+
}
|
|
181
|
+
if (tier.priceSuffix && typeof tier.priceSuffix !== 'string') {
|
|
182
|
+
return tier.priceSuffix[activeFrequency] ?? Object.values(tier.priceSuffix)[0] ?? '';
|
|
183
|
+
}
|
|
184
|
+
return frequencies?.find((frequency)=>frequency.value === activeFrequency)?.priceSuffix ?? '';
|
|
185
|
+
};
|
|
186
|
+
const renderTierList = (tier, featured, featuredText)=>{
|
|
187
|
+
if (tier.highlights?.length) {
|
|
188
|
+
return /*#__PURE__*/ _jsx("ul", {
|
|
189
|
+
className: "mt-8 space-y-3 text-sm/6",
|
|
190
|
+
role: "list",
|
|
191
|
+
children: tier.highlights.map((highlight)=>/*#__PURE__*/ _jsxs("li", {
|
|
192
|
+
className: cn('group flex items-start gap-3', highlight.disabled ? 'text-gray-400 dark:text-gray-500' : featured ? featuredText.muted : 'text-gray-600 dark:text-gray-300'),
|
|
193
|
+
children: [
|
|
194
|
+
/*#__PURE__*/ _jsx("span", {
|
|
195
|
+
className: "inline-flex h-6 items-center",
|
|
196
|
+
children: highlight.disabled ? /*#__PURE__*/ _jsx(Minus, {
|
|
197
|
+
"aria-hidden": "true",
|
|
198
|
+
className: "size-4 text-gray-400 dark:text-gray-500"
|
|
199
|
+
}) : /*#__PURE__*/ _jsx(Plus, {
|
|
200
|
+
"aria-hidden": "true",
|
|
201
|
+
className: cn('size-4', featured ? featuredText.icon : 'text-primary dark:text-primary-dark-300')
|
|
202
|
+
})
|
|
203
|
+
}),
|
|
204
|
+
highlight.description
|
|
205
|
+
]
|
|
206
|
+
}, highlight.description))
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
if (!tier.features?.length) {
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
return /*#__PURE__*/ _jsx("ul", {
|
|
213
|
+
className: "mt-8 space-y-3 text-sm/6",
|
|
214
|
+
role: "list",
|
|
215
|
+
children: tier.features.map((feature)=>/*#__PURE__*/ _jsxs("li", {
|
|
216
|
+
className: cn('flex gap-3', featured ? featuredText.muted : 'text-gray-600 dark:text-gray-300'),
|
|
217
|
+
children: [
|
|
218
|
+
/*#__PURE__*/ _jsx(Check, {
|
|
219
|
+
"aria-hidden": "true",
|
|
220
|
+
className: cn('mt-0.5 size-4 shrink-0', featured ? featuredText.icon : 'text-primary dark:text-primary-dark-300')
|
|
221
|
+
}),
|
|
222
|
+
/*#__PURE__*/ _jsx("span", {
|
|
223
|
+
children: feature
|
|
224
|
+
})
|
|
225
|
+
]
|
|
226
|
+
}, feature))
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
const PricingHeader = ({ description, eyebrow, title, tone })=>{
|
|
230
|
+
if (!eyebrow && !title && !description) {
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
234
|
+
className: "mx-auto max-w-4xl text-center",
|
|
235
|
+
children: [
|
|
236
|
+
eyebrow ? /*#__PURE__*/ _jsx("h2", {
|
|
237
|
+
className: cn('text-base/7 font-semibold', headerToneClasses[tone ?? 'default'].eyebrow),
|
|
238
|
+
children: eyebrow
|
|
239
|
+
}) : null,
|
|
240
|
+
title ? /*#__PURE__*/ _jsx("p", {
|
|
241
|
+
className: cn('mt-2 text-5xl font-semibold tracking-tight text-balance sm:text-6xl', headerToneClasses[tone ?? 'default'].title),
|
|
242
|
+
children: title
|
|
243
|
+
}) : null,
|
|
244
|
+
description ? /*#__PURE__*/ _jsx("p", {
|
|
245
|
+
className: cn('mx-auto mt-6 max-w-2xl text-center text-lg font-medium text-pretty sm:text-xl/8', headerToneClasses[tone ?? 'default'].description),
|
|
246
|
+
children: description
|
|
247
|
+
}) : null
|
|
248
|
+
]
|
|
249
|
+
});
|
|
250
|
+
};
|
|
251
|
+
const FrequencyToggle = ({ activeFrequency, frequencies, onChange, tone })=>/*#__PURE__*/ _jsx("div", {
|
|
252
|
+
className: "mt-16 flex justify-center",
|
|
253
|
+
children: /*#__PURE__*/ _jsx("fieldset", {
|
|
254
|
+
"aria-label": "Payment frequency",
|
|
255
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
256
|
+
className: cn('grid grid-cols-2 gap-x-1 rounded-full p-1 text-center text-xs/5 font-semibold', frequencyShellClasses[tone]),
|
|
257
|
+
children: frequencies.map((frequency)=>{
|
|
258
|
+
const checked = activeFrequency === frequency.value;
|
|
259
|
+
return /*#__PURE__*/ _jsxs("label", {
|
|
260
|
+
className: cn('relative rounded-full px-2.5 py-1 transition-colors', frequencyItemClasses[tone], checked && 'text-white'),
|
|
261
|
+
children: [
|
|
262
|
+
/*#__PURE__*/ _jsx("input", {
|
|
263
|
+
checked: checked,
|
|
264
|
+
className: "sr-only",
|
|
265
|
+
name: "pricing-frequency",
|
|
266
|
+
onChange: ()=>onChange(frequency.value),
|
|
267
|
+
type: "radio",
|
|
268
|
+
value: frequency.value
|
|
269
|
+
}),
|
|
270
|
+
/*#__PURE__*/ _jsx("span", {
|
|
271
|
+
children: frequency.label
|
|
272
|
+
})
|
|
273
|
+
]
|
|
274
|
+
}, frequency.value);
|
|
275
|
+
})
|
|
276
|
+
})
|
|
277
|
+
})
|
|
278
|
+
});
|
|
279
|
+
const GridPricing = ({ activeFrequency, cardStyle, extraOffer, frequencies, tone, tiers })=>{
|
|
280
|
+
const gridColsClass = tiers.length >= 4 ? 'md:grid-cols-2 xl:grid-cols-4' : tiers.length === 3 ? 'lg:grid-cols-3' : tiers.length === 2 ? 'lg:grid-cols-2 lg:max-w-4xl' : 'max-w-2xl';
|
|
281
|
+
const cardTokens = cardToneClasses[tone][cardStyle];
|
|
282
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
283
|
+
className: "mt-10",
|
|
284
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
285
|
+
className: cn('mx-auto grid max-w-md grid-cols-1 gap-8', gridColsClass),
|
|
286
|
+
children: [
|
|
287
|
+
tiers.map((tier)=>{
|
|
288
|
+
const featured = Boolean(tier.featured);
|
|
289
|
+
const featuredText = featuredTextClasses(tone, cardStyle);
|
|
290
|
+
const price = getPriceForTier(tier, activeFrequency);
|
|
291
|
+
const suffix = getPriceSuffixForTier(tier, frequencies, activeFrequency);
|
|
292
|
+
return /*#__PURE__*/ _jsxs("div", {
|
|
293
|
+
className: cn('flex flex-col justify-between rounded-3xl p-8 xl:p-10', featured ? cardTokens.featuredBody : cardTokens.body),
|
|
294
|
+
"data-featured": featured ? 'true' : undefined,
|
|
295
|
+
children: [
|
|
296
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
297
|
+
children: [
|
|
298
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
299
|
+
className: "flex items-center justify-between gap-4",
|
|
300
|
+
children: [
|
|
301
|
+
/*#__PURE__*/ _jsx("h3", {
|
|
302
|
+
className: cn('text-lg/8 font-semibold', featured ? featuredText.title : cardTokens.title),
|
|
303
|
+
id: tier.id,
|
|
304
|
+
children: tier.name
|
|
305
|
+
}),
|
|
306
|
+
tier.badge ? /*#__PURE__*/ _jsx("span", {
|
|
307
|
+
className: cn('rounded-full px-2.5 py-1 text-xs/5 font-semibold', featured ? featuredText.badge : 'bg-primary/10 text-primary dark:bg-primary-dark-300/10 dark:text-primary-dark-300'),
|
|
308
|
+
children: tier.badge
|
|
309
|
+
}) : null
|
|
310
|
+
]
|
|
311
|
+
}),
|
|
312
|
+
tier.description ? /*#__PURE__*/ _jsx("p", {
|
|
313
|
+
className: cn('mt-4 text-sm/6', featured ? featuredText.muted : cardTokens.muted),
|
|
314
|
+
children: tier.description
|
|
315
|
+
}) : null,
|
|
316
|
+
/*#__PURE__*/ _jsxs("p", {
|
|
317
|
+
className: "mt-6 flex items-baseline gap-x-2",
|
|
318
|
+
children: [
|
|
319
|
+
/*#__PURE__*/ _jsx("span", {
|
|
320
|
+
className: cn('text-4xl font-semibold tracking-tight', featured ? featuredText.title : cardTokens.title),
|
|
321
|
+
children: price
|
|
322
|
+
}),
|
|
323
|
+
suffix ? /*#__PURE__*/ _jsx("span", {
|
|
324
|
+
className: cn('text-sm/6 font-semibold', featured ? featuredText.muted : cardTokens.muted),
|
|
325
|
+
children: suffix
|
|
326
|
+
}) : null
|
|
327
|
+
]
|
|
328
|
+
}),
|
|
329
|
+
tier.priceCaption ? /*#__PURE__*/ _jsx("p", {
|
|
330
|
+
className: cn('mt-3 text-sm/6', featured ? featuredText.muted : cardTokens.muted),
|
|
331
|
+
children: tier.priceCaption
|
|
332
|
+
}) : null,
|
|
333
|
+
renderTierList(tier, featured, featuredText)
|
|
334
|
+
]
|
|
335
|
+
}),
|
|
336
|
+
tier.href && tier.ctaLabel ? /*#__PURE__*/ _jsx("a", {
|
|
337
|
+
"aria-describedby": tier.id,
|
|
338
|
+
className: cn('mt-8 block rounded-md px-3.5 py-2.5 text-center text-sm/6 font-semibold focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary dark:focus-visible:outline-primary-dark-300', featured ? cardTokens.featuredCta : cardTokens.cta),
|
|
339
|
+
href: tier.href,
|
|
340
|
+
children: tier.ctaLabel
|
|
341
|
+
}) : null,
|
|
342
|
+
tier.ctaSubtitle ? /*#__PURE__*/ _jsx("p", {
|
|
343
|
+
className: cn('mt-3 text-center text-xs/5', featured ? featuredText.muted : cardTokens.muted),
|
|
344
|
+
children: tier.ctaSubtitle
|
|
345
|
+
}) : null
|
|
346
|
+
]
|
|
347
|
+
}, tier.id);
|
|
348
|
+
}),
|
|
349
|
+
extraOffer ? /*#__PURE__*/ _jsxs("div", {
|
|
350
|
+
className: cn('flex flex-col items-start gap-6 rounded-3xl p-8 ring-1 sm:p-10', tiers.length > 1 ? 'lg:col-span-full lg:flex-row lg:items-center' : '', tone === 'dark' ? 'bg-white/5 ring-white/10' : 'bg-transparent ring-border dark:bg-white/5 dark:ring-white/10'),
|
|
351
|
+
children: [
|
|
352
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
353
|
+
className: "min-w-0 flex-1",
|
|
354
|
+
children: [
|
|
355
|
+
/*#__PURE__*/ _jsx("h3", {
|
|
356
|
+
className: "text-base/7 font-semibold text-primary dark:text-primary-dark-300",
|
|
357
|
+
children: extraOffer.title
|
|
358
|
+
}),
|
|
359
|
+
extraOffer.description ? /*#__PURE__*/ _jsx("p", {
|
|
360
|
+
className: cn('mt-1 text-base/7', tone === 'dark' ? 'text-gray-300' : 'text-gray-600 dark:text-gray-300'),
|
|
361
|
+
children: extraOffer.description
|
|
362
|
+
}) : null
|
|
363
|
+
]
|
|
364
|
+
}),
|
|
365
|
+
/*#__PURE__*/ _jsx("a", {
|
|
366
|
+
className: cn('rounded-md px-3.5 py-2 text-sm/6 font-semibold', tone === 'dark' ? 'bg-white/10 text-white ring-1 ring-white/10 hover:bg-white/20' : 'bg-white text-primary ring-1 ring-primary/20 hover:ring-primary/40 dark:bg-white/10 dark:text-white dark:ring-white/10 dark:hover:bg-white/20'),
|
|
367
|
+
href: extraOffer.ctaHref,
|
|
368
|
+
children: extraOffer.ctaLabel
|
|
369
|
+
})
|
|
370
|
+
]
|
|
371
|
+
}) : null
|
|
372
|
+
]
|
|
373
|
+
})
|
|
374
|
+
});
|
|
375
|
+
};
|
|
376
|
+
const SinglePricing = ({ singleOffer, tone })=>/*#__PURE__*/ _jsxs("div", {
|
|
377
|
+
className: "mx-auto mt-16 max-w-5xl rounded-3xl ring-1 ring-border lg:flex dark:bg-gray-800/50 dark:ring-white/10",
|
|
378
|
+
children: [
|
|
379
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
380
|
+
className: "p-8 sm:p-10 lg:flex-auto",
|
|
381
|
+
children: [
|
|
382
|
+
/*#__PURE__*/ _jsx("h3", {
|
|
383
|
+
className: "text-3xl font-semibold tracking-tight text-gray-900 dark:text-white",
|
|
384
|
+
children: singleOffer.title
|
|
385
|
+
}),
|
|
386
|
+
singleOffer.description ? /*#__PURE__*/ _jsx("p", {
|
|
387
|
+
className: "mt-6 text-base/7 text-gray-600 dark:text-gray-300",
|
|
388
|
+
children: singleOffer.description
|
|
389
|
+
}) : null,
|
|
390
|
+
singleOffer.features?.length ? /*#__PURE__*/ _jsxs(_Fragment, {
|
|
391
|
+
children: [
|
|
392
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
393
|
+
className: "mt-10 flex items-center gap-x-4",
|
|
394
|
+
children: [
|
|
395
|
+
/*#__PURE__*/ _jsx("h4", {
|
|
396
|
+
className: "flex-none text-sm/6 font-semibold text-primary dark:text-primary-dark-300",
|
|
397
|
+
children: singleOffer.featureLabel ?? 'What\'s included'
|
|
398
|
+
}),
|
|
399
|
+
/*#__PURE__*/ _jsx("div", {
|
|
400
|
+
className: "h-px flex-auto bg-gray-100 dark:bg-white/10"
|
|
401
|
+
})
|
|
402
|
+
]
|
|
403
|
+
}),
|
|
404
|
+
/*#__PURE__*/ _jsx("ul", {
|
|
405
|
+
className: "mt-8 grid grid-cols-1 gap-4 text-sm/6 text-gray-600 sm:grid-cols-2 sm:gap-6 dark:text-gray-300",
|
|
406
|
+
role: "list",
|
|
407
|
+
children: singleOffer.features.map((feature)=>/*#__PURE__*/ _jsxs("li", {
|
|
408
|
+
className: "flex gap-3",
|
|
409
|
+
children: [
|
|
410
|
+
/*#__PURE__*/ _jsx(Check, {
|
|
411
|
+
"aria-hidden": "true",
|
|
412
|
+
className: "mt-0.5 size-4 shrink-0 text-primary dark:text-primary-dark-300"
|
|
413
|
+
}),
|
|
414
|
+
/*#__PURE__*/ _jsx("span", {
|
|
415
|
+
children: feature
|
|
416
|
+
})
|
|
417
|
+
]
|
|
418
|
+
}, feature))
|
|
419
|
+
})
|
|
420
|
+
]
|
|
421
|
+
}) : null
|
|
422
|
+
]
|
|
423
|
+
}),
|
|
424
|
+
/*#__PURE__*/ _jsx("div", {
|
|
425
|
+
className: "-mt-2 p-2 lg:mt-0 lg:w-full lg:max-w-md lg:shrink-0",
|
|
426
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
427
|
+
className: cn('rounded-2xl py-10 text-center ring-1 lg:flex lg:flex-col lg:justify-center lg:py-16', tone === 'dark' ? 'bg-gray-900 ring-white/10' : 'bg-gray-50 ring-gray-900/5 dark:bg-gray-900 dark:ring-white/10'),
|
|
428
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
429
|
+
className: "mx-auto max-w-xs px-8",
|
|
430
|
+
children: [
|
|
431
|
+
singleOffer.priceLabel ? /*#__PURE__*/ _jsx("p", {
|
|
432
|
+
className: "text-base font-semibold text-gray-600 dark:text-gray-400",
|
|
433
|
+
children: singleOffer.priceLabel
|
|
434
|
+
}) : null,
|
|
435
|
+
/*#__PURE__*/ _jsxs("p", {
|
|
436
|
+
className: "mt-6 flex items-baseline justify-center gap-x-2",
|
|
437
|
+
children: [
|
|
438
|
+
/*#__PURE__*/ _jsx("span", {
|
|
439
|
+
className: "text-5xl font-semibold tracking-tight text-gray-900 dark:text-white",
|
|
440
|
+
children: singleOffer.price
|
|
441
|
+
}),
|
|
442
|
+
singleOffer.priceSuffix ? /*#__PURE__*/ _jsx("span", {
|
|
443
|
+
className: "text-sm/6 font-semibold tracking-wide text-gray-600 dark:text-gray-400",
|
|
444
|
+
children: singleOffer.priceSuffix
|
|
445
|
+
}) : null
|
|
446
|
+
]
|
|
447
|
+
}),
|
|
448
|
+
/*#__PURE__*/ _jsx("a", {
|
|
449
|
+
className: "mt-10 block w-full rounded-md bg-primary px-3 py-2 text-center text-sm font-semibold text-white hover:bg-primary-700 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary dark:bg-primary-dark dark:hover:bg-primary-dark-300",
|
|
450
|
+
href: singleOffer.ctaHref,
|
|
451
|
+
children: singleOffer.ctaLabel
|
|
452
|
+
}),
|
|
453
|
+
singleOffer.note ? /*#__PURE__*/ _jsx("p", {
|
|
454
|
+
className: "mt-6 text-xs/5 text-gray-600 dark:text-gray-400",
|
|
455
|
+
children: singleOffer.note
|
|
456
|
+
}) : null
|
|
457
|
+
]
|
|
458
|
+
})
|
|
459
|
+
})
|
|
460
|
+
})
|
|
461
|
+
]
|
|
462
|
+
});
|
|
463
|
+
const ComparisonValue = ({ value })=>{
|
|
464
|
+
if (typeof value === 'string') {
|
|
465
|
+
return /*#__PURE__*/ _jsx("span", {
|
|
466
|
+
className: "text-sm/6 text-gray-900 dark:text-white",
|
|
467
|
+
children: value
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
if (value === true) {
|
|
471
|
+
return /*#__PURE__*/ _jsx(Check, {
|
|
472
|
+
"aria-hidden": "true",
|
|
473
|
+
className: "inline-block size-4 text-green-600 dark:text-green-500"
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
return /*#__PURE__*/ _jsx(X, {
|
|
477
|
+
"aria-hidden": "true",
|
|
478
|
+
className: "inline-block size-4 text-gray-400 dark:text-gray-500"
|
|
479
|
+
});
|
|
480
|
+
};
|
|
481
|
+
const ComparisonPricing = ({ activeFrequency, cardStyle, comparisonSections, frequencies, logos, tone, tiers })=>{
|
|
482
|
+
const [activeMobileTierId, setActiveMobileTierId] = useState(tiers[0]?.id ?? '');
|
|
483
|
+
const activeMobileTier = tiers.find((tier)=>tier.id === activeMobileTierId) ?? tiers[0];
|
|
484
|
+
const cardTokens = cardToneClasses[tone][cardStyle];
|
|
485
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
486
|
+
children: [
|
|
487
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
488
|
+
className: cn('relative mt-10', tone === 'gradient' && 'pt-6'),
|
|
489
|
+
children: [
|
|
490
|
+
tone === 'gradient' ? /*#__PURE__*/ _jsx("div", {
|
|
491
|
+
"aria-hidden": "true",
|
|
492
|
+
className: "absolute inset-x-0 top-16 bottom-0 bg-[radial-gradient(circle_at_center_center,theme(colors.primary/.35),theme(colors.primary-dark/.28),transparent_72%)] dark:bg-[radial-gradient(circle_at_center_center,theme(colors.primary-dark-300/.28),theme(colors.primary-dark/.22),transparent_72%)]"
|
|
493
|
+
}) : null,
|
|
494
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
495
|
+
className: "relative mx-auto max-w-7xl",
|
|
496
|
+
children: [
|
|
497
|
+
/*#__PURE__*/ _jsx("div", {
|
|
498
|
+
className: cn('grid grid-cols-1 gap-8', comparisonGridClasses[Math.min(Math.max(tiers.length, 1), 4)]),
|
|
499
|
+
children: tiers.map((tier)=>{
|
|
500
|
+
const featured = Boolean(tier.featured);
|
|
501
|
+
const featuredText = featuredTextClasses(tone, cardStyle);
|
|
502
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
503
|
+
className: cn('rounded-4xl p-2 shadow-[inset_0_0_0_1px_rgba(255,255,255,0.08)]', tone === 'dark' ? 'bg-white/5' : 'bg-white/5 dark:bg-white/5'),
|
|
504
|
+
children: /*#__PURE__*/ _jsxs("div", {
|
|
505
|
+
className: cn('rounded-3xl p-8', featured ? cardTokens.featuredBody : cardTokens.body),
|
|
506
|
+
children: [
|
|
507
|
+
/*#__PURE__*/ _jsx("h3", {
|
|
508
|
+
className: cn('text-sm font-semibold', featured ? 'text-white dark:text-white' : 'text-primary dark:text-primary-dark-300'),
|
|
509
|
+
children: tier.name
|
|
510
|
+
}),
|
|
511
|
+
tier.description ? /*#__PURE__*/ _jsx("p", {
|
|
512
|
+
className: cn('mt-2 text-sm/6', featured ? 'text-gray-300 dark:text-gray-300' : cardTokens.muted),
|
|
513
|
+
children: tier.description
|
|
514
|
+
}) : null,
|
|
515
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
516
|
+
className: "mt-8 flex items-center gap-4",
|
|
517
|
+
children: [
|
|
518
|
+
/*#__PURE__*/ _jsx("div", {
|
|
519
|
+
className: cn('text-5xl font-semibold', featured ? 'text-white dark:text-white' : cardTokens.title),
|
|
520
|
+
children: getPriceForTier(tier, activeFrequency)
|
|
521
|
+
}),
|
|
522
|
+
getPriceSuffixForTier(tier, frequencies, activeFrequency) ? /*#__PURE__*/ _jsx("div", {
|
|
523
|
+
className: cn('text-sm', featured ? 'text-gray-300 dark:text-gray-300' : cardTokens.muted),
|
|
524
|
+
children: /*#__PURE__*/ _jsx("p", {
|
|
525
|
+
children: getPriceSuffixForTier(tier, frequencies, activeFrequency)
|
|
526
|
+
})
|
|
527
|
+
}) : null
|
|
528
|
+
]
|
|
529
|
+
}),
|
|
530
|
+
tier.href && tier.ctaLabel ? /*#__PURE__*/ _jsx("a", {
|
|
531
|
+
"aria-label": `${tier.ctaLabel} on the ${tier.name} plan`,
|
|
532
|
+
className: cn('mt-8 inline-block rounded-md px-3.5 py-2 text-center text-sm/6 font-semibold', featured ? cardTokens.featuredCta : cardTokens.cta),
|
|
533
|
+
href: tier.href,
|
|
534
|
+
children: tier.ctaLabel
|
|
535
|
+
}) : null,
|
|
536
|
+
renderTierList(tier, featured, featuredText)
|
|
537
|
+
]
|
|
538
|
+
})
|
|
539
|
+
}, tier.id);
|
|
540
|
+
})
|
|
541
|
+
}),
|
|
542
|
+
logos?.length ? /*#__PURE__*/ _jsx("div", {
|
|
543
|
+
className: "flex flex-wrap justify-center gap-x-8 gap-y-4 py-16 opacity-70 sm:py-24",
|
|
544
|
+
children: logos.map((logo)=>/*#__PURE__*/ _jsx("img", {
|
|
545
|
+
alt: logo.alt,
|
|
546
|
+
className: cn('h-8 object-contain lg:h-10', logo.className),
|
|
547
|
+
src: logo.src
|
|
548
|
+
}, `${logo.alt}-${logo.src}`))
|
|
549
|
+
}) : null
|
|
550
|
+
]
|
|
551
|
+
})
|
|
552
|
+
]
|
|
553
|
+
}),
|
|
554
|
+
comparisonSections?.length ? /*#__PURE__*/ _jsxs("div", {
|
|
555
|
+
className: "mx-auto mt-8 max-w-7xl",
|
|
556
|
+
children: [
|
|
557
|
+
/*#__PURE__*/ _jsx("div", {
|
|
558
|
+
className: "hidden lg:block",
|
|
559
|
+
children: /*#__PURE__*/ _jsxs("table", {
|
|
560
|
+
className: "w-full text-left",
|
|
561
|
+
children: [
|
|
562
|
+
/*#__PURE__*/ _jsx("caption", {
|
|
563
|
+
className: "sr-only",
|
|
564
|
+
children: "Pricing plan comparison"
|
|
565
|
+
}),
|
|
566
|
+
/*#__PURE__*/ _jsxs("colgroup", {
|
|
567
|
+
children: [
|
|
568
|
+
/*#__PURE__*/ _jsx("col", {
|
|
569
|
+
className: "w-2/5"
|
|
570
|
+
}),
|
|
571
|
+
tiers.map((tier)=>/*#__PURE__*/ _jsx("col", {
|
|
572
|
+
className: comparisonColClasses[Math.min(Math.max(tiers.length, 1), 4)]
|
|
573
|
+
}, tier.id))
|
|
574
|
+
]
|
|
575
|
+
}),
|
|
576
|
+
/*#__PURE__*/ _jsxs("thead", {
|
|
577
|
+
children: [
|
|
578
|
+
/*#__PURE__*/ _jsxs("tr", {
|
|
579
|
+
children: [
|
|
580
|
+
/*#__PURE__*/ _jsx("td", {
|
|
581
|
+
className: "p-0"
|
|
582
|
+
}),
|
|
583
|
+
tiers.map((tier)=>/*#__PURE__*/ _jsx("th", {
|
|
584
|
+
className: "p-0",
|
|
585
|
+
scope: "col",
|
|
586
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
587
|
+
className: "text-sm font-semibold text-primary dark:text-primary-dark-300",
|
|
588
|
+
children: tier.name
|
|
589
|
+
})
|
|
590
|
+
}, tier.id))
|
|
591
|
+
]
|
|
592
|
+
}),
|
|
593
|
+
/*#__PURE__*/ _jsxs("tr", {
|
|
594
|
+
children: [
|
|
595
|
+
/*#__PURE__*/ _jsx("th", {
|
|
596
|
+
className: "p-0"
|
|
597
|
+
}),
|
|
598
|
+
tiers.map((tier)=>/*#__PURE__*/ _jsx("td", {
|
|
599
|
+
className: "px-0 pt-3 pb-0",
|
|
600
|
+
children: tier.href && tier.ctaLabel ? /*#__PURE__*/ _jsx("a", {
|
|
601
|
+
className: cn('inline-block rounded-md px-2.5 py-1.5 text-sm font-semibold', tier.featured ? cardTokens.featuredCta : cardTokens.cta),
|
|
602
|
+
href: tier.href,
|
|
603
|
+
children: tier.ctaLabel
|
|
604
|
+
}) : null
|
|
605
|
+
}, tier.id))
|
|
606
|
+
]
|
|
607
|
+
})
|
|
608
|
+
]
|
|
609
|
+
}),
|
|
610
|
+
comparisonSections.map((section)=>/*#__PURE__*/ _jsxs("tbody", {
|
|
611
|
+
className: "group",
|
|
612
|
+
children: [
|
|
613
|
+
/*#__PURE__*/ _jsx("tr", {
|
|
614
|
+
children: /*#__PURE__*/ _jsx("th", {
|
|
615
|
+
className: "px-0 pt-10 pb-0 group-first-of-type:pt-5",
|
|
616
|
+
colSpan: tiers.length + 1,
|
|
617
|
+
scope: "colgroup",
|
|
618
|
+
children: /*#__PURE__*/ _jsx("div", {
|
|
619
|
+
className: "rounded-lg bg-gray-50 px-4 py-3 text-sm/6 font-semibold text-gray-950 dark:bg-gray-800/50 dark:text-white",
|
|
620
|
+
children: section.name
|
|
621
|
+
})
|
|
622
|
+
})
|
|
623
|
+
}),
|
|
624
|
+
section.features.map((feature)=>/*#__PURE__*/ _jsxs("tr", {
|
|
625
|
+
className: "border-b border-gray-100 last:border-none dark:border-white/10",
|
|
626
|
+
children: [
|
|
627
|
+
/*#__PURE__*/ _jsx("th", {
|
|
628
|
+
className: "px-0 py-4 text-sm/6 font-normal text-gray-600 dark:text-gray-300",
|
|
629
|
+
scope: "row",
|
|
630
|
+
children: feature.name
|
|
631
|
+
}),
|
|
632
|
+
tiers.map((tier)=>/*#__PURE__*/ _jsxs("td", {
|
|
633
|
+
className: "p-4 max-sm:text-center",
|
|
634
|
+
children: [
|
|
635
|
+
/*#__PURE__*/ _jsx(ComparisonValue, {
|
|
636
|
+
value: feature.tiers[tier.name]
|
|
637
|
+
}),
|
|
638
|
+
/*#__PURE__*/ _jsx("span", {
|
|
639
|
+
className: "sr-only",
|
|
640
|
+
children: typeof feature.tiers[tier.name] === 'string' ? `${feature.tiers[tier.name]} for ${tier.name}` : `${feature.tiers[tier.name] === true ? 'Included' : 'Not included'} in ${tier.name}`
|
|
641
|
+
})
|
|
642
|
+
]
|
|
643
|
+
}, tier.id))
|
|
644
|
+
]
|
|
645
|
+
}, feature.name))
|
|
646
|
+
]
|
|
647
|
+
}, section.name))
|
|
648
|
+
]
|
|
649
|
+
})
|
|
650
|
+
}),
|
|
651
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
652
|
+
className: "lg:hidden",
|
|
653
|
+
children: [
|
|
654
|
+
/*#__PURE__*/ _jsx("div", {
|
|
655
|
+
className: "flex border-b border-gray-100 dark:border-white/10",
|
|
656
|
+
children: tiers.map((tier)=>/*#__PURE__*/ _jsx("button", {
|
|
657
|
+
className: cn('flex-1 border-b py-4 text-base/8 font-medium not-focus-visible:focus:outline-none', activeMobileTier?.id === tier.id ? 'border-primary text-primary dark:border-primary-dark-300 dark:text-primary-dark-300' : 'border-transparent text-gray-500 dark:text-gray-400'),
|
|
658
|
+
onClick: ()=>setActiveMobileTierId(tier.id),
|
|
659
|
+
type: "button",
|
|
660
|
+
children: tier.name
|
|
661
|
+
}, tier.id))
|
|
662
|
+
}),
|
|
663
|
+
activeMobileTier ? /*#__PURE__*/ _jsxs("div", {
|
|
664
|
+
className: "mt-8",
|
|
665
|
+
children: [
|
|
666
|
+
activeMobileTier.href && activeMobileTier.ctaLabel ? /*#__PURE__*/ _jsx("a", {
|
|
667
|
+
className: cn('block rounded-md px-3.5 py-2.5 text-center text-sm font-semibold', activeMobileTier.featured ? cardTokens.featuredCta : cardTokens.cta),
|
|
668
|
+
href: activeMobileTier.href,
|
|
669
|
+
children: activeMobileTier.ctaLabel
|
|
670
|
+
}) : null,
|
|
671
|
+
comparisonSections.map((section)=>/*#__PURE__*/ _jsxs("div", {
|
|
672
|
+
children: [
|
|
673
|
+
/*#__PURE__*/ _jsx("div", {
|
|
674
|
+
className: cn('mt-10 rounded-lg px-6 py-3 text-sm/6 font-semibold text-gray-950 group-first-of-type:mt-5 dark:text-white', comparisonPanelToneClasses[tone]),
|
|
675
|
+
children: section.name
|
|
676
|
+
}),
|
|
677
|
+
/*#__PURE__*/ _jsx("dl", {
|
|
678
|
+
children: section.features.map((feature)=>/*#__PURE__*/ _jsxs("div", {
|
|
679
|
+
className: "grid grid-cols-2 border-b border-gray-100 py-4 last:border-none dark:border-white/10",
|
|
680
|
+
children: [
|
|
681
|
+
/*#__PURE__*/ _jsx("dt", {
|
|
682
|
+
className: "text-sm/6 font-normal text-gray-600 dark:text-gray-300",
|
|
683
|
+
children: feature.name
|
|
684
|
+
}),
|
|
685
|
+
/*#__PURE__*/ _jsx("dd", {
|
|
686
|
+
className: "text-center",
|
|
687
|
+
children: /*#__PURE__*/ _jsx(ComparisonValue, {
|
|
688
|
+
value: feature.tiers[activeMobileTier.name]
|
|
689
|
+
})
|
|
690
|
+
})
|
|
691
|
+
]
|
|
692
|
+
}, feature.name))
|
|
693
|
+
})
|
|
694
|
+
]
|
|
695
|
+
}, section.name))
|
|
696
|
+
]
|
|
697
|
+
}) : null
|
|
698
|
+
]
|
|
699
|
+
})
|
|
700
|
+
]
|
|
701
|
+
}) : null
|
|
702
|
+
]
|
|
703
|
+
});
|
|
704
|
+
};
|
|
705
|
+
const PricingComponent = ({ cardStyle = 'default', className, comparisonSections, defaultFrequency, description, eyebrow = 'Pricing', extraOffer, frequencies, logos, singleOffer, tiers = [], title, tone = 'default', variant = 'grid', ...props })=>{
|
|
706
|
+
const initialFrequency = useMemo(()=>getDefaultFrequency(frequencies, tiers, defaultFrequency), [
|
|
707
|
+
defaultFrequency,
|
|
708
|
+
frequencies,
|
|
709
|
+
tiers
|
|
710
|
+
]);
|
|
711
|
+
const [activeFrequency, setActiveFrequency] = useState(initialFrequency);
|
|
712
|
+
return /*#__PURE__*/ _jsxs("section", {
|
|
713
|
+
className: cn('relative overflow-hidden px-6 py-24 sm:py-32 lg:px-8', toneClasses[tone], className),
|
|
714
|
+
"data-slot": "pricing",
|
|
715
|
+
"data-tone": tone,
|
|
716
|
+
"data-variant": variant,
|
|
717
|
+
...props,
|
|
718
|
+
children: [
|
|
719
|
+
tone === 'gradient' ? gradientDecoration : null,
|
|
720
|
+
/*#__PURE__*/ _jsxs("div", {
|
|
721
|
+
className: "mx-auto max-w-7xl",
|
|
722
|
+
children: [
|
|
723
|
+
/*#__PURE__*/ _jsx(PricingHeader, {
|
|
724
|
+
description: description,
|
|
725
|
+
eyebrow: eyebrow,
|
|
726
|
+
title: title,
|
|
727
|
+
tone: tone
|
|
728
|
+
}),
|
|
729
|
+
frequencies?.length ? /*#__PURE__*/ _jsx(FrequencyToggle, {
|
|
730
|
+
activeFrequency: activeFrequency,
|
|
731
|
+
frequencies: frequencies,
|
|
732
|
+
onChange: setActiveFrequency,
|
|
733
|
+
tone: tone
|
|
734
|
+
}) : null,
|
|
735
|
+
variant === 'single' && singleOffer ? /*#__PURE__*/ _jsx(SinglePricing, {
|
|
736
|
+
singleOffer: singleOffer,
|
|
737
|
+
tone: tone
|
|
738
|
+
}) : null,
|
|
739
|
+
variant === 'grid' ? /*#__PURE__*/ _jsx(GridPricing, {
|
|
740
|
+
activeFrequency: activeFrequency,
|
|
741
|
+
cardStyle: cardStyle,
|
|
742
|
+
extraOffer: extraOffer,
|
|
743
|
+
frequencies: frequencies,
|
|
744
|
+
tiers: tiers,
|
|
745
|
+
tone: tone
|
|
746
|
+
}) : null,
|
|
747
|
+
variant === 'comparison' ? /*#__PURE__*/ _jsx(ComparisonPricing, {
|
|
748
|
+
activeFrequency: activeFrequency,
|
|
749
|
+
cardStyle: cardStyle,
|
|
750
|
+
comparisonSections: comparisonSections,
|
|
751
|
+
frequencies: frequencies,
|
|
752
|
+
logos: logos,
|
|
753
|
+
tiers: tiers,
|
|
754
|
+
tone: tone
|
|
755
|
+
}) : null
|
|
756
|
+
]
|
|
757
|
+
})
|
|
758
|
+
]
|
|
759
|
+
});
|
|
760
|
+
};
|
|
761
|
+
export const Pricing = /*#__PURE__*/ memo(PricingComponent);
|
|
762
|
+
Pricing.displayName = 'Pricing';
|
|
763
|
+
|
|
764
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L2dvdGhhbWpzL3NyYy9jb21wb25lbnRzL1ByaWNpbmcvUHJpY2luZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjbn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7bWVtbywgdXNlTWVtbywgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHtDaGVjaywgTWludXMsIFBsdXMsIFh9IGZyb20gJy4uLy4uL2ljb25zL2luZGV4LmpzJztcblxuaW1wb3J0IHR5cGUge0hUTUxBdHRyaWJ1dGVzLCBSZWFjdE5vZGV9IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IHR5cGUgUHJpY2luZ1ZhcmlhbnQgPSAnZ3JpZCcgfCAnc2luZ2xlJyB8ICdjb21wYXJpc29uJztcbmV4cG9ydCB0eXBlIFByaWNpbmdUb25lID0gJ2RlZmF1bHQnIHwgJ2RhcmsnIHwgJ2dyYWRpZW50JztcbmV4cG9ydCB0eXBlIFByaWNpbmdDYXJkU3R5bGUgPSAnZGVmYXVsdCcgfCAnY29udHJhc3QnIHwgJ3NvbGlkJztcblxuZXhwb3J0IGludGVyZmFjZSBQcmljaW5nRnJlcXVlbmN5IHtcbiAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJpY2VTdWZmaXg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpY2luZ0hpZ2hsaWdodCB7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgUHJpY2luZ1RpZXJWYWx1ZSA9IGJvb2xlYW4gfCBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJpY2luZ1RpZXIge1xuICByZWFkb25seSBiYWRnZT86IHN0cmluZztcbiAgcmVhZG9ubHkgY3RhTGFiZWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGN0YVN1YnRpdGxlPzogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IFJlYWN0Tm9kZTtcbiAgcmVhZG9ubHkgZmVhdHVyZWQ/OiBib29sZWFuO1xuICByZWFkb25seSBmZWF0dXJlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICByZWFkb25seSBoaWdobGlnaHRzPzogcmVhZG9ubHkgUHJpY2luZ0hpZ2hsaWdodFtdO1xuICByZWFkb25seSBocmVmPzogc3RyaW5nO1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByaWNlOiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZWFkb25seSBwcmljZUNhcHRpb24/OiBSZWFjdE5vZGU7XG4gIHJlYWRvbmx5IHByaWNlU3VmZml4Pzogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmljaW5nQ29tcGFyaXNvbkZlYXR1cmUge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRpZXJzOiBSZWNvcmQ8c3RyaW5nLCBQcmljaW5nVGllclZhbHVlPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmljaW5nQ29tcGFyaXNvblNlY3Rpb24ge1xuICByZWFkb25seSBmZWF0dXJlczogcmVhZG9ubHkgUHJpY2luZ0NvbXBhcmlzb25GZWF0dXJlW107XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmljaW5nTG9nbyB7XG4gIHJlYWRvbmx5IGFsdDogc3RyaW5nO1xuICByZWFkb25seSBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNyYzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByaWNpbmdFeHRyYU9mZmVyIHtcbiAgcmVhZG9ubHkgY3RhSHJlZjogc3RyaW5nO1xuICByZWFkb25seSBjdGFMYWJlbDogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IFJlYWN0Tm9kZTtcbiAgcmVhZG9ubHkgdGl0bGU6IFJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcmljaW5nU2luZ2xlT2ZmZXIge1xuICByZWFkb25seSBjdGFIcmVmOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGN0YUxhYmVsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogUmVhY3ROb2RlO1xuICByZWFkb25seSBmZWF0dXJlTGFiZWw/OiBSZWFjdE5vZGU7XG4gIHJlYWRvbmx5IGZlYXR1cmVzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IG5vdGU/OiBSZWFjdE5vZGU7XG4gIHJlYWRvbmx5IHByaWNlOiBSZWFjdE5vZGU7XG4gIHJlYWRvbmx5IHByaWNlTGFiZWw/OiBSZWFjdE5vZGU7XG4gIHJlYWRvbmx5IHByaWNlU3VmZml4PzogUmVhY3ROb2RlO1xuICByZWFkb25seSB0aXRsZTogUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByaWNpbmdQcm9wcyBleHRlbmRzIE9taXQ8SFRNTEF0dHJpYnV0ZXM8SFRNTEVsZW1lbnQ+LCAndGl0bGUnPiB7XG4gIHJlYWRvbmx5IGNhcmRTdHlsZT86IFByaWNpbmdDYXJkU3R5bGU7XG4gIHJlYWRvbmx5IGNvbXBhcmlzb25TZWN0aW9ucz86IHJlYWRvbmx5IFByaWNpbmdDb21wYXJpc29uU2VjdGlvbltdO1xuICByZWFkb25seSBkZWZhdWx0RnJlcXVlbmN5Pzogc3RyaW5nO1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IFJlYWN0Tm9kZTtcbiAgcmVhZG9ubHkgZXllYnJvdz86IFJlYWN0Tm9kZTtcbiAgcmVhZG9ubHkgZXh0cmFPZmZlcj86IFByaWNpbmdFeHRyYU9mZmVyO1xuICByZWFkb25seSBmcmVxdWVuY2llcz86IHJlYWRvbmx5IFByaWNpbmdGcmVxdWVuY3lbXTtcbiAgcmVhZG9ubHkgbG9nb3M/OiByZWFkb25seSBQcmljaW5nTG9nb1tdO1xuICByZWFkb25seSBzaW5nbGVPZmZlcj86IFByaWNpbmdTaW5nbGVPZmZlcjtcbiAgcmVhZG9ubHkgdGllcnM/OiByZWFkb25seSBQcmljaW5nVGllcltdO1xuICByZWFkb25seSB0aXRsZT86IFJlYWN0Tm9kZTtcbiAgcmVhZG9ubHkgdG9uZT86IFByaWNpbmdUb25lO1xuICByZWFkb25seSB2YXJpYW50PzogUHJpY2luZ1ZhcmlhbnQ7XG59XG5cbmNvbnN0IHRvbmVDbGFzc2VzOiBSZWNvcmQ8UHJpY2luZ1RvbmUsIHN0cmluZz4gPSB7XG4gIGRhcms6ICdiZy1ncmF5LTk1MCB0ZXh0LXdoaXRlJyxcbiAgZGVmYXVsdDogJ2JnLXdoaXRlIHRleHQtZ3JheS05MDAgZGFyazpiZy1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUnLFxuICBncmFkaWVudDogJ2JnLXdoaXRlIGRhcms6YmctZ3JheS05MDAnXG59O1xuXG5jb25zdCBoZWFkZXJUb25lQ2xhc3NlczogUmVjb3JkPFByaWNpbmdUb25lLCB7ZGVzY3JpcHRpb246IHN0cmluZzsgZXllYnJvdzogc3RyaW5nOyB0aXRsZTogc3RyaW5nfT4gPSB7XG4gIGRhcms6IHtcbiAgICBkZXNjcmlwdGlvbjogJ3RleHQtZ3JheS0zMDAnLFxuICAgIGV5ZWJyb3c6ICd0ZXh0LXByaW1hcnktZGFyay0zMDAnLFxuICAgIHRpdGxlOiAndGV4dC13aGl0ZSdcbiAgfSxcbiAgZGVmYXVsdDoge1xuICAgIGRlc2NyaXB0aW9uOiAndGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS00MDAnLFxuICAgIGV5ZWJyb3c6ICd0ZXh0LXByaW1hcnkgZGFyazp0ZXh0LXByaW1hcnktZGFyay0zMDAnLFxuICAgIHRpdGxlOiAndGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUnXG4gIH0sXG4gIGdyYWRpZW50OiB7XG4gICAgZGVzY3JpcHRpb246ICd0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTQwMCcsXG4gICAgZXllYnJvdzogJ3RleHQtcHJpbWFyeSBkYXJrOnRleHQtcHJpbWFyeS1kYXJrLTMwMCcsXG4gICAgdGl0bGU6ICd0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSdcbiAgfVxufTtcblxuY29uc3QgZnJlcXVlbmN5U2hlbGxDbGFzc2VzOiBSZWNvcmQ8UHJpY2luZ1RvbmUsIHN0cmluZz4gPSB7XG4gIGRhcms6ICdiZy13aGl0ZS81IHJpbmctMSByaW5nLXdoaXRlLzEwJyxcbiAgZGVmYXVsdDogJ3JpbmctMSByaW5nLWJvcmRlciBiZy1iYWNrZ3JvdW5kJyxcbiAgZ3JhZGllbnQ6ICdyaW5nLTEgcmluZy1ib3JkZXIgYmctYmFja2dyb3VuZCdcbn07XG5cbmNvbnN0IGZyZXF1ZW5jeUl0ZW1DbGFzc2VzOiBSZWNvcmQ8UHJpY2luZ1RvbmUsIHN0cmluZz4gPSB7XG4gIGRhcms6ICdoYXMtY2hlY2tlZDpiZy1wcmltYXJ5LWRhcmsgdGV4dC1ncmF5LTMwMCBoYXMtY2hlY2tlZDp0ZXh0LXdoaXRlJyxcbiAgZGVmYXVsdDogJ2hhcy1jaGVja2VkOmJnLXByaW1hcnkgdGV4dC1ncmF5LTUwMCBoYXMtY2hlY2tlZDp0ZXh0LXdoaXRlIGRhcms6dGV4dC1ncmF5LTQwMCBkYXJrOmhhcy1jaGVja2VkOmJnLXByaW1hcnktZGFyaycsXG4gIGdyYWRpZW50OiAnaGFzLWNoZWNrZWQ6YmctcHJpbWFyeSB0ZXh0LWdyYXktNTAwIGhhcy1jaGVja2VkOnRleHQtd2hpdGUgZGFyazp0ZXh0LWdyYXktNDAwIGRhcms6aGFzLWNoZWNrZWQ6YmctcHJpbWFyeS1kYXJrJ1xufTtcblxuY29uc3QgY2FyZFRvbmVDbGFzc2VzOiBSZWNvcmQ8UHJpY2luZ1RvbmUsIFJlY29yZDxQcmljaW5nQ2FyZFN0eWxlLCB7Ym9keTogc3RyaW5nOyBjdGE6IHN0cmluZzsgZmVhdHVyZWRCb2R5OiBzdHJpbmc7IGZlYXR1cmVkQ3RhOiBzdHJpbmc7IG11dGVkOiBzdHJpbmc7IHRpdGxlOiBzdHJpbmd9Pj4gPSB7XG4gIGRhcms6IHtcbiAgICBjb250cmFzdDoge1xuICAgICAgYm9keTogJ2JnLXdoaXRlLzUgcmluZy0xIHJpbmctd2hpdGUvMTAnLFxuICAgICAgY3RhOiAnYmctd2hpdGUvMTAgdGV4dC13aGl0ZSByaW5nLTEgcmluZy13aGl0ZS8xMCBob3ZlcjpiZy13aGl0ZS8yMCcsXG4gICAgICBmZWF0dXJlZEJvZHk6ICdiZy13aGl0ZSB0ZXh0LWdyYXktOTAwIHNoYWRvdy0yeGwgcmluZy0xIHJpbmctYmxhY2svNSBkYXJrOmJnLWdyYXktODAwIGRhcms6dGV4dC13aGl0ZSBkYXJrOnJpbmctd2hpdGUvMTAgZGFyazpzaGFkb3ctbm9uZScsXG4gICAgICBmZWF0dXJlZEN0YTogJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSBob3ZlcjpiZy1wcmltYXJ5LTcwMCBkYXJrOmJnLXByaW1hcnktZGFyayBkYXJrOmhvdmVyOmJnLXByaW1hcnktZGFyay0zMDAnLFxuICAgICAgbXV0ZWQ6ICd0ZXh0LWdyYXktMzAwJyxcbiAgICAgIHRpdGxlOiAndGV4dC13aGl0ZSdcbiAgICB9LFxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGJvZHk6ICdiZy13aGl0ZS81IHJpbmctMSByaW5nLXdoaXRlLzEwJyxcbiAgICAgIGN0YTogJ2JnLXdoaXRlLzEwIHRleHQtd2hpdGUgcmluZy0xIHJpbmctd2hpdGUvMTAgaG92ZXI6Ymctd2hpdGUvMjAnLFxuICAgICAgZmVhdHVyZWRCb2R5OiAnYmctZ3JheS05MDAgcmluZy0xIHJpbmctZ3JheS05MDAgc2hhZG93LTJ4bCBkYXJrOmJnLWdyYXktODAwIGRhcms6cmluZy13aGl0ZS8xMCBkYXJrOnNoYWRvdy1ub25lJyxcbiAgICAgIGZlYXR1cmVkQ3RhOiAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlIGhvdmVyOmJnLXByaW1hcnktNzAwIGRhcms6YmctcHJpbWFyeS1kYXJrIGRhcms6aG92ZXI6YmctcHJpbWFyeS1kYXJrLTMwMCcsXG4gICAgICBtdXRlZDogJ3RleHQtZ3JheS0zMDAnLFxuICAgICAgdGl0bGU6ICd0ZXh0LXdoaXRlJ1xuICAgIH0sXG4gICAgc29saWQ6IHtcbiAgICAgIGJvZHk6ICdiZy1ncmF5LTkwMCByaW5nLTEgcmluZy13aGl0ZS8xMCcsXG4gICAgICBjdGE6ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUgaG92ZXI6YmctcHJpbWFyeS03MDAgZGFyazpiZy1wcmltYXJ5LWRhcmsgZGFyazpob3ZlcjpiZy1wcmltYXJ5LWRhcmstMzAwJyxcbiAgICAgIGZlYXR1cmVkQm9keTogJ2JnLXByaW1hcnktZGFyayByaW5nLTIgcmluZy1wcmltYXJ5LWRhcmstMzAwIHNoYWRvdy0yeGwnLFxuICAgICAgZmVhdHVyZWRDdGE6ICdiZy13aGl0ZSB0ZXh0LWdyYXktOTAwIGhvdmVyOmJnLWdyYXktMTAwJyxcbiAgICAgIG11dGVkOiAndGV4dC1ncmF5LTMwMCcsXG4gICAgICB0aXRsZTogJ3RleHQtd2hpdGUnXG4gICAgfVxuICB9LFxuICBkZWZhdWx0OiB7XG4gICAgY29udHJhc3Q6IHtcbiAgICAgIGJvZHk6ICdiZy13aGl0ZS83MCByaW5nLTEgcmluZy1ibGFjay8xMCBkYXJrOmJnLXdoaXRlLzUgZGFyazpyaW5nLXdoaXRlLzEwJyxcbiAgICAgIGN0YTogJ2JnLXdoaXRlIHRleHQtcHJpbWFyeSByaW5nLTEgcmluZy1wcmltYXJ5LzIwIGhvdmVyOnJpbmctcHJpbWFyeS80MCBkYXJrOmJnLXdoaXRlLzEwIGRhcms6dGV4dC13aGl0ZSBkYXJrOnJpbmctd2hpdGUvMTAgZGFyazpob3ZlcjpiZy13aGl0ZS8yMCcsXG4gICAgICBmZWF0dXJlZEJvZHk6ICdiZy1ncmF5LTkwMCB0ZXh0LXdoaXRlIHNoYWRvdy0yeGwgcmluZy0xIHJpbmctZ3JheS05MDAvMTAgZGFyazpiZy1ncmF5LTgwMCBkYXJrOnJpbmctd2hpdGUvMTAgZGFyazpzaGFkb3ctbm9uZScsXG4gICAgICBmZWF0dXJlZEN0YTogJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSBob3ZlcjpiZy1wcmltYXJ5LTcwMCBkYXJrOmJnLXByaW1hcnktZGFyayBkYXJrOmhvdmVyOmJnLXByaW1hcnktZGFyay0zMDAnLFxuICAgICAgbXV0ZWQ6ICd0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTMwMCcsXG4gICAgICB0aXRsZTogJ3RleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlJ1xuICAgIH0sXG4gICAgZGVmYXVsdDoge1xuICAgICAgYm9keTogJ2JnLXdoaXRlIHJpbmctMSByaW5nLWJvcmRlciBkYXJrOmJnLWdyYXktODAwLzUwIGRhcms6cmluZy13aGl0ZS8xMCcsXG4gICAgICBjdGE6ICdiZy13aGl0ZSB0ZXh0LXByaW1hcnkgcmluZy0xIHJpbmctcHJpbWFyeS8yMCBob3ZlcjpyaW5nLXByaW1hcnkvNDAgZGFyazpiZy13aGl0ZS8xMCBkYXJrOnRleHQtd2hpdGUgZGFyazpyaW5nLXdoaXRlLzEwIGRhcms6aG92ZXI6Ymctd2hpdGUvMjAnLFxuICAgICAgZmVhdHVyZWRCb2R5OiAnYmctd2hpdGUgcmluZy0yIHJpbmctcHJpbWFyeSBzaGFkb3cteGwgZGFyazpiZy1ncmF5LTgwMC81MCBkYXJrOnJpbmctcHJpbWFyeS1kYXJrLTMwMCBkYXJrOnNoYWRvdy1ub25lJyxcbiAgICAgIGZlYXR1cmVkQ3RhOiAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlIGhvdmVyOmJnLXByaW1hcnktNzAwIGRhcms6YmctcHJpbWFyeS1kYXJrIGRhcms6aG92ZXI6YmctcHJpbWFyeS1kYXJrLTMwMCcsXG4gICAgICBtdXRlZDogJ3RleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwJyxcbiAgICAgIHRpdGxlOiAndGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUnXG4gICAgfSxcbiAgICBzb2xpZDoge1xuICAgICAgYm9keTogJ2JnLXdoaXRlIHJpbmctMSByaW5nLWJvcmRlciBzaGFkb3ctbGcgZGFyazpiZy1ncmF5LTgwMC81MCBkYXJrOnJpbmctd2hpdGUvMTAgZGFyazpzaGFkb3ctbm9uZScsXG4gICAgICBjdGE6ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUgaG92ZXI6YmctcHJpbWFyeS03MDAgZGFyazpiZy1wcmltYXJ5LWRhcmsgZGFyazpob3ZlcjpiZy1wcmltYXJ5LWRhcmstMzAwJyxcbiAgICAgIGZlYXR1cmVkQm9keTogJ2JnLXdoaXRlIHJpbmctMiByaW5nLXByaW1hcnkgc2hhZG93LTJ4bCBkYXJrOmJnLWdyYXktODAwIGRhcms6cmluZy1wcmltYXJ5LWRhcmstMzAwIGRhcms6c2hhZG93LW5vbmUnLFxuICAgICAgZmVhdHVyZWRDdGE6ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUgaG92ZXI6YmctcHJpbWFyeS03MDAgZGFyazpiZy1wcmltYXJ5LWRhcmsgZGFyazpob3ZlcjpiZy1wcmltYXJ5LWRhcmstMzAwJyxcbiAgICAgIG11dGVkOiAndGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS0zMDAnLFxuICAgICAgdGl0bGU6ICd0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSdcbiAgICB9XG4gIH0sXG4gIGdyYWRpZW50OiB7XG4gICAgY29udHJhc3Q6IHtcbiAgICAgIGJvZHk6ICdiZy13aGl0ZS83NSByaW5nLTEgcmluZy1ibGFjay8xMCBkYXJrOmJnLXdoaXRlLzUgZGFyazpyaW5nLXdoaXRlLzEwJyxcbiAgICAgIGN0YTogJ2JnLXdoaXRlIHRleHQtcHJpbWFyeSByaW5nLTEgcmluZy1wcmltYXJ5LzIwIGhvdmVyOnJpbmctcHJpbWFyeS80MCBkYXJrOmJnLXdoaXRlLzEwIGRhcms6dGV4dC13aGl0ZSBkYXJrOnJpbmctd2hpdGUvMTAgZGFyazpob3ZlcjpiZy13aGl0ZS8yMCcsXG4gICAgICBmZWF0dXJlZEJvZHk6ICdiZy1ncmF5LTkwMCB0ZXh0LXdoaXRlIHNoYWRvdy0yeGwgcmluZy0xIHJpbmctZ3JheS05MDAvMTAgZGFyazpiZy1ncmF5LTgwMCBkYXJrOnJpbmctd2hpdGUvMTAgZGFyazpzaGFkb3ctbm9uZScsXG4gICAgICBmZWF0dXJlZEN0YTogJ2JnLXByaW1hcnkgdGV4dC13aGl0ZSBob3ZlcjpiZy1wcmltYXJ5LTcwMCBkYXJrOmJnLXByaW1hcnktZGFyayBkYXJrOmhvdmVyOmJnLXByaW1hcnktZGFyay0zMDAnLFxuICAgICAgbXV0ZWQ6ICd0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTMwMCcsXG4gICAgICB0aXRsZTogJ3RleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlJ1xuICAgIH0sXG4gICAgZGVmYXVsdDoge1xuICAgICAgYm9keTogJ2JnLXdoaXRlIHJpbmctMSByaW5nLWJvcmRlciBkYXJrOmJnLWdyYXktODAwLzUwIGRhcms6cmluZy13aGl0ZS8xMCcsXG4gICAgICBjdGE6ICdiZy13aGl0ZSB0ZXh0LXByaW1hcnkgcmluZy0xIHJpbmctcHJpbWFyeS8yMCBob3ZlcjpyaW5nLXByaW1hcnkvNDAgZGFyazpiZy13aGl0ZS8xMCBkYXJrOnRleHQtd2hpdGUgZGFyazpyaW5nLXdoaXRlLzEwIGRhcms6aG92ZXI6Ymctd2hpdGUvMjAnLFxuICAgICAgZmVhdHVyZWRCb2R5OiAnYmctd2hpdGUgc2hhZG93LXhsIHJpbmctMiByaW5nLXByaW1hcnkgZGFyazpiZy1ncmF5LTgwMC81MCBkYXJrOnJpbmctcHJpbWFyeS1kYXJrLTMwMCBkYXJrOnNoYWRvdy1ub25lJyxcbiAgICAgIGZlYXR1cmVkQ3RhOiAnYmctcHJpbWFyeSB0ZXh0LXdoaXRlIGhvdmVyOmJnLXByaW1hcnktNzAwIGRhcms6YmctcHJpbWFyeS1kYXJrIGRhcms6aG92ZXI6YmctcHJpbWFyeS1kYXJrLTMwMCcsXG4gICAgICBtdXRlZDogJ3RleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwJyxcbiAgICAgIHRpdGxlOiAndGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUnXG4gICAgfSxcbiAgICBzb2xpZDoge1xuICAgICAgYm9keTogJ2JnLXdoaXRlIHJpbmctMSByaW5nLWJvcmRlciBzaGFkb3ctbGcgZGFyazpiZy1ncmF5LTgwMC81MCBkYXJrOnJpbmctd2hpdGUvMTAgZGFyazpzaGFkb3ctbm9uZScsXG4gICAgICBjdGE6ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUgaG92ZXI6YmctcHJpbWFyeS03MDAgZGFyazpiZy1wcmltYXJ5LWRhcmsgZGFyazpob3ZlcjpiZy1wcmltYXJ5LWRhcmstMzAwJyxcbiAgICAgIGZlYXR1cmVkQm9keTogJ2JnLXdoaXRlIHNoYWRvdy0yeGwgcmluZy0yIHJpbmctcHJpbWFyeSBkYXJrOmJnLWdyYXktODAwIGRhcms6cmluZy1wcmltYXJ5LWRhcmstMzAwIGRhcms6c2hhZG93LW5vbmUnLFxuICAgICAgZmVhdHVyZWRDdGE6ICdiZy1wcmltYXJ5IHRleHQtd2hpdGUgaG92ZXI6YmctcHJpbWFyeS03MDAgZGFyazpiZy1wcmltYXJ5LWRhcmsgZGFyazpob3ZlcjpiZy1wcmltYXJ5LWRhcmstMzAwJyxcbiAgICAgIG11dGVkOiAndGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS0zMDAnLFxuICAgICAgdGl0bGU6ICd0ZXh0LWdyYXktOTAwIGRhcms6dGV4dC13aGl0ZSdcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IGZlYXR1cmVkVGV4dENsYXNzZXMgPSAodG9uZTogUHJpY2luZ1RvbmUsIGNhcmRTdHlsZTogUHJpY2luZ0NhcmRTdHlsZSkgPT4ge1xuICBjb25zdCBsaWdodEZlYXR1cmVkQ2FyZCA9XG4gICAgKHRvbmUgPT09ICdkYXJrJyAmJiBjYXJkU3R5bGUgPT09ICdjb250cmFzdCcpIHx8XG4gICAgKCh0b25lID09PSAnZGVmYXVsdCcgfHwgdG9uZSA9PT0gJ2dyYWRpZW50JykgJiYgKGNhcmRTdHlsZSA9PT0gJ2RlZmF1bHQnIHx8IGNhcmRTdHlsZSA9PT0gJ3NvbGlkJykpO1xuXG4gIHJldHVybiBsaWdodEZlYXR1cmVkQ2FyZFxuICAgID8ge1xuICAgICAgYmFkZ2U6ICdiZy1wcmltYXJ5LzEwIHRleHQtcHJpbWFyeSBkYXJrOmJnLXByaW1hcnktZGFyay0zMDAvMTAgZGFyazp0ZXh0LXByaW1hcnktZGFyay0zMDAnLFxuICAgICAgaWNvbjogJ3RleHQtcHJpbWFyeSBkYXJrOnRleHQtcHJpbWFyeS1kYXJrLTMwMCcsXG4gICAgICBtdXRlZDogJ3RleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwJyxcbiAgICAgIHRpdGxlOiAndGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGUnXG4gICAgfVxuICAgIDoge1xuICAgICAgYmFkZ2U6ICdiZy13aGl0ZS8xMCB0ZXh0LXdoaXRlIGRhcms6YmctcHJpbWFyeS1kYXJrLTMwMC8xNSBkYXJrOnRleHQtcHJpbWFyeS1kYXJrLTMwMCcsXG4gICAgICBpY29uOiAndGV4dC1wcmltYXJ5LWRhcmstMzAwJyxcbiAgICAgIG11dGVkOiAndGV4dC1ncmF5LTMwMCBkYXJrOnRleHQtZ3JheS0zMDAnLFxuICAgICAgdGl0bGU6ICd0ZXh0LXdoaXRlIGRhcms6dGV4dC13aGl0ZSdcbiAgICB9O1xufTtcblxuY29uc3QgY29tcGFyaXNvblBhbmVsVG9uZUNsYXNzZXM6IFJlY29yZDxQcmljaW5nVG9uZSwgc3RyaW5nPiA9IHtcbiAgZGFyazogJ2JnLWdyYXktOTAwLzYwIGJvcmRlci13aGl0ZS8xMCcsXG4gIGRlZmF1bHQ6ICdiZy13aGl0ZSBib3JkZXItYm9yZGVyIGRhcms6YmctZ3JheS04MDAvNTAgZGFyazpib3JkZXItd2hpdGUvMTAnLFxuICBncmFkaWVudDogJ2JnLXdoaXRlIGJvcmRlci1ib3JkZXIgZGFyazpiZy1ncmF5LTgwMC81MCBkYXJrOmJvcmRlci13aGl0ZS8xMCdcbn07XG5cbmNvbnN0IGNvbXBhcmlzb25HcmlkQ2xhc3NlczogUmVjb3JkPG51bWJlciwgc3RyaW5nPiA9IHtcbiAgMTogJ2xnOmdyaWQtY29scy0xJyxcbiAgMjogJ2xnOmdyaWQtY29scy0yJyxcbiAgMzogJ2xnOmdyaWQtY29scy0zJyxcbiAgNDogJ21kOmdyaWQtY29scy0yIHhsOmdyaWQtY29scy00J1xufTtcblxuY29uc3QgY29tcGFyaXNvbkNvbENsYXNzZXM6IFJlY29yZDxudW1iZXIsIHN0cmluZz4gPSB7XG4gIDE6ICd3LWZ1bGwnLFxuICAyOiAndy0xLzInLFxuICAzOiAndy0xLzMnLFxuICA0OiAndy0xLzQnXG59O1xuXG5jb25zdCBncmFkaWVudERlY29yYXRpb24gPSAoXG4gIDxkaXYgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3NOYW1lPVwicG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBpbnNldC14LTAgdG9wLTAgLXotMTAgb3ZlcmZsb3ctaGlkZGVuIGJsdXItM3hsXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPVwibXgtYXV0byBhc3BlY3QtWzExNTUvNjc4XSB3LVs3MnJlbV0gYmctbGluZWFyLXRvLXRyIGZyb20tcHJpbWFyeS8yNSB2aWEtc2Vjb25kYXJ5LzIwIHRvLXByaW1hcnktZGFyay8yNSBvcGFjaXR5LTcwIGRhcms6b3BhY2l0eS00MFwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBjbGlwUGF0aDpcbiAgICAgICAgICAncG9seWdvbig3NC4xJSA0NC4xJSwxMDAlIDYxLjYlLDk3LjUlIDI2LjklLDg1LjUlIDAuMSUsODAuNyUgMiUsNzIuNSUgMzIuNSUsNjAuMiUgNjIuNCUsNTIuNCUgNjguMSUsNDcuNSUgNTguMyUsNDUuMiUgMzQuNSUsMjcuNSUgNzYuNyUsMC4xJSA2NC45JSwxNy45JSAxMDAlLDI3LjYlIDc2LjglLDc2LjElIDk3LjclLDc0LjElIDQ0LjElKSdcbiAgICAgIH19XG4gICAgLz5cbiAgPC9kaXY+XG4pO1xuXG5jb25zdCBnZXREZWZhdWx0RnJlcXVlbmN5ID0gKFxuICBmcmVxdWVuY2llczogcmVhZG9ubHkgUHJpY2luZ0ZyZXF1ZW5jeVtdIHwgdW5kZWZpbmVkLFxuICB0aWVyczogcmVhZG9ubHkgUHJpY2luZ1RpZXJbXSB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdEZyZXF1ZW5jeT86IHN0cmluZ1xuKSA9PiB7XG4gIGlmKGRlZmF1bHRGcmVxdWVuY3kpIHtcbiAgICByZXR1cm4gZGVmYXVsdEZyZXF1ZW5jeTtcbiAgfVxuXG4gIGlmKGZyZXF1ZW5jaWVzPy5bMF0/LnZhbHVlKSB7XG4gICAgcmV0dXJuIGZyZXF1ZW5jaWVzWzBdLnZhbHVlO1xuICB9XG5cbiAgY29uc3QgZmlyc3RQcmljZSA9IHRpZXJzPy5maW5kKCh0aWVyKSA9PiB0eXBlb2YgdGllci5wcmljZSAhPT0gJ3N0cmluZycgJiYgT2JqZWN0LmtleXModGllci5wcmljZSkubGVuZ3RoID4gMCk/LnByaWNlO1xuXG4gIGlmKGZpcnN0UHJpY2UgJiYgdHlwZW9mIGZpcnN0UHJpY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZpcnN0UHJpY2UpWzBdID8/ICdtb250aGx5JztcbiAgfVxuXG4gIHJldHVybiAnbW9udGhseSc7XG59O1xuXG5jb25zdCBnZXRQcmljZUZvclRpZXIgPSAodGllcjogUHJpY2luZ1RpZXIsIGFjdGl2ZUZyZXF1ZW5jeTogc3RyaW5nKSA9PiB7XG4gIGlmKHR5cGVvZiB0aWVyLnByaWNlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0aWVyLnByaWNlO1xuICB9XG5cbiAgcmV0dXJuIHRpZXIucHJpY2VbYWN0aXZlRnJlcXVlbmN5XSA/PyBPYmplY3QudmFsdWVzKHRpZXIucHJpY2UpWzBdID8/ICcnO1xufTtcblxuY29uc3QgZ2V0UHJpY2VTdWZmaXhGb3JUaWVyID0gKFxuICB0aWVyOiBQcmljaW5nVGllcixcbiAgZnJlcXVlbmNpZXM6IHJlYWRvbmx5IFByaWNpbmdGcmVxdWVuY3lbXSB8IHVuZGVmaW5lZCxcbiAgYWN0aXZlRnJlcXVlbmN5OiBzdHJpbmdcbikgPT4ge1xuICBpZih0eXBlb2YgdGllci5wcmljZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHRpZXIucHJpY2VTdWZmaXggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRpZXIucHJpY2VTdWZmaXg7XG4gIH1cblxuICBpZih0aWVyLnByaWNlU3VmZml4ICYmIHR5cGVvZiB0aWVyLnByaWNlU3VmZml4ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0aWVyLnByaWNlU3VmZml4W2FjdGl2ZUZyZXF1ZW5jeV0gPz8gT2JqZWN0LnZhbHVlcyh0aWVyLnByaWNlU3VmZml4KVswXSA/PyAnJztcbiAgfVxuXG4gIHJldHVybiBmcmVxdWVuY2llcz8uZmluZCgoZnJlcXVlbmN5KSA9PiBmcmVxdWVuY3kudmFsdWUgPT09IGFjdGl2ZUZyZXF1ZW5jeSk/LnByaWNlU3VmZml4ID8/ICcnO1xufTtcblxuY29uc3QgcmVuZGVyVGllckxpc3QgPSAoXG4gIHRpZXI6IFByaWNpbmdUaWVyLFxuICBmZWF0dXJlZDogYm9vbGVhbixcbiAgZmVhdHVyZWRUZXh0OiBSZXR1cm5UeXBlPHR5cGVvZiBmZWF0dXJlZFRleHRDbGFzc2VzPlxuKSA9PiB7XG4gIGlmKHRpZXIuaGlnaGxpZ2h0cz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDx1bCBjbGFzc05hbWU9XCJtdC04IHNwYWNlLXktMyB0ZXh0LXNtLzZcIiByb2xlPVwibGlzdFwiPlxuICAgICAgICB7dGllci5oaWdobGlnaHRzLm1hcCgoaGlnaGxpZ2h0KSA9PiAoXG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAnZ3JvdXAgZmxleCBpdGVtcy1zdGFydCBnYXAtMycsXG4gICAgICAgICAgICAgIGhpZ2hsaWdodC5kaXNhYmxlZCA/ICd0ZXh0LWdyYXktNDAwIGRhcms6dGV4dC1ncmF5LTUwMCcgOiBmZWF0dXJlZCA/IGZlYXR1cmVkVGV4dC5tdXRlZCA6ICd0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTMwMCdcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICBrZXk9e2hpZ2hsaWdodC5kZXNjcmlwdGlvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpbmxpbmUtZmxleCBoLTYgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIHtoaWdobGlnaHQuZGlzYWJsZWQgPyAoXG4gICAgICAgICAgICAgICAgPE1pbnVzIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzTmFtZT1cInNpemUtNCB0ZXh0LWdyYXktNDAwIGRhcms6dGV4dC1ncmF5LTUwMFwiIC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPFBsdXMgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3NOYW1lPXtjbignc2l6ZS00JywgZmVhdHVyZWQgPyBmZWF0dXJlZFRleHQuaWNvbiA6ICd0ZXh0LXByaW1hcnkgZGFyazp0ZXh0LXByaW1hcnktZGFyay0zMDAnKX0gLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIHtoaWdobGlnaHQuZGVzY3JpcHRpb259XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKSl9XG4gICAgICA8L3VsPlxuICAgICk7XG4gIH1cblxuICBpZighdGllci5mZWF0dXJlcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDx1bCBjbGFzc05hbWU9XCJtdC04IHNwYWNlLXktMyB0ZXh0LXNtLzZcIiByb2xlPVwibGlzdFwiPlxuICAgICAge3RpZXIuZmVhdHVyZXMubWFwKChmZWF0dXJlKSA9PiAoXG4gICAgICAgIDxsaVxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnZmxleCBnYXAtMycsXG4gICAgICAgICAgICBmZWF0dXJlZCA/IGZlYXR1cmVkVGV4dC5tdXRlZCA6ICd0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTMwMCdcbiAgICAgICAgICApfVxuICAgICAgICAgIGtleT17ZmVhdHVyZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxDaGVjayBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzc05hbWU9e2NuKCdtdC0wLjUgc2l6ZS00IHNocmluay0wJywgZmVhdHVyZWQgPyBmZWF0dXJlZFRleHQuaWNvbiA6ICd0ZXh0LXByaW1hcnkgZGFyazp0ZXh0LXByaW1hcnktZGFyay0zMDAnKX0gLz5cbiAgICAgICAgICA8c3Bhbj57ZmVhdHVyZX08L3NwYW4+XG4gICAgICAgIDwvbGk+XG4gICAgICApKX1cbiAgICA8L3VsPlxuICApO1xufTtcblxuY29uc3QgUHJpY2luZ0hlYWRlciA9ICh7XG4gIGRlc2NyaXB0aW9uLFxuICBleWVicm93LFxuICB0aXRsZSxcbiAgdG9uZVxufTogUGljazxQcmljaW5nUHJvcHMsICdkZXNjcmlwdGlvbicgfCAnZXllYnJvdycgfCAndGl0bGUnIHwgJ3RvbmUnPikgPT4ge1xuICBpZighZXllYnJvdyAmJiAhdGl0bGUgJiYgIWRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy00eGwgdGV4dC1jZW50ZXJcIj5cbiAgICAgIHtleWVicm93ID8gKFxuICAgICAgICA8aDIgY2xhc3NOYW1lPXtjbigndGV4dC1iYXNlLzcgZm9udC1zZW1pYm9sZCcsIGhlYWRlclRvbmVDbGFzc2VzW3RvbmUgPz8gJ2RlZmF1bHQnXS5leWVicm93KX0+XG4gICAgICAgICAge2V5ZWJyb3d9XG4gICAgICAgIDwvaDI+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHt0aXRsZSA/IChcbiAgICAgICAgPHAgY2xhc3NOYW1lPXtjbignbXQtMiB0ZXh0LTV4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0IHRleHQtYmFsYW5jZSBzbTp0ZXh0LTZ4bCcsIGhlYWRlclRvbmVDbGFzc2VzW3RvbmUgPz8gJ2RlZmF1bHQnXS50aXRsZSl9PlxuICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgPC9wPlxuICAgICAgKSA6IG51bGx9XG4gICAgICB7ZGVzY3JpcHRpb24gPyAoXG4gICAgICAgIDxwIGNsYXNzTmFtZT17Y24oJ214LWF1dG8gbXQtNiBtYXgtdy0yeGwgdGV4dC1jZW50ZXIgdGV4dC1sZyBmb250LW1lZGl1bSB0ZXh0LXByZXR0eSBzbTp0ZXh0LXhsLzgnLCBoZWFkZXJUb25lQ2xhc3Nlc1t0b25lID8/ICdkZWZhdWx0J10uZGVzY3JpcHRpb24pfT5cbiAgICAgICAgICB7ZGVzY3JpcHRpb259XG4gICAgICAgIDwvcD5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgRnJlcXVlbmN5VG9nZ2xlID0gKHtcbiAgYWN0aXZlRnJlcXVlbmN5LFxuICBmcmVxdWVuY2llcyxcbiAgb25DaGFuZ2UsXG4gIHRvbmVcbn06IHtcbiAgcmVhZG9ubHkgYWN0aXZlRnJlcXVlbmN5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZyZXF1ZW5jaWVzOiByZWFkb25seSBQcmljaW5nRnJlcXVlbmN5W107XG4gIHJlYWRvbmx5IG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgcmVhZG9ubHkgdG9uZTogUHJpY2luZ1RvbmU7XG59KSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPVwibXQtMTYgZmxleCBqdXN0aWZ5LWNlbnRlclwiPlxuICAgIDxmaWVsZHNldCBhcmlhLWxhYmVsPVwiUGF5bWVudCBmcmVxdWVuY3lcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbignZ3JpZCBncmlkLWNvbHMtMiBnYXAteC0xIHJvdW5kZWQtZnVsbCBwLTEgdGV4dC1jZW50ZXIgdGV4dC14cy81IGZvbnQtc2VtaWJvbGQnLCBmcmVxdWVuY3lTaGVsbENsYXNzZXNbdG9uZV0pfT5cbiAgICAgICAge2ZyZXF1ZW5jaWVzLm1hcCgoZnJlcXVlbmN5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGFjdGl2ZUZyZXF1ZW5jeSA9PT0gZnJlcXVlbmN5LnZhbHVlO1xuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKCdyZWxhdGl2ZSByb3VuZGVkLWZ1bGwgcHgtMi41IHB5LTEgdHJhbnNpdGlvbi1jb2xvcnMnLCBmcmVxdWVuY3lJdGVtQ2xhc3Nlc1t0b25lXSwgY2hlY2tlZCAmJiAndGV4dC13aGl0ZScpfVxuICAgICAgICAgICAgICBrZXk9e2ZyZXF1ZW5jeS52YWx1ZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzci1vbmx5XCJcbiAgICAgICAgICAgICAgICBuYW1lPVwicHJpY2luZy1mcmVxdWVuY3lcIlxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoKSA9PiBvbkNoYW5nZShmcmVxdWVuY3kudmFsdWUpfVxuICAgICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgdmFsdWU9e2ZyZXF1ZW5jeS52YWx1ZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHNwYW4+e2ZyZXF1ZW5jeS5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgPC9kaXY+XG4gICAgPC9maWVsZHNldD5cbiAgPC9kaXY+XG4pO1xuXG5jb25zdCBHcmlkUHJpY2luZyA9ICh7XG4gIGFjdGl2ZUZyZXF1ZW5jeSxcbiAgY2FyZFN0eWxlLFxuICBleHRyYU9mZmVyLFxuICBmcmVxdWVuY2llcyxcbiAgdG9uZSxcbiAgdGllcnNcbn06IHtcbiAgcmVhZG9ubHkgYWN0aXZlRnJlcXVlbmN5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNhcmRTdHlsZTogUHJpY2luZ0NhcmRTdHlsZTtcbiAgcmVhZG9ubHkgZXh0cmFPZmZlcj86IFByaWNpbmdFeHRyYU9mZmVyO1xuICByZWFkb25seSBmcmVxdWVuY2llcz86IHJlYWRvbmx5IFByaWNpbmdGcmVxdWVuY3lbXTtcbiAgcmVhZG9ubHkgdG9uZTogUHJpY2luZ1RvbmU7XG4gIHJlYWRvbmx5IHRpZXJzOiByZWFkb25seSBQcmljaW5nVGllcltdO1xufSkgPT4ge1xuICBjb25zdCBncmlkQ29sc0NsYXNzID0gdGllcnMubGVuZ3RoID49IDRcbiAgICA/ICdtZDpncmlkLWNvbHMtMiB4bDpncmlkLWNvbHMtNCdcbiAgICA6IHRpZXJzLmxlbmd0aCA9PT0gM1xuICAgICAgPyAnbGc6Z3JpZC1jb2xzLTMnXG4gICAgICA6IHRpZXJzLmxlbmd0aCA9PT0gMlxuICAgICAgICA/ICdsZzpncmlkLWNvbHMtMiBsZzptYXgtdy00eGwnXG4gICAgICAgIDogJ21heC13LTJ4bCc7XG4gIGNvbnN0IGNhcmRUb2tlbnMgPSBjYXJkVG9uZUNsYXNzZXNbdG9uZV1bY2FyZFN0eWxlXTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMTBcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbignbXgtYXV0byBncmlkIG1heC13LW1kIGdyaWQtY29scy0xIGdhcC04JywgZ3JpZENvbHNDbGFzcyl9PlxuICAgICAgICB7dGllcnMubWFwKCh0aWVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmVhdHVyZWQgPSBCb29sZWFuKHRpZXIuZmVhdHVyZWQpO1xuICAgICAgICAgIGNvbnN0IGZlYXR1cmVkVGV4dCA9IGZlYXR1cmVkVGV4dENsYXNzZXModG9uZSwgY2FyZFN0eWxlKTtcbiAgICAgICAgICBjb25zdCBwcmljZSA9IGdldFByaWNlRm9yVGllcih0aWVyLCBhY3RpdmVGcmVxdWVuY3kpO1xuICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGdldFByaWNlU3VmZml4Rm9yVGllcih0aWVyLCBmcmVxdWVuY2llcywgYWN0aXZlRnJlcXVlbmN5KTtcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgJ2ZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIHJvdW5kZWQtM3hsIHAtOCB4bDpwLTEwJyxcbiAgICAgICAgICAgICAgICBmZWF0dXJlZCA/IGNhcmRUb2tlbnMuZmVhdHVyZWRCb2R5IDogY2FyZFRva2Vucy5ib2R5XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIGRhdGEtZmVhdHVyZWQ9e2ZlYXR1cmVkID8gJ3RydWUnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICBrZXk9e3RpZXIuaWR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9e2NuKCd0ZXh0LWxnLzggZm9udC1zZW1pYm9sZCcsIGZlYXR1cmVkID8gZmVhdHVyZWRUZXh0LnRpdGxlIDogY2FyZFRva2Vucy50aXRsZSl9IGlkPXt0aWVyLmlkfT5cbiAgICAgICAgICAgICAgICAgICAge3RpZXIubmFtZX1cbiAgICAgICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICAgICAgICB7dGllci5iYWRnZSA/IChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAncm91bmRlZC1mdWxsIHB4LTIuNSBweS0xIHRleHQteHMvNSBmb250LXNlbWlib2xkJyxcbiAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlZCA/IGZlYXR1cmVkVGV4dC5iYWRnZSA6ICdiZy1wcmltYXJ5LzEwIHRleHQtcHJpbWFyeSBkYXJrOmJnLXByaW1hcnktZGFyay0zMDAvMTAgZGFyazp0ZXh0LXByaW1hcnktZGFyay0zMDAnXG4gICAgICAgICAgICAgICAgICAgICl9PlxuICAgICAgICAgICAgICAgICAgICAgIHt0aWVyLmJhZGdlfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7dGllci5kZXNjcmlwdGlvbiA/IChcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17Y24oJ210LTQgdGV4dC1zbS82JywgZmVhdHVyZWQgPyBmZWF0dXJlZFRleHQubXV0ZWQgOiBjYXJkVG9rZW5zLm11dGVkKX0+XG4gICAgICAgICAgICAgICAgICAgIHt0aWVyLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTYgZmxleCBpdGVtcy1iYXNlbGluZSBnYXAteC0yXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e2NuKCd0ZXh0LTR4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0JywgZmVhdHVyZWQgPyBmZWF0dXJlZFRleHQudGl0bGUgOiBjYXJkVG9rZW5zLnRpdGxlKX0+XG4gICAgICAgICAgICAgICAgICAgIHtwcmljZX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIHtzdWZmaXggPyAoXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17Y24oJ3RleHQtc20vNiBmb250LXNlbWlib2xkJywgZmVhdHVyZWQgPyBmZWF0dXJlZFRleHQubXV0ZWQgOiBjYXJkVG9rZW5zLm11dGVkKX0+XG4gICAgICAgICAgICAgICAgICAgICAge3N1ZmZpeH1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIHt0aWVyLnByaWNlQ2FwdGlvbiA/IChcbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17Y24oJ210LTMgdGV4dC1zbS82JywgZmVhdHVyZWQgPyBmZWF0dXJlZFRleHQubXV0ZWQgOiBjYXJkVG9rZW5zLm11dGVkKX0+XG4gICAgICAgICAgICAgICAgICAgIHt0aWVyLnByaWNlQ2FwdGlvbn1cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICB7cmVuZGVyVGllckxpc3QodGllciwgZmVhdHVyZWQsIGZlYXR1cmVkVGV4dCl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB7dGllci5ocmVmICYmIHRpZXIuY3RhTGFiZWwgPyAoXG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3RpZXIuaWR9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAnbXQtOCBibG9jayByb3VuZGVkLW1kIHB4LTMuNSBweS0yLjUgdGV4dC1jZW50ZXIgdGV4dC1zbS82IGZvbnQtc2VtaWJvbGQgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLTIgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW9mZnNldC0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1wcmltYXJ5IGRhcms6Zm9jdXMtdmlzaWJsZTpvdXRsaW5lLXByaW1hcnktZGFyay0zMDAnLFxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlZCA/IGNhcmRUb2tlbnMuZmVhdHVyZWRDdGEgOiBjYXJkVG9rZW5zLmN0YVxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIGhyZWY9e3RpZXIuaHJlZn1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7dGllci5jdGFMYWJlbH1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7dGllci5jdGFTdWJ0aXRsZSA/IChcbiAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9e2NuKCdtdC0zIHRleHQtY2VudGVyIHRleHQteHMvNScsIGZlYXR1cmVkID8gZmVhdHVyZWRUZXh0Lm11dGVkIDogY2FyZFRva2Vucy5tdXRlZCl9PlxuICAgICAgICAgICAgICAgICAge3RpZXIuY3RhU3VidGl0bGV9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICk7XG4gICAgICAgIH0pfVxuICAgICAgICB7ZXh0cmFPZmZlciA/IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAnZmxleCBmbGV4LWNvbCBpdGVtcy1zdGFydCBnYXAtNiByb3VuZGVkLTN4bCBwLTggcmluZy0xIHNtOnAtMTAnLFxuICAgICAgICAgICAgdGllcnMubGVuZ3RoID4gMSA/ICdsZzpjb2wtc3Bhbi1mdWxsIGxnOmZsZXgtcm93IGxnOml0ZW1zLWNlbnRlcicgOiAnJyxcbiAgICAgICAgICAgIHRvbmUgPT09ICdkYXJrJ1xuICAgICAgICAgICAgICA/ICdiZy13aGl0ZS81IHJpbmctd2hpdGUvMTAnXG4gICAgICAgICAgICAgIDogJ2JnLXRyYW5zcGFyZW50IHJpbmctYm9yZGVyIGRhcms6Ymctd2hpdGUvNSBkYXJrOnJpbmctd2hpdGUvMTAnXG4gICAgICAgICAgKX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1pbi13LTAgZmxleC0xXCI+XG4gICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0ZXh0LWJhc2UvNyBmb250LXNlbWlib2xkIHRleHQtcHJpbWFyeSBkYXJrOnRleHQtcHJpbWFyeS1kYXJrLTMwMFwiPntleHRyYU9mZmVyLnRpdGxlfTwvaDM+XG4gICAgICAgICAgICAgIHtleHRyYU9mZmVyLmRlc2NyaXB0aW9uID8gKFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17Y24oJ210LTEgdGV4dC1iYXNlLzcnLCB0b25lID09PSAnZGFyaycgPyAndGV4dC1ncmF5LTMwMCcgOiAndGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS0zMDAnKX0+XG4gICAgICAgICAgICAgICAgICB7ZXh0cmFPZmZlci5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICdyb3VuZGVkLW1kIHB4LTMuNSBweS0yIHRleHQtc20vNiBmb250LXNlbWlib2xkJyxcbiAgICAgICAgICAgICAgICB0b25lID09PSAnZGFyaydcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXdoaXRlLzEwIHRleHQtd2hpdGUgcmluZy0xIHJpbmctd2hpdGUvMTAgaG92ZXI6Ymctd2hpdGUvMjAnXG4gICAgICAgICAgICAgICAgICA6ICdiZy13aGl0ZSB0ZXh0LXByaW1hcnkgcmluZy0xIHJpbmctcHJpbWFyeS8yMCBob3ZlcjpyaW5nLXByaW1hcnkvNDAgZGFyazpiZy13aGl0ZS8xMCBkYXJrOnRleHQtd2hpdGUgZGFyazpyaW5nLXdoaXRlLzEwIGRhcms6aG92ZXI6Ymctd2hpdGUvMjAnXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIGhyZWY9e2V4dHJhT2ZmZXIuY3RhSHJlZn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2V4dHJhT2ZmZXIuY3RhTGFiZWx9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5jb25zdCBTaW5nbGVQcmljaW5nID0gKHtcbiAgc2luZ2xlT2ZmZXIsXG4gIHRvbmVcbn06IHtcbiAgcmVhZG9ubHkgc2luZ2xlT2ZmZXI6IFByaWNpbmdTaW5nbGVPZmZlcjtcbiAgcmVhZG9ubHkgdG9uZTogUHJpY2luZ1RvbmU7XG59KSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtdC0xNiBtYXgtdy01eGwgcm91bmRlZC0zeGwgcmluZy0xIHJpbmctYm9yZGVyIGxnOmZsZXggZGFyazpiZy1ncmF5LTgwMC81MCBkYXJrOnJpbmctd2hpdGUvMTBcIj5cbiAgICA8ZGl2IGNsYXNzTmFtZT1cInAtOCBzbTpwLTEwIGxnOmZsZXgtYXV0b1wiPlxuICAgICAgPGgzIGNsYXNzTmFtZT1cInRleHQtM3hsIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctdGlnaHQgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGVcIj57c2luZ2xlT2ZmZXIudGl0bGV9PC9oMz5cbiAgICAgIHtzaW5nbGVPZmZlci5kZXNjcmlwdGlvbiA/IChcbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtNiB0ZXh0LWJhc2UvNyB0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTMwMFwiPntzaW5nbGVPZmZlci5kZXNjcmlwdGlvbn08L3A+XG4gICAgICApIDogbnVsbH1cbiAgICAgIHtzaW5nbGVPZmZlci5mZWF0dXJlcz8ubGVuZ3RoID8gKFxuICAgICAgICA8PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXQtMTAgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLXgtNFwiPlxuICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT1cImZsZXgtbm9uZSB0ZXh0LXNtLzYgZm9udC1zZW1pYm9sZCB0ZXh0LXByaW1hcnkgZGFyazp0ZXh0LXByaW1hcnktZGFyay0zMDBcIj5cbiAgICAgICAgICAgICAge3NpbmdsZU9mZmVyLmZlYXR1cmVMYWJlbCA/PyAnV2hhdFxcJ3MgaW5jbHVkZWQnfVxuICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC1weCBmbGV4LWF1dG8gYmctZ3JheS0xMDAgZGFyazpiZy13aGl0ZS8xMFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cIm10LTggZ3JpZCBncmlkLWNvbHMtMSBnYXAtNCB0ZXh0LXNtLzYgdGV4dC1ncmF5LTYwMCBzbTpncmlkLWNvbHMtMiBzbTpnYXAtNiBkYXJrOnRleHQtZ3JheS0zMDBcIiByb2xlPVwibGlzdFwiPlxuICAgICAgICAgICAge3NpbmdsZU9mZmVyLmZlYXR1cmVzLm1hcCgoZmVhdHVyZSkgPT4gKFxuICAgICAgICAgICAgICA8bGkgY2xhc3NOYW1lPVwiZmxleCBnYXAtM1wiIGtleT17ZmVhdHVyZX0+XG4gICAgICAgICAgICAgICAgPENoZWNrIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzTmFtZT1cIm10LTAuNSBzaXplLTQgc2hyaW5rLTAgdGV4dC1wcmltYXJ5IGRhcms6dGV4dC1wcmltYXJ5LWRhcmstMzAwXCIgLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj57ZmVhdHVyZX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8Lz5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3NOYW1lPVwiLW10LTIgcC0yIGxnOm10LTAgbGc6dy1mdWxsIGxnOm1heC13LW1kIGxnOnNocmluay0wXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdyb3VuZGVkLTJ4bCBweS0xMCB0ZXh0LWNlbnRlciByaW5nLTEgbGc6ZmxleCBsZzpmbGV4LWNvbCBsZzpqdXN0aWZ5LWNlbnRlciBsZzpweS0xNicsXG4gICAgICAgIHRvbmUgPT09ICdkYXJrJ1xuICAgICAgICAgID8gJ2JnLWdyYXktOTAwIHJpbmctd2hpdGUvMTAnXG4gICAgICAgICAgOiAnYmctZ3JheS01MCByaW5nLWdyYXktOTAwLzUgZGFyazpiZy1ncmF5LTkwMCBkYXJrOnJpbmctd2hpdGUvMTAnXG4gICAgICApfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LXhzIHB4LThcIj5cbiAgICAgICAgICB7c2luZ2xlT2ZmZXIucHJpY2VMYWJlbCA/IChcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtYmFzZSBmb250LXNlbWlib2xkIHRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktNDAwXCI+e3NpbmdsZU9mZmVyLnByaWNlTGFiZWx9PC9wPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIm10LTYgZmxleCBpdGVtcy1iYXNlbGluZSBqdXN0aWZ5LWNlbnRlciBnYXAteC0yXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LTV4bCBmb250LXNlbWlib2xkIHRyYWNraW5nLXRpZ2h0IHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LXdoaXRlXCI+e3NpbmdsZU9mZmVyLnByaWNlfTwvc3Bhbj5cbiAgICAgICAgICAgIHtzaW5nbGVPZmZlci5wcmljZVN1ZmZpeCA/IChcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1zbS82IGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctd2lkZSB0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTQwMFwiPntzaW5nbGVPZmZlci5wcmljZVN1ZmZpeH08L3NwYW4+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cIm10LTEwIGJsb2NrIHctZnVsbCByb3VuZGVkLW1kIGJnLXByaW1hcnkgcHgtMyBweS0yIHRleHQtY2VudGVyIHRleHQtc20gZm9udC1zZW1pYm9sZCB0ZXh0LXdoaXRlIGhvdmVyOmJnLXByaW1hcnktNzAwIGZvY3VzLXZpc2libGU6b3V0bGluZS0yIGZvY3VzLXZpc2libGU6b3V0bGluZS1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOm91dGxpbmUtcHJpbWFyeSBkYXJrOmJnLXByaW1hcnktZGFyayBkYXJrOmhvdmVyOmJnLXByaW1hcnktZGFyay0zMDBcIlxuICAgICAgICAgICAgaHJlZj17c2luZ2xlT2ZmZXIuY3RhSHJlZn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7c2luZ2xlT2ZmZXIuY3RhTGFiZWx9XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIHtzaW5nbGVPZmZlci5ub3RlID8gKFxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwibXQtNiB0ZXh0LXhzLzUgdGV4dC1ncmF5LTYwMCBkYXJrOnRleHQtZ3JheS00MDBcIj57c2luZ2xlT2ZmZXIubm90ZX08L3A+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuKTtcblxuY29uc3QgQ29tcGFyaXNvblZhbHVlID0gKHt2YWx1ZX06IHtyZWFkb25seSB2YWx1ZTogUHJpY2luZ1RpZXJWYWx1ZSB8IHVuZGVmaW5lZH0pID0+IHtcbiAgaWYodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXNtLzYgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtd2hpdGVcIj57dmFsdWV9PC9zcGFuPjtcbiAgfVxuXG4gIGlmKHZhbHVlID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIDxDaGVjayBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzc05hbWU9XCJpbmxpbmUtYmxvY2sgc2l6ZS00IHRleHQtZ3JlZW4tNjAwIGRhcms6dGV4dC1ncmVlbi01MDBcIiAvPjtcbiAgfVxuXG4gIHJldHVybiA8WCBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzc05hbWU9XCJpbmxpbmUtYmxvY2sgc2l6ZS00IHRleHQtZ3JheS00MDAgZGFyazp0ZXh0LWdyYXktNTAwXCIgLz47XG59O1xuXG5jb25zdCBDb21wYXJpc29uUHJpY2luZyA9ICh7XG4gIGFjdGl2ZUZyZXF1ZW5jeSxcbiAgY2FyZFN0eWxlLFxuICBjb21wYXJpc29uU2VjdGlvbnMsXG4gIGZyZXF1ZW5jaWVzLFxuICBsb2dvcyxcbiAgdG9uZSxcbiAgdGllcnNcbn06IHtcbiAgcmVhZG9ubHkgYWN0aXZlRnJlcXVlbmN5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNhcmRTdHlsZTogUHJpY2luZ0NhcmRTdHlsZTtcbiAgcmVhZG9ubHkgY29tcGFyaXNvblNlY3Rpb25zPzogcmVhZG9ubHkgUHJpY2luZ0NvbXBhcmlzb25TZWN0aW9uW107XG4gIHJlYWRvbmx5IGZyZXF1ZW5jaWVzPzogcmVhZG9ubHkgUHJpY2luZ0ZyZXF1ZW5jeVtdO1xuICByZWFkb25seSBsb2dvcz86IHJlYWRvbmx5IFByaWNpbmdMb2dvW107XG4gIHJlYWRvbmx5IHRvbmU6IFByaWNpbmdUb25lO1xuICByZWFkb25seSB0aWVyczogcmVhZG9ubHkgUHJpY2luZ1RpZXJbXTtcbn0pID0+IHtcbiAgY29uc3QgW2FjdGl2ZU1vYmlsZVRpZXJJZCwgc2V0QWN0aXZlTW9iaWxlVGllcklkXSA9IHVzZVN0YXRlKHRpZXJzWzBdPy5pZCA/PyAnJyk7XG4gIGNvbnN0IGFjdGl2ZU1vYmlsZVRpZXIgPSB0aWVycy5maW5kKCh0aWVyKSA9PiB0aWVyLmlkID09PSBhY3RpdmVNb2JpbGVUaWVySWQpID8/IHRpZXJzWzBdO1xuICBjb25zdCBjYXJkVG9rZW5zID0gY2FyZFRvbmVDbGFzc2VzW3RvbmVdW2NhcmRTdHlsZV07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NuKCdyZWxhdGl2ZSBtdC0xMCcsIHRvbmUgPT09ICdncmFkaWVudCcgJiYgJ3B0LTYnKX0+XG4gICAgICAgIHt0b25lID09PSAnZ3JhZGllbnQnID8gKFxuICAgICAgICAgIDxkaXYgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQteC0wIHRvcC0xNiBib3R0b20tMCBiZy1bcmFkaWFsLWdyYWRpZW50KGNpcmNsZV9hdF9jZW50ZXJfY2VudGVyLHRoZW1lKGNvbG9ycy5wcmltYXJ5Ly4zNSksdGhlbWUoY29sb3JzLnByaW1hcnktZGFyay8uMjgpLHRyYW5zcGFyZW50XzcyJSldIGRhcms6YmctW3JhZGlhbC1ncmFkaWVudChjaXJjbGVfYXRfY2VudGVyX2NlbnRlcix0aGVtZShjb2xvcnMucHJpbWFyeS1kYXJrLTMwMC8uMjgpLHRoZW1lKGNvbG9ycy5wcmltYXJ5LWRhcmsvLjIyKSx0cmFuc3BhcmVudF83MiUpXVwiIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIG14LWF1dG8gbWF4LXctN3hsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NuKCdncmlkIGdyaWQtY29scy0xIGdhcC04JywgY29tcGFyaXNvbkdyaWRDbGFzc2VzW01hdGgubWluKE1hdGgubWF4KHRpZXJzLmxlbmd0aCwgMSksIDQpXSl9PlxuICAgICAgICAgICAge3RpZXJzLm1hcCgodGllcikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlZCA9IEJvb2xlYW4odGllci5mZWF0dXJlZCk7XG4gICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVkVGV4dCA9IGZlYXR1cmVkVGV4dENsYXNzZXModG9uZSwgY2FyZFN0eWxlKTtcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbigncm91bmRlZC00eGwgcC0yIHNoYWRvdy1baW5zZXRfMF8wXzBfMXB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wOCldJywgdG9uZSA9PT0gJ2RhcmsnID8gJ2JnLXdoaXRlLzUnIDogJ2JnLXdoaXRlLzUgZGFyazpiZy13aGl0ZS81Jyl9IGtleT17dGllci5pZH0+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y24oJ3JvdW5kZWQtM3hsIHAtOCcsIGZlYXR1cmVkID8gY2FyZFRva2Vucy5mZWF0dXJlZEJvZHkgOiBjYXJkVG9rZW5zLmJvZHkpfT5cbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT17Y24oJ3RleHQtc20gZm9udC1zZW1pYm9sZCcsIGZlYXR1cmVkID8gJ3RleHQtd2hpdGUgZGFyazp0ZXh0LXdoaXRlJyA6ICd0ZXh0LXByaW1hcnkgZGFyazp0ZXh0LXByaW1hcnktZGFyay0zMDAnKX0+XG4gICAgICAgICAgICAgICAgICAgICAge3RpZXIubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICAgICAge3RpZXIuZGVzY3JpcHRpb24gPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtjbignbXQtMiB0ZXh0LXNtLzYnLCBmZWF0dXJlZCA/ICd0ZXh0LWdyYXktMzAwIGRhcms6dGV4dC1ncmF5LTMwMCcgOiBjYXJkVG9rZW5zLm11dGVkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dGllci5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm10LTggZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y24oJ3RleHQtNXhsIGZvbnQtc2VtaWJvbGQnLCBmZWF0dXJlZCA/ICd0ZXh0LXdoaXRlIGRhcms6dGV4dC13aGl0ZScgOiBjYXJkVG9rZW5zLnRpdGxlKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0UHJpY2VGb3JUaWVyKHRpZXIsIGFjdGl2ZUZyZXF1ZW5jeSl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAge2dldFByaWNlU3VmZml4Rm9yVGllcih0aWVyLCBmcmVxdWVuY2llcywgYWN0aXZlRnJlcXVlbmN5KSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbigndGV4dC1zbScsIGZlYXR1cmVkID8gJ3RleHQtZ3JheS0zMDAgZGFyazp0ZXh0LWdyYXktMzAwJyA6IGNhcmRUb2tlbnMubXV0ZWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+e2dldFByaWNlU3VmZml4Rm9yVGllcih0aWVyLCBmcmVxdWVuY2llcywgYWN0aXZlRnJlcXVlbmN5KX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIHt0aWVyLmhyZWYgJiYgdGllci5jdGFMYWJlbCA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YCR7dGllci5jdGFMYWJlbH0gb24gdGhlICR7dGllci5uYW1lfSBwbGFuYH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdtdC04IGlubGluZS1ibG9jayByb3VuZGVkLW1kIHB4LTMuNSBweS0yIHRleHQtY2VudGVyIHRleHQtc20vNiBmb250LXNlbWlib2xkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZWQgPyBjYXJkVG9rZW5zLmZlYXR1cmVkQ3RhIDogY2FyZFRva2Vucy5jdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXt0aWVyLmhyZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3RpZXIuY3RhTGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAge3JlbmRlclRpZXJMaXN0KHRpZXIsIGZlYXR1cmVkLCBmZWF0dXJlZFRleHQpfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7bG9nb3M/Lmxlbmd0aCA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAganVzdGlmeS1jZW50ZXIgZ2FwLXgtOCBnYXAteS00IHB5LTE2IG9wYWNpdHktNzAgc206cHktMjRcIj5cbiAgICAgICAgICAgICAge2xvZ29zLm1hcCgobG9nbykgPT4gKFxuICAgICAgICAgICAgICAgIDxpbWcgYWx0PXtsb2dvLmFsdH0gY2xhc3NOYW1lPXtjbignaC04IG9iamVjdC1jb250YWluIGxnOmgtMTAnLCBsb2dvLmNsYXNzTmFtZSl9IGtleT17YCR7bG9nby5hbHR9LSR7bG9nby5zcmN9YH0gc3JjPXtsb2dvLnNyY30gLz5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtjb21wYXJpc29uU2VjdGlvbnM/Lmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG10LTggbWF4LXctN3hsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoaWRkZW4gbGc6YmxvY2tcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzc05hbWU9XCJ3LWZ1bGwgdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxjYXB0aW9uIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5QcmljaW5nIHBsYW4gY29tcGFyaXNvbjwvY2FwdGlvbj5cbiAgICAgICAgICAgICAgPGNvbGdyb3VwPlxuICAgICAgICAgICAgICAgIDxjb2wgY2xhc3NOYW1lPVwidy0yLzVcIiAvPlxuICAgICAgICAgICAgICAgIHt0aWVycy5tYXAoKHRpZXIpID0+IDxjb2wgY2xhc3NOYW1lPXtjb21wYXJpc29uQ29sQ2xhc3Nlc1tNYXRoLm1pbihNYXRoLm1heCh0aWVycy5sZW5ndGgsIDEpLCA0KV19IGtleT17dGllci5pZH0gLz4pfVxuICAgICAgICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzTmFtZT1cInAtMFwiIC8+XG4gICAgICAgICAgICAgICAgICB7dGllcnMubWFwKCh0aWVyKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJwLTBcIiBrZXk9e3RpZXIuaWR9IHNjb3BlPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgdGV4dC1wcmltYXJ5IGRhcms6dGV4dC1wcmltYXJ5LWRhcmstMzAwXCI+e3RpZXIubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzTmFtZT1cInAtMFwiIC8+XG4gICAgICAgICAgICAgICAgICB7dGllcnMubWFwKCh0aWVyKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzc05hbWU9XCJweC0wIHB0LTMgcGItMFwiIGtleT17dGllci5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAge3RpZXIuaHJlZiAmJiB0aWVyLmN0YUxhYmVsID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5saW5lLWJsb2NrIHJvdW5kZWQtbWQgcHgtMi41IHB5LTEuNSB0ZXh0LXNtIGZvbnQtc2VtaWJvbGQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZXIuZmVhdHVyZWQgPyBjYXJkVG9rZW5zLmZlYXR1cmVkQ3RhIDogY2FyZFRva2Vucy5jdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj17dGllci5ocmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7dGllci5jdGFMYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgIHtjb21wYXJpc29uU2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzTmFtZT1cImdyb3VwXCIga2V5PXtzZWN0aW9uLm5hbWV9PlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3NOYW1lPVwicHgtMCBwdC0xMCBwYi0wIGdyb3VwLWZpcnN0LW9mLXR5cGU6cHQtNVwiIGNvbFNwYW49e3RpZXJzLmxlbmd0aCArIDF9IHNjb3BlPVwiY29sZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvdW5kZWQtbGcgYmctZ3JheS01MCBweC00IHB5LTMgdGV4dC1zbS82IGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTk1MCBkYXJrOmJnLWdyYXktODAwLzUwIGRhcms6dGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3NlY3Rpb24ubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICB7c2VjdGlvbi5mZWF0dXJlcy5tYXAoKGZlYXR1cmUpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzTmFtZT1cImJvcmRlci1iIGJvcmRlci1ncmF5LTEwMCBsYXN0OmJvcmRlci1ub25lIGRhcms6Ym9yZGVyLXdoaXRlLzEwXCIga2V5PXtmZWF0dXJlLm5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzc05hbWU9XCJweC0wIHB5LTQgdGV4dC1zbS82IGZvbnQtbm9ybWFsIHRleHQtZ3JheS02MDAgZGFyazp0ZXh0LWdyYXktMzAwXCIgc2NvcGU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtmZWF0dXJlLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICB7dGllcnMubWFwKCh0aWVyKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwicC00IG1heC1zbTp0ZXh0LWNlbnRlclwiIGtleT17dGllci5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDb21wYXJpc29uVmFsdWUgdmFsdWU9e2ZlYXR1cmUudGllcnNbdGllci5uYW1lXX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPnt0eXBlb2YgZmVhdHVyZS50aWVyc1t0aWVyLm5hbWVdID09PSAnc3RyaW5nJyA/IGAke2ZlYXR1cmUudGllcnNbdGllci5uYW1lXX0gZm9yICR7dGllci5uYW1lfWAgOiBgJHtmZWF0dXJlLnRpZXJzW3RpZXIubmFtZV0gPT09IHRydWUgPyAnSW5jbHVkZWQnIDogJ05vdCBpbmNsdWRlZCd9IGluICR7dGllci5uYW1lfWB9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxnOmhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGJvcmRlci1iIGJvcmRlci1ncmF5LTEwMCBkYXJrOmJvcmRlci13aGl0ZS8xMFwiPlxuICAgICAgICAgICAgICB7dGllcnMubWFwKCh0aWVyKSA9PiAoXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgJ2ZsZXgtMSBib3JkZXItYiBweS00IHRleHQtYmFzZS84IGZvbnQtbWVkaXVtIG5vdC1mb2N1cy12aXNpYmxlOmZvY3VzOm91dGxpbmUtbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZU1vYmlsZVRpZXI/LmlkID09PSB0aWVyLmlkXG4gICAgICAgICAgICAgICAgICAgICAgPyAnYm9yZGVyLXByaW1hcnkgdGV4dC1wcmltYXJ5IGRhcms6Ym9yZGVyLXByaW1hcnktZGFyay0zMDAgZGFyazp0ZXh0LXByaW1hcnktZGFyay0zMDAnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnYm9yZGVyLXRyYW5zcGFyZW50IHRleHQtZ3JheS01MDAgZGFyazp0ZXh0LWdyYXktNDAwJ1xuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIGtleT17dGllci5pZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFjdGl2ZU1vYmlsZVRpZXJJZCh0aWVyLmlkKX1cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0aWVyLm5hbWV9XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7YWN0aXZlTW9iaWxlVGllciA/IChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC04XCI+XG4gICAgICAgICAgICAgICAge2FjdGl2ZU1vYmlsZVRpZXIuaHJlZiAmJiBhY3RpdmVNb2JpbGVUaWVyLmN0YUxhYmVsID8gKFxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgICAgICAnYmxvY2sgcm91bmRlZC1tZCBweC0zLjUgcHktMi41IHRleHQtY2VudGVyIHRleHQtc20gZm9udC1zZW1pYm9sZCcsXG4gICAgICAgICAgICAgICAgICAgICAgYWN0aXZlTW9iaWxlVGllci5mZWF0dXJlZCA/IGNhcmRUb2tlbnMuZmVhdHVyZWRDdGEgOiBjYXJkVG9rZW5zLmN0YVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICBocmVmPXthY3RpdmVNb2JpbGVUaWVyLmhyZWZ9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHthY3RpdmVNb2JpbGVUaWVyLmN0YUxhYmVsfVxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtjb21wYXJpc29uU2VjdGlvbnMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2IGtleT17c2VjdGlvbi5uYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NuKCdtdC0xMCByb3VuZGVkLWxnIHB4LTYgcHktMyB0ZXh0LXNtLzYgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktOTUwIGdyb3VwLWZpcnN0LW9mLXR5cGU6bXQtNSBkYXJrOnRleHQtd2hpdGUnLCBjb21wYXJpc29uUGFuZWxUb25lQ2xhc3Nlc1t0b25lXSl9PlxuICAgICAgICAgICAgICAgICAgICAgIHtzZWN0aW9uLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGw+XG4gICAgICAgICAgICAgICAgICAgICAge3NlY3Rpb24uZmVhdHVyZXMubWFwKChmZWF0dXJlKSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgZ3JpZC1jb2xzLTIgYm9yZGVyLWIgYm9yZGVyLWdyYXktMTAwIHB5LTQgbGFzdDpib3JkZXItbm9uZSBkYXJrOmJvcmRlci13aGl0ZS8xMFwiIGtleT17ZmVhdHVyZS5uYW1lfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGR0IGNsYXNzTmFtZT1cInRleHQtc20vNiBmb250LW5vcm1hbCB0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTMwMFwiPntmZWF0dXJlLm5hbWV9PC9kdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRkIGNsYXNzTmFtZT1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbXBhcmlzb25WYWx1ZSB2YWx1ZT17ZmVhdHVyZS50aWVyc1thY3RpdmVNb2JpbGVUaWVyLm5hbWVdfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogbnVsbH1cbiAgICA8Lz5cbiAgKTtcbn07XG5cbmNvbnN0IFByaWNpbmdDb21wb25lbnQgPSAoe1xuICBjYXJkU3R5bGUgPSAnZGVmYXVsdCcsXG4gIGNsYXNzTmFtZSxcbiAgY29tcGFyaXNvblNlY3Rpb25zLFxuICBkZWZhdWx0RnJlcXVlbmN5LFxuICBkZXNjcmlwdGlvbixcbiAgZXllYnJvdyA9ICdQcmljaW5nJyxcbiAgZXh0cmFPZmZlcixcbiAgZnJlcXVlbmNpZXMsXG4gIGxvZ29zLFxuICBzaW5nbGVPZmZlcixcbiAgdGllcnMgPSBbXSxcbiAgdGl0bGUsXG4gIHRvbmUgPSAnZGVmYXVsdCcsXG4gIHZhcmlhbnQgPSAnZ3JpZCcsXG4gIC4uLnByb3BzXG59OiBQcmljaW5nUHJvcHMpID0+IHtcbiAgY29uc3QgaW5pdGlhbEZyZXF1ZW5jeSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0RGVmYXVsdEZyZXF1ZW5jeShmcmVxdWVuY2llcywgdGllcnMsIGRlZmF1bHRGcmVxdWVuY3kpLFxuICAgIFtkZWZhdWx0RnJlcXVlbmN5LCBmcmVxdWVuY2llcywgdGllcnNdXG4gICk7XG4gIGNvbnN0IFthY3RpdmVGcmVxdWVuY3ksIHNldEFjdGl2ZUZyZXF1ZW5jeV0gPSB1c2VTdGF0ZShpbml0aWFsRnJlcXVlbmN5KTtcblxuICByZXR1cm4gKFxuICAgIDxzZWN0aW9uXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAncmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIHB4LTYgcHktMjQgc206cHktMzIgbGc6cHgtOCcsXG4gICAgICAgIHRvbmVDbGFzc2VzW3RvbmVdLFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICBkYXRhLXNsb3Q9XCJwcmljaW5nXCJcbiAgICAgIGRhdGEtdG9uZT17dG9uZX1cbiAgICAgIGRhdGEtdmFyaWFudD17dmFyaWFudH1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7dG9uZSA9PT0gJ2dyYWRpZW50JyA/IGdyYWRpZW50RGVjb3JhdGlvbiA6IG51bGx9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14LWF1dG8gbWF4LXctN3hsXCI+XG4gICAgICAgIDxQcmljaW5nSGVhZGVyIGRlc2NyaXB0aW9uPXtkZXNjcmlwdGlvbn0gZXllYnJvdz17ZXllYnJvd30gdGl0bGU9e3RpdGxlfSB0b25lPXt0b25lfSAvPlxuICAgICAgICB7ZnJlcXVlbmNpZXM/Lmxlbmd0aCA/IChcbiAgICAgICAgICA8RnJlcXVlbmN5VG9nZ2xlXG4gICAgICAgICAgICBhY3RpdmVGcmVxdWVuY3k9e2FjdGl2ZUZyZXF1ZW5jeX1cbiAgICAgICAgICAgIGZyZXF1ZW5jaWVzPXtmcmVxdWVuY2llc31cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRBY3RpdmVGcmVxdWVuY3l9XG4gICAgICAgICAgICB0b25lPXt0b25lfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7dmFyaWFudCA9PT0gJ3NpbmdsZScgJiYgc2luZ2xlT2ZmZXIgPyAoXG4gICAgICAgICAgPFNpbmdsZVByaWNpbmcgc2luZ2xlT2ZmZXI9e3NpbmdsZU9mZmVyfSB0b25lPXt0b25lfSAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3ZhcmlhbnQgPT09ICdncmlkJyA/IChcbiAgICAgICAgICA8R3JpZFByaWNpbmdcbiAgICAgICAgICAgIGFjdGl2ZUZyZXF1ZW5jeT17YWN0aXZlRnJlcXVlbmN5fVxuICAgICAgICAgICAgY2FyZFN0eWxlPXtjYXJkU3R5bGV9XG4gICAgICAgICAgICBleHRyYU9mZmVyPXtleHRyYU9mZmVyfVxuICAgICAgICAgICAgZnJlcXVlbmNpZXM9e2ZyZXF1ZW5jaWVzfVxuICAgICAgICAgICAgdGllcnM9e3RpZXJzfVxuICAgICAgICAgICAgdG9uZT17dG9uZX1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3ZhcmlhbnQgPT09ICdjb21wYXJpc29uJyA/IChcbiAgICAgICAgICA8Q29tcGFyaXNvblByaWNpbmdcbiAgICAgICAgICAgIGFjdGl2ZUZyZXF1ZW5jeT17YWN0aXZlRnJlcXVlbmN5fVxuICAgICAgICAgICAgY2FyZFN0eWxlPXtjYXJkU3R5bGV9XG4gICAgICAgICAgICBjb21wYXJpc29uU2VjdGlvbnM9e2NvbXBhcmlzb25TZWN0aW9uc31cbiAgICAgICAgICAgIGZyZXF1ZW5jaWVzPXtmcmVxdWVuY2llc31cbiAgICAgICAgICAgIGxvZ29zPXtsb2dvc31cbiAgICAgICAgICAgIHRpZXJzPXt0aWVyc31cbiAgICAgICAgICAgIHRvbmU9e3RvbmV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgUHJpY2luZyA9IG1lbW8oUHJpY2luZ0NvbXBvbmVudCk7XG5QcmljaW5nLmRpc3BsYXlOYW1lID0gJ1ByaWNpbmcnO1xuIl0sIm5hbWVzIjpbImNuIiwibWVtbyIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkNoZWNrIiwiTWludXMiLCJQbHVzIiwiWCIsInRvbmVDbGFzc2VzIiwiZGFyayIsImRlZmF1bHQiLCJncmFkaWVudCIsImhlYWRlclRvbmVDbGFzc2VzIiwiZGVzY3JpcHRpb24iLCJleWVicm93IiwidGl0bGUiLCJmcmVxdWVuY3lTaGVsbENsYXNzZXMiLCJmcmVxdWVuY3lJdGVtQ2xhc3NlcyIsImNhcmRUb25lQ2xhc3NlcyIsImNvbnRyYXN0IiwiYm9keSIsImN0YSIsImZlYXR1cmVkQm9keSIsImZlYXR1cmVkQ3RhIiwibXV0ZWQiLCJzb2xpZCIsImZlYXR1cmVkVGV4dENsYXNzZXMiLCJ0b25lIiwiY2FyZFN0eWxlIiwibGlnaHRGZWF0dXJlZENhcmQiLCJiYWRnZSIsImljb24iLCJjb21wYXJpc29uUGFuZWxUb25lQ2xhc3NlcyIsImNvbXBhcmlzb25HcmlkQ2xhc3NlcyIsImNvbXBhcmlzb25Db2xDbGFzc2VzIiwiZ3JhZGllbnREZWNvcmF0aW9uIiwiZGl2IiwiYXJpYS1oaWRkZW4iLCJjbGFzc05hbWUiLCJzdHlsZSIsImNsaXBQYXRoIiwiZ2V0RGVmYXVsdEZyZXF1ZW5jeSIsImZyZXF1ZW5jaWVzIiwidGllcnMiLCJkZWZhdWx0RnJlcXVlbmN5IiwidmFsdWUiLCJmaXJzdFByaWNlIiwiZmluZCIsInRpZXIiLCJwcmljZSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJnZXRQcmljZUZvclRpZXIiLCJhY3RpdmVGcmVxdWVuY3kiLCJ2YWx1ZXMiLCJnZXRQcmljZVN1ZmZpeEZvclRpZXIiLCJwcmljZVN1ZmZpeCIsImZyZXF1ZW5jeSIsInJlbmRlclRpZXJMaXN0IiwiZmVhdHVyZWQiLCJmZWF0dXJlZFRleHQiLCJoaWdobGlnaHRzIiwidWwiLCJyb2xlIiwibWFwIiwiaGlnaGxpZ2h0IiwibGkiLCJkaXNhYmxlZCIsInNwYW4iLCJmZWF0dXJlcyIsImZlYXR1cmUiLCJQcmljaW5nSGVhZGVyIiwiaDIiLCJwIiwiRnJlcXVlbmN5VG9nZ2xlIiwib25DaGFuZ2UiLCJmaWVsZHNldCIsImFyaWEtbGFiZWwiLCJjaGVja2VkIiwibGFiZWwiLCJpbnB1dCIsIm5hbWUiLCJ0eXBlIiwiR3JpZFByaWNpbmciLCJleHRyYU9mZmVyIiwiZ3JpZENvbHNDbGFzcyIsImNhcmRUb2tlbnMiLCJCb29sZWFuIiwic3VmZml4IiwiZGF0YS1mZWF0dXJlZCIsInVuZGVmaW5lZCIsImgzIiwiaWQiLCJwcmljZUNhcHRpb24iLCJocmVmIiwiY3RhTGFiZWwiLCJhIiwiYXJpYS1kZXNjcmliZWRieSIsImN0YVN1YnRpdGxlIiwiY3RhSHJlZiIsIlNpbmdsZVByaWNpbmciLCJzaW5nbGVPZmZlciIsImg0IiwiZmVhdHVyZUxhYmVsIiwicHJpY2VMYWJlbCIsIm5vdGUiLCJDb21wYXJpc29uVmFsdWUiLCJDb21wYXJpc29uUHJpY2luZyIsImNvbXBhcmlzb25TZWN0aW9ucyIsImxvZ29zIiwiYWN0aXZlTW9iaWxlVGllcklkIiwic2V0QWN0aXZlTW9iaWxlVGllcklkIiwiYWN0aXZlTW9iaWxlVGllciIsIk1hdGgiLCJtaW4iLCJtYXgiLCJsb2dvIiwiaW1nIiwiYWx0Iiwic3JjIiwidGFibGUiLCJjYXB0aW9uIiwiY29sZ3JvdXAiLCJjb2wiLCJ0aGVhZCIsInRyIiwidGQiLCJ0aCIsInNjb3BlIiwic2VjdGlvbiIsInRib2R5IiwiY29sU3BhbiIsImJ1dHRvbiIsIm9uQ2xpY2siLCJkbCIsImR0IiwiZGQiLCJQcmljaW5nQ29tcG9uZW50IiwidmFyaWFudCIsInByb3BzIiwiaW5pdGlhbEZyZXF1ZW5jeSIsInNldEFjdGl2ZUZyZXF1ZW5jeSIsImRhdGEtc2xvdCIsImRhdGEtdG9uZSIsImRhdGEtdmFyaWFudCIsIlByaWNpbmciLCJkaXNwbGF5TmFtZSJdLCJtYXBwaW5ncyI6IjtBQUFBLFNBQVFBLEVBQUUsUUFBTyxlQUFlO0FBQ2hDLFNBQVFDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxRQUFRLFFBQU8sUUFBUTtBQUU5QyxTQUFRQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxDQUFDLFFBQU8sdUJBQXVCO0FBeUYzRCxNQUFNQyxjQUEyQztJQUMvQ0MsTUFBTTtJQUNOQyxTQUFTO0lBQ1RDLFVBQVU7QUFDWjtBQUVBLE1BQU1DLG9CQUFnRztJQUNwR0gsTUFBTTtRQUNKSSxhQUFhO1FBQ2JDLFNBQVM7UUFDVEMsT0FBTztJQUNUO0lBQ0FMLFNBQVM7UUFDUEcsYUFBYTtRQUNiQyxTQUFTO1FBQ1RDLE9BQU87SUFDVDtJQUNBSixVQUFVO1FBQ1JFLGFBQWE7UUFDYkMsU0FBUztRQUNUQyxPQUFPO0lBQ1Q7QUFDRjtBQUVBLE1BQU1DLHdCQUFxRDtJQUN6RFAsTUFBTTtJQUNOQyxTQUFTO0lBQ1RDLFVBQVU7QUFDWjtBQUVBLE1BQU1NLHVCQUFvRDtJQUN4RFIsTUFBTTtJQUNOQyxTQUFTO0lBQ1RDLFVBQVU7QUFDWjtBQUVBLE1BQU1PLGtCQUF1SztJQUMzS1QsTUFBTTtRQUNKVSxVQUFVO1lBQ1JDLE1BQU07WUFDTkMsS0FBSztZQUNMQyxjQUFjO1lBQ2RDLGFBQWE7WUFDYkMsT0FBTztZQUNQVCxPQUFPO1FBQ1Q7UUFDQUwsU0FBUztZQUNQVSxNQUFNO1lBQ05DLEtBQUs7WUFDTEMsY0FBYztZQUNkQyxhQUFhO1lBQ2JDLE9BQU87WUFDUFQsT0FBTztRQUNUO1FBQ0FVLE9BQU87WUFDTEwsTUFBTTtZQUNOQyxLQUFLO1lBQ0xDLGNBQWM7WUFDZEMsYUFBYTtZQUNiQyxPQUFPO1lBQ1BULE9BQU87UUFDVDtJQUNGO0lBQ0FMLFNB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
|