{"version":3,"file":"view_invitation.index.view-invitation-f702dd3.js","mappings":"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,sHC3FmC,yBACnC,CACExkB,KAAM,SACN68B,SACE,6FACFq2D,YACE,0IACFC,qBACE,uFACFC,QAAS,CAAC,iBAAkB,aAAc,aAE5C,CACEpzF,KAAM,SACN68B,SACE,6FACFq2D,YACE,yIACFC,qBACE,uFACFC,QAAS,CAAC,iBAAkB,aAAc,cAE5C,CACEpzF,KAAM,UACN68B,SACE,8FACFq2D,YACE,yIACFC,qBACE,wFACFC,QAAS,CAAC,gBAEZ,CACEpzF,KAAM,oBACN68B,SACE,8GACFq2D,YACE,yIACFC,qBACE,oFACFC,QAAS,CAAC,uBAAwB,6BAEpC,CACEpzF,KAAM,WACN68B,SACE,iGACFq2D,YACE,0IACFC,qBACE,wFACFC,QAAS,CAAC,cAAe,oBAE3B,CACEpzF,KAAM,WACN68B,SACE,iGACFu2D,QAAS,CAAC,cAAe,oBAE3B,CACEpzF,KAAM,iBACN68B,SACE,yGACFu2D,QAAS,CAAC,qBAAsB,2BAElC,CACEpzF,KAAM,OACN68B,SACE,2FACFq2D,YACE,0IACFC,qBACE,qFACFC,QAAS,CAAC,WAAY,iBAExB,CACEpzF,KAAM,WACN68B,SACE,kGACFq2D,YACE,wIACFC,qBACE,yFACFC,QAAS,CAAC,eAAgB,qBAE5B,CACEpzF,KAAM,eACN68B,SACE,uGACFq2D,YACE,0IACFC,qBACE,wFACFC,QAAS,CAAC,iBAAkB,uBAE9B,CACEpzF,KAAM,eACN68B,SACE,qGACFu2D,QAAS,CAAC,kBAAmB,wBAE/B,CACEpzF,KAAM,oBACN68B,SACE,gGACFu2D,QAAS,CAAC,sBAAuB,4BAEnC,CACEpzF,KAAM,iBACN68B,SACE,oGACFu2D,QAAS,CAAC,oBAAqB,0BAEjC,CACEpzF,KAAM,SACN68B,SACE,4FACFu2D,QAAS,CAAC,YAAa,kBAEzB,CACEpzF,KAAM,SACN68B,SACE,4FACFu2D,QAAS,CAAC,YAAa,kBAEzB,CACEpzF,KAAM,kBACN68B,SACE,wGACFu2D,QAAS,CAAC,sBAAuB,4BAEnC,CACEpzF,KAAM,uBACN68B,SACE,yFACFu2D,QAAS,CAAC,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ACNuzB,QAAS,MACR,CACDvzB,KAAM,KACNuzB,QAAS,MACR,CACDvzB,KAAM,IACNuzB,QAAS,kCACR,CACDvzB,KAAM,IACNuzB,QAAS,UACR,CACDvzB,KAAM,IACNuzB,QAAS,mBACR,CACDvzB,KAAM,IACNuzB,QAAS,kBACR,CACDvzB,KAAM,IACNuzB,QAAS,wBACR,CACDvzB,KAAM,IACNuzB,QAAS,SACR,CACDvzB,KAAM,IACNuzB,QAAS,kBACR,CACDvzB,KAAM,IACNuzB,QAAS,sBACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,IACNuzB,QAAS,YACR,CACDvzB,KAAM,IACNuzB,QAAS,oBACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,IACNuzB,QAAS,+CACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,IACNuzB,QAAS,cACR,CACDvzB,KAAM,IACNuzB,QAAS,UACR,CACDvzB,KAAM,IACNuzB,QAAS,qBACR,CACDvzB,KAAM,IACNuzB,QAAS,qBACR,CACDvzB,KAAM,IACNuzB,QAAS,mBACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,IACNuzB,QAAS,sCACR,CACDvzB,KAAM,IACNuzB,QAAS,YACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,IACNuzB,QAAS,cACR,CACDvzB,KAAM,IACNuzB,QAAS,SACR,CACDvzB,KAAM,IACNuzB,QAAS,mBACR,CACDvzB,KAAM,IACNuzB,QAAS,kBACR,CACDvzB,KAAM,IACNuzB,QAAS,uCACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,KACNuzB,QAAS,OACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,KACNuzB,QAAS,KACR,CACDvzB,KAAM,KACNuzB,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","sources":["webpack://evite/./node_modules/@appsignal/core/dist/esm/utils/functional.js","webpack://evite/./node_modules/@appsignal/core/dist/esm/utils/hashmap.js","webpack://evite/./node_modules/@appsignal/core/dist/esm/utils/error.js","webpack://evite/./node_modules/@appsignal/core/dist/esm/utils/url.js","webpack://evite/./node_modules/@appsignal/core/dist/esm/utils/environment.js","webpack://evite/./node_modules/@appsignal/core/dist/esm/serializable.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/environment.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/transports/xdomain.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/transports/xhr.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/transports/fetch.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/transports/node.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/api.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/span.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/queue.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/dispatcher.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/index.js","webpack://evite/./node_modules/@appsignal/javascript/dist/esm/version.js","webpack://evite/./node_modules/@appsignal/plugin-window-events/dist/esm/index.js","webpack://evite/./node_modules/@emotion/cache/node_modules/stylis/src/Utility.js","webpack://evite/./node_modules/@emotion/cache/node_modules/stylis/src/Tokenizer.js","webpack://evite/./node_modules/@emotion/cache/node_modules/stylis/src/Enum.js","webpack://evite/./node_modules/@emotion/cache/node_modules/stylis/src/Serializer.js","webpack://evite/./node_modules/@emotion/cache/node_modules/stylis/src/Parser.js","webpack://evite/./node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","webpack://evite/./node_modules/@emotion/cache/node_modules/stylis/src/Middleware.js","webpack://evite/./node_modules/@emotion/hash/dist/emotion-hash.esm.js","webpack://evite/./node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js","webpack://evite/./node_modules/@emotion/is-prop-valid/node_modules/@emotion/memoize/dist/memoize.browser.esm.js","webpack://evite/./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","webpack://evite/./node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js","webpack://evite/./node_modules/@emotion/react/dist/emotion-react.browser.esm.js","webpack://evite/./node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","webpack://evite/./node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","webpack://evite/./node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","webpack://evite/./node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","webpack://evite/./node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","webpack://evite/./node_modules/@stripe/react-stripe-js/dist/react-stripe.umd.js","webpack://evite/./assets/js/CreateFabricInvitation/reducers/fabricDesign/constants.js","webpack://evite/./assets/js/CreateFabricInvitation/routes/EventCreateDesign/components/NavBottom/useNavigator.js","webpack://evite/./assets/js/CreateFabricInvitation/routes/EventCreateDesign/constants.js","webpack://evite/./assets/js/GuestReaction/GuestReaction.js","webpack://evite/./assets/js/GuestReaction/api/guest.js","webpack://evite/./assets/js/GuestReaction/useEmojiBurstAnimation.js","webpack://evite/./assets/js/GuestReaction/useRecipientReaction.js","webpack://evite/./assets/js/ViewInvitation/common/AddToCalendar.js","webpack://evite/./assets/js/ViewInvitation/common/Avatar/Avatar.js","webpack://evite/./assets/js/ViewInvitation/common/BackLink.js","webpack://evite/./assets/js/ViewInvitation/common/FreeEventCountdown.js","webpack://evite/./assets/js/ViewInvitation/common/GuestRsvpActions.js","webpack://evite/./assets/js/ViewInvitation/common/Heading.js","webpack://evite/./assets/js/ViewInvitation/common/InlineComment.js","webpack://evite/./assets/js/ViewInvitation/common/InvitationLink.js","webpack://evite/./assets/js/ViewInvitation/common/Label.js","webpack://evite/./assets/js/ViewInvitation/common/Modal/ActionSheetModal.js","webpack://evite/./assets/js/ViewInvitation/common/Modal/GroundhogModal.js","webpack://evite/./assets/js/ViewInvitation/common/Modal/index.js","webpack://evite/./assets/js/ViewInvitation/common/PollChoiceOverlay.js","webpack://evite/./assets/js/ViewInvitation/common/ROKT.js","webpack://evite/./assets/js/ViewInvitation/common/RSVPModal.js","webpack://evite/./assets/js/ViewInvitation/common/RegistryVendor.js","webpack://evite/./assets/js/ViewInvitation/common/RestoreScrollPosition.js","webpack://evite/./assets/js/ViewInvitation/common/ScrollToTop.js","webpack://evite/./assets/js/ViewInvitation/common/SettingsOverlay.js","webpack://evite/./assets/js/ViewInvitation/common/StickyEditEvent.js","webpack://evite/./assets/js/ViewInvitation/common/StickyRSVP.js","webpack://evite/./assets/js/ViewInvitation/common/Swirl.js","webpack://evite/./assets/js/ViewInvitation/common/TimeSince.js","webpack://evite/./assets/js/ViewInvitation/common/VendorDisc.js","webpack://evite/./assets/js/ViewInvitation/common/VendorRect.js","webpack://evite/./assets/js/ViewInvitation/common/ViewInvitationTabs.js","webpack://evite/./assets/js/ViewInvitation/common/WhatToBringEdit.js","webpack://evite/./assets/js/ViewInvitation/common/WhatToBringOverlay.js","webpack://evite/./assets/js/ViewInvitation/common/WhoIsComingHeader.js","webpack://evite/./assets/js/ViewInvitation/common/WhoIsComingOverlay.js","webpack://evite/./assets/js/ViewInvitation/common/constants.js","webpack://evite/./assets/js/ViewInvitation/common/mention-editor.js","webpack://evite/./assets/js/ViewInvitation/common/mention-utils.js","webpack://evite/./assets/js/ViewInvitation/common/useFitContainer.js","webpack://evite/./assets/js/ViewInvitation/history.js","webpack://evite/./assets/js/ViewInvitation/reducers/apiActions.js","webpack://evite/./assets/js/ViewInvitation/reducers/apiFetcher.js","webpack://evite/./assets/js/ViewInvitation/reducers/avatars.js","webpack://evite/./assets/js/ViewInvitation/reducers/constants.js","webpack://evite/./assets/js/ViewInvitation/reducers/coverData.js","webpack://evite/./assets/js/ViewInvitation/reducers/donation.js","webpack://evite/./assets/js/ViewInvitation/reducers/eventDetails.js","webpack://evite/./assets/js/ViewInvitation/reducers/eviteEvent.js","webpack://evite/./assets/js/ViewInvitation/reducers/fabricDesign.js","webpack://evite/./assets/js/ViewInvitation/reducers/gifting.js","webpack://evite/./assets/js/ViewInvitation/reducers/global.js","webpack://evite/./assets/js/ViewInvitation/reducers/guestList.js","webpack://evite/./assets/js/ViewInvitation/reducers/index.js","webpack://evite/./assets/js/ViewInvitation/reducers/moduleOrder.js","webpack://evite/./assets/js/ViewInvitation/reducers/newMessages.js","webpack://evite/./assets/js/ViewInvitation/reducers/photoPosts.js","webpack://evite/./assets/js/ViewInvitation/reducers/photoSummary.js","webpack://evite/./assets/js/ViewInvitation/reducers/photoUploads.js","webpack://evite/./assets/js/ViewInvitation/reducers/poll.js","webpack://evite/./assets/js/ViewInvitation/reducers/posts.js","webpack://evite/./assets/js/ViewInvitation/reducers/premiumDesign.js","webpack://evite/./assets/js/ViewInvitation/reducers/reducers.js","webpack://evite/./assets/js/ViewInvitation/reducers/registry.js","webpack://evite/./assets/js/ViewInvitation/reducers/rsvp.js","webpack://evite/./assets/js/ViewInvitation/reducers/uploadActions.js","webpack://evite/./assets/js/ViewInvitation/reducers/user.js","webpack://evite/./assets/js/ViewInvitation/reducers/whatToBring.js","webpack://evite/./assets/js/ViewInvitation/reducers/whatToBringSummary.js","webpack://evite/./assets/js/ViewInvitation/reducers/whoIsComing.js","webpack://evite/./assets/js/ViewInvitation/routes/Confirmation/RSVPConfirmation.js","webpack://evite/./assets/js/ViewInvitation/routes/Confirmation/ReactionConfirmation.js","webpack://evite/./assets/js/ViewInvitation/routes/Confirmation/index.js","webpack://evite/./assets/js/ViewInvitation/routes/Gifts/index.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/AllGuestPosts.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/AttendeeCopy.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/CommentButton.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/CommentEditor/CommentEditor.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/Guest.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/Guestlist.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/LastViewedCopy.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/LikeButton.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/ParentPost.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/Replies.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/Reply.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/RsvpLabel.js","webpack://evite/./assets/js/ViewInvitation/routes/Guests/ViewMoreRepliesButton.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/AdPanel.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/DesignTemplate.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/DetailsModule.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/DonationsModule.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/FormattedDateString.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/GiftingModal.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/GiftingModule.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/HostMessage.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/LocationBlock.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Module.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/MoreDetailsIndicator.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/PhotoUploadButton.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/PhotosModule.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/PollModule.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/PollModuleHost.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Premium/LottiAnimation.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Premium/MainAssetSlide.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Premium/PremiumCarousel.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Premium/PremiumDesign.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Premium/PremiumInsert.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Premium/Video.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Premium/VideoPlayer.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Premium/VideoRendering.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Premium/react-lottie.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/Premium/webviewMessages.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/RegistryModule.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/SettingsModule.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/ViewInvitationGoogleAd.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/WhatToBringModule.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/WhosComingModule.js","webpack://evite/./assets/js/ViewInvitation/routes/Landing/index.js","webpack://evite/./assets/js/ViewInvitation/routes/Messages/index.js","webpack://evite/./assets/js/ViewInvitation/routes/Photos/AllComments.js","webpack://evite/./assets/js/ViewInvitation/routes/Photos/Photos.js","webpack://evite/./assets/js/ViewInvitation/routes/Photos/SinglePhoto.js","webpack://evite/./assets/js/ViewInvitation/utils/analytics.js","webpack://evite/./assets/js/ViewInvitation/utils/color.js","webpack://evite/./assets/js/ViewInvitation/utils/index.js","webpack://evite/./assets/js/ViewInvitation/utils/storage.js","webpack://evite/./assets/js/ViewInvitation/utils/trackPages.js","webpack://evite/./assets/js/ViewInvitation/utils/validateEmail.js","webpack://evite/./assets/js/ViewInvitation/webview/webview.js","webpack://evite/./assets/js/common/_pb_components/atoms/Button.js","webpack://evite/./assets/js/common/_pb_components/atoms/Checkbox.js","webpack://evite/./assets/js/common/_pb_components/atoms/CloseXButton.js","webpack://evite/./assets/js/common/_pb_components/atoms/Counter.js","webpack://evite/./assets/js/common/_pb_components/atoms/Divider.js","webpack://evite/./assets/js/common/_pb_components/atoms/Input.js","webpack://evite/./assets/js/common/_pb_components/atoms/Link.js","webpack://evite/./assets/js/common/_pb_components/atoms/Overlay.js","webpack://evite/./assets/js/common/_pb_components/atoms/Picture.js","webpack://evite/./assets/js/common/_pb_components/atoms/Radio.js","webpack://evite/./assets/js/common/_pb_components/atoms/Select.js","webpack://evite/./assets/js/common/_pb_components/atoms/Toast.js","webpack://evite/./assets/js/common/_pb_components/atoms/Typography.js","webpack://evite/./assets/js/common/_pb_components/atoms/Video.js","webpack://evite/./assets/js/common/auth/utils.js","webpack://evite/./assets/js/common/canvas/CanvasStickers.js","webpack://evite/./assets/js/common/canvas/Card/Card.js","webpack://evite/./assets/js/common/canvas/animation/gif/Gif.js","webpack://evite/./assets/js/common/canvas/animation/gif/GifToSprite.js","webpack://evite/./assets/js/common/canvas/controls/align_lines.js","webpack://evite/./assets/js/common/canvas/controls/clone.js","webpack://evite/./assets/js/common/canvas/controls/remove.js","webpack://evite/./assets/js/common/canvas/controls/rotation.js","webpack://evite/./assets/js/common/canvas/customs/fonts.js","webpack://evite/./assets/js/common/canvas/customs/gif.js","webpack://evite/./assets/js/common/canvas/customs/index.js","webpack://evite/./assets/js/common/canvas/customs/letter_casing.js","webpack://evite/./assets/js/common/canvas/customs/text_border.js","webpack://evite/./assets/js/common/canvas/customs/uyo_image.js","webpack://evite/./assets/js/common/canvas/fabric.js","webpack://evite/./assets/js/common/canvas/hooks/useCanvas.js","webpack://evite/./assets/js/common/canvas/hooks/useCanvasImage.js","webpack://evite/./assets/js/common/canvas/renderIcon.js","webpack://evite/./assets/js/common/components/Checklist/Checklist.js","webpack://evite/./assets/js/common/components/Loader/CircleLoader.js","webpack://evite/./assets/js/common/components/Loader/Spinner.js","webpack://evite/./assets/js/common/components/SimpleModal/index.js","webpack://evite/./assets/js/common/components/VideoProcessing/VideoProcessing.js","webpack://evite/./assets/js/common/components/mount-component-on-body.js","webpack://evite/./assets/js/common/constants/event-origins.js","webpack://evite/./assets/js/common/fabric/CreateDesign/constants.js","webpack://evite/./assets/js/common/fabric/CreateDesign/registries.js","webpack://evite/./assets/js/common/fabric/EventGuests/components/DisplayCondition/GuestPageDisplayCondition.js","webpack://evite/./assets/js/common/fabric/EventGuests/components/DisplayCondition/addGuestsCondition.js","webpack://evite/./assets/js/common/fabric/EventGuests/components/DisplayCondition/hooks/useAddGuestsCondition.js","webpack://evite/./assets/js/common/fabric/constants.js","webpack://evite/./assets/js/common/fabric/reducers/eviteEvent/constants.js","webpack://evite/./assets/js/common/fabric/reducers/widgets/constants.js","webpack://evite/./assets/js/common/fabric/reducers/widgets/index.js","webpack://evite/./assets/js/common/fabric/reducers/widgets/reducer.js","webpack://evite/./assets/js/common/fabric/reducers/widgets/selectors.js","webpack://evite/./assets/js/common/fabric/utils.js","webpack://evite/./assets/js/common/gift-keywords/constants.js","webpack://evite/./assets/js/common/gift-keywords/reducer.js","webpack://evite/./assets/js/common/gift-keywords/utils.js","webpack://evite/./assets/js/common/global.js","webpack://evite/./assets/js/common/hooks/useBrowserHeight.js","webpack://evite/./assets/js/common/hooks/useBrowserWidth.js","webpack://evite/./assets/js/common/hooks/useImpression.js","webpack://evite/./assets/js/common/hooks/useMatchQuery.js","webpack://evite/./assets/js/common/hooks/usePrevious.js","webpack://evite/./assets/js/common/public-path.js","webpack://evite/./assets/js/common/scroll.js","webpack://evite/./assets/js/common/storage/gcs_storage.js","webpack://evite/./assets/js/common/svg/Apple.js","webpack://evite/./assets/js/common/svg/ArrowReinvention.js","webpack://evite/./assets/js/common/svg/AskAHost.js","webpack://evite/./assets/js/common/svg/CalendarReinvention.js","webpack://evite/./assets/js/common/svg/CameraAddIcon.js","webpack://evite/./assets/js/common/svg/CrownIcon.js","webpack://evite/./assets/js/common/svg/Diamond.js","webpack://evite/./assets/js/common/svg/Google.js","webpack://evite/./assets/js/common/svg/HighFiveIcon.js","webpack://evite/./assets/js/common/svg/LinkOut.js","webpack://evite/./assets/js/common/svg/MoreIcon.js","webpack://evite/./assets/js/common/svg/Outlook.js","webpack://evite/./assets/js/common/svg/PB_AddPhotosLine.js","webpack://evite/./assets/js/common/svg/PB_AlertLine.js","webpack://evite/./assets/js/common/svg/PB_Arrow.js","webpack://evite/./assets/js/common/svg/PB_BroadcastLine.js","webpack://evite/./assets/js/common/svg/PB_CalendarLine.js","webpack://evite/./assets/js/common/svg/PB_Checkmark.js","webpack://evite/./assets/js/common/svg/PB_CheckmarkCircle.js","webpack://evite/./assets/js/common/svg/PB_Chevron.js","webpack://evite/./assets/js/common/svg/PB_ClickOutLine.js","webpack://evite/./assets/js/common/svg/PB_CloseCircle.js","webpack://evite/./assets/js/common/svg/PB_CloseLine.js","webpack://evite/./assets/js/common/svg/PB_Delete.js","webpack://evite/./assets/js/common/svg/PB_DeleteBinLine.js","webpack://evite/./assets/js/common/svg/PB_EditLine.js","webpack://evite/./assets/js/common/svg/PB_FavoritesFill.js","webpack://evite/./assets/js/common/svg/PB_FavoritesLine.js","webpack://evite/./assets/js/common/svg/PB_Info.js","webpack://evite/./assets/js/common/svg/PB_InformationFill.js","webpack://evite/./assets/js/common/svg/PB_LocationAddressNavigationLine.js","webpack://evite/./assets/js/common/svg/PB_LockFill.js","webpack://evite/./assets/js/common/svg/PB_MealOptions.js","webpack://evite/./assets/js/common/svg/PB_MessagesLine.js","webpack://evite/./assets/js/common/svg/PB_Minus.js","webpack://evite/./assets/js/common/svg/PB_Plus.js","webpack://evite/./assets/js/common/svg/PB_PollLine.js","webpack://evite/./assets/js/common/svg/PB_QuestionCircle.js","webpack://evite/./assets/js/common/svg/PB_SearchLine.js","webpack://evite/./assets/js/common/svg/PB_SettingsLine.js","webpack://evite/./assets/js/common/svg/PB_Triangle.js","webpack://evite/./assets/js/common/svg/PB_WhatToBringLine.js","webpack://evite/./assets/js/common/svg/SuccessIcon.js","webpack://evite/./assets/js/common/timestamp.js","webpack://evite/./assets/js/common/utils.js","webpack://evite/./assets/js/common/utils/affiliate_tags.js","webpack://evite/./assets/js/common/utils/event_utils.js","webpack://evite/./assets/js/common/utils/sanitize_html.js","webpack://evite/./assets/js/create/components/CustomLogo/CusomLogoImage.js","webpack://evite/./assets/js/create/components/GiftRegistries/utils.js","webpack://evite/./assets/js/create/components/StatusAnimation.js","webpack://evite/./assets/js/create/history.js","webpack://evite/./assets/js/create/utils/formatters.js","webpack://evite/./assets/js/dashboard/components/EventActions/MessageTextArea.js","webpack://evite/./assets/js/event/success/Heading.js","webpack://evite/./assets/js/event/success/Subheading.js","webpack://evite/./assets/js/event/success/SuccessHeader.js","webpack://evite/./assets/js/giftlist/GiftlistImage.js","webpack://evite/./assets/js/giftlist/GuestGiftlist.js","webpack://evite/./assets/js/giftlist/utils.js","webpack://evite/./assets/js/messaging/components/AcceptDecline/AcceptDecline.js","webpack://evite/./assets/js/messaging/components/Banner/Banner.js","webpack://evite/./assets/js/messaging/components/Conversation/Conversation.js","webpack://evite/./assets/js/messaging/components/ConversationList/ConversationList.js","webpack://evite/./assets/js/messaging/components/ConversationList/SingleConversation.js","webpack://evite/./assets/js/messaging/components/GroupedAvatars/GroupedAvatars.js","webpack://evite/./assets/js/messaging/components/LeaveGroup/LeaveGroup.js","webpack://evite/./assets/js/messaging/components/Message/Message.js","webpack://evite/./assets/js/messaging/components/Message/MessageTimeStamp.js","webpack://evite/./assets/js/messaging/components/Message/StyledBubble.js","webpack://evite/./assets/js/messaging/components/Message/StyledWidget.js","webpack://evite/./assets/js/messaging/components/Message/Widget.js","webpack://evite/./assets/js/messaging/components/MessageEducation/MessageEducation.js","webpack://evite/./assets/js/messaging/components/MessageEducationButton/MessageEducationButton.js","webpack://evite/./assets/js/messaging/components/MessageErrorBoundary/MessageErrorBoundary.js","webpack://evite/./assets/js/messaging/components/MessageForm/MessageForm.js","webpack://evite/./assets/js/messaging/components/MessageForm/StyledTextArea.js","webpack://evite/./assets/js/messaging/components/MessageForm/TextareaAutosize.js","webpack://evite/./assets/js/messaging/components/MessageFromHost/MessageFromHost.js","webpack://evite/./assets/js/messaging/components/MessageHeader/InfoModalContent.js","webpack://evite/./assets/js/messaging/components/MessageHeader/MessageHeader.js","webpack://evite/./assets/js/messaging/components/MessageHub/MessageHub.js","webpack://evite/./assets/js/messaging/components/MessageHub/VirtualGroups.js","webpack://evite/./assets/js/messaging/components/MessageList/MessageList.js","webpack://evite/./assets/js/messaging/components/Messaging/Messaging.js","webpack://evite/./assets/js/messaging/components/ModalContent/ModalContent.js","webpack://evite/./assets/js/messaging/components/NewConversation/AllGuests.js","webpack://evite/./assets/js/messaging/components/NewConversation/Filters.js","webpack://evite/./assets/js/messaging/components/NewConversation/GuestByRSVP.js","webpack://evite/./assets/js/messaging/components/NewConversation/GuestList.js","webpack://evite/./assets/js/messaging/components/NewConversation/GuestListContext.js","webpack://evite/./assets/js/messaging/components/NewConversation/HostActions.js","webpack://evite/./assets/js/messaging/components/NewConversation/MessageGuestButton.js","webpack://evite/./assets/js/messaging/components/NewConversation/MessageType.js","webpack://evite/./assets/js/messaging/components/NewConversation/ModalActions.js","webpack://evite/./assets/js/messaging/components/NewConversation/NewConversation.js","webpack://evite/./assets/js/messaging/components/NewConversation/NewConversationHeader.js","webpack://evite/./assets/js/messaging/components/NewConversation/RecipientList.js","webpack://evite/./assets/js/messaging/components/NewConversation/Search.js","webpack://evite/./assets/js/messaging/components/NewConversation/ShowMoreBtn.js","webpack://evite/./assets/js/messaging/components/NewConversation/SingleGuest.js","webpack://evite/./assets/js/messaging/components/ParticipantsList/ParticipantsList.js","webpack://evite/./assets/js/messaging/components/ParticipantsList/participantsWrapper.js","webpack://evite/./assets/js/messaging/components/ProductEd/ProductEd.js","webpack://evite/./assets/js/messaging/components/SeenBy/SeenBy.js","webpack://evite/./assets/js/messaging/components/SnoozeOptions/snooze-options.js","webpack://evite/./assets/js/messaging/components/StackedAvatars/StackedAvatars.js","webpack://evite/./assets/js/messaging/components/polls/CreateEditPollModalContent.js","webpack://evite/./assets/js/messaging/components/polls/NonVoters.js","webpack://evite/./assets/js/messaging/components/polls/Poll.js","webpack://evite/./assets/js/messaging/components/polls/PollContent.js","webpack://evite/./assets/js/messaging/database.js","webpack://evite/./assets/js/messaging/index.js","webpack://evite/./assets/js/messaging/models/BroadcastGroup.js","webpack://evite/./assets/js/messaging/models/GroupDocument.js","webpack://evite/./assets/js/messaging/routes.js","webpack://evite/./assets/js/messaging/store.js","webpack://evite/./assets/js/messaging/utils/formatters.js","webpack://evite/./assets/js/messaging/utils/parsers.js","webpack://evite/./assets/js/messaging/utils/setSeenBy.js","webpack://evite/./assets/js/messaging/utils/tsunamiAuth.js","webpack://evite/./assets/js/messaging/utils/utils.js","webpack://evite/./assets/js/modal/_ajax_error_handler.js","webpack://evite/./assets/js/modal/ajax_error_modal.js","webpack://evite/./assets/js/modal/auth_modal.js","webpack://evite/./assets/js/modal/base.js","webpack://evite/./assets/js/modal/captcha_modal.js","webpack://evite/./assets/js/modal/dialog_modal.js","webpack://evite/./assets/js/modal/evite_modal.js","webpack://evite/./assets/js/modal/index.js","webpack://evite/./assets/js/modal/loading_modal.js","webpack://evite/./assets/js/modal/popup_modal.js","webpack://evite/./assets/js/modal/send_message_modal.js","webpack://evite/./assets/js/modal/warning_modal.js","webpack://evite/./assets/js/view_invitation/activity-feed/ActivityFeedApi.js","webpack://evite/./assets/js/view_invitation/activity-feed/ActivityFeedStore.js","webpack://evite/./assets/js/view_invitation/app-router.js","webpack://evite/./assets/js/view_invitation/avatars/components.js","webpack://evite/./assets/js/view_invitation/avatars/constants.js","webpack://evite/./assets/js/view_invitation/avatars/reducers.js","webpack://evite/./assets/js/view_invitation/common/components/simple-modal.js","webpack://evite/./assets/js/view_invitation/common/components/time-since.js","webpack://evite/./assets/js/view_invitation/event-view-tabs/actions.js","webpack://evite/./assets/js/view_invitation/event-view-tabs/constants.js","webpack://evite/./assets/js/view_invitation/event-view-tabs/reducers.js","webpack://evite/./assets/js/view_invitation/gifts/utils.js","webpack://evite/./assets/js/view_invitation/guestlist/ReplyStatus.js","webpack://evite/./assets/js/view_invitation/guestlist/actions.js","webpack://evite/./assets/js/view_invitation/guestlist/constants.js","webpack://evite/./assets/js/view_invitation/guestlist/store.js","webpack://evite/./assets/js/view_invitation/history.js","webpack://evite/./assets/js/view_invitation/message-modal/constants.js","webpack://evite/./assets/js/view_invitation/message-modal/reducers.js","webpack://evite/./assets/js/view_invitation/photos/PhotosApi.js","webpack://evite/./assets/js/view_invitation/photos/PhotosStore.js","webpack://evite/./assets/js/view_invitation/polls/actions.js","webpack://evite/./assets/js/view_invitation/polls/constants.js","webpack://evite/./assets/js/view_invitation/polls/reducers.js","webpack://evite/./assets/js/view_invitation/rsvp/actions.js","webpack://evite/./assets/js/view_invitation/rsvp/constants.js","webpack://evite/./assets/js/view_invitation/rsvp/reducers.js","webpack://evite/./assets/js/view_invitation/slideshow/constants.js","webpack://evite/./assets/js/view_invitation/slideshow/reducers.js","webpack://evite/./assets/js/view_invitation/sponsored-registry/actions.js","webpack://evite/./assets/js/view_invitation/sponsored-registry/constants.js","webpack://evite/./assets/js/view_invitation/sponsored-registry/reducers.js","webpack://evite/./assets/js/view_invitation/store-utils.js","webpack://evite/./assets/js/view_invitation/store.js","webpack://evite/./assets/js/view_invitation/utils.js","webpack://evite/./assets/js/view_invitation/video-r.js","webpack://evite/./assets/js/view_invitation/what-to-bring/actions.js","webpack://evite/./assets/js/view_invitation/what-to-bring/constants.js","webpack://evite/./assets/js/view_invitation/what-to-bring/reducers.js","webpack://evite/./node_modules/clsx/dist/clsx.m.js","webpack://evite/./node_modules/deepmerge/dist/cjs.js","webpack://evite/./node_modules/dom-align/dist-web/index.js","webpack://evite/./node_modules/dompurify/dist/purify.js","webpack://evite/./node_modules/exenv/index.js","webpack://evite/./node_modules/fabric/dist/fabric.js","webpack://evite/./node_modules/@firebase/util/dist/index.esm2017.js","webpack://evite/./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack://evite/./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack://evite/./node_modules/idb/build/wrap-idb-value.js","webpack://evite/./node_modules/idb/build/index.js","webpack://evite/./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack://evite/./node_modules/@firebase/app-compat/dist/esm/index.esm2017.js","webpack://evite/./node_modules/firebase/compat/app/dist/index.esm.js","webpack://evite/./node_modules/@firebase/auth/dist/esm2017/index-90ebcfae.js","webpack://evite/./node_modules/@firebase/auth/dist/esm2017/internal.js","webpack://evite/./node_modules/@firebase/auth-compat/dist/index.esm2017.js","webpack://evite/./node_modules/@firebase/database/dist/index.esm2017.js","webpack://evite/./node_modules/@firebase/database-compat/dist/index.esm2017.js","webpack://evite/./node_modules/firebase-react-store/dist/firebase-react-store.js","webpack://evite/./node_modules/focus-trap-react/dist/focus-trap-react.js","webpack://evite/./node_modules/focus-trap/index.js","webpack://evite/./node_modules/gifuct-js/lib/deinterlace.js","webpack://evite/./node_modules/gifuct-js/lib/index.js","webpack://evite/./node_modules/gifuct-js/lib/lzw.js","webpack://evite/./node_modules/history/esm/history.js","webpack://evite/./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","webpack://evite/./node_modules/html-dom-parser/lib/client/constants.js","webpack://evite/./node_modules/html-dom-parser/lib/client/domparser.js","webpack://evite/./node_modules/html-dom-parser/lib/client/html-to-dom.js","webpack://evite/./node_modules/html-dom-parser/lib/client/utilities.js","webpack://evite/./node_modules/html-dom-parser/node_modules/domelementtype/lib/index.js","webpack://evite/./node_modules/html-dom-parser/node_modules/domhandler/lib/node.js","webpack://evite/./node_modules/html-react-parser/index.js","webpack://evite/./node_modules/html-react-parser/lib/attributes-to-props.js","webpack://evite/./node_modules/html-react-parser/lib/dom-to-react.js","webpack://evite/./node_modules/html-react-parser/lib/utilities.js","webpack://evite/./node_modules/html-react-parser/node_modules/domelementtype/lib/index.js","webpack://evite/./node_modules/html-react-parser/node_modules/domhandler/lib/index.js","webpack://evite/./node_modules/html-react-parser/node_modules/domhandler/lib/node.js","webpack://evite/./node_modules/immutability-helper/index.js","webpack://evite/./node_modules/inline-style-parser/index.js","webpack://evite/./node_modules/intersection-observer/intersection-observer.js","webpack://evite/./node_modules/invariant/browser.js","webpack://evite/./node_modules/is-what/dist/index.esm.js","webpack://evite/./node_modules/isomorphic-unfetch/browser.js","webpack://evite/./node_modules/js-binary-schema-parser/lib/index.js","webpack://evite/./node_modules/js-binary-schema-parser/lib/parsers/uint8.js","webpack://evite/./node_modules/js-binary-schema-parser/lib/schemas/gif.js","webpack://evite/./node_modules/linkifyjs/html.js","webpack://evite/./node_modules/linkifyjs/lib/linkify-html.js","webpack://evite/./node_modules/linkifyjs/lib/linkify-react.js","webpack://evite/./node_modules/linkifyjs/lib/linkify.js","webpack://evite/./node_modules/linkifyjs/lib/linkify/core/parser.js","webpack://evite/./node_modules/linkifyjs/lib/linkify/core/scanner.js","webpack://evite/./node_modules/linkifyjs/lib/linkify/core/state.js","webpack://evite/./node_modules/linkifyjs/lib/linkify/core/tokens/create-token-class.js","webpack://evite/./node_modules/linkifyjs/lib/linkify/core/tokens/multi.js","webpack://evite/./node_modules/linkifyjs/lib/linkify/core/tokens/text.js","webpack://evite/./node_modules/linkifyjs/lib/linkify/utils/class.js","webpack://evite/./node_modules/linkifyjs/lib/linkify/utils/options.js","webpack://evite/./node_modules/linkifyjs/lib/simple-html-tokenizer.js","webpack://evite/./node_modules/linkifyjs/lib/simple-html-tokenizer/entity-parser.js","webpack://evite/./node_modules/linkifyjs/lib/simple-html-tokenizer/evented-tokenizer.js","webpack://evite/./node_modules/linkifyjs/lib/simple-html-tokenizer/html5-named-char-refs.js","webpack://evite/./node_modules/linkifyjs/lib/simple-html-tokenizer/tokenize.js","webpack://evite/./node_modules/linkifyjs/lib/simple-html-tokenizer/tokenizer.js","webpack://evite/./node_modules/linkifyjs/lib/simple-html-tokenizer/utils.js","webpack://evite/./node_modules/linkifyjs/react.js","webpack://evite/./node_modules/load-script/index.js","webpack://evite/./node_modules/lodash/_DataView.js","webpack://evite/./node_modules/lodash/_Hash.js","webpack://evite/./node_modules/lodash/_ListCache.js","webpack://evite/./node_modules/lodash/_Map.js","webpack://evite/./node_modules/lodash/_MapCache.js","webpack://evite/./node_modules/lodash/_Promise.js","webpack://evite/./node_modules/lodash/_Set.js","webpack://evite/./node_modules/lodash/_SetCache.js","webpack://evite/./node_modules/lodash/_Stack.js","webpack://evite/./node_modules/lodash/_Symbol.js","webpack://evite/./node_modules/lodash/_Uint8Array.js","webpack://evite/./node_modules/lodash/_WeakMap.js","webpack://evite/./node_modules/lodash/_apply.js","webpack://evite/./node_modules/lodash/_arrayEach.js","webpack://evite/./node_modules/lodash/_arrayFilter.js","webpack://evite/./node_modules/lodash/_arrayLikeKeys.js","webpack://evite/./node_modules/lodash/_arrayMap.js","webpack://evite/./node_modules/lodash/_arrayPush.js","webpack://evite/./node_modules/lodash/_arraySome.js","webpack://evite/./node_modules/lodash/_assignValue.js","webpack://evite/./node_modules/lodash/_assocIndexOf.js","webpack://evite/./node_modules/lodash/_baseAssign.js","webpack://evite/./node_modules/lodash/_baseAssignIn.js","webpack://evite/./node_modules/lodash/_baseAssignValue.js","webpack://evite/./node_modules/lodash/_baseClone.js","webpack://evite/./node_modules/lodash/_baseCreate.js","webpack://evite/./node_modules/lodash/_baseFlatten.js","webpack://evite/./node_modules/lodash/_baseGet.js","webpack://evite/./node_modules/lodash/_baseGetAllKeys.js","webpack://evite/./node_modules/lodash/_baseGetTag.js","webpack://evite/./node_modules/lodash/_baseIsArguments.js","webpack://evite/./node_modules/lodash/_baseIsEqual.js","webpack://evite/./node_modules/lodash/_baseIsEqualDeep.js","webpack://evite/./node_modules/lodash/_baseIsMap.js","webpack://evite/./node_modules/lodash/_baseIsNative.js","webpack://evite/./node_modules/lodash/_baseIsSet.js","webpack://evite/./node_modules/lodash/_baseIsTypedArray.js","webpack://evite/./node_modules/lodash/_baseKeys.js","webpack://evite/./node_modules/lodash/_baseKeysIn.js","webpack://evite/./node_modules/lodash/_baseSetToString.js","webpack://evite/./node_modules/lodash/_baseSlice.js","webpack://evite/./node_modules/lodash/_baseTimes.js","webpack://evite/./node_modules/lodash/_baseToString.js","webpack://evite/./node_modules/lodash/_baseUnary.js","webpack://evite/./node_modules/lodash/_baseUnset.js","webpack://evite/./node_modules/lodash/_baseValues.js","webpack://evite/./node_modules/lodash/_cacheHas.js","webpack://evite/./node_modules/lodash/_castPath.js","webpack://evite/./node_modules/lodash/_cloneArrayBuffer.js","webpack://evite/./node_modules/lodash/_cloneBuffer.js","webpack://evite/./node_modules/lodash/_cloneDataView.js","webpack://evite/./node_modules/lodash/_cloneRegExp.js","webpack://evite/./node_modules/lodash/_cloneSymbol.js","webpack://evite/./node_modules/lodash/_cloneTypedArray.js","webpack://evite/./node_modules/lodash/_copyArray.js","webpack://evite/./node_modules/lodash/_copyObject.js","webpack://evite/./node_modules/lodash/_copySymbols.js","webpack://evite/./node_modules/lodash/_copySymbolsIn.js","webpack://evite/./node_modules/lodash/_coreJsData.js","webpack://evite/./node_modules/lodash/_customOmitClone.js","webpack://evite/./node_modules/lodash/_defineProperty.js","webpack://evite/./node_modules/lodash/_equalArrays.js","webpack://evite/./node_modules/lodash/_equalByTag.js","webpack://evite/./node_modules/lodash/_equalObjects.js","webpack://evite/./node_modules/lodash/_flatRest.js","webpack://evite/./node_modules/lodash/_freeGlobal.js","webpack://evite/./node_modules/lodash/_getAllKeys.js","webpack://evite/./node_modules/lodash/_getAllKeysIn.js","webpack://evite/./node_modules/lodash/_getMapData.js","webpack://evite/./node_modules/lodash/_getNative.js","webpack://evite/./node_modules/lodash/_getPrototype.js","webpack://evite/./node_modules/lodash/_getRawTag.js","webpack://evite/./node_modules/lodash/_getSymbols.js","webpack://evite/./node_modules/lodash/_getSymbolsIn.js","webpack://evite/./node_modules/lodash/_getTag.js","webpack://evite/./node_modules/lodash/_getValue.js","webpack://evite/./node_modules/lodash/_hashClear.js","webpack://evite/./node_modules/lodash/_hashDelete.js","webpack://evite/./node_modules/lodash/_hashGet.js","webpack://evite/./node_modules/lodash/_hashHas.js","webpack://evite/./node_modules/lodash/_hashSet.js","webpack://evite/./node_modules/lodash/_initCloneArray.js","webpack://evite/./node_modules/lodash/_initCloneByTag.js","webpack://evite/./node_modules/lodash/_initCloneObject.js","webpack://evite/./node_modules/lodash/_isFlattenable.js","webpack://evite/./node_modules/lodash/_isIndex.js","webpack://evite/./node_modules/lodash/_isKey.js","webpack://evite/./node_modules/lodash/_isKeyable.js","webpack://evite/./node_modules/lodash/_isMasked.js","webpack://evite/./node_modules/lodash/_isPrototype.js","webpack://evite/./node_modules/lodash/_listCacheClear.js","webpack://evite/./node_modules/lodash/_listCacheDelete.js","webpack://evite/./node_modules/lodash/_listCacheGet.js","webpack://evite/./node_modules/lodash/_listCacheHas.js","webpack://evite/./node_modules/lodash/_listCacheSet.js","webpack://evite/./node_modules/lodash/_mapCacheClear.js","webpack://evite/./node_modules/lodash/_mapCacheDelete.js","webpack://evite/./node_modules/lodash/_mapCacheGet.js","webpack://evite/./node_modules/lodash/_mapCacheHas.js","webpack://evite/./node_modules/lodash/_mapCacheSet.js","webpack://evite/./node_modules/lodash/_mapToArray.js","webpack://evite/./node_modules/lodash/_memoizeCapped.js","webpack://evite/./node_modules/lodash/_nativeCreate.js","webpack://evite/./node_modules/lodash/_nativeKeys.js","webpack://evite/./node_modules/lodash/_nativeKeysIn.js","webpack://evite/./node_modules/lodash/_nodeUtil.js","webpack://evite/./node_modules/lodash/_objectToString.js","webpack://evite/./node_modules/lodash/_overArg.js","webpack://evite/./node_modules/lodash/_overRest.js","webpack://evite/./node_modules/lodash/_parent.js","webpack://evite/./node_modules/lodash/_root.js","webpack://evite/./node_modules/lodash/_setCacheAdd.js","webpack://evite/./node_modules/lodash/_setCacheHas.js","webpack://evite/./node_modules/lodash/_setToArray.js","webpack://evite/./node_modules/lodash/_setToString.js","webpack://evite/./node_modules/lodash/_shortOut.js","webpack://evite/./node_modules/lodash/_stackClear.js","webpack://evite/./node_modules/lodash/_stackDelete.js","webpack://evite/./node_modules/lodash/_stackGet.js","webpack://evite/./node_modules/lodash/_stackHas.js","webpack://evite/./node_modules/lodash/_stackSet.js","webpack://evite/./node_modules/lodash/_stringToPath.js","webpack://evite/./node_modules/lodash/_toKey.js","webpack://evite/./node_modules/lodash/_toSource.js","webpack://evite/./node_modules/lodash/constant.js","webpack://evite/./node_modules/lodash/eq.js","webpack://evite/./node_modules/lodash/flatten.js","webpack://evite/./node_modules/lodash/identity.js","webpack://evite/./node_modules/lodash/isArguments.js","webpack://evite/./node_modules/lodash/isArray.js","webpack://evite/./node_modules/lodash/isArrayLike.js","webpack://evite/./node_modules/lodash/isBuffer.js","webpack://evite/./node_modules/lodash/isEqual.js","webpack://evite/./node_modules/lodash/isFinite.js","webpack://evite/./node_modules/lodash/isFunction.js","webpack://evite/./node_modules/lodash/isLength.js","webpack://evite/./node_modules/lodash/isMap.js","webpack://evite/./node_modules/lodash/isNumber.js","webpack://evite/./node_modules/lodash/isObject.js","webpack://evite/./node_modules/lodash/isObjectLike.js","webpack://evite/./node_modules/lodash/isPlainObject.js","webpack://evite/./node_modules/lodash/isSet.js","webpack://evite/./node_modules/lodash/isSymbol.js","webpack://evite/./node_modules/lodash/isTypedArray.js","webpack://evite/./node_modules/lodash/keys.js","webpack://evite/./node_modules/lodash/keysIn.js","webpack://evite/./node_modules/lodash/last.js","webpack://evite/./node_modules/lodash/memoize.js","webpack://evite/./node_modules/lodash/omit.js","webpack://evite/./node_modules/lodash/stubArray.js","webpack://evite/./node_modules/lodash/stubFalse.js","webpack://evite/./node_modules/lodash/toString.js","webpack://evite/./node_modules/lodash/values.js","webpack://evite/./node_modules/lottie-web/build/player/lottie.js","webpack://evite/./node_modules/memoize-one/dist/memoize-one.esm.js","webpack://evite/./node_modules/merge-anything/dist/index.esm.js","webpack://evite/./assets/sass/bnr_styleguide/base/_exports.sass","webpack://evite/./assets/sass/pb_styleguide/base/_exports.sass","webpack://evite/./assets/sass/reinvention_styleguide/base/_exports.sass","webpack://evite/./node_modules/object-assign/index.js","webpack://evite/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://evite/./node_modules/prop-types/index.js","webpack://evite/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://evite/./node_modules/rc-util/es/raf.js","webpack://evite/./node_modules/rc-util/es/Dom/contains.js","webpack://evite/./node_modules/rc-util/es/Dom/findDOMNode.js","webpack://evite/./node_modules/rc-util/es/ref.js","webpack://evite/./node_modules/rc-util/es/Dom/addEventListener.js","webpack://evite/./node_modules/rc-util/es/Dom/canUseDom.js","webpack://evite/./node_modules/rc-util/es/Portal.js","webpack://evite/./node_modules/rc-trigger/es/utils/alignUtil.js","webpack://evite/./node_modules/rc-motion/es/context.js","webpack://evite/./node_modules/rc-motion/es/DomWrapper.js","webpack://evite/./node_modules/rc-util/es/hooks/useState.js","webpack://evite/./node_modules/rc-motion/es/interface.js","webpack://evite/./node_modules/rc-motion/es/util/motion.js","webpack://evite/./node_modules/rc-motion/es/hooks/useDomMotionEvents.js","webpack://evite/./node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js","webpack://evite/./node_modules/rc-motion/es/hooks/useStepQueue.js","webpack://evite/./node_modules/rc-motion/es/CSSMotion.js","webpack://evite/./node_modules/rc-motion/es/hooks/useStatus.js","webpack://evite/./node_modules/rc-motion/es/hooks/useNextFrame.js","webpack://evite/./node_modules/rc-motion/es/util/diff.js","webpack://evite/./node_modules/rc-motion/es/CSSMotionList.js","webpack://evite/./node_modules/rc-motion/es/index.js","webpack://evite/./node_modules/rc-trigger/es/utils/legacyUtil.js","webpack://evite/./node_modules/rc-trigger/es/Popup/Mask.js","webpack://evite/./node_modules/rc-util/es/warning.js","webpack://evite/./node_modules/rc-util/es/hooks/useLayoutEffect.js","webpack://evite/./node_modules/rc-align/es/util.js","webpack://evite/./node_modules/rc-align/es/Align.js","webpack://evite/./node_modules/rc-align/es/hooks/useBuffer.js","webpack://evite/./node_modules/rc-util/es/Dom/isVisible.js","webpack://evite/./node_modules/rc-util/es/isEqual.js","webpack://evite/./node_modules/rc-align/es/index.js","webpack://evite/./node_modules/rc-trigger/es/Popup/useVisibleStatus.js","webpack://evite/./node_modules/rc-trigger/es/Popup/PopupInner.js","webpack://evite/./node_modules/rc-trigger/es/Popup/useStretchStyle.js","webpack://evite/./node_modules/rc-trigger/es/Popup/MobilePopupInner.js","webpack://evite/./node_modules/rc-trigger/es/Popup/index.js","webpack://evite/./node_modules/rc-util/es/isMobile.js","webpack://evite/./node_modules/rc-trigger/es/context.js","webpack://evite/./node_modules/rc-trigger/es/index.js","webpack://evite/./node_modules/rc-tooltip/es/placements.js","webpack://evite/./node_modules/rc-tooltip/es/Popup.js","webpack://evite/./node_modules/rc-tooltip/es/Tooltip.js","webpack://evite/./node_modules/rc-tooltip/es/index.js","webpack://evite/./node_modules/rc-util/node_modules/react-is/cjs/react-is.production.min.js","webpack://evite/./node_modules/rc-util/node_modules/react-is/index.js","webpack://evite/./node_modules/react-dom/cjs/react-dom-server.browser.production.min.js","webpack://evite/./node_modules/react-dom/server.browser.js","webpack://evite/./node_modules/react-intersection-observer/react-intersection-observer.m.js","webpack://evite/./node_modules/react-is/cjs/react-is.production.min.js","webpack://evite/./node_modules/react-is/index.js","webpack://evite/./node_modules/react-lifecycles-compat/react-lifecycles-compat.es.js","webpack://evite/./node_modules/react-mentions/es/utils.js","webpack://evite/./node_modules/react-mentions/es/Suggestion.js","webpack://evite/./node_modules/react-mentions/es/LoadingIndicator.js","webpack://evite/./node_modules/react-mentions/es/SuggestionsOverlay.js","webpack://evite/./node_modules/react-mentions/es/Mention.js","webpack://evite/./node_modules/react-mentions/es/Highlighter.js","webpack://evite/./node_modules/react-mentions/es/MentionsInput.js","webpack://evite/./node_modules/react-modal-hook/dist/index.es.js","webpack://evite/./node_modules/react-modal/lib/components/Modal.js","webpack://evite/./node_modules/react-modal/lib/components/ModalPortal.js","webpack://evite/./node_modules/react-modal/lib/helpers/ariaAppHider.js","webpack://evite/./node_modules/react-modal/lib/helpers/bodyTrap.js","webpack://evite/./node_modules/react-modal/lib/helpers/classList.js","webpack://evite/./node_modules/react-modal/lib/helpers/focusManager.js","webpack://evite/./node_modules/react-modal/lib/helpers/portalOpenInstances.js","webpack://evite/./node_modules/react-modal/lib/helpers/safeHTMLElement.js","webpack://evite/./node_modules/react-modal/lib/helpers/scopeTab.js","webpack://evite/./node_modules/react-modal/lib/helpers/tabbable.js","webpack://evite/./node_modules/react-modal/lib/index.js","webpack://evite/./node_modules/react-modal/node_modules/warning/warning.js","webpack://evite/./node_modules/react-player/lib/Player.js","webpack://evite/./node_modules/react-player/lib/Preview.js","webpack://evite/./node_modules/react-player/lib/ReactPlayer.js","webpack://evite/./node_modules/react-player/lib/players/DailyMotion.js","webpack://evite/./node_modules/react-player/lib/players/Facebook.js","webpack://evite/./node_modules/react-player/lib/players/FilePlayer.js","webpack://evite/./node_modules/react-player/lib/players/Mixcloud.js","webpack://evite/./node_modules/react-player/lib/players/SoundCloud.js","webpack://evite/./node_modules/react-player/lib/players/Streamable.js","webpack://evite/./node_modules/react-player/lib/players/Twitch.js","webpack://evite/./node_modules/react-player/lib/players/Vimeo.js","webpack://evite/./node_modules/react-player/lib/players/Wistia.js","webpack://evite/./node_modules/react-player/lib/players/YouTube.js","webpack://evite/./node_modules/react-player/lib/players/index.js","webpack://evite/./node_modules/react-player/lib/preload.js","webpack://evite/./node_modules/react-player/lib/props.js","webpack://evite/./node_modules/react-player/lib/singlePlayer.js","webpack://evite/./node_modules/react-player/lib/utils.js","webpack://evite/./node_modules/react-property/lib/index.js","webpack://evite/./node_modules/react-property/lib/possibleStandardNamesOptimized.js","webpack://evite/./node_modules/react-redux/es/components/Context.js","webpack://evite/./node_modules/react-redux/es/utils/batch.js","webpack://evite/./node_modules/react-redux/es/utils/Subscription.js","webpack://evite/./node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","webpack://evite/./node_modules/react-redux/es/components/Provider.js","webpack://evite/./node_modules/react-redux/es/components/connectAdvanced.js","webpack://evite/./node_modules/react-redux/es/utils/shallowEqual.js","webpack://evite/./node_modules/react-redux/es/connect/wrapMapToProps.js","webpack://evite/./node_modules/react-redux/es/connect/mapDispatchToProps.js","webpack://evite/./node_modules/react-redux/es/utils/bindActionCreators.js","webpack://evite/./node_modules/react-redux/es/connect/mapStateToProps.js","webpack://evite/./node_modules/react-redux/es/connect/mergeProps.js","webpack://evite/./node_modules/react-redux/es/connect/selectorFactory.js","webpack://evite/./node_modules/react-redux/es/connect/connect.js","webpack://evite/./node_modules/react-redux/es/hooks/useReduxContext.js","webpack://evite/./node_modules/react-redux/es/hooks/useStore.js","webpack://evite/./node_modules/react-redux/es/hooks/useDispatch.js","webpack://evite/./node_modules/react-redux/es/hooks/useSelector.js","webpack://evite/./node_modules/react-redux/es/index.js","webpack://evite/./node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js","webpack://evite/./node_modules/react-redux/node_modules/react-is/index.js","webpack://evite/./node_modules/react-router-dom/esm/react-router-dom.js","webpack://evite/./node_modules/react-select/dist/useCreatable-8a6670a3.esm.js","webpack://evite/./node_modules/react-select/creatable/dist/react-select.esm.js","webpack://evite/./node_modules/react-select/dist/Select-54ac8379.esm.js","webpack://evite/./node_modules/react-select/dist/index-a7690a33.esm.js","webpack://evite/./node_modules/react-select/dist/react-select.esm.js","webpack://evite/./node_modules/react-select/dist/useStateManager-68425271.esm.js","webpack://evite/./node_modules/react-toastify/dist/react-toastify.js","webpack://evite/./node_modules/react-transition-group/esm/utils/ChildMapping.js","webpack://evite/./node_modules/react-transition-group/esm/TransitionGroup.js","webpack://evite/./node_modules/react-transition-group/esm/TransitionGroupContext.js","webpack://evite/./node_modules/dom-helpers/esm/removeClass.js","webpack://evite/./node_modules/react-transition-group/esm/config.js","webpack://evite/./node_modules/react-transition-group/esm/utils/reflow.js","webpack://evite/./node_modules/react-transition-group/esm/Transition.js","webpack://evite/./node_modules/react-transition-group/esm/CSSTransition.js","webpack://evite/./node_modules/dom-helpers/esm/addClass.js","webpack://evite/./node_modules/dom-helpers/esm/hasClass.js","webpack://evite/./node_modules/react-transition-group/esm/ReplaceTransition.js","webpack://evite/./node_modules/react-transition-group/esm/SwitchTransition.js","webpack://evite/./node_modules/redux-thunk/es/index.js","webpack://evite/./node_modules/redux/es/redux.js","webpack://evite/./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","webpack://evite/./node_modules/resolve-pathname/esm/resolve-pathname.js","webpack://evite/./node_modules/style-to-js/cjs/index.js","webpack://evite/./node_modules/style-to-js/cjs/utilities.js","webpack://evite/./node_modules/style-to-object/index.js","webpack://evite/./node_modules/styled-components/dist/styled-components.browser.esm.js","webpack://evite/./node_modules/styled-components/node_modules/@emotion/unitless/dist/unitless.browser.esm.js","webpack://evite/./node_modules/stylis-rule-sheet/index.js","webpack://evite/./node_modules/stylis/stylis.min.js","webpack://evite/./node_modules/substyle/lib/EnhancerProvider.js","webpack://evite/./node_modules/substyle/lib/coerceSelection.js","webpack://evite/./node_modules/substyle/lib/createSubstyle.js","webpack://evite/./node_modules/substyle/lib/defaultPropsDecorator.js","webpack://evite/./node_modules/substyle/lib/defaultStyle.js","webpack://evite/./node_modules/substyle/lib/filterKeys.js","webpack://evite/./node_modules/substyle/lib/index.js","webpack://evite/./node_modules/substyle/lib/memoize.js","webpack://evite/./node_modules/substyle/lib/pickStyles.js","webpack://evite/./node_modules/substyle/lib/types.js","webpack://evite/./node_modules/substyle/lib/utils.js","webpack://evite/./node_modules/tabbable/index.js","webpack://evite/./node_modules/unfetch/dist/unfetch.module.js","webpack://evite/./node_modules/uuid/dist/esm-browser/rng.js","webpack://evite/./node_modules/uuid/dist/esm-browser/regex.js","webpack://evite/./node_modules/uuid/dist/esm-browser/validate.js","webpack://evite/./node_modules/uuid/dist/esm-browser/stringify.js","webpack://evite/./node_modules/uuid/dist/esm-browser/v1.js","webpack://evite/./node_modules/uuid/dist/esm-browser/parse.js","webpack://evite/./node_modules/uuid/dist/esm-browser/v35.js","webpack://evite/./node_modules/uuid/dist/esm-browser/md5.js","webpack://evite/./node_modules/uuid/dist/esm-browser/v3.js","webpack://evite/./node_modules/uuid/dist/esm-browser/v4.js","webpack://evite/./node_modules/uuid/dist/esm-browser/sha1.js","webpack://evite/./node_modules/uuid/dist/esm-browser/v5.js","webpack://evite/./node_modules/uuid/dist/esm-browser/nil.js","webpack://evite/./node_modules/uuid/dist/esm-browser/version.js","webpack://evite/./node_modules/value-equal/esm/value-equal.js","webpack://evite/./node_modules/warning/browser.js","webpack://evite/./node_modules/xtend/immutable.js","webpack://evite/external var \"XDate\"","webpack://evite/external var \"evite.exports.React\"","webpack://evite/external var \"evite.exports.ReactDom\"","webpack://evite/external var \"evite.exports.ReactRouter\"","webpack://evite/external var \"evite.exports.mobx\"","webpack://evite/external var \"evite.exports.mobxReact\"","webpack://evite/external var \"window.evite\"","webpack://evite/external var \"window.evite.urls\"","webpack://evite/./node_modules/classnames/index.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/createSuper.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://evite/./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack://evite/./node_modules/tiny-invariant/dist/esm/tiny-invariant.js","webpack://evite/./node_modules/tslib/tslib.es6.mjs","webpack://evite/webpack/bootstrap","webpack://evite/webpack/runtime/create fake namespace object","webpack://evite/webpack/runtime/load script","webpack://evite/webpack/runtime/amd options","webpack://evite/webpack/runtime/compat get default export","webpack://evite/webpack/runtime/define property getters","webpack://evite/webpack/runtime/ensure chunk","webpack://evite/webpack/runtime/get javascript chunk filename","webpack://evite/webpack/runtime/get mini-css chunk filename","webpack://evite/webpack/runtime/global","webpack://evite/webpack/runtime/hasOwnProperty shorthand","webpack://evite/webpack/runtime/make namespace object","webpack://evite/webpack/runtime/node module decorator","webpack://evite/webpack/runtime/publicPath","webpack://evite/webpack/runtime/jsonp chunk loading","webpack://evite/webpack/runtime/nonce","webpack://evite/./assets/js/ViewInvitation/app.js"],"sourcesContent":["import { __read, __spreadArray } from \"tslib\";\nexport function compose() {\n    var funcs = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        funcs[_i] = arguments[_i];\n    }\n    if (funcs.length === 0) {\n        return function (arg) { return arg; };\n    }\n    if (funcs.length === 1) {\n        return funcs[0];\n    }\n    return funcs.reduce(function (a, b) { return function () {\n        var args = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n        }\n        return a(b.apply(void 0, __spreadArray([], __read(args), false)));\n    }; });\n}\n//# sourceMappingURL=functional.js.map","export function toHashMapString(obj) {\n    if (!obj)\n        return;\n    Object.keys(obj).forEach(function (k) {\n        if (typeof obj[k] === \"object\") {\n            obj[k] = JSON.stringify(obj[k]);\n        }\n        obj[k] = String(obj[k]);\n    });\n    return obj;\n}\nexport function toHashMap(obj) {\n    if (!obj)\n        return;\n    Object.keys(obj).forEach(function (k) {\n        if (typeof obj[k] === \"string\" ||\n            typeof obj[k] === \"boolean\" ||\n            typeof obj[k] === \"number\") {\n            return;\n        }\n        obj[k] = JSON.stringify(obj[k]);\n    });\n    return obj;\n}\n//# sourceMappingURL=hashmap.js.map","export function isError(error) {\n    return (typeof error === \"object\" && typeof error.message !== \"undefined\");\n}\nexport function getStacktrace(error) {\n    if (typeof error.stacktrace !== \"undefined\" ||\n        typeof error[\"opera#sourceloc\"] !== \"undefined\") {\n        var _a = error.stacktrace, stacktrace = _a === void 0 ? \"\" : _a;\n        return stacktrace\n            .split(\"\\n\")\n            .filter(function (line) { return line !== \"\"; });\n    }\n    else if (error.stack) {\n        var _b = error.stack, stack = _b === void 0 ? \"\" : _b;\n        return stack.split(\"\\n\").filter(function (line) { return line !== \"\"; });\n    }\n    else {\n        return [\"No stacktrace available\"];\n    }\n}\n//# sourceMappingURL=error.js.map","export function urlEncode(object) {\n    return Object.keys(object)\n        .map(function (key) { return \"\".concat(encodeURIComponent(key), \"=\").concat(encodeURIComponent(object[key])); })\n        .join(\"&\");\n}\n//# sourceMappingURL=url.js.map","export function isNodeEnv() {\n    return (Object.prototype.toString.call(typeof process !== \"undefined\" ? process : 0) === \"[object process]\");\n}\nexport function getGlobalObject() {\n    return (isNodeEnv()\n        ? global\n        : typeof window !== \"undefined\"\n            ? window\n            : typeof self !== \"undefined\"\n                ? self\n                : {});\n}\n//# sourceMappingURL=environment.js.map","var Serializable = (function () {\n    function Serializable(data) {\n        this._data = data;\n    }\n    Serializable.prototype.toJSON = function () {\n        return JSON.stringify(this._data);\n    };\n    Serializable.prototype.serialize = function () {\n        return this._data;\n    };\n    return Serializable;\n}());\nexport { Serializable };\n//# sourceMappingURL=serializable.js.map","import { getGlobalObject, isNodeEnv } from \"@appsignal/core\";\nvar Environment = (function () {\n    function Environment() {\n    }\n    Environment.serialize = function () {\n        return {\n            transport: this.transport(),\n            origin: this.origin()\n        };\n    };\n    Environment.origin = function () {\n        var globals = getGlobalObject();\n        if (!globals.location) {\n            return \"\";\n        }\n        return (globals.location.origin ||\n            \"\".concat(globals.location.protocol, \"//\").concat(globals.location.hostname));\n    };\n    Environment.transport = function () {\n        var globals = getGlobalObject();\n        if (isNodeEnv() && typeof jest === \"undefined\") {\n            return \"NodeHTTP\";\n        }\n        else if (globals.XDomainRequest) {\n            return \"XDomainRequest\";\n        }\n        else if (globals.XMLHttpRequest && !globals.fetch) {\n            return \"XMLHttpRequest\";\n        }\n        else {\n            return \"fetch\";\n        }\n    };\n    Environment.supportsPromises = function () {\n        var globals = getGlobalObject();\n        return (\"Promise\" in globals &&\n            \"resolve\" in globals.Promise &&\n            \"reject\" in globals.Promise &&\n            \"all\" in globals.Promise &&\n            \"race\" in globals.Promise &&\n            (function () {\n                var resolve;\n                new globals.Promise(function (r) {\n                    resolve = r;\n                });\n                return typeof resolve === \"function\";\n            })());\n    };\n    return Environment;\n}());\nexport { Environment };\n//# sourceMappingURL=environment.js.map","var XDomainTransport = (function () {\n    function XDomainTransport(url) {\n        this.url = url;\n    }\n    XDomainTransport.prototype.send = function (data) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            var _a;\n            var req = new XDomainRequest();\n            var rx = new RegExp(\"^https?:\");\n            req.onload = function () { return resolve({}); };\n            req.open(\"POST\", _this.url.replace(rx, (_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.protocol));\n            setTimeout(function () {\n                try {\n                    req.send(data);\n                }\n                catch (e) {\n                    reject(e);\n                }\n            }, 0);\n        });\n    };\n    return XDomainTransport;\n}());\nexport { XDomainTransport };\n//# sourceMappingURL=xdomain.js.map","var XHRTransport = (function () {\n    function XHRTransport(url) {\n        this.url = url;\n    }\n    XHRTransport.prototype.send = function (data) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            try {\n                var req_1 = new XMLHttpRequest();\n                req_1.onreadystatechange = function () {\n                    if (req_1.readyState === XMLHttpRequest.DONE) {\n                        resolve({});\n                    }\n                };\n                req_1.open(\"POST\", _this.url);\n                req_1.send(data);\n            }\n            catch (e) {\n                reject(e);\n            }\n        });\n    };\n    return XHRTransport;\n}());\nexport { XHRTransport };\n//# sourceMappingURL=xhr.js.map","import { __awaiter, __generator } from \"tslib\";\nvar FetchTransport = (function () {\n    function FetchTransport(url, headers) {\n        this.url = url;\n    }\n    FetchTransport.prototype.send = function (data) {\n        return __awaiter(this, void 0, void 0, function () {\n            var res, statusText, ok;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4, fetch(this.url, {\n                            method: \"POST\",\n                            body: data\n                        })];\n                    case 1:\n                        res = _a.sent();\n                        statusText = res.statusText, ok = res.ok;\n                        return [2, ok ? Promise.resolve({}) : Promise.reject({ statusText: statusText })];\n                }\n            });\n        });\n    };\n    return FetchTransport;\n}());\nexport { FetchTransport };\n//# sourceMappingURL=fetch.js.map","var NodeTransport = (function () {\n    function NodeTransport(url) {\n        this.url = url;\n        this.https = import(\"https\");\n    }\n    NodeTransport.prototype.send = function (data) {\n        var _this = this;\n        var options = {\n            method: \"POST\",\n            headers: {\n                \"Content-Type\": \"application/json\",\n                \"Content-Length\": data.length\n            }\n        };\n        return new Promise(function (resolve, reject) {\n            _this.https\n                .then(function (https) {\n                var req = https\n                    .request(_this.url, options, function () { })\n                    .on(\"error\", function (error) { return reject(error); });\n                req.write(data);\n                req.end();\n                resolve({});\n            })\n                .catch(function (reason) {\n                console.warn(\"NodeTransport is being used, but the HTTPS module could not be imported. No data will be sent to AppSignal.\");\n                reject(reason);\n            });\n        });\n    };\n    return NodeTransport;\n}());\nexport { NodeTransport };\n//# sourceMappingURL=node.js.map","import { __awaiter, __generator } from \"tslib\";\nimport { urlEncode } from \"@appsignal/core\";\nimport { Environment } from \"./environment\";\nimport { XDomainTransport } from \"./transports/xdomain\";\nimport { XHRTransport } from \"./transports/xhr\";\nimport { FetchTransport } from \"./transports/fetch\";\nimport { NodeTransport } from \"./transports/node\";\nvar PushApi = (function () {\n    function PushApi(options) {\n        this._uri = options.uri || \"https://appsignal-endpoint.net/collect\";\n        this._apiKey = options.key;\n        this._clientVersion = options.version;\n        this._transport = this._createTransport(this._url());\n    }\n    PushApi.prototype.push = function (span) {\n        return __awaiter(this, void 0, void 0, function () {\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4, this._transport.send(span.toJSON())];\n                    case 1:\n                        _a.sent();\n                        return [2, span];\n                }\n            });\n        });\n    };\n    PushApi.prototype._createTransport = function (url) {\n        switch (Environment.transport()) {\n            case \"XDomainRequest\":\n                return new XDomainTransport(url);\n            case \"XMLHttpRequest\":\n                return new XHRTransport(url);\n            case \"NodeHTTP\":\n                return new NodeTransport(url);\n            default:\n                return new FetchTransport(url);\n        }\n    };\n    PushApi.prototype._url = function () {\n        var auth = this._authorization();\n        return \"\".concat(this._uri, \"?\").concat(urlEncode(auth));\n    };\n    PushApi.prototype._authorization = function () {\n        return {\n            api_key: this._apiKey,\n            version: this._clientVersion\n        };\n    };\n    return PushApi;\n}());\nexport { PushApi };\n//# sourceMappingURL=api.js.map","import { __assign, __extends } from \"tslib\";\nimport { Serializable, getStacktrace, toHashMapString, isError } from \"@appsignal/core\";\nvar Span = (function (_super) {\n    __extends(Span, _super);\n    function Span(span) {\n        return _super.call(this, __assign({ timestamp: Math.round(new Date().getTime() / 1000), namespace: \"frontend\", error: {\n                name: \"NullError\",\n                message: \"No error has been set\",\n                backtrace: []\n            } }, span)) || this;\n    }\n    Span.prototype.setAction = function (name) {\n        if (!name || typeof name !== \"string\") {\n            return this;\n        }\n        this._data.action = name;\n        return this;\n    };\n    Span.prototype.setNamespace = function (name) {\n        if (!name || typeof name !== \"string\") {\n            return this;\n        }\n        this._data.namespace = name;\n        return this;\n    };\n    Span.prototype.setError = function (error) {\n        if (!error || !isError(error))\n            return this;\n        this._data.error = {\n            name: error.name || \"[unknown]\",\n            message: error.message,\n            backtrace: getStacktrace(error)\n        };\n        return this;\n    };\n    Span.prototype.setTags = function (tags) {\n        this._data.tags = __assign(__assign({}, this._data.tags), toHashMapString(tags));\n        return this;\n    };\n    Span.prototype.setParams = function (params) {\n        this._data.params = __assign(__assign({}, this._data.params), params);\n        return this;\n    };\n    Span.prototype.setBreadcrumbs = function (breadcrumbs) {\n        this._data.breadcrumbs = breadcrumbs;\n        return this;\n    };\n    return Span;\n}(Serializable));\nexport { Span };\n//# sourceMappingURL=span.js.map","import { __generator, __read, __spreadArray } from \"tslib\";\nvar Queue = (function () {\n    function Queue(data) {\n        this._data = data || [];\n    }\n    Queue.prototype.clear = function () {\n        this._data = [];\n    };\n    Queue.prototype.values = function () {\n        return this._data;\n    };\n    Queue.prototype.push = function (item) {\n        var _a;\n        return Array.isArray(item)\n            ? (_a = this._data).push.apply(_a, __spreadArray([], __read(item), false)) : this._data.push(item);\n    };\n    Queue.prototype.drain = function () {\n        return __generator(this, function (_a) {\n            switch (_a.label) {\n                case 0:\n                    if (!(this._data.length > 0)) return [3, 2];\n                    return [4, this._data.shift()];\n                case 1:\n                    _a.sent();\n                    return [3, 0];\n                case 2: return [2];\n            }\n        });\n    };\n    return Queue;\n}());\nexport { Queue };\n//# sourceMappingURL=queue.js.map","import { __assign, __awaiter, __generator, __values } from \"tslib\";\nimport { getGlobalObject } from \"@appsignal/core\";\nvar Dispatcher = (function () {\n    function Dispatcher(queue, api, options) {\n        this._retries = 0;\n        this._timerID = 0;\n        this._duration = 0;\n        this._api = api;\n        this._queue = queue;\n        this.options = __assign({ limit: 5, initialDuration: 1000 }, options);\n        this.reset();\n    }\n    Dispatcher.prototype.schedule = function (time) {\n        var _this = this;\n        if (time === void 0) { time = this._duration; }\n        var globals = getGlobalObject();\n        var BACKOFF_FACTOR = 1.3;\n        var cb = function () { return __awaiter(_this, void 0, void 0, function () {\n            var _a, _b, span, e_1, expDuration, e_2_1;\n            var e_2, _c;\n            return __generator(this, function (_d) {\n                switch (_d.label) {\n                    case 0:\n                        _d.trys.push([0, 7, 8, 9]);\n                        _a = __values(this._queue.drain()), _b = _a.next();\n                        _d.label = 1;\n                    case 1:\n                        if (!!_b.done) return [3, 6];\n                        span = _b.value;\n                        if (!span)\n                            return [2];\n                        _d.label = 2;\n                    case 2:\n                        _d.trys.push([2, 4, , 5]);\n                        return [4, this._api.push(span)];\n                    case 3:\n                        _d.sent();\n                        return [3, 5];\n                    case 4:\n                        e_1 = _d.sent();\n                        expDuration = Math.floor(Math.pow(time, BACKOFF_FACTOR));\n                        this._retries = this._retries - 1;\n                        if (this._retries === 0) {\n                            this.reset();\n                        }\n                        else {\n                            this._queue.push(span);\n                            this._timerID = this.schedule(expDuration);\n                        }\n                        return [2];\n                    case 5:\n                        _b = _a.next();\n                        return [3, 1];\n                    case 6: return [3, 9];\n                    case 7:\n                        e_2_1 = _d.sent();\n                        e_2 = { error: e_2_1 };\n                        return [3, 9];\n                    case 8:\n                        try {\n                            if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n                        }\n                        finally { if (e_2) throw e_2.error; }\n                        return [7];\n                    case 9:\n                        this.reset();\n                        return [2];\n                }\n            });\n        }); };\n        return globals.setTimeout(cb, time);\n    };\n    Dispatcher.prototype.reset = function () {\n        var _a = this.options, limit = _a.limit, initialDuration = _a.initialDuration;\n        this._retries = limit;\n        this._duration = initialDuration;\n    };\n    return Dispatcher;\n}());\nexport { Dispatcher };\n//# sourceMappingURL=dispatcher.js.map","import { __assign, __awaiter, __generator, __read, __spreadArray } from \"tslib\";\nimport { compose, toHashMap } from \"@appsignal/core\";\nimport { VERSION } from \"./version\";\nimport { PushApi } from \"./api\";\nimport { Environment } from \"./environment\";\nimport { Span } from \"./span\";\nimport { Queue } from \"./queue\";\nimport { Dispatcher } from \"./dispatcher\";\nvar Appsignal = (function () {\n    function Appsignal(options) {\n        this.VERSION = VERSION;\n        this.ignored = [];\n        this._breadcrumbs = [];\n        this._hooks = {\n            decorators: Array(),\n            overrides: Array()\n        };\n        this._env = Environment.serialize();\n        this._queue = new Queue([]);\n        var _a = options.key, key = _a === void 0 ? \"\" : _a, uri = options.uri, revision = options.revision, ignoreErrors = options.ignoreErrors;\n        if (revision && typeof revision !== \"string\") {\n            options.revision = String(revision);\n        }\n        if (key === \"\") {\n            console.info(\"[APPSIGNAL]: Started in development mode.\");\n        }\n        this._api = new PushApi({\n            key: key,\n            uri: uri,\n            version: this.VERSION\n        });\n        if (ignoreErrors && Array.isArray(ignoreErrors)) {\n            this.ignored = ignoreErrors;\n        }\n        this._dispatcher = new Dispatcher(this._queue, this._api);\n        this._options = options;\n    }\n    Appsignal.prototype.send = function (data, tagsOrFn, namespace) {\n        var _this = this;\n        if (!(data instanceof Error) && !(data instanceof Span)) {\n            console.error(\"[APPSIGNAL]: Can't send error, given error is not a valid type\");\n            return;\n        }\n        if (this.ignored.length !== 0) {\n            if (data instanceof Error &&\n                this.ignored.some(function (el) { return el.test(data.message); })) {\n                console.warn(\"[APPSIGNAL]: Ignored an error: \".concat(data.message));\n                return;\n            }\n            if (data instanceof Span) {\n                var error_1 = data.serialize().error;\n                if (error_1.message && this.ignored.some(function (el) { return el.test(error_1.message); })) {\n                    console.warn(\"[APPSIGNAL]: Ignored a span: \".concat(error_1.message));\n                    return;\n                }\n            }\n        }\n        var span = data instanceof Span ? data : this._createSpanFromError(data);\n        if (this._hooks.decorators.length > 0) {\n            compose.apply(void 0, __spreadArray([], __read(this._hooks.decorators), false))(span);\n        }\n        if (tagsOrFn) {\n            if (typeof tagsOrFn === \"function\") {\n                var callback = tagsOrFn;\n                callback(span);\n            }\n            else {\n                console.warn(\"[APPSIGNAL]: DEPRECATED: Calling the `send`/`sendError` function with a tags object is deprecated. Use the callback argument instead.\");\n                var tags = (toHashMap(tagsOrFn) || {});\n                span.setTags(tags);\n            }\n        }\n        if (namespace) {\n            console.warn(\"[APPSIGNAL]: DEPRECATED: Calling the `send`/`sendError` function with a namespace is deprecated. Use the callback argument instead.\");\n            span.setNamespace(namespace);\n        }\n        if (this._breadcrumbs.length > 0)\n            span.setBreadcrumbs(this._breadcrumbs);\n        if (this._hooks.overrides.length > 0) {\n            compose.apply(void 0, __spreadArray([], __read(this._hooks.overrides), false))(span);\n        }\n        if (Environment.supportsPromises()) {\n            this._breadcrumbs = [];\n            if (!this._options.key) {\n                console.warn(\"[APPSIGNAL]: Span not sent because we're in development mode:\", span);\n                if (data instanceof Error) {\n                    throw data;\n                }\n            }\n            else {\n                return this._api.push(span).catch(function () {\n                    _this._queue.push(span);\n                    setTimeout(function () { return _this._dispatcher.schedule(); }, 0);\n                });\n            }\n        }\n        else {\n            console.error(\"[APPSIGNAL]: Error not sent. A Promise polyfill is required.\");\n            return;\n        }\n    };\n    Appsignal.prototype.sendError = function (error, tagsOrFn, namespace) {\n        return this.send(error, tagsOrFn, namespace);\n    };\n    Appsignal.prototype.use = function (plugin) {\n        plugin.call(this);\n    };\n    Appsignal.prototype.createSpan = function (fn) {\n        var _a = this._options, _b = _a.revision, revision = _b === void 0 ? \"\" : _b, namespace = _a.namespace;\n        var span = new Span({\n            environment: this._env,\n            revision: revision\n        });\n        if (namespace)\n            span.setNamespace(namespace);\n        if (fn && typeof fn === \"function\")\n            fn(span);\n        return span;\n    };\n    Appsignal.prototype.wrap = function (fn, tagsOrFn, namespace) {\n        return __awaiter(this, void 0, void 0, function () {\n            var e_1;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        _a.trys.push([0, 2, , 4]);\n                        return [4, fn()];\n                    case 1: return [2, _a.sent()];\n                    case 2:\n                        e_1 = _a.sent();\n                        return [4, this.sendError(e_1, tagsOrFn, namespace)];\n                    case 3:\n                        _a.sent();\n                        return [2, Promise.reject(e_1)];\n                    case 4: return [2];\n                }\n            });\n        });\n    };\n    Appsignal.prototype.addDecorator = function (decorator) {\n        this._hooks.decorators.push(decorator);\n    };\n    Appsignal.prototype.addOverride = function (override) {\n        this._hooks.overrides.push(override);\n    };\n    Appsignal.prototype.demo = function () {\n        var span = this._createSpanFromError(new Error(\"Hello world! This is an error used for demonstration purposes.\"));\n        span\n            .setAction(\"TestAction\")\n            .setParams({\n            path: \"/hello\",\n            method: \"GET\"\n        })\n            .setTags({\n            demo_sample: \"true\"\n        });\n        this.send(span);\n    };\n    Appsignal.prototype.addBreadcrumb = function (breadcrumb) {\n        var crumb = __assign(__assign({ timestamp: Math.round(new Date().getTime() / 1000) }, breadcrumb), { metadata: toHashMap(breadcrumb.metadata) });\n        if (!crumb.category) {\n            console.warn(\"[APPSIGNAL]: Breadcrumb not added. `category` is missing.\");\n            return;\n        }\n        if (!crumb.action) {\n            console.warn(\"[APPSIGNAL]: Breadcrumb not added. `action` is missing.\");\n            return;\n        }\n        if (this._breadcrumbs.length === 20) {\n            this._breadcrumbs.pop();\n        }\n        this._breadcrumbs.unshift(crumb);\n    };\n    Appsignal.prototype._createSpanFromError = function (error) {\n        var event = this.createSpan();\n        event.setError(error);\n        return event;\n    };\n    return Appsignal;\n}());\nexport default Appsignal;\n//# sourceMappingURL=index.js.map","export var VERSION = \"1.3.27\";\n//# sourceMappingURL=version.js.map","var __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nimport { isError } from \"@appsignal/core\";\nfunction windowEventsPlugin(options) {\n    var ctx = window;\n    var opts = __assign({ onerror: true, onunhandledrejection: true }, options);\n    return function () {\n        var self = this;\n        var prev = {\n            onError: ctx.onerror,\n            unhandledRejection: ctx.onunhandledrejection\n        };\n        function _onErrorHandler(event, source, lineno, colno, error) {\n            var span = self.createSpan();\n            if (typeof event === \"string\" &&\n                lineno === 0 &&\n                /Script error\\.?/.test(event)) {\n                console.warn(\"[APPSIGNAL]: Cross-domain or eval script error detected, error ignored\");\n            }\n            else {\n                if (error) {\n                    span.setError(error);\n                }\n                else {\n                    span.setError({\n                        name: \"Error\",\n                        message: typeof event === \"string\"\n                            ? event\n                            : 'An HTML onerror=\"\" handler failed to execute',\n                        stack: \"at \".concat(source, \":\").concat(lineno).concat(colno ? \":\".concat(colno) : \"\")\n                    });\n                }\n                self.send(span);\n            }\n            if (typeof prev.onError === \"function\") {\n                prev.onError.apply(this, arguments);\n            }\n        }\n        function _onUnhandledRejectionHandler(event) {\n            var span = self.createSpan();\n            var error;\n            if (event && event.reason && isError(event.reason)) {\n                error = event.reason;\n            }\n            else {\n                error = {\n                    name: \"UnhandledPromiseRejectionError\",\n                    message: _reasonFromEvent(event)\n                };\n            }\n            span.setError(error);\n            self.send(span);\n            if (typeof prev.unhandledRejection === \"function\") {\n                prev.unhandledRejection.apply(this, arguments);\n            }\n        }\n        if (opts.onerror) {\n            ctx.onerror = _onErrorHandler;\n        }\n        if (opts.onunhandledrejection) {\n            ctx.onunhandledrejection = _onUnhandledRejectionHandler;\n        }\n    };\n    function _reasonFromEvent(event) {\n        if (!event || !event.reason) {\n            return \"\";\n        }\n        if (typeof event.reason === \"string\") {\n            return event.reason;\n        }\n        return JSON.stringify(event.reason, circularReplacer());\n    }\n    function circularReplacer() {\n        var seenValue = [];\n        var seenKey = [];\n        return function (key, value) {\n            if (typeof value === \"object\" && value !== null) {\n                var i = seenValue.indexOf(value);\n                if (i !== -1) {\n                    return \"[cyclic value: \".concat(seenKey[i] || \"root object\", \"]\");\n                }\n                else {\n                    seenValue.push(value);\n                    seenKey.push(key);\n                }\n            }\n            return value;\n        };\n    }\n}\nexport var plugin = windowEventsPlugin;\n//# sourceMappingURL=index.js.map","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, COMMENT, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n  var previous = 0;\n  var character = 0;\n\n  while (true) {\n    previous = character;\n    character = peek(); // &\\f\n\n    if (previous === 38 && character === 12) {\n      points[index] = 1;\n    }\n\n    if (token(character)) {\n      break;\n    }\n\n    next();\n  }\n\n  return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n  // pretend we've started with a comma\n  var index = -1;\n  var character = 44;\n\n  do {\n    switch (token(character)) {\n      case 0:\n        // &\\f\n        if (character === 38 && peek() === 12) {\n          // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n          // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n          // and when it should just concatenate the outer and inner selectors\n          // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n          points[index] = 1;\n        }\n\n        parsed[index] += identifierWithPointTracking(position - 1, points, index);\n        break;\n\n      case 2:\n        parsed[index] += delimit(character);\n        break;\n\n      case 4:\n        // comma\n        if (character === 44) {\n          // colon\n          parsed[++index] = peek() === 58 ? '&\\f' : '';\n          points[index] = parsed[index].length;\n          break;\n        }\n\n      // fallthrough\n\n      default:\n        parsed[index] += from(character);\n    }\n  } while (character = next());\n\n  return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n  return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n  if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n  // negative .length indicates that this rule has been already prefixed\n  element.length < 1) {\n    return;\n  }\n\n  var value = element.value,\n      parent = element.parent;\n  var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n  while (parent.type !== 'rule') {\n    parent = parent.parent;\n    if (!parent) return;\n  } // short-circuit for the simplest case\n\n\n  if (element.props.length === 1 && value.charCodeAt(0) !== 58\n  /* colon */\n  && !fixedElements.get(parent)) {\n    return;\n  } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n  // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n  if (isImplicitRule) {\n    return;\n  }\n\n  fixedElements.set(element, true);\n  var points = [];\n  var rules = getRules(value, points);\n  var parentRules = parent.props;\n\n  for (var i = 0, k = 0; i < rules.length; i++) {\n    for (var j = 0; j < parentRules.length; j++, k++) {\n      element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n    }\n  }\n};\nvar removeLabel = function removeLabel(element) {\n  if (element.type === 'decl') {\n    var value = element.value;\n\n    if ( // charcode for l\n    value.charCodeAt(0) === 108 && // charcode for b\n    value.charCodeAt(2) === 98) {\n      // this ignores label\n      element[\"return\"] = '';\n      element.value = '';\n    }\n  }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n  return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n  return function (element, index, children) {\n    if (element.type !== 'rule' || cache.compat) return;\n    var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n    if (unsafePseudoClasses) {\n      var isNested = !!element.parent; // in nested rules comments become children of the \"auto-inserted\" rule and that's always the `element.parent`\n      //\n      // considering this input:\n      // .a {\n      //   .b /* comm */ {}\n      //   color: hotpink;\n      // }\n      // we get output corresponding to this:\n      // .a {\n      //   & {\n      //     /* comm */\n      //     color: hotpink;\n      //   }\n      //   .b {}\n      // }\n\n      var commentContainer = isNested ? element.parent.children : // global rule at the root level\n      children;\n\n      for (var i = commentContainer.length - 1; i >= 0; i--) {\n        var node = commentContainer[i];\n\n        if (node.line < element.line) {\n          break;\n        } // it is quite weird but comments are *usually* put at `column: element.column - 1`\n        // so we seek *from the end* for the node that is earlier than the rule's `element` and check that\n        // this will also match inputs like this:\n        // .a {\n        //   /* comm */\n        //   .b {}\n        // }\n        //\n        // but that is fine\n        //\n        // it would be the easiest to change the placement of the comment to be the first child of the rule:\n        // .a {\n        //   .b { /* comm */ }\n        // }\n        // with such inputs we wouldn't have to search for the comment at all\n        // TODO: consider changing this comment placement in the next major version\n\n\n        if (node.column < element.column) {\n          if (isIgnoringComment(node)) {\n            return;\n          }\n\n          break;\n        }\n      }\n\n      unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n        console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n      });\n    }\n  };\n};\n\nvar isImportRule = function isImportRule(element) {\n  return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n  for (var i = index - 1; i >= 0; i--) {\n    if (!isImportRule(children[i])) {\n      return true;\n    }\n  }\n\n  return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n  element.type = '';\n  element.value = '';\n  element[\"return\"] = '';\n  element.children = '';\n  element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n  if (!isImportRule(element)) {\n    return;\n  }\n\n  if (element.parent) {\n    console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n    nullifyElement(element);\n  } else if (isPrependedWithRegularRules(index, children)) {\n    console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n    nullifyElement(element);\n  }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n  switch (hash(value, length)) {\n    // color-adjust\n    case 5103:\n      return WEBKIT + 'print-' + value + value;\n    // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n    case 5737:\n    case 4201:\n    case 3177:\n    case 3433:\n    case 1641:\n    case 4457:\n    case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n    case 5572:\n    case 6356:\n    case 5844:\n    case 3191:\n    case 6645:\n    case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n    case 6391:\n    case 5879:\n    case 5623:\n    case 6135:\n    case 4599:\n    case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n    case 4215:\n    case 6389:\n    case 5109:\n    case 5365:\n    case 5621:\n    case 3829:\n      return WEBKIT + value + value;\n    // appearance, user-select, transform, hyphens, text-size-adjust\n\n    case 5349:\n    case 4246:\n    case 4810:\n    case 6968:\n    case 2756:\n      return WEBKIT + value + MOZ + value + MS + value + value;\n    // flex, flex-direction\n\n    case 6828:\n    case 4268:\n      return WEBKIT + value + MS + value + value;\n    // order\n\n    case 6165:\n      return WEBKIT + value + MS + 'flex-' + value + value;\n    // align-items\n\n    case 5187:\n      return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n    // align-self\n\n    case 5443:\n      return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n    // align-content\n\n    case 4675:\n      return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n    // flex-shrink\n\n    case 5548:\n      return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n    // flex-basis\n\n    case 5292:\n      return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n    // flex-grow\n\n    case 6060:\n      return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n    // transition\n\n    case 4554:\n      return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n    // cursor\n\n    case 6187:\n      return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n    // background, background-image\n\n    case 5495:\n    case 3959:\n      return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n    // justify-content\n\n    case 4968:\n      return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n    // (margin|padding)-inline-(start|end)\n\n    case 4095:\n    case 3583:\n    case 4068:\n    case 2532:\n      return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n    // (min|max)?(width|height|inline-size|block-size)\n\n    case 8116:\n    case 7059:\n    case 5753:\n    case 5535:\n    case 5445:\n    case 5701:\n    case 4933:\n    case 4677:\n    case 5533:\n    case 5789:\n    case 5021:\n    case 4765:\n      // stretch, max-content, min-content, fill-available\n      if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n        // (m)ax-content, (m)in-content\n        case 109:\n          // -\n          if (charat(value, length + 4) !== 45) break;\n        // (f)ill-available, (f)it-content\n\n        case 102:\n          return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n        // (s)tretch\n\n        case 115:\n          return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n      }\n      break;\n    // position: sticky\n\n    case 4949:\n      // (s)ticky?\n      if (charat(value, length + 1) !== 115) break;\n    // display: (flex|inline-flex)\n\n    case 6444:\n      switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n        // stic(k)y\n        case 107:\n          return replace(value, ':', ':' + WEBKIT) + value;\n        // (inline-)?fl(e)x\n\n        case 101:\n          return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n      }\n\n      break;\n    // writing-mode\n\n    case 5936:\n      switch (charat(value, length + 11)) {\n        // vertical-l(r)\n        case 114:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n        // vertical-r(l)\n\n        case 108:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n        // horizontal(-)tb\n\n        case 45:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n      }\n\n      return WEBKIT + value + MS + value + value;\n  }\n\n  return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n  if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n    case DECLARATION:\n      element[\"return\"] = prefix(element.value, element.length);\n      break;\n\n    case KEYFRAMES:\n      return serialize([copy(element, {\n        value: replace(element.value, '@', '@' + WEBKIT)\n      })], callback);\n\n    case RULESET:\n      if (element.length) return combine(element.props, function (value) {\n        switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n          // :read-(only|write)\n          case ':read-only':\n          case ':read-write':\n            return serialize([copy(element, {\n              props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n            })], callback);\n          // :placeholder\n\n          case '::placeholder':\n            return serialize([copy(element, {\n              props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n            }), copy(element, {\n              props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n            }), copy(element, {\n              props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n            })], callback);\n        }\n\n        return '';\n      });\n  }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n  var key = options.key;\n\n  if (process.env.NODE_ENV !== 'production' && !key) {\n    throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n  }\n\n  if (key === 'css') {\n    var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n    // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n    // note this very very intentionally targets all style elements regardless of the key to ensure\n    // that creating a cache works inside of render of a React component\n\n    Array.prototype.forEach.call(ssrStyles, function (node) {\n      // we want to only move elements which have a space in the data-emotion attribute value\n      // because that indicates that it is an Emotion 11 server-side rendered style elements\n      // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n      // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n      // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n      // will not result in the Emotion 10 styles being destroyed\n      var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n      if (dataEmotionAttribute.indexOf(' ') === -1) {\n        return;\n      }\n      document.head.appendChild(node);\n      node.setAttribute('data-s', '');\n    });\n  }\n\n  var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n  if (process.env.NODE_ENV !== 'production') {\n    // $FlowFixMe\n    if (/[^a-z-]/.test(key)) {\n      throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n    }\n  }\n\n  var inserted = {};\n  var container;\n  var nodesToHydrate = [];\n\n  {\n    container = options.container || document.head;\n    Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n    // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n    document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n      var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n      for (var i = 1; i < attrib.length; i++) {\n        inserted[attrib[i]] = true;\n      }\n\n      nodesToHydrate.push(node);\n    });\n  }\n\n  var _insert;\n\n  var omnipresentPlugins = [compat, removeLabel];\n\n  if (process.env.NODE_ENV !== 'production') {\n    omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n      get compat() {\n        return cache.compat;\n      }\n\n    }), incorrectImportAlarm);\n  }\n\n  {\n    var currentSheet;\n    var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n      if (!element.root) {\n        if (element[\"return\"]) {\n          currentSheet.insert(element[\"return\"]);\n        } else if (element.value && element.type !== COMMENT) {\n          // insert empty rule in non-production environments\n          // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n          currentSheet.insert(element.value + \"{}\");\n        }\n      }\n    } : rulesheet(function (rule) {\n      currentSheet.insert(rule);\n    })];\n    var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n    var stylis = function stylis(styles) {\n      return serialize(compile(styles), serializer);\n    };\n\n    _insert = function insert(selector, serialized, sheet, shouldCache) {\n      currentSheet = sheet;\n\n      if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n        currentSheet = {\n          insert: function insert(rule) {\n            sheet.insert(rule + serialized.map);\n          }\n        };\n      }\n\n      stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n      if (shouldCache) {\n        cache.inserted[serialized.name] = true;\n      }\n    };\n  }\n\n  var cache = {\n    key: key,\n    sheet: new StyleSheet({\n      key: key,\n      container: container,\n      nonce: options.nonce,\n      speedy: options.speedy,\n      prepend: options.prepend,\n      insertionPoint: options.insertionPoint\n    }),\n    nonce: options.nonce,\n    inserted: inserted,\n    registered: {},\n    insert: _insert\n  };\n  cache.sheet.hydrate(nodesToHydrate);\n  return cache;\n};\n\nexport { createCache as default };\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n  /* o */\n  && prop.charCodeAt(1) === 110\n  /* n */\n  && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","function memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport default memoize;\n","function memoize(fn) {\n  var cache = Object.create(null);\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport { memoize as default };\n","import * as React from 'react';\nimport { useContext, forwardRef } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar isBrowser = \"object\" !== 'undefined';\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n  key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n  EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n  return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n  // $FlowFixMe\n  return /*#__PURE__*/forwardRef(function (props, ref) {\n    // the cache will never be null in the browser\n    var cache = useContext(EmotionCacheContext);\n    return func(props, cache, ref);\n  });\n};\n\nif (!isBrowser) {\n  withEmotionCache = function withEmotionCache(func) {\n    return function (props) {\n      var cache = useContext(EmotionCacheContext);\n\n      if (cache === null) {\n        // yes, we're potentially creating this on every render\n        // it doesn't actually matter though since it's only on the server\n        // so there will only every be a single render\n        // that could change in the future because of suspense and etc. but for now,\n        // this works and i don't want to optimise for a future thing that we aren't sure about\n        cache = createCache({\n          key: 'css'\n        });\n        return /*#__PURE__*/React.createElement(EmotionCacheContext.Provider, {\n          value: cache\n        }, func(props, cache));\n      } else {\n        return func(props, cache);\n      }\n    };\n  };\n}\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n  ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n  return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n  if (typeof theme === 'function') {\n    var mergedTheme = theme(outerTheme);\n\n    if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n      throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n    }\n\n    return mergedTheme;\n  }\n\n  if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n    throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n  }\n\n  return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n  return weakMemoize(function (theme) {\n    return getTheme(outerTheme, theme);\n  });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n  var theme = React.useContext(ThemeContext);\n\n  if (props.theme !== theme) {\n    theme = createCacheWithTheme(theme)(props.theme);\n  }\n\n  return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n    value: theme\n  }, props.children);\n};\nfunction withTheme(Component) {\n  var componentName = Component.displayName || Component.name || 'Component';\n\n  var render = function render(props, ref) {\n    var theme = React.useContext(ThemeContext);\n    return /*#__PURE__*/React.createElement(Component, _extends({\n      theme: theme,\n      ref: ref\n    }, props));\n  }; // $FlowFixMe\n\n\n  var WithTheme = /*#__PURE__*/React.forwardRef(render);\n  WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n  return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getLastPart = function getLastPart(functionName) {\n  // The match may be something like 'Object.createEmotionProps' or\n  // 'Loader.prototype.render'\n  var parts = functionName.split('.');\n  return parts[parts.length - 1];\n};\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n  // V8\n  var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n  if (match) return getLastPart(match[1]); // Safari / Firefox\n\n  match = /^([A-Za-z0-9$.]+)@/.exec(line);\n  if (match) return getLastPart(match[1]);\n  return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n  return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n  if (!stackTrace) return undefined;\n  var lines = stackTrace.split('\\n');\n\n  for (var i = 0; i < lines.length; i++) {\n    var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n    if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n    if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n    // uppercase letter\n\n    if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n  }\n\n  return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n  if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n  props.css.indexOf(':') !== -1) {\n    throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n  }\n\n  var newProps = {};\n\n  for (var key in props) {\n    if (hasOwnProperty.call(props, key)) {\n      newProps[key] = props[key];\n    }\n  }\n\n  newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n  // the label hasn't already been computed\n\n  if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n    var label = getLabelFromStackTrace(new Error().stack);\n    if (label) newProps[labelPropName] = label;\n  }\n\n  return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serialized = _ref.serialized,\n      isStringTag = _ref.isStringTag;\n  registerStyles(cache, serialized, isStringTag);\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n    return insertStyles(cache, serialized, isStringTag);\n  });\n\n  return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n  var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n  // not passing the registered cache to serializeStyles because it would\n  // make certain babel optimisations not possible\n\n  if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n    cssProp = cache.registered[cssProp];\n  }\n\n  var WrappedComponent = props[typePropName];\n  var registeredStyles = [cssProp];\n  var className = '';\n\n  if (typeof props.className === 'string') {\n    className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n  } else if (props.className != null) {\n    className = props.className + \" \";\n  }\n\n  var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));\n\n  if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n    var labelFromStack = props[labelPropName];\n\n    if (labelFromStack) {\n      serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n    }\n  }\n\n  className += cache.key + \"-\" + serialized.name;\n  var newProps = {};\n\n  for (var key in props) {\n    if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n      newProps[key] = props[key];\n    }\n  }\n\n  newProps.ref = ref;\n  newProps.className = className;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n    cache: cache,\n    serialized: serialized,\n    isStringTag: typeof WrappedComponent === 'string'\n  }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));\n});\n\nif (process.env.NODE_ENV !== 'production') {\n  Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nvar Emotion$1 = Emotion;\n\nexport { CacheProvider as C, Emotion$1 as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, isBrowser as i, useTheme as u, withEmotionCache as w };\n","import { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext, i as isBrowser$1 } from './emotion-element-c39617d8.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-c39617d8.browser.esm.js';\nimport * as React from 'react';\nimport { insertStyles, registerStyles, getRegisteredStyles } from '@emotion/utils';\nimport { useInsertionEffectWithLayoutFallback, useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { serializeStyles } from '@emotion/serialize';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\n\nvar pkg = {\n\tname: \"@emotion/react\",\n\tversion: \"11.11.3\",\n\tmain: \"dist/emotion-react.cjs.js\",\n\tmodule: \"dist/emotion-react.esm.js\",\n\tbrowser: {\n\t\t\"./dist/emotion-react.esm.js\": \"./dist/emotion-react.browser.esm.js\"\n\t},\n\texports: {\n\t\t\".\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./dist/emotion-react.worker.esm.js\",\n\t\t\t\tbrowser: \"./dist/emotion-react.browser.esm.js\",\n\t\t\t\t\"default\": \"./dist/emotion-react.esm.js\"\n\t\t\t},\n\t\t\t\"import\": \"./dist/emotion-react.cjs.mjs\",\n\t\t\t\"default\": \"./dist/emotion-react.cjs.js\"\n\t\t},\n\t\t\"./jsx-runtime\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./jsx-runtime/dist/emotion-react-jsx-runtime.worker.esm.js\",\n\t\t\t\tbrowser: \"./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js\",\n\t\t\t\t\"default\": \"./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js\"\n\t\t\t},\n\t\t\t\"import\": \"./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.mjs\",\n\t\t\t\"default\": \"./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js\"\n\t\t},\n\t\t\"./_isolated-hnrs\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.worker.esm.js\",\n\t\t\t\tbrowser: \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js\",\n\t\t\t\t\"default\": \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js\"\n\t\t\t},\n\t\t\t\"import\": \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.mjs\",\n\t\t\t\"default\": \"./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js\"\n\t\t},\n\t\t\"./jsx-dev-runtime\": {\n\t\t\tmodule: {\n\t\t\t\tworker: \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.worker.esm.js\",\n\t\t\t\tbrowser: \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js\",\n\t\t\t\t\"default\": \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js\"\n\t\t\t},\n\t\t\t\"import\": \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.mjs\",\n\t\t\t\"default\": \"./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js\"\n\t\t},\n\t\t\"./package.json\": \"./package.json\",\n\t\t\"./types/css-prop\": \"./types/css-prop.d.ts\",\n\t\t\"./macro\": {\n\t\t\ttypes: {\n\t\t\t\t\"import\": \"./macro.d.mts\",\n\t\t\t\t\"default\": \"./macro.d.ts\"\n\t\t\t},\n\t\t\t\"default\": \"./macro.js\"\n\t\t}\n\t},\n\ttypes: \"types/index.d.ts\",\n\tfiles: [\n\t\t\"src\",\n\t\t\"dist\",\n\t\t\"jsx-runtime\",\n\t\t\"jsx-dev-runtime\",\n\t\t\"_isolated-hnrs\",\n\t\t\"types/*.d.ts\",\n\t\t\"macro.*\"\n\t],\n\tsideEffects: false,\n\tauthor: \"Emotion Contributors\",\n\tlicense: \"MIT\",\n\tscripts: {\n\t\t\"test:typescript\": \"dtslint types\"\n\t},\n\tdependencies: {\n\t\t\"@babel/runtime\": \"^7.18.3\",\n\t\t\"@emotion/babel-plugin\": \"^11.11.0\",\n\t\t\"@emotion/cache\": \"^11.11.0\",\n\t\t\"@emotion/serialize\": \"^1.1.3\",\n\t\t\"@emotion/use-insertion-effect-with-fallbacks\": \"^1.0.1\",\n\t\t\"@emotion/utils\": \"^1.2.1\",\n\t\t\"@emotion/weak-memoize\": \"^0.3.1\",\n\t\t\"hoist-non-react-statics\": \"^3.3.1\"\n\t},\n\tpeerDependencies: {\n\t\treact: \">=16.8.0\"\n\t},\n\tpeerDependenciesMeta: {\n\t\t\"@types/react\": {\n\t\t\toptional: true\n\t\t}\n\t},\n\tdevDependencies: {\n\t\t\"@definitelytyped/dtslint\": \"0.0.112\",\n\t\t\"@emotion/css\": \"11.11.2\",\n\t\t\"@emotion/css-prettifier\": \"1.1.3\",\n\t\t\"@emotion/server\": \"11.11.0\",\n\t\t\"@emotion/styled\": \"11.11.0\",\n\t\t\"html-tag-names\": \"^1.1.2\",\n\t\treact: \"16.14.0\",\n\t\t\"svg-tag-names\": \"^1.1.1\",\n\t\ttypescript: \"^4.5.5\"\n\t},\n\trepository: \"https://github.com/emotion-js/emotion/tree/main/packages/react\",\n\tpublishConfig: {\n\t\taccess: \"public\"\n\t},\n\t\"umd:main\": \"dist/emotion-react.umd.min.js\",\n\tpreconstruct: {\n\t\tentrypoints: [\n\t\t\t\"./index.js\",\n\t\t\t\"./jsx-runtime.js\",\n\t\t\t\"./jsx-dev-runtime.js\",\n\t\t\t\"./_isolated-hnrs.js\"\n\t\t],\n\t\tumdName: \"emotionReact\",\n\t\texports: {\n\t\t\tenvConditions: [\n\t\t\t\t\"browser\",\n\t\t\t\t\"worker\"\n\t\t\t],\n\t\t\textra: {\n\t\t\t\t\"./types/css-prop\": \"./types/css-prop.d.ts\",\n\t\t\t\t\"./macro\": {\n\t\t\t\t\ttypes: {\n\t\t\t\t\t\t\"import\": \"./macro.d.mts\",\n\t\t\t\t\t\t\"default\": \"./macro.d.ts\"\n\t\t\t\t\t},\n\t\t\t\t\t\"default\": \"./macro.js\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar jsx = function jsx(type, props) {\n  var args = arguments;\n\n  if (props == null || !hasOwnProperty.call(props, 'css')) {\n    // $FlowFixMe\n    return React.createElement.apply(undefined, args);\n  }\n\n  var argsLength = args.length;\n  var createElementArgArray = new Array(argsLength);\n  createElementArgArray[0] = Emotion;\n  createElementArgArray[1] = createEmotionProps(type, props);\n\n  for (var i = 2; i < argsLength; i++) {\n    createElementArgArray[i] = args[i];\n  } // $FlowFixMe\n\n\n  return React.createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false; // maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n  if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n  // probably using the custom createElement which\n  // means it will be turned into a className prop\n  // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n  props.className || props.css)) {\n    console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n    warnedAboutCssPropForGlobal = true;\n  }\n\n  var styles = props.styles;\n  var serialized = serializeStyles([styles], undefined, React.useContext(ThemeContext));\n\n  if (!isBrowser$1) {\n    var _ref;\n\n    var serializedNames = serialized.name;\n    var serializedStyles = serialized.styles;\n    var next = serialized.next;\n\n    while (next !== undefined) {\n      serializedNames += ' ' + next.name;\n      serializedStyles += next.styles;\n      next = next.next;\n    }\n\n    var shouldCache = cache.compat === true;\n    var rules = cache.insert(\"\", {\n      name: serializedNames,\n      styles: serializedStyles\n    }, cache.sheet, shouldCache);\n\n    if (shouldCache) {\n      return null;\n    }\n\n    return /*#__PURE__*/React.createElement(\"style\", (_ref = {}, _ref[\"data-emotion\"] = cache.key + \"-global \" + serializedNames, _ref.dangerouslySetInnerHTML = {\n      __html: rules\n    }, _ref.nonce = cache.sheet.nonce, _ref));\n  } // yes, i know these hooks are used conditionally\n  // but it is based on a constant that will never change at runtime\n  // it's effectively like having two implementations and switching them out\n  // so it's not actually breaking anything\n\n\n  var sheetRef = React.useRef();\n  useInsertionEffectWithLayoutFallback(function () {\n    var key = cache.key + \"-global\"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n    var sheet = new cache.sheet.constructor({\n      key: key,\n      nonce: cache.sheet.nonce,\n      container: cache.sheet.container,\n      speedy: cache.sheet.isSpeedy\n    });\n    var rehydrating = false; // $FlowFixMe\n\n    var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n    if (cache.sheet.tags.length) {\n      sheet.before = cache.sheet.tags[0];\n    }\n\n    if (node !== null) {\n      rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other <Global/>s\n\n      node.setAttribute('data-emotion', key);\n      sheet.hydrate([node]);\n    }\n\n    sheetRef.current = [sheet, rehydrating];\n    return function () {\n      sheet.flush();\n    };\n  }, [cache]);\n  useInsertionEffectWithLayoutFallback(function () {\n    var sheetRefCurrent = sheetRef.current;\n    var sheet = sheetRefCurrent[0],\n        rehydrating = sheetRefCurrent[1];\n\n    if (rehydrating) {\n      sheetRefCurrent[1] = false;\n      return;\n    }\n\n    if (serialized.next !== undefined) {\n      // insert keyframes\n      insertStyles(cache, serialized.next, true);\n    }\n\n    if (sheet.tags.length) {\n      // if this doesn't exist then it will be null so the style element will be appended\n      var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n      sheet.before = element;\n      sheet.flush();\n    }\n\n    cache.insert(\"\", serialized, sheet, false);\n  }, [cache, serialized.name]);\n  return null;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n  Global.displayName = 'EmotionGlobal';\n}\n\nfunction css() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return serializeStyles(args);\n}\n\nvar keyframes = function keyframes() {\n  var insertable = css.apply(void 0, arguments);\n  var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n  return {\n    name: name,\n    styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n    anim: 1,\n    toString: function toString() {\n      return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n    }\n  };\n};\n\nvar classnames = function classnames(args) {\n  var len = args.length;\n  var i = 0;\n  var cls = '';\n\n  for (; i < len; i++) {\n    var arg = args[i];\n    if (arg == null) continue;\n    var toAdd = void 0;\n\n    switch (typeof arg) {\n      case 'boolean':\n        break;\n\n      case 'object':\n        {\n          if (Array.isArray(arg)) {\n            toAdd = classnames(arg);\n          } else {\n            if (process.env.NODE_ENV !== 'production' && arg.styles !== undefined && arg.name !== undefined) {\n              console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from <ClassNames/> component.');\n            }\n\n            toAdd = '';\n\n            for (var k in arg) {\n              if (arg[k] && k) {\n                toAdd && (toAdd += ' ');\n                toAdd += k;\n              }\n            }\n          }\n\n          break;\n        }\n\n      default:\n        {\n          toAdd = arg;\n        }\n    }\n\n    if (toAdd) {\n      cls && (cls += ' ');\n      cls += toAdd;\n    }\n  }\n\n  return cls;\n};\n\nfunction merge(registered, css, className) {\n  var registeredStyles = [];\n  var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n  if (registeredStyles.length < 2) {\n    return className;\n  }\n\n  return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serializedArr = _ref.serializedArr;\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n\n    for (var i = 0; i < serializedArr.length; i++) {\n      insertStyles(cache, serializedArr[i], false);\n    }\n  });\n\n  return null;\n};\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n  var hasRendered = false;\n  var serializedArr = [];\n\n  var css = function css() {\n    if (hasRendered && process.env.NODE_ENV !== 'production') {\n      throw new Error('css can only be used during render');\n    }\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var serialized = serializeStyles(args, cache.registered);\n    serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n    registerStyles(cache, serialized, false);\n    return cache.key + \"-\" + serialized.name;\n  };\n\n  var cx = function cx() {\n    if (hasRendered && process.env.NODE_ENV !== 'production') {\n      throw new Error('cx can only be used during render');\n    }\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return merge(cache.registered, css, classnames(args));\n  };\n\n  var content = {\n    css: css,\n    cx: cx,\n    theme: React.useContext(ThemeContext)\n  };\n  var ele = props.children(content);\n  hasRendered = true;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n    cache: cache,\n    serializedArr: serializedArr\n  }), ele);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n  ClassNames.displayName = 'EmotionClassNames';\n}\n\nif (process.env.NODE_ENV !== 'production') {\n  var isBrowser = \"object\" !== 'undefined'; // #1727, #2905 for some reason Jest and Vitest evaluate modules twice if some consuming module gets mocked\n\n  var isTestEnv = typeof jest !== 'undefined' || typeof vi !== 'undefined';\n\n  if (isBrowser && !isTestEnv) {\n    // globalThis has wide browser support - https://caniuse.com/?search=globalThis, Node.js 12 and later\n    var globalContext = // $FlowIgnore\n    typeof globalThis !== 'undefined' ? globalThis // eslint-disable-line no-undef\n    : isBrowser ? window : global;\n    var globalKey = \"__EMOTION_REACT_\" + pkg.version.split('.')[0] + \"__\";\n\n    if (globalContext[globalKey]) {\n      console.warn('You are loading @emotion/react when it is already loaded. Running ' + 'multiple instances may cause problems. This can happen if multiple ' + 'versions are used, or if multiple builds of the same version are ' + 'used.');\n    }\n\n    globalContext[globalKey] = true;\n  }\n}\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","var unitlessKeys = {\n  animationIterationCount: 1,\n  aspectRatio: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n  return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n  return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n  return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n  switch (key) {\n    case 'animation':\n    case 'animationName':\n      {\n        if (typeof value === 'string') {\n          return value.replace(animationRegex, function (match, p1, p2) {\n            cursor = {\n              name: p1,\n              styles: p2,\n              next: cursor\n            };\n            return p1;\n          });\n        }\n      }\n  }\n\n  if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n    return value + 'px';\n  }\n\n  return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n  var contentValuePattern = /(var|attr|counters?|url|element|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n  var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n  var oldProcessStyleValue = processStyleValue;\n  var msPattern = /^-ms-/;\n  var hyphenPattern = /-(.)/g;\n  var hyphenatedCache = {};\n\n  processStyleValue = function processStyleValue(key, value) {\n    if (key === 'content') {\n      if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n        throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n      }\n    }\n\n    var processed = oldProcessStyleValue(key, value);\n\n    if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n      hyphenatedCache[key] = true;\n      console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n        return _char.toUpperCase();\n      }) + \"?\");\n    }\n\n    return processed;\n  };\n}\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n  if (interpolation == null) {\n    return '';\n  }\n\n  if (interpolation.__emotion_styles !== undefined) {\n    if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n      throw new Error(noComponentSelectorMessage);\n    }\n\n    return interpolation;\n  }\n\n  switch (typeof interpolation) {\n    case 'boolean':\n      {\n        return '';\n      }\n\n    case 'object':\n      {\n        if (interpolation.anim === 1) {\n          cursor = {\n            name: interpolation.name,\n            styles: interpolation.styles,\n            next: cursor\n          };\n          return interpolation.name;\n        }\n\n        if (interpolation.styles !== undefined) {\n          var next = interpolation.next;\n\n          if (next !== undefined) {\n            // not the most efficient thing ever but this is a pretty rare case\n            // and there will be very few iterations of this generally\n            while (next !== undefined) {\n              cursor = {\n                name: next.name,\n                styles: next.styles,\n                next: cursor\n              };\n              next = next.next;\n            }\n          }\n\n          var styles = interpolation.styles + \";\";\n\n          if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n            styles += interpolation.map;\n          }\n\n          return styles;\n        }\n\n        return createStringFromObject(mergedProps, registered, interpolation);\n      }\n\n    case 'function':\n      {\n        if (mergedProps !== undefined) {\n          var previousCursor = cursor;\n          var result = interpolation(mergedProps);\n          cursor = previousCursor;\n          return handleInterpolation(mergedProps, registered, result);\n        } else if (process.env.NODE_ENV !== 'production') {\n          console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n        }\n\n        break;\n      }\n\n    case 'string':\n      if (process.env.NODE_ENV !== 'production') {\n        var matched = [];\n        var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n          var fakeVarName = \"animation\" + matched.length;\n          matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n          return \"${\" + fakeVarName + \"}\";\n        });\n\n        if (matched.length) {\n          console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n        }\n      }\n\n      break;\n  } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n  if (registered == null) {\n    return interpolation;\n  }\n\n  var cached = registered[interpolation];\n  return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n  var string = '';\n\n  if (Array.isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n    }\n  } else {\n    for (var _key in obj) {\n      var value = obj[_key];\n\n      if (typeof value !== 'object') {\n        if (registered != null && registered[value] !== undefined) {\n          string += _key + \"{\" + registered[value] + \"}\";\n        } else if (isProcessableValue(value)) {\n          string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n        }\n      } else {\n        if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n          throw new Error(noComponentSelectorMessage);\n        }\n\n        if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n          for (var _i = 0; _i < value.length; _i++) {\n            if (isProcessableValue(value[_i])) {\n              string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n            }\n          }\n        } else {\n          var interpolated = handleInterpolation(mergedProps, registered, value);\n\n          switch (_key) {\n            case 'animation':\n            case 'animationName':\n              {\n                string += processStyleName(_key) + \":\" + interpolated + \";\";\n                break;\n              }\n\n            default:\n              {\n                if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n                  console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n                }\n\n                string += _key + \"{\" + interpolated + \"}\";\n              }\n          }\n        }\n      }\n    }\n  }\n\n  return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n  sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n  if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n    return args[0];\n  }\n\n  var stringMode = true;\n  var styles = '';\n  cursor = undefined;\n  var strings = args[0];\n\n  if (strings == null || strings.raw === undefined) {\n    stringMode = false;\n    styles += handleInterpolation(mergedProps, registered, strings);\n  } else {\n    if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n      console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n    }\n\n    styles += strings[0];\n  } // we start at 1 since we've already handled the first arg\n\n\n  for (var i = 1; i < args.length; i++) {\n    styles += handleInterpolation(mergedProps, registered, args[i]);\n\n    if (stringMode) {\n      if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n        console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n      }\n\n      styles += strings[i];\n    }\n  }\n\n  var sourceMap;\n\n  if (process.env.NODE_ENV !== 'production') {\n    styles = styles.replace(sourceMapPattern, function (match) {\n      sourceMap = match;\n      return '';\n    });\n  } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n  labelPattern.lastIndex = 0;\n  var identifierName = '';\n  var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n  while ((match = labelPattern.exec(styles)) !== null) {\n    identifierName += '-' + // $FlowFixMe we know it's not null\n    match[1];\n  }\n\n  var name = hashString(styles) + identifierName;\n\n  if (process.env.NODE_ENV !== 'production') {\n    // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n    return {\n      name: name,\n      styles: styles,\n      map: sourceMap,\n      next: cursor,\n      toString: function toString() {\n        return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n      }\n    };\n  }\n\n  return {\n    name: name,\n    styles: styles,\n    next: cursor\n  };\n};\n\nexport { serializeStyles };\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n  if (tag.sheet) {\n    // $FlowFixMe\n    return tag.sheet;\n  } // this weirdness brought to you by firefox\n\n  /* istanbul ignore next */\n\n\n  for (var i = 0; i < document.styleSheets.length; i++) {\n    if (document.styleSheets[i].ownerNode === tag) {\n      // $FlowFixMe\n      return document.styleSheets[i];\n    }\n  }\n}\n\nfunction createStyleElement(options) {\n  var tag = document.createElement('style');\n  tag.setAttribute('data-emotion', options.key);\n\n  if (options.nonce !== undefined) {\n    tag.setAttribute('nonce', options.nonce);\n  }\n\n  tag.appendChild(document.createTextNode(''));\n  tag.setAttribute('data-s', '');\n  return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n  // Using Node instead of HTMLElement since container may be a ShadowRoot\n  function StyleSheet(options) {\n    var _this = this;\n\n    this._insertTag = function (tag) {\n      var before;\n\n      if (_this.tags.length === 0) {\n        if (_this.insertionPoint) {\n          before = _this.insertionPoint.nextSibling;\n        } else if (_this.prepend) {\n          before = _this.container.firstChild;\n        } else {\n          before = _this.before;\n        }\n      } else {\n        before = _this.tags[_this.tags.length - 1].nextSibling;\n      }\n\n      _this.container.insertBefore(tag, before);\n\n      _this.tags.push(tag);\n    };\n\n    this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n    this.tags = [];\n    this.ctr = 0;\n    this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n    this.key = options.key;\n    this.container = options.container;\n    this.prepend = options.prepend;\n    this.insertionPoint = options.insertionPoint;\n    this.before = null;\n  }\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.hydrate = function hydrate(nodes) {\n    nodes.forEach(this._insertTag);\n  };\n\n  _proto.insert = function insert(rule) {\n    // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n    // it's 1 in dev because we insert source maps that map a single rule to a location\n    // and you can only have one source map per style tag\n    if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n      this._insertTag(createStyleElement(this));\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    if (process.env.NODE_ENV !== 'production') {\n      var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n      if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n        // this would only cause problem in speedy mode\n        // but we don't want enabling speedy to affect the observable behavior\n        // so we report this error at all times\n        console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n      }\n      this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n    }\n\n    if (this.isSpeedy) {\n      var sheet = sheetForTag(tag);\n\n      try {\n        // this is the ultrafast version, works across browsers\n        // the big drawback is that the css won't be editable in devtools\n        sheet.insertRule(rule, sheet.cssRules.length);\n      } catch (e) {\n        if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) {\n          console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n        }\n      }\n    } else {\n      tag.appendChild(document.createTextNode(rule));\n    }\n\n    this.ctr++;\n  };\n\n  _proto.flush = function flush() {\n    // $FlowFixMe\n    this.tags.forEach(function (tag) {\n      return tag.parentNode && tag.parentNode.removeChild(tag);\n    });\n    this.tags = [];\n    this.ctr = 0;\n\n    if (process.env.NODE_ENV !== 'production') {\n      this._alreadyInsertedOrderInsensitiveRule = false;\n    }\n  };\n\n  return StyleSheet;\n}();\n\nexport { StyleSheet };\n","import * as React from 'react';\n\nvar syncFallback = function syncFallback(create) {\n  return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n  var rawClassName = '';\n  classNames.split(' ').forEach(function (className) {\n    if (registered[className] !== undefined) {\n      registeredStyles.push(registered[className] + \";\");\n    } else {\n      rawClassName += className + \" \";\n    }\n  });\n  return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n  var className = cache.key + \"-\" + serialized.name;\n\n  if ( // we only need to add the styles to the registered cache if the\n  // class name could be used further down\n  // the tree but if it's a string tag, we know it won't\n  // so we don't have to add it to registered cache.\n  // this improves memory usage since we can avoid storing the whole style string\n  (isStringTag === false || // we need to always store it if we're in compat mode and\n  // in node since emotion-server relies on whether a style is in\n  // the registered cache to know whether a style is global or not\n  // also, note that this check will be dead code eliminated in the browser\n  isBrowser === false ) && cache.registered[className] === undefined) {\n    cache.registered[className] = serialized.styles;\n  }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n  registerStyles(cache, serialized, isStringTag);\n  var className = cache.key + \"-\" + serialized.name;\n\n  if (cache.inserted[serialized.name] === undefined) {\n    var current = serialized;\n\n    do {\n      cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n      current = current.next;\n    } while (current !== undefined);\n  }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :\n\ttypeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :\n\t(global = global || self, factory(global.ReactStripe = {}, global.React));\n}(this, (function (exports, React) { 'use strict';\n\n\tReact = React && Object.prototype.hasOwnProperty.call(React, 'default') ? React['default'] : React;\n\n\tfunction createCommonjsModule(fn, module) {\n\t\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n\t}\n\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\n\tvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\tvar ReactPropTypesSecret_1 = ReactPropTypesSecret;\n\n\tfunction emptyFunction() {}\n\n\tfunction emptyFunctionWithReset() {}\n\n\temptyFunctionWithReset.resetWarningCache = emptyFunction;\n\n\tvar factoryWithThrowingShims = function () {\n\t  function shim(props, propName, componentName, location, propFullName, secret) {\n\t    if (secret === ReactPropTypesSecret_1) {\n\t      // It is still safe when called from React.\n\t      return;\n\t    }\n\n\t    var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n\t    err.name = 'Invariant Violation';\n\t    throw err;\n\t  }\n\t  shim.isRequired = shim;\n\n\t  function getShim() {\n\t    return shim;\n\t  }\n\t  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n\n\t  var ReactPropTypes = {\n\t    array: shim,\n\t    bool: shim,\n\t    func: shim,\n\t    number: shim,\n\t    object: shim,\n\t    string: shim,\n\t    symbol: shim,\n\t    any: shim,\n\t    arrayOf: getShim,\n\t    element: shim,\n\t    elementType: shim,\n\t    instanceOf: getShim,\n\t    node: shim,\n\t    objectOf: getShim,\n\t    oneOf: getShim,\n\t    oneOfType: getShim,\n\t    shape: getShim,\n\t    exact: getShim,\n\t    checkPropTypes: emptyFunctionWithReset,\n\t    resetWarningCache: emptyFunction\n\t  };\n\t  ReactPropTypes.PropTypes = ReactPropTypes;\n\t  return ReactPropTypes;\n\t};\n\n\tvar propTypes = createCommonjsModule(function (module) {\n\t/**\n\t * Copyright (c) 2013-present, Facebook, Inc.\n\t *\n\t * This source code is licensed under the MIT license found in the\n\t * LICENSE file in the root directory of this source tree.\n\t */\n\t{\n\t  // By explicitly using `prop-types` you are opting into new production behavior.\n\t  // http://fb.me/prop-types-in-prod\n\t  module.exports = factoryWithThrowingShims();\n\t}\n\t});\n\n\tfunction ownKeys(object, enumerableOnly) {\n\t  var keys = Object.keys(object);\n\n\t  if (Object.getOwnPropertySymbols) {\n\t    var symbols = Object.getOwnPropertySymbols(object);\n\n\t    if (enumerableOnly) {\n\t      symbols = symbols.filter(function (sym) {\n\t        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n\t      });\n\t    }\n\n\t    keys.push.apply(keys, symbols);\n\t  }\n\n\t  return keys;\n\t}\n\n\tfunction _objectSpread2(target) {\n\t  for (var i = 1; i < arguments.length; i++) {\n\t    var source = arguments[i] != null ? arguments[i] : {};\n\n\t    if (i % 2) {\n\t      ownKeys(Object(source), true).forEach(function (key) {\n\t        _defineProperty(target, key, source[key]);\n\t      });\n\t    } else if (Object.getOwnPropertyDescriptors) {\n\t      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n\t    } else {\n\t      ownKeys(Object(source)).forEach(function (key) {\n\t        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n\t      });\n\t    }\n\t  }\n\n\t  return target;\n\t}\n\n\tfunction _typeof(obj) {\n\t  \"@babel/helpers - typeof\";\n\n\t  if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n\t    _typeof = function (obj) {\n\t      return typeof obj;\n\t    };\n\t  } else {\n\t    _typeof = function (obj) {\n\t      return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n\t    };\n\t  }\n\n\t  return _typeof(obj);\n\t}\n\n\tfunction _defineProperty(obj, key, value) {\n\t  if (key in obj) {\n\t    Object.defineProperty(obj, key, {\n\t      value: value,\n\t      enumerable: true,\n\t      configurable: true,\n\t      writable: true\n\t    });\n\t  } else {\n\t    obj[key] = value;\n\t  }\n\n\t  return obj;\n\t}\n\n\tfunction _slicedToArray(arr, i) {\n\t  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n\t}\n\n\tfunction _arrayWithHoles(arr) {\n\t  if (Array.isArray(arr)) return arr;\n\t}\n\n\tfunction _iterableToArrayLimit(arr, i) {\n\t  var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]);\n\n\t  if (_i == null) return;\n\t  var _arr = [];\n\t  var _n = true;\n\t  var _d = false;\n\n\t  var _s, _e;\n\n\t  try {\n\t    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n\t      _arr.push(_s.value);\n\n\t      if (i && _arr.length === i) break;\n\t    }\n\t  } catch (err) {\n\t    _d = true;\n\t    _e = err;\n\t  } finally {\n\t    try {\n\t      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n\t    } finally {\n\t      if (_d) throw _e;\n\t    }\n\t  }\n\n\t  return _arr;\n\t}\n\n\tfunction _unsupportedIterableToArray(o, minLen) {\n\t  if (!o) return;\n\t  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n\t  var n = Object.prototype.toString.call(o).slice(8, -1);\n\t  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n\t  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n\t  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n\t}\n\n\tfunction _arrayLikeToArray(arr, len) {\n\t  if (len == null || len > arr.length) len = arr.length;\n\n\t  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n\t  return arr2;\n\t}\n\n\tfunction _nonIterableRest() {\n\t  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n\t}\n\n\tvar usePrevious = function usePrevious(value) {\n\t  var ref = React.useRef(value);\n\t  React.useEffect(function () {\n\t    ref.current = value;\n\t  }, [value]);\n\t  return ref.current;\n\t};\n\n\tvar isUnknownObject = function isUnknownObject(raw) {\n\t  return raw !== null && _typeof(raw) === 'object';\n\t};\n\tvar isPromise = function isPromise(raw) {\n\t  return isUnknownObject(raw) && typeof raw.then === 'function';\n\t}; // We are using types to enforce the `stripe` prop in this lib,\n\t// but in an untyped integration `stripe` could be anything, so we need\n\t// to do some sanity validation to prevent type errors.\n\n\tvar isStripe = function isStripe(raw) {\n\t  return isUnknownObject(raw) && typeof raw.elements === 'function' && typeof raw.createToken === 'function' && typeof raw.createPaymentMethod === 'function' && typeof raw.confirmCardPayment === 'function';\n\t};\n\n\tvar PLAIN_OBJECT_STR = '[object Object]';\n\tvar isEqual = function isEqual(left, right) {\n\t  if (!isUnknownObject(left) || !isUnknownObject(right)) {\n\t    return left === right;\n\t  }\n\n\t  var leftArray = Array.isArray(left);\n\t  var rightArray = Array.isArray(right);\n\t  if (leftArray !== rightArray) return false;\n\t  var leftPlainObject = Object.prototype.toString.call(left) === PLAIN_OBJECT_STR;\n\t  var rightPlainObject = Object.prototype.toString.call(right) === PLAIN_OBJECT_STR;\n\t  if (leftPlainObject !== rightPlainObject) return false; // not sure what sort of special object this is (regexp is one option), so\n\t  // fallback to reference check.\n\n\t  if (!leftPlainObject && !leftArray) return left === right;\n\t  var leftKeys = Object.keys(left);\n\t  var rightKeys = Object.keys(right);\n\t  if (leftKeys.length !== rightKeys.length) return false;\n\t  var keySet = {};\n\n\t  for (var i = 0; i < leftKeys.length; i += 1) {\n\t    keySet[leftKeys[i]] = true;\n\t  }\n\n\t  for (var _i = 0; _i < rightKeys.length; _i += 1) {\n\t    keySet[rightKeys[_i]] = true;\n\t  }\n\n\t  var allKeys = Object.keys(keySet);\n\n\t  if (allKeys.length !== leftKeys.length) {\n\t    return false;\n\t  }\n\n\t  var l = left;\n\t  var r = right;\n\n\t  var pred = function pred(key) {\n\t    return isEqual(l[key], r[key]);\n\t  };\n\n\t  return allKeys.every(pred);\n\t};\n\n\tvar extractAllowedOptionsUpdates = function extractAllowedOptionsUpdates(options, prevOptions, immutableKeys) {\n\t  if (!isUnknownObject(options)) {\n\t    return null;\n\t  }\n\n\t  return Object.keys(options).reduce(function (newOptions, key) {\n\t    var isUpdated = !isUnknownObject(prevOptions) || !isEqual(options[key], prevOptions[key]);\n\n\t    if (immutableKeys.includes(key)) {\n\t      if (isUpdated) {\n\t        console.warn(\"Unsupported prop change: options.\".concat(key, \" is not a mutable property.\"));\n\t      }\n\n\t      return newOptions;\n\t    }\n\n\t    if (!isUpdated) {\n\t      return newOptions;\n\t    }\n\n\t    return _objectSpread2(_objectSpread2({}, newOptions || {}), {}, _defineProperty({}, key, options[key]));\n\t  }, null);\n\t};\n\n\tvar INVALID_STRIPE_ERROR = 'Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.'; // We are using types to enforce the `stripe` prop in this lib, but in a real\n\t// integration `stripe` could be anything, so we need to do some sanity\n\t// validation to prevent type errors.\n\n\tvar validateStripe = function validateStripe(maybeStripe) {\n\t  if (maybeStripe === null || isStripe(maybeStripe)) {\n\t    return maybeStripe;\n\t  }\n\n\t  throw new Error(INVALID_STRIPE_ERROR);\n\t};\n\n\tvar parseStripeProp = function parseStripeProp(raw) {\n\t  if (isPromise(raw)) {\n\t    return {\n\t      tag: 'async',\n\t      stripePromise: Promise.resolve(raw).then(validateStripe)\n\t    };\n\t  }\n\n\t  var stripe = validateStripe(raw);\n\n\t  if (stripe === null) {\n\t    return {\n\t      tag: 'empty'\n\t    };\n\t  }\n\n\t  return {\n\t    tag: 'sync',\n\t    stripe: stripe\n\t  };\n\t};\n\n\tvar ElementsContext = /*#__PURE__*/React.createContext(null);\n\tElementsContext.displayName = 'ElementsContext';\n\tvar parseElementsContext = function parseElementsContext(ctx, useCase) {\n\t  if (!ctx) {\n\t    throw new Error(\"Could not find Elements context; You need to wrap the part of your app that \".concat(useCase, \" in an <Elements> provider.\"));\n\t  }\n\n\t  return ctx;\n\t};\n\t/**\n\t * The `Elements` provider allows you to use [Element components](https://stripe.com/docs/stripe-js/react#element-components) and access the [Stripe object](https://stripe.com/docs/js/initializing) in any nested component.\n\t * Render an `Elements` provider at the root of your React app so that it is available everywhere you need it.\n\t *\n\t * To use the `Elements` provider, call `loadStripe` from `@stripe/stripe-js` with your publishable key.\n\t * The `loadStripe` function will asynchronously load the Stripe.js script and initialize a `Stripe` object.\n\t * Pass the returned `Promise` to `Elements`.\n\t *\n\t * @docs https://stripe.com/docs/stripe-js/react#elements-provider\n\t */\n\n\tvar Elements = function Elements(_ref) {\n\t  var rawStripeProp = _ref.stripe,\n\t      options = _ref.options,\n\t      children = _ref.children;\n\t  var parsed = React.useMemo(function () {\n\t    return parseStripeProp(rawStripeProp);\n\t  }, [rawStripeProp]); // For a sync stripe instance, initialize into context\n\n\t  var _React$useState = React.useState(function () {\n\t    return {\n\t      stripe: parsed.tag === 'sync' ? parsed.stripe : null,\n\t      elements: parsed.tag === 'sync' ? parsed.stripe.elements(options) : null\n\t    };\n\t  }),\n\t      _React$useState2 = _slicedToArray(_React$useState, 2),\n\t      ctx = _React$useState2[0],\n\t      setContext = _React$useState2[1];\n\n\t  React.useEffect(function () {\n\t    var isMounted = true;\n\n\t    var safeSetContext = function safeSetContext(stripe) {\n\t      setContext(function (ctx) {\n\t        // no-op if we already have a stripe instance (https://github.com/stripe/react-stripe-js/issues/296)\n\t        if (ctx.stripe) return ctx;\n\t        return {\n\t          stripe: stripe,\n\t          elements: stripe.elements(options)\n\t        };\n\t      });\n\t    }; // For an async stripePromise, store it in context once resolved\n\n\n\t    if (parsed.tag === 'async' && !ctx.stripe) {\n\t      parsed.stripePromise.then(function (stripe) {\n\t        if (stripe && isMounted) {\n\t          // Only update Elements context if the component is still mounted\n\t          // and stripe is not null. We allow stripe to be null to make\n\t          // handling SSR easier.\n\t          safeSetContext(stripe);\n\t        }\n\t      });\n\t    } else if (parsed.tag === 'sync' && !ctx.stripe) {\n\t      // Or, handle a sync stripe instance going from null -> populated\n\t      safeSetContext(parsed.stripe);\n\t    }\n\n\t    return function () {\n\t      isMounted = false;\n\t    };\n\t  }, [parsed, ctx, options]); // Warn on changes to stripe prop\n\n\t  var prevStripe = usePrevious(rawStripeProp);\n\t  React.useEffect(function () {\n\t    if (prevStripe !== null && prevStripe !== rawStripeProp) {\n\t      console.warn('Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.');\n\t    }\n\t  }, [prevStripe, rawStripeProp]); // Apply updates to elements when options prop has relevant changes\n\n\t  var prevOptions = usePrevious(options);\n\t  React.useEffect(function () {\n\t    if (!ctx.elements) {\n\t      return;\n\t    }\n\n\t    var updates = extractAllowedOptionsUpdates(options, prevOptions, ['clientSecret', 'fonts']);\n\n\t    if (updates) {\n\t      ctx.elements.update(updates);\n\t    }\n\t  }, [options, prevOptions, ctx.elements]); // Attach react-stripe-js version to stripe.js instance\n\n\t  React.useEffect(function () {\n\t    var anyStripe = ctx.stripe;\n\n\t    if (!anyStripe || !anyStripe._registerWrapper || !anyStripe.registerAppInfo) {\n\t      return;\n\t    }\n\n\t    anyStripe._registerWrapper({\n\t      name: 'react-stripe-js',\n\t      version: \"1.10.0\"\n\t    });\n\n\t    anyStripe.registerAppInfo({\n\t      name: 'react-stripe-js',\n\t      version: \"1.10.0\",\n\t      url: 'https://stripe.com/docs/stripe-js/react'\n\t    });\n\t  }, [ctx.stripe]);\n\t  return /*#__PURE__*/React.createElement(ElementsContext.Provider, {\n\t    value: ctx\n\t  }, children);\n\t};\n\tElements.propTypes = {\n\t  stripe: propTypes.any,\n\t  options: propTypes.object\n\t};\n\tvar useElementsContextWithUseCase = function useElementsContextWithUseCase(useCaseMessage) {\n\t  var ctx = React.useContext(ElementsContext);\n\t  return parseElementsContext(ctx, useCaseMessage);\n\t};\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#useelements-hook\n\t */\n\n\tvar useElements = function useElements() {\n\t  var _useElementsContextWi = useElementsContextWithUseCase('calls useElements()'),\n\t      elements = _useElementsContextWi.elements;\n\n\t  return elements;\n\t};\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#usestripe-hook\n\t */\n\n\tvar useStripe = function useStripe() {\n\t  var _useElementsContextWi2 = useElementsContextWithUseCase('calls useStripe()'),\n\t      stripe = _useElementsContextWi2.stripe;\n\n\t  return stripe;\n\t};\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#elements-consumer\n\t */\n\n\tvar ElementsConsumer = function ElementsConsumer(_ref2) {\n\t  var children = _ref2.children;\n\t  var ctx = useElementsContextWithUseCase('mounts <ElementsConsumer>'); // Assert to satisfy the busted React.FC return type (it should be ReactNode)\n\n\t  return children(ctx);\n\t};\n\tElementsConsumer.propTypes = {\n\t  children: propTypes.func.isRequired\n\t};\n\n\tvar useCallbackReference = function useCallbackReference(cb) {\n\t  var ref = React.useRef(cb);\n\t  React.useEffect(function () {\n\t    ref.current = cb;\n\t  }, [cb]);\n\t  return function () {\n\t    if (ref.current) {\n\t      ref.current.apply(ref, arguments);\n\t    }\n\t  };\n\t};\n\n\tvar noop = function noop() {};\n\n\tvar capitalized = function capitalized(str) {\n\t  return str.charAt(0).toUpperCase() + str.slice(1);\n\t};\n\n\tvar createElementComponent = function createElementComponent(type, isServer) {\n\t  var displayName = \"\".concat(capitalized(type), \"Element\");\n\n\t  var ClientElement = function ClientElement(_ref) {\n\t    var id = _ref.id,\n\t        className = _ref.className,\n\t        _ref$options = _ref.options,\n\t        options = _ref$options === void 0 ? {} : _ref$options,\n\t        _ref$onBlur = _ref.onBlur,\n\t        onBlur = _ref$onBlur === void 0 ? noop : _ref$onBlur,\n\t        _ref$onFocus = _ref.onFocus,\n\t        onFocus = _ref$onFocus === void 0 ? noop : _ref$onFocus,\n\t        _ref$onReady = _ref.onReady,\n\t        onReady = _ref$onReady === void 0 ? noop : _ref$onReady,\n\t        _ref$onChange = _ref.onChange,\n\t        onChange = _ref$onChange === void 0 ? noop : _ref$onChange,\n\t        _ref$onEscape = _ref.onEscape,\n\t        onEscape = _ref$onEscape === void 0 ? noop : _ref$onEscape,\n\t        _ref$onClick = _ref.onClick,\n\t        onClick = _ref$onClick === void 0 ? noop : _ref$onClick,\n\t        _ref$onLoadError = _ref.onLoadError,\n\t        onLoadError = _ref$onLoadError === void 0 ? noop : _ref$onLoadError,\n\t        _ref$onLoaderStart = _ref.onLoaderStart,\n\t        onLoaderStart = _ref$onLoaderStart === void 0 ? noop : _ref$onLoaderStart;\n\n\t    var _useElementsContextWi = useElementsContextWithUseCase(\"mounts <\".concat(displayName, \">\")),\n\t        elements = _useElementsContextWi.elements;\n\n\t    var elementRef = React.useRef(null);\n\t    var domNode = React.useRef(null);\n\t    var callOnReady = useCallbackReference(onReady);\n\t    var callOnBlur = useCallbackReference(onBlur);\n\t    var callOnFocus = useCallbackReference(onFocus);\n\t    var callOnClick = useCallbackReference(onClick);\n\t    var callOnChange = useCallbackReference(onChange);\n\t    var callOnEscape = useCallbackReference(onEscape);\n\t    var callOnLoadError = useCallbackReference(onLoadError);\n\t    var callOnLoaderStart = useCallbackReference(onLoaderStart);\n\t    React.useLayoutEffect(function () {\n\t      if (elementRef.current == null && elements && domNode.current != null) {\n\t        var element = elements.create(type, options);\n\t        elementRef.current = element;\n\t        element.mount(domNode.current);\n\t        element.on('ready', function () {\n\t          return callOnReady(element);\n\t        });\n\t        element.on('change', callOnChange);\n\t        element.on('blur', callOnBlur);\n\t        element.on('focus', callOnFocus);\n\t        element.on('escape', callOnEscape); // Users can pass an onLoadError prop on any Element component\n\t        // just as they could listen for the `loaderror` event on any Element,\n\t        // but only certain Elements will trigger the event.\n\n\t        element.on('loaderror', callOnLoadError); // Users can pass an onLoaderStart prop on any Element component\n\t        // just as they could listen for the `loaderstart` event on any Element,\n\t        // but only certain Elements will trigger the event.\n\n\t        element.on('loaderstart', callOnLoaderStart); // Users can pass an onClick prop on any Element component\n\t        // just as they could listen for the `click` event on any Element,\n\t        // but only the PaymentRequestButton will actually trigger the event.\n\n\t        element.on('click', callOnClick);\n\t      }\n\t    });\n\t    var prevOptions = usePrevious(options);\n\t    React.useEffect(function () {\n\t      if (!elementRef.current) {\n\t        return;\n\t      }\n\n\t      var updates = extractAllowedOptionsUpdates(options, prevOptions, ['paymentRequest']);\n\n\t      if (updates) {\n\t        elementRef.current.update(updates);\n\t      }\n\t    }, [options, prevOptions]);\n\t    React.useLayoutEffect(function () {\n\t      return function () {\n\t        if (elementRef.current) {\n\t          elementRef.current.destroy();\n\t          elementRef.current = null;\n\t        }\n\t      };\n\t    }, []);\n\t    return /*#__PURE__*/React.createElement(\"div\", {\n\t      id: id,\n\t      className: className,\n\t      ref: domNode\n\t    });\n\t  }; // Only render the Element wrapper in a server environment.\n\n\n\t  var ServerElement = function ServerElement(props) {\n\t    // Validate that we are in the right context by calling useElementsContextWithUseCase.\n\t    useElementsContextWithUseCase(\"mounts <\".concat(displayName, \">\"));\n\t    var id = props.id,\n\t        className = props.className;\n\t    return /*#__PURE__*/React.createElement(\"div\", {\n\t      id: id,\n\t      className: className\n\t    });\n\t  };\n\n\t  var Element = isServer ? ServerElement : ClientElement;\n\t  Element.propTypes = {\n\t    id: propTypes.string,\n\t    className: propTypes.string,\n\t    onChange: propTypes.func,\n\t    onBlur: propTypes.func,\n\t    onFocus: propTypes.func,\n\t    onReady: propTypes.func,\n\t    onClick: propTypes.func,\n\t    onLoadError: propTypes.func,\n\t    onLoaderStart: propTypes.func,\n\t    options: propTypes.object\n\t  };\n\t  Element.displayName = displayName;\n\t  Element.__elementType = type;\n\t  return Element;\n\t};\n\n\tvar isServer = typeof window === 'undefined';\n\t/**\n\t * Requires beta access:\n\t * Contact [Stripe support](https://support.stripe.com/) for more information.\n\t *\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar AuBankAccountElement = createElementComponent('auBankAccount', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar CardElement = createElementComponent('card', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar CardNumberElement = createElementComponent('cardNumber', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar CardExpiryElement = createElementComponent('cardExpiry', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar CardCvcElement = createElementComponent('cardCvc', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar FpxBankElement = createElementComponent('fpxBank', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar IbanElement = createElementComponent('iban', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar IdealBankElement = createElementComponent('idealBank', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar P24BankElement = createElementComponent('p24Bank', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar EpsBankElement = createElementComponent('epsBank', isServer);\n\tvar PaymentElement = createElementComponent('payment', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar PaymentRequestButtonElement = createElementComponent('paymentRequestButton', isServer);\n\t/**\n\t * Requires beta access:\n\t * Contact [Stripe support](https://support.stripe.com/) for more information.\n\t *\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar LinkAuthenticationElement = createElementComponent('linkAuthentication', isServer);\n\t/**\n\t * Requires beta access:\n\t * Contact [Stripe support](https://support.stripe.com/) for more information.\n\t *\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar ShippingAddressElement = createElementComponent('shippingAddress', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar AffirmMessageElement = createElementComponent('affirmMessage', isServer);\n\t/**\n\t * @docs https://stripe.com/docs/stripe-js/react#element-components\n\t */\n\n\tvar AfterpayClearpayMessageElement = createElementComponent('afterpayClearpayMessage', isServer);\n\n\texports.AffirmMessageElement = AffirmMessageElement;\n\texports.AfterpayClearpayMessageElement = AfterpayClearpayMessageElement;\n\texports.AuBankAccountElement = AuBankAccountElement;\n\texports.CardCvcElement = CardCvcElement;\n\texports.CardElement = CardElement;\n\texports.CardExpiryElement = CardExpiryElement;\n\texports.CardNumberElement = CardNumberElement;\n\texports.Elements = Elements;\n\texports.ElementsConsumer = ElementsConsumer;\n\texports.EpsBankElement = EpsBankElement;\n\texports.FpxBankElement = FpxBankElement;\n\texports.IbanElement = IbanElement;\n\texports.IdealBankElement = IdealBankElement;\n\texports.LinkAuthenticationElement = LinkAuthenticationElement;\n\texports.P24BankElement = P24BankElement;\n\texports.PaymentElement = PaymentElement;\n\texports.PaymentRequestButtonElement = PaymentRequestButtonElement;\n\texports.ShippingAddressElement = ShippingAddressElement;\n\texports.useElements = useElements;\n\texports.useStripe = useStripe;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","export const UPDATE_DESIGN_OPTIONS = 'fabricDesign/*/UpdateOptions';\nexport const SET_UPLOADED_IMAGE = 'fabricDesign/*/SetUploadedImage';\nexport const REVERT_TO_BASIC = 'fabricDesign/*/RevertToBasic';\n","import {useCallback} from 'react';\nimport {useDispatch} from 'react-redux';\nimport {UPDATE_DESIGN_OPTIONS} from '~/CreateFabricInvitation/reducers/fabricDesign/constants';\n\nexport function useNavigator({isMobile = false, disableAutoOpenEditor = false}) {\n  const dispatch = useDispatch();\n  return useCallback(\n    (section) => {\n      dispatch({\n        type: UPDATE_DESIGN_OPTIONS,\n        payload: {\n          currentSection: section,\n        },\n      });\n      if (isMobile) {\n        dispatch({\n          type: UPDATE_DESIGN_OPTIONS,\n          payload: {editingMobile: !disableAutoOpenEditor},\n        });\n      }\n    },\n    [isMobile]\n  );\n}\n","export const DEFAULT_CARD_ZOOM = 0.5;\nexport const DEFAULT_WIDTH_DESKTOP = 500;\nexport const DEFAULT_HEIGHT_DESKTOP = 680;\nexport const DEFAULT_WIDTH_MW = 265;\nexport const DEFAULT_HEIGHT_MW = 360;\nexport const DEFAULT_WIDTH_MINIFIED = 132;\nexport const DEFAULT_HEIGHT_MINIFIED = 180;\n\nexport const Sections = {\n  CARD_DESIGN: 'card_design',\n  ENVELOPE_LINER: 'enveloper_line',\n  STAMP: 'stamp',\n  BACKGROUND: 'background',\n};\n\nexport const menuMappingKeys = {\n  KEYBOARD: 'KEYBOARD',\n  FONT_STYLE: 'FONT_STYLE',\n  FONT_SIZE: 'FONT_SIZE',\n  TEXT_FORMAT: 'TEXT_FORMAT',\n  SPACING: 'SPACING',\n  COLOR: 'COLOR',\n  UYO: 'UYO',\n};\n\nexport const RECOMMENDED_FONTS = [\n  {\n    family: 'BrandonGrotesqueMedium',\n    image: '',\n    name: 'Brandon Grotesque Medium',\n    style: 'normal',\n    type: 'sans-serif',\n    url: '/assets/fonts/BrandonGrotesqueMedium.css',\n    weight: 'normal',\n  },\n  {\n    family: 'Vollkorn',\n    image: '',\n    name: 'Vollkorn Regular',\n    style: 'normal',\n    type: 'serif',\n    url: 'https://fonts.googleapis.com/css2?family=Vollkorn&display=swap',\n    weight: '400',\n  },\n  {\n    family: 'la-bohemienne',\n    image: '',\n    name: 'La Bohemienne',\n    style: 'normal',\n    type: 'script',\n    url: '',\n    weight: '400',\n  },\n];\n\nexport const textColorOptions = [\n  '#F6C3C7',\n  '#FFEDC7',\n  '#FBF8C7',\n  '#D8EAD0',\n  '#C6E0F7',\n  '#E1C3DF',\n  '#F2BFDC',\n  '#F18482',\n  '#FDD47B',\n  '#F9EF81',\n  '#AAD29F',\n  '#84C4EC',\n  '#A776B4',\n  '#DF7DB3',\n  '#E94342',\n  '#F5962F',\n  '#FAEA30',\n  '#7BBC62',\n  '#4C88CB',\n  '#854B98',\n  '#D51E86',\n  '#E51C22',\n  '#EF7E17',\n  '#F9E415',\n  '#5FB451',\n  '#3170B7',\n  '#744295',\n  '#D0026E',\n];\n","import React, {useState} from 'react';\nimport {useRecipientReaction} from './useRecipientReaction';\nimport {PB_AlertLine} from '~/common/svg/PB_AlertLine';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {toastAlert} from '~/common/_pb_components/atoms/Toast';\nimport {useEmojiBurstAnimation} from './useEmojiBurstAnimation';\nimport './GuestReaction.sass';\n\nexport function GuestReaction({\n  rsvpDrawer,\n  eventId,\n  eviteType,\n  guestId,\n  saveReactionCallback = () => {},\n}) {\n  const [reacted, setReacted] = useState(false);\n  const [selectReaction, setSelectReaction] = useState(false);\n  const {viewerIsNotHost} = window;\n\n  const {animate} = useEmojiBurstAnimation(rsvpDrawer);\n  const {submit} = useRecipientReaction(eventId, eviteType, guestId, saveReactionCallback);\n\n  const handleReaction = async (e, reaction) => {\n    if (!reacted) {\n      setReacted(true);\n\n      await animate(e, reaction);\n      await submit(reaction).catch(() => setReacted(false));\n\n      if (viewerIsNotHost) {\n        document.querySelector('div.footer-wrap').style.paddingBottom = '0';\n      }\n    } else {\n      toastAlert(\"You've already reacted to this event\", {\n        type: 'warning',\n        icon: <PB_AlertLine size={0.75} />,\n      });\n    }\n  };\n\n  return reacted ? (\n    <></>\n  ) : selectReaction ? (\n    <div className={`guest-reactions__select-reaction-wrapper ${reacted ? 'reacted' : ''}`}>\n      <span id=\"emoji-fire\" className=\"emoji emoji-fire\" onClick={(e) => handleReaction(e, '🔥')}>\n        🔥\n      </span>\n      <span id=\"emoji-thumb\" className=\"emoji emoji-thumb\" onClick={(e) => handleReaction(e, '👍')}>\n        👍\n      </span>\n      <span id=\"emoji-party\" className=\"emoji emoji-party\" onClick={(e) => handleReaction(e, '🥳')}>\n        🥳\n      </span>\n      <span id=\"emoji-heart\" className=\"emoji emoji-heart\" onClick={(e) => handleReaction(e, '💓')}>\n        💓\n      </span>\n      <span\n        id=\"emoji-popper\"\n        className=\"emoji emoji-popper\"\n        onClick={(e) => handleReaction(e, '🎉')}\n      >\n        🎉\n      </span>\n    </div>\n  ) : (\n    <div className=\"guest-reactions__reaction-wrapper\">\n      <Button\n        variant=\"primary\"\n        fullWidth\n        size=\"large\"\n        data-qa-id=\"send-reaction\"\n        onClick={() => setSelectReaction(true)}\n      >\n        Send Reaction\n        <span className=\"guest-reactions__cycle-emoji\">\n          <span className=\"guest-reactions__emoji-fire\">🔥</span>\n          <span className=\"guest-reactions__emoji-party\">🥳</span>\n          <span className=\"guest-reactions__emoji-thumb\">👍</span>\n          <span className=\"guest-reactions__emoji-heart\">💓</span>\n          <span className=\"guest-reactions__emoji-popper\">🎉</span>\n        </span>\n      </Button>\n    </div>\n  );\n}\n","export const saveReaction = async (reaction, guestId, eventId) => {\n  const url = `/ajax/guests/${eventId}/reaction`;\n  const token = window.evite.cookie('csrftoken');\n\n  const headers = {\n    'X-CSRFToken': token,\n    accept: 'application/json',\n    'Content-Type': 'application/json',\n  };\n\n  const response = await fetch(url, {\n    method: 'POST',\n    credentials: 'include',\n    headers,\n    body: JSON.stringify({\n      guest_id: guestId,\n      reaction,\n    }),\n  });\n\n  if (!response.ok) {\n    throw new Error('Error persisting reaction');\n  }\n\n  return response.json();\n};\n","import {smallAndUp} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport const useEmojiBurstAnimation = (rsvpDrawer) => {\n  const animMatrix = [\n    {x: -80, y: -270, ang: -15, scale: 1.3},\n    {x: -105, y: -160, ang: -20, scale: 0.8},\n    {x: -57, y: -70, ang: -15, scale: 1},\n    {x: -3, y: -325, ang: 3, scale: 1.2},\n    {x: 30, y: -204, ang: -2, scale: 1.3},\n    {x: -30, y: -154, ang: 5, scale: 1},\n    {x: 5, y: -23, ang: 3, scale: 1},\n    {x: 80, y: -270, ang: 15, scale: 0.8},\n    {x: 105, y: -160, ang: 19, scale: 1.2},\n    {x: 47, y: -76, ang: 15, scale: 1.3},\n  ];\n\n  const animate = (event, reaction) =>\n    new Promise((resolve) => {\n      const {matches: largeScreens} = window.matchMedia(`(min-width: ${smallAndUp})`);\n      const leftReference = largeScreens ? event.target : document.getElementById('emoji-party');\n      const left = leftReference.getBoundingClientRect().left + 25;\n      const top = event.clientY - 32;\n\n      // Create 10 emojis and then give them new css values to animate to\n      for (let i = 0; i < 10; i++) {\n        const newElement = document.createElement('div');\n        newElement.style.cssText = `\n          left: ${left}px;\n          top: ${top}px;\n          transform: rotate(${animMatrix[i].ang}deg) scale(${animMatrix[i].scale})\n        `;\n        newElement.innerHTML = reaction;\n        newElement.id = `emoji-anim-${i}`;\n        document.body.appendChild(newElement);\n        window.setTimeout(() => {\n          const el = document.getElementById(`emoji-anim-${i}`);\n          el.style.left = `${left + animMatrix[i].x}px`;\n          el.style.top = `${top + animMatrix[i].y}px`;\n          el.style.opacity = 0;\n        }, 50);\n      }\n\n      if (rsvpDrawer?.current) {\n        rsvpDrawer.current.style.transition = 'all 1.5s';\n        rsvpDrawer.current.classList.remove('open');\n      }\n\n      // Remove emojis from body\n      window.setTimeout(() => {\n        for (let i = 0; i < 10; i++) {\n          document.getElementById(`emoji-anim-${i}`).remove();\n        }\n        resolve();\n      }, 3100);\n    });\n\n  return {animate};\n};\n","import React from 'react';\nimport {useHistory, useLocation} from 'react-router';\nimport {toastAlert} from '~/common/_pb_components/atoms/Toast';\nimport {PB_AlertLine} from '~/common/svg/PB_AlertLine';\nimport {saveReaction} from './api/guest';\n\nexport const useRecipientReaction = (eventId, eviteType, guestId, saveReactionCallback) => {\n  const location = useLocation();\n  const history = useHistory();\n  const params = new URLSearchParams(location.search);\n\n  const submit = async (reaction) => {\n    let url = '';\n\n    // If no guest id, don't save anything\n    if (!guestId) {\n      url = `/frp/rsvp`;\n      params.append('reaction', reaction);\n\n      history.replace({pathname: url, search: params.toString()}, location.state);\n      return;\n    }\n\n    params.append('reaction', reaction);\n\n    if (eviteType === 'card') {\n      url = '/success'; // Greeting card reaction confirmation page\n    } else if (eviteType === 'event') {\n      url = `/frp/rsvp`; // Event reaction confirmation page\n      params.append('gid', guestId);\n    }\n\n    try {\n      const data = await saveReaction(reaction, guestId, eventId);\n      saveReactionCallback(data);\n\n      if (!url) {\n        throw new Error('Unknown evite type');\n      }\n\n      history.replace({pathname: url, search: params.toString()}, location.state);\n    } catch (err) {\n      toastAlert('Error reacting to card', {\n        type: 'error',\n        icon: <PB_AlertLine size={0.75} />,\n      });\n\n      throw err;\n    }\n  };\n\n  return {submit};\n};\n","import React from 'react';\nimport urls from 'urls';\nimport * as utils from '~/ViewInvitation/utils';\nimport {EviteModal} from '~/modal/index';\nimport {PB_CalendarLine} from '~/common/svg/PB_CalendarLine';\nimport {tanzanite, pebble} from '~sass/pb_styleguide/base/_exports.sass';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nimport {useBrowserWidth} from '~/common/hooks/useBrowserWidth';\nimport {useBrowserHeight} from '~/common/hooks/useBrowserHeight';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Google} from '~/common/svg/Google';\nimport {Apple} from '~/common/svg/Apple';\nimport {Outlook} from '~/common/svg/Outlook';\n\nimport './AddToCalendar.sass';\n\nexport function AddToCalendar(props) {\n  const isButton = !!props.isButton;\n  const isPreview = !!props.preview;\n  const text = props.text || props.title;\n  const {ratio} = props;\n\n  const ref = React.useRef(null);\n  const [menuOpen, setMenuOpen] = React.useState(false);\n  const [menuTop, setMenuTop] = React.useState();\n  const [scrollY, setScrollY] = React.useState(window.scrollY);\n  const browserWidth = useBrowserWidth();\n  const browserHeight = useBrowserHeight();\n\n  const handleSelectAppleOrOutlookCalendar = (event) => {\n    event.preventDefault();\n\n    const isMobile = utils.isMobile();\n    if (isMobile) {\n      downloadCalendarEvent();\n    } else {\n      const addToCalendarModal = createAddToCalendarModal();\n      addToCalendarModal.show();\n    }\n\n    return false;\n  };\n\n  const handleSelectGoogleCalendar = (event) => {\n    event.preventDefault();\n\n    window.open(window.calendar_urls.google_cal_url, '_blank');\n  };\n\n  const handleClick = (event) => {\n    event.preventDefault();\n\n    setMenuOpen(true);\n  };\n\n  const downloadCalendarEvent = () => {\n    location.href = `${location.origin}/event/${window.event_id}/export/ical/?gid=${window.guest_id}`;\n  };\n\n  const createAddToCalendarModal = () => {\n    const isMobile = utils.isMobile();\n\n    return new EviteModal({\n      width: '640px',\n      url: urls.get('modal_add_to_calendar', {\n        event_id: window.evite_event.id,\n      }),\n      url_parameters: {\n        guest_id: window.guest_id,\n        is_mobile: utils.isMobile(),\n      },\n    });\n  };\n\n  const watchCalendarMenuClick = (event) => {\n    if (!menuOpen) return;\n    const calendarOptionsMenu = document.getElementById('calendar-options-menu');\n    if (!calendarOptionsMenu) return;\n\n    if (event.target !== calendarOptionsMenu && !calendarOptionsMenu.contains(event.target)) {\n      setMenuOpen(false);\n    }\n  };\n\n  React.useEffect(() => {\n    let timeoutId = null;\n    const watchScrollY = () => {\n      clearTimeout(timeoutId);\n      timeoutId = setTimeout(() => setScrollY(window.scrollY, 150));\n    };\n\n    window.addEventListener('click', watchCalendarMenuClick);\n    window.addEventListener('scroll', watchScrollY);\n    window.addEventListener('resize', watchScrollY);\n    return () => {\n      window.removeEventListener('click', watchCalendarMenuClick);\n      window.removeEventListener('scroll', watchScrollY);\n      window.removeEventListener('scroll', watchScrollY);\n    };\n  }, [menuOpen]);\n\n  React.useEffect(() => {\n    if (!ref.current) return;\n    const offsetY = ref.current.offsetTop;\n    const {top} = ref.current.getBoundingClientRect();\n    if (top + 288 > window.innerHeight) {\n      // 288 = twice the height of the calendar options menu\n      setMenuTop(`calc(${offsetY}px - 9rem)`);\n    } else {\n      setMenuTop(`calc(${offsetY}px + 2rem)`);\n    }\n  }, [browserWidth, browserHeight, menuOpen, scrollY]);\n\n  // Not clickable if its preview mode.\n  return (\n    <>\n      <button\n        id=\"add-to-calendar\"\n        data-qa-id={props['data-qa-id'] ?? `add-to-calendar`}\n        className={props.className || 'button link large view-invitation__add-to-calendar-btn'}\n        title={props.title}\n        data-type={props['data-type']}\n        data-source={props['data-source']}\n        data-action={props['data-action']}\n        onClick={handleClick}\n        disabled={isPreview}\n        ref={ref}\n      >\n        {isButton ? (\n          `Add to Calendar`\n        ) : (\n          <>\n            <PB_CalendarLine ratio={ratio} color={isPreview ? pebble : tanzanite} />\n            <Typography\n              classNames=\"view-invitation__add-to-calendar-btn-text\"\n              color={isPreview ? 'pebble' : 'tanzanite'}\n              variant=\"paragraph2\"\n            >\n              {text}\n            </Typography>\n          </>\n        )}\n      </button>\n      {menuOpen && (\n        <div\n          id=\"calendar-options-menu\"\n          className=\"add-to-calendar__calendar-options-menu\"\n          style={{\n            top: menuTop,\n          }}\n        >\n          <Button\n            variant=\"transparent\"\n            className=\"add-to-calendar__calendar-option\"\n            onClick={handleSelectGoogleCalendar}\n            data-qa-id=\"add-to-cal__google\"\n          >\n            <Google ratio={0.75} />\n            Add to Google Calendar\n          </Button>\n          <Button\n            variant=\"transparent\"\n            className=\"add-to-calendar__calendar-option\"\n            onClick={handleSelectAppleOrOutlookCalendar}\n            data-qa-id=\"add-to-cal__apple\"\n          >\n            <Apple ratio={0.75} />\n            Add to Apple Calendar\n          </Button>\n          <Button\n            variant=\"transparent\"\n            className=\"add-to-calendar__calendar-option\"\n            onClick={handleSelectAppleOrOutlookCalendar}\n          >\n            <Outlook ratio={0.75} />\n            Add to Outlook Calendar\n          </Button>\n        </div>\n      )}\n    </>\n  );\n}\n\nAddToCalendar.defaultProps = {\n  className: '',\n  text: '',\n  title: 'Add to Calendar',\n  'data-action': 'download',\n  'data-source': '',\n  'data-type': 'calendar',\n  size: 15,\n};\n","import React from 'react';\nimport {shallowEqual, useSelector} from 'react-redux';\nimport {selectAvatar} from '../../reducers/avatars';\nimport {eviteBlue} from '~sass/reinvention_styleguide/base/_exports.sass';\nimport {AVATAR_COLORS} from '../constants.js';\n// import './avatar.sass';\n\nexport function Avatar(props) {\n  const {name, size, userId, className} = props;\n  const avatar = useSelector(selectAvatar(userId), shallowEqual);\n  const AMP_SEPARATED_PATTERN = /^\\s*(\\w+.*)\\s+(&|and)\\s+(\\w+.*)\\s*$/i;\n\n  const getAvatarInitials = (guestName) => {\n    // strip everything but letters, spaces, and &'s from the guestname\n    // const strippedGuestName = guestName.replace(/[^a-z &]/gi, '');\n    const strippedGuestName = guestName.replace(\n      /([\\u2700-\\u27BF]|[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2011-\\u26FF]|\\uD83E[\\uDD10-\\uDDFF])/g,\n      ''\n    );\n\n    // special case of two names inside one guest name (see\n    // comment about AMP_SEPARATED_PATTERN, above) - if we\n    // detect that case, grab the first letter from each\n    const matches = strippedGuestName.match(AMP_SEPARATED_PATTERN);\n    if (matches) {\n      const before = matches[1].trim();\n      const after = matches[3].trim();\n      return before[0] + after[0];\n    }\n\n    const strParts = strippedGuestName.trim().split(/[ ]+/);\n    const firstLetter = (guestName && guestName.length ? strParts[0][0] : '') || '';\n    let lastLetter = '';\n\n    if (strParts.length > 1) {\n      lastLetter = strParts[1][0];\n    }\n\n    return firstLetter + lastLetter;\n  };\n\n  const getAvatarColors = (colors, num) => {\n    const index = (num - 1) % colors.length;\n    return colors[index];\n  };\n\n  const initials = getAvatarInitials(name);\n  const color = avatar.icon_id !== '' ? getAvatarColors(AVATAR_COLORS, avatar.icon_id) : eviteBlue;\n\n  return (\n    <div className={`user-avatar ${className}`} id={userId}>\n      <span\n        className={`user-avatar__disc user-avatar__disc--${size}`}\n        style={{\n          border: `2px solid ${color}`,\n        }}\n      >\n        {avatar?.url ? (\n          <span\n            className=\"user-avatar__disc__inner\"\n            data-qa-id=\"user-avatar-image\"\n            style={{\n              backgroundImage: `url(${avatar.url})`,\n              backgroundColor: `2px solid ${color}`,\n            }}\n          />\n        ) : (\n          <span\n            className=\"user-avatar__disc__inner\"\n            data-qa-id=\"user-avatar-initials\"\n            style={{\n              backgroundColor: `${color}`,\n            }}\n          >\n            {initials}\n          </span>\n        )}\n      </span>\n    </div>\n  );\n}\n\nAvatar.defaultProps = {\n  name: '',\n};\n","import React from 'react';\nimport {InvitationLink} from './InvitationLink';\nimport {ArrowIconReinvention} from '~/common/svg/ArrowReinvention';\n\nexport function BackLink(props) {\n  const {to, className, dataQaId, children} = props;\n  return (\n    <InvitationLink\n      className={`back-link font_18 ${className || ''}`}\n      data-qa-id={dataQaId}\n      to={to || '/'}\n    >\n      <ArrowIconReinvention className=\"back-link__arrow\" direction=\"left\" />\n      {children}\n    </InvitationLink>\n  );\n}\n","/*\n  This file is duplicated in:\n    avalanche/assets/js/admin/cms/template/components/FreeEventCountdown.js\n    typhoon/assets/js/view_invitation/special-features/components/FreeEventCountdown.js\n\n  please keep in sync as needed\n*/\n\nimport React from 'react';\n\nfunction padNumber(num, size) {\n  let s = `${num}`;\n  while (s.length < size) s = `0${s}`;\n  return s;\n}\n\nexport class FreeEventCountdown extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = this.getDateDelta(new Date(), props);\n    if (!this.props.countdown) console.log('Missing countdown');\n    else if (this.props.countdown.date_format !== 'separate')\n      console.log('Unknown date_format: ', this.props.countdown.date_format);\n  }\n\n  componentDidMount() {\n    this.intervalID = setInterval(() => this.tick(), 1000);\n  }\n\n  componentWillUnmount() {\n    clearInterval(this.intervalID);\n  }\n\n  componentWillReceiveProps(nextProps, nextState) {\n    if (this.props.startTime !== nextProps.startTime)\n      this.setState(this.getDateDelta(new Date(), nextProps));\n  }\n\n  tick() {\n    this.setState(this.getDateDelta(new Date(), this.props));\n  }\n\n  shouldComponentUpdate(nextProps, nextState) {\n    return !(\n      JSON.stringify(nextProps) === JSON.stringify(this.props) &&\n      JSON.stringify(nextState) === JSON.stringify(this.state)\n    );\n  }\n\n  getDateDelta(date, props) {\n    let days = 0;\n    let hours = 0;\n    let minutes = 0;\n    let seconds = 0;\n    let expired = true;\n    const start_ms = new XDate(props.startTime).getTime();\n    const milliseconds = start_ms - date.getTime();\n    if (milliseconds > 0) {\n      days = Math.floor(milliseconds / (1000 * 60 * 60 * 24));\n      hours = Math.floor(milliseconds / (1000 * 60 * 60)) % 24;\n      minutes = Math.floor(milliseconds / (1000 * 60)) % 60;\n      seconds = Math.floor(milliseconds / 1000) % 60;\n      expired = false;\n    }\n    return {\n      days,\n      hours,\n      minutes,\n      seconds,\n      expired,\n    };\n  }\n\n  render() {\n    if (this.props.mobile) {\n      let fontFamily = this.props.countdown.mobile_font_family;\n      if (fontFamily === 'Heroid') fontFamily = 'HeroidRegular';\n      if (this.props.countdown.date_format === 'separate')\n        return (\n          <div\n            id=\"countdown_container\"\n            className={`mobile-countdown ${\n              this.state.expired ? 'timer-expired' : ''\n            } mobile-position-${this.props.countdown.mobile_position}`}\n            style={{\n              fontFamily,\n              fontSize: this.props.countdown.mobile_font_size * this.props.scale,\n              color: this.props.countdown.mobile_font_color,\n            }}\n          >\n            <link\n              rel=\"stylesheet\"\n              type=\"text/css\"\n              href={`//fonts.evitecdn.com/assets/fonts/${fontFamily}.css`}\n            />\n            <div id=\"countdown_days\">{padNumber(this.state.days, 2)}</div>\n            <div id=\"countdown_hours\">{padNumber(this.state.hours, 2)}</div>\n            <div id=\"countdown_minutes\">{padNumber(this.state.minutes, 2)}</div>\n            <div id=\"countdown_seconds\">{padNumber(this.state.seconds, 2)}</div>\n          </div>\n        );\n      return;\n    }\n    if (this.props.countdown.date_format === 'separate')\n      return (\n        <div id=\"countdown_container\" className={this.state.expired ? 'timer-expired' : ''}>\n          <div id=\"countdown_days\">{padNumber(this.state.days, 2)}</div>\n          <div id=\"countdown_hours\">{padNumber(this.state.hours, 2)}</div>\n          <div id=\"countdown_minutes\">{padNumber(this.state.minutes, 2)}</div>\n          <div id=\"countdown_seconds\">{padNumber(this.state.seconds, 2)}</div>\n        </div>\n      );\n  }\n}\n","import {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {CloseXButton} from '~/common/_pb_components/atoms/CloseXButton';\n\nexport function GuestRsvpActions(props) {\n  const {\n    hasRsvpd,\n    setUpdatingRsvp,\n    setWipRsvpStatus,\n    setRsvpOverlayOpen,\n    setShowSwirl,\n    isPremium,\n    origin,\n  } = props;\n  const onShowSwirl = () => {\n    setShowSwirl(true);\n  };\n  return (\n    <div className=\"view-invitation__rsvp-handler\">\n      <Typography variant=\"label2\" size=\"large\" classNames=\"view-invitation__rsvp-heading\">\n        Will you be attending?\n      </Typography>\n      <div className=\"view-invitation__rsvp-cta-group\">\n        <Button\n          variant=\"primary\"\n          fullWidth\n          data-qa-id=\"response-yes-rsvp\"\n          size=\"large\"\n          className=\"view-invitation__rsvp-cta\"\n          onClick={() => {\n            setWipRsvpStatus('Yes');\n            setRsvpOverlayOpen(true);\n          }}\n        >\n          Yes\n        </Button>\n        {!isPremium && origin !== 21 && (\n          <Button\n            variant=\"primary\"\n            fullWidth\n            data-qa-id=\"response-maybe-rsvp\"\n            size=\"large\"\n            className=\"view-invitation__rsvp-cta\"\n            onClick={() => {\n              setWipRsvpStatus('Maybe');\n              setRsvpOverlayOpen(true);\n            }}\n          >\n            Maybe\n          </Button>\n        )}\n        <Button\n          variant=\"primary\"\n          fullWidth\n          data-qa-id=\"response-no-rsvp\"\n          size=\"large\"\n          className=\"view-invitation__rsvp-cta\"\n          onClick={() => {\n            setWipRsvpStatus('No');\n            setRsvpOverlayOpen(true);\n          }}\n        >\n          No\n        </Button>\n      </div>\n      {hasRsvpd && (\n        <button\n          data-qa-id=\"cancel-rsvp-change\"\n          className=\"unstyled-button link\"\n          onClick={() => setUpdatingRsvp(false)}\n        >\n          Cancel\n        </button>\n      )}\n    </div>\n  );\n}\n","import React from 'react';\n\nexport function Heading(props) {\n  const {className, value, dataQaId} = props;\n  return (\n    <h2 className={`font_36 module__heading ${className || ''}`} data-qa-id={dataQaId}>\n      {value}\n    </h2>\n  );\n}\n","import React from 'react';\nimport {shallowEqual, useSelector, useStore} from 'react-redux';\nimport {Avatar} from '~/ViewInvitation/common/Avatar/Avatar';\nimport {LikeButton} from '~/ViewInvitation/routes/Guests/LikeButton';\nimport {deletePost} from '~/ViewInvitation/reducers/apiActions';\nimport {selectPost} from '~/ViewInvitation/reducers/posts';\nimport {TimeSince} from '~/ViewInvitation/common/TimeSince';\n\nexport function InlineComment(props) {\n  const {\n    className,\n    commentId,\n    showCount,\n    dataQaIdModifier,\n    handleSetEditing = null,\n    showEditIfAllowed = true,\n  } = props;\n  const isParentPost = false;\n  const store = useStore();\n\n  const post = useSelector(selectPost(commentId), shallowEqual);\n  if (!post) return null;\n\n  const userIdFromStore = useSelector((s) => s.user.userId);\n\n  const hasRSVPd = useSelector((state) => state.rsvp?.hasRsvpd ?? false);\n\n  const whenPosted = post.when.replace(/-/g, '').replace(/:/g, '');\n  const comment = post.comment || '';\n  const canUserEdit = comment && post.userId === userIdFromStore; // RSVP comments can't be edited here\n  const showIconRow = hasRSVPd;\n  const commenterName = post.guestName;\n  const {userId} = post;\n\n  const {likedBy} = post;\n  const likeCount = likedBy.length || Object.keys(likedBy).length;\n\n  const handleEditClick = () => {\n    handleSetEditing(commentId);\n  };\n\n  const handleDelete = () => {\n    handleSetEditing(null);\n    store.dispatch(deletePost(commentId));\n  };\n\n  const formattedComment = () => {\n    try {\n      return decodeURIComponent(comment);\n    } catch (e) {\n      return comment;\n    }\n  };\n\n  return (\n    <div className={className}>\n      <div className=\"inline-comment__flexwrap\">\n        <span className=\"inline-comment__left\">\n          <div className=\"inline-comment__avatar\">\n            <Avatar size=\"ex-small\" userId={userId} name={commenterName} />\n          </div>\n          <p className=\"inline-comment__text\">\n            <span className=\"commenter__name copy_18\">{commenterName}</span>\n            <span className=\"copy_18 guestlist__comment\">{comment}</span>\n            <br />\n            {whenPosted && <TimeSince timestamp={whenPosted} />}{' '}\n            {showCount && likeCount > 0 && (\n              <span className=\"inline-comment__interaction-count\">\n                {`${likeCount} like${likeCount > 1 ? 's' : ''}`}\n              </span>\n            )}\n            {showEditIfAllowed && canUserEdit && !isParentPost && (\n              <>\n                {' '}\n                <button\n                  onClick={() => handleEditClick()}\n                  className=\"button-link\"\n                  data-qa-id={`inline-comment-edit__${dataQaIdModifier}`}\n                >\n                  Edit\n                </button>\n                <span>|</span>\n                <button\n                  onClick={handleDelete}\n                  className=\"button-link\"\n                  data-qa-id={`inline-comment-delete__${dataQaIdModifier}`}\n                >\n                  Delete\n                </button>\n              </>\n            )}\n          </p>\n        </span>\n        {userIdFromStore && (\n          <div className=\"guest__interactions\">\n            {showIconRow && (\n              <div className=\"guest__interaction-row\">\n                <LikeButton\n                  userId={userIdFromStore}\n                  postId={commentId}\n                  post={post}\n                  showCount={false}\n                  ratio={0.5}\n                  dataQaId={`inline-comment-like__${dataQaIdModifier}`}\n                />\n              </div>\n            )}\n          </div>\n        )}\n      </div>\n    </div>\n  );\n}\n","import React from 'react';\nimport {Link, useLocation} from 'react-router-dom';\n\n// returns a Link, but preserves the query string (so guest id and UTM query string params are preserved)\nexport function InvitationLink(props) {\n  const newProps = {\n    ...props,\n  };\n  const location = useLocation();\n  if (typeof newProps.to === 'string') newProps.to = {pathname: newProps.to};\n  newProps.to.search = newProps.to.search || location.search;\n  return <Link {...newProps} />;\n}\n","import React from 'react';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport function Label(props) {\n  return (\n    <Typography\n      variant=\"label2\"\n      classNames=\"view-invitation__label\"\n      data-qa-id={props['data-qa-id']}\n    >\n      {props.value}\n    </Typography>\n  );\n}\n","import React from 'react';\nimport {Modal} from './index';\n\n/*\n Displays a List of buttons\n Accepts a message and an optionsList containing labels and actions.\n */\n\nexport function ActionSheetModal(props) {\n  const {isOpen, onClose, optionsList, showCancel = true, title, message, ...extraProps} = props;\n  return (\n    <Modal\n      isOpen={isOpen}\n      onClose={onClose}\n      className=\"EviteModal__Content ActionSheetModal\"\n      {...extraProps}\n    >\n      <ol className=\"ActionSheetModal__list\">\n        {!!title && <li className=\"ActionSheetModal__message__title\">{title}</li>}\n        {!!message && <li className=\"ActionSheetModal__message__message\">{message}</li>}\n        {optionsList.map((item) => (\n          <li\n            key={item.label}\n            onClick={() => {\n              item.action();\n              onClose();\n            }}\n            className={`ActionSheetModal__action ActionSheetModal__action${\n              item.destructive && '__destructive'\n            }`}\n          >\n            {item.label}\n          </li>\n        ))}\n      </ol>\n      {showCancel && (\n        <ol className=\"ActionSheetModal__list\">\n          <li className=\"ActionSheetModal__cancel\" onClick={onClose}>\n            Cancel\n          </li>\n        </ol>\n      )}\n    </Modal>\n  );\n}\n","import React from 'react';\nimport {Modal} from './index';\nimport {getStorage} from '../../utils/storage';\n/*\n Displays a modal at the bottom of the screen that can be dismissed for a set amount of time.\n */\n\n// On devices we are having trouble with the cookies not loading after being set until after a page\n// reload.  We note the dismissed GroundhogModals here to prevent them from being shown again before a page reload\n\nconst dismissedGroundHogs = {};\nlet pushedNotification = false;\n\nexport function GroundhogModal(props) {\n  const {showDontShowAgain = true, showRemindMeLater = true, cookieName, isOpen} = props;\n  const storage = getStorage();\n  const now = new Date();\n  const storageItem = `GHM-${cookieName}-${window.event_id}`;\n  const isHidden =\n    cookieName &&\n    ((storage &&\n      storage.getItem(storageItem) &&\n      new Date(parseInt(storage.getItem(storageItem), 10)) > now) ||\n      dismissedGroundHogs[cookieName]);\n\n  if (!isHidden && isOpen && !pushedNotification) {\n    window.dataLayer.push({event: 'ToastModal'});\n    pushedNotification = true;\n  }\n\n  const dismissModal = (duration) => {\n    if (duration && cookieName && storage) {\n      const date = new Date();\n      date.setTime(date.getTime() + duration * 24 * 60 * 60 * 1000);\n      storage.setItem(storageItem, `${date.getTime()}`);\n    }\n    if (cookieName) dismissedGroundHogs[cookieName] = true;\n    props.hideModal && props.hideModal();\n  };\n\n  return (\n    <Modal\n      isOpen={isOpen && !isHidden}\n      onClose={dismissModal}\n      onExited={props.onExited}\n      className=\"EviteModal__Content GroundhogModal\"\n      bodyOpenClassName=\"ReactModal__Body--open--allow-scroll\"\n    >\n      {props.children}\n      {(showDontShowAgain || showRemindMeLater) && (\n        <div className=\"GroundhogModal__controls\">\n          {showDontShowAgain && (\n            <button\n              data-qa-id={`ghm-dontshowagain${cookieName ? `-${cookieName}` : ''}`}\n              className=\"GroundhogModal__dontShowAgainButton\"\n              onClick={() => dismissModal(365)}\n            >\n              Don't show again\n            </button>\n          )}\n          {showRemindMeLater && (\n            <button\n              data-qa-id={`ghm-dismiss${cookieName ? `-${cookieName}` : ''}`}\n              className=\"GroundhogModal__remindMeLaterButton\"\n              onClick={() =>\n                dismissModal(\n                  evite.features.GHM_TIMEOUT ? parseFloat(evite.features.GHM_TIMEOUT) : 1\n                )\n              }\n            >\n              Remind me later\n            </button>\n          )}\n        </div>\n      )}\n    </Modal>\n  );\n}\n","import React from 'react';\nimport ReactModal from 'react-modal';\nimport './Modal.sass';\n\nconst defaultModalProps = {\n  isOpen: true,\n  className: 'EviteModal__Content',\n  overlayClassName: 'EviteModal__Overlay',\n  closeTimeoutMS: 200,\n};\n\nReactModal.setAppElement('#modalRoot');\n\nexport function Modal(props) {\n  if (!props.onClose) console.log('Missing required onClose prop for Modal');\n  const combinedProps = {\n    ...defaultModalProps,\n    ...props,\n  };\n  return <ReactModal {...combinedProps} />;\n}\n","import React, {useEffect} from 'react';\nimport PropTypes from 'prop-types';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\n\nexport function PollChoiceOverlay(props) {\n  useEffect(() => {\n    if (props.open) {\n      document.body.classList.add('no-scroll');\n    } else {\n      document.body.classList.remove('no-scroll');\n    }\n  }, [props.open]);\n\n  const generateGuestInitials = (guest) => {\n    if (guest?.guest_name.indexOf(' ') >= 0) {\n      return guest?.guest_name\n        .replace(/[^a-zA-Z ]/g, '')\n        .split(' ')\n        .map((word) => word[0])\n        .join('')\n        .slice(0, 2)\n        .toUpperCase();\n    }\n    return guest?.guest_name\n      .match(/[a-zA-Z]/)\n      .pop()\n      .toUpperCase();\n  };\n\n  return (\n    <>\n      <div\n        className={`view-invitation__overlay-bg ${props.open ? 'open' : ''}`}\n        onClick={props.onClose}\n      />\n      <div className={`view-invitation__poll-overlay ${props.open ? 'open' : ''}`}>\n        <div className=\"settings-overlay__heading\">\n          <Typography variant=\"label1\" data-qa-id=\"settings-header\">\n            {`${props.choice} (${props.guests.length})`}\n          </Typography>\n          <button\n            data-qa-id=\"close-poll-overlay\"\n            className=\"unstyled-button\"\n            onClick={props.onClose}\n          >\n            <PB_CloseLine />\n          </button>\n        </div>\n        <Divider />\n        <div className=\"settings-overlay__section\">\n          <div className=\"settings-overlay__poll-list\" data-qa-id=\"poll-overlay-list\">\n            {props.guests?.map((guest, i) => (\n              <div\n                key={guest?.guest_name + i}\n                className=\"settings-overlay__poll-list__guest\"\n                data-qa-id=\"settings-overlay__poll-list__guest\"\n              >\n                <div className=\"settings-overlay__poll-list__guest-initials\">\n                  {generateGuestInitials(guest)}\n                </div>\n                <Typography\n                  variant=\"paragraph2\"\n                  classname=\"settings-overlay__poll-list__guest-name\"\n                  data-qa-id=\"settings-overlay__poll-list__guest-name\"\n                >\n                  {guest?.guest_name || ''}\n                </Typography>\n              </div>\n            ))}\n          </div>\n        </div>\n      </div>\n    </>\n  );\n}\n\nPollChoiceOverlay.propTypes = {\n  open: PropTypes.bool,\n  onClose: PropTypes.func,\n  choice: PropTypes.string,\n};\n","let _ROKT_PRELOADED = false;\n\nexport const preloadROKT = () => {\n  // loads the rokt script and precache-iframe.\n  if (_ROKT_PRELOADED) return;\n  _ROKT_PRELOADED = true;\n\n  (function (r, o, k, t, n, e, w, a, _) {\n    r._ROKT_ = n;\n    r[n] = r[n] || {\n      id: t,\n      h: w,\n      lc: [],\n      it: new Date(),\n      onLoaded(c) {\n        r[n].lc.push(c);\n      },\n    };\n    a = o.createElement('script');\n    a.type = 'text/javascript';\n    a.async = !0;\n    a.src = k;\n    if (e) {\n      a.integrity = e;\n      a.crossOrigin = 'anonymous';\n    }\n    _ = o.getElementsByTagName('script')[0];\n    _.parentNode.insertBefore(a, _);\n  })(\n    window,\n    document,\n    'https://apps.rokt.com/wsdk/integrations/snippet.js',\n    '2835341786096105351_cd615db4e85f48379cb3eba27c24f750',\n    'rokt'\n  );\n  rokt.onLoaded((rokt) => {\n    rokt.init({skipInitialSelection: true});\n\n    rokt.onFailure((reason) => {\n      console.error('Rokt failed to load', reason);\n    });\n  });\n\n  const iframe = document.createElement('iframe');\n  iframe['aria-hidden'] = true;\n  iframe.src = 'https://apps.rokt.com/wsdk/preload/index.html';\n  iframe['allow-same-origin'] = true;\n  iframe.style = 'border: 0px; width: 100%; display: none;';\n  document.body.appendChild(iframe);\n};\n\nexport const triggerROKTOverlay = (pageIdentifier, attributes, clientData) => {\n  preloadROKT(); // Just in case... the preload should have been called before the trigger.\n  if (!window.rokt) {\n    console.error('Rokt library does not exist');\n    return;\n  }\n  window.rokt.onLoaded((rokt) => {\n    const cd = clientData || window.client_data;\n    rokt.setAttributes({\n      // Recommended\n      emailmd5: attributes.emailMd5,\n      emailsha256: attributes.emailSha256,\n      gender: cd.user_gender,\n      zipcode: cd.user_zip_code,\n      city: cd.geo_city, // user city, as opposed to event city\n      state: cd.geo_region,\n      country: cd.geo_country,\n      // Miscellaneous\n      conversiontype: cd.event_type,\n      clientcustomerid: attributes.userId,\n      eventid: cd.event_id,\n      eventcity: cd.event_city,\n      eventstate: cd.event_state,\n      eventzipcode: cd.event_zip,\n      eventdate: cd.event_day ? cd.event_day.replace(/-/g, '') : null,\n      distance: cd.event_guest_distance,\n      userstatus: cd.event_step, // H or G for host or guest\n      daysaway: cd.event_days_until,\n      sandbox: window.roktSandbox,\n    });\n    rokt.onPositiveEngagement(() => {\n      rokt.setAttributes({\n        email: attributes.email,\n      });\n    });\n    rokt.triggerPageChange({\n      pageIdentifier: (window.roktSandbox ? 'staging-' : '') + pageIdentifier,\n    });\n  });\n};\n\nexport const cleanupROKTOverlay = () => {\n  // Close any ROKT overlays\n  window.rokt &&\n    window.rokt.onLoaded((rokt) => {\n      rokt.closeAll();\n    });\n};\n","import {useState, useEffect} from 'react';\nimport {useSelector} from 'react-redux';\nimport {useHistory, useLocation} from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport {Counter} from '~/common/_pb_components/atoms/Counter';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_AlertLine} from '~/common/svg/PB_AlertLine';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {Input} from '~/common/_pb_components/atoms/Input';\nimport {Checkbox} from '~/common/_pb_components/atoms/Checkbox';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {toastAlert} from '~/common/_pb_components/atoms/Toast';\nimport {isSaveTheDateByUsedAs} from '~/common/utils/event_utils';\nimport {validateEmail} from '../utils/validateEmail';\nimport {largishAndUp} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function RSVPModal(props) {\n  const history = useHistory();\n  const location = useLocation();\n\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n  const {\n    notifications: notificationOptions,\n    isSMSInvite,\n    guestEmail,\n    showNotifyMarketing,\n    name,\n    rsvpdAdults,\n    rsvpdKids,\n    rsvpdOptin,\n    rsvpdOutout,\n    hasRsvpd,\n  } = useSelector((state) => ({\n    ...state.rsvp,\n    isSMSInvite: state.rsvp?.inviteMethod === 'sms',\n    guestEmail: state.rsvp?.guestEmail ?? '',\n    showNotifyMarketing: state.rsvp?.showNotifyMarketing ?? true,\n    name: state.rsvp?.name ?? state.user?.name ?? '',\n    rsvpdAdults: state.rsvp?.totalAdults ?? 0,\n    rsvpdKids: state.rsvp?.totalKids ?? 0,\n    rsvpdOptin: state.rsvp?.optin ?? false,\n    rsvpdOutout: state.rsvp?.optout ?? false,\n    hasRsvpd: state.rsvp?.hasRsvpd ?? false,\n  }));\n  const guest_id = useSelector((state) => state.user?.guestId ?? '');\n  const {allowKids, maxAdditionalGuests, allowGuestsToBringMoreGuests, allowGuestsToInviteMore} =\n    useSelector((state) => ({\n      allowKids: !!state.eventDetails.allowKids,\n      maxAdditionalGuests: state.eventDetails.maxGuests,\n      allowGuestsToBringMoreGuests: state.eventDetails?.allowGuests ?? false,\n      allowGuestsToInviteMore: state.eventDetails?.allowInviteMore ?? false,\n    }));\n  const allowGuestsToInvite = useSelector(\n    (state) => !!allowGuestsToInviteMore && !!maxAdditionalGuests && !state.rsvp.guestOf\n  );\n\n  const isPrivateGuestlist = useSelector(\n    (state) => state?.whoIsComing?.isPrivateGuestlist ?? false\n  );\n  const usedAs = useSelector((state) => state.eventDetails?.usedAs);\n  const isSaveTheDate = isSaveTheDateByUsedAs(usedAs);\n\n  const notificationsSubscribed =\n    !!notificationOptions.push_new_comments ||\n    !!notificationOptions.push_new_rsvp ||\n    !!notificationOptions.email_new_comments ||\n    !!notificationOptions.notify_only_my_activity;\n\n  const [replyAsName, setReplyAsName] = useState('');\n  const [replyAsEmail, setReplyAsEmail] = useState();\n  const [rsvpComment, setRsvpComment] = useState('');\n  const [eventNotifications, setEventNotifications] = useState(notificationsSubscribed);\n  const [marketingNotifications, setMarketingNotifications] = useState(true);\n  const [notifyGuestRSVPs, setNotifyGuestRSVPs] = useState(notificationOptions.email_new_rsvp);\n  const [editOn, setEditOn] = useState(false);\n  const [notYou, setNotYou] = useState(false);\n  const [forceRSVPForm, setForceRSVPForm] = useState(false);\n\n  const [numAdults, setNumAdults] = useState(1);\n  const [numKids, setNumKids] = useState(0);\n\n  const [rsvpDone, setRsvpDone] = useState(false);\n\n  useEffect(() => {\n    if (rsvpDone) {\n      history.replace(`/frp/rsvp?gid=${window.guest_id}`, location.state);\n    }\n  }, [rsvpDone]);\n\n  useEffect(() => {\n    const notificationsSubscribed =\n      !!notificationOptions.push_new_comments ||\n      !!notificationOptions.push_new_rsvp ||\n      !!notificationOptions.email_new_comments ||\n      !!notificationOptions.notify_only_my_activity;\n\n    setReplyAsName(name);\n    setReplyAsEmail(guestEmail);\n    if (!guestEmail || !name) setForceRSVPForm(true);\n\n    setNumAdults(rsvpdAdults);\n    setNumKids(rsvpdKids);\n    setEventNotifications(!hasRsvpd ? true : notificationsSubscribed);\n    setMarketingNotifications(rsvpdOptin || !rsvpdOutout);\n    setNotifyGuestRSVPs(notificationOptions.email_new_rsvp);\n  }, [name, guestEmail, rsvpdAdults, rsvpdKids, rsvpdOptin, rsvpdOutout, notificationOptions]);\n\n  const onNotYouPress = () => {\n    setReplyAsName('');\n    setReplyAsEmail('');\n    setNotYou(true);\n  };\n\n  const onChangeReplyAsCancel = () => {\n    setEditOn(false);\n    setNotYou(false);\n    setReplyAsName(name);\n    setReplyAsEmail(guestEmail);\n  };\n\n  const onEditPress = () => {\n    setEditOn(true);\n  };\n\n  const onSubmit = () =>\n    new Promise((resolve, reject) => {\n      let email = replyAsEmail?.trim() || guestEmail;\n      if (!props.status) {\n        // Somehow the modal has been opened without an RSVP status; do not submit RSVP\n        toastAlert('No RSVP status chosen', {\n          type: 'error',\n          icon: <PB_AlertLine size={0.75} />,\n        });\n        reject('No RSVP status chosen');\n        return;\n      }\n      if (notYou || forceRSVPForm) {\n        const res = validateEmail(replyAsEmail);\n        if (!res.valid) {\n          toastAlert(res.message, {\n            type: 'error',\n            icon: <PB_AlertLine size={0.75} />,\n          });\n          reject(res.message);\n          return;\n        }\n        email = res.value;\n      } else if (numAdults + numKids > maxAdditionalGuests) {\n        toastAlert(\n          `The host has set the limit to ${maxAdditionalGuests} guests (including yourself)`,\n          {\n            type: 'error',\n            icon: <PB_AlertLine size={0.75} />,\n          }\n        );\n        reject('No RSVP status chosen');\n        return;\n      }\n      let payload = {\n        name: replyAsName.trim(),\n        email,\n        response: props.status.toLowerCase(),\n        adults_in_party: numAdults,\n        kids_in_party: numKids,\n        comments: rsvpComment,\n        optin: marketingNotifications,\n      };\n      // Update notification\n      if (eventNotifications !== notificationsSubscribed) {\n        payload = {\n          ...payload,\n          notification_options: {\n            email_new_comments: eventNotifications,\n            email_new_rsvp: !!notifyGuestRSVPs,\n            push_new_comments: eventNotifications,\n            push_new_rsvp: !hasRsvpd\n              ? eventNotifications\n              : eventNotifications && notificationOptions.push_new_rsvp,\n            notify_only_my_activity: eventNotifications,\n            notify_only_my_activity_push: eventNotifications,\n            notify_game: {},\n          },\n        };\n      } else {\n        payload = {\n          ...payload,\n          notification_options: {\n            email_new_comments: !!notificationOptions.email_new_comments,\n            email_new_rsvp: !!notifyGuestRSVPs,\n            push_new_comments: !!notificationOptions.push_new_comments,\n            push_new_rsvp: !!notificationOptions.push_new_rsvp,\n            notify_only_my_activity: !!notificationOptions.notify_only_my_activity,\n            notify_only_my_activity_push: !!notificationOptions.notify_only_my_activity_push,\n            notify_game: {},\n          },\n        };\n      }\n      if (guest_id && (!replyAsEmail || guestEmail === replyAsEmail?.trim() || isSMSInvite)) {\n        payload = {...payload, guest_id};\n      }\n      props\n        .onSubmitRSVP(guest_id, payload)\n        .then(() => {\n          setEditOn(false);\n          setNotYou(false);\n          setRsvpDone(true);\n          resolve();\n        })\n        .catch(reject);\n    });\n\n  return (\n    <div className={`view-invitation__rsvp-modal ${props.open ? 'open' : ''}`}>\n      {largeScreens && (\n        <>\n          <div className=\"rsvp-modal__large-title\">\n            <Typography variant=\"label1\">RSVP</Typography>\n            <button\n              className=\"unstyled-button\"\n              onClick={props.onClose}\n              data-qa-id=\"rsvp-modal-close\"\n            >\n              <PB_CloseLine ratio={1} />\n            </button>\n          </div>\n          <Divider marginTop=\"1.5rem\" marginBottom=\"1.5rem\" />\n        </>\n      )}\n      <div className={`rsvp-modal__heading ${props.status || ''}`}>\n        <Typography\n          variant=\"header3\"\n          data-qa-id=\"rsvp-modal-header\"\n          classNames={`rsvp-modal__header-text ${props.status?.toLowerCase() || ''}`}\n        >\n          {\n            props.status === 'Yes'\n              ? 'You will be attending!'\n              : props.status === 'No'\n                ? 'You are not attending'\n                : 'You are RSVPing Maybe' // TODO: Theme 'Maybe' according to chosen theme\n          }\n        </Typography>\n        {!largeScreens && (\n          <button className=\"unstyled-button\" onClick={props.onClose} data-qa-id=\"rsvp-modal-close\">\n            <PB_CloseLine ratio={0.75} />\n          </button>\n        )}\n      </div>\n      <div className=\"rsvp-modal__body\">\n        <div\n          className={`rsvp-modal__reply-as-wrapper ${\n            editOn || notYou || forceRSVPForm ? 'edit-on' : ''\n          }`}\n        >\n          {editOn || notYou || forceRSVPForm ? (\n            <>\n              <Input\n                data-qa-id=\"replyas-name\"\n                value={replyAsName}\n                onChange={(e) => setReplyAsName(e.target.value)}\n                placeholder=\"RSVP name\"\n              />\n              {(notYou || forceRSVPForm) && (\n                <Input\n                  data-qa-id=\"replyas-email\"\n                  value={replyAsEmail}\n                  onChange={(e) => setReplyAsEmail(e.target.value)}\n                  placeholder=\"Email address\"\n                />\n              )}\n            </>\n          ) : (\n            <p className={`rsvp-modal__reply-as-text ${largeScreens ? 'large-screens' : ''}`}>\n              Replying as:{' '}\n              <span className=\"rsvp-modal__reply-as-name\" data-qa-id=\"replyas-saved-name\">\n                {replyAsName}\n              </span>\n            </p>\n          )}\n          {!forceRSVPForm && (\n            <div className=\"rsvp-modal__reply-as-ctas\">\n              {editOn || notYou ? (\n                <button\n                  className=\"unstyled-button link small\"\n                  data-qa-id=\"cancel-edit-replyas\"\n                  onClick={onChangeReplyAsCancel}\n                >\n                  Cancel\n                </button>\n              ) : (\n                <>\n                  <button\n                    className=\"unstyled-button link small\"\n                    data-qa-id=\"rsvp-edit-replyas\"\n                    onClick={onEditPress}\n                  >\n                    Edit\n                  </button>\n                  {allowGuestsToInvite && (\n                    <>\n                      <span>|</span>\n                      <button\n                        className=\"unstyled-button link small\"\n                        data-qa-id=\"rsvp-not-you\"\n                        onClick={onNotYouPress}\n                      >\n                        Not you?\n                      </button>\n                    </>\n                  )}\n                </>\n              )}\n            </div>\n          )}\n        </div>\n        {!largeScreens && <Divider />}\n        <div className=\"rsvp-modal__rsvp-details-wrapper\">\n          {props.status !== 'No' && allowGuestsToBringMoreGuests && (\n            <div className=\"rsvp-modal__rsvp-counters\">\n              <Counter\n                title={allowKids ? 'Adults' : 'Guests'}\n                count={numAdults}\n                onPlus={() => setNumAdults(numAdults + 1)}\n                onMinus={() => {\n                  if (numAdults > 0) setNumAdults(numAdults - 1);\n                }}\n                data-qa-id=\"adults-count\"\n              />\n              {allowKids && (\n                <Counter\n                  title=\"Kids\"\n                  count={numKids}\n                  onPlus={() => setNumKids(numKids + 1)}\n                  onMinus={() => {\n                    if (numKids > 0) setNumKids(numKids - 1);\n                  }}\n                  data-qa-id=\"kids-count\"\n                />\n              )}\n            </div>\n          )}\n          <Input\n            data-qa-id=\"rsvp-comment\"\n            value={rsvpComment}\n            onChange={(e) => setRsvpComment(e.target.value)}\n            placeholder=\"Add a comment...\"\n          />\n        </div>\n        <Divider />\n        <div className=\"rsvp-modal__notification-manager\">\n          <Checkbox\n            onChange={() => setEventNotifications(!eventNotifications)}\n            data-qa-id=\"receive-event-notifications\"\n            checked={eventNotifications}\n            label=\"Yes, I’d like to receive event notifications\"\n          />\n          {showNotifyMarketing && (\n            <Checkbox\n              onChange={() => setMarketingNotifications(!marketingNotifications)}\n              data-qa-id=\"receive-marketing-notifications\"\n              checked={marketingNotifications}\n              label=\"Yes, I'd like to receive party planning tips, gift ideas, special partner offers, and more\"\n            />\n          )}\n          {!isPrivateGuestlist && !isSaveTheDate && (\n            <Checkbox\n              onChange={() => setNotifyGuestRSVPs(!notifyGuestRSVPs)}\n              data-qa-id=\"notify-guest-rsvps\"\n              checked={notifyGuestRSVPs}\n              label=\"Yes, I’d like to be notified when other guests RSVP\"\n            />\n          )}\n        </div>\n        <Button\n          data-qa-id=\"submit-rsvp\"\n          variant=\"primary\"\n          size=\"large\"\n          processingChildren=\"Submitting...\"\n          onClick={onSubmit}\n          data-impression-tracking=\"true\"\n        >\n          Submit RSVP\n        </Button>\n      </div>\n    </div>\n  );\n}\n\nRSVPModal.propTypes = {\n  status: PropTypes.oneOf(['Yes', 'Maybe', 'No']),\n  onClose: PropTypes.func,\n  onSubmitRSVP: PropTypes.func,\n  open: PropTypes.bool,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {registryUrl} from '~/common/utils';\n\nexport function RegistryVendor(props) {\n  const iconUrl = props.registry.iconUrl || props.registry.icon_url;\n  const vendorName = props.registry.vendorName || props.registry.vendor_name;\n  const {name} = props.registry;\n\n  return (\n    <a\n      href={registryUrl(props.registry, props.dataQaId)}\n      className=\"view-invitation__registry-vendor\"\n      target=\"_blank\"\n      data-qa-id={props.dataQaId}\n      data-impression-tracking=\"true\"\n      rel=\"noreferrer\"\n    >\n      <img src={iconUrl} alt={vendorName} />\n      <div className=\"view-invitation__registry-vendor__cta\">\n        <p className=\"view-invitation__registry-vendor__cta-text\">\n          View the {name} {!name.includes('Registry') && 'Registry'}\n        </p>\n      </div>\n    </a>\n  );\n}\n\nRegistryVendor.propTypes = {\n  registry: PropTypes.object.isRequired,\n  displayText: PropTypes.string.isRequired,\n  dataQaId: PropTypes.string.isRequired,\n};\n","import React, {useEffect} from 'react';\n\nconst _savedPositions = {};\n\nexport function RestoreScrollPosition(props) {\n  const {path, doneLoading} = props;\n  if (!path) {\n    console.log('UseRestoreScrollPosition requires a path');\n    return;\n  }\n  const [x, y] = _savedPositions[path] || [0, 0];\n\n  const handleScrollPosition = () => {\n    if (window.location.pathname.toString().startsWith(path)) {\n      _savedPositions[path] = [window.scrollX, window.scrollY];\n    } else {\n      delete _savedPositions[path];\n    }\n  };\n\n  useEffect(() => {\n    window.scrollTo(x, y);\n    return () => {\n      handleScrollPosition();\n    };\n  }, [doneLoading]);\n\n  return null;\n}\n","import React, {useEffect} from 'react';\nimport {useLocation} from 'react-router-dom';\n\nexport function ScrollToTopOnMount() {\n  const location = useLocation();\n\n  useEffect(() => {\n    if (!location.hash) window.scrollTo(0, 0);\n  }, []);\n\n  return null;\n}\n","import {useState, useEffect} from 'react';\nimport {useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Checkbox} from '~/common/_pb_components/atoms/Checkbox';\nimport {Select} from '~/common/_pb_components/atoms/Select';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\nimport {isSaveTheDateByUsedAs} from '~/common/utils/event_utils';\n\nexport const EVENT_REMINDER_CHOICES = [\n  ['-1', 'No Reminders'],\n  ['-86400', '1 Day'],\n  ['-172800', '2 Days'],\n  ['-259200', '3 Days'],\n  ['-345600', '4 Days'],\n  ['-432000', '5 Days'],\n  ['-518400', '6 Days'],\n  ['-604800', '7 Days'],\n  ['-691200', '8 Days'],\n  ['-777600', '9 Days'],\n  ['-864000', '10 Days'],\n  ['-1209600', '2 Weeks'],\n  ['-1814400', '3 Weeks'],\n  ['-2592000', '1 Month'],\n];\n\nexport function SettingsOverlay(props) {\n  const [notifyActivityInvolvingMe, setNotifyActivityInvolvingMe] = useState(false);\n  const [notifyEventActivities, setNotifyEventActivities] = useState(false);\n  const [notifyGuestRSVPs, setNotifyGuestRSVPs] = useState(false);\n  const [showAddAnotherReminder, setShowAddAnotherReminder] = useState(false);\n  const [enableAnotherReminder, setEnableAnotherReminder] = useState(true);\n\n  const [reminder1, setReminder1] = useState({\n    label: EVENT_REMINDER_CHOICES[0][1],\n    value: EVENT_REMINDER_CHOICES[0][0],\n  });\n  const [reminder2, setReminder2] = useState({\n    label: EVENT_REMINDER_CHOICES[0][1],\n    value: EVENT_REMINDER_CHOICES[0][0],\n  });\n\n  const hasRsvpd = useSelector((store) => store.rsvp?.hasRsvpd);\n  const usedAs = useSelector((state) => state?.eventDetails?.usedAs);\n  const isPrivateGuestlist = useSelector(\n    (state) => state?.whoIsComing?.isPrivateGuestlist ?? false\n  );\n  const remindersDisabled = useSelector(\n    (store) => store?.eviteEvent?.options?.event_option_disable_event_reminders\n  );\n  const isSaveTheDate = isSaveTheDateByUsedAs(usedAs);\n\n  useEffect(() => {\n    setNotifyActivityInvolvingMe(!!props.notificationDefaults.activityInvolvingMe);\n    setNotifyEventActivities(!!props.notificationDefaults.eventActivities);\n    setNotifyGuestRSVPs(!!props.notificationDefaults.guestRSVPs);\n    setShowAddAnotherReminder(props.reminders.length < 2);\n\n    setReminder1({\n      label: EVENT_REMINDER_CHOICES[0][1],\n      value: EVENT_REMINDER_CHOICES[0][0],\n    });\n    setReminder2(undefined);\n    if (remindersDisabled) {\n      setReminder1({\n        label: EVENT_REMINDER_CHOICES[0][1],\n        value: EVENT_REMINDER_CHOICES[0][0],\n      });\n      setReminder2(undefined);\n      setEnableAnotherReminder(false);\n    } else if (props.reminders.length > 0) {\n      let reminder = EVENT_REMINDER_CHOICES.find((c) => c[0] === props.reminders[0].toString());\n      if (reminder) {\n        setReminder1({\n          label: reminder[1],\n          value: reminder[0],\n        });\n      }\n      if (props.reminders.length > 1) {\n        reminder = EVENT_REMINDER_CHOICES.find((c) => c[0] === props.reminders[1].toString());\n        if (reminder) {\n          setReminder2({\n            label: reminder[1],\n            value: reminder[0],\n          });\n        }\n      }\n    } else {\n      setEnableAnotherReminder(false);\n    }\n  }, [props.notificationDefaults, props.reminders]);\n\n  useEffect(() => {\n    if (props.open) {\n      document.body.classList.add('no-scroll');\n    } else {\n      document.body.classList.remove('no-scroll');\n    }\n  }, [props.open]);\n\n  const filterForUpcomingTimes = (c) =>\n    props.eventDate + parseInt(c[0], 10) * 1000 >= new Date().getTime();\n\n  return (\n    <>\n      <div\n        className={`view-invitation__overlay-bg ${props.open ? 'open' : ''}`}\n        onClick={props.onClose}\n      />\n      <div className={`view-invitation__settings-overlay ${props.open ? 'open' : ''}`}>\n        <div className=\"settings-overlay__heading\">\n          <Typography variant=\"label1\" data-qa-id=\"settings-header\">\n            Settings\n          </Typography>\n          <button\n            data-qa-id=\"close-settings-overlay\"\n            className=\"unstyled-button\"\n            onClick={props.onClose}\n          >\n            <PB_CloseLine />\n          </button>\n        </div>\n        <Divider />\n        <div className=\"settings-overlay__section\">\n          <div className=\"settings-overlay__section-heading\">\n            <Typography\n              variant=\"label2\"\n              classNames=\"small\"\n              color=\"pebble\"\n              data-qa-id=\"notification-settings\"\n            >\n              Notifications\n            </Typography>\n            <Typography variant=\"paragraph2\">\n              Choose your notifications preferences for this event:\n            </Typography>\n          </div>\n          <div className=\"settings-overlay__notification-checkboxes\">\n            <Checkbox\n              onChange={() => {\n                if (notifyActivityInvolvingMe) {\n                  setNotifyEventActivities(false);\n                }\n                setNotifyActivityInvolvingMe(!notifyActivityInvolvingMe);\n              }}\n              data-qa-id=\"notify-activity-involving-me\"\n              checked={notifyActivityInvolvingMe}\n              label=\"Notify me of activity that involves me\"\n              disabled={!hasRsvpd || notifyEventActivities}\n            />\n            <Checkbox\n              onChange={() => {\n                if (!notifyEventActivities) {\n                  setNotifyActivityInvolvingMe(true);\n                }\n                setNotifyEventActivities(!notifyEventActivities);\n              }}\n              data-qa-id=\"notify-event-activities\"\n              checked={notifyEventActivities}\n              label=\"Notify me of event activities\"\n              disabled={!hasRsvpd}\n            />\n            {(props.isHost || !isPrivateGuestlist) && !isSaveTheDate && (\n              <Checkbox\n                onChange={() => setNotifyGuestRSVPs(!notifyGuestRSVPs)}\n                data-qa-id=\"notify-guest-rsvps\"\n                checked={notifyGuestRSVPs}\n                label=\"Notify me when guests RSVP\"\n                disabled={!hasRsvpd}\n              />\n            )}\n          </div>\n        </div>\n        {props.isHost && (\n          <div className=\"settings-overlay__section\">\n            <div className=\"settings-overlay__section-heading\">\n              <Typography\n                variant=\"label2\"\n                classNames=\"small\"\n                color=\"pebble\"\n                data-qa-id=\"reminder-settings\"\n              >\n                Reminders\n              </Typography>\n              <Typography variant=\"paragraph2\">\n                Schedule up to 2 event reminders to my guests.\n              </Typography>\n            </div>\n            <div className=\"settings-overlay__reminder-section\">\n              <Typography variant=\"label2\" classNames=\"small\" color=\"shadow\">\n                Send Reminders Before My Event\n              </Typography>\n              <div className=\"settings-overlay__reminders\">\n                <Select\n                  options={EVENT_REMINDER_CHOICES.filter((c) => c[0] !== reminder2?.value)\n                    .filter(filterForUpcomingTimes)\n                    .map((c) => ({label: c[1], value: c[0]}))}\n                  data-qa-id=\"send-reminder-day-1\"\n                  value={reminder1}\n                  onChange={(v) => {\n                    const option = EVENT_REMINDER_CHOICES.find((o) => o[0] === v);\n                    setReminder1({\n                      value: option[0],\n                      label: option[1],\n                    });\n                    if (option[0] === EVENT_REMINDER_CHOICES[0][0]) {\n                      setEnableAnotherReminder(false);\n                      setShowAddAnotherReminder(false);\n                      setReminder2(undefined);\n                    } else if (reminder2 === undefined) {\n                      setEnableAnotherReminder(true);\n                      setShowAddAnotherReminder(true);\n                    } else {\n                      setEnableAnotherReminder(true);\n                      setShowAddAnotherReminder(false);\n                    }\n                  }}\n                />\n                {enableAnotherReminder && showAddAnotherReminder && (\n                  <button\n                    data-qa-id=\"add-reminder\"\n                    className=\"unstyled-button link small settings-overlay__add-reminder-button\"\n                    onClick={() => {\n                      setReminder2(\n                        EVENT_REMINDER_CHOICES.slice(1)\n                          .filter((c) => c[0] !== reminder1?.value)\n                          .filter(filterForUpcomingTimes)\n                          .map((c) => ({label: c[1], value: c[0]}))[0]\n                      );\n                      setShowAddAnotherReminder(false);\n                    }}\n                  >\n                    Add another reminder\n                  </button>\n                )}\n                {enableAnotherReminder && !showAddAnotherReminder && (\n                  <>\n                    <Select\n                      options={EVENT_REMINDER_CHOICES.slice(1)\n                        .filter((c) => c[0] !== reminder1?.value)\n                        .filter(filterForUpcomingTimes)\n                        .map((c) => ({label: c[1], value: c[0]}))}\n                      data-qa-id=\"send-reminder-day-2\"\n                      value={reminder2}\n                      onChange={(v) => {\n                        const option = EVENT_REMINDER_CHOICES.slice(1).find((o) => o[0] === v);\n                        setReminder2({\n                          value: option[0],\n                          label: option[1],\n                        });\n                      }}\n                    />\n                    <button\n                      data-qa-id=\"remove-reminder\"\n                      className=\"unstyled-button link small settings-overlay__add-reminder-button\"\n                      onClick={() => {\n                        setShowAddAnotherReminder(true);\n                        setReminder2(undefined);\n                      }}\n                    >\n                      Remove second reminder\n                    </button>\n                  </>\n                )}\n              </div>\n            </div>\n          </div>\n        )}\n        <div>\n          <style>\n            {/* TODO: remove when fullWidth is fixed */}\n            {`.button__full-width {\n              max-width: 100% !important;\n            }`}\n          </style>\n          <Button\n            data-qa-id=\"save-notification-settings\"\n            variant=\"primary\"\n            fullWidth\n            size=\"large\"\n            processingChildren=\"Saving...\"\n            className=\"button__full-width\"\n            onClick={() =>\n              props.onSave(\n                {\n                  activityInvolvingMe: notifyActivityInvolvingMe,\n                  eventActivities: notifyEventActivities,\n                  // Only allow guest RSVP notifications if user is host or if guest list is not private\n                  // If not host AND guest list is private, force to false\n                  guestRSVPs: props.isHost || !isPrivateGuestlist ? notifyGuestRSVPs : false,\n                },\n                [\n                  reminder1?.value ? parseInt(reminder1.value, 10) : null,\n                  reminder2?.value ? parseInt(reminder2.value, 10) : null,\n                ]\n              )\n            }\n            data-impression-tracking=\"true\"\n          >\n            Save\n          </Button>\n        </div>\n      </div>\n    </>\n  );\n}\n\nSettingsOverlay.propTypes = {\n  notificationDefaults: PropTypes.shape({\n    activityInvolvingMe: PropTypes.bool,\n    eventActivities: PropTypes.bool,\n    guestRSVPs: PropTypes.bool,\n  }).isRequired,\n  isHost: PropTypes.bool.isRequired,\n  reminders: PropTypes.arrayOf(PropTypes.number).isRequired,\n  open: PropTypes.bool,\n  onClose: PropTypes.func,\n  onSave: PropTypes.func,\n  eventDate: PropTypes.number.isRequired,\n};\n","import {useState, useEffect, useRef} from 'react';\nimport {useSelector, useStore} from 'react-redux';\nimport {useLocation} from 'react-router-dom';\nimport urls from 'urls';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {getUserData} from '~/common/auth/utils';\nimport {getUsedAsTypeName, isCanceled} from '~/common/utils/event_utils';\nimport {toastAlert} from '~/common/_pb_components/atoms/Toast';\nimport {Link} from '~/common/_pb_components/atoms/Link';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_AlertLine} from '~/common/svg/PB_AlertLine';\nimport {PB_CheckmarkCircle} from '~/common/svg/PB_CheckmarkCircle';\nimport {PB_CloseCircle} from '~/common/svg/PB_CloseCircle';\nimport {PB_QuestionCircle} from '~/common/svg/PB_QuestionCircle';\nimport {GuestRsvpActions} from './GuestRsvpActions';\nimport {submitRSVP} from '../reducers/apiActions';\nimport {selectEventHasPassed} from '../reducers/eventDetails';\nimport {MoreDetailsIndicator} from '../routes/Landing/MoreDetailsIndicator';\nimport {Swirl} from './Swirl';\nimport {RSVPModal} from './RSVPModal';\nimport {GuestReaction} from '~/GuestReaction/GuestReaction';\nimport {\n  largishAndUp,\n  emerald,\n  feedbackNo,\n  feedbackMaybe,\n} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function StickyEditEvent({forceShow}) {\n  const location = useLocation();\n  const store = useStore();\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n\n  const hostIds = window.evite_event.host_ids || [];\n  const pendingHostIds = window.evite_event.pending_host_ids || [];\n  const isCohost = hostIds.includes(window.user_id) && !pendingHostIds.includes(window.user_id);\n  const isHostOrCohost = window.user_id === window.evite_event.host_id || isCohost;\n\n  const rsvpOff = useSelector((state) => state.eventDetails.rsvpOff);\n  const {isWebview} = window;\n\n  const params = new URLSearchParams(location.search);\n  const gid = params.get('gid');\n\n  const event_id = useSelector((state) => state.eventDetails?.eventId ?? null);\n  const userData = getUserData(isWebview);\n  const {name, email} = useSelector((state) => state.user);\n  const guest_id = userData.guest_id || userData.guestId || gid || window.guest_id;\n\n  if (!userData.userName) userData.userName = name;\n  if (!userData.email) userData.email = email;\n  const hasGuestReacted = window.evite_event?.rsvp?.comments;\n\n  const [hideGuestReactions, setHideGuestReactions] = useState(false);\n\n  const isPremium = useSelector(\n    (state) => state.eventDetails?.isPremium || state.eviteEvent.isPremium\n  );\n  const origin = useSelector((state) => state.eventDetails?.origin || state.eviteEvent.origin);\n  const eventStatus = useSelector((state) => state.eventDetails?.status || state.eviteEvent.status);\n  const usedAs = useSelector((state) => state.eventDetails?.usedAs || state.eviteEvent?.used_as);\n  const rsvpResponse = useSelector((state) => state.rsvp?.rsvpResponse);\n  const hasRsvpd = useSelector((state) => state.rsvp?.hasRsvpd);\n  const ctaWordings = getUsedAsTypeName(usedAs);\n  const loadedDefaultRsvp = useRef(false);\n\n  const [updatingRsvp, setUpdatingRsvp] = useState(false);\n  const [showSwirl, setShowSwirl] = useState(false);\n  const [wipRsvpStatus, setWipRsvpStatus] = useState();\n  const urlParams = new URLSearchParams(window.location.search);\n  const showRsvpOverlayOnLoad = urlParams.get('rsvp') === '1';\n  const [rsvpOverlayOpen, setRsvpOverlayOpen] = useState(showRsvpOverlayOnLoad);\n\n  const eventHasPassed = useSelector(selectEventHasPassed);\n  const eventIsCanceled = isCanceled(eventStatus);\n  const [hideMore, setHideMore] = useState(false);\n\n  const [atTop, setAtTop] = useState(true);\n  const toggleShowRSVP = () => {\n    setAtTop(window.scrollY === 0);\n    setHideMore(window.scrollY > 100);\n  };\n  const onHideSwirl = () => {\n    setShowSwirl(false);\n  };\n\n  useEffect(() => {\n    document.addEventListener('scroll', toggleShowRSVP);\n\n    if (window.location.href.includes('/messages')) {\n      setHideGuestReactions(true);\n    }\n\n    return () => {\n      document.removeEventListener('scroll', toggleShowRSVP);\n    };\n  }, []);\n\n  const rsvpDrawer = useRef(null);\n\n  useEffect(() => {\n    const footer = document.getElementById('footer');\n    if (largeScreens) {\n      footer.style.paddingBottom = '5rem';\n    } else {\n      footer.style.paddingBottom = '11rem';\n    }\n  }, [largeScreens]);\n\n  useEffect(() => {\n    if (!loadedDefaultRsvp.current) {\n      const params = new URLSearchParams(location.search);\n      const status = params.get('rsvp_response');\n      if (status) {\n        setWipRsvpStatus(`${status[0].toUpperCase()}${status.substring(1)}`);\n        setRsvpOverlayOpen(true);\n      }\n    }\n  }, [location]);\n\n  const responseMap = {\n    yes: \"Yes, you're going\",\n    maybe: \"You RSVP'd Maybe\",\n    no: \"You RSVP'd No\",\n  };\n\n  const onSubmitRSVP = (guest_id, payload) =>\n    new Promise((resolve, reject) => {\n      if (!payload.name) {\n        toastAlert('Name is required', {\n          type: 'error',\n          icon: <PB_AlertLine size={0.75} />,\n        });\n        reject();\n      } else if (!payload.email) {\n        toastAlert('Email address is required', {\n          type: 'error',\n          icon: <PB_AlertLine size={0.75} />,\n        });\n        reject();\n      } else {\n        store.dispatch(\n          submitRSVP({\n            event_id,\n            guest_id,\n            payload,\n            successCallback: () => {\n              setRsvpOverlayOpen(false);\n              resolve();\n            },\n            failureCallback: (dispatch, getState, {results}) => {\n              const message = results?.message;\n              console.error(message);\n              if (message) {\n                toastAlert(message, {\n                  type: 'warning',\n                  icon: <PB_AlertLine size={0.75} />,\n                });\n              }\n              reject();\n            },\n          })\n        );\n      }\n    });\n\n  const showReaction =\n    !hideGuestReactions && rsvpOff && isWebview === undefined && !hasGuestReacted && !hasRsvpd;\n  const showStickyBar = showReaction || isHostOrCohost || (!isHostOrCohost && !rsvpOff);\n\n  return (\n    <>\n      <div className={`view-invitation__sticky-wrapper ${!atTop || forceShow ? 'open' : ''}`}>\n        {largeScreens && (\n          <div className={`more-details--sticky-bar${hideMore ? ' hide' : ''}`}>\n            <MoreDetailsIndicator preview={false} />\n          </div>\n        )}\n        {showSwirl && <Swirl text=\"RSVP\" onClick={onHideSwirl} qaId=\"floating-action-rsvp\" />}\n        {showStickyBar && !showSwirl && (\n          <div\n            className={`view-invitation__sticky-ctas\n                        ${!atTop || forceShow ? 'open' : ''}\n                        ${!rsvpOff && (!hasRsvpd || updatingRsvp) ? 'show-rsvp-ctas' : ''}`}\n            id=\"viewInvitationCTAWrapper\"\n            ref={rsvpDrawer}\n          >\n            {!isHostOrCohost && (\n              <>\n                {showReaction ? (\n                  <GuestReaction\n                    rsvpDrawer={rsvpDrawer}\n                    eventId={event_id}\n                    guestId={guest_id}\n                    eviteType=\"event\"\n                  />\n                ) : (\n                  <div className=\"view-invitation__rsvp-wrapper\">\n                    {eventHasPassed ? (\n                      <Typography variant=\"paragraph3\" data-qa-id=\"event-already-occurred\">\n                        This event has already occurred.\n                      </Typography>\n                    ) : eventIsCanceled ? (\n                      <Typography variant=\"paragraph3\" data-qa-id=\"event-canceled\">\n                        This event has been canceled.\n                      </Typography>\n                    ) : !showSwirl && (!hasRsvpd || updatingRsvp) ? (\n                      <GuestRsvpActions\n                        hasRsvpd={hasRsvpd}\n                        updatingRsvp={updatingRsvp}\n                        setUpdatingRsvp={setUpdatingRsvp}\n                        setShowSwirl={setShowSwirl}\n                        setWipRsvpStatus={setWipRsvpStatus}\n                        setRsvpOverlayOpen={setRsvpOverlayOpen}\n                        isPremium={isPremium}\n                        origin={origin}\n                      />\n                    ) : (\n                      !showSwirl && (\n                        <div\n                          className=\"view-invitation__rsvp-details\"\n                          style={{\n                            marginBottom:\n                              !isHostOrCohost && hasRsvpd && !updatingRsvp && !largeScreens\n                                ? '1rem'\n                                : undefined,\n                          }}\n                        >\n                          <div\n                            className=\"view-invitation__rsvp-status-wrapper\"\n                            data-qa-value={rsvpResponse}\n                          >\n                            {rsvpResponse === 'yes' ? (\n                              <PB_CheckmarkCircle ratio={0.75} color={emerald} />\n                            ) : rsvpResponse === 'no' ? (\n                              <PB_CloseCircle ratio={0.75} color={feedbackNo} />\n                            ) : (\n                              rsvpResponse === 'maybe' && (\n                                <PB_QuestionCircle ratio={0.75} color={feedbackMaybe} />\n                              )\n                            )}\n                            <Typography\n                              variant=\"paragraph2\"\n                              classNames=\"view-invitation__rsvp-status\"\n                            >\n                              {responseMap[rsvpResponse]}\n                            </Typography>\n                          </div>\n                          <button\n                            className=\"unstyled-button link\"\n                            data-qa-id=\"invitation-change-rsvp\"\n                            onClick={() => setUpdatingRsvp(true)}\n                          >\n                            Change RSVP\n                          </button>\n                        </div>\n                      )\n                    )}\n                  </div>\n                )}\n              </>\n            )}\n            {isHostOrCohost && !updatingRsvp && (\n              <Link\n                variant=\"large\"\n                as=\"primary\"\n                fullWidth\n                data-qa-id=\"invitation-manage\"\n                href={urls.get('event_dashboard', {event_id})}\n                className=\"view-invitation__manage-invitation-link\"\n              >\n                Manage {ctaWordings}\n              </Link>\n            )}\n          </div>\n        )}\n      </div>\n      {rsvpOverlayOpen && <div className=\"active-overlay-bg\" />}\n      <RSVPModal\n        status={wipRsvpStatus}\n        onClose={() => setRsvpOverlayOpen(false)}\n        open={rsvpOverlayOpen}\n        onSubmitRSVP={onSubmitRSVP}\n      />\n    </>\n  );\n}\n","import {useState, useEffect} from 'react';\nimport {useLocation} from 'react-router-dom';\nimport {useSelector} from 'react-redux';\nimport {selectEventHasRsvp} from '../reducers/eventDetails';\nimport {InvitationLink} from './InvitationLink';\n\nrequire('intersection-observer');\n\nexport function StickyRSVP() {\n  const [inverted, setInverted] = useState(false);\n  const intersectionCallback = (entries) => {\n    const [entry] = entries;\n    setInverted(entry.isIntersecting);\n  };\n\n  const intersectionOptions = {\n    root: null,\n    rootMargin: '-50px',\n    threshold: 0,\n  };\n\n  useEffect(() => {\n    const footer = document.getElementById('footer');\n    if (footer) {\n      const observer = new IntersectionObserver(intersectionCallback, intersectionOptions);\n      observer.observe(footer);\n      return () => {\n        observer.unobserve(footer);\n      };\n    }\n  }, []);\n\n  const isHost = useSelector((state) => state.user?.isHost ?? false);\n\n  const eventHasRsvp = useSelector(selectEventHasRsvp);\n  const hasRsvpd = useSelector((state) => state.rsvp?.hasRsvpd);\n  const location = useLocation();\n  if (isHost || !eventHasRsvp || hasRsvpd) return null;\n  if (location.pathname.indexOf('/rsvp') === 0 || location.pathname.indexOf('/donate') === 0) {\n    return null;\n  }\n  let extraClasses = '';\n  if (location.pathname.indexOf('/messages/') === 0)\n    extraClasses += ' sticky-button__extra-margin-for-text-entry';\n  return (\n    <InvitationLink to=\"/rsvp\">\n      <button\n        id=\"id_sticky_rsvp_button\"\n        data-qa-id=\"sticky-rsvp-button\"\n        className={`primary-button large sticky-button ${\n          inverted ? 'sticky-button__inverted' : ''\n        }${extraClasses}`}\n      >\n        RSVP\n      </button>\n    </InvitationLink>\n  );\n}\n\nexport const animateRSVPButton = () => {\n  const rsvpButton = document.getElementById('id_sticky_rsvp_button');\n  if (rsvpButton) {\n    const removeRsvpGateClass = () => {\n      rsvpButton.classList.remove('rsvp_gate');\n      rsvpButton.innerText = 'RSVP';\n      rsvpButton.classList.add('rsvp_gate_shrink');\n      setTimeout(() => {\n        rsvpButton.classList.remove('rsvp_gate_shrink');\n      }, 300);\n      window.removeEventListener('scroll', removeRsvpGateClass);\n    };\n\n    rsvpButton?.classList.add('rsvp_gate');\n    window.addEventListener('scroll', removeRsvpGateClass);\n    setTimeout(() => {\n      rsvpButton.innerHTML =\n        '<span>RSVP required</span><span class=\\'sticky_rsvp_button_span\\'>&nbsp;</span><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"17.709\" viewBox=\"0 0 24 17.709\"><defs><style>.a{fill:#fff;}</style></defs><path class=\"a\" d=\"M46.105,991.214a1.489,1.489,0,0,0-.36-.913l-7.084-7.527a1.521,1.521,0,0,0-1.937-.111,1.383,1.383,0,0,0,.014,1.937l4.981,5.285H23.434a1.328,1.328,0,0,0,0,2.656H41.72l-4.981,5.285a1.463,1.463,0,0,0-.014,1.937,1.5,1.5,0,0,0,1.937-.111l7.084-7.527A1.277,1.277,0,0,0,46.105,991.214Z\" transform=\"translate(-22.105 -982.362)\"/></svg>';\n    }, 100);\n  }\n};\n","import {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport './Swirl.sass';\n\nexport function Swirl(props) {\n  let src = props.src || '/assets/images/swirl.svg';\n\n  return (\n    <div className=\"swirl__animation\" data-qa-id={props.qaId} onClick={props.onClick}>\n      <img src={src} alt=\"\" className=\"swirl__image\" data-qa-id={props.qaId} />\n      <Typography variant=\"swirl__text\">{props.text}</Typography>\n    </div>\n  );\n}\n","import React from 'react';\nimport {getTimeSinceUTCDate} from '~/common/timestamp';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport function TimeSince(props) {\n  const {timestamp, dataQaId, inline} = props;\n  return (\n    <Typography inline={inline} data-qa-id={dataQaId || ''} variant=\"paragraph4\">\n      {getTimeSince(timestamp)}\n    </Typography>\n  );\n}\n\n// Not a real iso checker, but checks for our purposes\nfunction isIsoDate(str) {\n  return /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z/.test(str);\n}\n\nfunction getTimeSince(timestamp) {\n  timestamp = isIsoDate(timestamp) ? timestamp : formatTimestamp(timestamp);\n  const utc_timestamp = XDate(timestamp);\n  return getTimeSinceUTCDate(utc_timestamp);\n}\n\nfunction formatTimestamp(timestamp) {\n  /*  Timestamps from the api aren't valid ISO so we need to format them.\n      They look like this: 20161219T205151\n      They need to look like this: 2016-12-19T20:51:51Z */\n\n  timestamp = insertAt(15, 'Z', timestamp);\n  timestamp = insertAt(13, ':', timestamp);\n  timestamp = insertAt(11, ':', timestamp);\n  timestamp = insertAt(6, '-', timestamp);\n  timestamp = insertAt(4, '-', timestamp);\n\n  return timestamp;\n}\n\nfunction insertAt(position, val, str) {\n  return str.substr(0, position) + val + str.substr(position);\n}\n","import React from 'react';\nimport {registryUrl} from '~/common/utils';\nimport '../../../sass/reinvention_styleguide/ui_patterns/vendor_ctas.sass';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport const VendorDiscContent = ({iconUrl, vendorName, displayText}) => (\n  <div className=\"vendor-disc\">\n    <img src={iconUrl} alt={vendorName} />\n    <Typography variant=\"link\" classNames=\"small\">\n      {displayText}\n    </Typography>\n  </div>\n);\n\nexport const VendorDisc = ({\n  disableClick = false,\n  registry,\n  displayText,\n  className = 'vendor-disc__link',\n  dataQaId = 'vendor-disc__gifting_link',\n  href,\n}) => {\n  const iconUrl = registry.iconUrl || registry.icon_url;\n  const vendorName = registry.vendorName || registry.vendor_name;\n\n  return (\n    <a\n      href={href || registryUrl(registry, dataQaId)}\n      target=\"_blank\"\n      data-qa-id={dataQaId}\n      data-impression-tracking=\"true\"\n      data-qa-locator=\"vendor-disc\" // so that the discs have locators without editing data-qa-id\n      data-qa-value={vendorName}\n      rel=\"noreferrer\"\n      className={className}\n      onClick={(e) => {\n        if (disableClick) {\n          e.preventDefault();\n          return false;\n        }\n        return true;\n      }}\n    >\n      <VendorDiscContent iconUrl={iconUrl} vendorName={vendorName} displayText={displayText} />\n    </a>\n  );\n};\n","import React from 'react';\nimport {gray6} from '~sass/bnr_styleguide/base/_exports.sass';\nimport {registryUrl} from '~/common/utils';\nimport {LinkOut} from '~/common/svg/LinkOut';\n\nexport function VendorRect({\n  reversed,\n  registry,\n  displayText,\n  classNames,\n  dataQaId = 'vendor-disc__gifting_link',\n  url,\n}) {\n  const icon_url = registry.iconUrl || registry.icon_url;\n  const vendor_name = registry.vendorName || registry.vendor_name;\n  const reversedClassName = reversed ? '--reversed' : '';\n\n  return (\n    <a\n      href={registryUrl(registry, dataQaId)}\n      className={`${classNames} vendor-rect__link`}\n      target=\"_blank\"\n      data-qa-id={dataQaId}\n      data-impression-tracking=\"true\"\n      data-qa-locator=\"vendor-disc\" // so that the discs have locators without editing data-qa-id\n      data-qa-value={vendor_name}\n      rel=\"noreferrer\"\n    >\n      <div className={`gift-option__left${reversedClassName} font_20`}>\n        {displayText}\n        <img className=\"gift-option__target\" src={icon_url} alt={vendor_name} />\n      </div>\n      <LinkOut color={gray6} />\n    </a>\n  );\n}\n","import React, {useEffect} from 'react';\nimport {useSelector, useStore} from 'react-redux';\nimport {InvitationLink} from './InvitationLink';\nimport {checkForNewMessages} from '../reducers/apiActions';\nimport {bgLightness, colorToRgb} from '~/ViewInvitation/utils/color';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\n\nexport function ViewInvitationTabs(props) {\n  const {active, bgAlpha = 1, themeColor = 'white'} = props;\n  const store = useStore();\n  const {matches: lgWindow} = useMatchQuery('(min-width: 80rem)', []);\n\n  useEffect(() => {\n    // TODO: should we run this on route change like we do on view_invitation classic?\n    store.dispatch(checkForNewMessages());\n    const ptr = setInterval(() => store.dispatch(checkForNewMessages()), 30000);\n    return () => clearInterval(ptr);\n  }, [checkForNewMessages]);\n\n  if (evite.experiments.inVariation('unstickyMeganav', 'variation', false)) {\n    useEffect(() => {\n      evite.when('nav').then(() => {\n        if (!lgWindow) {\n          window.scrollTo(0, 116);\n        } else {\n          window.scrollTo(0, 126);\n        }\n      });\n    }, []);\n  }\n\n  const showNotification = useSelector((s) => s.newMessages?.hasNewMessages);\n\n  const {r, g, b} = colorToRgb(themeColor, bgAlpha);\n\n  return (\n    <div\n      className=\"view-invitation__tabs\"\n      // style={{ background: active === 'messages'\n      //   ? fog\n      //   : `rgb(${r}, ${g}, ${b})`\n      // }}\n    >\n      <InvitationLink to=\"/\">\n        <button\n          id=\"tab-button_invitation\"\n          data-qa-id=\"invitation-tab\"\n          className={`unstyled-button tab-button ${\n            bgLightness(themeColor, bgAlpha) === 'dark' ? 'on-dark-bg' : ''\n          } ${active !== 'messages' ? 'active' : ''}`}\n        >\n          {props.ctaWordings || 'Invitation'}\n        </button>\n      </InvitationLink>\n      <InvitationLink to=\"/messages\">\n        <button\n          id=\"tab-button_messages\"\n          data-qa-id=\"messages-tab\"\n          className={`unstyled-button tab-button tab-messages ${\n            bgLightness(themeColor, bgAlpha) === 'dark' ? 'on-dark-bg' : ''\n          } ${active === 'messages' ? 'active' : ''}`}\n        >\n          <div className=\"tab-messages\">\n            <span className=\"tab-messages-text\">\n              Messages\n              {showNotification && <i className=\"new-message\" />}\n            </span>\n          </div>\n        </button>\n      </InvitationLink>\n    </div>\n  );\n}\n","import {useEffect, useState} from 'react';\nimport {PB_Arrow} from '~/common/svg/PB_Arrow';\nimport {PB_Checkmark} from '~/common/svg/PB_Checkmark';\nimport {PB_Delete} from '~/common/svg/PB_Delete';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {tanzanite} from '~sass/pb_styleguide/base/_exports.sass';\nimport {getUserData} from '~/common/auth/utils';\nimport {WTB_UPDATE_SELECTIONS} from '../reducers/constants';\nimport {toastAlert} from '~/common/_pb_components/atoms/Toast';\nimport {isWebview} from '../webview/webview';\n\nfunction EditSelectionItem({item, removeSelection, isEditing, store}) {\n  const [quantity, setQuantity] = useState('1');\n\n  useEffect(() => {\n    if (isEditing) {\n      setQuantity(item.selectedQuantity?.toString());\n    }\n  }, [isEditing, item]);\n\n  const options = () => {\n    const optionsArr = [];\n    let optionsLength = 0;\n\n    const existingSignup = item.selections.find((sel) => sel.user.id === window.user_id);\n\n    if (existingSignup) {\n      optionsLength = Math.max(item.remaining, 0) + existingSignup.quantity;\n    } else {\n      optionsLength = Math.max(item.remaining, 1);\n    }\n\n    for (let i = 0; i < optionsLength; i++) {\n      optionsArr.push({\n        value: (i + 1).toString(),\n      });\n    }\n\n    return optionsArr;\n  };\n\n  const handleDropdownChange = (e) => {\n    store.dispatch({\n      type: WTB_UPDATE_SELECTIONS,\n      payload: {\n        type: 'update',\n        item: {...item, selectedQuantity: e.target.value},\n      },\n    });\n\n    setQuantity(e.target.value);\n  };\n\n  return (\n    <div className=\"wtb-overlay__edit-selections__item\">\n      <Typography\n        className=\"edit-selection__item-name\"\n        variant=\"paragraph2\"\n        data-qa-id=\"edit-selection__item-name\"\n      >\n        {item.name || ''}\n      </Typography>\n      <div className=\"wtb-overlay__edit-selections-dropdown-container\">\n        <select\n          placeholder=\"1\"\n          className=\"wtb-overlay__edit-selections-dropdown\"\n          onChange={(e) => handleDropdownChange(e)}\n          data-qa-id=\"edit-selection-dropdown\"\n          value={quantity}\n        >\n          {options().map((option) => (\n            <option\n              key={`key-${item.name.replace(/\\s+/g, '')}-${option.value}`}\n              value={option.value}\n            >\n              {option.value}\n            </option>\n          ))}\n        </select>\n      </div>\n      <button\n        data-qa-id=\"remove-wtb-selection\"\n        className=\"wtb-overlay__edit-selections__remove-btn unstyled-button\"\n        onClick={() => removeSelection(item.id)}\n      >\n        <PB_Delete ratio={1.05} color={tanzanite} />\n      </button>\n    </div>\n  );\n}\n\nexport function EditSelection({\n  backToList,\n  pendingSelections,\n  isEditing,\n  onAssign,\n  onUnassign,\n  store,\n}) {\n  const userData = getUserData(window.isWebview ?? isWebview());\n\n  const [processing, setProcessing] = useState(false);\n\n  const removeSelection = async (id) => {\n    setProcessing(true);\n\n    await onUnassign(window.user_id, userData.guestName, id)\n      .then(() => {\n        store.dispatch({\n          type: WTB_UPDATE_SELECTIONS,\n          payload: {\n            type: 'remove',\n            item: {id},\n          },\n        });\n\n        setProcessing(false);\n        if (pendingSelections.length === 1) {\n          backToList();\n          toastAlert('Your changes were saved.', {\n            type: 'success',\n            icon: <PB_Checkmark ratio={0.5} />,\n            position: 'top-right',\n            autoClose: 5000,\n            hideProgressBar: true,\n            closeOnClick: true,\n            pauseOnHover: true,\n            draggable: true,\n            progress: undefined,\n            id: 'wtb-overlay__toast__text',\n          });\n        }\n      })\n      .catch((error) => {\n        console.error('Error during onUnassign:', error);\n        setProcessing(false);\n      });\n  };\n\n  const handleSaveSelections = async () => {\n    try {\n      const assignPromises = pendingSelections.map((item) =>\n        onAssign(userData.userId, userData.guestName, item.id, item.selectedQuantity)\n      );\n\n      await Promise.all(assignPromises);\n\n      toastAlert('Your changes were saved.', {\n        type: 'success',\n        icon: <PB_Checkmark ratio={0.5} />,\n        position: 'top-right',\n        autoClose: 5000,\n        hideProgressBar: true,\n        closeOnClick: true,\n        pauseOnHover: true,\n        draggable: true,\n        progress: undefined,\n        id: 'wtb-overlay__toast__text',\n      });\n\n      backToList();\n    } catch (error) {\n      toastAlert(error, {\n        type: 'error',\n        icon: <PB_AlertLine ratio={0.65} />,\n        position: 'top-right',\n        autoClose: 5000,\n        hideProgressBar: true,\n        closeOnClick: true,\n        pauseOnHover: true,\n        draggable: true,\n        progress: undefined,\n        id: 'wtb-overlay__toast__text',\n      });\n    }\n  };\n\n  return (\n    <div className=\"wtb-overlay__edit-selections-page\">\n      <div className=\"wtb-overlay__body\">\n        <div className=\"wtb-overlay__heading\">\n          <button\n            data-qa-id=\"wtb-overlay-back-btn\"\n            className=\"wtb-overlay__back-btn unstyled-button\"\n            onClick={() => backToList()}\n          >\n            <PB_Arrow direction=\"left\" />\n          </button>\n          <Typography\n            className=\"wtb-overlay__title\"\n            variant=\"paragraph2\"\n            data-qa-id=\"what-to-bring-overlay-header\"\n          >\n            Edit Selection\n          </Typography>\n        </div>\n        <Divider marginBottom=\"1.5rem\" />\n        {pendingSelections.map((item, key) => (\n          <EditSelectionItem\n            item={item}\n            store={store}\n            key={`selection-item-${key}`}\n            removeSelection={removeSelection}\n            isEditing={isEditing}\n          />\n        ))}\n      </div>\n      <div className=\"wtb-overlay__footer\">\n        <Button\n          variant=\"primary\"\n          size=\"large\"\n          className=\"wtb-overlay__save-selections\"\n          onClick={() => handleSaveSelections()}\n          fullWidth\n          data-qa-id=\"wtb-overlay-save-selections-btn\"\n        >\n          {processing && <span className=\"evt-spinner inline\" />} Save\n        </Button>\n      </div>\n    </div>\n  );\n}\n","import React, {useEffect, useState} from 'react';\nimport PropTypes from 'prop-types';\nimport {useSelector, useStore} from 'react-redux';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\nimport {PB_Checkmark} from '~/common/svg/PB_Checkmark';\nimport {largishAndUp} from '~sass/pb_styleguide/base/_exports.sass';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport './WhatToBring.sass';\nimport {EditSelection} from './WhatToBringEdit';\nimport {\n  WTB_RESET_SELECTIONS,\n  WTB_TOGGLE_EDITING,\n  WTB_UPDATE_SELECTIONS,\n} from '../reducers/constants';\n\nfunction WtbOverlaySection({\n  item,\n  largeScreens,\n  userId,\n  isHost,\n  hasRsvpd,\n  items,\n  selections,\n  store,\n  handleEditBtn,\n}) {\n  const [selected, setSelected] = useState(false);\n\n  useEffect(() => {\n    setSelected(selections.some((obj) => obj.id === item.id));\n  }, [selections]);\n\n  const handleSelected = () => {\n    const matchingSelection = items.find((i) => i.id === item.id);\n    const quantity =\n      matchingSelection.selections.find((sel) => sel.user.id === userId)?.quantity || 1;\n\n    store.dispatch({\n      type: WTB_UPDATE_SELECTIONS,\n      payload: {\n        type: selected ? 'remove' : 'add',\n        item: {...item, selectedQuantity: quantity},\n      },\n    });\n  };\n\n  return (\n    <div className=\"wtb-overlay__section\" key={`item_${item.id}`}>\n      <div className=\"wtb-overlay__section-title-wrapper\">\n        <Typography variant=\"header3\" classNames=\"wtb-overlay__paragraph\">\n          {item.name}\n        </Typography>\n      </div>\n      <Typography\n        variant=\"label2\"\n        classNames={`wtb-overlay__section-remaining small ${item.remaining < 1 ? 'disabled' : ''}`}\n      >\n        {item.quantity - item.remaining} of {item.quantity} FILLED\n      </Typography>\n      {item.selections.map((p) => (\n        <div\n          className=\"wtb-overlay__signed-up-item\"\n          data-qa-id={`signedUpListing_${p.user.id}`}\n          key={`item_${item.id}_selection_${p.user.id}`}\n        >\n          <Typography variant=\"paragraph2\" classNames=\"wtb-overlay__selection-user-name\">\n            {p.user.first_name}\n          </Typography>\n          {p.user.id === userId && (\n            <button\n              className=\"unstyled-button link small\"\n              data-qa-id=\"wtb-remove\"\n              onClick={() => handleEditBtn(item, p.quantity)}\n            >\n              Edit\n            </button>\n          )}\n          <Typography variant=\"paragraph2\" classNames=\"small\">\n            {p.quantity}\n          </Typography>\n        </div>\n      ))}\n      {item.remaining > 0 && (\n        <>\n          {isHost || hasRsvpd ? (\n            <Button\n              data-qa-id=\"sign-me-up\"\n              className={`wtb-overlay__section__sign-up-btn${selected ? ' selected' : ''}`}\n              onClick={() => handleSelected()}\n              size=\"small\"\n              variant=\"secondary\"\n              data-impression-tracking=\"true\"\n            >\n              {selected ? (\n                <>\n                  <PB_Checkmark ratio={0.5} /> Selected\n                </>\n              ) : (\n                `Sign Me Up`\n              )}\n            </Button>\n          ) : (\n            <Button\n              data-qa-id=\"rsvp-to-contribute\"\n              disabled\n              size=\"large\"\n              variant=\"primary\"\n              data-impression-tracking=\"true\"\n            >\n              RSVP to Contribute\n            </Button>\n          )}\n        </>\n      )}\n    </div>\n  );\n}\n\nexport function WhatToBringOverlay({\n  open,\n  onClose,\n  userId,\n  onAssign,\n  name,\n  isHost,\n  hasRsvpd,\n  onUnassign,\n  items,\n}) {\n  const store = useStore();\n  const [loading, setLoading] = useState(true);\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n  const {pendingSelections, isEditing} = useSelector((state) => state.whatToBring);\n\n  useEffect(() => {\n    setLoading(items.length === 0);\n  }, [items]);\n\n  const mySignups = items.filter((item) =>\n    item.selections.some((selection) => selection.user.id === userId)\n  );\n\n  useEffect(() => {\n    if (open) {\n      document.body.classList.add('no-scroll');\n    } else {\n      document.body.classList.remove('no-scroll');\n    }\n  }, [open]);\n\n  const handleEditBtn = (item, quantity) => {\n    store.dispatch({\n      type: WTB_UPDATE_SELECTIONS,\n      payload: {\n        type: 'replace',\n        item: {\n          ...item,\n          selectedQuantity: quantity,\n        },\n      },\n    });\n  };\n\n  const seeMySignups = () => {\n    mySignups.forEach((signup) => {\n      const quantity = signup.selections.find((sel) => sel.user.id === userId)?.quantity || 1;\n\n      store.dispatch({\n        type: WTB_UPDATE_SELECTIONS,\n        payload: {\n          type: 'add',\n          item: {...signup, selectedQuantity: quantity},\n        },\n      });\n    });\n\n    store.dispatch({\n      type: WTB_TOGGLE_EDITING,\n    });\n  };\n\n  const sortedItems = items.sort((a, b) => {\n    if (a.remaining === 0 && b.remaining !== 0) {\n      return 1; // Move 'a' to the end\n    }\n    if (a.remaining !== 0 && b.remaining === 0) {\n      return -1; // Move 'b' to the end\n    }\n    return a.remaining - b.remaining; // Compare by value\n  }); // Sort filled items at the end\n\n  return (\n    <>\n      <div className={`view-invitation__overlay-bg ${open ? 'open' : ''}`} onClick={onClose} />\n      <div className={`view-invitation__wtb-overlay ${open ? 'open' : ''}`}>\n        <div className={`wtb-overlay__content${isEditing ? ' edit-selections' : ''}`}>\n          <div className=\"wtb-overlay__list-page\">\n            <div className=\"wtb-overlay__body\">\n              <div className=\"wtb-overlay__heading\">\n                <Typography\n                  className=\"wtb-overlay__title\"\n                  variant=\"paragraph2\"\n                  data-qa-id=\"what-to-bring-overlay-header\"\n                >\n                  What to Bring List\n                </Typography>\n                <button\n                  data-qa-id=\"what-to-bring-close\"\n                  className=\"unstyled-button wtb-overlay__close-btn\"\n                  onClick={onClose}\n                >\n                  <PB_CloseLine />\n                </button>\n              </div>\n              <Divider marginBottom=\"1.5rem\" />\n              {loading ? (\n                <div className=\"wtb-overlay__loading\">\n                  <span className=\"evt-spinner\" />\n                  <Typography variant=\"paragraph2\">Loading What to Bring...</Typography>\n                </div>\n              ) : (\n                <>\n                  {mySignups.length > 0 && (\n                    <Button\n                      data-qa-id=\"wtb-see-my-sign-ups\"\n                      className=\"wtb-overlay__section__see-sign-ups-btn\"\n                      onClick={() => seeMySignups()}\n                      size=\"small\"\n                      variant=\"primary\"\n                    >\n                      See My Sign Ups\n                    </Button>\n                  )}\n                  {sortedItems.map((i, key) => (\n                    <WtbOverlaySection\n                      item={i}\n                      items={items}\n                      store={store}\n                      selections={pendingSelections}\n                      key={i.id}\n                      name={name}\n                      largeScreens={largeScreens}\n                      userId={userId}\n                      isHost={isHost}\n                      hasRsvpd={hasRsvpd}\n                      handleEditBtn={handleEditBtn}\n                    />\n                  ))}\n                </>\n              )}\n            </div>\n            {pendingSelections.length > 0 && (\n              <div className=\"wtb-overlay__footer\">\n                <Button\n                  variant=\"primary\"\n                  size=\"large\"\n                  className=\"wtb-overlay__continue-with-selected\"\n                  onClick={() => {\n                    store.dispatch({\n                      type: WTB_TOGGLE_EDITING,\n                    });\n                  }}\n                  fullWidth\n                  data-qa-id=\"continue-with-selected-btn\"\n                >\n                  {`Continue (${pendingSelections.length} selected)`}\n                </Button>\n              </div>\n            )}\n          </div>\n          <EditSelection\n            backToList={() => {\n              store.dispatch({\n                type: WTB_RESET_SELECTIONS,\n              });\n            }}\n            isEditing={isEditing}\n            items={items}\n            pendingSelections={pendingSelections}\n            onUnassign={onUnassign}\n            onAssign={onAssign}\n            store={store}\n          />\n        </div>\n      </div>\n    </>\n  );\n}\n\nWhatToBringOverlay.propTypes = {\n  open: PropTypes.bool,\n  onClose: PropTypes.func,\n  items: PropTypes.arrayOf(\n    PropTypes.shape({\n      id: PropTypes.string.isRequired,\n      name: PropTypes.string.isRequired,\n      quantity: PropTypes.number.isRequired,\n      remaining: PropTypes.number.isRequired,\n      selections: PropTypes.arrayOf(\n        PropTypes.shape({\n          quantity: PropTypes.number.isRequired,\n          user: PropTypes.shape({\n            first_name: PropTypes.string.isRequired,\n            id: PropTypes.string.isRequired,\n            last_name: PropTypes.string.isRequired,\n          }),\n        })\n      ),\n    })\n  ).isRequired,\n  onAssign: PropTypes.func,\n  onUnassign: PropTypes.func,\n  userId: PropTypes.string.isRequired,\n  name: PropTypes.string.isRequired,\n  isHost: PropTypes.bool,\n  hasRsvpd: PropTypes.bool,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {PB_SearchLine} from '~/common/svg/PB_SearchLine';\nimport {pebble} from '~sass/pb_styleguide/base/_exports.sass';\nimport {Input} from '~/common/_pb_components/atoms/Input';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nfunction NumGuests(props) {\n  return (\n    <div className=\"wic__num-guests-wrapper\">\n      <div\n        className={`wic__num-guests ${props.status.toLowerCase().replaceAll(' ', '_')}`}\n        data-qa-id={`${props.status.toLowerCase().replaceAll(' ', '-')}-count`}\n        data-qa-value={props.count}\n      >\n        <Typography variant=\"paragraph3\" classNames=\"wic__guest-count\">\n          {props.count}\n        </Typography>\n      </div>\n      <Typography variant=\"paragraph3\">{props.status}</Typography>\n    </div>\n  );\n}\n\nNumGuests.propTypes = {\n  status: PropTypes.string.isRequired,\n  count: PropTypes.number.isRequired,\n};\n\nexport function WhoIsComingHeader(props) {\n  return (\n    <div className=\"view-invitation__who-is-coming-header\">\n      <div className=\"wic__guest-counts\">\n        <NumGuests status=\"Yes\" count={props.yes} />\n        {props.maybe !== undefined && <NumGuests status=\"Maybe\" count={props.maybe} />}\n        <NumGuests status=\"No\" count={props.no} />\n        <NumGuests status=\"No Reply\" count={props.no_reply} />\n      </div>\n      <div className=\"wic__guest-actions\">\n        <Input\n          data-qa-id=\"search-guests\"\n          value={props.query}\n          onChange={(e) => props.onQueryChange(e.target.value)}\n          startAdornment={<PB_SearchLine ratio={0.5} color={pebble} />}\n          placeholder=\"Search guests\"\n        />\n        {/* TODO: Restore 'Add Guests' */}\n        {/* {props.allowAddGuests && !props.preview && (\n        <a\n          className=\"button primary large\"\n          data-qa-id=\"add-guests\"\n          href={props.addGuestsUrl}\n        >\n          Add Guests\n        </a>\n      )} */}\n      </div>\n    </div>\n  );\n}\n\nWhoIsComingHeader.propTypes = {\n  yes: PropTypes.number.isRequired,\n  maybe: PropTypes.number,\n  no: PropTypes.number.isRequired,\n  no_reply: PropTypes.number.isRequired,\n  query: PropTypes.string,\n  onQueryChange: PropTypes.func,\n  allowAddGuests: PropTypes.bool,\n  addGuestsUrl: PropTypes.string,\n  preview: PropTypes.bool,\n};\n","import {useState, useEffect} from 'react';\nimport PropTypes from 'prop-types';\nimport {useSelector, useStore} from 'react-redux';\nimport {fetchGuestlist} from '../reducers/apiActions';\nimport {selectEventHasPassed} from '../reducers/eventDetails';\nimport {isPast, isCanceled} from '~/common/utils/event_utils';\nimport {toastAlert} from '~/common/_pb_components/atoms/Toast';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_Arrow} from '~/common/svg/PB_Arrow';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\n\nimport {WhoIsComingHeader} from './WhoIsComingHeader';\nimport {Guestlist} from '../routes/Guests/Guestlist';\nimport {largishAndUp} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function WhoIsComingOverlay(props) {\n  const store = useStore();\n  const [query, setQuery] = useState('');\n  const [openCommentEditor, setOpenCommentEditor] = useState();\n\n  const [loading, setLoading] = useState(true);\n\n  const hasRsvpd = useSelector((store) => store.rsvp?.hasRsvpd);\n  const isHost = useSelector((state) => state.user?.isHost);\n  const isPremium = useSelector((state) => state.eventDetails?.isPremium);\n  const removeAds = useSelector((state) => state.eventDetails?.removeAds);\n  const origin = useSelector((state) => state.eventDetails?.origin);\n  const eventStatus = useSelector((state) => state.eventDetails?.status);\n  const yesRsvp = useSelector((state) => state.guestList?.rsvpCounts?.yes);\n  const maybeRsvp = useSelector((state) => state.guestList?.rsvpCounts?.maybe);\n  const noRsvp = useSelector((state) => state.guestList?.rsvpCounts?.no);\n  const undecided = useSelector((state) => state.guestList?.rsvpCounts?.no_reply);\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n\n  const includeMaybe = !isPremium && origin !== 21;\n  const replies = !includeMaybe ? ['yes', 'no', 'no_reply'] : ['yes', 'maybe', 'no', 'no_reply'];\n\n  useEffect(() => {\n    store.dispatch(\n      fetchGuestlist(\n        window.event_id,\n        () => {\n          setLoading(false);\n        },\n        (dispatch, getState, d) => {\n          toastAlert(d?.results?.message || 'Error loading guestlist', {\n            type: 'error',\n          });\n          setLoading(false);\n        }\n      )\n    );\n  }, []);\n\n  useEffect(() => {\n    if (props.open) {\n      document.body.classList.add('no-scroll');\n    } else {\n      setOpenCommentEditor(undefined);\n      document.body.classList.remove('no-scroll');\n    }\n  }, [props.open]);\n\n  const allowInviteMore = window.evite_event?.options.event_option_allow_invite_more || false;\n  const eventHasPassed = useSelector(selectEventHasPassed) || isPast(eventStatus);\n  const eventIsCanceled = isCanceled(eventStatus);\n  const showInviteMore =\n    (allowInviteMore || isHost) && hasRsvpd && !eventHasPassed && !eventIsCanceled;\n\n  return (\n    <>\n      <div\n        className={`view-invitation__overlay-bg ${props.open ? 'open' : ''}`}\n        onClick={props.onClose}\n      />\n      <div className={`view-invitation__who-is-coming-overlay ${props.open ? 'open' : ''}`}>\n        <div className=\"wic-overlay__heading\">\n          {largeScreens ? (\n            <>\n              <Typography variant=\"label1\" data-qa-id=\"guestlist-drawer-header\">\n                Guestlist\n              </Typography>\n              <button\n                data-qa-id=\"who-is-coming-close\"\n                className=\"unstyled-button\"\n                onClick={props.onClose}\n                data-impression-tracking=\"true\"\n              >\n                <PB_CloseLine />\n              </button>\n            </>\n          ) : (\n            <>\n              <button\n                data-qa-id=\"who-is-coming-close\"\n                className=\"unstyled-button wic-overlay__close-overlay-btn\"\n                onClick={props.onClose}\n                data-impression-tracking=\"true\"\n              >\n                <PB_Arrow />\n              </button>\n              <Typography variant=\"header2\">Guestlist</Typography>\n            </>\n          )}\n        </div>\n        {loading ? (\n          <div className=\"wic-overlay__loading\">\n            <span className=\"evt-spinner\" />\n            <Typography variant=\"paragraph2\">Loading guestlist...</Typography>\n          </div>\n        ) : (\n          <>\n            <WhoIsComingHeader\n              yes={yesRsvp}\n              maybe={includeMaybe ? maybeRsvp : undefined}\n              no={noRsvp}\n              no_reply={undecided}\n              query={query}\n              onQueryChange={setQuery}\n              allowAddGuests={showInviteMore}\n              addGuestsUrl={window.invite_more_url}\n              preview={props.preview}\n            />\n            <Guestlist\n              replies={replies}\n              query={query}\n              openCommentEditor={openCommentEditor}\n              setOpenCommentEditor={setOpenCommentEditor}\n              rsvpDetails={props.rsvpDetails}\n              isPremium={isPremium}\n              removeAds={removeAds}\n            />\n          </>\n        )}\n      </div>\n    </>\n  );\n}\n\nWhoIsComingOverlay.propTypes = {\n  open: PropTypes.bool,\n  onClose: PropTypes.func,\n  rsvpDetails: PropTypes.object,\n  preivew: PropTypes.bool,\n};\n","import {\n  eviteGold,\n  eviteOrange,\n  eviteBlue,\n  eviteMagenta,\n  evitePurple,\n  eviteTeal,\n  darkBlue,\n  darkOrange,\n  darkMagenta,\n  darkPurple,\n  darkTeal,\n} from '~sass/reinvention_styleguide/base/_exports.sass';\n\nexport const AVATAR_COLORS = [\n  eviteGold,\n  eviteOrange,\n  eviteBlue,\n  eviteMagenta,\n  evitePurple,\n  eviteTeal,\n  darkBlue,\n  darkOrange,\n  darkMagenta,\n  darkPurple,\n  darkTeal,\n];\n","import React, {PureComponent} from 'react';\nimport {Mention, MentionsInput} from 'react-mentions';\nimport evite from 'evite';\nimport * as mentionUtils from './mention-utils';\n\nconst COMPLETE_LIMIT = 7;\nlet instanceCount = 0;\n\nexport class MentionEditor extends PureComponent {\n  constructor(props) {\n    super(props);\n    const initialValue = mentionUtils.fromOurMentions(props.initialContent, props.initialMentions);\n\n    this.state = {\n      value: initialValue,\n      hasChanged: false,\n    };\n\n    this.className = `editor__${instanceCount++}`;\n\n    if (this.props.publicRef) {\n      this.props.publicRef(this);\n    }\n  }\n\n  componentWillReceiveProps(nextProps, nextState) {\n    if (this.props.initialContent !== nextProps.initialContent)\n      this.setState({value: nextProps.initialContent});\n\n    if (this.props.clearFromParent !== nextProps.clearFromParent) {\n      this.clearComment();\n    }\n  }\n\n  componentWillUnmount() {\n    if (this.props.publicRef) {\n      this.props.publicRef(null);\n    }\n  }\n\n  componentDidMount() {\n    if (this.props.autoFocus) {\n      this.handleFocus();\n    }\n  }\n\n  clearComment() {\n    this.setComment('');\n  }\n\n  get comment() {\n    return (this.state.plainValue ? this.state.plainValue : this.props.initialContent) || '';\n  }\n\n  get mentions() {\n    return mentionUtils.sortMentions('asc', this.state.mentions || this.props.initialMentions);\n  }\n\n  get hasFocus() {\n    return this.state.hasFocus;\n  }\n\n  handleBlur = () => {\n    this.setState({hasFocus: false});\n\n    if (this.props.onBlur) {\n      return this.props.onBlur();\n    }\n  };\n\n  handleFocus = () => {\n    this.setState({hasFocus: true});\n\n    if (this.props.onFocus) {\n      return this.props.onFocus();\n    }\n  };\n\n  /**\n   * focus on the mention editor\n   */\n  focus = () => {\n    document.querySelector(`.${this.className} textarea`).focus();\n  };\n\n  handlePost = () => {\n    this.props.handleCommentSubmit();\n    this.clearComment();\n  };\n\n  render() {\n    const {state, className, props} = this;\n    const {placeholder, focusPlaceholder, singleLineInput, isOldStyle, dataQaId, id} = props;\n    const {hasFocus} = state;\n\n    const classList = ['mention-editor'];\n    if (className) classList.push(className);\n    if (hasFocus) classList.push('has-focus');\n    if (this.state.value) classList.push('has-content');\n    if (singleLineInput) classList.push('single-line-input');\n\n    const defaultPlaceholder = 'Write a comment...';\n    const defaultFocusPlaceholder = evite.features.isEnabled('mentions')\n      ? 'Use @ to mention a guest.'\n      : placeholder || defaultPlaceholder;\n\n    const placeholderText = hasFocus\n      ? focusPlaceholder || defaultFocusPlaceholder\n      : placeholder || defaultPlaceholder;\n\n    const disablePostButton = !this.state.value || !this.state.hasChanged;\n\n    const style = {\n      suggestions: {\n        zIndex: 11,\n        list: {\n          backgroundColor: 'white',\n          border: 'none',\n          minWidth: '100px',\n        },\n      },\n    };\n\n    if (this.props.suggestionsOnTop) {\n      classList.push('direction-up');\n      Object.assign(style.suggestions.list, {\n        overflow: 'auto',\n        position: 'absolute',\n        bottom: '17px',\n      });\n    }\n\n    return (\n      <div className={classList.join(' ')} data-qa-id={dataQaId || 'mention-editor'}>\n        <MentionsInput\n          value={this.state.value || ''}\n          className=\"mention-input\"\n          onChange={this.handleChange}\n          onBlur={this.handleBlur}\n          onFocus={this.handleFocus}\n          placeholder={placeholderText}\n          singleLine={singleLineInput}\n          style={style}\n          allowSpaceInQuery\n          id={id}\n          data-qa-id={dataQaId || 'mention-input__textarea'}\n        >\n          <Mention\n            trigger=\"@\"\n            className=\"mention-complete\"\n            appendSpaceOnAdd\n            data={this.fetchUsers}\n          />\n        </MentionsInput>\n        {!isOldStyle && (\n          <button\n            type=\"submit\"\n            onClick={this.handlePost}\n            className={`comment-editor__submit unstyled-button link ${\n              disablePostButton ? 'disabled' : ''\n            }`}\n            disabled={this.state.value.trim().length === 0}\n          >\n            Post\n          </button>\n        )}\n      </div>\n    );\n  }\n\n  handleChange = (event, newValue, newPlainTextValue, mentions) => {\n    this.setState({\n      value: newValue,\n      plainValue: newPlainTextValue,\n      mentions: mentionUtils.toOurMentionFormat(mentions),\n      hasChanged: true,\n    });\n\n    // fire call to parent component so it can be aware of comment changes\n    this.props.onChange(newValue);\n  };\n\n  setMention(id, first, last) {\n    const name = `${first} ${last}`.trim();\n    const newComment = `@[${name}](${id}) `;\n    this.setState({\n      value: newComment,\n    });\n  }\n\n  /**\n   * fetch user suggestions for the mention autocomplete\n   *\n   * @param search\n   * @param callback func({id<string>, display<string>})\n   */\n  fetchUsers = async (search, callback) => {\n    const url = evite.urls.get('ajax_event_guestlist_search', {\n      search_term: search || '',\n      event_id: window.evite_event.id,\n      gid: window.guest_id,\n      limit: COMPLETE_LIMIT,\n    });\n\n    try {\n      const response = await evite.fetch(url, {\n        method: 'get',\n        credentials: 'include',\n        headers: {\n          Accept: 'application/json',\n        },\n      });\n\n      if (response.ok) {\n        const guests = await response.json();\n\n        const suggestions = [];\n        for (const guest of guests) {\n          suggestions.push({id: guest.user_id, display: guest.primary_name});\n        }\n\n        callback(suggestions);\n      }\n    } catch (e) {\n      evite.error('Error in mentions');\n      evite.error(e);\n      Raven.captureException(e);\n      callback([]);\n    }\n  };\n\n  setComment(value) {\n    this.setState({\n      value,\n      plainValue: '',\n      mentions: [],\n    });\n  }\n}\n","/**\n * sort the mentions array if the input is backwards,\n * which happens when we use the initial/unchanged value that is\n * not altered by the mentions' onchange handler. sortDir is in\n * ascending order by default\n *\n * @param sortDir\n * @param mentions\n */\nexport function sortMentions(sortDir, mentions) {\n  if (!mentions) return [];\n  return mentions.sort((a, b) =>\n    sortDir === 'desc' ? b.start_end[0] - a.start_end[0] : a.start_end[0] - b.start_end[0]\n  );\n}\n\n/**\n * transform into markup for the mention editor\n * [{user_id: '01..', 'start_end': [0, 6]}]\n *\n *\n * @param comment\n * @param mentions\n */\nexport function fromOurMentions(comment, mentions) {\n  if (!comment || !mentions || !mentions.length) return comment;\n\n  mentions = mentions.sort((a, b) => b.start_end[0] - a.start_end[1]);\n\n  for (const mention of mentions) {\n    const start = comment.substr(0, mention.start_end[0]);\n    const display = comment.substring(mention.start_end[0], mention.start_end[1]);\n    const end = comment.substring(mention.start_end[1]);\n    comment = `${start}@[${display}](${mention.user_id})${end}`;\n  }\n\n  return comment;\n}\n\n/**\n * convert an array of objects like:\n * [{id: \"01..\", display: \"Bob 100\", type: null, index: 0, plainTextIndex: 0}]\n *\n * to:\n * [{user_id: '01..', 'start_end': [0, 6]}]\n *\n * @param mentions\n */\nexport function toOurMentionFormat(mentions) {\n  const ret = [];\n  for (const mention of mentions) {\n    ret.push({\n      user_id: mention.id,\n      start_end: [mention.plainTextIndex, mention.plainTextIndex + mention.display.length],\n    });\n  }\n  return ret;\n}\n","import React, {useRef, useState, useEffect} from 'react';\n\nconst getWidth = () =>\n  window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n\nfunction useCurrentWidth() {\n  const [width, setWidth] = useState(getWidth());\n  useEffect(() => {\n    const resizeListener = () => {\n      setWidth(getWidth());\n    };\n    window.addEventListener('resize', evite.debounce(resizeListener, 250));\n\n    return () => {\n      window.removeEventListener('resize', evite.debounce(resizeListener, 250));\n    };\n  }, []);\n\n  return width;\n}\n\nexport const useFitContainer = (options) => {\n  const {startingScale = 1.0, stepSize = 0.05, resolution = 0.005} = options;\n\n  const ref = useRef(null);\n\n  const width = useCurrentWidth();\n\n  const [state, setState] = useState({\n    scale: startingScale,\n    prevScale: options.minScale || 0.5,\n    isDone: false,\n    minScale: options.minScale || 0.5,\n    maxScale: options.maxScale || 1.0,\n    prevWidth: width,\n  });\n  const {scale, prevScale, minScale, maxScale, isDone, prevWidth} = state;\n  useEffect(() => {\n    if (width !== prevWidth) {\n      // Reset to the original settings and rerun the size search from the beginning when the window chanes size\n      // TODO: Need to add a debounce here if we ever use this on desktop\n      setState({\n        scale: startingScale,\n        prevScale: options.minScale || 0.5,\n        isDone: false,\n        minScale: options.minScale || 0.5,\n        maxScale: options.maxScale || 1.0,\n        prevWidth: width,\n      });\n      return;\n    }\n    if (isDone) return;\n\n    const newIsDone = Math.abs(scale - prevScale) <= stepSize;\n    const isOverflow = !!ref.current && ref.current.scrollHeight > ref.current.offsetHeight;\n    const isAsc = scale > prevScale;\n\n    // return if the scale has been adjusted \"enough\" (change within RESOLUTION)\n    // reduce scale by one increment if it's overflowing\n    if (newIsDone) {\n      if (isOverflow) {\n        const scaleNew = prevScale < scale ? prevScale : scale - (prevScale - scale);\n        setState({\n          scale: scaleNew,\n          maxScale,\n          minScale,\n          prevScale: scale,\n          isDone: newIsDone,\n          prevWidth: width,\n        });\n      }\n      return;\n    }\n\n    // binary search to adjust scale\n    let newMax = maxScale;\n    let newMin = minScale;\n    let delta = Math.abs(prevScale - scale);\n    if (isOverflow) {\n      delta *= -1;\n      newMax = Math.min(maxScale, scale);\n    } else {\n      newMin = Math.max(minScale, scale);\n    }\n\n    setState({\n      scale: Math.min(scale + delta / 2, options.maxScale || 1.0),\n      maxScale: newMax,\n      minScale: newMin,\n      prevScale: scale,\n      isDone: newIsDone,\n      prevWidth: width,\n    });\n  }, [scale, prevScale, ref, width]);\n\n  return {scale, isDone, ref};\n};\n","import {createBrowserHistory} from 'history';\n\nexport const history = createBrowserHistory({\n  basename: `/event/${window.event_id}`,\n});\n","import urls from 'urls';\nimport * as actions from './constants';\nimport {SET_AVATARS, UPDATE_AVATARS, selectAvatar} from './avatars';\nimport {LIKED_POST, UNLIKED_POST, POST_REPLY, EDIT_POST, DELETE_POST} from './posts';\nimport {SET_NEW_MESSAGES} from './newMessages';\nimport {updateGuestId, updateUserId, updateRsvp} from './global';\nimport {apiFetcher} from './apiFetcher';\nimport {trackInviteRSVP, trackSubmitedRSVP} from '../utils/analytics';\n\nexport function fetchSinglePhotoPost(eventId, postId, callback) {\n  eventId = eventId || window.event_id;\n  const url = urls.getAPI('api_single_photo_post', {eventId, postId});\n  return apiFetcher(url, null, [actions.FETCH_SINGLE_PHOTO_POST, callback], null, {postId});\n}\n\nexport function fetchMorePhotos(eventId, cursor, gid, callback) {\n  eventId = eventId || window.event_id;\n  gid = gid || window.guest_id || '';\n  const url = urls.getAPI('api_all_photos', {eventId, cursor, gid});\n  return apiFetcher(url, null, [actions.FETCH_PHOTOS, callback], null);\n}\n\nexport function initInvitationSummary(store) {\n  if (window.summary) {\n    // If we already have the data, then use it\n    store.dispatch(async (dispatch, getState) => {\n      dispatch({type: actions.UPDATE_INVITATION_SUMMARY, results: window.summary});\n    });\n  } else {\n    // If we don't have the data, make a func for the data getter to call when it has it\n    window.summaryCallback = () => {\n      store.dispatch(async (dispatch, getState) => {\n        dispatch({type: actions.UPDATE_INVITATION_SUMMARY, results: window.summary});\n      });\n    };\n  }\n}\n\nexport function fetchInvitationSummary(event_id) {\n  event_id = event_id || window.event_id;\n  let url = urls.get('api_invitation_summary', {event_id});\n  const variation = evite.experiments.getOrSetVariation('pandemic-summary');\n  if (variation == 'parallel') fetch(urls.get('pandemic_invitation_summary', {event_id}));\n  else if (variation == 'appengine')\n    fetch(urls.get('pandemic_appengine_invitation_summary', {event_id}));\n  else if (variation == 'appenginelive')\n    url = urls.get('pandemic_appengine_invitation_summary', {event_id});\n  return apiFetcher(\n    url,\n    actions.FETCH_INVITATION_SUMMARY_STARTED,\n    actions.UPDATE_INVITATION_SUMMARY,\n    actions.FETCH_INVITATION_SUMMARY_FAILED\n  );\n}\n\nexport function fetchAvatars(event_id, guest_id) {\n  event_id = event_id || window.event_id;\n  guest_id = guest_id || window.guest_id;\n\n  const url = urls.get('ajax_event_avatars', {\n    event_id,\n    gid: guest_id,\n  });\n  return apiFetcher(url, null, SET_AVATARS, null);\n}\n\nexport function fetchAvatarsByUserId(event_id, guest_id, user_ids) {\n  event_id = event_id || window.event_id;\n  guest_id = guest_id || window.guest_id;\n\n  const url = urls.get('ajax_event_avatars', {\n    event_id,\n    gid: guest_id,\n    user_ids,\n  });\n  return apiFetcher(url, null, UPDATE_AVATARS, null);\n}\n\nexport function fetchGuestlist(event_id, successCallback, failureCallback) {\n  event_id = event_id || window.event_id;\n\n  const url = urls.getAPI('api_who_is_coming', {event_id});\n  return apiFetcher(url, null, [actions.UPDATE_GUESTLIST, successCallback], failureCallback);\n}\n\nexport function submitRSVP({\n  isReaction = false,\n  event_id,\n  payload,\n  successCallback,\n  failureCallback,\n}) {\n  event_id = event_id || window.event_id;\n\n  if (payload.email) payload.email = payload.email.toLowerCase();\n\n  const request = {\n    url: urls.get('ajax_view_rsvp', {event_id}),\n    method: 'POST',\n    payload,\n  };\n  const updateGlobals = (dispatch, getState, {results}) => {\n    updateGuestId(results.guest.id);\n    updateUserId(results.guest.user_id);\n    updateRsvp(results.guest.response);\n  };\n  const updateAvatar = (dispatch, getState, {results}) => {\n    // Get the users avatar if we don't already have it\n    const state = getState();\n    if (selectAvatar(results.guest.user_id)(state)) return;\n    dispatch(fetchAvatarsByUserId(event_id, results.guest.id, [results.guest.user_id]));\n  };\n  // Dual analytics calls for RSVP are probably redundant, but keeping around for now in case\n  // some reports are using the old version.\n  const updateAnalytics1 = (dispatch, getState, {results}) => {\n    trackSubmitedRSVP(results.guest.response);\n  };\n  const updateAnalytics2 = (dispatch, getState, {results}) => {\n    trackInviteRSVP(results.guest.response, results.guest.optin);\n  };\n  return apiFetcher(\n    request,\n    null,\n    [\n      updateAnalytics1,\n      actions.SUBMIT_RSVP,\n      successCallback,\n      updateGlobals,\n      updateAnalytics2,\n      updateAvatar,\n      fetchInvitationSummary(event_id),\n    ],\n    [actions.SUBMIT_RSVP_FAILED, failureCallback],\n    null\n  );\n}\n\nexport function likePost(postId) {\n  const eventId = window.event_id;\n  const userId = window.user_id;\n  const guestId = window.guest_id;\n\n  const url = urls.get('api_like_post', {\n    postId,\n    eventId,\n  });\n\n  return apiFetcher(url, null, LIKED_POST, null, {\n    postId,\n    userId,\n    guestId,\n  });\n}\n\nexport function unlikePost(postId) {\n  const eventId = window.event_id;\n  const userId = window.user_id;\n  const guestId = window.guest_id;\n\n  const url = urls.get('api_unlike_post', {\n    postId,\n    eventId,\n  });\n\n  return apiFetcher(url, null, UNLIKED_POST, null, {\n    postId,\n    userId,\n    guestId,\n  });\n}\n\nexport function postReply(postId, comment) {\n  const eventId = window.event_id;\n\n  const url = urls.getAPI('api_comment', {\n    postId,\n    eventId,\n    comment,\n  });\n\n  return apiFetcher(url, null, POST_REPLY, null, {postId, eventId, comment});\n}\n\nexport function editPostComment(postId, comment) {\n  const eventId = window.event_id;\n\n  const url = urls.getAPI('api_edit_post_comment', {\n    postId,\n    eventId,\n    comment,\n  });\n\n  return apiFetcher(url, null, EDIT_POST, null, {\n    postId,\n  });\n}\n\nexport function deletePost(postId) {\n  const eventId = window.event_id;\n\n  const url = urls.getAPI('api_delete_post', {\n    postId,\n    eventId,\n  });\n\n  return apiFetcher(url, null, DELETE_POST, null, {postId, eventId});\n}\n\nexport function updateGuestNotificationSettings(settings, successCallback, failureCallback) {\n  const eventId = window.event_id;\n  const guestId = window.guest_id;\n\n  const url = urls.getAPI('api_patch_guest_notifications', {\n    eventId,\n    guestId,\n    payload: {\n      notifications: {\n        ...settings,\n      },\n    },\n  });\n\n  return apiFetcher(\n    url,\n    null,\n    [actions.GUEST_NOTIFICATIONS_UPDATED, successCallback],\n    failureCallback\n  );\n}\n\nexport function refreshFundraiser() {\n  const eventId = window.event_id;\n\n  const url = urls.getAPI('api_donation_refresh', {\n    eventId,\n    payload: {refresh: true},\n  });\n\n  return apiFetcher(url);\n}\n\nexport function voteForPollOption(\n  pollId,\n  pollAction,\n  payload,\n  successCallback,\n  failureCallback = null\n) {\n  const eventId = window.event_id;\n\n  failureCallback = () => {\n    console.error('unable to record poll vote');\n  };\n\n  const url = urls.getAPI('api_vote_poll_option', {\n    eventId,\n    pollId,\n    pollAction,\n    payload,\n  });\n\n  return apiFetcher(url, null, [actions.POLL_VOTE_UPDATED, successCallback], failureCallback);\n}\n\nexport function checkForNewMessages() {\n  // TODO: Extend apiFetcher to support headers so we can simplify this function\n  if (!window.guest_id) return () => {};\n  const url = `/tsunami/v1/services/event/${window.event_id}/guest/${window.guest_id}/messages/status`;\n  const getMessages = {\n    method: 'GET',\n    credentials: 'include',\n    cache: 'no-cache',\n    headers: {\n      'X-CSRFToken': evite.cookie('csrftoken'),\n      Accept: 'application/json',\n    },\n  };\n  return async function (dispatch, getState) {\n    try {\n      const response = await evite.fetch(url, getMessages);\n      if (response.ok) {\n        const responseText = await response.json();\n        dispatch({\n          type: SET_NEW_MESSAGES,\n          responseText,\n        });\n        console.log('message status responseText', responseText);\n      } else {\n        // the error will only emit the blue dot, so let's just console error\n        console.error('error fetching new message status', response);\n      }\n    } catch (e) {\n      console.error('error fetching new message status');\n    }\n  };\n}\n\nexport function fetchWhatToBring(eventId) {\n  eventId = eventId || window.event_id;\n  const url = urls.getAPI('api_wtb', {eventId});\n  return apiFetcher(url, null, actions.FETCH_WTB, null);\n}\n\nexport function removeOtherWhatToBringItem(eventId, wtbListId, itemId) {\n  eventId = eventId || window.event_id;\n  const url = urls.getAPI('api_wtb_remove_other', {eventId, wtbListId, itemId});\n  return apiFetcher(url, null, actions.WTB_REMOVE_OTHER, null, {\n    wtbListId,\n  });\n}\n\nexport function postWhatToBringSignup(\n  eventId,\n  wtbListId,\n  itemId,\n  quantity,\n  {userId, userName, itemName = ''}\n) {\n  eventId = eventId || window.event_id;\n  userId = userId || window.user_id;\n  userName = userName || '';\n  const url = urls.getAPI('api_wtb_signup', {\n    eventId,\n    wtbListId,\n    itemId,\n    quantity,\n    itemName,\n  });\n  return apiFetcher(url, null, actions.WTB_UPDATED, null, {\n    userId,\n    userName,\n    itemId,\n    itemName,\n  });\n}\n\nexport function removeUserSignUp(eventId, wtbListId, itemId) {\n  eventId = eventId || window.event_id;\n  const userId = window.user_id || '';\n  const url = urls.getAPI('api_wtb_remove_user_signup', {\n    eventId,\n    wtbListId,\n    itemId,\n  });\n\n  return apiFetcher(url, null, actions.WTB_REMOVE_USER_SIGNUP, null, {\n    eventId,\n    wtbListId,\n    itemId,\n    userId,\n  });\n}\n","function dispatchActions(dispatch, action, actionPayload) {\n  // Dispatches one or more actions based on type of actions parameter (string, function or array)\n  if (!action) return;\n  if (Array.isArray(action)) {\n    for (const item of action) dispatchActions(dispatch, item, actionPayload);\n    return;\n  }\n  if (typeof action === 'string') return dispatch({type: action, ...actionPayload});\n  if (typeof action === 'function')\n    return dispatch((dispatch, getState) => {\n      action(dispatch, getState, actionPayload);\n    });\n}\n\nfunction reportDataLayer(dataLayer) {\n  // TODO: Not used at the moment - I think we want to control the dataLayer pushes from the front-end, not the\n  // TODO: ajax api.  Remove?\n  if (!dataLayer) return;\n  setTimeout(() => {\n    evite\n      .when('dfp')\n      .then(() => {\n        if (window.dataLayer) {\n          window.dataLayer.push(dataLayer);\n        }\n      })\n      .catch((e) => {\n        evite.error('Failed to update dataLayer');\n        Raven.captureException(e);\n      });\n  }, 100);\n}\n\nexport function apiFetcher(\n  resource, // url or {url, method, payload}\n  startAction,\n  successAction,\n  failureAction,\n  actionPayload, // data to include in the start/success/failure actions\n  retries = 3\n) {\n  let method = 'GET';\n  let payload;\n  let url;\n  let contentType = 'application/json';\n\n  if (typeof resource === 'string') {\n    url = resource;\n  } else {\n    method = resource.method || method;\n    payload = resource.payload || payload;\n    url = resource.url;\n    contentType = resource.contentType || contentType;\n  }\n  actionPayload = actionPayload || {};\n  return async function (dispatch, getState) {\n    // TODO: prevent multiple simultaneous calls to same API endpoint?\n    // TODO: automatically track an inProgress state for each API endpoint?\n    let results = {};\n    try {\n      dispatchActions(dispatch, startAction, {url, ...actionPayload});\n      var response = await fetch(url, {\n        method,\n        cache: 'no-store',\n        headers: {\n          'Content-Type': contentType,\n          Accept: 'application/json',\n          'X-Evite-Guest-Id': window.guest_id,\n        },\n        body: payload && contentType.indexOf('json') >= 0 ? JSON.stringify(payload) : payload,\n      });\n\n      if (!response.ok) {\n        evite.error(`Failed to retry fetch ${url}`);\n        if (response.status >= 500 && retries > 0) {\n          return apiFetcher(resource, null, successAction, failureAction, retries - 1);\n        }\n        try {\n          results = await response.json();\n        } catch (e) {}\n        throw response.status;\n      }\n      try {\n        results = await response.json();\n        // reportDataLayer(results && results.data_layer);  Todo: remove?\n      } catch (e) {\n        evite.error('Unable to parse JSON response - proceeding as if empty response', e);\n      }\n      const message = results.message || results;\n      dispatchActions(dispatch, successAction, {\n        results: message,\n        ...actionPayload,\n      });\n    } catch (e) {\n      evite.error(`Failed to fetch ${url}`, e);\n      dispatchActions(dispatch, failureAction, {\n        error: e,\n        response,\n        results,\n        ...actionPayload,\n      });\n    }\n  };\n}\n","export const SET_AVATARS = 'ViewInvitation/avatars/set_avatars';\nexport const UPDATE_AVATARS = 'ViewInvitation/avatars/update_avatars';\n\nexport function selectAvatar(userId) {\n  return (state) => state?.avatars?.userAvatars[userId] ?? '';\n}\n\nconst initialState = {\n  userAvatars: {},\n  avatarsFetched: false,\n};\n\nexport function reducer(state = initialState, action) {\n  switch (action.type) {\n    case SET_AVATARS:\n      let avatars = {...(action.avatars || action.results)};\n      delete avatars.data_layer;\n      return {\n        userAvatars: avatars,\n        avatarsFetched: true,\n      };\n    case UPDATE_AVATARS:\n      avatars = {...(action.avatars || action.results)};\n      delete avatars.data_layer;\n      return {\n        userAvatars: {\n          ...state.userAvatars,\n          ...avatars,\n        },\n        avatarsFetched: true,\n      };\n    default:\n      return state;\n  }\n}\n","export const UPDATE_INVITATION_SUMMARY = 'ViewInvitation/*/UpdateInvitationSummary';\nexport const FETCH_INVITATION_SUMMARY_STARTED = 'ViewInvitation/*/FetchInvitationSummaryStarted';\nexport const FETCH_INVITATION_SUMMARY_FAILED = 'ViewInvitation/*/FetchInvitationSummaryFailed';\nexport const UPDATE_GUESTLIST = 'ViewInvitation/*/UpdateGuestList';\n\nexport const SUBMIT_RSVP = 'ViewInvitation/*/SubmitRSVP';\nexport const SUBMIT_RSVP_STARTED = 'ViewInvitation/*/SubmitRSVPStarted';\nexport const SUBMIT_RSVP_FAILED = 'ViewInvitation/*/SubmitRSVPFailed';\n\nexport const SET_EVITE_EVENT = 'ViewInvitation/*/setEviteEvent';\n\nexport const GUEST_NOTIFICATIONS_UPDATED = 'ViewInvitation/*/GuestNotificationsUpdated';\nexport const EVENT_REMINDERS_UPDATED = 'ViewInvitation/*/EventRemindersUpdated';\n\nexport const EVENT_OPTIONS_UPDATED = 'ViewInvitation/*/EventOptionsUpdated';\n\nexport const DONATION_MADE = 'ViewInvitation/Donations/DonationMade';\nexport const TURN_ON_DONATION_LOADING = 'ViewInvitation/Donations/TurnOnDonationLoading';\nexport const TURN_OFF_DONATION_LOADING = 'ViewInvitation/Donations/TurnOffDonationLoading';\n\nexport const FETCH_PHOTOS = 'ViewInvitation/*/FetchMorePhotos';\nexport const FETCH_SINGLE_PHOTO_POST = 'ViewInvitation/*/FetchSinglePhotoPost';\nexport const UPLOAD_PHOTOS = 'ViewInvitation/*/UploadPhotos';\n\nexport const POLL_VOTE_UPDATED = 'ViewInvitaion/Polls/PollVoteUpdated';\nexport const ADD_STAGED_PHOTO = 'upload_photos/add_staged_file';\nexport const ADD_PENDING_PHOTO = 'upload_photos/add_pending_file';\nexport const CLEAR_PENDING_PHOTOS = 'upload_photos/clear_pending_files';\nexport const TOGGLE_PHOTO_SELECTED = 'upload_photos/toggle_photo_selected';\nexport const SET_FILE_FAILED = 'upload_photos/set_pending_file_failed_to_stage';\n\nexport const FETCH_WTB = 'ViewInvitation/WTB/FetchWhatToBringDetail';\nexport const WTB_UPDATE_SELECTIONS = 'ViewInvitation/WTB/UpdateSelections';\nexport const WTB_RESET_SELECTIONS = 'ViewInvitation/WTB/ResetSelections';\nexport const WTB_TOGGLE_EDITING = 'ViewInvitation/WTB/ToggleEditing';\n\nexport const WTB_UPDATED = 'ViewInvitation/WTB/Updated';\nexport const WTB_REMOVE_USER_SIGNUP = 'ViewInvitation/WTB/RemoveUserSignUp';\nexport const WTB_ADDED_OTHER = 'ViewInvitation/WTB/AddOtherItem';\nexport const WTB_REMOVE_OTHER = 'ViewInvitation/WTB/RemoveOtherItem';\nexport const INIT_PREMIUM_DESIGN = 'ViewInvitation/premiumDesign/INIT';\n\nexport const TURN_ON_READONLY_PREVIEW = 'ViewInvitation/preview/turnOnReadonly';\n","// Just a super thin wrapper over the cover_data passed in via the window\n// Should probably only be used by the invitation display widgets.\n\nconst INIT_COVER_DATA = 'ViewInvitation/coverData/init';\n\nconst initialState = {};\n\nexport function initCoverData(cover_data) {\n  return {\n    type: INIT_COVER_DATA,\n    cover_data,\n  };\n}\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case INIT_COVER_DATA:\n      return {\n        ...action.cover_data,\n        template: {\n          ...action.cover_data.template,\n          colors:\n            action.cover_data.template.colors.length > 0\n              ? action.cover_data.template.colors\n              : ['white'],\n        },\n      };\n\n    default:\n      return state;\n  }\n}\n","import {\n  UPDATE_INVITATION_SUMMARY,\n  DONATION_MADE,\n  TURN_ON_DONATION_LOADING,\n  TURN_OFF_DONATION_LOADING,\n} from './constants';\n\nconst initialState = {\n  donations: [],\n  loading: false,\n};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case UPDATE_INVITATION_SUMMARY: {\n      const {donation, donations} = action.results;\n      if (donations?.data && donations.data.length >= 1) {\n        // new api\n        return {\n          ...initialState,\n          donations: donations.data,\n        };\n      }\n      // old api\n      if (!donation || Object.keys(donation) <= 1)\n        return {\n          ...initialState,\n          donations: [],\n        };\n      if (!Array.isArray(donation)) {\n        return {\n          ...initialState,\n          donations: [donation],\n        };\n      }\n      return {\n        ...initialState,\n        donations: [...donation],\n      };\n    }\n    case DONATION_MADE:\n      const {donationAddedCents, donationUrl} = action.results;\n      // const donationAddedCents = action.results;\n      const donations = [...state.donations];\n      const index = donations.findIndex((d) => d.donation_url === donationUrl);\n      if (index >= 0) {\n        donations[index].amount_raised_cents += donationAddedCents;\n        donations[index].total_donors++;\n      }\n      return {\n        ...state,\n        donations,\n      };\n    case TURN_ON_DONATION_LOADING:\n      return {\n        ...state,\n        loading: true,\n      };\n    case TURN_OFF_DONATION_LOADING:\n      return {\n        ...state,\n        loading: false,\n      };\n    default:\n      return state;\n  }\n}\n","import {\n  EVENT_REMINDERS_UPDATED,\n  SET_EVITE_EVENT,\n  TURN_ON_READONLY_PREVIEW,\n  UPDATE_INVITATION_SUMMARY,\n} from './constants';\nimport {\n  fabricDesignWithCrossOriginUpdates,\n  fabricDesignWithTextBorderObjectsRemoved,\n  getUsedAsTypeName,\n  isCanceled,\n  isPast,\n  isRsvpOff,\n} from '~/common/utils/event_utils';\n\nconst initialState = {\n  eventId: '',\n  eventType: '',\n  city: '',\n  hostName: '',\n  title: '',\n  hostUserId: '',\n  locationName: '',\n  messageFromHost: '',\n  start: '',\n  end: '',\n  state: '',\n  streetAddress: '',\n  zipCode: '',\n  hasPassed: false,\n  shortLink: '',\n  phoneNumber: '',\n  status: '',\n  usedAs: '', // 'card' or 'invitation' or 'save_the_date'\n  rsvpStyle: {yes: '', no: '', maybe: '', who: ''},\n  isPremium: null,\n  removeAds: null,\n  widgets: [],\n  pledgeling_data: {},\n  videoId: null,\n  // Host controls\n  reminders: [],\n  readonly: false, // Readonly preview mode flag\n  // >>>>>> event.options\n  allowGifts: !window.isProUser && !window.isPartyPassUser,\n  allowInviteMore: false,\n  allowGuests: 0,\n  allowKids: false,\n  maxGuests: 100, // this is the number of *additional* people coming with the invited guest\n  maxTotalGuests: 750,\n  privateGuestlist: false,\n  guestsOfHonor: [],\n  // <<<<<< event.options\n  /* Lets try not to access _evite_event this directly in components.\n   * Either hoist useful stuff to the top level or use selectors to grab stuff */\n  _evite_event: {},\n  isInvite: true,\n  host_name: '',\n  sentTo: '',\n};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case SET_EVITE_EVENT:\n      const event = {...action.evite_event, rsvp: undefined};\n\n      const reminders = [];\n      if (event.event_reminder_0) {\n        reminders.push(event.event_reminder_0);\n      }\n      if (event.event_reminder_1) {\n        reminders.push(event.event_reminder_1);\n      }\n      return {\n        ...state,\n        _evite_event: event,\n        allowGifts: !!event.options.event_option_show_gifting,\n        allowGuests: event.options.event_option_allow_guest_number,\n        allowInviteMore: event.options.event_option_allow_invite_more,\n        allowKids: event.options.event_option_allow_kids,\n        design: event.options.design,\n        eventId: event.id,\n        eventType: event.event_type,\n        /* TODO: Why do we have the design data here, and in the fabricDesign reducer???\n         * TODO: Need to double check the embedded create flow preview and make sure removing fabric_design_data\n         * TODO: doesn't break something there.\n         */\n        fabric_design_data: fabricDesignWithTextBorderObjectsRemoved(\n          fabricDesignWithCrossOriginUpdates(event.fabric_design_data)\n        ),\n        hasDonations: Boolean(event.pledgeling_id || event.pledgeling_purpose),\n        hasPassed: window.event_has_passed || false,\n        isPremium: event.origin === 13 || event.is_fabric_premium,\n        maxGuests: event.options.event_option_max_guest_number || 100,\n        maxTotalGuests: event.options.event_option_max_guests || 750,\n        origin: event.origin,\n        pledgeling_data: {\n          pledgeling_added: event.pledgeling_added,\n          pledgeling_beneficiary: event.pledgeling_beneficiary,\n          pledgeling_beneficiary_type: event.pledgeling_beneficiary_type,\n          pledgeling_category: event.pledgeling_category,\n          pledgeling_goal: event.pledgeling_goal,\n          pledgeling_id: event.pledgeling_id,\n          pledgeling_purpose: event.pledgeling_purpose,\n        },\n        privateGuestlist: event.options.event_option_private_guestlist,\n        registriesData: event.gift_registries_data,\n        reminders,\n        removeAds: event.remove_ads || false,\n        rsvpOff: event.rsvp_off,\n        rsvpStyle: {...event.rsvp_style},\n        shortLink: event.shortlink,\n        status: event.status,\n        title: event.title,\n        usedAs: event.used_as,\n        videoId: event.event_videos_id,\n        widgets: event.widgets,\n        isInvite: event.is_invite,\n        host_name: event.host_name,\n        sentTo: event.sentTo,\n      };\n    case UPDATE_INVITATION_SUMMARY:\n      const details = action.results.event_details;\n      if (!details) {\n        return {\n          ...state,\n          reminders: [],\n          widgets: [],\n          pledgeling_data: {},\n        };\n      }\n\n      return {\n        ...state,\n        city: details.city,\n        hostName: details.host_name,\n        title: details.title,\n        hostUserId: details.host_user_id,\n        locationName: details.location_name,\n        messageFromHost: details.message_from_host,\n        start: details.start,\n        end: details.end,\n        state: details.state,\n        streetAddress: details.street_address,\n        zipCode: details.zip_code,\n        guestsOfHonor: details.guests_of_honor || [],\n        phoneNumber: details.host_phone || details.phoneNumber,\n      };\n    case EVENT_REMINDERS_UPDATED:\n      return {\n        ...state,\n        reminders: [...action.payload],\n      };\n    case TURN_ON_READONLY_PREVIEW:\n      return {\n        ...state,\n        readonly: true,\n      };\n    default:\n      return state;\n  }\n}\n\n// Selectors\nexport function selectEventHasPassed(state) {\n  // TODO is this more accurate than isPast(eventDetails.status) from event_utils?\n  return state.eventDetails.hasPassed;\n}\n\nexport function selectRsvpStyle(state) {\n  return state.eventDetails.rsvpStyle;\n}\n\nexport function selectEventHasRsvp(state) {\n  return (\n    !isRsvpOff(state.eventDetails?.rsvpOff) &&\n    !isCanceled(state.eventDetails?.status) &&\n    !isPast(state.eventDetails?.status) &&\n    !getUsedAsTypeName(state.eventDetails?.usedAs) === 'Card'\n  );\n}\n\nexport function setEviteEvent(evite_event) {\n  return {type: SET_EVITE_EVENT, evite_event};\n}\n","import {SET_EVITE_EVENT, EVENT_OPTIONS_UPDATED} from './constants';\n\nconst initialState = {};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case SET_EVITE_EVENT:\n      return {\n        ...state,\n        ...action.evite_event,\n      };\n    case EVENT_OPTIONS_UPDATED:\n      return {\n        ...state,\n        options: action.payload,\n      };\n    default: {\n      return state;\n    }\n  }\n}\n","import {\n  fabricDesignWithCrossOriginUpdates,\n  fabricDesignWithTextBorderObjectsRemoved,\n} from '~/common/utils/event_utils';\nimport {silver} from '~sass/pb_styleguide/base/_exports.sass';\nimport {Sections} from '~/common/fabric/CreateDesign/constants';\n\nconst SET_FABRIC_DESIGN = 'ViewInvitation/fabricDesign/setFabricDesign';\n\nconst initialState = {\n  originalFabricArt: {},\n  fabricArt: {},\n  backgroundId: null,\n  backgroundColor: silver,\n  stampId: 'evite01',\n  envelopeId: 'wht01',\n  linerId: '',\n  envelopeStickers: null,\n  currentSection: Sections.CARD_DESIGN,\n  loaded: false,\n  touched: false,\n  pristine: true,\n  pristineUyo: false,\n  hasTextbox: true,\n  editingMobile: false,\n  editingUyoMobile: false,\n  textAreaOpen: false,\n  savingStep: false,\n  forceShowOnboardingModal: false,\n  uyoImageId: undefined,\n  uyoImagePath: '',\n};\n\nexport function setFabricDesign(evite_event, template) {\n  const payload = {\n    event: evite_event,\n    template,\n  };\n  return {type: SET_FABRIC_DESIGN, payload};\n}\n\nexport const selectFabricArt = ({fabricDesign}) => fabricDesign.fabricArt;\n\nexport const selectEnvelopeStickers = ({fabricDesign}) => fabricDesign.envelopeStickers;\n\nexport const selectOriginalFabricArt = ({fabricDesign}) => fabricDesign.originalFabricArt;\n\nexport const selectBackgroundId = ({fabricDesign}) => fabricDesign.backgroundId;\n\nexport const selectBackgroundColor = ({fabricDesign}) => fabricDesign.backgroundColor;\n\nexport const selectStampId = ({fabricDesign}) => fabricDesign.stampId;\n\nexport const selectEnvelopeId = ({fabricDesign}) => fabricDesign.envelopeId || 'wht01';\n\nexport const selectLinerId = ({fabricDesign}) => fabricDesign.linerId;\n\nexport const selectCurrentSection = ({fabricDesign}) => fabricDesign.currentSection;\n\nexport const selectLoaded = ({fabricDesign}) => fabricDesign?.loaded ?? false;\n\nexport const selectTouched = ({fabricDesign}) => fabricDesign.touched;\n\nexport const selectPristine = ({fabricDesign}) => fabricDesign.pristine;\nexport const selectPristineUyo = ({fabricDesign}) => fabricDesign.pristineUyo;\n\nexport const selectHasTextbox = ({fabricDesign}) => fabricDesign.hasTextbox;\n\nexport const selectPremiumFeaturesPristine = ({fabricDesign}) =>\n  fabricDesign.premiumFeaturesPristine;\n\nexport const selectPremiumFeaturesWarning = ({fabricDesign}) => fabricDesign.premiumFeaturesWarning;\n\nexport const selectIgnorePremiumWarning = ({fabricDesign}) => fabricDesign.ignorePremiumWarning;\n\nexport const selectSavingStep = ({fabricDesign}) => fabricDesign.savingStep;\n\nexport const selectTextAreaOpen = ({fabricDesign}) => fabricDesign.textAreaOpen;\n\nexport const selectEditingMobile = ({fabricDesign}) => fabricDesign.editingMobile;\nexport const selectEditorDisabled = ({fabricDesign}) => fabricDesign.editorDisabled;\n\nexport const selectEditingUyoMobile = ({fabricDesign}) => fabricDesign.editingUyoMobile;\n\nexport const selectForceShowOnboardingModal = ({fabricDesign}) =>\n  fabricDesign.forceShowOnboardingModal;\n\nexport const selectSelectedEnvelope = (state) => {\n  const {envelopeId} = state.fabricDesign;\n  if (!envelopeId) return undefined;\n  for (const envelope of state.fabricTemplate.allEnvelopes)\n    if (envelope.id === envelopeId) return envelope;\n  return state.fabricTemplate.allEnvelopes[0];\n};\n\nexport const selectSelectedStamp = (state) => {\n  const {stampId} = state.fabricDesign;\n  if (!stampId) return undefined;\n  for (const stamp of state.fabricTemplate.allStamps) if (stamp.id === stampId) return stamp;\n  return state.fabricTemplate.allStamps[0];\n};\n\nexport const selectSelectedLiner = (state) => {\n  const {linerId} = state.fabricDesign;\n  if (!linerId) return undefined;\n  for (const liner of state.fabricTemplate.allLiners) if (liner.id === linerId) return liner;\n};\n\nexport const selectSelectedBackground = (state) => {\n  const {backgroundId} = state.fabricDesign;\n  if (!backgroundId) return undefined;\n  for (const bg of state.fabricTemplate.allBackgrounds) if (bg.id === backgroundId) return bg;\n};\n\nfunction _first_matching_art(art, category_list) {\n  for (const c of category_list) if (c && art[c]) return art[c];\n}\n\nexport const reducer = (state = initialState, action = {}) => {\n  switch (action.type) {\n    case SET_FABRIC_DESIGN:\n      const template = action.payload.template || {};\n      const event = action.payload.event || {};\n      const design = event?.options?.design;\n      const fabricDesign =\n        event?.fabric_design_data ??\n        _first_matching_art(template?.editable_art, [\n          action.payload.category_event_type,\n          template.event_type,\n          'default',\n        ]);\n      return {\n        ...state,\n        originalFabricArt: fabricDesignWithCrossOriginUpdates(\n          _first_matching_art(template?.editable_art, [\n            event?.event_type,\n            action.payload.category_event_type,\n            template.event_type,\n            'default',\n          ])\n        ),\n\n        fabricArt: fabricDesignWithTextBorderObjectsRemoved(\n          fabricDesignWithCrossOriginUpdates(fabricDesign)\n        ),\n        backgroundId: design?.background ?? template?.backgrounds?.[0],\n        backgroundColor: design?.background_color ?? template?.background_color ?? silver,\n        stampId: design?.stamp ?? template?.stamps?.[0],\n        envelopeId: design?.envelope ?? template?.envelopes?.[0],\n        linerId: design?.liner ?? template?.liners?.[0],\n        currentSection: Sections.CARD_DESIGN,\n        envelopeStickers: design?.envelope_fabric_stickers,\n        loaded: false,\n        touched: !!event?.id,\n        pristine: !event?.id,\n        premiumFeaturesPristine: !event?.id,\n        premiumFeaturesWarning: false,\n        ignorePremiumWarning: !!event?.id,\n        editingMobile: false,\n        editorDisabled: !!event?.id,\n        forceShowOnboardingModal: false,\n        uyoImageId: event?.options?.custom_image_id,\n      };\n    default:\n      return state;\n  }\n};\n","import {UPDATE_INVITATION_SUMMARY} from './constants';\n\nconst initialState = {};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case UPDATE_INVITATION_SUMMARY:\n      const {gifting} = action.results;\n      if (!gifting) return {};\n      // console.log('GIFTING', action.results);\n\n      return {\n        ...initialState,\n        ...gifting,\n      };\n    default:\n      return state;\n  }\n}\n","import {history} from '../history';\n\n// This file contains function functions operate on global state outside of the REDUX state tree.\n// This includes window variables, url parameters, cookies, localState, messaging store\n\nexport const updateGuestId = (guestId) => {\n  window.guest_id = guestId;\n\n  // Update the URL parameters with the gid\n  const {location} = history;\n  const params = new URLSearchParams(location.search);\n  params.set('gid', guestId);\n  history.replace({pathname: location.pathname, search: `?${params}`}, location.state);\n  const messaging = window.evite?.stores?.messaging;\n  if (messaging) messaging.guestId = guestId;\n};\n\nexport const updateUserId = (userId) => {\n  window.user_id = userId;\n  const messaging = window.evite?.stores?.messaging;\n  if (messaging) messaging.userId = userId;\n};\n\nexport const updateRsvp = (rsvp) => {\n  // Update the Messaging store if it has been loaded.\n\n  const messaging = window.evite?.stores?.messaging;\n  if (messaging) messaging.rsvpResponse = rsvp;\n\n  // Update the dataLayer\n  const responseLookup = {YES: 'y', NO: 'n', MAYBE: 'm'};\n  window.dataLayer.push({response: responseLookup[rsvp]});\n};\n","import {UPDATE_GUESTLIST} from './constants';\n\nconst initialState = {\n  rsvpCounts: {\n    adults_yes: 0,\n    adults_maybe: 0,\n    kids_yes: 0,\n    kids_maybe: 0,\n    yes: 0,\n    maybe: 0,\n    no: 0,\n    no_reply: 0,\n  },\n  rsvpDetails: {\n    maybe: [],\n    yes: [],\n    no_reply: [],\n    no: [],\n  },\n};\n\nexport function getGuestOptions(state) {\n  const event = state.eventDetails._evite_event;\n  return {canGuestsShare: event.options.event_option_allow_invite_more};\n}\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case UPDATE_GUESTLIST:\n      const guestList = action.results;\n      if (!guestList) return state;\n\n      return {\n        ...state,\n        rsvpDetails: guestList.rsvp_details,\n        rsvpCounts: guestList.rsvp_counts,\n      };\n\n    default:\n      return state;\n  }\n}\n","import {createStore, applyMiddleware, compose} from 'redux';\nimport thunk from 'redux-thunk';\nimport {rootReducer} from './reducers';\n\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\nconst createStoreWithMiddleware = composeEnhancers(applyMiddleware(thunk))(createStore);\n\nexport function createInvitationStore(initialState) {\n  return createStoreWithMiddleware(rootReducer, initialState);\n}\n","import {UPDATE_INVITATION_SUMMARY} from './constants';\n\nconst initialState = {\n  displayOrder: [],\n};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case UPDATE_INVITATION_SUMMARY:\n      const orderedModules = Object.entries(action.results)\n        .map(([m, v]) => [m, v.display_order])\n        .filter(([m, v]) => v !== undefined)\n        .sort(([m, v], [m2, v2]) => v - v2)\n        .map(([m, v]) => m);\n\n      // If both donation and donations are defined, just use donation;\n      // data wrangling is handled in donation reducer and stored in state.donation\n      if (orderedModules.includes('donation') && orderedModules.includes('donations')) {\n        const idx = orderedModules.findIndex((m) => m === 'donations');\n        if (idx >= 0) {\n          orderedModules.splice(idx, 1);\n        }\n      } else if (orderedModules.includes('donations')) {\n        // If only donations is defined, swap it out with donation\n        const idx = orderedModules.findIndex((m) => m === 'donations');\n        if (idx >= 0) {\n          orderedModules.splice(idx, 1, 'donation');\n        }\n      }\n      return {\n        displayOrder: orderedModules,\n      };\n    default:\n      return state;\n  }\n}\n","export const SET_NEW_MESSAGES = 'SET_NEW_MESSAGES';\n\nconst initialState = {\n  hasNewMessages: false,\n};\n\nexport function reducer(state = initialState, action) {\n  switch (action.type) {\n    case SET_NEW_MESSAGES:\n      const hasNewMessages =\n        action.responseText !== undefined ? action.responseText.status.has_unread : action.value;\n      return {\n        hasNewMessages,\n      };\n\n    default:\n      return state;\n  }\n}\n","import {FETCH_PHOTOS, FETCH_SINGLE_PHOTO_POST} from './constants';\n\nconst initialState = {\n  photoPostIds: [],\n  cursor: null,\n  more: true,\n};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case FETCH_PHOTOS:\n      const photos = action.results.posts.filter((p) => p.post_type === 'single_photo');\n      const {cursor} = action.results;\n      const {more} = action.results;\n      if (!photos) return {...state, cursor: null, more: true};\n\n      return {\n        ...state,\n        cursor,\n        more,\n        photoPostIds: state.photoPostIds.concat(\n          photos.map((p) => p.id).filter((id) => state.photoPostIds.indexOf(id) < 0)\n        ),\n      };\n    case FETCH_SINGLE_PHOTO_POST: {\n      const {postId} = action;\n      if (state.photoPostIds.indexOf(postId) >= 0) return state;\n      const photoPostIds = state.photoPostIds.slice();\n      photoPostIds.unshift(postId);\n      return {\n        ...state,\n        photoPostIds,\n      };\n    }\n\n    default:\n      return state;\n  }\n}\n","import {FETCH_SINGLE_PHOTO_POST, UPDATE_INVITATION_SUMMARY} from './constants';\n\nconst initialState = {\n  photos: [],\n};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case UPDATE_INVITATION_SUMMARY:\n      const photos = action.results.photo?.photos;\n      if (!photos) return state;\n\n      return {\n        ...state,\n        photos: photos.map((p) => ({\n          url: p.url,\n          id: p.id,\n        })),\n      };\n    case FETCH_SINGLE_PHOTO_POST: {\n      const {postId} = action;\n      const post = action.results;\n      if (!post.content?.url) return state;\n      if (state.photos.find((p) => p.id === postId)) return state;\n      const photos = state.photos.slice(0, 4);\n      photos.unshift({url: post.content.url, id: postId});\n      return {\n        ...state,\n        photos,\n      };\n    }\n\n    default:\n      return state;\n  }\n}\n","import {\n  ADD_STAGED_PHOTO,\n  ADD_PENDING_PHOTO,\n  CLEAR_PENDING_PHOTOS,\n  TOGGLE_PHOTO_SELECTED,\n  SET_FILE_FAILED,\n} from './constants';\n\nconst initialState = {\n  photosToUpload: [\n    // { file: FILE, selected: bool}\n  ],\n  staged: [\n    // { photoId: string, file: FILE, selected: bool},\n  ],\n  stagedCount: 0,\n  errorCount: 0,\n};\n\nexport function reducer(state = initialState, action) {\n  switch (action.type) {\n    case ADD_PENDING_PHOTO:\n      const photosToUpload = state.photosToUpload.slice();\n\n      photosToUpload.push({file: action.file, selected: true});\n      return {\n        ...state,\n        photosToUpload,\n      };\n\n    case ADD_STAGED_PHOTO:\n      const staged = state.staged.slice();\n      if (action.file.failed) {\n        staged.push(action.file);\n      } else {\n        staged.push({\n          photoId: action.photoId,\n          file: action.file,\n          selected: true,\n        });\n      }\n\n      return {\n        ...state,\n        staged,\n        photosToUpload: state.photosToUpload.filter((p) => p.file !== action.file),\n        stagedCount: state.staged.reduce(\n          (counter, {selected, failed}) =>\n            selected === true && !failed ? (counter += 1) : counter,\n          1\n        ),\n      };\n\n    case SET_FILE_FAILED:\n      const stagedWithFailed = state.staged.slice();\n\n      stagedWithFailed.push({\n        file: {\n          failed: true,\n          selected: false,\n        },\n      });\n\n      return {\n        ...state,\n        photosToUpload: state.photosToUpload.filter((p) => p.file !== action.file),\n        staged: stagedWithFailed,\n        stagedCount: state.stagedCount - 1,\n        errorCount: state.errorCount + 1,\n      };\n\n    case CLEAR_PENDING_PHOTOS:\n      return {...state, photosToUpload: [], staged: [], errorCount: 0};\n\n    case TOGGLE_PHOTO_SELECTED:\n      const {photoId} = action;\n      const newStaged = state.staged.map((p) =>\n        p.photoId === photoId ? {photoId, file: p.file, selected: !p.selected} : p\n      );\n\n      const stagedCount = newStaged.reduce(\n        (counter, {selected}) => (selected === true ? (counter += 1) : counter),\n        0\n      );\n\n      return {\n        ...state,\n        staged: newStaged,\n        stagedCount,\n      };\n\n    default:\n      return state;\n  }\n}\n","import {UPDATE_INVITATION_SUMMARY, POLL_VOTE_UPDATED, SUBMIT_RSVP} from './constants';\nimport {INIT_APP} from '~/common/fabric/constants';\nimport {CREATE_EDIT_POLL} from '~/common/fabric/reducers/widgets';\n\nconst initialState = {\n  question: '',\n  options: [],\n  Id: 0,\n  optionSelectedByUser: null,\n};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case INIT_APP:\n      return {\n        ...state,\n        ...window?.event_widgets?.polls?.[0],\n      };\n    case CREATE_EDIT_POLL:\n      return {\n        ...state,\n        ...action?.payload?.polls?.[0],\n      };\n    case POLL_VOTE_UPDATED:\n      state = action.results;\n      return state;\n    case SUBMIT_RSVP:\n      return {\n        ...state,\n        hasSubmittedRSVP: true,\n      };\n    case UPDATE_INVITATION_SUMMARY:\n      const {poll} = action.results;\n      if (!poll || !poll.question || !poll.id) return {initialState};\n      return {\n        ...poll,\n      };\n    default:\n      return state;\n  }\n}\n","import {UPDATE_GUESTLIST, FETCH_PHOTOS, FETCH_SINGLE_PHOTO_POST} from './constants';\n\nexport const LIKED_POST = 'ViewInvitation/posts/like';\nexport const UNLIKED_POST = 'ViewInvitation/posts/unlike';\nexport const POST_REPLY = 'ViewInvitation/posts/reply';\nexport const EDIT_POST = 'ViewInvitation/posts/edit';\nexport const DELETE_POST = 'ViewInvitation/posts/delete';\n\nconst initialState = {\n  /*\n  postId: {\n    userId: '0000ANACBWOYFIQXQEPK6IHPM3ONOA',\n    likedBy: [],\n    comment: 'me too! Thanks for hosting!',\n    guestName: 'Some Guest',\n    viewDate: '',\n    when: 'just now',\n    parentPostId: null,\n    replyIds: [],\n    mentions: [],\n    postType: 'single_photo',\n  },\n  */\n};\n\nexport function selectPost(postId) {\n  return (state) => state.posts[postId];\n}\n\nfunction* _rsvpsFromGuestList(details) {\n  for (const response of ['yes', 'no', 'maybe']) for (const rsvp of details[response]) yield rsvp;\n}\n\nfunction _extractPost(post, parentId) {\n  let replyIds = [];\n\n  if (post.replies && Array.isArray(post.replies)) {\n    replyIds = post.replies.map((r) => r.post_id);\n  } else if (post.replies && post.replies.objects) {\n    replyIds = post.replies.objects.map((r) => r.id);\n  }\n\n  let likedBy = [];\n  if (Array.isArray(post.liked_by)) likedBy = post.liked_by;\n  else if (typeof post.liked_by === 'object') likedBy = Object.keys(post.liked_by);\n\n  let guestName = post.guest_name || post.guestName || '';\n  if (!guestName && post.creator)\n    guestName = `${post.creator.first_name} ${post.creator.last_name}`.trim();\n\n  return {\n    postId: post.id,\n    photoUrl: post.post_type === 'single_photo' ? post.content.url : undefined,\n    userId: post.user_id || post.creator_id,\n    likedBy,\n    comment: post.rsvp_comment || post.comment || '',\n    guestName,\n    creatorName: post.creator ? post.creator.first_name + post.creator.last_name : '',\n    viewDate: post.viewDate || post.date_viewed || '',\n    when: post.rsvp_when || post.comment_when || post.created || 'just now',\n    parentPostId: parentId || String(post.parent_id),\n    replyIds,\n    mentions: post.mentions || [],\n    postType: post.post_type ? post.post_type : '',\n  };\n}\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case UPDATE_GUESTLIST:\n      // Extract the posts from the guestlist call\n      const details = action.results?.rsvp_details;\n      if (!details) return state;\n      const newPosts = {};\n      for (const rsvp of _rsvpsFromGuestList(details)) {\n        if (!rsvp.post_id) {\n          console.log('No Post id for rsvp', rsvp);\n          continue;\n        }\n        newPosts[rsvp.post_id] = _extractPost(rsvp);\n        for (const reply of rsvp.replies || []) {\n          newPosts[reply.post_id] = _extractPost(reply, rsvp.post_id);\n        }\n      }\n      return {\n        ...state,\n        ...newPosts,\n      };\n\n    case LIKED_POST: {\n      const {postId, userId} = action;\n      const post = state[postId];\n      return {\n        ...state,\n        [postId]: {\n          ...post,\n          likedBy: post.likedBy.concat([userId]),\n        },\n      };\n    }\n    case UNLIKED_POST: {\n      const {postId, userId} = action;\n      const post = state[postId];\n      return {\n        ...state,\n        [postId]: {\n          ...post,\n          likedBy: post.likedBy.filter((id) => id !== userId),\n        },\n      };\n    }\n    case POST_REPLY: {\n      const {postId: parentPostId, results: reply} = action;\n      const parentPost = state[parentPostId];\n      const replyPost = _extractPost(reply);\n      const replyId = String(reply.id);\n      return {\n        ...state,\n        [parentPostId]: {\n          ...parentPost,\n          replyIds: parentPost.replyIds.concat([replyId]),\n        },\n        [replyId]: replyPost,\n      };\n    }\n    case EDIT_POST: {\n      const {postId, results} = action;\n      const updatedPost = _extractPost(results);\n      return {\n        ...state,\n        [postId]: updatedPost,\n      };\n    }\n    case DELETE_POST: {\n      const {postId} = action;\n      const {parentPostId} = state[postId];\n      if (!!parentPostId && parentPostId !== 'undefined' && parentPostId !== 'null') {\n        const parentPost = state[parentPostId];\n\n        if (parentPost && !parentPost.replyIds) {\n          parentPost.replyIds = [];\n        }\n        const filteredReplies = parentPost ? parentPost.replyIds.filter((id) => id !== postId) : [];\n        console.log(\n          'just in case: parentPost, parentPostId, filteredReplies',\n          parentPost,\n          parentPostId,\n          filteredReplies\n        );\n        return {\n          ...state,\n          [postId]: undefined,\n          [parentPostId]: {\n            ...parentPost,\n            replyIds: filteredReplies || [],\n          },\n        };\n      }\n      return {\n        ...state,\n        [postId]: undefined,\n      };\n    }\n\n    case FETCH_PHOTOS: {\n      const newPosts = {};\n      for (const photo of action.results.posts) {\n        newPosts[photo.id] = _extractPost(photo);\n        for (const reply of photo.replies.objects || []) {\n          newPosts[reply.id] = _extractPost(reply, photo.id);\n        }\n      }\n\n      return {\n        ...state,\n        ...newPosts,\n      };\n    }\n\n    case FETCH_SINGLE_PHOTO_POST: {\n      const {postId} = action;\n      const singlePost = {};\n      const post = action.results;\n\n      singlePost[postId] = _extractPost(post);\n\n      for (const reply of post.replies.objects || []) {\n        singlePost[reply.id] = _extractPost(reply, postId);\n      }\n\n      return {\n        ...state,\n        ...singlePost,\n      };\n    }\n\n    default:\n      return state;\n  }\n}\n","import {INIT_PREMIUM_DESIGN} from './constants';\n\nconst initialState = {\n  invitation: '',\n  envelope: {},\n  stamp: {},\n  customImage: {},\n  background: {},\n  liner: {},\n  inserts: [],\n  envelopeStickers: null,\n};\n\nexport function initPremiumDesign(payload) {\n  return {\n    type: INIT_PREMIUM_DESIGN,\n    payload,\n  };\n}\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case INIT_PREMIUM_DESIGN:\n      const {premiumDesign, inviteData} = action.payload;\n      if (premiumDesign) {\n        return {\n          ...state,\n          envelope: {\n            name: {\n              ...premiumDesign.name_style,\n            },\n            openBack: premiumDesign.envelope_flap_up,\n            closedBack: premiumDesign.envelope_flap_down,\n            closedFront: premiumDesign.envelope_front,\n          },\n          stamp: {\n            image: premiumDesign.stamp_image,\n          },\n          background: {\n            background: premiumDesign.background,\n            color: premiumDesign.background_color,\n            imageDesktop: premiumDesign.background_image_desktop,\n            imageMobile: premiumDesign.background_image_mobile,\n          },\n          liner: {\n            liner: premiumDesign.liner,\n            image: premiumDesign.liner_image,\n          },\n          envelopeStickers: premiumDesign.envelope_fabric_stickers ?? null,\n        };\n      }\n      if (inviteData) {\n        return {\n          ...state,\n          invitation: inviteData.invitation,\n          envelope: inviteData.envelope,\n          stamp: inviteData.stamp,\n          customImage: inviteData.customImage,\n          inserts: inviteData.event.inserts,\n        };\n      }\n    default:\n      return state;\n  }\n}\n","import {combineReducers} from 'redux';\nimport {reducer as moduleOrder} from './moduleOrder';\nimport {reducer as eviteEvent} from './eviteEvent';\nimport {reducer as eventDetails} from './eventDetails';\nimport {reducer as whoIsComing} from './whoIsComing';\nimport {reducer as gifting} from './gifting';\nimport {reducer as whatToBringSummary} from './whatToBringSummary';\nimport {reducer as whatToBring} from './whatToBring';\nimport {reducer as donation} from './donation';\nimport {reducer as poll} from './poll';\nimport {reducer as user} from './user';\nimport {reducer as guestList} from './guestList';\nimport {reducer as avatars} from './avatars';\nimport {reducer as rsvp} from './rsvp';\nimport {reducer as coverData} from './coverData';\nimport {reducer as registry} from './registry';\nimport {reducer as photoSummary} from './photoSummary';\nimport {reducer as photoPosts} from './photoPosts';\nimport {reducer as posts} from './posts';\nimport {reducer as newMessages} from './newMessages';\nimport {reducer as giftKeywords} from '../../common/gift-keywords/reducer';\nimport {reducer as photoUploads} from './photoUploads';\nimport {reducer as premiumDesign} from './premiumDesign';\nimport {reducer as fabricDesign} from './fabricDesign';\n\nexport const rootReducer = combineReducers({\n  moduleOrder,\n  eviteEvent,\n  eventDetails,\n  whoIsComing,\n  gifting,\n  whatToBringSummary,\n  whatToBring,\n  donation,\n  poll,\n  user,\n  guestList,\n  photoPosts,\n  photoSummary,\n  posts,\n  avatars,\n  rsvp,\n  coverData,\n  registry,\n  newMessages,\n  giftKeywords,\n  photoUploads,\n  premiumDesign,\n  fabricDesign,\n});\n","import {UPDATE_INVITATION_SUMMARY} from './constants';\n\nconst initialState = {\n  display_order: null,\n  registries: [\n    /* {vendor_name: \"\", url: \"\", icon_url: \"\"} */\n  ],\n  name: '',\n};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case UPDATE_INVITATION_SUMMARY:\n      return action.results?.gift_registry ?? {};\n    default:\n      return state;\n  }\n}\n","import * as actions from './constants';\n\nconst INIT_RSVP = 'ViewInvitation/rsvp/init';\n\nconst initialState = {\n  hasRsvpd: false,\n  rsvpResponse: '',\n  guestEmail: '',\n  emailMd5: '',\n  emailSha256: '',\n  totalAdults: 1,\n  totalKids: 0,\n  guestOf: '',\n  comment: '',\n  name: '',\n  optin: false,\n  showNotifyMarketing: true,\n  inGuestlist: false,\n  inviteMethod: '',\n  notifications: {},\n};\n\nexport function initRsvp(rsvp) {\n  const cd = window.client_data;\n  return {\n    type: INIT_RSVP,\n    rsvp,\n    emailMd5: cd.evc_h,\n    emailSha256: cd.evc_s256l,\n  };\n}\n\nfunction hasRsvpd(response) {\n  return ['yes', 'no', 'maybe'].indexOf(response) >= 0;\n}\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case INIT_RSVP:\n      let {rsvp} = action;\n      if (!rsvp) return state;\n      return {\n        ...state,\n        hasRsvpd: hasRsvpd(rsvp.response),\n        rsvpResponse: rsvp.response,\n        guestEmail: rsvp.email,\n        totalAdults: rsvp.number_of_adults,\n        totalKids: rsvp.number_of_kids,\n        comment: rsvp.comment,\n        name: rsvp.name,\n        optin: !!rsvp.optin,\n        optout: !!rsvp.optout,\n        showNotifyMarketing: !rsvp.optin,\n        inGuestlist: Boolean(rsvp.id),\n        inviteMethod: rsvp.invite_method,\n        notifications: {...rsvp.notifications},\n        emailMd5: action.emailMd5,\n        emailSha256: action.emailSha256,\n      };\n\n    case actions.SUBMIT_RSVP:\n      rsvp = action.results.guest;\n      return {\n        ...state,\n        hasRsvpd: hasRsvpd(rsvp.response),\n        rsvpResponse: rsvp.response,\n        guestEmail: rsvp.email,\n        totalAdults: rsvp.number_of_adults,\n        totalKids: rsvp.number_of_kids,\n        comment: rsvp.comments,\n        name: rsvp.name,\n        optin: !!rsvp.optin,\n        showNotifyMarketing: !rsvp.optin,\n        inGuestlist: Boolean(rsvp.id),\n        inviteMethod: rsvp.invite_method,\n        notifications: {...rsvp.notifications},\n        emailMd5: action.results.email_md5,\n        emailSha256: action.results.email_sha256,\n      };\n    case actions.SUBMIT_RSVP_FAILED:\n      return state;\n    case actions.GUEST_NOTIFICATIONS_UPDATED:\n      const {notifications} = action.results;\n      return {\n        ...state,\n        notifications,\n      };\n    default:\n      return state;\n  }\n}\n","import urls from 'urls';\nimport * as actions from './constants';\nimport {apiFetcher} from './apiFetcher';\nimport {\n  GCS_PATH_IDS,\n  upload_file_gcs,\n  request_access,\n  getImageKeyFromPath,\n} from '~/common/storage/gcs_storage';\nimport {handleCaptcha} from '~/ViewInvitation/utils';\nimport {fetchSinglePhotoPost} from './apiActions.js';\n\nexport function stageAPhoto(file, callback) {\n  /*\n  * file = {\n      lastModified: 1628299616252\n      lastModifiedDate: Fri Aug 06 2021 18:26:56 GMT-0700 (Pacific Daylight Time) {}\n      name: \"gus.jpg\"\n      size: 23721\n      type: \"image/jpeg\"\n      webkitRelativePath: \"\"\n    }\n  * */\n\n  const eventId = window.event_id;\n  const guestId = window.guest_id || '';\n\n  function preparePhoto(dispatch, getState) {\n    return new Promise((resolve, reject) => {\n      const path = GCS_PATH_IDS.feed_photos;\n      const params = {\n        event_id: eventId,\n        photo_id: '',\n        guest_id: guestId,\n      };\n      const body = {redirect: true, mimetype: file.type};\n\n      request_access(path, params, body).then((upload_request) => {\n        window.uploadXhr = upload_file_gcs(upload_request, file)\n          .then(() => {\n            const photoId = getImageKeyFromPath(upload_request.gcs_path);\n            console.log('Uploaded photo:', photoId);\n            dispatch({\n              type: actions.ADD_STAGED_PHOTO,\n              photoId,\n              file,\n            });\n            resolve(photoId);\n          })\n          .catch((e) => {\n            console.error('UPLOAD FAILED, ', e);\n            reject(e);\n            callback(file);\n          })\n          .finally(() => {});\n      });\n    });\n  }\n  return preparePhoto;\n}\n\nexport function postPhotos(photoIds, photoComment, tags, mentions, captcha) {\n  const eventId = window.event_id;\n  const guestId = window.guest_id || '';\n  /* let request = {\n    url: `/ajax/event/${eventId}/posts/photos/?gid=${guestId}`,\n    method: 'POST',\n    payload: payload,\n  }; */\n\n  function doPostPhotos(dispatch, getState) {\n    const url = `/ajax/event/${eventId}/posts/photos/?gid=${guestId}`;\n    const formData = new FormData();\n    formData.append('photo_ids', JSON.stringify(photoIds));\n    if (photoComment) {\n      formData.append('comment', photoComment.trim());\n    }\n    if (tags) {\n      formData.append('tags', JSON.stringify(tags));\n    }\n    if (mentions) {\n      formData.append('mentions', JSON.stringify(mentions));\n    }\n    if (captcha) {\n      formData.append('captcha', captcha);\n    }\n    console.log('Create post with photo ids:', photoIds);\n    return new Promise((resolve, reject) => {\n      window.uploadXhr = window.$.ajax({\n        url,\n        data: formData,\n        type: 'POST',\n        cache: false,\n        contentType: false,\n        processData: false,\n      })\n        .fail((jqXHR, textStatus, errorThrown) => {\n          if (jqXHR.status === 412) {\n            console.log('Handle captcha, then post again.');\n            handleCaptcha(jqXHR, textStatus, errorThrown, (captcha) => {\n              doPostPhotos(photoIds, photoComment, tags, mentions, captcha).then(resolve);\n            });\n          } else {\n            console.error('CREATE POST FAIL:', {\n              jqXHR,\n              textStatus,\n              errorThrown,\n            });\n            reject();\n          }\n        })\n        .done((response) => {\n          if (response.post_type === 'multi_photo') {\n            for (let i = 0; i < response.content.objects.length; i++) {\n              // TODO: consolidate the multiple fetch calls to a single api call that retrieves the whole list\n              dispatch(fetchSinglePhotoPost(eventId, response.content.objects[i].id, null));\n            }\n          } else {\n            console.log('Adding single photo post:', response);\n            dispatch({\n              type: actions.FETCH_SINGLE_PHOTO_POST,\n              results: response,\n              postId: response.id,\n            });\n          }\n          window.dataLayer.push({\n            event: 'postphoto',\n            photoCount: photoIds.length,\n          });\n\n          resolve(response);\n        })\n        .always\n        // thisFileUploaderStore.resetFileUploader\n        ();\n    }).catch((e) => {\n      /* insert error callback here */\n    });\n  }\n  return doPostPhotos;\n  // return apiFetcher(url, null, [actions.ADD_STAGED_PHOTO, callback], null);\n}\n","import {SUBMIT_RSVP} from './constants';\n\nconst INIT_FROM_CLIENT_DATA = 'ViewInvitation/user/initUser';\n\nconst initialState = {\n  userId: '',\n  guestId: '',\n  name: '',\n  email: '',\n  isHost: false,\n  isRegistered: false,\n};\n\nexport function initUser(viewingUser) {\n  return {\n    type: INIT_FROM_CLIENT_DATA,\n    viewingUser,\n  };\n}\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case INIT_FROM_CLIENT_DATA:\n      return {\n        ...state,\n        ...action.viewingUser,\n      };\n    case SUBMIT_RSVP:\n      const {guest} = action.results;\n      return {\n        ...state,\n        guestId: guest.id,\n        userId: guest.user_id,\n        // The RSVP response's 'host' value is not reliable so we\n        // keep the existing isHost flag unless the guestId changes.\n        isHost: state.guestId === guest.id ? state.isHost : false,\n        name: guest.name,\n        email: guest.email,\n        isRegistered: action.results.is_registered_user,\n      };\n    default:\n      return state;\n  }\n}\n","import {\n  FETCH_WTB,\n  WTB_UPDATE_SELECTIONS,\n  WTB_RESET_SELECTIONS,\n  WTB_TOGGLE_EDITING,\n  WTB_UPDATED,\n  WTB_ADDED_OTHER,\n  WTB_REMOVE_OTHER,\n} from './constants';\n\nconst initialState = {\n  items: [\n    // {\n    //   id: '',\n    //   name: '',\n    //   quantity: 0,\n    //   remaining: 10,\n    //   selections: [\n    //     {\n    //       user: {\n    //         id: '',\n    //         first_name: '',\n    //       },\n    //       quantity: 5,\n    //     }\n    //   ],\n    //   creator_id: '',\n    // }\n  ],\n  allowOther: false,\n  isEditing: false,\n  pendingSelections: [],\n  creatorId: '',\n};\n\nexport function getItemQuantityForUser(itemId, userId) {\n  return (state) => {\n    const wtb = state.whatToBring;\n    if (!wtb) return 0;\n    const item = wtb.items.find((i) => i.id === itemId);\n    if (!item) return 0;\n    const selection = item.selections.find((s) => s.user?.id === userId);\n    if (!selection) return 0;\n    return selection.quantity;\n  };\n}\n\nexport function selectWTBItem(itemId) {\n  /*\n  Returns a consolidated WTB item\n  {\n    id:\n    name:\n    participantsList: [{guest_name, quantity, user_id}]\n  }\n   */\n  return (state) => {\n    const wtb = state.whatToBring;\n    const item = wtb.items.find((i) => i.id === itemId);\n    return {\n      id: item.id,\n      remaining: item.remaining,\n      quantity: item.quantity,\n      name: item.name,\n      participantsList: item.selections.map((s) => ({\n        guest_name: s.user.first_name,\n        user_id: s.user.id,\n        quantity: s.quantity,\n      })),\n    };\n  };\n}\n\nexport function reducer(state = initialState, action = {}) {\n  let wtb = null;\n  switch (action.type) {\n    case FETCH_WTB:\n      wtb = action.results.wtb_lists;\n      if (!wtb) return state;\n\n      return {\n        ...state,\n        creatorId: wtb[0].creator_id,\n        allowOther: wtb[0].allow_other_items,\n        items: wtb[0].items || [],\n      };\n\n    case WTB_TOGGLE_EDITING:\n      return {...state, isEditing: !state.isEditing};\n\n    case WTB_RESET_SELECTIONS:\n      return {...state, isEditing: false, pendingSelections: []};\n\n    case WTB_UPDATE_SELECTIONS:\n      const {type, item} = action.payload;\n      const {pendingSelections} = state;\n\n      const foundSelection = pendingSelections.find((obj) => obj.id === item.id);\n\n      if (type === 'add' && !foundSelection) {\n        return {\n          ...state,\n          pendingSelections: [...pendingSelections, item],\n        };\n      }\n      if (type === 'update' && foundSelection) {\n        const updatedSelections = pendingSelections.map((sel) =>\n          sel.id === item.id ? {...item} : sel\n        );\n\n        return {\n          ...state,\n          pendingSelections: updatedSelections,\n        };\n      }\n      if (type === 'replace') {\n        return {\n          ...state,\n          isEditing: true,\n          pendingSelections: [{...action.payload.item}],\n        };\n      }\n      if (type === 'remove') {\n        const filteredSelections = pendingSelections.filter((obj) => obj.id !== item.id);\n        return {\n          ...state,\n          pendingSelections: [...filteredSelections],\n        };\n      }\n      return {...state};\n\n    case WTB_UPDATED:\n      wtb = action.results;\n      if (!wtb) return state;\n\n      return {\n        ...state,\n        creatorId: wtb.creator_id,\n        allowOther: wtb.allow_other_items,\n        items: wtb.items || [],\n      };\n\n    case WTB_ADDED_OTHER:\n      wtb = action.results;\n      return {\n        ...state,\n        creatorId: wtb.creator_id,\n        allowOther: wtb.allow_other_items,\n        items: wtb.items,\n      };\n\n    case WTB_REMOVE_OTHER:\n      wtb = action.results;\n      return {\n        ...state,\n        items: wtb.items,\n      };\n\n    default:\n      return state;\n  }\n}\n","import {UPDATE_INVITATION_SUMMARY, WTB_UPDATED} from './constants';\n\nconst initialState = {\n  participants: [],\n  listId: '',\n};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case UPDATE_INVITATION_SUMMARY:\n      const whatToBring = action.results.what_to_bring;\n\n      if (!whatToBring) return {};\n\n      return {\n        listId: whatToBring.list_id,\n        ...whatToBring,\n      };\n    case WTB_UPDATED:\n      const wtbItems = action.results.items || [];\n      const participants = [];\n\n      wtbItems.forEach((item) => {\n        if (item.selections.length > 0) {\n          item.selections.forEach((s) => {\n            participants.push({\n              user_id: s.user.id,\n              guest_name: s.user.first_name,\n              item_id: item.id,\n              item: item.name,\n              quantity: item.quantity,\n            });\n          });\n        }\n      });\n\n      return {\n        ...state,\n        participants,\n      };\n\n      /* TODO: extract the selections from action.results and translate into the participants format */\n      return state;\n    default:\n      return state;\n  }\n}\n","import {UPDATE_INVITATION_SUMMARY} from './constants';\n\nconst initialState = {\n  guestPreviews: [],\n};\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case UPDATE_INVITATION_SUMMARY:\n      const wic = action.results.who_is_coming;\n      if (!wic) return state;\n\n      return {\n        isPrivateGuestlist: wic.private_guestlist,\n        guestPreviews: wic.guest_previews.map((p) => ({\n          guestName: p.guest_name,\n          adults: p.adults,\n          kids: p.kids,\n          rsvpComment: p.rsvp_comment,\n          rsvpWhen: p.rsvp_when,\n          userId: p.user_id,\n          guestOfHonor: p.guest_of_honor,\n        })),\n      };\n    default:\n      return state;\n  }\n}\n","import React, {useEffect} from 'react';\nimport {useSelector} from 'react-redux';\nimport urls from 'urls';\nimport * as giftUtils from '~/view_invitation/gifts/utils';\nimport {triggerROKTOverlay, cleanupROKTOverlay} from '../../common/ROKT';\nimport {ScrollToTopOnMount} from '../../common/ScrollToTop';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {SuccessHeader} from '~/event/success/SuccessHeader';\nimport {Checklist} from '~/common/components/Checklist/Checklist';\nimport './rsvpConfirmation.sass';\nimport {AddToCalendar} from '~/ViewInvitation/common/AddToCalendar';\nimport {hasRegistry} from '~/common/utils';\n\nexport function RSVPConfirmation() {\n  const {allowGifts, eventType, isPremium, registriesData, eventId} = useSelector(\n    ({eventDetails: ed}) => ({\n      allowGifts: ed.allowGifts,\n      eventType: ed.eventType,\n      isPremium: ed.isPremium,\n      registriesData: ed.registriesData ?? false,\n      eventId: ed.eventId,\n    })\n  );\n  const {\n    rsvpResponse,\n    guestEmail: email,\n    userId,\n    emailMd5,\n    emailSha256,\n  } = useSelector(({rsvp}) => rsvp);\n  const roktAttributes = {email, userId, emailMd5, emailSha256};\n  const {isHost, guestId} = useSelector(({user}) => user);\n  const addToCalendarUrl = urls.get('add_to_calendar');\n  const viewInvitationUrl = urls.get('view', {event_id: eventId});\n  const viewInvitationUrlWithGuest = `${viewInvitationUrl}?gid=${guestId}`;\n  const isFuneral = eventType === 'funeral_memorial_service';\n\n  const responseMap = {\n    yes: isFuneral ? \"Yes, you're going\" : \"Yes! You're going.\",\n    maybe: \"You RSVP'd maybe\",\n    no: \"You're not attending\",\n  };\n  const heading = responseMap[rsvpResponse];\n\n  const eventHasRegistry = hasRegistry(registriesData);\n  const showCheckList = !isFuneral && !isHost && (allowGifts || eventHasRegistry);\n\n  useEffect(() => {\n    // if (!isPremium) { // EVT-23539 show to Premium guests after RSVP\n    triggerROKTOverlay(`${isPremium ? 'premium-RSVP' : 'reinvention-RSVP'}`, roktAttributes);\n    return cleanupROKTOverlay;\n    // }\n  }, []);\n\n  return (\n    <div className=\"rsvp-confirmation__wrapper abtest-reskin\">\n      <ScrollToTopOnMount />\n      <div className=\"rsvp-confirmation\">\n        <SuccessHeader\n          heading={heading}\n          isFuneral={isFuneral}\n          ctaText=\"View Invitation\"\n          cta={viewInvitationUrlWithGuest}\n          qaId=\"button-view\"\n          fullWidth\n          showImage={false}\n          textClass={`rsvp-confirmation__heading rsvp-confirmation__heading--${rsvpResponse}`}\n        />\n        {rsvpResponse !== 'no' && (\n          <div className=\"rsvp-confirmation__add-to-calendar\">\n            <AddToCalendar\n              title=\"Add to Calendar\"\n              ratio={0.5}\n              data-qa-id=\"rsvp-confirmation__add_to_calendar\"\n            />\n          </div>\n        )}\n      </div>\n\n      {showCheckList && (\n        <>\n          <Divider marginTop={24} marginBottom={24} />\n          <Checklist isReskin allowGifts={allowGifts} eventHasRegistry={eventHasRegistry} />\n        </>\n      )}\n\n      {/* /!* Placeholder for rokt to render into for inline placements. *!/ */}\n      <div id=\"rokt-placeholder\" style={{width: '100%'}} />\n    </div>\n  );\n}\n","import React, {useEffect} from 'react';\nimport {useSelector} from 'react-redux';\nimport urls from 'urls';\nimport {ScrollToTopOnMount} from '../../common/ScrollToTop';\nimport {triggerROKTOverlay, cleanupROKTOverlay} from '../../common/ROKT';\nimport {CalendarReinvention} from '~/common/svg/CalendarReinvention';\nimport {tanzanite} from '~sass/pb_styleguide/base/_exports.sass';\nimport './ReactionConfirmation.sass';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {getUsedAsTypeName} from '~/common/utils/event_utils';\n\nexport function ReactionConfirmation({reaction}) {\n  const selectEventDetails = ({eventDetails}) => eventDetails;\n  const {isPremium, eventId} = useSelector(selectEventDetails);\n  const selectRsvp = ({rsvp}) => rsvp;\n  const {guestEmail: email} = useSelector(selectRsvp);\n  const {userId} = useSelector(selectRsvp);\n  const {emailMd5} = useSelector(selectRsvp);\n  const {emailSha256} = useSelector(selectRsvp);\n  const roktAttributes = {email, userId, emailMd5, emailSha256};\n  const addToCalendarUrl = urls.get('add_to_calendar');\n\n  const usedAs = useSelector((state) => state.eventDetails?.usedAs || state.eviteEvent?.used_as);\n  const ctaWordings = getUsedAsTypeName(usedAs);\n\n  useEffect(() => {\n    triggerROKTOverlay(\n      // `${isPremium ? 'premium-RSVP' : 'reinvention-RSVP'}`, // not sure why this is here\n      'invitation.reaction.success',\n      roktAttributes\n    );\n    return cleanupROKTOverlay;\n  }, []);\n\n  return (\n    <div className=\"reaction-confirmation__wrapper\">\n      <ScrollToTopOnMount />\n      <span className=\"guest-reaction\">{reaction}</span>\n      <Typography variant=\"header3\" size=\"large\" classNames=\"reaction-confirmation__heading\">\n        Reaction sent!\n      </Typography>\n      <Button\n        variant=\"primary\"\n        fullWidth\n        size=\"large\"\n        data-qa-id=\"send-reaction\"\n        className=\"view-invitation__send-reaction-cta\"\n        onClick={() => (window.location.href = `${window.location.origin}/event/${eventId}`)}\n      >\n        View {ctaWordings}\n      </Button>\n      <a\n        href={addToCalendarUrl}\n        className=\"reaction-confirmation__link-wrapper\"\n        data-qa-id=\"reaction-confirmation__add_to_calendar\"\n      >\n        <CalendarReinvention color={tanzanite} ratio={0.6} />\n        Add to Calendar\n      </a>\n      {/* Placeholder for rokt to render into for inline placements. */}\n      <div id=\"rokt-invitation-reaction-success\" style={{width: '100%'}} />\n    </div>\n  );\n}\n","import React, {useEffect, useState} from 'react';\nimport {useParams} from 'react-router-dom';\nimport {RSVPConfirmation} from './RSVPConfirmation';\nimport {ScrollToTopOnMount} from '../../common/ScrollToTop';\nimport {ReactionConfirmation} from '~/ViewInvitation/routes/Confirmation/ReactionConfirmation';\n\nexport function Confirmation() {\n  const {type} = useParams();\n  if (!type.includes('rsvp')) console.log('ERROR: unknown Confirmation type');\n\n  const [reaction, setReaction] = useState('');\n\n  useEffect(() => {\n    const url = new URL(window.location.href);\n    const searchParams = new URLSearchParams(url.search);\n\n    if (searchParams.has('reaction')) {\n      const theReaction = searchParams.get('reaction');\n      setReaction(theReaction);\n    }\n  }, []);\n\n  return (\n    <div className=\"rsvp-container\">\n      <ScrollToTopOnMount />\n      {reaction.length === 0 ? <RSVPConfirmation /> : <ReactionConfirmation reaction={reaction} />}\n    </div>\n  );\n}\n","import {useState} from 'react';\n// import './gift-keywords.sass';\nimport {useHistory, useLocation} from 'react-router-dom';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {ArrowIconReinvention} from '~/common/svg/ArrowReinvention';\nimport {Heading} from '../../common/Heading';\nimport {InvitationLink} from '../../common/InvitationLink';\nimport * as types from '../../../common/gift-keywords/constants';\nimport {ScrollToTopOnMount} from '../../common/ScrollToTop';\nimport {\n  hasGiftKeywords,\n  selectGiftKeywords,\n  getGiftKeywordPlaceHolder,\n} from '../../../common/gift-keywords/utils';\nimport {toastAlert} from '~/common/_pb_components/atoms/Toast';\n\nexport function PickGiftKeywords(props) {\n  const {keywords} = useSelector(selectGiftKeywords);\n  const [editKeywords, setEditKeywords] = useState([...keywords]);\n  const [saving, setSaving] = useState(false);\n  const [showForm, setShowForm] = useState(!hasGiftKeywords(keywords));\n  const [modifying, setModifying] = useState(false); // Assume we are adding new until someone hits the edit button\n  const history = useHistory();\n  const location = useLocation();\n\n  const dispatch = useDispatch();\n\n  const handleChange = (e, index) => {\n    const tmp = [...editKeywords];\n    tmp[index] = e.target.value;\n    setEditKeywords(tmp);\n  };\n\n  const handleAdd = (e) => {\n    e.preventDefault();\n    const tmp = [...editKeywords];\n    tmp.push('');\n    setEditKeywords(tmp);\n  };\n\n  const handleDel = (index) => {\n    const tmp = [];\n    for (let i = 0; i < editKeywords.length; i++) {\n      if (i != index) tmp.push(editKeywords[i]);\n    }\n    setEditKeywords(tmp);\n  };\n\n  const handleSave = async (e) => {\n    e.preventDefault();\n    setSaving(true);\n\n    const data = {keywords: []};\n    for (let c = 0; c < editKeywords.length; c++) {\n      editKeywords[c] = editKeywords[c].trim();\n      if (editKeywords[c]) data.keywords.push(editKeywords[c]);\n    }\n    data.keywords = JSON.stringify(data.keywords);\n\n    const url = `/ajax/event/${window.evite_event.id}/gift_keywords/set`;\n    window.$.post(\n      url,\n      data,\n      (response) => {\n        setSaving(false);\n        dispatch({type: types.DONE_SAVE_GIFT_KEYWORDS, keywords: editKeywords});\n        history.push(`/${location.search}`);\n        toastAlert('Gift choices updated.', {type: 'success'});\n      },\n      'json'\n    ).fail((jqXHR, textStatus, errorThrown) => {\n      setSaving(false);\n      utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n    });\n  };\n  const description = () => (\n    <div className=\"pick-gift-keywords__description\">\n      {modifying ? (\n        <>\n          Your guests need your help giving the best gift. List hobbies and interests to set them on\n          the right track.\n        </>\n      ) : (\n        <></>\n      )}\n    </div>\n  );\n  const form = () => (\n    <fieldset>\n      <form>\n        {editKeywords.map((keyword, index) => (\n          <div key={index} className=\"relative\">\n            <input\n              maxLength=\"28\"\n              type=\"text\"\n              value={keyword}\n              placeholder={getGiftKeywordPlaceHolder(index)}\n              autoFocus={index == 0 ? 1 : 0}\n              onChange={(e) => handleChange(e, index)}\n            />\n            <a\n              className={`delete-item ${keywords.length <= 5 ? 'hide' : null}`}\n              onClick={(e) => handleDel(index)}\n            >\n              <i className=\"icon-cancel\" />\n            </a>\n          </div>\n        ))}\n        <div className={`add-another ${keywords.length >= 10 ? 'hidden' : null}`}>\n          <a href=\"#\" onClick={(e) => handleAdd(e)}>\n            + ADD ANOTHER ITEM\n          </a>\n        </div>\n        <div className=\"pick-gift-keywords__actions\">\n          <input\n            type=\"submit\"\n            disabled={saving}\n            className=\"secondary-button\"\n            data-qa-id=\"host_save_ideas\"\n            value=\"Save\"\n            onClick={(e) => handleSave(e)}\n          />\n          <InvitationLink\n            className=\"pick-gift-keywords__cancel\"\n            data-qa-id=\"host_cancel_save\"\n            to=\"/\"\n          >\n            Cancel\n          </InvitationLink>\n        </div>\n      </form>\n    </fieldset>\n  );\n\n  return (\n    <div className=\"pick-gift-keywords\">\n      <ScrollToTopOnMount />\n      <div>\n        <InvitationLink data-qa-id=\"host_go_back\" to=\"/\">\n          <ArrowIconReinvention className=\"back-arrow\" />\n        </InvitationLink>\n      </div>\n      <Heading value=\"Gifting\" />\n      <div className=\"\">\n        Your guests need your help giving the best gift. List hobbies and interests to set them on\n        the right track.\n      </div>\n      {form()}\n    </div>\n  );\n}\n","import React from 'react';\nimport urls from 'urls';\nimport {ParentPost} from './ParentPost';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\n\nexport const AllGuestPosts = (props) => {\n  const {\n    label,\n    guests,\n    openCommentEditor,\n    onCommentEditorOpen,\n    onCommentEditorClose,\n    isPremium,\n    removeAds, // a.k.a. \"freemium or premium\"\n  } = props;\n\n  return guests.map((guest, i) => {\n    const showAd = i === 0 && label === 'yes' && !isPremium && !removeAds;\n    const parentPostId = guest.post_id || null;\n    return (\n      <React.Fragment key={`guest__${i}`}>\n        <ParentPost\n          guest={guest}\n          label={label}\n          parentPostId={parentPostId}\n          isCommentOpen={openCommentEditor === parentPostId}\n          onCommentEditorOpen={onCommentEditorOpen}\n          onCommentEditorClose={onCommentEditorClose}\n        />\n        {showAd && (\n          <>\n            <a\n              data-impression-tracking=\"true\"\n              className=\"whos-coming-ad\"\n              data-qa-id=\"whos-coming-ad\"\n              href=\"https://www.amazon.com/gcx/Gifts-for-all/gfhz/events/ref=s9_bw_cg_EBF23rcp_1a1_w?asc_source=whoscoming&canBeEGifted=false&canBeGiftWrapped=false&categoryId=HOL-Gifts-for-all&getItByToday=false&getItByTomorrow=false&isLimitedTimeOffer=true&isPrime=false&pf_rd_i=119011799011&pf_rd_m=ATVPDKIKX0DER&pf_rd_p=0d8d7198-5411-4284-b38d-31ad045a4622&pf_rd_r=DCNYJ97FGWZA7M4W4M9B&pf_rd_s=merchandised-search-1&pf_rd_t=101&scrollState=eyJpdGVtSW5kZXgiOjAsInNjcm9sbE9mZnNldCI6MTA5Mi4xMTgxNjQwNjI1fQ%3D%3D&sectionManagerState=eyJzZWN0aW9uVHlwZUVuZEluZGV4Ijp7fX0%3D&tag=web-tracking-20\"\n              target=\"blank\"\n              title=\"Target deals\"\n            >\n              <img\n                src=\"/assets/images/whos-coming-amazon-ad.png\"\n                alt=\"Unlock 50% off or more on today's Target deals. Get the latest deals on gifts and more.\"\n              />\n            </a>\n            <Divider />\n          </>\n        )}\n      </React.Fragment>\n    );\n  });\n};\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport function AttendeeCopy(props) {\n  const {guest, label, dataQaId} = props;\n  const allowKids = useSelector((state) => !!state.eventDetails.allowKids);\n\n  const getAttendeeCopy = () => {\n    if (label !== 'no') {\n      let copy = '';\n      if (guest.adults > 0) {\n        copy += `${guest.adults} ${allowKids ? 'Adult' : 'Guest'}${guest.adults > 1 ? 's' : ''}`;\n        if (allowKids && guest.kids > 0) {\n          copy += ', ';\n        }\n      }\n      if (allowKids && guest.kids > 0) {\n        copy += `${guest.kids} Kid${guest.kids > 1 ? 's' : ''}`;\n      }\n      return copy;\n    }\n    return null;\n  };\n\n  return (\n    <Typography variant=\"paragraph3\" data-qa-id={dataQaId} color=\"pebble\">\n      {getAttendeeCopy()}\n    </Typography>\n  );\n}\n","import React from 'react';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport function CommentButton(props) {\n  const {handleCommentClick, post, dataQaId} = props;\n\n  const {replyIds, replies} = post;\n  const commentCount = Array.isArray(replyIds) ? replyIds.length : Object.keys(replies).length;\n\n  const handleClick = () => {\n    handleCommentClick();\n  };\n\n  return (\n    <button\n      onClick={handleClick}\n      className=\"unstyled-button wic__guest-post-interact-button\"\n      data-qa-id={dataQaId}\n    >\n      <Typography variant=\"paragraph4\">\n        {commentCount === 1 ? '1 Comment' : `${commentCount} Comments`}\n      </Typography>\n    </button>\n  );\n}\n","import React, {useState} from 'react';\nimport {useSelector, useStore} from 'react-redux';\nimport {MentionEditor} from '~/ViewInvitation/common/mention-editor';\nimport {selectPost} from '../../../reducers/posts';\nimport {postReply, editPostComment} from '../../../reducers/apiActions';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\nimport './comment-editor.sass';\n\nexport function CommentEditor(props) {\n  const {\n    postIdOfComment,\n    handleClearComment,\n    isEditingComment,\n    editingIsFinished,\n    handleCommentClose,\n    shouldClearComment,\n    hideClear,\n    dataQaId,\n    id,\n    parentPostId,\n  } = props;\n  const store = useStore();\n\n  const [commentToPost, setCommentToPost] = useState('');\n  const [clearComment, setClearComment] = useState(false);\n  const stickyHeader = document.querySelector('.whos-coming__sticky-header');\n\n  const currentComment = useSelector((state) => {\n    if (isEditingComment) {\n      const post = selectPost(postIdOfComment);\n      const postState = post(state);\n      return postState.comment;\n    }\n    return '';\n  });\n\n  const handleOnChange = (value) => {\n    setCommentToPost(value);\n  };\n\n  const handleCommentSubmit = () => {\n    isEditingComment\n      ? store.dispatch(editPostComment(postIdOfComment, commentToPost))\n      : store.dispatch(postReply(parentPostId, commentToPost));\n\n    if (editingIsFinished) editingIsFinished();\n    if (handleCommentClose) handleCommentClose();\n    if (stickyHeader) evite.removeClass(stickyHeader, 'unstick');\n    if (shouldClearComment) setClearComment(true);\n  };\n\n  const handleFocus = () => {\n    document.querySelector(`#${id}`).focus();\n    if (stickyHeader) evite.addClass(stickyHeader, 'unstick');\n  };\n\n  return (\n    <div className=\"comment-editor__wrap\">\n      <div className=\"comment-editor\">\n        <MentionEditor\n          placeholder=\"Add a comment\"\n          singleLineInput={false}\n          onChange={handleOnChange}\n          autoFocus\n          onFocus={handleFocus}\n          initialContent={currentComment || ''}\n          clearFromParent={!!clearComment}\n          handleCommentSubmit={handleCommentSubmit}\n          dataQaId={dataQaId}\n          id={id}\n        />\n      </div>\n\n      {!hideClear && (\n        <button\n          onClick={handleClearComment}\n          type=\"button\"\n          className=\"unstyled-button\"\n          data-qa-id=\"close-comment-editor\"\n        >\n          <PB_CloseLine ratio={0.75} />\n        </button>\n      )}\n    </div>\n  );\n}\n","import React, {useEffect, useState} from 'react';\nimport {useSelector, useStore} from 'react-redux';\nimport {deletePost} from '~/ViewInvitation/reducers/apiActions';\nimport {selectPost} from '~/ViewInvitation/reducers/posts';\nimport {LikeButton} from '~/ViewInvitation/routes/Guests/LikeButton';\nimport {CommentButton} from '~/ViewInvitation/routes/Guests/CommentButton';\nimport {TimeSince} from '~/ViewInvitation/common/TimeSince';\nimport {smoothScroll} from '~/common/scroll';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {AttendeeCopy} from '~/ViewInvitation/routes/Guests/AttendeeCopy';\nimport {LastViewedCopy} from '~/ViewInvitation/routes/Guests/LastViewedCopy';\n\nexport function Guest(props) {\n  const {\n    guest,\n    label,\n    handleCommentOpen,\n    handleSetEditing,\n    setCommentPostId,\n    isParentPost,\n    isReply,\n    id,\n  } = props;\n  const store = useStore();\n\n  const [isEditingThisComment, setIsEditingThisComment] = useState(false);\n  const thisPostId = guest.post_id;\n\n  const post = useSelector(selectPost(thisPostId));\n\n  const currentUserId = useSelector((s) => s.user.userId);\n  const {hasRsvpd} = useSelector((store) => store.rsvp);\n  const isHost = useSelector((state) => state.user?.isHost ?? false);\n\n  const handleClick = () => {\n    setCommentPostId(thisPostId);\n    handleCommentOpen(thisPostId);\n  };\n  const handleEditClick = () => {\n    setIsEditingThisComment(true);\n    handleSetEditing(true);\n    handleCommentOpen(thisPostId);\n  };\n\n  const handleDelete = () => {\n    store.dispatch(deletePost(thisPostId));\n  };\n\n  // normalize guest data\n  let when = (guest && guest.rsvp_when) || (post && post.comment_when) || '';\n  if (when) when = when.slice(0, -5);\n\n  const comment = guest.rsvp_comment || guest.comment || '';\n  const guestName = guest.guest_name || guest.guestName || '';\n\n  const viewDate = (post && post.viewDate) || guest.date_viewed || '';\n\n  const canUserEdit = guest.comment && guest.userId === currentUserId; // RSVP comments can't be edited here\n\n  const scrollToHash = () => {\n    const target = document.querySelector(window.location.hash);\n    smoothScroll(target, 227);\n  };\n\n  useEffect(() => {\n    if (window.location.hash) {\n      scrollToHash();\n    }\n  }, []);\n\n  return (\n    <div className=\"wic__guest-post\">\n      <div className=\"wic__guest-post-details\">\n        <Typography\n          variant=\"paragraph3\"\n          classNames=\"wic__guest-name\"\n          data-qa-id=\"guest-name\"\n          data-qa-value={guestName}\n        >\n          {guestName}\n        </Typography>\n        {!isReply && label !== 'no' && label !== 'no_reply' && (\n          <>\n            <span>|</span>\n            <AttendeeCopy label={label} guest={guest} dataQaId=\"rsvp-guest-count\" />\n          </>\n        )}\n      </div>\n      {label === 'no_reply' ? (\n        <LastViewedCopy viewDate={viewDate} showViewDate={isHost} />\n      ) : (\n        <>\n          {comment && (\n            <Typography variant=\"paragraph3\" data-qa-id=\"guest-rsvp-comment\">\n              {comment}\n            </Typography>\n          )}\n          <div className=\"wic__guest-post-ctas\">\n            {!isEditingThisComment && (\n              <>\n                {when && <TimeSince timestamp={when} />}\n                {thisPostId && currentUserId && hasRsvpd && (\n                  <>\n                    {when && <span>|</span>}\n                    <LikeButton\n                      userId={currentUserId}\n                      postId={thisPostId}\n                      post={post}\n                      dataQaId=\"guest-comment-like\"\n                    />\n                    <span>|</span>\n                    {!isReply && (\n                      <CommentButton\n                        userId={currentUserId}\n                        post={post}\n                        handleCommentClick={handleClick}\n                        dataQaId=\"guest-reply-icon\"\n                      />\n                    )}\n                  </>\n                )}\n                {canUserEdit && !isParentPost && (\n                  <>\n                    <span>|</span>\n                    <button\n                      onClick={handleEditClick}\n                      className=\"unstyled-button link small\"\n                      data-qa-id=\"guest-comment-edit\"\n                    >\n                      Edit\n                    </button>\n                    <span>|</span>\n                    <button\n                      onClick={handleDelete}\n                      className=\"unstyled-button link small\"\n                      data-qa-id=\"guest-comment-delete\"\n                    >\n                      Delete\n                    </button>\n                  </>\n                )}\n              </>\n            )}\n          </div>\n        </>\n      )}\n    </div>\n  );\n}\n","import React from 'react';\nimport {RsvpLabel} from '~/ViewInvitation/routes/Guests/RsvpLabel';\nimport {AllGuestPosts} from '~/ViewInvitation/routes/Guests/AllGuestPosts';\n\nexport const Guestlist = (props) => {\n  const {\n    replies,\n    query,\n    openCommentEditor,\n    setOpenCommentEditor,\n    rsvpDetails,\n    isPremium,\n    removeAds,\n  } = props;\n\n  return replies.map((label, i) => {\n    const rsvps = rsvpDetails[label];\n    const filteredGuests = Object.values(rsvps).filter((guest) =>\n      guest.guest_name.toLowerCase().includes(query.toLowerCase())\n    );\n    return (\n      <div key={`label__${i}`} className=\"wic__guestlist-section\" data-qa-id={`${label}-guestlist`}>\n        <RsvpLabel label={label} query={query} />\n        <AllGuestPosts\n          label={label}\n          guests={filteredGuests}\n          openCommentEditor={openCommentEditor}\n          onCommentEditorOpen={setOpenCommentEditor}\n          onCommentEditorClose={() => setOpenCommentEditor(undefined)}\n          isPremium={isPremium}\n          removeAds={removeAds}\n        />\n      </div>\n    );\n  });\n};\n","import React from 'react';\nimport {TimeSince} from '~/ViewInvitation/common/TimeSince';\n\nexport function LastViewedCopy(props) {\n  const {viewDate, showViewDate} = props;\n\n  const getLastViewedCopy = () => {\n    let status;\n    if (showViewDate) {\n      if (viewDate) {\n        const trimmedDate = viewDate.slice(0, -5);\n        status = (\n          <>\n            Viewed <TimeSince timestamp={trimmedDate} />\n          </>\n        );\n      } else {\n        status = 'Not yet viewed';\n      }\n      return status;\n    }\n    return 'Not yet replied';\n  };\n\n  return <div className=\"view-invitation__last-viewed-copy\">{getLastViewedCopy()}</div>;\n}\n","import React, {useRef} from 'react';\nimport {useSelector, useStore} from 'react-redux';\nimport {PB_FavoritesLine} from '~/common/svg/PB_FavoritesLine';\nimport {PB_FavoritesFill} from '~/common/svg/PB_FavoritesFill';\nimport {animateRSVPButton} from '~/ViewInvitation/common/StickyRSVP';\nimport {rose, cloud} from '~sass/pb_styleguide/base/_exports.sass';\n\nimport {likePost, unlikePost} from '~/ViewInvitation/reducers/apiActions';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport function LikeButton(props) {\n  const store = useStore();\n  const processing = useRef(false);\n  const {postId, userId, post, showCount = true, dataQaId} = props;\n  const {likedBy} = post;\n\n  const likedByThisUser = Array.isArray(likedBy)\n    ? likedBy.includes(userId)\n    : Object.keys(likedBy).includes(userId);\n  const likeCount = likedBy.length || Object.keys(likedBy).length;\n\n  const hasRSVPd = useSelector((state) => state.rsvp?.hasRsvpd ?? false);\n\n  const toggleLike = async () => {\n    processing.current = true;\n    if (hasRSVPd) {\n      if (likedByThisUser) {\n        store.dispatch(unlikePost(postId));\n      } else {\n        store.dispatch(likePost(postId));\n      }\n    } else {\n      animateRSVPButton();\n    }\n    processing.current = false;\n  };\n\n  return (\n    <button\n      onClick={(e) => !processing.current && toggleLike(e)}\n      className=\"unstyled-button wic__guest-post-interact-button\"\n      data-qa-id={dataQaId}\n    >\n      {likedByThisUser ? (\n        <PB_FavoritesFill ratio={0.375} color={rose} />\n      ) : (\n        <PB_FavoritesLine ratio={0.375} color={cloud} />\n      )}\n      <Typography variant=\"paragraph4\">\n        {showCount\n          ? likeCount > 1\n            ? `${likeCount} Likes`\n            : likeCount > 0\n              ? `${likeCount} Like`\n              : 'Like'\n          : likedByThisUser\n            ? 'Unlike'\n            : 'Like'}\n      </Typography>\n    </button>\n  );\n}\n","import React, {useState} from 'react';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {CommentEditor} from '~/ViewInvitation/routes/Guests/CommentEditor/CommentEditor';\nimport {Guest} from '~/ViewInvitation/routes/Guests/Guest';\nimport {Replies} from '~/ViewInvitation/routes/Guests/Replies';\n\nexport function ParentPost(props) {\n  const {guest, label, parentPostId, isCommentOpen, onCommentEditorOpen, onCommentEditorClose} =\n    props;\n\n  const [postIdOfComment, setPostIdOfComment] = useState(null);\n\n  const [isEditingComment, setIsEditingComment] = useState(false);\n\n  const initialComment = guest.rsvp_comment || guest.comment || '';\n\n  const handleCommentOpen = () => {\n    setPostIdOfComment(parentPostId);\n    onCommentEditorOpen(parentPostId);\n    setIsEditingComment(false);\n  };\n\n  const handleCommentClose = () => {\n    setPostIdOfComment(null);\n    onCommentEditorClose();\n    setIsEditingComment(false);\n  };\n\n  const handleClearComment = () => {\n    // clear comment and reset UI\n    handleCommentClose();\n  };\n\n  const handleSetEditing = (postIdToEdit) => {\n    // if any comment in this parent's flow is being edited, show form\n    // but in Guest, check if it is this ID being edited before hiding OG comment\n    setIsEditingComment(true);\n    onCommentEditorOpen(parentPostId);\n    setPostIdOfComment(postIdToEdit);\n  };\n  return (\n    <div\n      className=\"wic__parent-post\"\n      id={guest.guest_id}\n      data-qa-value={guest.guest_id}\n      data-qa-id=\"who-is-coming-parent-post\"\n    >\n      <Guest\n        id={guest.guest_id}\n        isCommentOpen={isCommentOpen}\n        handleCommentOpen={handleCommentOpen}\n        handleSetEditing={null}\n        isEditingComment={isEditingComment}\n        setCommentPostId={setPostIdOfComment}\n        guest={guest}\n        label={label}\n        isParentPost\n      />\n\n      <Replies\n        parentId={parentPostId}\n        isCommentOpen={isCommentOpen}\n        handleCommentOpen={null}\n        handleSetEditing={handleSetEditing}\n        isEditingComment={isEditingComment}\n        setCommentPostId={setPostIdOfComment}\n        postBeingEdited={postIdOfComment}\n      />\n\n      {!isCommentOpen && <Divider />}\n\n      {isCommentOpen && (\n        <CommentEditor\n          handleClearComment={handleClearComment}\n          initialComment={initialComment}\n          parentPostId={parentPostId}\n          postIdOfComment={postIdOfComment}\n          isEditingComment={isEditingComment}\n          handleSetEditing={setIsEditingComment}\n          handleCommentClose={handleCommentClose}\n          dataQaId=\"guest-comment-editor\"\n          id={`guestCommentsInput_${postIdOfComment || parentPostId}`}\n        />\n      )}\n    </div>\n  );\n}\n","import React from 'react';\nimport {shallowEqual, useSelector} from 'react-redux';\nimport {selectPost} from '~/ViewInvitation/reducers/posts';\nimport {Reply} from '~/ViewInvitation/routes/Guests/Reply';\nimport {ViewMoreRepliesButton} from '~/ViewInvitation/routes/Guests/ViewMoreRepliesButton';\n\nexport function Replies(props) {\n  const {\n    parentId,\n    label,\n    isCommentOpen,\n    handleCommentOpen,\n    handleSetEditing,\n    isEditingComment,\n    postBeingEdited,\n  } = props;\n\n  if (!parentId) return null;\n  const parentPost = useSelector(selectPost(parentId), shallowEqual);\n\n  if (parentPost.replyIds.length === 0) return null;\n\n  const {replyIds} = parentPost;\n\n  return (\n    <>\n      <Reply\n        handleCommentOpen={handleCommentOpen}\n        handleSetEditing={handleSetEditing}\n        isEditingComment={isEditingComment}\n        postId={parentPost.replyIds[0]}\n        isEditingThisComment={postBeingEdited === parentPost.replyIds[0]}\n      />\n      {replyIds.length > 1 && (\n        <>\n          <ViewMoreRepliesButton\n            remainingReplyCount={replyIds.length - 1}\n            parentPostId={parentId}\n          />\n          <div id={`hiddenposts-${parentId}`} className=\"bonus-replies hidden\">\n            {replyIds.slice(1).map((reply, i) => (\n              <Reply\n                key={`guest-reply__${i}`}\n                parentPostId={parentId}\n                handleCommentOpen={handleCommentOpen}\n                handleSetEditing={handleSetEditing}\n                postId={reply}\n                isEditingComment={isEditingComment}\n                isEditingThisComment={postBeingEdited === reply}\n              />\n            ))}\n          </div>\n        </>\n      )}\n    </>\n  );\n}\n","import React, {useState} from 'react';\nimport {shallowEqual, useSelector, useDispatch, useStore} from 'react-redux';\nimport {Avatar} from '~/ViewInvitation/common/Avatar/Avatar';\nimport {LikeButton} from '~/ViewInvitation/routes/Guests/LikeButton';\nimport {AttendeeCopy} from '~/ViewInvitation/routes/Guests/AttendeeCopy';\nimport {deletePost} from '~/ViewInvitation/reducers/apiActions';\nimport {selectPost} from '~/ViewInvitation/reducers/posts';\nimport {TimeSince} from '~/ViewInvitation/common/TimeSince';\nimport {ActionSheetModal} from '../../common/Modal/ActionSheetModal';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport function Reply(props) {\n  const {handleSetEditing, postId, isEditingThisComment} = props;\n  const isParentPost = false;\n  const dispatch = useDispatch();\n  const store = useStore();\n\n  const [showDeleteModal, setShowDeleteModal] = useState(false);\n  const [deleteConfirmed, setDeleteConfirmed] = useState(false);\n\n  const post = useSelector(selectPost(postId), shallowEqual);\n\n  const userIdFromStore = useSelector((s) => s.user.userId);\n\n  const hasRSVPd = useSelector((state) => state.rsvp?.hasRsvpd ?? false);\n\n  if (!post) return null;\n\n  const whenPosted = post.when.slice(0, -5);\n  const comment = post.comment || '';\n  const canUserEdit = comment && post.userId === userIdFromStore; // RSVP comments can't be edited here\n  const showIconRow = hasRSVPd;\n  const {guestName} = post;\n  const {userId} = post;\n\n  const handleEditClick = () => {\n    handleSetEditing(postId);\n  };\n\n  const handleDelete = () => {\n    store.dispatch(deletePost(postId));\n  };\n\n  return (\n    <div className=\"wic__guest-post reply\">\n      <div className=\"wic__guest-post-details\">\n        <Typography variant=\"paragraph3\" classNames=\"wic__guest-name\">\n          {guestName}\n        </Typography>\n      </div>\n      {!isEditingThisComment && (\n        <>\n          <Typography variant=\"paragraph3\" data-qa-id=\"reply-comment\">\n            {comment}\n          </Typography>\n          <div className=\"wic__guest-post-ctas\">\n            {whenPosted && (\n              <>\n                <TimeSince timestamp={whenPosted} />\n                <span>|</span>\n              </>\n            )}\n            {userIdFromStore && showIconRow && (\n              <>\n                <LikeButton\n                  userId={userIdFromStore}\n                  postId={postId}\n                  post={post}\n                  dataQaId=\"reply-like\"\n                />\n                <span>|</span>\n              </>\n            )}\n            {canUserEdit && !isParentPost && (\n              <>\n                <button\n                  onClick={() => handleEditClick()}\n                  className=\"unstyled-button link small\"\n                  data-qa-id=\"comment-edit\"\n                >\n                  Edit\n                </button>\n                <span>|</span>\n                <button\n                  onClick={() => setShowDeleteModal(true)}\n                  className=\"unstyled-button link small\"\n                  data-qa-id=\"comment-delete\"\n                >\n                  Delete\n                </button>\n              </>\n            )}\n          </div>\n        </>\n      )}\n      {/* Because deleting the post causes this component to stop rendering - we delay the\n          call to delete the post until after the modal has finished animating off the screen\n          TODO: Add a flag to the option items that causes the action to be called onAfterClose instead of onClick\n          TODO: so we can avoid repeating this logic every time we have a delete option\n      */}\n      <ActionSheetModal\n        onClose={() => {\n          setShowDeleteModal(false);\n        }}\n        onAfterClose={() => {\n          if (deleteConfirmed) handleDelete();\n        }}\n        isOpen={showDeleteModal}\n        title=\"Delete Comment\"\n        message=\"Are you sure you want to delete this comment?\"\n        optionsList={[\n          {\n            label: 'Delete',\n            action: () => setDeleteConfirmed(true),\n            destructive: true,\n          },\n        ]}\n      />\n    </div>\n  );\n}\n","import React from 'react';\nimport {shallowEqual, useSelector} from 'react-redux';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {selectRsvpStyle} from '../../reducers/eventDetails';\n\nexport function RsvpLabel(props) {\n  const {label} = props;\n\n  const rsvpCounts = useSelector(({guestList: s}) => s.rsvpCounts);\n\n  const allowKids = useSelector((state) => state.eventDetails?.allowKids);\n\n  let displayLabel = label;\n  const customLabel = useSelector(selectRsvpStyle, shallowEqual);\n  const hasCustomLabel = label !== 'no_reply' && customLabel[label].toLowerCase() !== displayLabel;\n  if (displayLabel === 'no_reply') displayLabel = 'no reply';\n\n  let rsvpCount;\n  const adults = rsvpCounts[`adults_${label}`];\n  const kids = rsvpCounts[`kids_${label}`];\n\n  if (allowKids && ['yes', 'maybe'].includes(label)) {\n    const adultsCopy = `${adults} Adult${adults === 1 ? '' : 's'}`;\n    const hasKids = kids !== 0;\n    const kidsCopy = ` ${kids} Kid${kids === 1 ? '' : 's'}`;\n    rsvpCount = adultsCopy + (hasKids ? kidsCopy : '');\n  } else {\n    rsvpCount = rsvpCounts[label];\n  }\n\n  return (\n    <div className={`wic__rsvp-group-label-wrapper ${label}`}>\n      <Typography\n        data-qa-id={`${label}-section-header`}\n        variant=\"paragraph2\"\n        classNames=\"wic__rsvp-group-label\"\n        color=\"charcoal\"\n      >\n        {displayLabel}\n        {hasCustomLabel && (\n          <Typography data-qa-id={`customRsvp_${label}`} variant=\"paragraph3\" color=\"charcoal\">\n            {customLabel[label]}\n          </Typography>\n        )}\n      </Typography>\n      <Typography\n        data-qa-id={`${label}-guest-count`}\n        data-qa-value={adults && kids ? adults + kids : undefined}\n        variant=\"paragraph2\"\n        classNames=\"wic__rsvp-group-label\"\n        color=\"charcoal\"\n      >\n        ({rsvpCount})\n      </Typography>\n    </div>\n  );\n}\n","import React from 'react';\n\nexport function ViewMoreRepliesButton(props) {\n  const {remainingReplyCount, parentPostId} = props;\n\n  const viewMoreRepliesCopy = `View ${remainingReplyCount} more ${\n    remainingReplyCount > 1 ? 'replies' : 'reply'\n  }`;\n\n  const showAllReplies = () => {\n    const viewButton = document.getElementById(`viewmore-${parentPostId}`);\n    const hiddenPosts = document.getElementById(`hiddenposts-${parentPostId}`);\n    evite.removeClass(hiddenPosts, 'hidden');\n    evite.addClass(viewButton, 'hidden');\n  };\n\n  return (\n    <button\n      onClick={(e) => showAllReplies(e)}\n      id={`viewmore-${parentPostId}`}\n      className=\"unstyled-button link large\"\n      data-qa-id=\"view-more-replies\"\n    >\n      {viewMoreRepliesCopy}\n    </button>\n  );\n}\n","import cx from 'classnames';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Diamond} from '~/common/svg/Diamond';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {mediumAndUp} from '~sass/pb_styleguide/base/_exports.sass';\nimport GoogleAdUnitDesktop from '../../../../images/view_invitation/GoogleAdUnitDesktop.png';\nimport GoogleAdUnitMW from '../../../../images/view_invitation/GoogleAdUnitMW.png';\n\nimport './AdPanel.sass';\n\nexport function AdPanel({showRemoveButton, connectCTA, showHeader = true, fullWidth = false}) {\n  const {matches: mediumScreens} = useMatchQuery(`(min-width: ${mediumAndUp})`);\n  const adUnit = mediumScreens ? GoogleAdUnitDesktop : GoogleAdUnitMW;\n  return (\n    <div\n      data-qa-id=\"fabric-free-banner-ad\"\n      className={cx({\n        'fabric-free-banner-ad__wrapper': true,\n        'fabric-free-banner-ad__wrapper_full-width': fullWidth,\n      })}\n    >\n      {showHeader && (\n        <Typography variant=\"label3\" className=\"fabric-free-banner-ad__text\">\n          Advertisement\n        </Typography>\n      )}\n      <div className=\"fabric-free-banner-ad\">\n        <img src={adUnit} alt=\"invitation-banner\" />\n        {showRemoveButton && (\n          <div className=\"view-invitation__preview-cta multi\">\n            <Button\n              variant=\"link\"\n              className=\"view-invitation__preview-cta\"\n              data-qa-id=\"remove-ads\"\n              id=\"remove-ad\"\n              onClick={(elem) => connectCTA && connectCTA('remove-ads', elem)}\n              icon={<Diamond className=\"remove_button__premium-diamond\" ratio={1.143} />}\n            >\n              Remove Ad\n            </Button>\n          </div>\n        )}\n      </div>\n    </div>\n  );\n}\n","import React, {useRef, useState, useEffect} from 'react';\n\nimport {shallowEqual, useSelector, useStore} from 'react-redux';\nimport {Card} from '~/common/canvas/Card/Card';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {FreeEventCountdown} from '~/ViewInvitation/common/FreeEventCountdown';\nimport {cityAddressLine, convertToIso, dateTimesWithCurrentYear} from '~/create/utils/formatters';\nimport {CustomLogoImage} from '~/create/components/CustomLogo/CusomLogoImage';\nimport {useFitContainer} from '~/ViewInvitation/common/useFitContainer';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PremiumCarousel} from './Premium/PremiumCarousel';\nimport {PB_EditLine} from '~/common/svg/PB_EditLine';\nimport {tanzanite} from '~sass/pb_styleguide/base/_exports.sass';\n\nfunction ViewCoverMobile(props) {\n  const {\n    event,\n    template: snake_template,\n    customImageURL,\n    isPremium,\n    fabricArt,\n    showPremiumWebview,\n    preview,\n    isWebview,\n  } = props;\n\n  const store = useStore();\n  const template = {\n    assets: snake_template?.assets,\n    uyo: snake_template?.uyo,\n    designTypeName: snake_template?.design_type_name,\n    eventTitleColor: snake_template?.event_title_color,\n    informationColor: snake_template?.information_color,\n    specialFeatures: snake_template?.special_features,\n    mobileImage: snake_template?.assets?.mobileImage,\n    css: snake_template?.assets?.custom_css,\n    customFonts: snake_template?.custom_fonts,\n    type: snake_template?.type,\n  };\n\n  // UYO - handles cropped user images for free mobile\n\n  let uyoImageElement = null;\n\n  if (template.uyo)\n    uyoImageElement = (\n      <img id=\"main_image\" src={customImageURL} alt=\"\" className={template.designTypeName} />\n    );\n\n  const {scale, ref: fitContainerRef} = useFitContainer({});\n\n  const [designHeight, setDesignHeight] = useState('0');\n  const designTemplateRef = useRef(null);\n  const {start_formatted, end_formatted} = dateTimesWithCurrentYear(event);\n\n  const eventImageStyle = {};\n  if (template.designType && event.options.custom_image_id)\n    eventImageStyle.background = 'transparent';\n\n  const {matches: mediumScreens} = useMatchQuery(`(min-width: 31.25rem)`);\n  const [design, setDesign] = useState('');\n\n  const [editArtworkClicked, setEditArtworkClicked] = useState(false);\n\n  const getFallbackImageUrl = () => {\n    if (isPremium) {\n      return template.assets.thumb_slider;\n    }\n    if (mediumScreens) {\n      return template.assets.backgroundImage;\n    }\n    if (\n      template.assets.mobileImage_special_features &&\n      template.specialFeatures &&\n      template.specialFeatures.countdown\n    ) {\n      return template.assets.mobileImage_special_features;\n    }\n    return template.assets.mobileImage || template.mobileImage || template.assets.thumb_slider;\n  };\n\n  const getRenderedPremiumImageUrl = async () => {\n    if (!isPremium && !mediumScreens) {\n      setDesign(getFallbackImageUrl());\n      return;\n    }\n\n    const eventId = event.id;\n    const response = await evite.fetch(`/plus/create/${eventId}/rendered-image-url/`);\n    if (!response.ok) {\n      if (event.options.rendered_image_url) {\n        setDesign(event.options.rendered_image_url);\n      } else {\n        setDesign(getFallbackImageUrl());\n      }\n      return;\n    }\n\n    const json = await response.json();\n\n    if (json.rendered_image_url) {\n      setDesign(json.rendered_image_url);\n    } else if (event.options.rendered_image_url) {\n      setDesign(event.options.rendered_image_url);\n    } else {\n      setDesign(getFallbackImageUrl());\n    }\n  };\n\n  useEffect(() => {\n    if (event.origin !== 21) {\n      getRenderedPremiumImageUrl()\n        .then((r) => console.log('Premium image url rendered.'))\n        .catch((e) => console.error(`Error ${e} when rendering premium image url`));\n    }\n  }, [mediumScreens]);\n\n  useEffect(() => {\n    const distFromTop = designTemplateRef.current.getBoundingClientRect().top;\n    const theHeight = `${window.innerHeight - distFromTop}px`;\n    setDesignHeight(theHeight);\n  }, []);\n\n  // calculate number of visible lines\n  let line_count = 2;\n  for (const item of [\n    event.phone_number,\n    event.end_datetime,\n    event.location_name,\n    event.street_address,\n    event.city || event.state || event.zip_code,\n    event.title && event.title.length > 16,\n  ])\n    if (item) line_count += 1;\n\n  const showCustomLogo = event.custom_logo && event.custom_logo?.url;\n  const logoHasBeenPaid = Boolean(\n    window.cover_data?.custom_logo && window.cover_data.custom_logo?.url\n  );\n\n  let logoImgProps = {};\n  if (showCustomLogo && logoHasBeenPaid) {\n    logoImgProps = {\n      custom_logo: event.custom_logo,\n      layout: 'mobile',\n      zIndex: 200,\n      clickable: false,\n    };\n  }\n\n  return (\n    <div\n      className={`view-invitation__design-template ${template.type || ''}`}\n      ref={designTemplateRef}\n      id=\"designTemplate\"\n    >\n      {fabricArt &&\n        fabricArt.objects &&\n        window.fonts &&\n        fabricArt.objects.map((o, index) => {\n          if (o.type !== 'textbox') return null;\n          const font = window.fonts.find(\n            (f) => f.family === o.fontFamily && f.weight === o.fontWeight\n          );\n          if (font) {\n            return (\n              <link\n                rel=\"stylesheet\"\n                href={font.url}\n                key={`${o.fontFamily || font.family}_${o.fontWeight || font.weight}-${index}`}\n              />\n            );\n          }\n        })}\n      {showPremiumWebview ? (\n        <PremiumCarousel\n          isWebview={isWebview}\n          height={designTemplateRef.current?.style?.height || designHeight}\n          designTemplateRef={designTemplateRef}\n          preview={preview}\n          fabricArt={fabricArt}\n        />\n      ) : isPremium && typeof showPremiumWebview === 'undefined' ? (\n        <PremiumCarousel\n          isWebview={isWebview}\n          height={designTemplateRef.current?.style?.height || designHeight}\n          designTemplateRef={designTemplateRef}\n          preview={preview}\n          fabricArt={fabricArt}\n        />\n      ) : event.origin === 21 ? (\n        <div className=\"view-invitation__fabric-free-template-wrapper\">\n          <Card fabricArt={fabricArt} isFree />\n          {preview && (\n            <button\n              className=\"unstyled-button edit-artwork-btn fabric-free\"\n              data-qa-id=\"edit-artwork\"\n              role=\"button\"\n              onClick={() => {\n                setEditArtworkClicked(true);\n                window.navigateToRoute('customize', store).then(() => setEditArtworkClicked(false));\n              }}\n            >\n              {editArtworkClicked && <span className=\"evt-spinner inline dark\" />}\n              <PB_EditLine ratio={0.6} color={tanzanite} />\n              {mediumScreens && <>Edit Artwork</>}\n            </button>\n          )}\n        </div>\n      ) : mediumScreens ? (\n        <>\n          {template.css && <link rel=\"stylesheet\" type=\"text/css\" href={template.css} />}\n          {template.customFonts &&\n            template.customFonts.map((cf, index) => (\n              <link rel=\"stylesheet\" type=\"text/css\" href={cf} key={`customFont_${index}`} />\n            ))}\n          <div id=\"invitation\" ref={fitContainerRef}>\n            <div className=\"wrapper\">\n              <div className=\"inner clearfix\">\n                <div className=\"bg_mid\">\n                  <div className=\"bg_top\">\n                    <div className=\"bg_bottom clearfix free-template-wrapper\">\n                      {/* Add custom logo here */}\n                      {event.custom_logo && event.custom_logo.url && (\n                        <CustomLogoImage\n                          custom_logo={event.custom_logo}\n                          layout=\"desktop\"\n                          zIndex={15}\n                          clickable={false}\n                        />\n                      )}\n\n                      <div id=\"event_image\" style={eventImageStyle}>\n                        {template.uyo && customImageURL && (\n                          <img\n                            id=\"main_image\"\n                            src={customImageURL}\n                            style={{\n                              background: `${event.main_image_background && 'grey'}`,\n                            }}\n                          />\n                        )}\n                        <div className=\"main_image_mask\" />\n                      </div>\n                      <div id=\"event_details\">\n                        <h1 className=\"event_title\">\n                          <span className=\"title\" id=\"cover_title\">\n                            {event.title}\n                          </span>\n                        </h1>\n                        <div className=\"event_info\">\n                          <ul className=\"host_phone\">\n                            <li className=\"host\">\n                              <strong className=\"host\">Host:</strong>\n                              <div>\n                                <span className=\"hostname hostName\" id=\"cover_host_name\">\n                                  {event.host_name}\n                                </span>\n                              </div>\n                            </li>\n                            <li className=\"phone\">\n                              <strong className=\"phone\">Phone:</strong>\n                              <div>\n                                <span className=\"phoneNumber\" id=\"cover_phone_number\">\n                                  {event.phone_number}\n                                </span>\n                              </div>\n                            </li>\n                          </ul>\n                          <ul className=\"when_where\">\n                            <li className=\"time\">\n                              <strong className=\"when\">When:</strong>\n                              <div>\n                                <span className=\"dateAndTime\" id=\"cover_start_datetime\">\n                                  {start_formatted}\n                                </span>\n                                <span className=\"dateAndTimeEnd\" id=\"cover_end_datetime\">\n                                  {end_formatted}\n                                </span>\n                              </div>\n                            </li>\n                            <li className=\"address\">\n                              <strong className=\"where\">Where:</strong>\n                              <div>\n                                <span className=\"locationName\" id=\"cover_location_name\">\n                                  {event.location_name}\n                                </span>\n                                <span className=\"streetAddress\" id=\"cover_street_address\">\n                                  {event.street_address}\n                                </span>\n                                <span className=\"cityStateZipCountryLine\" id=\"cover_city_zip\">\n                                  {cityAddressLine(event)}\n                                </span>\n                              </div>\n                            </li>\n                          </ul>\n                        </div>\n                      </div>\n                      {event.start_datetime &&\n                      template.specialFeatures &&\n                      template.specialFeatures.countdown ? (\n                        <div id=\"special_features\">\n                          <FreeEventCountdown\n                            startTime={convertToIso(window.evite_event?.start_datetime || '')}\n                            countdown={template.specialFeatures.countdown}\n                          />\n                        </div>\n                      ) : null}\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div className=\"preload\" />\n          </div>\n        </>\n      ) : (\n        <>\n          <img src={design} alt=\"\" className={isPremium ? '' : 'free'} />\n          {/* Add custom logo here */}\n          {showCustomLogo && logoHasBeenPaid && <CustomLogoImage {...logoImgProps} />}\n          {template.specialFeatures &&\n          template.specialFeatures.countdown &&\n          event.start_datetime ? (\n            <div id=\"special_features\">\n              <FreeEventCountdown\n                startTime={convertToIso(event.start_datetime)}\n                countdown={template.specialFeatures.countdown}\n                mobile\n                scale={window.innerWidth / 424.0}\n              />\n            </div>\n          ) : null}\n          {template.uyo && uyoImageElement}\n          <div\n            id=\"design-template\"\n            style={{\n              position: 'absolute',\n              bottom: '2.5%',\n              display: 'flex',\n              flexDirection: 'column',\n              justifyContent: 'center',\n              textAlign: 'center',\n            }}\n          >\n            <div id=\"event_details\" ref={fitContainerRef}>\n              <div id=\"event_text\" className={line_count < 6 ? 'extra_margins' : ''}>\n                <p\n                  id=\"cover_title\"\n                  className={`paragraph2 event_title${\n                    event.title && event.title.length > 18 ? ' long' : ''\n                  }`}\n                  style={{\n                    color: template.eventTitleColor,\n                    fontSize: event.title.length > 18 && scale < 1.0 ? 24 * scale : 32 * scale,\n                    lineHeight: '125%',\n                    marginBottom: '1rem',\n                  }}\n                >\n                  {event.title || 'Event Title'}\n                </p>\n                <div\n                  className=\"event_info\"\n                  style={{\n                    color: template.informationColor,\n                    fontSize: 16 * scale,\n                  }}\n                >\n                  <div className=\"event_time\">\n                    <Typography variant=\"paragraph2\" data-qa-id=\"cover_start_datetime\">\n                      {start_formatted}\n                    </Typography>\n                    <Typography variant=\"paragraph2\" data-qa-id=\"cover_end_datetime\">\n                      {end_formatted}\n                    </Typography>\n                  </div>\n                  <br />\n                  <Typography variant=\"paragraph2\" data-qa-id id=\"cover_host_name\">\n                    {event.host_name || 'Bob Johnson'}\n                  </Typography>\n                  <Typography variant=\"paragraph2\" id=\"cover_phone_number\">\n                    {event.phone_number}\n                  </Typography>\n                  <br />\n                  <div className=\"address\">\n                    <Typography variant=\"paragraph2\" data-qa-id=\"cover_location_name\">\n                      {event.location_name}\n                    </Typography>\n                    <Typography variant=\"paragraph2\" data-qa-id=\"cover_street_address\">\n                      {event.street_address}\n                    </Typography>\n                    <Typography variant=\"paragraph2\" data-qa-id=\"cover_city_zip\">\n                      {cityAddressLine(event)}\n                    </Typography>\n                  </div>\n                </div>{' '}\n              </div>\n            </div>\n            <div className=\"preload\" />\n          </div>\n        </>\n      )}\n    </div>\n  );\n}\n\nexport function DesignTemplate({\n  themeColor,\n  showPremiumWebview,\n  bgAlpha,\n  preview,\n  isWebview = false,\n}) {\n  const coverData = useSelector((state) => state.coverData, shallowEqual);\n  const fabricArt = useSelector(\n    (state) => state.eventDetails?.fabric_design_data ?? state.fabricDesign?.fabricArt\n  );\n\n  const isPremium = useSelector(\n    (state) =>\n      state.eventDetails.isPremium ||\n      state.user.subscriptionPlanName === 'pro' ||\n      state.user.subscriptionPlanName === 'party_pass'\n  );\n  const eviteEvent = useSelector((state) => state.eviteEvent);\n  const event = eviteEvent || window.evite_event;\n  const {template} = coverData;\n  const customImageURL = coverData.image_url;\n  const bonusClassNames = 'reinvention';\n\n  return (\n    <ViewCoverMobile\n      parent=\"reinvention\"\n      {...{\n        event,\n        template,\n        showPremiumWebview,\n        customImageURL,\n        fabricArt,\n        bonusClassNames,\n        isPremium,\n        themeColor,\n        bgAlpha,\n        preview,\n        isWebview,\n      }}\n    />\n  );\n}\n","import React from 'react';\nimport {shallowEqual, useSelector} from 'react-redux';\n\nimport {useHistory} from 'react-router-dom';\nimport {pretty_format_phone_number} from '~/common/utils';\nimport {Label} from '~/ViewInvitation/common/Label';\nimport {LocationBlock} from './LocationBlock';\nimport {FormattedDateString} from './FormattedDateString';\nimport {HostMessage} from './HostMessage';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Link} from '~/common/_pb_components/atoms/Link';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {largishAndUp, link} from '~sass/pb_styleguide/base/_exports.sass';\nimport {PB_EditLine} from '~/common/svg/PB_EditLine';\nimport {isPreview} from '~/ViewInvitation/utils';\n\nexport function DetailsModule({readonly}) {\n  const {\n    hostName,\n    locationName,\n    title,\n    streetAddress,\n    phoneNumber,\n    end: endDate,\n    start: startDate,\n    isPremium,\n    eventId,\n    guestsOfHonor,\n    eventType,\n  } = useSelector(\n    ({eventDetails: ed, details: d}) => ({\n      ...ed,\n      end: d?.end ?? ed.end,\n      start: d?.start ?? ed.start,\n    }),\n    shallowEqual\n  );\n  let _guestsOfHonor = guestsOfHonor;\n  if (_guestsOfHonor?.guests) {\n    //* This code is executed when inside Preview only\n    const justNames = [];\n    for (const guest of _guestsOfHonor.guests) justNames.push(guest.name);\n    _guestsOfHonor = justNames;\n  }\n\n  const guestsOfHonorLabel = _guestsOfHonor.length > 1 ? 'guests of honor' : 'guest of honor';\n\n  const timezoneAbbr = useSelector((state) => state.coverData?.known_timezone_abbr ?? '');\n\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n  const preview = isPreview();\n  const history = useHistory();\n\n  return (\n    <>\n      {preview && !readonly && (\n        <button\n          className={`unstyled-button view-invitation__preview-cta ${\n            isPremium && !largeScreens ? 'premium-event-details' : ''\n          }`}\n          onClick={() => history.push(`/${eventId}/details`)}\n          data-qa-id=\"edit-event-details\"\n        >\n          <PB_EditLine ratio={0.5} color={link} />\n          Edit Details\n        </button>\n      )}\n      <div className=\"view-invitation__event-info\">\n        <Typography\n          variant=\"header2\"\n          data-qa-id=\"event-title\"\n          classNames=\"view-invitation__event-title\"\n        >\n          {title}\n        </Typography>\n\n        <div className=\"view-invitation__when-where-grid\">\n          <div>\n            <Label value=\"when\" data-qa-id=\"when\" />\n            <FormattedDateString\n              start={startDate}\n              end={endDate}\n              timezoneAbbr={timezoneAbbr}\n              preview={preview}\n            />\n          </div>\n\n          {(locationName || streetAddress) && <LocationBlock preview={preview} />}\n        </div>\n      </div>\n\n      <Divider\n        marginTop={largeScreens ? '2rem' : '1.5rem'}\n        marginLeft={largeScreens ? '3rem' : '1rem'}\n        marginRight={largeScreens ? '3rem' : '1rem'}\n        width={null}\n      />\n\n      <div className=\"hosted-by__wrapper\">\n        {preview && !readonly && (\n          <button\n            className=\"unstyled-button view-invitation__preview-cta\"\n            onClick={() => history.push(`/${eventId}/details`)}\n            data-qa-id=\"edit-host-message\"\n          >\n            <PB_EditLine ratio={0.5} color={link} />\n            Edit Message\n          </button>\n        )}\n        <span>\n          <Label value=\"hosted by\" data-qa-id=\"hosted-by\" />\n          <p className=\"view-invitation__host-name\" data-qa-id=\"hostname\">\n            {hostName}\n          </p>\n        </span>\n        <HostMessage isPremium={isPremium} eventType={eventType} />\n\n        {_guestsOfHonor?.length > 0 && (\n          <span>\n            <br />\n            <Label value={guestsOfHonorLabel} data-qa-id=\"guests-of-honor\" />\n            {_guestsOfHonor.map((guestOfHonor, index) => (\n              <p\n                key={`goh-${index}`}\n                className=\"view-invitation__guest-of-honor\"\n                data-qa-id=\"guest-of-honor\"\n              >\n                {guestOfHonor}\n              </p>\n            ))}\n          </span>\n        )}\n      </div>\n\n      {phoneNumber && (\n        <div className=\"view-invitation__details-module__contact-host\">\n          <Divider marginBottom={largeScreens ? '2rem' : '1.5rem'} />\n          <Label value=\"contact host\" data-qa-id=\"contact-host\" />\n          <Link data-qa-id=\"phone-number\" href={`tel:1${phoneNumber}`} variant=\"large\">\n            {pretty_format_phone_number(phoneNumber)}\n          </Link>\n        </div>\n      )}\n    </>\n  );\n}\n","import {useEffect, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useHistory} from 'react-router-dom';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n/* eslint-disable camelcase */\nimport {PB_DeleteBinLine} from '~/common/svg/PB_DeleteBinLine';\nimport {PB_EditLine} from '~/common/svg/PB_EditLine';\n/* eslint-enable camelcase */\nimport {isPreview} from '~/ViewInvitation/utils';\nimport {DONATION_MADE} from '~/ViewInvitation/reducers/constants';\nimport {refreshFundraiser} from '~/ViewInvitation/reducers/apiActions';\nimport {link} from '~sass/pb_styleguide/base/_exports.sass';\nimport {Button} from '~/common/_pb_components/atoms/Button';\n\nconst DonationSegment = ({donation, connectCTA, readonly}) => {\n  const history = useHistory();\n  const {eventId} = useSelector((state) => state.eventDetails);\n  const {found, donation_url: donationUrl, id} = donation;\n  const name = useSelector((state) => state.rsvp?.name ?? state.user?.name ?? '');\n  const firstName = name?.split(' ')[0];\n  const lastName = name?.split(' ')[1];\n  const guestEmail = useSelector((state) => state.rsvp?.guestEmail ?? '');\n\n  const hasDonation = !!donationUrl || donationUrl !== undefined; // along with initial state, prevents flash\n\n  // get the key and host from the url that pledge sends back to us on create\n  const tempUrl = document.createElement('a');\n  tempUrl.href = donationUrl;\n  const pledgelingHost = `${tempUrl.protocol}//${tempUrl.hostname}/assets/widget.js`;\n  const partnerKey = tempUrl.pathname.split('/')[3];\n\n  const dispatch = useDispatch();\n  const preview = isPreview();\n\n  const onMessage = (e) => {\n    if (!e.origin.includes('pledge.to')) return;\n    const {data} = e;\n    let objMessage;\n    try {\n      objMessage = JSON.parse(data);\n    } catch (err) {\n      return; // we don't care about this\n    }\n    let value = parseFloat(objMessage.data?.amount);\n    switch (objMessage.message) {\n      case 'DonateCompleted':\n        value *= 100; // store money in cents\n        dispatch({\n          type: DONATION_MADE,\n          results: {\n            donationUrl,\n            donationAddedCents: value,\n          },\n        });\n        dispatch(refreshFundraiser()); // tell backend to refresh cache\n        break;\n      case 'setWidgetHeight':\n        // document.getElementById('external-donation-id').style.height =\n        //   objMessage.data + 'px';\n        break;\n      case 'intersectionLoaded':\n        break;\n      default:\n        evite.log('Pledge unhandled message: ', objMessage.message);\n    }\n  };\n\n  // eslint-disable-next-line consistent-return\n  useEffect(() => {\n    if (donationUrl) {\n      const script = document.createElement('script');\n      script.src = pledgelingHost;\n      script.id = 'plg-widget';\n      script.async = true;\n      document.body.appendChild(script);\n\n      window.addEventListener('message', onMessage, false);\n      return () => {\n        window.removeEventListener('message', onMessage);\n      }; // will happen on unmount\n    }\n  }, [donationUrl]);\n\n  if (found && donationUrl) {\n    return (\n      <>\n        {preview && !readonly && (\n          <div className=\"view-invitation__preview-cta multi\">\n            <Button\n              variant=\"unstyled-button\"\n              className=\"view-invitation__preview-cta\"\n              onClick={() => history.push(`/${eventId}/gifting`)}\n              data-qa-id=\"edit-donations\"\n            >\n              <PB_EditLine ratio={0.5} color={link} />\n              Edit\n            </Button>\n            <span>|</span>\n            <Button\n              variant=\"unstyled-button\"\n              className=\"view-invitation__preview-cta\"\n              data-qa-id=\"remove-donations\"\n              id=\"remove-donations\"\n              ref={(elem) => connectCTA && connectCTA('remove-donations', elem)}\n            >\n              <PB_DeleteBinLine ratio={0.5} color={link} />\n              Remove\n            </Button>\n          </div>\n        )}\n        <div id=\"external-donation-id\">\n          {hasDonation ? (\n            <div\n              className=\"plg-donate\"\n              data-partner-key={partnerKey}\n              data-item-id={id || window.event_id || window.evite_event.id}\n              data-x-user-id={window.user_id || ''}\n              data-first-name={firstName || ''}\n              data-last-name={lastName || ''}\n              data-email={guestEmail || ''}\n              data-style-hide-social=\"true\"\n              data-style-transparent=\"true\"\n              data-relay-donated-event=\"true\"\n              data-template=\"branding-2022\"\n              data-qa-id=\"pledgeling-donate\"\n            />\n          ) : // <Typography variant=\"paragraph3\">\n          //   {/* TODO: This text will need to be updated when multiple donation streams become supported */}\n          //   Your host has removed donations for this event.\n          // </Typography>\n          null}\n        </div>\n      </>\n    );\n  }\n  return (\n    <Typography variant=\"paragraph3\">Error loading donation, please try again later.</Typography>\n  );\n};\n\nexport const DonationsModule = (props) => {\n  const {loading: isLoading, donations: propDonation, readonly, isCreationFlow} = props;\n  const donation = useSelector((state) => state.donation);\n  const donations = propDonation || donation.donations;\n  const loading = isLoading || donation.loading;\n  const [sortedDonations, setSortedDonations] = useState(donations);\n\n  useEffect(() => {\n    if (donations?.length > 0) {\n      // since Charity goes first, lets reverse sort by fundraiser type because those values\n      // can be Organization and Crowdfund, and Organization should be first\n      setSortedDonations(\n        donations.sort((a, b) => b.fundraiser_type?.localeCompare(a.fundraiser_type))\n      );\n    }\n  }, [donations]);\n\n  return (\n    <div\n      className={`donations-module__donation-segments ${\n        isCreationFlow && !readonly ? 'with-edit-ctas' : ''\n      }`}\n    >\n      <Typography variant=\"header3\" classNames=\"view-invitation__registry-module-title\">\n        Donate to their chosen cause\n      </Typography>\n      {loading ? (\n        <div className=\"view-invitation__donation-loading\">\n          <span className=\"evt-spinner inline dark\" />\n          <Typography variant=\"paragraph2\">Loading...</Typography>\n        </div>\n      ) : (\n        sortedDonations.map((d) =>\n          // eslint-disable-next-line no-nested-ternary\n          !d.donation_url ? (\n            <Typography variant=\"paragraph3\" key={d.id}>\n              Error loading {/* eslint-disable-next-line no-nested-ternary */}\n              {d.id?.includes('Organization')\n                ? 'charity'\n                : d.id?.includes('Crowdfund')\n                  ? 'crowdfund'\n                  : 'donation'}\n              , please try again later.\n            </Typography>\n          ) : !d.found ? (\n            <Typography variant=\"paragraph3\">\n              Your host has removed donations for this event.\n            </Typography>\n          ) : (\n            <DonationSegment {...props} donation={d} key={d.id} />\n          )\n        )\n      )}\n    </div>\n  );\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport XDate from 'xdate';\nimport {AddToCalendar} from '~/ViewInvitation/common/AddToCalendar';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {largishAndUp} from '~sass/pb_styleguide/base/_exports.sass';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\n\nlet dateFirstLine;\nlet dateSecondLine;\n\nconst getFormattedDateStrings = (start, end, timezoneAbbr, calendarIconRatio, preview) => {\n  const startDateTime = new Date(start);\n  const endDateTime = end ? new Date(end) : null;\n  const dateOptions = {\n    weekday: 'long',\n    month: 'long',\n    year: 'numeric',\n    day: 'numeric',\n  };\n  const startDate = startDateTime.toLocaleDateString('en-US', dateOptions);\n  const endDate = endDateTime ? endDateTime.toLocaleDateString('en-US', dateOptions) : null;\n  const startTime = new XDate(start).toString('h:mm TT');\n  const endTime = end ? new XDate(end).toString('h:mm TT') : null;\n\n  if (startDate === 'Invalid Date') {\n    if (endDate && endDate !== 'Invalid Date') {\n      dateFirstLine = `[Event date]`;\n      dateSecondLine = `to ${endDate}, ${endTime} ${timezoneAbbr}`;\n    } else {\n      dateFirstLine = `[Event date]`;\n      dateSecondLine = ``;\n    }\n  } else if (endDate && startDate !== endDate) {\n    dateFirstLine = `${startDate}, ${startTime} ${timezoneAbbr}`;\n    dateSecondLine = `to ${endDate}, ${endTime} ${timezoneAbbr}`;\n  } else {\n    dateFirstLine = `${startDate}`;\n    dateSecondLine =\n      `${startTime} ${timezoneAbbr}` + `${endTime ? ` - ${endTime} ${timezoneAbbr}` : ''}`;\n  }\n\n  return (\n    <div className=\"date-calendar__wrapper\">\n      <Typography\n        variant=\"paragraph1\"\n        data-qa-id=\"event-date-time-string\"\n        classNames=\"view-invitation__details-module__section-body\"\n        data-qa-value={`${dateFirstLine} ${\n          dateSecondLine[0] === ' ' ? dateSecondLine.substring(1) : dateSecondLine\n        }`}\n      >\n        {dateFirstLine}\n        <br />\n        {dateSecondLine}\n      </Typography>\n      <AddToCalendar title=\"Add to Calendar\" ratio={calendarIconRatio} preview={preview} />\n    </div>\n  );\n};\n\nexport function FormattedDateString(props) {\n  const {start, end, timezoneAbbr, preview} = props;\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n\n  return getFormattedDateStrings(start, end, timezoneAbbr, largeScreens ? 0.75 : 0.5, preview);\n}\n\nFormattedDateString.propTypes = {\n  start: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n  end: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n  timezoneAbbr: PropTypes.string,\n  preview: PropTypes.bool,\n};\n","import React, {useEffect, useState} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {GiftingModule, KeywordList} from './GiftingModule';\nimport {GroundhogModal} from '../../common/Modal/GroundhogModal';\nimport {RegistryModule} from './RegistryModule';\nimport {AskAHostIcon} from '~/common/svg/AskAHost';\nimport {SuccessIcon} from '~/common/svg/SuccessIcon';\nimport {LinkOut} from '~/common/svg/LinkOut';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\n/*\n * Modal that pops up when the guest views the invitation the first time after rsvping\n * Can be paused for 1 year by hitting the \"Don’t Show Again\" button,\n * or for 1 day by hitting the \"Remind me later\" button\n */\n\nexport function GiftingModal(props) {\n  const {giftingType} = props;\n  const [isOpen, setIsOpen] = useState(false);\n  const isHost = useSelector((s) => s.user.isHost);\n  const hasRsvpd = useSelector((s) => s.rsvp.hasRsvpd);\n  const {name, registries} = useSelector((s) => s.registry);\n\n  window.experimentsEligibility = window.experimentsEligibility || {};\n  window.experimentsEligibility['gifting-modal'] = hasRsvpd && !isHost ? 'true' : false;\n\n  useEffect(() => {\n    if (hasRsvpd && !isHost)\n      // Delay the modal popup so the page has time to render before animating it in.\n      window.setTimeout(() => {\n        setIsOpen(true);\n      }, 300);\n  }, [hasRsvpd, isHost, giftingType]);\n\n  return (\n    <GroundhogModal\n      isOpen={isOpen}\n      hideModal={() => setIsOpen(false)}\n      showDontShowAgain\n      showRemindMeLater\n      cookieName=\"giftingPrompt\"\n    >\n      <div className=\"gifting-modal\">\n        <Typography variant=\"header2\" as=\"p\">\n          <ToastModalHeading />\n        </Typography>\n        {giftingType === 'registry' && (\n          <>\n            <Typography variant=\"paragraph2\" classNames=\"gifting-modal__registry-name\">\n              {name}'s Registr{registries.length === 1 ? 'y' : 'ies'}\n            </Typography>\n            <RegistryModule showHeader={false} locationPrefix=\"toast\" inModal />\n          </>\n        )}\n        {giftingType === 'gifting' && <RenderGifting />}\n      </div>\n    </GroundhogModal>\n  );\n}\n\nconst ToastModalHeading = () => 'Looking for gift ideas?';\n\nfunction RenderGifting() {\n  return (\n    <GiftingModule\n      showHeader={false}\n      vendorDiscDataQaId=\"toast-find_gift\"\n      isBottomSheet\n      showGiftKeywords={false}\n    />\n  );\n}\n","import {useSelector} from 'react-redux';\nimport {useHistory} from 'react-router-dom';\nimport {\n  selectGiftKeywords,\n  selectEvent,\n  hasGiftKeywords,\n  getGiftKeywordAmazonSearchLink,\n} from '~/common/gift-keywords/utils';\nimport {GuestGiftlist} from '~/giftlist/GuestGiftlist';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {VendorDisc} from '~/ViewInvitation/common/VendorDisc';\nimport {VendorRect} from '~/ViewInvitation/common/VendorRect';\nimport {RegistryModule} from '~/ViewInvitation/routes/Landing/RegistryModule';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {mediumAndUp, largishAndUp} from '~sass/pb_styleguide/base/_exports.sass';\nimport {isPreview} from '~/ViewInvitation/utils';\nimport {Diamond} from '~/common/svg/Diamond';\n\nfunction hasWidget(widget_type, event = window.evite_event) {\n  // Copied from classic interface /assets/js/view_invitation/utils.js\n  if (!event) return false;\n  const widgets = event.widgets || [];\n  for (const widget of widgets) {\n    if (widget.widget_type === widget_type) return true;\n  }\n  return false;\n}\n\nfunction getShowGiftKeywords(event, keywords) {\n  return (\n    !window.has_gift_registries &&\n    !hasWidget('sponsored_registry', event) &&\n    hasGiftKeywords(keywords)\n  );\n}\n\nconst preview = isPreview();\n\nexport function KeywordList(props) {\n  const {keywords} = props;\n  const filledKeywords = [];\n  const pushIfNotEmpty = (lst, str) => {\n    if (str.length > 0) lst.push(str);\n  };\n  keywords.forEach((keyword) => {\n    pushIfNotEmpty(filledKeywords, keyword);\n  });\n  return (\n    <div className=\"view-invitation__gifting-module__gift-ideas__keyword-list\">\n      {filledKeywords.map((keyword, index) => (\n        <a\n          key={index}\n          target=\"_blank\"\n          data-qa-id={`gift_idea_${index}`}\n          href={preview ? undefined : getGiftKeywordAmazonSearchLink(keyword)}\n          rel=\"noreferrer\"\n        >\n          <Button\n            data-qa-id={`gift_idea_${index}_button`}\n            variant=\"secondary\"\n            size=\"large\"\n            className=\"view-invitation__gifting-module__gift-idea\"\n            disabled={preview}\n          >\n            {keyword}\n          </Button>\n        </a>\n      ))}\n    </div>\n  );\n}\n\nexport function GuestKeywordsWidget(props) {\n  if (!hasGiftKeywords()) return '';\n\n  const keywords = window.evite_event?.gift_keywords || [];\n  return (\n    <div className=\"view-invitation__gifting-module__gift-keywords-wrapper\">\n      <Typography\n        variant=\"header3\"\n        color=\"charcoal\"\n        classNames=\"view-invitation__gifting-module__gift-keywords-title\"\n      >\n        Shop {window.evite_event?.host_name || ''}'s interests for gift ideas on\n        <img\n          src=\"https://g5.evitecdn.com/apps/logos/third-party/amazon_logo_plain_large.png\"\n          className=\"view-invitation__gifting-module__shop-on-amazon-image\"\n          alt=\"Amazon\"\n        />\n      </Typography>\n      <KeywordList keywords={keywords} />\n    </div>\n  );\n}\n\nexport const getDiscDisplayText = (event) => {\n  switch (event?.eventType) {\n    case 'halloween':\n    case 'halloween_kids':\n      return 'Find your costume';\n\n    case 'holiday_party':\n    case 'holidayforkids':\n    case 'christmas':\n    case 'hanukkah':\n      return 'Shop holiday gifts';\n\n    default:\n      return 'Buy your gift now';\n  }\n};\n\nexport const getTargetURL = (event) => {\n  switch (event?.eventType || event?.event_type) {\n    case 'halloween':\n    case 'halloween_kids':\n      return 'https://goto.target.com/jrZRon';\n\n    case 'holiday_party':\n    case 'holidayforkids':\n    case 'christmas':\n    case 'hanukkah':\n      return 'https://goto.target.com/AWADEj';\n\n    default:\n      return 'https://goto.target.com/mg7n3q';\n  }\n};\n\nexport function GiftingModule(props) {\n  const history = useHistory();\n  const {keywords} = useSelector(selectGiftKeywords);\n  const event = useSelector(selectEvent);\n  const {matches: mediumScreens} = useMatchQuery(`(min-width: ${mediumAndUp})`);\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n  const {\n    showHeader = true,\n    vendorDiscDataQaId = 'vendor-disc__gifting_link',\n    isBottomSheet,\n    readonly,\n    forceShowCTA,\n  } = props;\n  let {showGiftKeywords = true, onRemove, restored, onPropagateRestore} = props;\n\n  const {isPremium} = useSelector((state) => state.details || state.eventDetails);\n  const {isHost} = useSelector((state) => state.user);\n  const giftingData = useSelector(\n    (state) => state.gifting ?? {url: '', iconUrl: '', vendorName: ''}\n  );\n  const registries = useSelector((state) =>\n    'giftingOptions' in state && state.giftingOptions?.gift_registry_urls.length === 0\n      ? []\n      : state.registry?.registries ?? []\n  );\n  showGiftKeywords = showGiftKeywords && getShowGiftKeywords(event, keywords);\n\n  const showGuestGiftlist =\n    window.evite_event?.gift_list_url && window.evite_event?.gift_registry_urls.length === 0;\n\n  const preview = isPreview();\n\n  const getModuleHeaderText = (variation) => {\n    let moduleTitle;\n    switch (window.evite_event.event_type) {\n      case 'birthday_forhim':\n        moduleTitle = 'Order the Perfect Gift';\n      case 'birthday_forteens':\n      case 'birthday_milestones':\n        moduleTitle = 'Order the Perfect Birthday Gift';\n        break;\n      case 'baby_shower':\n        moduleTitle = 'Order the Perfect Baby Gift';\n        break;\n      case 'easter':\n        moduleTitle = 'Order the Perfect Easter Gift for the Host';\n        break;\n      case 'halloween':\n      case 'halloween_kids':\n        moduleTitle = 'Shop Halloween Costumes';\n        break;\n      default:\n        moduleTitle = 'Find the Perfect Gift';\n    }\n    return moduleTitle;\n  };\n\n  const displayText = getDiscDisplayText(event);\n  const targetURL = getTargetURL(event);\n  return (\n    <div>\n      {registries?.length > 0 && <RegistryModule {...props} />}\n      {showGuestGiftlist && (\n        // TODO: Finish PB-beautifying\n        <>\n          {registries?.length > 0 && (\n            <Divider\n              marginBottom={largeScreens ? '2.5rem' : '2rem'}\n              marginTop={largeScreens ? '2.5rem' : '2rem'}\n            />\n          )}\n          <div className=\"giftlist-card gifting__submodule\">\n            <GuestGiftlist />\n          </div>\n        </>\n      )}\n      {showGiftKeywords ? (\n        <>\n          {(registries?.length > 0 || showGuestGiftlist) && (\n            <Divider\n              marginTop={largeScreens ? '2.5rem' : '2rem'}\n              marginBottom={largeScreens ? '2.5rem' : '2rem'}\n            />\n          )}\n          <GuestKeywordsWidget />\n        </>\n      ) : null}\n      {event.allowGifts && (\n        <>\n          {(registries?.length > 0 || showGuestGiftlist || showGiftKeywords) && (\n            <Divider\n              marginTop={0}\n              marginBottom={0}\n              marginLeft={largeScreens ? '3rem' : '1rem'}\n              marginRight={largeScreens ? '3rem' : '1rem'}\n              width={null}\n            />\n          )}\n          <div\n            className={`submodule-gifting ${\n              registries?.length > 0 || showGuestGiftlist || showGiftKeywords\n                ? 'with-registries'\n                : ''\n            }`}\n          >\n            <div>\n              {((preview && !readonly) || forceShowCTA) && (\n                <div className=\"view-invitation__preview-cta multi\">\n                  <button\n                    className=\"unstyled-button view-invitation__preview-cta\"\n                    data-qa-id=\"remove-gifting\"\n                    id=\"remove-gifting\"\n                    ref={(elem) => {\n                      props.connectCTA && props.connectCTA('remove-gifting', elem);\n                    }}\n                  >\n                    {!isPremium && <Diamond />}\n                    Remove\n                  </button>\n                </div>\n              )}\n              <div className=\"view-invitation__gifting-module__vendors\">\n                <Typography\n                  variant={isBottomSheet ? 'paragraph1' : 'header3'}\n                  classNames={`view-invitation__registry-module-title${\n                    isBottomSheet ? ' in-groundhog-modal' : ''\n                  }`}\n                  data-qa-id=\"gifting-module-title\"\n                >\n                  {getModuleHeaderText('variation')}\n                </Typography>\n                <div\n                  className={`view-invitation__gifting-module__vendor-list${\n                    !mediumScreens ? ' rectangles' : ''\n                  }`}\n                  data-qa-id=\"gifting-vendor-list\"\n                >\n                  <Vendor\n                    registry={giftingData}\n                    displayText={displayText}\n                    dataQaId={vendorDiscDataQaId}\n                    classNames=\"gift-option__amazon vendor-rect__link\"\n                    showAsRectangle={!mediumScreens}\n                  />\n                  <Vendor\n                    registry={{\n                      icon_url:\n                        'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/17ce297f4075481bb63803e89a150acc.png?r=0.5258412927975611',\n                      vendor_name: 'Target',\n                      url: targetURL,\n                    }}\n                    displayText={displayText}\n                    dataQaId={`${isBottomSheet ? 'toast' : 'invitation'}-target`}\n                    classNames=\"gift-option__amazon vendor-rect__link\"\n                    showAsRectangle={!mediumScreens}\n                  />\n                </div>\n              </div>\n            </div>\n          </div>\n        </>\n      )}\n    </div>\n  );\n}\n\nfunction Vendor(props) {\n  return props.showAsRectangle ? <VendorRect {...props} /> : <VendorDisc {...props} />;\n}\n","import React, {useEffect, useRef, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport {PB_Chevron} from '~/common/svg/PB_Chevron';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {sanitizeString} from '~/common/utils/sanitize_html';\nimport {pebble} from '~sass/pb_styleguide/base/_exports.sass';\nimport {putAffiliateTags} from '~/common/utils/affiliate_tags';\n\nexport function HostMessage({isPremium, eventType}) {\n  const messageFromHost = useSelector((state) => state.eventDetails?.messageFromHost ?? null);\n  const {origin, pristineHostMessage} = useSelector((state) => ({\n    origin: state.eventDetails.origin,\n    pristineHostMessage: state.eventDetails.pristineHostMessage ?? false,\n  }));\n  const readMoreRef = useRef(null);\n  const [showReadMore, setShowReadMore] = useState(false);\n  const [expanded, setExpanded] = useState(false);\n\n  useEffect(() => {\n    if (!messageFromHost) {\n      setShowReadMore(false);\n      return;\n    }\n    const observer = new ResizeObserver((entries) => {\n      for (const entry of entries) {\n        entry.target.scrollHeight > entry.contentRect.height ||\n        entry.contentRect.height > 98 /* Fix for iphones */\n          ? setShowReadMore(true)\n          : setShowReadMore(showReadMore);\n      }\n    });\n    observer.observe(readMoreRef.current);\n    return () => observer.disconnect();\n  }, [showReadMore, messageFromHost]);\n\n  const result = isPremium ? 'P' : 'F';\n\n  const amazonTags = {\n    tag: 'web-tracking-20',\n    asc_campaign: '',\n    asc_source: `${eventType}|W|${result}|noreg`,\n  };\n\n  const modifiedHostMessage = messageFromHost\n    ? putAffiliateTags(sanitizeString(messageFromHost), amazonTags)\n    : '';\n\n  return (\n    <div\n      className={`details__host-message${\n        !messageFromHost && !pristineHostMessage ? '--hidden' : ''\n      }`}\n      id=\"hostMessage\"\n    >\n      {showReadMore ? (\n        <div\n          ref={readMoreRef}\n          className={`hosted-by__message${expanded ? '__expanded' : ''} ${\n            origin === 21 ? 'fabric' : ''\n          } show-code truncated`}\n          data-qa-id=\"host-message\"\n        >\n          {modifiedHostMessage}\n        </div>\n      ) : pristineHostMessage ? (\n        <div\n          ref={readMoreRef}\n          className={`hosted-by__message__expanded show-code ${origin === 21 ? 'fabric' : ''}`}\n          data-qa-id=\"host-message\"\n        >\n          <Typography variant=\"paragraph2\" classNames=\"host-message-placeholder\">\n            [This is your message to your guest]\n          </Typography>\n        </div>\n      ) : (\n        <div\n          ref={readMoreRef}\n          className={`hosted-by__message__expanded show-code ${origin === 21 ? 'fabric' : ''}`}\n          data-qa-id=\"host-message\"\n        >\n          {modifiedHostMessage}\n        </div>\n      )}\n      {showReadMore && (\n        <button\n          className=\"hosted-by__read-more\"\n          onClick={() => setExpanded(!expanded)}\n          data-qa-id={expanded ? 'show-less' : 'show-more'}\n        >\n          Show {expanded ? 'Less' : 'More'}\n          <PB_Chevron ratio={0.5} color={pebble} direction={expanded ? 'up' : 'down'} />\n        </button>\n      )}\n    </div>\n  );\n}\n","import React from 'react';\nimport {shallowEqual, useSelector} from 'react-redux';\nimport urls from 'urls';\nimport {Label} from '~/ViewInvitation/common/Label';\n\nimport {largishAndUp, pebble, tanzanite} from '~sass/pb_styleguide/base/_exports.sass';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {Link} from '~/common/_pb_components/atoms/Link';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_LocationAddressNavigationLine} from '~/common/svg/PB_LocationAddressNavigationLine';\n\nexport function LocationBlock(props) {\n  const {locationName, streetAddress, city, state, zipCode, eventId} = useSelector(\n    ({eventDetails: ed}) => ({\n      locationName: ed.locationName,\n      eventId: ed.eventId,\n      city: ed.city,\n      state: ed.state,\n      streetAddress: ed.streetAddress,\n      zipCode: ed.zipCode,\n      isPremium: ed.isPremium,\n    }),\n    shallowEqual\n  );\n\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n\n  const addr = streetAddress + city + state; // for smart map link\n  const addressDataQaValue = `${streetAddress}${city ? `, ${city}` : ''}${\n    state ? `, ${state}` : ''\n  }${zipCode ? ` ${zipCode}` : ''}`;\n\n  return (\n    <div className=\"view-invitation__location-block\">\n      <div>\n        <Label value=\"where\" />\n        <Typography variant=\"paragraph1\" classNames=\"view-invitation__details-module__section-body\">\n          {locationName && <span data-qa-id=\"location-name\">{locationName}</span>}\n          {(streetAddress || city || state || zipCode) && (\n            <>\n              {locationName && <br />}\n              <span data-qa-id=\"location-address\" data-qa-value={addressDataQaValue}>\n                {streetAddress}\n                {streetAddress && (city || state || zipCode) && <br />}\n                {city}\n                {city && ','} {state} {zipCode}\n              </span>\n            </>\n          )}\n        </Typography>\n      </div>\n      {(streetAddress || city || state || zipCode) && (\n        <Link\n          href={urls.get('event_map_redirect', {\n            event_id: eventId,\n          })}\n          data-qa-id=\"viewMap\"\n          variant=\"large\"\n          className=\"view-invitation__view-map-link\"\n          target=\"_blank\"\n          disabled={props.preview}\n        >\n          <PB_LocationAddressNavigationLine\n            ratio={largeScreens ? 0.75 : 0.5}\n            color={props.preview ? pebble : tanzanite}\n          />\n          View Map\n        </Link>\n      )}\n    </div>\n  );\n}\n","import React, {useRef} from 'react';\nimport {useStore} from 'react-redux';\nimport {useImpression} from '~/common/hooks/useImpression';\n\nexport function Module(props) {\n  const {\n    children,\n    moduleName,\n    isLast,\n    impressionEvent = undefined,\n    isPreview,\n    readonly,\n    ...acyclicalProps\n  } = props;\n\n  const tracking = {};\n  const trackingRef = useRef();\n  const store = useStore();\n  let onScreen = null;\n\n  if (impressionEvent) {\n    tracking.ref = trackingRef;\n    onScreen = useImpression(trackingRef, impressionEvent);\n  }\n\n  return (\n    <div\n      className={`module ${moduleName} ${isPreview ? 'preview' : ''}`}\n      data-qa-id={`${moduleName}-module`}\n      id={`module-${moduleName}`}\n      {...tracking}\n    >\n      {React.cloneElement(children, {\n        ...acyclicalProps,\n        readonly,\n        isCreationFlow: !window.location.pathname.startsWith('/event'),\n      })}\n    </div>\n  );\n}\n","import React from 'react';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_Arrow} from '~/common/svg/PB_Arrow';\n\nexport function MoreDetailsIndicator({preview}) {\n  return (\n    <div\n      className={`design-template__more-details-flex-wrapper ${\n        !preview ? 'invitation-margin' : ''\n      }`}\n    >\n      <Typography\n        className=\"design-template__more-details\"\n        data-qa-id=\"more_details_icon\"\n        variant=\"label2\"\n      >\n        MORE DETAILS\n      </Typography>\n      <PB_Arrow className=\"design-template__more-details-arrow\" ratio={0.39} direction=\"down\" />\n    </div>\n  );\n}\n","import React, {useRef, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {useHistory, useLocation} from 'react-router-dom';\nimport {CameraAddIcon} from '~/common/svg/CameraAddIcon';\nimport {animateRSVPButton} from '~/ViewInvitation/common/StickyRSVP';\nimport {stageAPhoto} from '../../reducers/uploadActions';\nimport {ADD_PENDING_PHOTO, SET_FILE_FAILED} from '~/ViewInvitation/reducers/constants';\n\nexport function PhotoUploadButton(props) {\n  const fileUploadRef = useRef();\n  const [fileInputValue, setFileInputValue] = useState('');\n  const dispatch = useDispatch();\n  const history = useHistory();\n  const location = useLocation();\n\n  const handleFileInputChange = (e) => {\n    e.preventDefault();\n    const images = e.target.files;\n\n    setFileInputValue('');\n\n    for (const image of images) {\n      dispatch({type: ADD_PENDING_PHOTO, file: image});\n      dispatch(stageAPhoto(image, handleError));\n    }\n    history.push(`/photos/select-photos${location.search}`);\n    return false;\n  };\n\n  const handleError = (file) => {\n    dispatch({type: SET_FILE_FAILED, file});\n  };\n\n  const hasRSVPd = useSelector((state) => state.rsvp?.hasRsvpd ?? false);\n\n  const handlePhotoUpload = (e) => {\n    if (hasRSVPd) {\n      e.preventDefault();\n      fileUploadRef.current.click();\n    } else {\n      animateRSVPButton();\n    }\n  };\n\n  return (\n    <>\n      <input\n        name=\"photo\"\n        ref={fileUploadRef}\n        type=\"file\"\n        value={fileInputValue}\n        onChange={handleFileInputChange}\n        accept=\"image/*\"\n        style={{display: 'none'}}\n        multiple\n      />\n\n      {props.isIcon ? (\n        <button\n          className=\"button-transparent photo-upload-icon\"\n          type=\"button\"\n          data-qa-id={`photo-upload-button-${props.location}`}\n          onClick={(e) => handlePhotoUpload(e)}\n        >\n          <CameraAddIcon />\n        </button>\n      ) : (\n        <button\n          className=\"secondary-button photos__add-button large\"\n          type=\"button\"\n          data-qa-id={`photo-upload-button-${props.location}`}\n          onClick={(e) => handlePhotoUpload(e)}\n        >\n          {props.buttonCopy}\n        </button>\n      )}\n    </>\n  );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport {PB_AddPhotosLine} from '~/common/svg/PB_AddPhotosLine';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {isPreview} from '~/ViewInvitation/utils';\n\nexport function PhotosModule() {\n  const photos = useSelector((state) => state.photoSummary?.photos ?? []);\n\n  const preview = isPreview();\n\n  return (\n    <div className=\"view-invitation__photos-module\">\n      <div className=\"view-invitation__title-with-icon-wrapper\">\n        <PB_AddPhotosLine ratio={0.75} />\n        <Typography variant=\"header3\" data-qa-id=\"photos-module-title\">\n          Photos\n        </Typography>\n      </div>\n      <div className=\"view-invitation__photos-module__photo-carousel\">\n        {photos.length > 0 ? (\n          photos.map((image, i) => (\n            <img data-qa-id=\"photo-tile\" src={image.url} alt={`event photo #${i + 1}`} />\n          ))\n        ) : (\n          <Typography variant=\"paragraph2\" data-qa-id=\"no-photos\">\n            There are no photos.\n          </Typography>\n        )}\n      </div>\n    </div>\n  );\n}\n","import {useEffect, useState} from 'react';\nimport {useSelector, useDispatch, shallowEqual} from 'react-redux';\nimport {voteForPollOption} from '../../reducers/apiActions';\nimport {trackPollVote} from '../../utils/analytics';\n\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_PollLine} from '~/common/svg/PB_PollLine';\nimport {largishAndUp, emerald, link} from '~sass/pb_styleguide/base/_exports.sass';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {Radio} from '~/common/_pb_components/atoms/Radio';\nimport {PB_CheckmarkCircle} from '~/common/svg/PB_CheckmarkCircle';\nimport {PB_DeleteBinLine} from '~/common/svg/PB_DeleteBinLine';\nimport {PB_EditLine} from '~/common/svg/PB_EditLine';\nimport {PB_MealOptions} from '~/common/svg/PB_MealOptions';\nimport {isPreview} from '../../utils';\nimport {PollChoiceOverlay} from '../../common/PollChoiceOverlay';\nimport {isMealOptionsEventType} from '~/common/utils/event_utils';\n\nexport function PollModule(props) {\n  const {onRemove, restored, onPropagateRestore, readonly} = props;\n  const {\n    options,\n    question,\n    allowOtherOptions,\n    pollId,\n    optionSelectedByUser,\n    totalResponseCount,\n    voted,\n    hasRSVPed,\n  } = useSelector(({poll: p, rsvp}) => ({\n    options: p.options?.map((o) => ({\n      key: o.id,\n      choice: o.option,\n      response_count: o.response_count,\n    })),\n    question: p.question,\n    allowOtherOptions: p.allow_other_options,\n    totalResponseCount: p.total_response_count,\n    pollId: p.id,\n    voted: p.voted,\n    optionSelectedByUser: p.option_selected_by_user,\n    hasRSVPed: rsvp.hasRsvpd,\n  }));\n\n  const isHost = useSelector((state) => state.user?.isHost);\n  const eventId = useSelector((state) => state.eventDetails?.eventId);\n  const widgets = useSelector((state) => state.eventDetails?.widgets);\n  const eventType = useSelector((state) => state.eventDetails?.eventType);\n  const showMealOptions = isMealOptionsEventType(eventType);\n\n  const [selectedChoice, setSelectedChoice] = useState(false);\n  const [changingChoice, setChangingChoice] = useState(false);\n  const [pollOverlayChoice, setPollOverlayChoice] = useState('');\n  const [pollOverlayOpen, setPollOverlayOpen] = useState(false);\n  const [guestsWhoVotedThis, setGuestsWhoVotedThis] = useState([]);\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (!optionSelectedByUser) {\n      setChangingChoice(true);\n    }\n    setSelectedChoice(optionSelectedByUser);\n  }, [optionSelectedByUser]);\n\n  const submitPollVote = () => {\n    trackPollVote('polls_vote');\n    dispatch(\n      voteForPollOption(pollId, 'cast_vote', {option: selectedChoice}, () => {\n        setChangingChoice(false);\n      })\n    );\n  };\n\n  const changeChoice = () => {\n    setChangingChoice(true);\n  };\n\n  const preview = isPreview();\n\n  useEffect(() => {\n    if (restored && preview && isHost) {\n      // API call to restore module\n      const patchedEventData = {\n        widgets,\n      };\n      onPropagateRestore(patchedEventData);\n    }\n  }, [restored]);\n\n  return (\n    <div className=\"view-invitation__poll-module\">\n      {preview && !readonly && (\n        <div className=\"view-invitation__preview-cta multi\">\n          <a\n            className=\"view-invitation__preview-cta\"\n            href={`/invitation/${eventId}/details`}\n            data-qa-id=\"previewCtaEdit\"\n          >\n            <PB_EditLine ratio={0.5} color={link} />\n            Edit\n          </a>\n          <span>|</span>\n          <button\n            className=\"unstyled-button view-invitation__preview-cta\"\n            ref={(elem) => props.connectCTA && props.connectCTA('remove-poll', elem)}\n            data-qa-id=\"previewCtaRemove\"\n          >\n            <PB_DeleteBinLine ratio={0.5} color={link} />\n            Remove\n          </button>\n        </div>\n      )}\n      <div className=\"view-invitation__poll-module__main-contents\">\n        <div className=\"view-invitation__title-with-icon-wrapper\">\n          {showMealOptions ? <PB_MealOptions ratio={0.75} /> : <PB_PollLine ratio={0.75} />}\n          <Typography\n            variant=\"header3\"\n            data-qa-id={showMealOptions ? 'meal-options-module-title' : 'poll-module-title'}\n          >\n            {showMealOptions ? 'Meal options' : 'Poll'}\n          </Typography>\n        </div>\n        <Typography\n          variant=\"paragraph3\"\n          color=\"pebble\"\n          classNames=\"view-invitation__poll-module__poll-question\"\n          data-qa-id=\"poll-question\"\n        >\n          {question}\n        </Typography>\n\n        {voted && !changingChoice ? (\n          <div\n            className=\"view-invitation__poll-module__poll-result-grid\"\n            data-qa-id=\"poll-module-guest\"\n          >\n            {options?.map((o, i) => (\n              <div\n                className={`view-invitation__poll-module__poll-result ${\n                  o.key === optionSelectedByUser ? 'winner' : ''\n                }`}\n                key={`pollOption_${o.key}`}\n              >\n                <div className=\"view-invitation__poll-module__poll-result-name\">\n                  <Typography variant=\"paragraph2\" data-qa-id=\"poll-option\" data-qa-value={o.key}>\n                    {o.choice}\n                  </Typography>\n                  {o.key === optionSelectedByUser && (\n                    <PB_CheckmarkCircle ratio={0.75} color={emerald} />\n                  )}\n                </div>\n                <div className=\"view-invitation__poll-module__results-view\">\n                  <Typography\n                    variant=\"paragraph2\"\n                    classNames=\"view-invitation__poll-module__result-count\"\n                    data-qa-id=\"poll-option-response-count\"\n                    data-qa-value={o.response_count}\n                  >\n                    {o.response_count}\n                  </Typography>\n                </div>\n              </div>\n            ))}\n          </div>\n        ) : (\n          <div className=\"view-invitation__poll-module__poll-options\">\n            {options?.map((o, i) => (\n              <Radio\n                onChange={() => setSelectedChoice(o.key)}\n                data-qa-id=\"poll-option\"\n                data-qa-value={o.key}\n                checked={selectedChoice !== undefined && selectedChoice === o.key}\n                label={o.choice}\n                id={`pollOption_${o.key}`}\n                key={`${o.key}_${i}`}\n                name={`pollOption_${o.key}`}\n                disabled={preview || !hasRSVPed}\n              />\n            ))}\n          </div>\n        )}\n      </div>\n      <div className=\"view-invitation__poll-module__vote-cta-wrapper\">\n        <Button\n          data-qa-id={changingChoice ? 'submit-choice' : 'change-my-choice'}\n          variant=\"primary\"\n          size={largeScreens ? 'large' : 'small'}\n          onClick={changingChoice ? submitPollVote : changeChoice}\n          noTextWrap\n          disabled={preview || !hasRSVPed || !selectedChoice}\n        >\n          {changingChoice ? 'Submit Choice' : 'Change My Choice'}\n        </Button>\n        {!preview && !hasRSVPed && (\n          <Typography variant=\"paragraph3\" color=\"pebble\">\n            You have to RSVP to vote.\n          </Typography>\n        )}\n      </div>\n      <PollChoiceOverlay\n        choice={pollOverlayChoice}\n        open={pollOverlayOpen}\n        onClose={() => setPollOverlayOpen(false)}\n        guests={guestsWhoVotedThis}\n      />\n    </div>\n  );\n}\n","import {useEffect, useState} from 'react';\nimport {useSelector, useDispatch, shallowEqual} from 'react-redux';\nimport {voteForPollOption} from '../../reducers/apiActions';\nimport {trackPollVote} from '../../utils/analytics';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n/* eslint-disable camelcase */\nimport {PB_PollLine} from '~/common/svg/PB_PollLine';\nimport {PB_CheckmarkCircle} from '~/common/svg/PB_CheckmarkCircle';\nimport {PB_DeleteBinLine} from '~/common/svg/PB_DeleteBinLine';\nimport {PB_EditLine} from '~/common/svg/PB_EditLine';\nimport {PB_MealOptions} from '~/common/svg/PB_MealOptions';\n/* eslint-enable camelcase */\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {Radio} from '~/common/_pb_components/atoms/Radio';\nimport {isMealOptionsEventType} from '~/common/utils/event_utils';\nimport {isPreview} from '../../utils';\nimport {PollChoiceOverlay} from '../../common/PollChoiceOverlay';\nimport {selectIsMealOptionsEventType} from '~/common/fabric/reducers/widgets/selectors';\nimport {largishAndUp, emerald, link} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport const PollModuleHost = ({\n  readonly,\n  onRemove,\n  restored,\n  onPropagateRestore,\n  noOverlay,\n  ...props\n}) => {\n  const {options, question, pollId, optionSelectedByUser, voted, hasRSVPed} = useSelector(\n    ({poll: p, rsvp}) => ({\n      options: p.options?.map((o, i) => ({\n        key: o.id || i,\n        choice: o.option || '',\n        response_count: o.response_count || '',\n      })),\n      question: p.question,\n      pollId: p.id,\n      voted: p.voted,\n      optionSelectedByUser: p.option_selected_by_user,\n      hasRSVPed: rsvp.hasRsvpd,\n    })\n  );\n\n  const isHost = useSelector((state) => state.user?.isHost);\n  const eventId = useSelector((state) => state.eventDetails?.eventId);\n  const widgets = useSelector((state) => state.eventDetails?.widgets);\n  const eventType = useSelector((state) => state.eventDetails?.eventType);\n  const pollOptions = useSelector((state) => state.poll?.options);\n  const showMealOptionsEventType = isMealOptionsEventType(eventType);\n  const isMealOptions = useSelector(selectIsMealOptionsEventType);\n  const showMealOptions = showMealOptionsEventType || isMealOptions;\n  const [selectedChoice, setSelectedChoice] = useState(false);\n  const [initialState, setInitialState] = useState(true);\n  const [changingChoice, setChangingChoice] = useState(false);\n  const [pollOverlayChoice, setPollOverlayChoice] = useState('');\n  const [pollOverlayOpen, setPollOverlayOpen] = useState(false);\n  const [guestsWhoVotedThis, setGuestsWhoVotedThis] = useState([]);\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n\n  const {rsvpDetails} = useSelector(\n    ({guestList: s}) => ({rsvpDetails: s.rsvpDetails}),\n    shallowEqual\n  );\n\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (!optionSelectedByUser) {\n      setChangingChoice(true);\n    }\n    setSelectedChoice(optionSelectedByUser);\n  }, [optionSelectedByUser]);\n\n  const submitPollVote = () => {\n    trackPollVote('polls_vote');\n    dispatch(\n      voteForPollOption(pollId, 'cast_vote', {option: selectedChoice}, () => {\n        setChangingChoice(false);\n      })\n    );\n  };\n\n  const changeChoice = () => {\n    setChangingChoice(true);\n    setInitialState(false);\n  };\n\n  const preview = isPreview();\n\n  const openPollOverlay = (choice) => {\n    setGuestsWhoVotedThis(() => {\n      const relevantGuests = pollOptions.filter((userChoice) => userChoice.option === choice)[0]\n        .response_user_ids;\n\n      const relevantGuestNames = [];\n      const allRsvps = [...rsvpDetails.yes, ...rsvpDetails.maybe, ...rsvpDetails.no];\n      for (let i = 0; i < relevantGuests.length; i++) {\n        const filteredGuest = allRsvps.filter((x) => x.user_id === relevantGuests[i]);\n        if (filteredGuest.length !== 0) {\n          relevantGuestNames.push(filteredGuest[0]);\n        }\n      }\n      return relevantGuestNames;\n    });\n\n    setPollOverlayChoice(choice);\n    setPollOverlayOpen(true);\n  };\n\n  useEffect(() => {\n    if (restored && preview && isHost) {\n      // API call to restore module\n      const patchedEventData = {\n        widgets,\n      };\n      onPropagateRestore(patchedEventData);\n    }\n  }, [restored]);\n\n  useEffect(() => {\n    // eslint-disable-next-line no-unused-expressions\n    !voted ? setChangingChoice(true) : setInitialState(false);\n  }, []);\n\n  /* eslint-disable no-nested-ternary,react/button-has-type */\n  return (\n    <div className=\"view-invitation__poll-module\">\n      {preview && !readonly && (\n        <div className=\"view-invitation__preview-cta multi\">\n          <a\n            className=\"view-invitation__preview-cta\"\n            href={`/invitation/${eventId}/details`}\n            data-qa-id=\"previewCtaEdit\"\n          >\n            <PB_EditLine ratio={0.5} color={link} />\n            Edit Poll\n          </a>\n          <span>|</span>\n          <button\n            className=\"unstyled-button view-invitation__preview-cta\"\n            ref={(elem) => props.connectCTA && props.connectCTA('remove-poll', elem)}\n            data-qa-id=\"previewCtaRemove\"\n            id=\"remove-poll\"\n          >\n            <PB_DeleteBinLine ratio={0.5} color={link} />\n            Remove\n          </button>\n        </div>\n      )}\n      <div className=\"view-invitation__poll-module__main-contents\">\n        <div className=\"view-invitation__title-with-icon-wrapper\">\n          {showMealOptions ? <PB_MealOptions ratio={0.75} /> : <PB_PollLine ratio={0.75} />}\n          <Typography\n            variant=\"header3\"\n            data-qa-id={showMealOptions ? 'meal-options-module-title' : 'poll-module-title'}\n          >\n            {showMealOptions ? 'Meal options' : 'Poll'}\n          </Typography>\n        </div>\n        <Typography\n          variant=\"paragraph3\"\n          color=\"pebble\"\n          classNames=\"view-invitation__poll-module__poll-question\"\n          data-qa-id=\"poll-question\"\n        >\n          {question}\n        </Typography>\n\n        {initialState || !changingChoice ? (\n          <div\n            className=\"view-invitation__poll-module__poll-result-grid\"\n            data-qa-id=\"poll-module-host\"\n          >\n            {options?.map((o) => (\n              <div\n                className={`view-invitation__poll-module__poll-result ${\n                  o.key === optionSelectedByUser ? 'winner' : ''\n                }`}\n                key={`pollOption_${o.key}`}\n              >\n                <div className=\"view-invitation__poll-module__poll-result-name\">\n                  <Typography variant=\"paragraph2\" data-qa-id=\"poll-option\" data-qa-value={o.key}>\n                    {o.choice}\n                  </Typography>\n                  {o.key === optionSelectedByUser && (\n                    <PB_CheckmarkCircle ratio={0.75} color={emerald} />\n                  )}\n                </div>\n                <div className=\"view-invitation__poll-module__results-view\">\n                  <Typography\n                    variant=\"paragraph2\"\n                    classNames=\"view-invitation__poll-module__result-count\"\n                    data-qa-id=\"poll-option-response-count\"\n                    data-qa-value={o.response_count}\n                  >\n                    {o.response_count}\n                  </Typography>\n                  <Button\n                    data-qa-id=\"view-poll-choice-overlay\"\n                    variant=\"link\"\n                    size=\"small\"\n                    onClick={() => openPollOverlay(o.choice)}\n                    disabled={preview}\n                  >\n                    View\n                  </Button>\n                </div>\n              </div>\n            ))}\n          </div>\n        ) : (\n          <div className=\"view-invitation__poll-module__poll-options\">\n            {options?.map((o) => (\n              <Radio\n                onChange={() => setSelectedChoice(o.key)}\n                data-qa-id=\"poll-option\"\n                data-qa-value={o.key}\n                checked={selectedChoice === o.key}\n                label={o.choice}\n                id={`pollOption_${o.key}`}\n                key={o.key}\n                name={`pollOption_${o.key}`}\n                disabled={preview || !hasRSVPed}\n              />\n            ))}\n          </div>\n        )}\n      </div>\n      <div className=\"view-invitation__poll-module__vote-cta-wrapper\">\n        <Button\n          data-qa-id={changingChoice ? 'submit-choice' : 'change-my-choice'}\n          variant=\"primary\"\n          size={largeScreens ? 'large' : 'small'}\n          onClick={initialState ? changeChoice : changingChoice ? submitPollVote : changeChoice}\n          noTextWrap\n          disabled={preview || (!initialState && !selectedChoice)}\n        >\n          {initialState ? 'Add Your Vote' : changingChoice ? 'Submit Choice' : 'Change My Choice'}\n        </Button>\n        {!preview && !hasRSVPed && (\n          <Typography variant=\"paragraph3\" color=\"pebble\">\n            You have to RSVP to vote.\n          </Typography>\n        )}\n      </div>\n      {noOverlay || (\n        <PollChoiceOverlay\n          choice={pollOverlayChoice}\n          open={pollOverlayOpen}\n          onClose={() => setPollOverlayOpen(false)}\n          guests={guestsWhoVotedThis}\n        />\n      )}\n    </div>\n  );\n};\n","import React from 'react';\nimport {Lottie} from './react-lottie';\n\n/**\n * lottie is a wrapper for the 'bodymovin' plugin\n * for Adobe After Effects which exports animations as JSON\n * which can be rendered as an svg image.\n */\nexport class LottiAnimation extends React.Component {\n  static defaultProps = {\n    bodymovinAssets: {},\n    bodymovinAnimation: '', // url for the json data\n    height: '',\n    width: '',\n    renderedTextImg: '',\n    renderedTextImgStyle: {position: 'absolute', top: '0'},\n    onLoadedHandler: () => {},\n    lottiStyle: {position: 'absolute'},\n  };\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      animationData: null,\n      isStopped: false,\n      isPaused: false,\n    };\n  }\n\n  componentDidMount() {\n    const {bodymovinAnimation, bodymovinAssets} = this.props;\n    LottiAnimation.fetchAnimationData(bodymovinAnimation, bodymovinAssets)\n      .then((animationData) => {\n        this.setState({animationData});\n      })\n      .catch((e) => {\n        console.error(`FAIL ANIM DATA FETCH ${bodymovinAnimation}, ${e}`);\n      });\n  }\n\n  // Fetch anim data when assets change, not just at initial render.\n  componentDidUpdate(prevProps, prevState, snapshot) {\n    const {bodymovinAnimation, bodymovinAssets} = this.props;\n\n    // Don't forget to compare props first, or you get an endless loop.\n    if (\n      bodymovinAssets !== prevProps.bodymovinAssets ||\n      bodymovinAnimation !== prevProps.bodymovinAnimation\n    ) {\n      LottiAnimation.fetchAnimationData(bodymovinAnimation, bodymovinAssets)\n        .then((animationData) => {\n          this.setState({animationData});\n        })\n        .catch((e) => {\n          console.error(`FAIL ANIM DATA FETCH ${bodymovinAnimation}, ${e}`);\n        });\n    }\n  }\n\n  /**\n   * Use the bodymovinAnimation (url) to fetch and prep animationData json.\n   * @returns {Promise} animationData json\n   */\n  static async fetchAnimationData(bodymovinAnimation, bodymovinAssets) {\n    const response = await fetch(bodymovinAnimation, {\n      headers: {Accept: 'application/json'},\n      credentials: 'same-origin',\n    });\n    const animationData = await response.json();\n    // Assign asset urls\n    for (const asset of animationData.assets) {\n      if (bodymovinAssets[asset.id]) {\n        asset.p = bodymovinAssets[asset.id];\n        asset.u = '';\n      }\n    }\n    return animationData;\n  }\n\n  render() {\n    const {isStopped, isPaused, animationData} = this.state;\n    const {renderedTextImg, renderedTextImgStyle, lottiStyle, innerRef} = this.props;\n\n    const height = this.props.height || 600;\n    const width = this.props.width || 600;\n\n    const options = {\n      loop: true,\n      autoplay: true,\n      animationData,\n      renderer: 'svg',\n      rendererSettings: {preserveAspectRatio: 'xMidYMid meet'},\n    };\n\n    const onLoadedHandler =\n      this.props.onLoadedHandler || (() => console.log('Animation images loaded.'));\n    const eventListeners = [{eventName: 'loaded_images', callback: onLoadedHandler}];\n\n    return (\n      <div\n        ref={innerRef}\n        className=\"invite-envelope__your-invitation__card\"\n        data-qa-id=\"lotti-anim\"\n        style={{height}}\n      >\n        {animationData && (\n          <Lottie\n            className=\"lotti\"\n            style={lottiStyle}\n            {...{options, height, width, isStopped, isPaused, eventListeners}}\n          />\n        )}\n        {animationData && renderedTextImg && (\n          <img\n            className=\"rendered-text-image\"\n            style={renderedTextImgStyle}\n            data-qa-id=\"lotti-rendered-text-image\"\n            height=\"100%\"\n            src={renderedTextImg}\n          />\n        )}\n      </div>\n    );\n  }\n}\n","import React from 'react';\nimport {useSelector, useStore} from 'react-redux';\nimport {LottiAnimation} from './LottiAnimation';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {useBrowserWidth} from '~/common/hooks/useBrowserWidth';\nimport {isCard, isHost, isPreview} from '~/ViewInvitation/utils';\nimport {PB_EditLine} from '~/common/svg/PB_EditLine'; // eslint-disable-line camelcase\nimport {isFabric} from '~/common/utils/event_utils';\nimport {tanzanite, smallAndUp} from '~sass/pb_styleguide/base/_exports.sass';\nimport {Card} from '~/common/canvas/Card/Card';\nimport {CanvasStickers} from '~/common/canvas/CanvasStickers';\nimport './Premium.sass';\n\nexport function MainAssetSlide({\n  isWebview,\n  invitation,\n  fabricArt,\n  envelope,\n  stamp,\n  guestName,\n  liner,\n  isLotti,\n  yourInvitationRef,\n  yourInvitationSizeRef,\n  inviteContainerRef,\n  desktopInviteRef,\n  envelopeWidthRef,\n  fabricCardRef,\n  stickerContainerRef,\n  origin,\n  envelopeStickers,\n}) {\n  const {matches: mediumScreens} = useMatchQuery(`(min-width: ${smallAndUp})`);\n  const store = useStore();\n  const browserWidth = useBrowserWidth();\n\n  const [editArtworkClicked, setEditArtworkClicked] = React.useState(false);\n  const [envelopeLoaded, setEnvelopeLoaded] = React.useState(false);\n\n  const background = useSelector((state) => state.premiumDesign.background);\n\n  let invitee;\n  if (isHost() || isPreview()) {\n    // host and preview should never see their name on envelope\n    if (isCard()) {\n      invitee = \"Recipient's Name\";\n    } else {\n      invitee = \"Guest's Name\";\n    }\n  } else if (guestName === 'AnonymousUser') {\n    // for shareable links, display generic messages\n    if (isCard()) {\n      invitee = 'Hello there!';\n    } else {\n      invitee = \"You're Invited\";\n    }\n  } else if (guestName && guestName !== ' ') {\n    // if the user has a guest name, show it on envelope\n    invitee = guestName;\n  } else {\n    // if no guest name is available, show a generic message\n    invitee = 'Hello there!';\n  }\n\n  const {image: inviteImg, bodymovinAssets, bodymovinAnimation, renderedTextImg} = invitation;\n  const renderedTextImgStyle = {};\n\n  const containerHeight = () => {\n    if (isWebview) {\n      return '100vh';\n    }\n    if (browserWidth < 500) {\n      return '512px';\n    }\n    let contHeight = parseInt(window.innerHeight, 10) - 180;\n    contHeight = contHeight > 1000 ? 1000 : contHeight;\n    return `${contHeight}px`;\n  };\n\n  const scaleClass = () => {\n    if (!isWebview && browserWidth > 500) {\n      if (window.innerHeight >= 840 && window.innerHeight <= 900) {\n        // 840-900\n        return 'scale-90';\n      }\n      if (window.innerHeight >= 800 && window.innerHeight < 840) {\n        // 800-839\n        return 'scale-80';\n      }\n      if (window.innerHeight > 700 && window.innerHeight < 800) {\n        // 701-799\n        return 'scale-70';\n      }\n      if (window.innerHeight <= 700) {\n        // 700 and down\n        return 'scale-60';\n      }\n    }\n    return '';\n  };\n\n  const getAsset = () => {\n    if (isFabric(origin)) {\n      return (\n        <div\n          className=\"animation-image invite-envelope__your-invitation fabric\"\n          ref={fabricCardRef}\n        >\n          <div className=\"invite-envelope__your-invitation__card\">\n            <Card fabricArt={fabricArt} imageRef={yourInvitationRef} />\n            <button\n              className=\"edit-artwork-btn hidden\"\n              id=\"editArtworkBtn\"\n              data-qa-id=\"edit-artwork\"\n              type=\"button\"\n              onClick={() => {\n                setEditArtworkClicked(true);\n                window.navigateToRoute('customize', store).then(() => setEditArtworkClicked(false));\n              }}\n            >\n              {editArtworkClicked && <span className=\"evt-spinner inline dark\" />}\n              <PB_EditLine ratio={0.5} color={tanzanite} />\n              {mediumScreens && <>Edit Artwork</>}\n            </button>\n          </div>\n        </div>\n      );\n    }\n    if (isLotti) {\n      return (\n        <div className=\"lotti-anim invite-envelope__your-invitation\">\n          <LottiAnimation\n            height=\"auto\"\n            renderedTextImgStyle={renderedTextImgStyle}\n            {...{bodymovinAssets, bodymovinAnimation, renderedTextImg}}\n            innerRef={yourInvitationRef}\n          />\n        </div>\n      );\n    }\n    return (\n      <div className=\"animation-image invite-envelope__your-invitation fabric\" ref={fabricCardRef}>\n        <div className=\"invite-envelope__your-invitation__card\">\n          <img\n            className=\"legacy_user_card\"\n            ref={yourInvitationRef}\n            src={inviteImg}\n            alt=\"invitation\"\n          />\n        </div>\n      </div>\n    );\n  };\n\n  return (\n    <div className=\"asset\">\n      <div\n        className=\"desktop-invite-container\"\n        ref={desktopInviteRef}\n        style={{\n          height: containerHeight(), // desktop: height, webview: 100vh, and 512 for MW\n          backgroundColor: isWebview ? background?.color : 'transparent',\n          backgroundImage: isWebview ? `url(${background?.imageMobile})` : undefined,\n        }}\n      >\n        <div\n          className={`invite-container step-0 ${isFabric(origin) ? 'fabric' : ''} ${scaleClass()}`}\n          ref={inviteContainerRef}\n        >\n          <div className=\"your-invitation-size-ref\" style={{position: 'absolute', opacity: '0'}}>\n            <img ref={yourInvitationSizeRef} src={inviteImg} alt=\"\" />\n          </div>\n\n          <div className=\"invite-animation open-flap\">\n            <div className=\"animation-image invite-envelope__open-flap-group\">\n              <img className=\"invite-envelope__open-flap\" src={envelope?.openBack} alt=\"\" />\n              <img className=\"invite-envelope__top-liner\" src={liner?.image} alt=\"\" />\n            </div>\n          </div>\n\n          <div className=\"invite-animation open-bottom\">\n            <img\n              className=\"animation-image invite-envelope__open-bottom\"\n              src={envelope?.openBack}\n              alt=\"\"\n            />\n            <img\n              className=\"animation-image invite-envelope__bottom-liner\"\n              src={liner?.image}\n              alt=\"\"\n            />\n          </div>\n\n          <div className=\"invite-animation your-invitation\">{getAsset()}</div>\n\n          <div className=\"invite-animation open-bottom-front\">\n            <img\n              ref={envelopeWidthRef}\n              className=\"animation-image invite-envelope__open-bottom-front\"\n              src={envelope?.openBack}\n              alt=\"\"\n            />\n          </div>\n\n          <div className=\"invite-animation closed-flap\">\n            <div className=\"animation-image invite-envelope__closed-flap\">\n              <img className=\"invite-envelope__full-width\" src={envelope?.closedBack} alt=\"\" />\n            </div>\n          </div>\n\n          <div className=\"invite-animation closed-front\">\n            <div className=\"animation-image invite-envelope__closed-front\">\n              <img\n                className=\"invite-envelope__full-width\"\n                src={envelope?.closedFront}\n                onLoad={() => setEnvelopeLoaded(true)}\n                alt=\"envelope\"\n              />\n              <img className=\"invite-envelope__stamp\" src={stamp?.image} alt=\"envelope stamp\" />\n              <span\n                style={{\n                  color: envelope?.name?.color,\n                  fontFamily: envelope?.name?.font,\n                }}\n                className=\"invite-envelope__guest-name\"\n              >\n                {invitee}\n              </span>\n              {envelopeStickers && envelopeLoaded && (\n                <div\n                  id=\"canvas__wrapper__stickers\"\n                  className=\"invite-envelope__closed-front__wrapper__canvas\"\n                  ref={stickerContainerRef}\n                >\n                  <CanvasStickers\n                    configJson={envelopeStickers}\n                    onChange={console.log}\n                    setCanvas={console.log}\n                  />\n                </div>\n              )}\n            </div>\n          </div>\n          <div className=\"invisible-width-box\">\n            <img src={envelope?.openBack} alt=\"\" />\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n","import React, {useState, useRef, useEffect} from 'react';\nimport {useSelector} from 'react-redux';\nimport {PremiumDesign} from './PremiumDesign';\nimport {PremiumInsert} from '~/ViewInvitation/routes/Landing/Premium/PremiumInsert';\nimport {Video} from './Video';\nimport {PB_Chevron} from '~/common/svg/PB_Chevron';\nimport {PB_Triangle} from '~/common/svg/PB_Triangle';\nimport {webviewAnimFinish, webviewAnimReplay, webviewAnimStart} from './webviewMessages';\n\nexport function CarouselDots(props) {\n  const {numPages, setPage, currentPage} = props;\n  const pages = Array.from(Array(Math.min(numPages, 16)).keys());\n  return (\n    <span className=\"premium-carousel__dots\">\n      {pages.map((p) => (\n        <span\n          className={p === currentPage ? 'premium-carousel__dot__active' : 'premium-carousel__dot'}\n          onClick={() => setPage(p)}\n          key={`premium-carousel-dot-${p}`}\n        />\n      ))}\n    </span>\n  );\n}\n\nexport function PremiumCarousel(props) {\n  const {designTemplateRef, fabricArt, isWebview} = props;\n  const [page, setPage] = useState(0);\n\n  const firstRender = useRef(true);\n  const alreadyRanAnimation = useRef(false);\n  const containerRef = useRef();\n  const {inserts, invitation, origin} = useSelector((s) => ({\n    invitation: s.premiumDesign?.invitation || {},\n    inserts: s.premiumDesign?.inserts || [],\n    origin: s.eventDetails.origin,\n  }));\n  const {videoId} = useSelector((s) => s.eventDetails);\n\n  const numPages = inserts.length + 1 + (videoId ? 1 : 0);\n\n  const paginateRight = () => {\n    if (page >= numPages - 1) return;\n    doSetPage(page + 1);\n  };\n\n  const paginateLeft = () => {\n    if (page < 1) return;\n    doSetPage(page - 1);\n  };\n\n  const doSetPage = (p) => {\n    if (p < 0 || p >= numPages) return;\n    containerRef.current.scrollLeft = `${document.body.clientWidth * p}`;\n    setPage(p);\n  };\n  const handleScroll = (e) => {\n    const position = containerRef.current.scrollLeft;\n    const newPage = Math.floor(0.5 + position / document.body.clientWidth);\n    if (newPage !== page) setPage(newPage);\n  };\n\n  const yourInvitationRef = useRef();\n  const yourInvitationSizeRef = useRef();\n  const inviteContainerRef = useRef();\n  const desktopInviteRef = useRef();\n  const replayButtonRef = useRef();\n  const fabricCardRef = useRef();\n  const stickerContainerRef = useRef();\n  const envelopeWidthRef = useRef();\n\n  const replayAnimation = () => {\n    stickerContainerRef?.current?.classList.remove('flipped');\n    replayButtonRef?.current?.classList.add('hidden');\n    if (props.preview) {\n      const editArtworkBtn = document.getElementById('editArtworkBtn');\n      editArtworkBtn?.classList.add('hidden');\n    }\n\n    inviteContainerRef?.current?.classList.add('reset');\n    webviewAnimReplay();\n\n    window.setTimeout(() => {\n      inviteContainerRef?.current?.classList.remove('reset');\n      inviteContainerRef?.current?.classList.add('step-0');\n      envelopeAnimation();\n    }, 1000);\n  };\n\n  const envelopeAnimation = () => {\n    inviteContainerRef?.current?.classList.remove('invite-container');\n    inviteContainerRef?.current?.classList.add('invite-container');\n\n    webviewAnimStart();\n\n    inviteContainerRef?.current?.classList.remove('step-0');\n    inviteContainerRef?.current?.classList.add('step-1');\n\n    window.setTimeout(() => {\n      stickerContainerRef?.current?.classList.add('flipped');\n    }, 300);\n\n    window.setTimeout(() => {\n      inviteContainerRef?.current?.classList.remove('step-1');\n      inviteContainerRef?.current?.classList.add('step-2');\n\n      window.setTimeout(() => {\n        inviteContainerRef?.current?.classList.remove('step-2');\n        inviteContainerRef?.current?.classList.add('step-3');\n\n        window.setTimeout(() => {\n          inviteContainerRef?.current?.classList.remove('step-3');\n          inviteContainerRef?.current?.classList.add('step-4');\n\n          window.setTimeout(() => {\n            inviteContainerRef?.current?.classList.remove('step-4');\n            inviteContainerRef?.current?.classList.add('step-5');\n\n            window.setTimeout(() => {\n              animationFinished();\n            }, 1000);\n          }, 500);\n        }, 250);\n      }, 500);\n    }, 1000);\n  };\n\n  useEffect(() => {\n    if (!firstRender.current && !alreadyRanAnimation.current && invitation) {\n      window.setTimeout(() => {\n        envelopeAnimation();\n      }, 2000);\n    }\n  }, [firstRender.current, alreadyRanAnimation.current, !!invitation]);\n\n  useEffect(() => {\n    if (!firstRender.current && alreadyRanAnimation.current) {\n      const editArtworkBtn = document.getElementById('editArtworkBtn');\n      if (!props.preview) {\n        editArtworkBtn?.classList.add('hidden');\n      }\n    }\n  }, [firstRender.current, alreadyRanAnimation.current, props.preview]);\n\n  useEffect(() => {\n    if (!alreadyRanAnimation.current) return;\n\n    if (props.preview) {\n      replayAnimation();\n    }\n  }, [props.preview, alreadyRanAnimation.current]);\n\n  useEffect(() => {\n    firstRender.current = false;\n\n    // if app webview, set replayAnimation function to be called by the app\n    if (isWebview) {\n      window.replayAnimation = replayAnimation;\n    }\n  }, []);\n\n  const animationFinished = () => {\n    replayButtonRef?.current?.classList.remove('hidden');\n\n    if (props.preview) {\n      const editArtworkBtn = document.getElementById('editArtworkBtn');\n      editArtworkBtn?.classList.remove('hidden');\n    }\n    alreadyRanAnimation.current = true;\n    webviewAnimFinish();\n  };\n\n  // TODO: Split carousel logic to a reusable component\n  return (\n    <div className=\"premium-carousel__container\">\n      {numPages > 1 && (\n        <button\n          className=\"unstyled-button paginate-left\"\n          onClick={paginateLeft}\n          disabled={page < 1}\n        >\n          <PB_Chevron direction=\"left\" />\n        </button>\n      )}\n      <div className=\"premium-carousel\" onScroll={handleScroll} ref={containerRef}>\n        <div className={`premium-carousel__page ${origin === 21 ? 'fabric' : ''}`}>\n          <PremiumDesign\n            isWebview={isWebview}\n            height={props.height}\n            invitation={invitation}\n            designTemplateRef={designTemplateRef}\n            yourInvitationRef={yourInvitationRef}\n            yourInvitationSizeRef={yourInvitationSizeRef}\n            inviteContainerRef={inviteContainerRef}\n            desktopInviteRef={desktopInviteRef}\n            envelopeWidthRef={envelopeWidthRef}\n            fabricCardRef={fabricCardRef}\n            stickerContainerRef={stickerContainerRef}\n            preview={props.preview}\n            fabricArt={fabricArt}\n          />\n        </div>\n        {inserts.map((insert, index) => (\n          <div\n            className=\"premium-carousel__page premium-carousel__page__insert\"\n            key={`premium-carousel-insert-${index + 1}`}\n          >\n            <PremiumInsert insert={insert} />\n          </div>\n        ))}\n        {videoId && (\n          <div className=\"premium-carousel__page premium-carousel__page__insert\">\n            <Video event_videos_id={videoId} />\n          </div>\n        )}\n      </div>\n      {numPages > 1 && (\n        <button\n          className=\"unstyled-button paginate-right\"\n          onClick={paginateRight}\n          disabled={page >= numPages - 1}\n        >\n          <PB_Chevron direction=\"right\" />\n        </button>\n      )}\n      {numPages > 1 && <CarouselDots numPages={numPages} currentPage={page} setPage={doSetPage} />}\n      {page === 0 && !isWebview && (\n        <button\n          className=\"animation-replay-button hidden\"\n          ref={replayButtonRef}\n          onClick={() => replayAnimation()}\n          data-qa-id=\"replay-animation\"\n        >\n          <PB_Triangle ratio={1.1} />\n          Replay\n        </button>\n      )}\n    </div>\n  );\n}\n","import React, {useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {MainAssetSlide} from './MainAssetSlide';\n\nexport function PremiumDesign(props) {\n  const {\n    invitation,\n    isWebview,\n    yourInvitationRef,\n    yourInvitationSizeRef,\n    inviteContainerRef,\n    desktopInviteRef,\n    envelopeWidthRef,\n    designTemplateRef,\n    fabricCardRef,\n    stickerContainerRef,\n    height,\n    preview,\n    fabricArt,\n  } = props;\n  const envelope = useSelector((state) => state.premiumDesign.envelope);\n  const stamp = useSelector((state) => state.premiumDesign.stamp);\n  const liner = useSelector((state) => state.premiumDesign.liner);\n  const hasRsvpd = useSelector((state) => state.rsvp?.hasRsvpd);\n  const guestName = useSelector((state) => state.user.name);\n  const origin = useSelector((state) => state.eventDetails.origin);\n  const envelopeStickers = useSelector((state) => state.premiumDesign.envelopeStickers);\n\n  const [imageSize, setImageSize] = useState({});\n\n  const isLotti = !!(\n    invitation.bodymovinAnimation &&\n    invitation.renderedTextImg &&\n    invitation.renderedTextImg.length > 8 &&\n    !evite.detects.isIE &&\n    !evite.detects.isEdge\n  );\n\n  return (\n    <div className=\"premium-design__container\">\n      <MainAssetSlide\n        {...{\n          isWebview,\n          guestName,\n          invitation,\n          fabricArt,\n          envelope,\n          stamp,\n          isLotti,\n          liner,\n          designTemplateRef,\n          height,\n          inviteImgHeight: imageSize.height,\n          inviteImgWidth: imageSize.width,\n          isMobile: true,\n          hasRsvpd,\n          yourInvitationRef,\n          yourInvitationSizeRef,\n          inviteContainerRef,\n          desktopInviteRef,\n          envelopeWidthRef,\n          fabricCardRef,\n          stickerContainerRef,\n          origin,\n          preview,\n          envelopeStickers,\n        }}\n      />\n    </div>\n  );\n}\n","import React from 'react';\nimport {UseReducer} from 'redux';\n\nimport linkifyHtml from 'linkifyjs/html';\n\nfunction TextAsset({title, text}) {\n  // The text here is html prepared by our rich-text editor component.\n  // It has been run through the 'clean_asset_tags' filter on the server before it gets here\n  // It needs to get rendered as-is. (a valid use of dangerouslySetInnerHTML)\n  const textMarkup = linkifyHtml(text);\n  const getTextMarkup = () => ({__html: textMarkup});\n  return (\n    <div className=\"premium_text_insert\">\n      <div className=\"card-base text portrait\">\n        <h2 className=\"card-subheader\" style={{textAlign: 'center'}}>\n          {title}\n        </h2>\n        <div className=\"body\" dangerouslySetInnerHTML={getTextMarkup()} />\n      </div>\n    </div>\n  );\n}\n\nfunction PhotoAsset({title, imageKey}) {\n  return (\n    <div className=\"premium_photo_insert\">\n      <div className=\"premium_photo_insert__wrapper\">\n        <img\n          className=\"premium_photo_insert__photo\"\n          src={`/services/images/${imageKey}/s0`}\n          alt=\"invite photo\"\n        />\n        {/* {<h3 className=\"premium_photo_insert__caption\">{title}</h3>} */}\n      </div>\n    </div>\n  );\n}\n\nexport function PremiumInsert({insert}) {\n  if (insert.card_type === 'text') return <TextAsset title={insert.title} text={insert.text} />;\n  if (insert.card_type === 'photo')\n    return <PhotoAsset title={insert.title} imageKey={insert.image_key} />;\n  console.log('Error - Unknown card_type: ', insert.card_type);\n  return null;\n}\n","import React, {useEffect, useState} from 'react';\nimport evite from 'evite';\nimport {CircleLoader} from '~/common/components/Loader/CircleLoader';\nimport {VideoPlayer} from './VideoPlayer';\nimport {VideoRendering} from './VideoRendering';\nimport {isPreview} from '~/ViewInvitation/utils';\n\nexport function Video(props) {\n  const {event_videos_id, event_context = 'invitation'} = props;\n  const [isLoading, setIsLoading] = useState(false);\n  const [videoData, setVideoData] = useState({});\n  const fetchVideoData = async (url) => {\n    setIsLoading(true);\n\n    const response = await evite.fetch(url, {\n      method: 'get',\n      credentials: 'include',\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    });\n\n    setIsLoading(false);\n\n    try {\n      if (!response.ok) {\n        throw new Error('Error loading video data');\n      } else {\n        const data = await response.json();\n        // Segments is an array of segments. It should contain one segment for each event-context.\n        const {segments} = data;\n        for (let i = 0; i < segments.length; i++) {\n          const segment = segments[i];\n          // Find the video segment that matches the current event_context\n          if (segment.event_context === event_context) {\n            setVideoData(segment);\n            break;\n          }\n        }\n      }\n    } catch (e) {\n      evite.error(e.message);\n    }\n  };\n\n  useEffect(() => {\n    // Fetch the video\n    const url = `/video/${event_videos_id}`;\n    // url = '/assets/js/view_invitation/Video/mock-data.json'; // TODO: Remove this after local testing\n    fetchVideoData(url);\n\n    return () => {\n      setVideoData({});\n    };\n  }, [event_videos_id]);\n\n  if (isLoading) {\n    return <CircleLoader size={evite.detects.isMobile ? 'small' : 'large'} position=\"center\" />;\n  }\n\n  if (!videoData) {\n    return null;\n  }\n\n  if (isPreview()) {\n    const {rendered_video} = videoData;\n    if (!rendered_video) {\n      return (\n        <>\n          <VideoRendering />\n          <span className=\"rendering_disable\">\n            Video playback has been disabled in preview mode.\n          </span>\n        </>\n      );\n    }\n    return (\n      <div>\n        <VideoPlayer {...videoData} isPreview />\n      </div>\n    );\n  }\n  if (videoData.is_viewable) {\n    return <VideoPlayer {...videoData} />;\n  }\n  return null;\n}\n","import React, {useRef, useEffect, useState} from 'react';\nimport styled from 'styled-components';\nimport ReactPlayer from 'react-player';\nimport './VideoPlayer.sass';\n\nexport const StyledPlayerWrapper = styled.div`\n  position: relative;\n  display: flex;\n  justify-content: center;\n  overflow: hidden;\n  border-radius: 0.5rem;\n`;\n\nexport const StyledBgDiv = styled.div`\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  background-image: ${(props) => `url(${props.backgroundImgUrl})`};\n  background-repeat: no-repeat;\n  background-size: cover;\n  background-position: center;\n  opacity: 0.5;\n  filter: blur(2px);\n  -webkit-filter: blur(2px);\n`;\n\nexport const StyledVideo = styled.div`\n  z-index: 2;\n  box-shadow: 2px 3px 14px #6f7378;\n  outline: none;\n`;\n\nexport function VideoPlayer(props) {\n  const {published_video, preview_image_url, rendered_video, isPreview} = props;\n  if (isPreview && !rendered_video) {\n    console.error('No rendered video in preview');\n    return null;\n  }\n  if (!isPreview && !published_video) {\n    console.error('No published video in view invitation');\n    return null;\n  }\n  const videoContRef = useRef(null);\n  const maxWidth = evite.detects.isMobile ? 328 : 626;\n  const maxHeight = evite.detects.isMobile ? 217 : 352;\n  const [vidWidth, setVidWidth] = useState('100%');\n  const [videoPlaying, setVideoPlaying] = useState(false);\n  const {url, content_type, playlist_url, metadata} = isPreview ? rendered_video : published_video;\n  const {duration} = metadata;\n  const progressReport = {\n    event: 'reportVideoProgress',\n    '25pct-seconds-value': duration / 4,\n    25: 0,\n    50: 0,\n    75: 0,\n    100: 0,\n  };\n\n  useEffect(() => {\n    const {width, height} = metadata;\n    const aspectRatio = width / height;\n    const isPortrait = height > width;\n\n    if (isPortrait) {\n      if (height > maxHeight) {\n        setVidWidth(aspectRatio * maxHeight);\n      } else {\n        setVidWidth(width);\n      }\n    } else if (width > maxWidth) {\n      setVidWidth(maxWidth);\n    } else {\n      setVidWidth(width);\n    }\n  }, [published_video, rendered_video]);\n\n  return (\n    <StyledPlayerWrapper className=\"video-player\">\n      <StyledBgDiv\n        className=\"video-player__bg\"\n        ref={videoContRef}\n        backgroundImgUrl={preview_image_url}\n      />\n\n      {/* <div ref={(node) => (videoNode = node)} /> */}\n      <StyledVideo width={vidWidth} data-qa-id=\"video-invitation\">\n        <ReactPlayer\n          url={isPreview ? url : playlist_url}\n          playing={videoPlaying}\n          onReady={() => {\n            setVideoPlaying(true);\n          }}\n          onProgress={({played}) => {\n            if (played < 0.1) {\n              // this gets triggered when seeking to the beginning or play for second time\n              progressReport[25] = 0;\n              progressReport[50] = 0;\n              progressReport[75] = 0;\n              progressReport[100] = 0;\n            } else if (played > 0.2 && played < 0.3 && !progressReport[25]) {\n              progressReport[25] = 1;\n              dataLayer.push(progressReport);\n            } else if (played >= 0.45 && played < 0.55 && !progressReport[50]) {\n              progressReport[50] = 1;\n              dataLayer.push(progressReport);\n            } else if (played >= 0.7 && played < 0.8 && !progressReport[75]) {\n              progressReport[75] = 1;\n              dataLayer.push(progressReport);\n            } else if (played === 1) {\n              progressReport[100] = 1;\n              dataLayer.push(progressReport);\n            }\n          }}\n          controls\n          width={vidWidth}\n          light={preview_image_url}\n          height={metadata.height > maxHeight ? maxHeight : metadata.height}\n        />\n      </StyledVideo>\n    </StyledPlayerWrapper>\n  );\n}\n","import React from 'react';\nimport {CircleLoader} from '~/common/components/Loader/CircleLoader';\nimport './VideoRendering.sass';\n\nexport function VideoRendering() {\n  return (\n    <div className=\"video-rendering\">\n      <CircleLoader />\n      <div className=\"voice heading\">Hang tight!</div>\n      <div className=\"voice\">\n        Your video file is taking longer than expected to <br /> process, but we're working on it...\n      </div>\n    </div>\n  );\n}\n","import React from 'react';\nimport lottie from 'lottie-web';\n\n/**\n * lottie is a wrapper for the 'bodymovin' plugin\n * for Adobe After Effects which exports animations as JSON\n * which can be rendered as an svg image.\n */\n\nexport class Lottie extends React.Component {\n  static defaultProps = {\n    eventListeners: [],\n    isStopped: false,\n    isPaused: false,\n    speed: 1,\n    ariaRole: 'button',\n    ariaLabel: 'animation',\n    isClickToPauseDisabled: false,\n    title: '',\n    className: '',\n  };\n\n  componentDidMount() {\n    const {options, eventListeners} = this.props;\n\n    const {loop, autoplay, animationData, rendererSettings, segments} = options;\n\n    this.options = {\n      container: this.el,\n      renderer: 'svg',\n      loop: loop !== false,\n      autoplay: autoplay !== false,\n      segments: segments !== false,\n      animationData,\n      rendererSettings,\n    };\n\n    this.options = {...this.options, ...options};\n\n    this.anim = lottie.loadAnimation(this.options);\n\n    this.registerEvents(eventListeners);\n  }\n\n  componentWillUpdate(nextProps /* , nextState */) {\n    /* Recreate the animation handle if the data is changed */\n    if (this.options.animationData !== nextProps.options.animationData) {\n      this.deRegisterEvents(this.props.eventListeners);\n      this.destroy();\n      this.options = {...this.options, ...nextProps.options};\n      this.anim = lottie.loadAnimation(this.options);\n      this.registerEvents(nextProps.eventListeners);\n    }\n  }\n\n  componentDidUpdate() {\n    if (this.props.isStopped) {\n      this.stop();\n    } else if (this.props.segments) {\n      this.playSegments();\n    } else {\n      this.play();\n    }\n\n    this.pause();\n    this.setSpeed();\n    this.setDirection();\n  }\n\n  componentWillUnmount() {\n    this.deRegisterEvents(this.props.eventListeners);\n    this.destroy();\n    this.options.animationData = null;\n    this.anim = null;\n  }\n\n  setSpeed() {\n    this.anim.setSpeed(this.props.speed);\n  }\n\n  setDirection() {\n    this.anim.setDirection(this.props.direction);\n  }\n\n  play() {\n    this.anim.play();\n  }\n\n  playSegments() {\n    this.anim.playSegments(this.props.segments);\n  }\n\n  stop() {\n    this.anim.stop();\n  }\n\n  pause() {\n    if (this.props.isPaused && !this.anim.isPaused) {\n      this.anim.pause();\n    } else if (!this.props.isPaused && this.anim.isPaused) {\n      this.anim.pause();\n    }\n  }\n\n  destroy() {\n    this.anim.destroy();\n  }\n\n  registerEvents(eventListeners) {\n    eventListeners.forEach((eventListener) => {\n      this.anim.addEventListener(eventListener.eventName, eventListener.callback);\n    });\n  }\n\n  deRegisterEvents(eventListeners) {\n    eventListeners.forEach((eventListener) => {\n      this.anim.removeEventListener(eventListener.eventName, eventListener.callback);\n    });\n  }\n\n  handleClickToPause = () => {\n    // This method is for handling the ability to pause by clicking on the animation\n    if (this.anim.isPaused) {\n      this.anim.play();\n    } else {\n      this.anim.pause();\n    }\n  };\n\n  render() {\n    const {width, height, ariaRole, ariaLabel, isClickToPauseDisabled, title, className} =\n      this.props;\n\n    const getSize = (initial) => {\n      let size;\n\n      if (typeof initial === 'number') {\n        size = `${initial}px`;\n      } else {\n        size = initial || '100%';\n      }\n\n      return size;\n    };\n\n    const lottieStyles = {\n      // width: getSize(width),\n      height: getSize(height),\n      overflow: 'hidden',\n      margin: '0 auto',\n      outline: 'none',\n      ...this.props.style,\n    };\n\n    const onClickHandler = isClickToPauseDisabled ? () => null : this.handleClickToPause;\n\n    return (\n      <div\n        ref={(c) => {\n          this.el = c;\n        }}\n        className={className}\n        style={lottieStyles}\n        onClick={onClickHandler}\n        title={title}\n        role={ariaRole}\n        aria-label={ariaLabel}\n        tabIndex=\"0\"\n        data-qa-id=\"lotti-anim-wrapper\"\n      />\n    );\n  }\n}\n","// send message to app webview that animation has started\nexport const webviewAnimStart = () => {\n  // ios\n  try {\n    window.webkit?.messageHandlers?.animationStarted &&\n      window.webkit.messageHandlers.animationStarted.postMessage(true);\n  } catch (e) {\n    console.error(e);\n    alert(`An error occurred in fabricCreateIsPremium(ios): ${e}`);\n  }\n\n  // android\n  try {\n    if (window.webview?.animationStarted) window.webview.animationStarted(true);\n  } catch (e) {\n    console.error(e);\n    alert(`An error occurred in fabricCreateIsPremium(android): ${e}`);\n  }\n};\n\n// send message to app webview that animation has finished\nexport const webviewAnimFinish = () => {\n  // ios\n  try {\n    window.webkit?.messageHandlers?.animationFinished &&\n      window.webkit.messageHandlers.animationFinished.postMessage(true);\n  } catch (e) {\n    console.error(e);\n    alert(`An error occurred in fabricCreateIsPremium(ios): ${e}`);\n  }\n\n  // android\n  try {\n    if (window.webview?.animationFinished) window.webview.animationFinished(true);\n  } catch (e) {\n    console.error(e);\n    alert(`An error occurred in fabricCreateIsPremium(android): ${e}`);\n  }\n};\n\n// send message to app webview that animation has been replayed\nexport const webviewAnimReplay = () => {\n  // ios\n  try {\n    window.webkit?.messageHandlers?.animationReplay &&\n      window.webkit.messageHandlers.animationReplay.postMessage(true);\n  } catch (e) {\n    console.error(e);\n    alert(`An error occurred in fabricCreateIsPremium(ios): ${e}`);\n  }\n\n  // android\n  try {\n    if (window.webview?.animationReplay) window.webview.animationReplay(true);\n  } catch (e) {\n    console.error(e);\n    alert(`An error occurred in fabricCreateIsPremium(android): ${e}`);\n  }\n};\n","import {useEffect} from 'react';\nimport {shallowEqual, useSelector, useStore} from 'react-redux';\nimport {useHistory} from 'react-router-dom';\nimport {RegistryVendor} from '~/ViewInvitation/common/RegistryVendor';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {getEditUrl, isPreview} from '~/ViewInvitation/utils';\nimport {PB_DeleteBinLine} from '~/common/svg/PB_DeleteBinLine';\nimport {PB_EditLine} from '~/common/svg/PB_EditLine';\nimport {link} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function RegistryModule(props) {\n  const {showHeader = true, locationPrefix, readonly, inModal = false} = props;\n  const history = useHistory();\n  const {isHost} = useSelector((state) => state.user);\n  const {eventId, isPremium} = useSelector((state) => state.eventDetails, shallowEqual);\n\n  const registries = useSelector((state) => state.registry?.registries ?? []);\n\n  const registryName = useSelector((state) => state.registry?.name ?? '');\n\n  const hasMultiple = registries.length > 1;\n  const moduleTitle = `${registryName}'s Gift Registr${hasMultiple ? 'ies' : 'y'}`;\n\n  const preview = isPreview();\n\n  return (\n    <div className=\"submodule-registry\">\n      {preview && !readonly && (\n        <div className=\"view-invitation__preview-cta multi\">\n          <button\n            className=\"unstyled-button view-invitation__preview-cta\"\n            onClick={() => history.push(`/${eventId}/gifting`)}\n            data-qa-id=\"edit-registries\"\n          >\n            <PB_EditLine ratio={0.5} color={link} />\n            Edit\n          </button>\n          <span>|</span>\n          <button\n            className=\"unstyled-button view-invitation__preview-cta\"\n            data-qa-id=\"remove-registries\"\n            id=\"remove-registries\"\n            ref={(elem) => props.connectCTA && props.connectCTA('remove-registries', elem)}\n          >\n            <PB_DeleteBinLine ratio={0.5} color={link} />\n            Remove\n          </button>\n        </div>\n      )}\n      <div className=\"view-invitation__gifting-module__registry-wrapper\">\n        {showHeader && (\n          <Typography\n            variant=\"header3\"\n            classNames=\"view-invitation__registry-module-title\"\n            data-qa-id=\"registry-module-title\"\n          >\n            {moduleTitle}\n          </Typography>\n        )}\n\n        <ul className={`view-invitation__registry-grid ${inModal ? 'scroll' : ''}`}>\n          {registries.map((registry, index) => (\n            <li key={index}>\n              <RegistryVendor\n                registry={registry}\n                displayText=\"View registry\"\n                dataQaId={`${locationPrefix ? `${locationPrefix}-` : ''}button-registry_${\n                  index + 1\n                }`}\n              />\n            </li>\n          ))}\n        </ul>\n      </div>\n    </div>\n  );\n}\n","import {useState} from 'react';\nimport {shallowEqual, useDispatch, useSelector, useStore} from 'react-redux';\nimport {PB_Chevron} from '~/common/svg/PB_Chevron';\nimport {PB_SettingsLine} from '~/common/svg/PB_SettingsLine';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {SettingsOverlay} from '~/ViewInvitation/common/SettingsOverlay';\nimport {updateGuestNotificationSettings} from '~/ViewInvitation/reducers/apiActions';\nimport {toastAlert} from '~/common/_pb_components/atoms/Toast';\nimport {PB_AlertLine} from '~/common/svg/PB_AlertLine';\nimport {PB_CheckmarkCircle} from '~/common/svg/PB_CheckmarkCircle';\nimport {isPreview} from '~/ViewInvitation/utils';\nimport {EVENT_OPTIONS_UPDATED, EVENT_REMINDERS_UPDATED} from '~/ViewInvitation/reducers/constants';\n\nexport function SettingsModule() {\n  const dispatch = useDispatch();\n  const store = useStore();\n  const urlParams = new URLSearchParams(window.location.search);\n  const [overlayOpen, setOverlayOpen] = useState(urlParams.get('settings') == 1);\n  const isHost = useSelector((state) => state.user?.isHost ?? false, shallowEqual);\n  const originalSettings = useSelector((store) => store.rsvp.notifications, shallowEqual);\n\n  const {reminders, eventId, start: startDate} = useSelector((store) => store.eventDetails);\n\n  const submitSettings = ({activityInvolvingMe, eventActivities, guestRSVPs}, reminders) =>\n    new Promise((resolve, reject) => {\n      const notifications = {\n        ...originalSettings,\n        notify_only_my_activity: activityInvolvingMe || eventActivities,\n        email_new_comments: eventActivities,\n        email_new_rsvp: guestRSVPs,\n      };\n\n      // Update notifications\n      return dispatch(\n        updateGuestNotificationSettings(\n          notifications,\n          async () => {\n            if (isHost) {\n              const url = `/ajax/event/${eventId}/update`;\n              const data = {\n                id: eventId,\n                event: {\n                  event_reminder_0: reminders.length > 0 && reminders[0] ? reminders[0] : null,\n                  event_reminder_1: reminders.length > 1 && reminders[1] ? reminders[1] : null,\n                },\n              };\n              try {\n                const response = await evite.fetch(url, {\n                  method: 'PATCH',\n                  body: JSON.stringify(data),\n                  credentials: 'include',\n                  cache: 'no-cache',\n                  headers: {\n                    'X-CSRFToken': evite.cookie('csrftoken'),\n                    Accept: 'application/json',\n                    'Content-Type': 'application/json; charset=utf-8',\n                  },\n                });\n                if (!response.ok) {\n                  const responseJSON = await response.json();\n                  if (responseJSON?.message) {\n                    toastAlert(responseJSON.message, {\n                      icon: <PB_AlertLine />,\n                      type: 'error',\n                    });\n                  }\n                } else {\n                  const responseJSON = await response.json();\n                  store.dispatch({\n                    type: EVENT_REMINDERS_UPDATED,\n                    payload: reminders.filter((r) => !!r),\n                  });\n                  store.dispatch({\n                    type: EVENT_OPTIONS_UPDATED,\n                    payload: responseJSON.options,\n                  });\n                  toastAlert('Settings updated.', {\n                    icon: <PB_CheckmarkCircle />,\n                    type: 'success',\n                  });\n                }\n                setOverlayOpen(false);\n                resolve();\n              } catch (err) {\n                toastAlert('Unable to update event reminder settings. Please try again.', {\n                  icon: <PB_AlertLine />,\n                  type: 'error',\n                });\n                setOverlayOpen(false);\n                reject();\n              }\n            } else {\n              toastAlert('Settings updated.', {type: 'success'});\n              setOverlayOpen(false);\n              resolve();\n            }\n          },\n          (dispatch, getState, {results}) => {\n            setOverlayOpen(false);\n            const message = results?.message;\n            toastAlert(message || 'Unable to update settings. Please try again.', {\n              icon: <PB_AlertLine />,\n              type: 'error',\n            });\n            reject();\n          }\n        )\n      );\n    });\n\n  const preview = isPreview();\n\n  return (\n    <>\n      <button\n        onClick={preview ? undefined : () => setOverlayOpen(true)}\n        className=\"unstyled-button view-invitation__event-settings-cta\"\n        data-qa-id=\"event-settings\"\n      >\n        <PB_SettingsLine ratio={0.75} />\n        <div className=\"view-invitation__event-settings-cta__text-wrapper\">\n          <Typography\n            variant=\"paragraph2\"\n            color=\"charcoal\"\n            classNames=\"view-invitation__event-settings-cta__title\"\n            data-qa-id=\"settings-module-title\"\n          >\n            Settings\n          </Typography>\n          <Typography variant=\"paragraph3\" color=\"pebble\">\n            Choose your notification preferences.\n          </Typography>\n        </div>\n        <PB_Chevron direction=\"right\" />\n      </button>\n      {!preview && (\n        <SettingsOverlay\n          notificationDefaults={{\n            guestRSVPs: originalSettings.email_new_rsvp,\n            eventActivities: originalSettings.email_new_comments,\n            activityInvolvingMe: originalSettings.notify_only_my_activity,\n          }}\n          isHost={isHost}\n          reminders={reminders}\n          open={overlayOpen}\n          onClose={() => setOverlayOpen(false)}\n          onSave={submitSettings}\n          eventDate={new Date(startDate).getTime()}\n        />\n      )}\n    </>\n  );\n}\n","import React from 'react';\nimport evite from 'evite';\nimport {Picture} from '~/common/_pb_components/atoms/Picture';\nimport {Link} from '~/common/_pb_components/atoms/Link';\n\nconst {dfp} = evite;\n\nexport class ViewInvitationGoogleAd extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      refresh: false,\n      inFrame: true,\n      adOverride: false,\n    };\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    if (!this.state.adOverride) {\n      googletag.cmd.push(() => {\n        googletag.pubads().refresh([window.slideshowSideAd]);\n      });\n    }\n  }\n\n  componentDidMount() {\n    if (window.ad_override?.image) {\n      this.setState({\n        adOverride: (\n          <Link\n            className=\"fabric-free-banner-ad\"\n            data-qa-id=\"view-invitation-ad-override-link\"\n            href={window.ad_override.link}\n            as=\"transparent\"\n            target=\"_blank\"\n          >\n            <Picture\n              data-qa-id=\"view-invitation-ad-override-image\"\n              srcSet={window.ad_override.image}\n            />\n          </Link>\n        ),\n      });\n    } else if (window.invitationPhotoAd) {\n      googletag.cmd.push(() => {\n        googletag.pubads().refresh([window.invitationPhotoAd]);\n      });\n    } else {\n      window.setTimeout(() => {\n        const adSlotWidth = window.innerWidth < 728 ? 300 : 728;\n        const adSlotHeight = window.innerWidth < 728 ? 50 : 90;\n        const REFRESH_KEY = 'refresh';\n        const REFRESH_VALUE = evite.features.isEnabled('auto_refresh_ads', false)\n          ? 'true'\n          : 'false';\n        // Number of seconds to wait after the slot becomes viewable.\n        const SECONDS_TO_WAIT_AFTER_VIEWABILITY = 30;\n\n        googletag.cmd.push(() => {\n          window.invitationPhotoAd = googletag\n            .defineSlot(\n              dfp.compactUrl(dfp.DESKTOP_ID, dfp.DESKTOP_SLOT_1, dfp.DESKTOP_SLOT_2),\n              [[adSlotWidth, adSlotHeight]],\n              'view-invitation-google-ad'\n            )\n            .setTargeting(REFRESH_KEY, REFRESH_VALUE)\n            // .setTargeting('loc', 'bot')\n            .addService(googletag.pubads());\n\n          googletag.pubads().addEventListener('impressionViewable', (event) => {\n            const {slot} = event;\n            if (slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE) > -1) {\n              setTimeout(() => {\n                if (this.state.inFrame) {\n                  googletag.pubads().refresh([slot]);\n                } else {\n                  this.setState({refresh: true});\n                }\n              }, SECONDS_TO_WAIT_AFTER_VIEWABILITY * 1000);\n            }\n          });\n          googletag.pubads().addEventListener('slotVisibilityChanged', (event) => {\n            const {slot} = event;\n            if (slot.getTargeting(REFRESH_KEY).indexOf(REFRESH_VALUE) > -1) {\n              this.setState({inFrame: event.inViewPercentage >= 50});\n              if (event.inViewPercentage >= 50 && this.state.refresh) {\n                this.setState({refresh: false});\n                googletag.pubads().refresh([slot]);\n              }\n            }\n          });\n          googletag.display('view-invitation-google-ad');\n          evite.viewability && evite.viewability.trackAd('view-invitation-google-ad');\n          googletag.pubads().refresh([window.invitationPhotoAd], {changeCorrelator: false});\n        });\n      }, 1000);\n    }\n  }\n\n  render() {\n    return this.state.adOverride ? (\n      <div className=\"view-invitation-google-ad\" style={{textAlign: 'center'}}>\n        <div className=\"fabric-free-banner-ad__wrapper\">{this.state.adOverride}</div>\n      </div>\n    ) : (\n      <div className=\"view-invitation-google-ad\" style={{textAlign: 'center'}}>\n        <div id=\"view-invitation-google-ad\" className=\"gpt-ad\" />\n      </div>\n    );\n  }\n}\n","import React, {useState, useEffect} from 'react';\nimport {useSelector, useDispatch} from 'react-redux';\nimport {fetchWhatToBring, postWhatToBringSignup} from '~/ViewInvitation/reducers/apiActions';\nimport {PB_DeleteBinLine} from '~/common/svg/PB_DeleteBinLine';\nimport {PB_EditLine} from '~/common/svg/PB_EditLine';\nimport {PB_WhatToBringLine} from '~/common/svg/PB_WhatToBringLine';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {largishAndUp, link} from '~sass/pb_styleguide/base/_exports.sass';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {WhatToBringOverlay} from '~/ViewInvitation/common/WhatToBringOverlay';\nimport {isPreview} from '~/ViewInvitation/utils';\n\nexport function WhatToBringModule(props) {\n  const {onRemove, restored, onPropagateRestore, readonly} = props;\n  const dispatch = useDispatch();\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n\n  useEffect(() => {\n    let eventId;\n    if (props.store) {\n      eventId = props.store?.getState()?.eviteEvent?.id;\n    } else {\n      eventId = window.event_id || window.evite_event.id;\n    }\n    dispatch(fetchWhatToBring(eventId));\n  }, []);\n\n  const {items} = useSelector((state) => state.whatToBring);\n  const {userId, isHost, name} = useSelector((state) => state.user);\n  const {eventId, isPremium, widgets} = useSelector((state) => state.eventDetails);\n  const {wtbListId} = useSelector(({whatToBringSummary: wtbs}) => ({\n    wtbListId: wtbs.list_id,\n  }));\n\n  const hasRSVPd = useSelector((state) => state.rsvp?.hasRsvpd ?? false);\n\n  const [overlayOpen, setOverlayOpen] = useState(false);\n  const onOpenWhatToBring = (e) => {\n    setOverlayOpen(true);\n  };\n\n  const onAssign = async (userId, guestName, itemId, quantity) => {\n    const item = items.find((i) => i.id === itemId);\n\n    if (!item) {\n      throw new Error('An error occurred during assignments.');\n    }\n\n    return new Promise((resolve, reject) => {\n      dispatch(\n        postWhatToBringSignup(eventId, wtbListId, itemId, quantity, {\n          userId,\n          userName: guestName,\n        })\n      )\n        .then(() => {\n          resolve();\n        })\n        .catch((error) => {\n          reject(error);\n        });\n    });\n  };\n\n  const onUnassign = async (userId, guestName, itemId) => {\n    const item = items.find((i) => i.id === itemId);\n    if (!item) return;\n\n    const alreadyAssigned = item.selections.map((s) => ({\n      ...s.user,\n      quantity: s.quantity,\n    }));\n\n    const user = alreadyAssigned.find((a) => a.id === userId);\n    if (!user) return;\n\n    const quantity = 0;\n\n    return new Promise((resolve, reject) => {\n      dispatch(\n        postWhatToBringSignup(eventId, wtbListId, itemId, quantity, {\n          userId,\n          userName: guestName,\n        })\n      )\n        .then(() => {\n          resolve();\n        })\n        .catch((error) => {\n          reject(error);\n        });\n    });\n  };\n\n  const preview = isPreview();\n\n  const onRemoveModule = async () => {\n    if (!preview || !isHost) return;\n    // API call to remove module\n    const remainingWidgets = widgets.filter((w) => w.widget_id !== wtbListId);\n    const patchedEventData = {\n      widgets: remainingWidgets,\n    };\n    onRemove(patchedEventData);\n  };\n\n  useEffect(() => {\n    if (restored && preview && isHost) {\n      // API call to restore module\n      const patchedEventData = {\n        widgets,\n      };\n      onPropagateRestore(patchedEventData);\n    }\n  }, [restored]);\n\n  return (\n    <>\n      {preview && !readonly && (\n        <div className=\"view-invitation__preview-cta multi light-bg\">\n          <a\n            className=\"view-invitation__preview-cta light-bg\"\n            href={`/invitation/${eventId}/details`}\n            data-qa-id=\"previewCtaEdit\"\n          >\n            <PB_EditLine ratio={0.5} color={link} />\n            Edit\n          </a>\n          <span>|</span>\n          <button\n            className=\"unstyled-button view-invitation__preview-cta light-bg\"\n            ref={(elem) => props.connectCTA && props.connectCTA('remove-wtb', elem)}\n            data-qa-id=\"previewCtaRemove\"\n          >\n            <PB_DeleteBinLine ratio={0.5} color={link} />\n            Remove\n          </button>\n        </div>\n      )}\n      <div className=\"view-invitation__what-to-bring-module\">\n        <div className=\"view-invitation__what-to-bring__main-contents\">\n          <div className=\"view-invitation__title-with-icon-wrapper view-invitation__what-to-bring__title\">\n            <PB_WhatToBringLine ratio={0.75} />\n            <Typography variant=\"header3\" data-qa-id=\"what-to-bring-module-title\">\n              What to bring\n            </Typography>\n          </div>\n          <Typography\n            variant=\"paragraph3\"\n            color=\"pebble\"\n            classNames=\"view-invitation__what-to-bring__subheading\"\n          >\n            Help your host out! View their What to Bring list and sign up for your choice now.\n          </Typography>\n        </div>\n        <Button\n          data-qa-id={hasRSVPd ? 'view-their-list' : 'rsvp-to-contribute'}\n          variant=\"primary\"\n          size={largeScreens ? 'large' : 'small'}\n          onClick={onOpenWhatToBring}\n          noTextWrap\n          disabled={preview || !hasRSVPd}\n        >\n          {hasRSVPd || isHost ? 'View List' : 'RSVP to View Their List'}\n        </Button>\n      </div>\n      {!preview && (\n        <WhatToBringOverlay\n          open={overlayOpen}\n          onClose={() => setOverlayOpen(false)}\n          items={items}\n          userId={userId}\n          name={name}\n          isHost={isHost}\n          hasRsvpd={hasRSVPd}\n          onAssign={onAssign}\n          onUnassign={onUnassign}\n        />\n      )}\n    </>\n  );\n}\n","import React, {useEffect, useRef, useState} from 'react';\nimport {shallowEqual, useSelector} from 'react-redux';\nimport {useLocation} from 'react-router-dom';\nimport Tooltip from 'rc-tooltip';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {largishAndUp, link} from '~sass/pb_styleguide/base/_exports.sass';\nimport {PB_Info} from '~/common/svg/PB_Info';\nimport {PB_SettingsLine} from '~/common/svg/PB_SettingsLine';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {WhoIsComingOverlay} from '~/ViewInvitation/common/WhoIsComingOverlay';\nimport {isPreview} from '~/ViewInvitation/utils';\nimport {CrownIcon} from '~/common/svg/CrownIcon';\n\nexport function WhosComingModule({readonly, connectCTA}) {\n  const location = useLocation();\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n  const ready = useRef(false);\n\n  const {rsvpDetails} = useSelector(\n    ({guestList: s}) => ({rsvpDetails: s.rsvpDetails}),\n    shallowEqual\n  );\n  const guestPreviews = useSelector(\n    (state) => state?.whoIsComing?.guestPreviews ?? [],\n    shallowEqual\n  );\n\n  const {hostUserId, isPremium, eventId, allowKids, origin} = useSelector((state) => ({\n    ...state.eventDetails,\n    allowKids: !!state.eventDetails.allowKids,\n  }));\n\n  const isPrivateGuestlist = useSelector(\n    (state) => state?.whoIsComing?.isPrivateGuestlist ?? false\n  );\n\n  const isHost = useSelector((state) => state.user?.isHost ?? false, shallowEqual);\n\n  const [overlayOpen, setOverlayOpen] = useState(false);\n\n  const sortGuests = (a, b) => {\n    if (a.userId === hostUserId) return -1;\n    if (b.userId === hostUserId) return 1;\n    return 0;\n  };\n\n  const preview = isPreview();\n\n  useEffect(() => {\n    if (ready.current) {\n      const params = new URLSearchParams(location.search);\n      const utm_source = params.get('utm_source');\n      if (utm_source === 'GUEST_FEED_REPLY') {\n        setOverlayOpen(true);\n      } else {\n        const urlPieces = location.pathname.split('/');\n        const page = urlPieces.length > 0 ? urlPieces[urlPieces.length - 1] : '';\n        if (page === 'guestlist') {\n          // Open guestlist overlay if the user is at the /guestlist URL\n          setOverlayOpen(true);\n        }\n      }\n    }\n  }, [location.pathname, location.search, ready.current]);\n\n  useEffect(() => {\n    ready.current = true;\n  }, []);\n\n  return (\n    <>\n      <button\n        className={`unstyled-button view-invitation__preview-cta ${\n          !preview || readonly ? 'hidden' : ''\n        }`}\n        data-qa-id=\"guest-options\"\n        id=\"guest-options\"\n        ref={(elem) => connectCTA && connectCTA('guest-options', elem)}\n      >\n        <PB_SettingsLine ratio={0.5} color={link} />\n        Guest Options\n      </button>\n      <div className=\"view-invitation__who-is-coming__module-title-wrapper\">\n        <div style={{display: 'flex', alignItems: 'center'}}>\n          <Typography\n            variant=\"header3\"\n            data-qa-id=\"who-is-coming-module-title\"\n            classNames=\"who-is-coming__module-title\"\n          >\n            Who's coming\n          </Typography>\n          {origin === 21 && preview && (\n            <Tooltip\n              placement=\"top\"\n              trigger={['hover', 'click']}\n              overlay={\n                <span>\n                  <strong>Example Guest List:</strong> This will become a real list of guests who\n                  RSVP \"Yes\" after you send your invitation.\n                </span>\n              }\n              overlayClassName=\"who-is-coming__rc-tooltip\"\n            >\n              <span className=\"who-is-coming__info-popover\" data-qa-id=\"who-is-coming-info\">\n                <PB_Info className=\"event-details__info\" />\n              </span>\n            </Tooltip>\n          )}\n        </div>\n        {(!isPrivateGuestlist || isHost) && (\n          <button\n            className=\"unstyled-button link large\"\n            data-qa-id=\"see-all-guests\"\n            onClick={() => setOverlayOpen(true)}\n            disabled={preview}\n          >\n            See All Guests\n          </button>\n        )}\n      </div>\n      {isPrivateGuestlist && !isHost ? (\n        <Typography variant=\"paragraph2\" data-qa-id=\"who-is-coming-hidden-list\">\n          Your host has hidden the guest list for this event.\n        </Typography>\n      ) : (\n        <>\n          <div\n            className=\"view-invitation__who-is-coming__guest-preview-grid\"\n            data-qa-id=\"who-is-coming-guest-list\"\n          >\n            {guestPreviews\n              .sort(sortGuests)\n              .slice(0, 5)\n              .map((guest, index) => (\n                <div\n                  className=\"view-invitation__who-is-coming__guest\"\n                  style={{\n                    gridRow: guest.rsvpComment && largeScreens ? 'span 2' : undefined,\n                  }}\n                  key={`guest_${guest.userId}`}\n                >\n                  <div className=\"view-invitation__who-is-coming__guest-details\">\n                    <p\n                      className=\"view-invitation__who-is-coming__guest-name\"\n                      data-qa-id=\"guest-name\"\n                      data-qa-value={guest.guestName.toLowerCase().replaceAll(' ', '-')}\n                    >\n                      {guest.guestName}\n                      {guest.userId === hostUserId ? ' (Host)' : ''}\n                      {guest.guestOfHonor && <CrownIcon ratio=\"0.5\" />}\n                    </p>\n                    <Typography\n                      variant=\"paragraph3\"\n                      color=\"emeraldWebText\"\n                      data-qa-id=\"guest-count\"\n                      classNames=\"view-invitation__who-is-coming__guest-rsvp-count\"\n                    >\n                      {guest.adults}{' '}\n                      {guest.adults > 1\n                        ? allowKids\n                          ? 'Adults'\n                          : 'Guests'\n                        : allowKids\n                          ? 'Adult'\n                          : 'Guest'}\n                      {allowKids &&\n                        guest.kids > 0 &&\n                        `| ${guest.kids} ${guest.kids > 1 ? 'Kids' : 'Kid'}`}\n                    </Typography>\n                  </div>\n                  {guest.rsvpComment && (\n                    <div className=\"view-invitation__who-is-coming__rsvp-message\">\n                      <Typography\n                        variant=\"paragraph2\"\n                        color=\"charcoal\"\n                        data-qa-id=\"guest-rsvp-comment\"\n                      >\n                        {guest.rsvpComment.slice(0, 150)}\n                        {guest.rsvpComment.length > 150 ? '...' : ''}\n                      </Typography>\n                    </div>\n                  )}\n                </div>\n              ))}\n          </div>\n          {!preview && (\n            <WhoIsComingOverlay\n              open={overlayOpen}\n              onClose={() => setOverlayOpen(false)}\n              rsvpDetails={rsvpDetails}\n              preview={preview}\n            />\n          )}\n        </>\n      )}\n    </>\n  );\n}\n","import React, {useEffect, useRef} from 'react';\nimport {useSelector} from 'react-redux';\nimport {AdPanel} from '~/ViewInvitation/routes/Landing/AdPanel';\n\nimport {Module} from './Module';\nimport {DetailsModule} from './DetailsModule';\nimport {WhosComingModule} from './WhosComingModule';\nimport {GiftingModule} from './GiftingModule';\nimport {WhatToBringModule} from './WhatToBringModule';\nimport {DonationsModule} from './DonationsModule';\nimport {RegistryModule} from './RegistryModule';\nimport {PollModule} from './PollModule';\nimport {PollModuleHost} from './PollModuleHost';\nimport {PhotosModule} from './PhotosModule';\nimport {ViewInvitationTabs} from '../../common/ViewInvitationTabs';\nimport {DesignTemplate} from './DesignTemplate';\nimport {SettingsModule} from './SettingsModule';\nimport {StickyEditEvent} from '../../common/StickyEditEvent';\nimport {RestoreScrollPosition} from '../../common/RestoreScrollPosition';\nimport {GiftingModal} from './GiftingModal';\nimport {hasAds, isPreview} from '~/ViewInvitation/utils';\nimport {mediumAndUp, largishAndUp, silver} from '~sass/pb_styleguide/base/_exports.sass';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {ViewInvitationGoogleAd} from './ViewInvitationGoogleAd';\nimport {getUsedAsTypeName} from '~/common/utils/event_utils';\nimport {isAllowedVideoFormat} from '~/common/fabric/utils';\nimport {Video} from '~/common/_pb_components/atoms/Video';\n\nexport const LandingPage = (props) => {\n  const {\n    hideDesign,\n    hideRSVP,\n    hideTabs,\n    readonly,\n    forceShowGuestOptions,\n    showReturnToEdit,\n    onReturnToEdit,\n    connectCTA,\n    hidePreviewBanner,\n    hideGoogleAd,\n    contentPanelWidth = 0,\n    contentPanelHeight = 0,\n    ctasToForceShow = [],\n    isViewInvitationPage = false,\n  } = props;\n  const displayOrder = useSelector(({moduleOrder: mo}) => mo.displayOrder).slice();\n\n  const backgroundRef = useRef(null);\n\n  const photos = useSelector((state) => state.photoSummary?.photos ?? []);\n  // Someone should clean up this file if they have time, its kinda scattered\n  const {isPremium} = useSelector((store) => store.eventDetails);\n\n  const usedAs = useSelector((state) => state.eventDetails?.usedAs || state.eviteEvent?.used_as);\n\n  const {hasRsvpd} = useSelector((store) => store.rsvp);\n  const colors = useSelector(({coverData: cd}) => cd?.template?.colors || ['white']);\n  const {isHost} = useSelector((state) => state.user);\n  const background = useSelector((state) => state.premiumDesign.background);\n  const ctaWordings = getUsedAsTypeName(usedAs);\n\n  if (hasRsvpd) displayOrder.push('settings');\n  const preview = isPreview();\n  const showGuestPoll = !isHost || preview;\n\n  const keysToComponentMap = {\n    event_details: DetailsModule,\n    who_is_coming: WhosComingModule,\n    gifting: GiftingModule,\n    donation: DonationsModule,\n    poll: showGuestPoll ? PollModule : PollModuleHost,\n    what_to_bring: WhatToBringModule,\n    photo: PhotosModule,\n    settings: SettingsModule,\n    gift_registry: RegistryModule,\n  };\n\n  const getComponentFromKey = (moduleName) => {\n    if (typeof keysToComponentMap[moduleName] !== 'undefined') {\n      const Component = keysToComponentMap[moduleName];\n      return <Component />;\n    }\n    return null;\n  };\n\n  const TrackableModules = {\n    what_to_bring: 'wtbImpression',\n  };\n\n  const {matches: mediumScreens} = useMatchQuery(`(min-width: ${mediumAndUp})`);\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n\n  const backgroundImage = background?.imageDesktop\n    ? largeScreens\n      ? background?.imageDesktop\n      : background?.imageMobile\n    : null;\n  const isVideo = isPremium && isAllowedVideoFormat(backgroundImage);\n  let backgroundStyles;\n  if (!isVideo)\n    backgroundStyles = {\n      backgroundColor: isPremium && background?.color ? background?.color : silver,\n      backgroundImage: isPremium && backgroundImage ? `url(${backgroundImage})` : null,\n    };\n\n  // We don't have time to refactor this cuz we're rushing but this needs to be refactored\n  useEffect(() => {\n    if (backgroundRef.current && contentPanelWidth) {\n      if (isVideo) {\n        if (contentPanelWidth && !isViewInvitationPage && mediumScreens) {\n          backgroundRef.current.style.left = `${contentPanelWidth / 2}px`;\n        } else {\n          backgroundRef.current.style.left = '50%';\n        }\n      } else if (!isViewInvitationPage && mediumScreens) {\n        if (mediumScreens) {\n          backgroundRef.current.style.width = `${contentPanelWidth}px`;\n        } else {\n          backgroundRef.current.style.height = `${contentPanelHeight}px`;\n        }\n      }\n    }\n  }, [contentPanelWidth, isViewInvitationPage, mediumScreens]);\n\n  return (\n    <>\n      {hasAds() && !isPremium ? <ViewInvitationGoogleAd /> : null}\n      <RestoreScrollPosition path={window.location.pathname} />\n      {\n        /* eslint no-nested-ternary: 1 */\n        preview && !hidePreviewBanner ? (\n          <div className=\"view-invitation__preview-banner\">\n            <Typography\n              variant=\"paragraph3\"\n              color=\"charcoal\"\n              classNames={`view-invitation__preview-banner-text ${\n                showReturnToEdit ? 'edit-preview' : ''\n              }`}\n            >\n              This is a preview of your {ctaWordings.toLowerCase()}.\n            </Typography>\n            {showReturnToEdit && (\n              <Button\n                id=\"continueBtn\"\n                data-qa-id=\"continueBtn\"\n                className=\"fabric-header__continue\"\n                variant=\"link\"\n                size=\"small\"\n                onClick={onReturnToEdit}\n              >\n                Done\n              </Button>\n            )}\n          </div>\n        ) : !hideTabs ? (\n          <ViewInvitationTabs\n            themeColor={largeScreens ? colors[0] : 'white'}\n            bgAlpha={0.75}\n            ctaWordings={ctaWordings}\n          />\n        ) : null\n      }\n\n      {isVideo ? (\n        <Video\n          src={backgroundImage}\n          className={`view-invitation__background-video${\n            isViewInvitationPage ? ' view-invitation-page__background-video' : ''\n          }`}\n          ref={backgroundRef}\n        />\n      ) : (\n        <div\n          className=\"view-invitation__background-image\"\n          ref={backgroundRef}\n          style={backgroundStyles}\n        />\n      )}\n      {!preview && !hideRSVP && <StickyEditEvent />}\n      {!isPremium && !hideGoogleAd && preview ? (\n        <AdPanel connectCTA={connectCTA} showRemoveButton={preview && !readonly} />\n      ) : null}\n      {!hideDesign && (\n        <DesignTemplate\n          themeColor={largeScreens ? colors[0] : 'white'}\n          bgAlpha={0.75}\n          preview={!readonly}\n        />\n      )}\n      <div className=\"view-invitation__modules-wrapper\">\n        {displayOrder.map((moduleName, index) => {\n          const isLast = index === displayOrder.length - 1;\n          const module = getComponentFromKey(moduleName);\n          if (\n            (moduleName === 'photo' && photos.length === 0) ||\n            (moduleName === 'gift_registry' && displayOrder.includes('gifting'))\n          )\n            return null;\n          /* eslint react/no-children-prop: [1, {\"allowFunctions\": true}] */\n          return module ? (\n            <Module\n              key={moduleName}\n              moduleName={moduleName}\n              isLast={isLast}\n              impressionEvent={TrackableModules[moduleName]}\n              isPreview={preview}\n              readonly={readonly && (moduleName !== 'who_is_coming' || !forceShowGuestOptions)}\n              connectCTA={connectCTA}\n              forceShowCTA={ctasToForceShow.includes(moduleName)}\n            >\n              {module}\n            </Module>\n          ) : null;\n        })}\n      </div>\n      {(displayOrder.indexOf('gift_registry') >= 0 || displayOrder.indexOf('gifting') >= 0) &&\n        !mediumScreens && (\n          <GiftingModal\n            giftingType={displayOrder.indexOf('gift_registry') >= 0 ? 'registry' : 'gifting'}\n          />\n        )}\n    </>\n  );\n};\n","import React from 'react';\n// import './messages-reinvention.sass';\nimport {useLocation} from 'react-router-dom';\nimport {useSelector} from 'react-redux';\nimport {ViewInvitationTabs} from '~/ViewInvitation/common/ViewInvitationTabs';\nimport {Messaging} from '~/messaging';\nimport {getUsedAsTypeName} from '~/common/utils/event_utils';\n\nexport function Messages(props) {\n  const usedAs = useSelector((store) => store.eventDetails.used_as);\n  const ctaWordings = getUsedAsTypeName(usedAs);\n\n  return (\n    <>\n      <ViewInvitationTabs active=\"messages\" ctaWordings={ctaWordings} />\n      <Messaging {...props} keepHeaderSpacer />\n    </>\n  );\n}\n","import React, {useEffect, useState} from 'react';\nimport {useSelector, useStore} from 'react-redux';\nimport {useParams} from 'react-router-dom';\nimport {fetchSinglePhotoPost} from '~/ViewInvitation/reducers/apiActions';\nimport {selectPost} from '~/ViewInvitation/reducers/posts';\nimport {ScrollToTopOnMount} from '~/ViewInvitation/common/ScrollToTop';\nimport {BackLink} from '~/ViewInvitation/common/BackLink';\nimport {CommentEditor} from '~/ViewInvitation/routes/Guests/CommentEditor/CommentEditor';\nimport {Spinner} from '~/common/components/Loader/Spinner';\nimport {InlineComment} from '~/ViewInvitation/common/InlineComment';\n\nexport function AllComments() {\n  const {postId} = useParams();\n  const post = useSelector(selectPost(postId));\n  const store = useStore();\n\n  const eventId = useSelector((state) => state.eventDetails?.eventId ?? null);\n\n  const hasRSVPd = useSelector((state) => state.rsvp?.hasRsvpd ?? false);\n\n  const [isEditingComment, setIsEditingComment] = useState(false);\n  const [postIdOfComment, setPostIdOfComment] = useState(null);\n  const [fetchInProgress, setFetchInProgress] = useState(false);\n\n  const postAvailable = !!post;\n\n  if (!postAvailable && !fetchInProgress) {\n    store.dispatch(\n      fetchSinglePhotoPost(eventId, postId, () => {\n        setFetchInProgress(false);\n      })\n    );\n    setFetchInProgress(true);\n  }\n\n  const editingIsFinished = () => {\n    setIsEditingComment(false);\n    setPostIdOfComment(null);\n  };\n\n  const handleSetEditing = (postIdToEdit) => {\n    if (postIdToEdit) {\n      setIsEditingComment(true);\n      setPostIdOfComment(postIdToEdit);\n    } else {\n      setIsEditingComment(false);\n      setPostIdOfComment(null);\n    }\n  };\n  const reversedReplyIds = post && post.replyIds.slice(0).reverse();\n\n  return (\n    <div className=\"photo-comments\">\n      <ScrollToTopOnMount />\n\n      <div className=\"inline-heading\">\n        <BackLink\n          dataQaId=\"all-photo-comments__back\"\n          to=\"/photos\"\n          className=\"all-photo-comments__back\"\n        />\n\n        <p className=\"all-photo-comments__heading font_36\">Comments</p>\n      </div>\n\n      {!postAvailable && <Spinner center />}\n\n      {postAvailable && (\n        <>\n          {hasRSVPd && (\n            <div className=\"photo-comments__input-wrap\">\n              <CommentEditor\n                initialComment=\"\"\n                parentPostId={postId}\n                postIdOfComment={postIdOfComment}\n                isEditingComment={isEditingComment}\n                editingIsFinished={editingIsFinished}\n                hideClear\n                shouldClearComment\n                dataQaId=\"photo-comments-input\"\n              />\n            </div>\n          )}\n\n          <div className=\"photo-comments__reply-wrap\">\n            {reversedReplyIds.map((r) => (\n              <InlineComment\n                commentId={r}\n                className=\"photo-comment--inline\"\n                key={`inline-comment__${r}`}\n                parentPostId={postId}\n                handleSetEditing={handleSetEditing}\n                showCount\n                showEditIfAllowed\n                dataQaIdModifier=\"all-comments\"\n              />\n            ))}\n          </div>\n        </>\n      )}\n    </div>\n  );\n}\n","import React, {useEffect, useState} from 'react';\nimport {useSelector, useStore} from 'react-redux';\nimport {useInView} from 'react-intersection-observer';\nimport {ScrollToTopOnMount} from '~/ViewInvitation/common/ScrollToTop';\nimport {fetchMorePhotos} from '~/ViewInvitation/reducers/apiActions';\nimport {BackLink} from '~/ViewInvitation/common/BackLink';\nimport {Heading} from '~/ViewInvitation/common/Heading';\nimport {SinglePhoto} from '~/ViewInvitation/routes/Photos/SinglePhoto';\n// import './allphotos.sass';\nimport {RestoreScrollPosition} from '~/ViewInvitation/common/RestoreScrollPosition';\nimport {PhotoUploadButton} from '~/ViewInvitation/routes/Landing/PhotoUploadButton';\nimport {isCanceled} from '~/common/utils/event_utils';\n\nexport function Photos() {\n  const store = useStore();\n\n  const [fetchInProgress, setFetchInProgress] = useState(false);\n  const [doneLoading, setDoneLoading] = useState(false);\n\n  const {cursor, more, photoPostIds} = useSelector((state) => state.photoPosts);\n\n  const eventId = useSelector((state) => state.eventDetails?.eventId ?? null);\n  const eventType = useSelector((state) => state.eventDetails?.eventType);\n\n  const {\n    ref: endPhotosRef,\n    inView: endPhotosInView,\n    entry,\n  } = useInView({\n    threshold: 0,\n  });\n\n  const gid = window.guest_id || '';\n\n  const [fileInputValue, setFileInputValue] = useState('');\n  const eventIsCanceled = isCanceled(eventType);\n\n  const handleFileInputChange = (e) => {\n    e.preventDefault();\n    const images = e.target.files;\n\n    setFileInputValue('');\n    this.updateStateWithFiles(images).then();\n    return false;\n  };\n\n  useEffect(() => {\n    if (!fetchInProgress && more) {\n      store.dispatch(\n        fetchMorePhotos(eventId, cursor, gid, () => {\n          setFetchInProgress(false);\n          setDoneLoading(true);\n        })\n      );\n      setFetchInProgress(true);\n      setDoneLoading(false);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (endPhotosInView && more && !fetchInProgress) {\n      store.dispatch(\n        fetchMorePhotos(eventId, cursor, gid, () => {\n          setFetchInProgress(false);\n          setDoneLoading(true);\n        })\n      );\n      setFetchInProgress(true);\n      setDoneLoading(false);\n    }\n  }, [endPhotosInView, more, fetchInProgress]);\n\n  return (\n    <div className=\"all-photos\" data-qa-id=\"photo_list\">\n      <ScrollToTopOnMount />\n      <RestoreScrollPosition path={window.location.pathname} doneLoading={doneLoading} />\n      <BackLink dataQaId=\"photos-back\" to=\"/\" className=\"photos__back\" />\n      <div className=\"photos__inline-heading\">\n        <Heading value=\"Photos\" className=\"photos__heading font_36\" />\n        {!eventIsCanceled && (\n          <PhotoUploadButton\n            handleChange={handleFileInputChange}\n            value={fileInputValue}\n            location=\"feed-heading-icon\"\n            isIcon\n          />\n        )}\n      </div>\n\n      {photoPostIds.map((postId) => (\n        <SinglePhoto postId={postId} key={`photo-${postId}`} />\n      ))}\n      <span ref={endPhotosRef} />\n    </div>\n  );\n}\n","import React, {useState} from 'react';\nimport {shallowEqual, useSelector, useStore} from 'react-redux';\nimport {useHistory, useLocation} from 'react-router-dom';\nimport {selectPost} from '~/ViewInvitation/reducers/posts';\nimport {deletePost} from '~/ViewInvitation/reducers/apiActions';\nimport {animateRSVPButton} from '~/ViewInvitation/common/StickyRSVP';\nimport {Avatar} from '~/ViewInvitation/common/Avatar/Avatar';\nimport {ActionSheetModal} from '~/ViewInvitation/common/Modal/ActionSheetModal';\nimport {TimeSince} from '~/ViewInvitation/common/TimeSince';\nimport {LikeButton} from '~/ViewInvitation/routes/Guests/LikeButton';\nimport {CommentButton} from '~/ViewInvitation/routes/Guests/CommentButton';\nimport {InvitationLink} from '~/ViewInvitation/common/InvitationLink';\nimport {InlineComment} from '~/ViewInvitation/common/InlineComment';\nimport {smoothScroll} from '~/common/scroll';\nimport {MoreIcon} from '~/common/svg/MoreIcon';\n\nexport function SinglePhoto(props) {\n  const {postId} = props;\n  const history = useHistory();\n  const location = useLocation();\n  const store = useStore();\n\n  const [imageHasLoaded, setImageHasLoaded] = useState(false);\n  const [isPrimaryOpen, setIsPrimaryOpen] = useState(false);\n  const [isSecondaryOpen, setIsSecondaryOpen] = useState(false);\n  const [action, setAction] = useState('');\n\n  const post = useSelector(selectPost(postId), shallowEqual);\n\n  const hasRSVPd = useSelector((state) => state.rsvp?.hasRsvpd ?? false);\n\n  const currentUserId = useSelector((s) => s.user.userId);\n\n  if (!post) return null;\n\n  const options = [\n    {\n      label: 'Download Photo',\n      action: () => setAction('download'),\n    },\n  ];\n  if (post.userId === currentUserId) {\n    options.push({\n      label: 'Delete Photo',\n      action: () => setAction('warning'),\n      destructive: true,\n    });\n  }\n\n  const handleClick = () => {\n    if (hasRSVPd) {\n      history.push(`/photos/${post.postId}${location.search}`);\n    } else {\n      animateRSVPButton();\n    }\n  };\n\n  const hasReplies = post.replyIds.length !== 0;\n  const whenPosted = post.when.replace(/-/g, '').replace(/:/g, '');\n\n  const hasMoreComments = post.replyIds.length > 2;\n  const reversedReplyIds = post && post.replyIds.slice(0).reverse();\n  const initialComments = hasReplies && reversedReplyIds.slice(0, 2);\n\n  const scrollToHash = () => {\n    const target = document.querySelector(location.hash);\n    const thisPhotoPost = `#photo_${postId}`;\n\n    if (location.hash === thisPhotoPost) smoothScroll(target);\n  };\n\n  const handleImageOnload = () => {\n    setImageHasLoaded(true);\n    location.hash && scrollToHash();\n  };\n\n  const handleDownloadImage = () => {\n    const tag = document.createElement('a');\n    tag.href = post.photoUrl;\n    tag.setAttribute('download', '');\n    tag.setAttribute('target', '_blank');\n    document.body.appendChild(tag);\n    tag.click();\n  };\n\n  const handleDelete = () => {\n    store.dispatch(deletePost(postId));\n  };\n\n  return (\n    <div className=\"photo-group\" id={`photo_${postId}`}>\n      <div className=\"creator-wrap\">\n        <Avatar size=\"small\" userId={post.userId} name={post.creatorName} />\n        <p className=\"all-photos__creator font_18\">\n          {post.creatorName}\n          <span className=\"all-photos__time-ago\">\n            <TimeSince timestamp={whenPosted} />\n          </span>\n        </p>\n      </div>\n\n      <img\n        onLoad={handleImageOnload}\n        src={post.photoUrl}\n        className={`all-photos__img ${imageHasLoaded ? '' : 'all-photos__img-placeholder'}`}\n        alt=\"\"\n      />\n\n      <div className=\"photo-group__social\">\n        <div className=\"guest__interaction-row\">\n          {hasRSVPd && (\n            <>\n              <div className=\"guest__interaction-row__interactions\">\n                <LikeButton\n                  userId={currentUserId}\n                  postId={post.postId}\n                  post={post}\n                  dataQaId=\"photo-like\"\n                />\n                <CommentButton\n                  userId={currentUserId}\n                  post={post}\n                  handleCommentClick={handleClick}\n                  dataQaId=\"photo-comment-icon\"\n                />\n              </div>\n              <div className=\"guest__interaction-row__interactions\">\n                <button\n                  className=\"photo__more-options-button button-transparent\"\n                  data-qa-id=\"photo-more-options-button\"\n                  onClick={() => setIsPrimaryOpen(true)}\n                >\n                  <MoreIcon ratio={0.375} />\n                </button>\n              </div>\n            </>\n          )}\n        </div>\n        {hasReplies &&\n          initialComments.map((commentId, i) => (\n            <InlineComment\n              commentId={commentId}\n              className=\"photo-comment--inline\"\n              key={`inline-comment__${i}`}\n              parentPostId={postId}\n              showEditIfAllowed={false}\n              dataQaIdModifier=\"photo-feed\"\n            />\n          ))}\n        {hasMoreComments && (\n          <InvitationLink\n            to={`/photos/${post.postId}`}\n            className=\"photo-comment__view-more button-transparent\"\n            data-qa-id=\"all-photo-comments\"\n          >\n            view all {post.replyIds.length} comments\n          </InvitationLink>\n        )}\n      </div>\n      <ActionSheetModal\n        onClose={() => setIsPrimaryOpen(false)}\n        onAfterClose={() => {\n          setIsPrimaryOpen(false);\n          if (action === 'warning') {\n            setIsSecondaryOpen(true);\n          } else if (action === 'download') {\n            handleDownloadImage();\n            setAction('');\n          }\n        }}\n        onRequestClose={() => setIsPrimaryOpen(false)}\n        isOpen={isPrimaryOpen}\n        showCancel\n        optionsList={options}\n      />\n      <ActionSheetModal\n        onClose={() => {\n          setIsSecondaryOpen(false);\n        }}\n        onAfterClose={() => {\n          setIsSecondaryOpen(false);\n          if (action === 'delete') {\n            handleDelete();\n          }\n          setAction('');\n        }}\n        onRequestClose={() => setIsSecondaryOpen(false)}\n        isOpen={isSecondaryOpen}\n        showCancel\n        title=\"Delete Photo\"\n        message=\"Are you sure you want to delete this photo?\"\n        optionsList={[\n          {\n            label: 'Delete Photo',\n            action: () => setAction('delete'),\n            destructive: true,\n          },\n        ]}\n      />\n    </div>\n  );\n}\n","export const trackSubmitedRSVP = (response) => {\n  if (window.tags)\n    window.tags.track_event('submit_rsvp', {\n      invite_rsvp_response: response,\n    });\n};\n\nexport const trackInviteRSVP = (response, optin) => {\n  if (window.dataLayer)\n    window.dataLayer.push({\n      event: 'invite_rsvp',\n      invite_rsvp_response: response,\n      invite_rsvp_optin: optin,\n    });\n};\n\nexport const trackPollVote = (pollEvent) => {\n  if (window.dataLayer) {\n    window.dataLayer.push({\n      event: pollEvent,\n    });\n  }\n};\n","export const bgLightness = (colorStr, alpha) => {\n  const {r, g, b} = colorToRgb(colorStr, alpha);\n\n  // HSP (Highly Sensitive Poo) equation from http://alienryderflex.com/hsp.html\n  const hsp = Math.sqrt(0.299 * (r * r) + 0.587 * (g * g) + 0.114 * (b * b));\n\n  // Using the HSP value, determine whether the color is light or dark\n  if (hsp > 127.5) return 'light';\n  return 'dark';\n};\n\nexport const colorToRgb = (colorStr, a) => {\n  const ctx = document.createElement('canvas').getContext('2d');\n  ctx.fillStyle = colorStr;\n  let color = `${ctx.fillStyle}`;\n  color = +`0x${color.slice(1)}`;\n\n  const RGBA = {\n    red: color >> 16,\n    green: (color >> 8) & 255,\n    blue: color & 255,\n    alpha: a,\n  };\n  const alpha = 1 - RGBA.alpha;\n  return {\n    r: Math.round((RGBA.alpha * (RGBA.red / 255) + alpha * (255 / 255)) * 255),\n    g: Math.round((RGBA.alpha * (RGBA.green / 255) + alpha * (255 / 255)) * 255),\n    b: Math.round((RGBA.alpha * (RGBA.blue / 255) + alpha * (255 / 255)) * 255),\n  };\n};\n","import XDate from 'xdate';\nimport {CaptchaDialog} from '~/modal';\nimport {modal_ajax_error_handler} from '~/modal/_ajax_error_handler';\nimport {convertToIso} from '~/create/utils/formatters';\nimport {isCanceled} from '~/common/utils/event_utils';\n\nexport function eventHasPassed() {\n  return !!window.event_has_passed;\n}\n\nexport function isPremium() {\n  return !!window.is_premium;\n}\n\nexport function isMobile() {\n  return !!window.is_mobile_site;\n}\n\nexport function hasAds() {\n  return !isPremium() && !window.evite_event.remove_ads;\n}\n\nexport function isCard() {\n  return !!window.is_card;\n}\n\nexport function isHost() {\n  return !!window.evite_event.is_host_viewing;\n}\n\nexport function canSeeGuests() {\n  return !window.evite_event.options.event_option_private_guestlist;\n}\n\nexport function canRSVP() {\n  return !isCard() && !eventHasPassed() && !isCanceled(window.evite_event.status);\n}\n\nexport const isPreview = () => !!window.is_preview;\n\nexport function handleCaptchaJsonResponse(responseJson) {\n  return new Promise((resolve) => {\n    new CaptchaDialog({\n      challenge: responseJson,\n      onSubmit: (_response) => {\n        const captchaResponse = {..._response};\n        captchaResponse.name = undefined;\n        resolve(captchaResponse);\n      },\n    }).show();\n  });\n}\n\nexport function handleCaptcha(xhr, status, data, callback) {\n  if (xhr && xhr.status === 412) {\n    const response = JSON.parse(xhr.responseText);\n    new CaptchaDialog({\n      challenge: response,\n      onSubmit(captcha) {\n        captcha.name = void 0;\n        captcha = JSON.stringify(captcha);\n        callback(captcha);\n      },\n    }).show();\n  } else {\n    renderAjaxErrorModal(xhr, status, data);\n    if (callback) {\n      callback('');\n    }\n  }\n}\n\nexport function renderAjaxErrorModal(xhr, status, data) {\n  const hasStatus = xhr && xhr.status;\n  const isServerError = xhr && xhr.status >= 500 && xhr.status < 600;\n\n  if (hasStatus && (isMobile() || isServerError)) {\n    let message = 'Sorry, an error has occurred';\n    let responseTextMessage;\n\n    try {\n      responseTextMessage = JSON.parse(xhr.responseText).message;\n    } catch (error) {\n      responseTextMessage = xhr.responseText;\n    }\n\n    if (isServerError) {\n      const consoleTitle = typeof data === 'string' ? data : 'Internal Server Error';\n      if (responseTextMessage && console && console.error) {\n        console.error(`${consoleTitle}:\\n\\n${responseTextMessage}\\n`);\n      }\n      message = 'Sorry, an internal server error has occurred';\n    } else if (responseTextMessage) {\n      message = responseTextMessage;\n    }\n\n    alert(message);\n  } else {\n    modal_ajax_error_handler(xhr, status, data);\n  }\n}\n\nexport function fixupAbsoluteURL(url) {\n  // Adds https:// to url if needed\n  if (url && !url.match(/https?:\\/\\//i)) {\n    if (url[0] !== '/') url = `//${url}`;\n    url = `https:${url}`;\n  }\n  return url;\n}\n","const storageAvailable = (t) => {\n  try {\n    const storage = window[t];\n    const x = '__storage_test__';\n    storage.setItem(x, x);\n    storage.removeItem(x);\n    console.log(`Found storage type: ${t}`);\n    return true;\n  } catch (e) {}\n  return false;\n};\n\nlet _storage = null;\n\nexport const getStorage = () => {\n  if (_storage) return _storage;\n  if (storageAvailable('localStorage')) _storage = window.localStorage;\n  else if (storageAvailable('sessionStorage')) _storage = window.sessionStorage;\n  return _storage;\n};\n","import {useLocation} from 'react-router-dom';\nimport {usePrevious} from '~/common/hooks/usePrevious';\n\nexport function extractTab(pathname) {\n  const components = pathname.split('?')[0].split('/');\n  if (components.length > 1) return components[components.length - 1] || '/';\n  return '/';\n}\n\nexport function trackRouteChange(tab) {\n  window.setTimeout(() => {\n    // DataOps use this to track pageviews within the app\n    window.tags.push('view_tab_active', tab);\n    window.dataLayer.push({\n      event: 'pageview',\n      destination_url: window.location.pathname,\n    });\n  }, 500);\n}\n\n/**\n * Reports top level route changes to google analytics.\n * @function useTrackPages\n * @return none\n */\nexport const useTrackPages = () => {\n  const location = useLocation();\n  const tab = extractTab(location.pathname);\n  const previousTab = usePrevious(tab);\n  if (previousTab !== tab && previousTab !== undefined) {\n    trackRouteChange(tab);\n  }\n};\n","import {str} from 'evite';\n\n// matching validation logic in /typhoon/assets/js/common/utils.js\nexport const validateEmail = (email, allowEmpty) => {\n  const MAX_EMAIL_LENGTH = 254;\n\n  email = str(email).trim();\n  email = email.replace(/^[\\s(<{\\[]+/, '');\n  email = email.replace(/[\\s)>}\\]]+$/, '');\n\n  if (!email && allowEmpty) {\n    return {valid: true, value: ''};\n  }\n\n  if (!email && !allowEmpty) {\n    return {valid: false, message: 'Email address is required'};\n  }\n\n  if (email.length > MAX_EMAIL_LENGTH) {\n    return {\n      valid: false,\n      message: `Email address max length is ${MAX_EMAIL_LENGTH}`,\n    };\n  }\n\n  // to match backEnd validation\n  // Server enforced regex\n  const serverRegex =\n    /(^\\s*[a-zA-Z0-9.\\\"!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9_-]+\\.[a-zA-Z0-9-.]+\\s*$)/gm;\n  // Browser enforced regex\n  const browserRegex =\n    /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/gm;\n  const isValidFormat = browserRegex.exec(email) && serverRegex.exec(email);\n\n  if (!isValidFormat) {\n    return {valid: false, message: 'Invalid email address'};\n  }\n\n  return {valid: true, value: email};\n};\n","export function isWebview() {\n  return !!(\n    window?.webkit?.messageHandlers?.fabricCreateOnNav || window?.webview?.fabricCreateOnNav\n  );\n}\n","import React, {useState, useEffect, useRef} from 'react';\nimport PropTypes from 'prop-types';\n\nexport const Button = React.forwardRef((props, ref) => {\n  const [processing, setProcessing] = useState(false);\n  const mountedRef = useRef(true);\n\n  const onClick = async (e) => {\n    // If the props.onClick handler returns a promise we wait until it completes before allowing another click to go through.\n    if (processing) return;\n    const value = props.onClick(e);\n    if (value && typeof value.then === 'function') {\n      if (!props.disableProcessing) {\n        setProcessing(true);\n      }\n      if (props.override) {\n        e.preventDefault();\n        e.stopPropagation();\n      }\n      value.finally(() => {\n        mountedRef.current && setProcessing(false);\n      });\n    }\n    return value;\n  };\n\n  useEffect(\n    () =>\n      // track when we are unmounted so we don't update the state after un-mounting\n      () => {\n        mountedRef.current = false;\n      },\n    []\n  );\n\n  return (\n    <button\n      data-clipboard-text={props.dataClipboardText}\n      id={props.id}\n      data-qa-id={props['data-qa-id']}\n      data-impression-tracking={props['data-impression-tracking']}\n      data-qa-value={props['data-qa-value']}\n      data-qa-tigran={props['data-qa-tigran']}\n      className={`button ${props.className || ''} ${props.variant || 'primary'} ${\n        props.size === 'large' ? 'large' : 'small'\n      } ${props.fullWidth ? 'wide' : ''} ${props.tight ? 'tight' : ''} ${\n        props.noTextWrap ? 'nowrap' : ''\n      } ${processing ? 'processing' : ''}`}\n      onClick={props.onClick ? onClick : undefined}\n      onMouseEnter={props.onMouseEnter}\n      onMouseLeave={props.onMouseLeave}\n      disabled={props.disabled}\n      // eslint-disable-next-line react/button-has-type\n      type={props.type ?? (props.formSubmit ? 'submit' : 'button')}\n      ref={ref}\n    >\n      {processing && <span className=\"evt-spinner inline\" />}\n      {props.icon}\n      {processing && props.processingChildren ? props.processingChildren : props.children}\n    </button>\n  );\n});\n\nButton.propTypes = {\n  id: PropTypes.string,\n  className: PropTypes.string,\n  variant: PropTypes.oneOf([\n    'primary',\n    'secondary',\n    'transparent',\n    'unstyled-button',\n    'link',\n    'featured', // currently used for the CF's goh & cohost buttons\n  ]),\n  size: PropTypes.oneOf(['small', 'large']),\n  tight: PropTypes.bool,\n  onClick: PropTypes.func,\n  onMouseEnter: PropTypes.func,\n  onMouseLeave: PropTypes.func,\n  processingChildren: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),\n  children: PropTypes.oneOfType([PropTypes.element, PropTypes.node, PropTypes.string]).isRequired,\n  formSubmit: PropTypes.bool,\n  fullWidth: PropTypes.bool,\n  disabled: PropTypes.bool,\n  'data-qa-id': PropTypes.string.isRequired,\n  'data-impression-tracking': PropTypes.string,\n  'data-qa-value': PropTypes.string,\n  type: PropTypes.string,\n  icon: PropTypes.element,\n  override: PropTypes.bool,\n  noTextWrap: PropTypes.bool,\n  disableProcessing: PropTypes.bool,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nexport function Checkbox(props) {\n  const styles = {};\n  if (props.inline) styles.display = 'inline';\n  return (\n    <div style={styles}>\n      <label htmlFor={props.id} className=\"paragraph2 checkbox-wrapper\">\n        <input\n          type=\"checkbox\"\n          className=\"checkbox\"\n          id={props.id}\n          data-qa-id={props['data-qa-id'] || props.id}\n          name={props.name}\n          onChange={props.onChange}\n          checked={props.checked}\n          disabled={props.disabled}\n          data-checked={props.checked}\n        />\n        {props.label}\n      </label>\n    </div>\n  );\n}\n\nCheckbox.propTypes = {\n  onChange: PropTypes.func.isRequired,\n  label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n  id: PropTypes.string,\n  name: PropTypes.string,\n  'data-qa-id': PropTypes.string.isRequired,\n  'data-qa-value': PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  checked: PropTypes.bool.isRequired,\n  disabled: PropTypes.bool,\n  inline: PropTypes.bool,\n};\n","import {Button} from '~/common/_pb_components/atoms/Button';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\n\nexport function CloseXButton(props) {\n  return (\n    <Button\n      className=\"xclose-button\"\n      data-qa-id={props.qaId}\n      variant=\"transparent\"\n      onClick={props.onClose}\n    >\n      <PB_CloseLine ratio={0.75} />\n    </Button>\n  );\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {PB_Minus} from '~/common/svg/PB_Minus';\nimport {PB_Plus} from '~/common/svg/PB_Plus';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nimport {charcoal, coin} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function Counter(props) {\n  const min = props.min ? props.min : 0;\n  const {plusDisabled} = props;\n  const minusDisabled = !(props.count > min);\n\n  return (\n    <div className=\"counter-wrapper\" data-qa-value={props.count}>\n      <p className=\"counter-title\">{props.title}</p>\n      <div className=\"counter\">\n        <Button\n          disabled={minusDisabled || props.disabled}\n          variant=\"transparent\"\n          onClick={props.onMinus}\n          data-qa-id={`${props['data-qa-id']}-decrement`}\n        >\n          <PB_Minus color={minusDisabled || props.disabled ? coin : charcoal} ratio={0.5} />\n        </Button>\n        <Typography\n          variant=\"paragraph1\"\n          color={props.disabled ? 'coin' : 'charcoal'}\n          data-qa-id={`${props['data-qa-id']}-value`}\n          data-qa-value={props.count}\n        >\n          {props.count}\n        </Typography>\n        <Button\n          disabled={plusDisabled || props.disabled}\n          variant=\"transparent\"\n          onClick={props.onPlus}\n          data-qa-id={`${props['data-qa-id']}-increment`}\n        >\n          <PB_Plus color={plusDisabled || props.disabled ? coin : charcoal} ratio={0.5} />\n        </Button>\n      </div>\n    </div>\n  );\n}\n\nCounter.propTypes = {\n  title: PropTypes.string.isRequired,\n  count: PropTypes.number.isRequired,\n  onPlus: PropTypes.func,\n  onMinus: PropTypes.func,\n  min: PropTypes.number,\n  max: PropTypes.number,\n  'data-qa-id': PropTypes.string,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nexport function Divider(props) {\n  return (\n    <hr\n      style={{\n        marginTop: props.marginTop,\n        marginBottom: props.marginBottom,\n        marginLeft: props.marginLeft,\n        marginRight: props.marginRight,\n        width: props.width === null ? props.width : props.width || '100%',\n      }}\n    />\n  );\n}\n\nDivider.propTypes = {\n  marginTop: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  marginBottom: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  marginLeft: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  marginRight: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n};\n","import React, {useCallback, useEffect, useState} from 'react';\nimport {components} from 'react-select';\nimport CreatableSelect from 'react-select/creatable';\nimport PropTypes from 'prop-types';\nimport {CardNumberElement, CardCvcElement, CardExpiryElement} from '@stripe/react-stripe-js';\nimport Tooltip from 'rc-tooltip';\nimport {\n  coin,\n  fog,\n  silver,\n  linen,\n  feedbackError,\n  charcoal,\n  placeholder,\n} from '~sass/pb_styleguide/base/_exports.sass';\nimport {PB_Chevron} from '~/common/svg/PB_Chevron';\nimport {PB_Info} from '~/common/svg/PB_Info';\nimport 'rc-tooltip/assets/bootstrap.css';\n\nfunction DropdownIndicator(props) {\n  return (\n    <components.DropdownIndicator {...props}>\n      <PB_Chevron direction=\"down\" ratio={0.75} />\n    </components.DropdownIndicator>\n  );\n}\n\nfunction SingleValue({children, ...props}) {\n  const innerProps = {'data-qa-id': props.selectProps['data-qa-id']};\n\n  if (props.selectProps.placeholder === 'PT') {\n    // if select is timezone...\n    return (\n      <components.SingleValue {...props}>{props.getValue()?.[0]?.value}</components.SingleValue>\n    );\n  }\n\n  return <components.SingleValue {...props}>{children}</components.SingleValue>;\n}\n\nfunction CustomInput({selectProps, ...props}) {\n  return (\n    <components.Input\n      {...props}\n      data-qa-id={selectProps['data-qa-id']}\n      data-label={props.getValue()?.[0]?.label}\n      data-value={props.getValue()?.[0]?.value}\n      readOnly={props.readOnly || props.readonly}\n      aria-readonly={props.readOnly || props.readonly}\n    />\n  );\n}\n\nexport const Input = React.forwardRef(({isClearable = true, ...props}, ref) => {\n  const [times, setTimes] = useState(\n    [\n      '12:00 AM',\n      '12:15 AM',\n      '12:30 AM',\n      '12:45 AM',\n      '1:00 AM',\n      '1:15 AM',\n      '1:30 AM',\n      '1:45 AM',\n      '2:00 AM',\n      '2:15 AM',\n      '2:30 AM',\n      '2:45 AM',\n      '3:00 AM',\n      '3:15 AM',\n      '3:30 AM',\n      '3:45 AM',\n      '4:00 AM',\n      '4:15 AM',\n      '4:30 AM',\n      '4:45 AM',\n      '5:00 AM',\n      '5:15 AM',\n      '5:30 AM',\n      '5:45 AM',\n      '6:00 AM',\n      '6:15 AM',\n      '6:30 AM',\n      '6:45 AM',\n      '7:00 AM',\n      '7:15 AM',\n      '7:30 AM',\n      '7:45 AM',\n      '8:00 AM',\n      '8:15 AM',\n      '8:30 AM',\n      '8:45 AM',\n      '9:00 AM',\n      '9:15 AM',\n      '9:30 AM',\n      '9:45 AM',\n      '10:00 AM',\n      '10:15 AM',\n      '10:30 AM',\n      '10:45 AM',\n      '11:00 AM',\n      '11:15 AM',\n      '11:30 AM',\n      '11:45 AM',\n      '12:00 PM',\n      '12:15 PM',\n      '12:30 PM',\n      '12:45 PM',\n      '1:00 PM',\n      '1:15 PM',\n      '1:30 PM',\n      '1:45 PM',\n      '2:00 PM',\n      '2:15 PM',\n      '2:30 PM',\n      '2:45 PM',\n      '3:00 PM',\n      '3:15 PM',\n      '3:30 PM',\n      '3:45 PM',\n      '4:00 PM',\n      '4:15 PM',\n      '4:30 PM',\n      '4:45 PM',\n      '5:00 PM',\n      '5:15 PM',\n      '5:30 PM',\n      '5:45 PM',\n      '6:00 PM',\n      '6:15 PM',\n      '6:30 PM',\n      '6:45 PM',\n      '7:00 PM',\n      '7:15 PM',\n      '7:30 PM',\n      '7:45 PM',\n      '8:00 PM',\n      '8:15 PM',\n      '8:30 PM',\n      '8:45 PM',\n      '9:00 PM',\n      '9:15 PM',\n      '9:30 PM',\n      '9:45 PM',\n      '10:00 PM',\n      '10:15 PM',\n      '10:30 PM',\n      '10:45 PM',\n      '11:00 PM',\n      '11:15 PM',\n      '11:30 PM',\n      '11:45 PM',\n    ].map((t) => ({label: t, value: t}))\n  );\n\n  useEffect(() => {\n    props.times && setTimes(props.times);\n  }, [props.times]);\n\n  const qaId = props['data-qa-id'];\n  const ariaLabel = props['aria-label'];\n  const setTimeQAData = useCallback(\n    (timeRef) => {\n      if (timeRef && qaId) {\n        if (timeRef.inputRef) {\n          if (timeRef.dataset) {\n            timeRef.inputRef.dataset.qaId = qaId;\n          }\n        }\n      }\n    },\n    [props.type]\n  );\n\n  const disabled = !!props.disabled;\n\n  return (\n    <div className={`input-wrapper ${props.className ? props.className : ''}`}>\n      {props.label && (\n        <label className=\"label2 small input-label\" htmlFor={props.id}>\n          {props.label} {props.required && <span className=\"label3\">(Required) </span>}\n          {props.showOptionalLabel && <span className=\"label3\">(Optional) </span>}\n          {props.tooltipContent && (\n            <Tooltip\n              placement=\"top\"\n              trigger={['hover', 'click']}\n              overlay={<span>{props.tooltipContent}</span>}\n              overlayClassName={props.overlayClassName}\n              getTooltipContainer={(node) => node}\n            >\n              <span style={{position: 'relative'}}>\n                <PB_Info className=\"event-details__info\" />\n              </span>\n            </Tooltip>\n          )}\n        </label>\n      )}\n      {props.type === 'credit-card' ? (\n        <div className=\"pb-card-entry\">\n          <CardNumberElement id={props.id} data-qa-id={qaId} onChange={props.onChange} />\n        </div>\n      ) : props.type === 'expiry' ? (\n        <div className=\"pb-expiry-date-entry\">\n          <CardExpiryElement id={props.id} data-qa-id={qaId} onChange={props.onChange} />\n        </div>\n      ) : props.type === 'cvc' ? (\n        <div className=\"pb-cvc-entry\">\n          <CardCvcElement id={props.id} data-qa-id={qaId} onChange={props.onChange} />\n        </div>\n      ) : (\n        <div\n          className={`input-box${\n            props.type === 'time'\n              ? ' select'\n              : props.type === 'textarea'\n                ? ' textarea'\n                : props.type === 'toggle'\n                  ? 'toggle-input-box'\n                  : props.type === 'otp'\n                    ? ' otp'\n                    : ''\n          }`}\n        >\n          {props.startAdornment && <div className=\"start-adornment\">{props.startAdornment}</div>}\n          {['time', 'select'].includes(props.type) ? (\n            <CreatableSelect\n              isClearable={isClearable}\n              options={props.type === 'time' ? times : props.options}\n              styles={{\n                container: (provided) => ({\n                  ...provided,\n                  width: '100%',\n                  height: 48,\n                }),\n                control: (provided, {isFocused, isDisabled}) => ({\n                  ...provided,\n                  height: '100%',\n                  paddingLeft: 7,\n                  paddingRight: 7,\n                  fontFamily: 'Brut',\n                  fontWeight: 400,\n                  borderColor: props.error ? feedbackError : props.value ? coin : silver,\n                  borderWidth: isFocused ? 0 : 1,\n                  backgroundColor: isDisabled ? fog : linen,\n                  color: isDisabled ? coin : charcoal,\n                }),\n                placeholder: (provided) => ({\n                  ...provided,\n                  color: placeholder,\n                }),\n                indicatorSeparator: () => ({}),\n                option: (provided) => ({\n                  ...provided,\n                  fontFamily: 'Brut',\n                  fontWeight: 400,\n                }),\n              }}\n              value={\n                props.type === 'time'\n                  ? times.find(({value}) => value === props.value)\n                  : props.options.find((opt) => opt.value === props.value)\n              }\n              placeholder={props.placeholder}\n              components={{\n                DropdownIndicator,\n                SingleValue,\n                Input: (params) => <CustomInput {...params} readOnly={props.readonly} />, // readonly prevents the keyboard from opening\n              }}\n              onChange={(newValue, _) => props.onChange(newValue)}\n              ref={setTimeQAData}\n              menuPlacement=\"auto\"\n              isDisabled={disabled}\n              isSearchable={props.isSearchable}\n              isValidNewOption={props.isValidNewOption}\n              data-qa-id={qaId}\n            />\n          ) : props.type === 'toggle' ? (\n            <label className=\"input-toggle-container\">\n              <input\n                type=\"checkbox\"\n                checked={props.checked}\n                onChange={props.onChange}\n                id={props.id}\n                disabled={disabled}\n                readOnly={props.readonly}\n              />\n              <span\n                className={`input-toggle ${disabled ? 'disabled' : ''}`}\n                data-qa-id={qaId}\n                data-checked={props.checked}\n              />\n            </label>\n          ) : props.type === 'textarea' ? (\n            <textarea\n              className={`input-text textarea ${props.value ? ' filled' : ''}${\n                props.error ? ' error' : ''\n              }${props.endAdornment ? ' with-end-adornment' : ''}\n              ${props.startAdornment ? ' with-start-adornment' : ''}`}\n              id={props.id}\n              data-qa-id={qaId}\n              value={props.value}\n              onChange={props.onChange}\n              onFocus={props.onFocus}\n              onBlur={props.onBlur}\n              onKeyDown={props.onKeyDown}\n              name={props.name}\n              placeholder={props.placeholder}\n              ref={ref}\n              disabled={disabled}\n              maxLength={props.maxLength}\n              autoComplete={props.autoComplete}\n              pattern={props.pattern}\n              autoFocus={props.autoFocus}\n              rows={props.rows}\n              readOnly={props.readonly}\n            />\n          ) : props.type === 'number' ? (\n            <input\n              type=\"number\"\n              className={`input-text${props.value ? ' filled' : ''}${props.error ? ' error' : ''}${\n                props.endAdornment ? ' with-end-adornment' : ''\n              }\n              ${props.startAdornment ? ' with-start-adornment' : ''}`}\n              id={props.id}\n              data-qa-id={qaId}\n              value={props.value}\n              onChange={props.onChange}\n              onFocus={props.onFocus}\n              onBlur={props.onBlur}\n              onKeyDown={props.onKeyDown}\n              name={props.name}\n              placeholder={props.placeholder}\n              ref={ref}\n              disabled={disabled}\n              maxLength={props.maxLength}\n              autoComplete={props.autoComplete}\n              pattern={props.pattern}\n              autoFocus={props.autoFocus}\n              onKeyPress={props.onKeyPress}\n              readOnly={props.readonly}\n              aria-label={ariaLabel}\n              min={props.min}\n              max={props.max}\n            />\n          ) : (\n            <input\n              className={`input-text${props.value ? ' filled' : ''}${props.error ? ' error' : ''}${\n                props.endAdornment ? ' with-end-adornment' : ''\n              }\n              ${props.startAdornment ? ' with-start-adornment' : ''}`}\n              id={props.id}\n              data-qa-id={qaId}\n              value={props.value}\n              onChange={props.onChange}\n              style={props.style}\n              onFocus={props.onFocus}\n              onBlur={props.onBlur}\n              type={props.type === 'time' ? 'text' : props.type || 'text'}\n              name={props.name}\n              placeholder={props.placeholder}\n              ref={ref}\n              disabled={disabled}\n              maxLength={props.maxLength}\n              autoComplete={props.autoComplete}\n              pattern={props.pattern}\n              autoFocus={props.autoFocus}\n              onKeyPress={props.onKeyPress}\n              onKeyDown={props.onKeyDown}\n              onPaste={props.onPaste}\n              readOnly={props.readonly}\n              aria-label={ariaLabel}\n            />\n          )}\n          {props.endAdornment && <div className=\"end-adornment\">{props.endAdornment}</div>}\n        </div>\n      )}\n      {props.error && typeof props.error === 'string' && (\n        <span className=\"input-error\" data-qa-id={`${qaId || ''}_inputErrorMessage`}>\n          {props.error}\n        </span>\n      )}\n    </div>\n  );\n});\n\nInput.propTypes = {\n  autoComplete: PropTypes.string,\n  autoFocus: PropTypes.bool,\n  checked: PropTypes.bool,\n  'data-qa-id': PropTypes.string.isRequired,\n  disabled: PropTypes.bool,\n  endAdornment: PropTypes.element,\n  error: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n  getValue: PropTypes.func,\n  id: PropTypes.string,\n  isSearchable: PropTypes.bool,\n  isValidNewOption: PropTypes.func,\n  label: PropTypes.string,\n  showOptionalLabel: PropTypes.bool,\n  name: PropTypes.string,\n  max: PropTypes.number, // max number allowed as value\n  maxLength: PropTypes.number, // max length of characters allowed\n  min: PropTypes.number, // min number allowed as value\n  onBlur: PropTypes.func,\n  onChange: PropTypes.func,\n  onFocus: PropTypes.func,\n  onKeyPress: PropTypes.func,\n  onKeyDown: PropTypes.func,\n  placeholder: PropTypes.string,\n  required: PropTypes.bool,\n  readOnly: PropTypes.bool,\n  readonly: PropTypes.bool,\n  selectProps: PropTypes.object,\n  startAdornment: PropTypes.element,\n  success: PropTypes.bool,\n  times: PropTypes.arrayOf(PropTypes.string),\n  type: PropTypes.oneOf([\n    'tel',\n    'text',\n    'toggle',\n    'email',\n    'password',\n    'number',\n    'time',\n    'credit-card',\n    'cvc',\n    'expiry',\n    'select',\n    'textarea',\n    'otp',\n  ]),\n  value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nexport function Link({fullWidth, thickness, variant, as, className, disabled, ...props}) {\n  let buttonClass = '';\n\n  if (as) {\n    buttonClass =\n      as === 'primary'\n        ? 'button primary'\n        : as === 'transparent'\n          ? 'button transparent'\n          : 'button secondary';\n  }\n\n  return (\n    <a\n      className={`${!as ? 'link' : ''} ${variant || 'large'} ${thickness || ''} ${\n        buttonClass || ''\n      } ${disabled ? 'disabled' : ''} ${fullWidth ? 'wide' : ''} ${className || ''} `}\n      {...props}\n    />\n  );\n}\n\nLink.propTypes = {\n  href: PropTypes.string, // TODO this should be required & onClick removed -- Button with variant 'link' or 'transparent' should be used if not redirecting to a url\n  onClick: PropTypes.func,\n  children: PropTypes.node.isRequired,\n  variant: PropTypes.oneOf(['small', 'large']),\n  fullWidth: PropTypes.bool,\n  thickness: PropTypes.oneOf(['normal', 'thin']),\n  as: PropTypes.oneOf(['primary', 'secondary', 'transparent']), // if it should look like a button (or NOT like a link, if using 'transparent')\n  'data-qa-id': PropTypes.string.isRequired,\n  className: PropTypes.string,\n  target: PropTypes.string,\n  disabled: PropTypes.bool,\n};\n","import React, {useEffect, useRef} from 'react';\nimport PropTypes from 'prop-types';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\n\nexport function Overlay(props) {\n  let isOpen = props.open;\n  const overlayRef = useRef(null);\n  const {modalId} = props;\n\n  const handleClose = (e) => {\n    props.onClose ? props.onClose(e) : (isOpen = false);\n  };\n  const escHandler = (e) => {\n    if (props.closeOnEscKeyPress && e.key === 'Escape') {\n      handleClose(e);\n    }\n  };\n\n  const handleOutsideClick = (e) => {\n    if (props.closeOnClickOutside && overlayRef.current && !overlayRef.current.contains(e.target)) {\n      handleClose(e);\n    }\n  };\n\n  useEffect(() => {\n    window.addEventListener('keydown', escHandler);\n    window.addEventListener('mousedown', handleOutsideClick);\n    window.dataLayer.push({event: 'overlayModalImpression'});\n\n    return () => {\n      window.removeEventListener('keydown', escHandler);\n      window.removeEventListener('mousedown', handleOutsideClick);\n    };\n  }, []);\n\n  return (\n    <div\n      className={`overlay${isOpen ? ' open' : ''} ${modalId || ''}`}\n      data-impression-tracking=\"true\"\n    >\n      <div\n        className={`${props.type ? props.type : 'popup'}${props.fullPage ? ' full-page' : ''}`}\n        style={{width: props.popupWidth}}\n        ref={overlayRef}\n      >\n        {props.title && (\n          <div className=\"overlay-title-row\">\n            <Typography variant=\"list2\" size=\"large\">\n              {props.title}\n            </Typography>\n            <Button\n              data-qa-id={props.overlayCloseBtnDataQAId}\n              data-impression-tracking={props.overlayDataImpressionTracking ? 'true' : 'false'}\n              variant=\"transparent\"\n              onClick={props.onClose}\n            >\n              <PB_CloseLine ratio={0.75} />\n            </Button>\n          </div>\n        )}\n        {props.children}\n      </div>\n    </div>\n  );\n}\n\nOverlay.defaultProps = {\n  closeOnClickOutside: true,\n  closeOnEscKeyPress: true,\n  overlayCloseBtnDataQAId: 'overlay-close',\n  overlayDataImpressionTracking: 'false',\n};\n\nOverlay.propTypes = {\n  overlayDataImpressionTracking: PropTypes.string,\n  open: PropTypes.bool.isRequired,\n  fullPage: PropTypes.bool,\n  type: PropTypes.oneOf(['popup', 'drawer']),\n  children: PropTypes.node.isRequired,\n  closeOnClickOutside: PropTypes.bool,\n  closeOnEscKeyPress: PropTypes.bool,\n  popupWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nexport function Picture(props) {\n  const srcSetArray = Array.isArray(props.srcSet) ? props.srcSet : [props.srcSet];\n  return (\n    <picture id={props.id} className={props.className ? `picture__${props.className}` : null}>\n      {srcSetArray.slice(0, -1).map((srcSet) => (\n        <source\n          key={srcSet}\n          srcSet={srcSet}\n          type={`image/${srcSet.substring(srcSet.lastIndexOf('.') + 1)}`}\n        />\n      ))}\n      <img\n        src={srcSetArray[srcSetArray.length - 1]}\n        className={props.className || null}\n        alt={props.alt || null}\n        loading={props.loading}\n        data-qa-id={props['data-qa-id'] || null}\n      />\n    </picture>\n  );\n}\n\nPicture.propTypes = {\n  srcSet: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.string]).isRequired,\n  className: PropTypes.oneOfType([PropTypes.string, PropTypes.oneOf([null])]),\n  'data-qa-id': PropTypes.oneOfType([PropTypes.string, PropTypes.oneOf([null])]),\n  alt: PropTypes.oneOfType([PropTypes.string, PropTypes.oneOf([null])]),\n  loading: PropTypes.oneOf(['eager', 'lazy']),\n};\n\nPicture.defaultProps = {\n  className: null,\n  alt: null,\n  'data-qa-id': null,\n  loading: 'eager',\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {Button} from '~/common/_pb_components/atoms/Button';\n\nexport function Radio(props) {\n  return (\n    <Button\n      variant=\"transparent\"\n      className=\"radio-wrapper\"\n      disabled={props.disabled}\n      onClick={props.onChange}\n      id={props.id}\n      data-qa-id={props['data-qa-id']}\n    >\n      <div\n        className={`radio ${props.checked ? 'checked-radio' : ''} ${\n          props.disabled ? 'disabled' : ''\n        }`}\n      >\n        {props.checked && <div className=\"checked\" />}\n      </div>\n      <Typography as=\"label\" htmlFor={props.id} variant=\"paragraph2\">\n        {props.label}\n      </Typography>\n    </Button>\n  );\n}\n\nRadio.propTypes = {\n  onChange: PropTypes.func.isRequired,\n  label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n  id: PropTypes.string,\n  name: PropTypes.string,\n  'data-qa-id': PropTypes.string.isRequired,\n  checked: PropTypes.bool.isRequired,\n  disabled: PropTypes.bool,\n};\n","import React, {useEffect, useRef, useState} from 'react';\nimport ReactSelect, {components} from 'react-select';\nimport PropTypes from 'prop-types';\nimport {\n  coin,\n  fog,\n  silver,\n  ghost,\n  cloud,\n  charcoal,\n  cottonCandy,\n  aquamarine,\n  menuHover,\n} from '~sass/pb_styleguide/base/_exports.sass';\n\nimport {PB_Chevron} from '~/common/svg/PB_Chevron';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport function DropdownIndicator(dropdownProps) {\n  return (\n    <components.DropdownIndicator {...dropdownProps} className=\"select__dropdown-indicator\">\n      <PB_Chevron ratio={0.5} direction=\"down\" />\n    </components.DropdownIndicator>\n  );\n}\n\nexport function Option(optionProps) {\n  return (\n    <components.Option {...optionProps} className=\"select__option\">\n      <Typography\n        as=\"span\"\n        variant=\"paragraph2\"\n        id={optionProps.label}\n        data-qa-id={`${optionProps.label.replaceAll(' ', '_')}_suggestion`}\n        onClick={() => optionProps.selectOption(optionProps)}\n      >\n        {optionProps.label}\n      </Typography>\n    </components.Option>\n  );\n}\n\nexport function Select(props) {\n  const [isOpen, setOpen] = useState(false);\n  function Control(controlProps) {\n    return (\n      <components.Control {...controlProps}>\n        <span\n          key={controlProps.innerProps.key}\n          data-qa-id={props['data-qa-id']}\n          className=\"select__control\"\n          onClick={() => setOpen(true)}\n        >\n          {controlProps.children}\n        </span>\n      </components.Control>\n    );\n  }\n\n  const ref = useRef(null);\n  const active = useRef(false);\n\n  useEffect(() => {\n    if (ref.current) {\n      ref.current.onControlTouchEnd = (event) => {\n        ref.current.userIsDragging = true;\n      };\n    }\n  }, [ref]);\n\n  const onFocus = () => {\n    ref.current?.focus();\n    active.current = true;\n  };\n\n  const onBlur = () => {\n    ref.current?.blur();\n    active.current = false;\n  };\n\n  return (\n    <ReactSelect\n      ref={ref}\n      isCreatable={false}\n      isSearchable={false}\n      onChange={(newValue, _) => {\n        props.onChange(newValue.value);\n      }}\n      value={props.value}\n      defaultValue={props?.defaultValue}\n      styles={{\n        control: (provided, {isDisabled}) => ({\n          ...provided,\n          height: '100%',\n          paddingLeft: '1rem',\n          paddingRight: '1rem',\n          fontFamily: 'Brut',\n          fontWeight: 400,\n          fontSize: '1rem',\n          lineHeight: '1rem',\n          borderColor: active.current ? aquamarine : props.value ? coin : silver,\n          borderWidth: 1,\n          boxShadow: undefined,\n          backgroundColor: isDisabled ? fog : ghost,\n          color: isDisabled ? coin : charcoal,\n          cursor: 'pointer',\n          ...props.customStyles?.control,\n        }),\n        placeholder: (provided) => ({\n          ...provided,\n          textOverflow: 'ellipsis',\n          whiteSpace: 'nowrap',\n          overflow: 'hidden',\n          color: cloud,\n          ...props.customStyles?.placeholder,\n        }),\n        indicatorSeparator: () => props.customStyles?.indicatorSeparator,\n        container: (provided) => ({\n          ...provided,\n          width: '100%',\n          height: '3rem',\n          ...props.customStyles?.container,\n        }),\n        menu: (provided) => ({\n          ...provided,\n          borderRadius: '0.5rem',\n          padding: 0,\n          ...props.customStyles?.menu,\n        }),\n        menuList: (provided) => ({\n          ...provided,\n          margin: 0,\n          padding: 0,\n          borderRadius: '0.5rem',\n          ...props.customStyles?.menuList,\n        }),\n        valueContainer: (provided) => ({\n          ...provided,\n          margin: 0,\n          padding: '0 0.5rem',\n          ...props.customStyles?.valueContainer,\n        }),\n        singleValue: (provided) => ({\n          ...provided,\n          margin: 0,\n          padding: 0,\n          textAlign: 'left',\n          ...props.customStyles?.singleValue,\n        }),\n        option: (provided, {isSelected}) => ({\n          ...provided,\n          backgroundColor: isSelected ? cottonCandy : ghost,\n          color: isSelected ? charcoal : charcoal,\n          '&:hover': {backgroundColor: menuHover},\n          ...props.customStyles?.option,\n        }),\n      }}\n      options={props.options}\n      placeholder={props.placeholder}\n      onFocus={onFocus}\n      onBlur={onBlur}\n      components={{\n        DropdownIndicator,\n        Option,\n        Control,\n        ...(props?.components || {}),\n      }}\n      data-qa-id={props['data-qa-id']}\n      onMenuClose={() => setOpen(false)}\n      menuIsOpen={isOpen}\n      onMenuOpen={() => setOpen(true)}\n      className={props.className}\n    />\n  );\n}\n\nSelect.propTypes = {\n  value: PropTypes.oneOfType([\n    PropTypes.string,\n    PropTypes.shape({\n      label: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired,\n      value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n    }),\n  ]),\n  customStyles: PropTypes.objectOf(\n    PropTypes.objectOf(\n      PropTypes.oneOfType([\n        PropTypes.string,\n        PropTypes.number,\n        PropTypes.objectOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])),\n      ])\n    )\n  ),\n  onChange: PropTypes.func,\n  placeholder: PropTypes.string,\n  options: PropTypes.arrayOf(\n    PropTypes.shape({\n      label: PropTypes.string.isRequired,\n      value: PropTypes.oneOfType([PropTypes.object, PropTypes.string]).isRequired,\n    })\n  ).isRequired,\n  'data-qa-id': PropTypes.string.isRequired,\n  components: PropTypes.object,\n  className: PropTypes.string,\n};\n","import React from 'react';\nimport {v4} from 'uuid';\nimport PropTypes from 'prop-types';\nimport {toast} from 'react-toastify';\nimport {Typography} from './Typography';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\n\nexport const toastAlert = (message, options, inToastButtonConfig = {}) => {\n  const {icon, type, title, className} = options || {};\n  let toastFunc = type ? toast[type] : toast;\n  if (!toastFunc) {\n    console.log('Error - bad type passed to toastAlert');\n    toastFunc = toast;\n  }\n  const toastId = `toast_${v4()}`;\n\n  // This is to disable the default react-toastify icon\n  // and use the icon from props inside the body\n  if (options.icon) {\n    options.icon = '';\n  }\n\n  return toast(\n    <Toast\n      type={type}\n      icon={icon}\n      message={message}\n      className={className}\n      title={title}\n      onDismiss={() => toast.dismiss(toastId)}\n      buttonText={inToastButtonConfig?.text}\n      onButtonClick={inToastButtonConfig?.onClick}\n      id={options.id}\n    />,\n    {\n      ...options,\n      toastId,\n    }\n  );\n};\n\nexport function Toast(props) {\n  return (\n    <div className={`toast ${props.type || ''} ${props.className || ''}`} id={props.id}>\n      {props.icon}\n      {props.title ? (\n        <div className=\"toast__content\">\n          <Typography variant=\"paragraph2\" className=\"toast__title\">\n            {props.title}\n          </Typography>\n          <Typography variant=\"paragraph2\" className=\"toast__message\">\n            {props.message}\n          </Typography>\n        </div>\n      ) : (\n        <Typography variant=\"paragraph2\" className=\"toast__message\">\n          {props.message}\n        </Typography>\n      )}\n      {props.buttonText && <button onClick={props.onButtonClick}>{props.buttonText}</button>}\n      <button className=\"unstyled-button\" onClick={props.onDismiss}>\n        <PB_CloseLine ratio={0.75} />\n      </button>\n    </div>\n  );\n}\n\nToast.propTypes = {\n  className: PropTypes.string,\n  icon: PropTypes.node,\n  type: PropTypes.oneOf(['success', 'information', 'warning', 'error']),\n  message: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n  title: PropTypes.string,\n  buttonText: PropTypes.string,\n  onButtonClick: PropTypes.func,\n  onDismiss: PropTypes.func,\n};\n","import React from 'react';\nimport styled, {css} from 'styled-components';\nimport PropTypes from 'prop-types';\nimport * as colors from '~sass/pb_styleguide/base/_exports.sass';\n\n//\n//   // If there is already an h1 in the page, let's not duplicate it.\n//   // variants should ONLY be classes used in pb_styleguide/base/typography.sass\n//   // you may add one more class for page-specific margin/positioning.\n//   // TODO make rules in the component that enforces this stuff & helps prevent typos\n//\n//   // <Typography variant=\"header1\" as=\"h2\">\n//   //   This text uses an h2 element but looks like an h1!\n//   // </Typography>\n//\n//   return (\n//     <DynamicComponent tag={props.as} className={`${props.className} ${props.variant} ${props.size}`} {...props}>\n//       {props.children}\n//     </DynamicComponent>\n//   )\n// }\n\nexport const Colors = css`\n  color: ${({fontColor}) => fontColor || colors.mexican_opal};\n`;\n\nconst StyledDynamicComponent = styled.p`\n  ${Colors}\n`;\n\n// const DynamicComponent = ({tag=\"p\", color=$eviteBlue, children, ...props }) => {\n//   const WithComponent = StyledDynamicComponent.withComponent(tag, color);\n//   return <WithComponent color={color} {...props}>{children}</WithComponent>;\n// };\n\nexport function Typography({className, ...props}) {\n  // If there is already an h1 in the page, let's not duplicate it.\n\n  // <Typography variant=\"h1\" as=\"h2\">\n  //   This text uses an <h2> element but looks like an <h1>\n  // </Typography>\n\n  // todo - There seems to be a race condition preventing color\n  // attributes from being respected in some nested components\n  // (unless the same color has already been used\n  // in a Typog element in a parent component)\n\n  return (\n    <StyledDynamicComponent\n      tag={props.as}\n      className={`${props.classNames || ''} ${className || ''} ${props.variant} ${\n        props.size || ''\n      } ${props.inline ? 'inline' : ''}`}\n      fontColor={colors[props.color]}\n      {...props}\n    >\n      {props.children}\n    </StyledDynamicComponent>\n  );\n}\n\nconst typo_mixins_arr = [\n  'header1',\n  'header2',\n  'header3',\n  'header4',\n  'paragraph1',\n  'paragraph2',\n  'paragraph3',\n  'paragraph4',\n  'list1',\n  'list2',\n  'label1',\n  'label2',\n  'label3',\n  'link',\n  'list1',\n  'list2',\n];\n\nTypography.propTypes = {\n  id: PropTypes.string,\n  classNames: PropTypes.string,\n  size: PropTypes.oneOf(['small', 'medium', 'large']),\n  color: PropTypes.oneOf(Object.keys(colors)), // some of the keys here are not colors but good enough...\n  variant: PropTypes.oneOf(typo_mixins_arr).isRequired,\n  children: PropTypes.oneOfType([PropTypes.element, PropTypes.node, PropTypes.string]).isRequired,\n  'data-qa-id': PropTypes.string,\n  as: PropTypes.string,\n  inline: PropTypes.bool,\n  htmlFor: PropTypes.string,\n};\n","import {forwardRef, useEffect, useRef} from 'react';\nimport PropTypes from 'prop-types';\n\nconst DEFAULT_VIDEO_OPTIONS = {\n  autoPlay: true,\n  loop: true,\n  muted: true,\n  playsInline: true,\n};\n\nexport const Video = forwardRef((props, videoRef) => {\n  const srcArray = Array.isArray(props.src) ? props.src : [props.src];\n  const options = {...DEFAULT_VIDEO_OPTIONS, ...props.options};\n\n  if (!videoRef) videoRef = useRef(null);\n\n  useEffect(() => {\n    if (videoRef?.current && props.reload) {\n      videoRef.current.load();\n    }\n  }, [srcArray]);\n\n  useEffect(() => {\n    if (videoRef?.current) videoRef.current.defaultMuted = options.muted;\n  }, []);\n\n  return (\n    <video\n      preload=\"auto\"\n      ref={videoRef}\n      className={props.className}\n      {...options}\n      onClick={props.onClick}\n      onCanPlay={props.onCanPlay}\n      style={props.style}\n    >\n      {srcArray.map((src) => (\n        <source key={src} src={src} type={`video/${src.substring(src.lastIndexOf('.') + 1)}`} />\n      ))}\n      Your browser does not support the video tag.\n    </video>\n  );\n});\n\nVideo.propTypes = {\n  src: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.string]).isRequired,\n  className: PropTypes.string,\n  options: PropTypes.object,\n  style: PropTypes.object,\n  reload: PropTypes.bool,\n  onClick: PropTypes.func,\n  onCanPlay: PropTypes.func,\n};\n\nVideo.defaultProps = {\n  className: '',\n  options: DEFAULT_VIDEO_OPTIONS,\n  style: null,\n  reload: false,\n  onClick: () => {},\n  onCanPlay: () => {},\n};\n","import urls from 'urls';\nimport {EviteModal} from '~/modal/evite_modal';\n/**\n * Default login time-to-live in milliseconds (7 days)\n */\nconst DEFAULT_LOGIN_TTL_MS = 604800000;\n\nlet captchaResponse;\n\n/**\n * Save user data to local storage.\n *\n * @param {Object} user - The user object containing user data.\n * @param {string} user.user_id - The user's ID.\n * @param {string} user.full_name - The user's full name.\n * @param {string} user.subscription_plan_name - The user's subscription plan name.\n * @param {string} user.email - The user's email.\n * @param {string} user.avatar_disk - The user's avatar disk.\n * @param {string} user.image_url - The user's image URL.\n * @param {string} user.initials - The user's initials.\n * @param {string} user.first_name - The user's first name.\n */\nexport const saveUserDataToLocalStorage = (user) => {\n  const userData = {\n    userId: user.user_id || user.userId,\n    userName: user.full_name || user.userName,\n    email: user.email,\n    initials: user.initials,\n    firstName: user.first_name || user.firstName,\n    // assume we save data only when user is authenticated, unless isAuthenticated is explicitly set to false\n    isAuthenticated: user.isAuthenticated !== false,\n    subscriptionPlanName: user.subscription_plan_name || user.subscriptionPlanName,\n    avatarDisk: user.avatar_disk || user.avatarDisk,\n    imgUrl: user.image_url || user.imgUrl,\n  };\n  const userDataObj = {\n    content: userData,\n    timestamp: Date.now(),\n  };\n  window.isAuthenticated = userData.isAuthenticated;\n  localStorage.setItem('userData', JSON.stringify(userDataObj));\n};\n\n/**\n * Load user data from local storage if it hasn't expired.\n *\n * @param {number} [ttl=DEFAULT_LOGIN_TTL_MS] - Time-to-live in milliseconds.\n * @returns {Object|null} - Returns the user data object if it exists and hasn't expired, otherwise null.\n */\nconst loadUserDataFromLocalStorage = (ttl = DEFAULT_LOGIN_TTL_MS) => {\n  const userDataObj = JSON.parse(localStorage.getItem('userData'));\n  if (window.isAuthenticated !== false && userDataObj && Date.now() - userDataObj.timestamp < ttl) {\n    return userDataObj.content;\n  }\n  if (userDataObj) {\n    // Delete the stored userData if we are not authenticated due to deleting cookies or the data has expired\n    localStorage.removeItem('userData');\n    return null;\n  }\n};\n\n/**\n * Retrieves user data from the global window object.\n * The function tries to fetch several user-related properties from the window object,\n * and it returns a user data object with default values for any missing properties.\n *\n * @returns {Object} userData - Contains user data fetched from the window object.\n */\nconst getUserDataFromWindow = () => {\n  const userData = {\n    userId: window.user_id || '',\n    userName: window.userName || '',\n    email: typeof window.email === 'string' ? window.email : '',\n    initials: window.user_initials || '',\n    firstName: window.firstName || '',\n    isAuthenticated: window.isAuthenticated || false,\n    subscriptionPlanName: window.subscriptionPlanName || '',\n    avatarDisk: window.user_avatar_disk || '',\n    imgUrl: window.user_img_url || '',\n  };\n  return userData;\n};\n\n/**\n * checkIfAdminIsLoggedIn function.\n * This function checks if the current user is an admin and also if they are not the same as the logged in user.\n *\n * The function works with global `window` object properties `isAdmin` and `user_id`.\n *\n * @param {Object} userData - The user data object. This object should contain the user's unique identification (`userId`).\n * @property {string} userData.userId - The user's unique identification.\n *\n * @returns {boolean} If `isAdmin` property on the `window` object is true and `userId` from `userData` is not equal\n * to `user_id` property on `window` object, function will return `true`, otherwise `false`.\n */\nconst checkIfAdminIsLoggedIn = (userData) =>\n  window.isAdmin ? userData.userId !== window.user_id : false;\n\n/**\n * checkIfUserDataIsValid function.\n * This function checks whether user data should is valid or not. It checks multiple conditions\n * including if the user data exists, is non-empty, if the user is authenticated, has a userId,\n * and if the admin is not logged in.\n *\n * @param {Object} userData - The user data object.\n * @property {boolean} isAuthenticated - Indicates whether the user is authenticated.\n * @property {string} userId - The ID of the user.\n *\n * @returns {boolean} - Returns true if the user data is valid to be saved, false otherwise.\n */\nconst checkIfUserDataIsValid = (userData) => {\n  if (!userData || Object.keys(userData).length === 0) {\n    // userData is undefined or empty, so no need to check further\n    return false;\n  }\n\n  // Now we can be sure userData exists, and we can check the other conditions\n  const isUserAuthenticated = userData.isAuthenticated && userData.userId;\n  // Check if an admin is not logged in. This accounts for cstool view as host case\n  // (localStorage holds the admin user data): we should get the user data from window\n  // variables (host data) and replace userData in localStorage with it\n  const isAdminNotLoggedIn = !checkIfAdminIsLoggedIn(userData);\n\n  return isUserAuthenticated && isAdminNotLoggedIn;\n};\n\n/**\n * Retrieves user data from either local storage or the global window object, depending on data validity.\n * If the user data is valid and retrieved from the window object, it will be saved to local storage.\n * @returns {Object} An object containing the user data properties.\n */\nexport const getUserData = (webview = false) => {\n  let userData;\n  if (!webview) userData = loadUserDataFromLocalStorage();\n  if (!checkIfUserDataIsValid(userData)) {\n    // Data from localStorage is not good or is not there, let's get it from window\n    userData = getUserDataFromWindow();\n    if (checkIfUserDataIsValid(userData)) {\n      // Data from window looks good, let's persist it in localStorage\n      saveUserDataToLocalStorage(userData);\n    } else {\n      // Still not good, should be anonymous viewing\n    }\n  }\n  return userData;\n};\n\n/** Captcha helpers */\nexport class CaptchaWrapper {\n  constructor(settings) {\n    this.settings = {\n      width: '520px',\n      ...settings,\n    };\n    if (this.settings.challenge.type === 'sms') {\n      this.settings.url = urls.get('sms_captcha');\n    } else if (this.settings.challenge.type === 'ad') {\n      this.settings.url = urls.get('ad_captcha');\n    } else {\n      this.settings.url = urls.get('recaptcha');\n    }\n    if (this.settings.challenge.captcha_event) {\n      this.settings.url = `${this.settings.url + this.settings.challenge.captcha_event}/`;\n      if (this.settings.challenge.retry) {\n        this.settings.url = `${this.settings.url}retry/`;\n      }\n    }\n    this.settings.url_parameters = {\n      challenge: this.settings.challenge,\n    };\n    return new EviteModal(this.settings);\n  }\n}\n\nexport const submitLogin = async ({email, password}) =>\n  new Promise((resolve, reject) => {\n    $.ajax({\n      type: 'POST',\n      url: '/ajax_login',\n      data: {email, password, captcha: captchaResponse},\n      dataType: 'json',\n      success: (data) => {\n        resolve({data});\n      },\n      error: (xhr, status, error) => {\n        if (xhr.status === 412) {\n          const data = xhr.responseJSON;\n          document.getElementById('evite-modal-container').style.display = 'flex';\n\n          resolve(\n            new Promise((resolve, reject) => {\n              new CaptchaWrapper({\n                challenge: data,\n                onSubmit: (_response) => {\n                  captchaResponse = {..._response};\n                  captchaResponse.name = undefined;\n                  document.getElementById('evite-modal-container').style.display = 'none';\n                  resolve(captchaResponse);\n                },\n                onCancel: (err) => {\n                  document.getElementById('evite-modal-container').style.display = 'none';\n                  reject();\n                },\n              }).show();\n            })\n          );\n        } else {\n          reject({xhr, status, error});\n        }\n      },\n    });\n  });\n\nexport const submitLoginWithCaptcha = async ({email, password}) => {\n  let resp = await submitLogin({email, password});\n  console.log(`Initial response: ${JSON.stringify(resp)}`);\n\n  let numCaptchas = 0;\n  while (resp?.type === 'recaptcha' || resp?.type === 'sms') {\n    // Enforce captcha\n    resp = await submitLogin({email, password});\n    console.log(`In captcha response: ${JSON.stringify(resp)}`);\n    if (++numCaptchas > 2) {\n      console.log(`Number of captchas: ${numCaptchas}, break`);\n      break;\n    } else {\n      console.log(`Number of captchas: ${numCaptchas}, continuing for ${JSON.stringify(resp)}`);\n    }\n  }\n\n  return resp;\n};\n\nexport const submitRegistration = (body) =>\n  new Promise(async (resolve, reject) => {\n    try {\n      const url = urls.get('ajax_register');\n      // testcookie is set so we can detect if the user is blocking cookies.\n      evite.cookie('testcookie', 'worked', {expires: 14, path: '/'});\n      const response = await evite.fetch(url, {\n        method: 'POST',\n        headers: {\n          Accept: 'application/json',\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({...body, captcha: captchaResponse}),\n      });\n      if (response.status === 412) {\n        const data = await response.json();\n        document.getElementById('evite-modal-container').style.display = 'flex';\n\n        resolve(\n          new Promise((resolve, reject) => {\n            new CaptchaWrapper({\n              challenge: data,\n              onSubmit: (_response) => {\n                captchaResponse = {..._response};\n                captchaResponse.name = undefined;\n                document.getElementById('evite-modal-container').style.display = 'none';\n                resolve(captchaResponse);\n              },\n              onCancel: (err) => {\n                document.getElementById('evite-modal-container').style.display = 'none';\n                reject();\n              },\n            }).show();\n          })\n        );\n      } else {\n        resolve(response);\n      }\n    } catch (err) {\n      reject(err);\n    }\n  });\n\nexport const submitRegistrationWithCaptcha = async (body) => {\n  let resp = await submitRegistration(body);\n  console.log(`Initial response: ${JSON.stringify(resp)}`);\n\n  let numCaptchas = 0;\n  while (resp?.type === 'recaptcha' || resp?.type === 'sms') {\n    // Enforce captcha\n    resp = await submitRegistration(body);\n    console.log(`In captcha response: ${JSON.stringify(resp)}`);\n    if (++numCaptchas > 2) {\n      console.log(`Number of captchas: ${numCaptchas}, break`);\n      break;\n    } else {\n      console.log(`Number of captchas: ${numCaptchas}, continuing for ${JSON.stringify(resp)}`);\n    }\n  }\n\n  return resp;\n};\n","import React, {useEffect, useRef, useState} from 'react';\nimport {initAligningGuidelines} from './controls/align_lines';\nimport fabric from './fabric';\n\nexport function CanvasStickers({configJson, onChange, setCanvas, onLoad}) {\n  const [loading, setLoading] = useState(false);\n  const canvasEl = useRef(null);\n\n  useEffect(() => {\n    const canvasInstance = new fabric.Canvas(canvasEl.current, {\n      width: 0,\n      height: 0,\n      includeDefaultValues: false,\n      selection: !evite.detects.isMobile,\n    });\n\n    canvasInstance.setZoom(0.5);\n\n    initAligningGuidelines(canvasInstance);\n\n    const setCurrentDimensions = () => {\n      const canvasSizer = document.getElementById('canvas__wrapper__stickers');\n\n      if (canvasSizer) {\n        const width = canvasSizer.offsetWidth;\n        const height = canvasSizer.offsetHeight;\n        const scale = width / canvasInstance.getWidth();\n        const zoom = canvasInstance.getZoom() * scale;\n        canvasInstance.setDimensions({width, height});\n        canvasInstance.setViewportTransform([zoom, 0, 0, zoom, 0, 0]);\n      }\n    };\n\n    canvasInstance.setCurrentDimensions = setCurrentDimensions;\n\n    window.addEventListener('resize', setCurrentDimensions, false);\n\n    const onChangeHandler = () => {\n      if (!loading)\n        onChange(canvasInstance.toJSON(['dataUrl', 'delay', 'frameWidth', 'framesLength']));\n    };\n\n    canvasInstance.on({\n      'object:modified': onChangeHandler,\n      'object:added': onChangeHandler,\n      'object:removed': onChangeHandler,\n    });\n\n    const loadCanvas = (configJson) => {\n      setLoading(true);\n      const reviver = async (json, obj) => {\n        if (obj.type === 'gif') {\n          fabric.util.requestAnimFrame(function render() {\n            canvasInstance?.renderAll();\n            fabric.util.requestAnimFrame(render);\n          });\n        }\n\n        setLoading(false);\n        onLoad && onLoad();\n        setCurrentDimensions();\n      };\n      canvasInstance.loadFromJSON(configJson, null, reviver);\n    };\n    configJson && loadCanvas(configJson);\n\n    setCanvas(canvasInstance);\n\n    return () => {\n      canvasInstance.dispose();\n      window.removeEventListener('resize', setCurrentDimensions);\n    };\n  }, []);\n\n  return <canvas ref={canvasEl} />;\n}\n","import {useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {useCanvasImage} from '~/common/canvas/hooks/useCanvasImage';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {useNavigator} from '~/CreateFabricInvitation/routes/EventCreateDesign/components/NavBottom/useNavigator';\nimport {largishAndUp} from '~sass/pb_styleguide/base/_exports.sass';\nimport {Sections} from '~/CreateFabricInvitation/routes/EventCreateDesign/constants';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport './Card.sass';\n\nconst getImgBackgroundImage = (backgroundImage, isUyo) => {\n  const backgroundImageUrl = backgroundImage?.src || backgroundImage?.originalUrl;\n  const isInCustomizeStep = window.location.href.includes('/customize/');\n  const isAnimated = backgroundImageUrl?.endsWith('.gif');\n  if (!backgroundImageUrl || (isUyo && !isInCustomizeStep && !isAnimated)) {\n    return '';\n  }\n  return `url(${backgroundImageUrl})`;\n};\n\nexport function Card({className = '', fabricArt, imageRef, redirectTo, isFree = false}) {\n  const {image, loading} = useCanvasImage(fabricArt);\n  const backgroundImage = fabricArt?.backgroundImage ?? {};\n  const {matches: isDesktop} = useMatchQuery(`(min-width: ${largishAndUp})`);\n  const [isImageLoaded, setIsImageLoaded] = useState(false);\n  const isMobile = !isDesktop;\n\n  const isUyo = useSelector((state) => {\n    const hasKeyword = !!state.coverData?.template?.keywords?.some(\n      (item) => item.toLowerCase() === 'uyo'\n    );\n    const hasTitleUyo = !!state.coverData?.template?.name?.includes('uyo');\n    const hasImgId = !!state.fabricDesign?.uyoImageId;\n\n    return hasKeyword || hasImgId || hasTitleUyo;\n  });\n\n  const navigate = useNavigator({\n    isMobile,\n    disableAutoOpenEditor: redirectTo === Sections.CARD_DESIGN,\n  });\n\n  // For animated UYO, we should set the background AFTER the user image loads\n  const dynamicBgStyle = isImageLoaded ? getImgBackgroundImage(backgroundImage, isUyo) : {};\n\n  return (\n    <>\n      {loading && <span className=\"fabric_user_card-spinner evt-spinner inline\" />}\n      <Button\n        data-qa-id=\"card-img\"\n        variant=\"transparent\"\n        onClick={!loading && redirectTo ? () => navigate(redirectTo) : undefined}\n        className={className}\n      >\n        <img\n          src={image}\n          onLoad={() => setIsImageLoaded(true)}\n          className={`fabric_user_card ${redirectTo ? 'fabric_user_card--clickable' : ''}\n          ${redirectTo && loading ? 'envelope_image__wrapper--clickable--disabled' : ''}\n          `}\n          style={{\n            backgroundImage: dynamicBgStyle,\n            height: isMobile && isFree && 'calc(512px - 2rem)',\n            width: isMobile && isFree && 'auto',\n            backgroundSize: '100% 100%',\n            backgroundRepeat: 'no-repeat',\n          }}\n          ref={imageRef}\n          alt=\"\"\n        />\n      </Button>\n    </>\n  );\n}\n","import {fabric} from 'fabric';\nimport {gifToSprite} from './GifToSprite';\n\nconst generateImage = ({dataUrl, delay, frameWidth, framesLength, imgOptions}) => {\n  const [PLAY, PAUSE, STOP] = [0, 1, 2];\n\n  return new Promise((resolve) => {\n    fabric.Gif.fromURL(\n      dataUrl,\n      (img) => {\n        const sprite = img.getElement();\n        let framesIndex = 0;\n        let start = performance.now();\n        let status = PLAY;\n\n        img.width = frameWidth;\n        img.height = sprite.naturalHeight;\n        img.mode = 'image';\n        img.top = 0;\n        img.left = 0;\n        img.delay = delay;\n        img.frameWidth = frameWidth;\n        img.framesLength = framesLength;\n\n        img._render = function (ctx) {\n          if (status === PAUSE || (status === STOP && framesIndex === 0)) return;\n          const now = performance.now();\n          const delta = now - start;\n          if (delta > delay) {\n            start = now;\n            framesIndex++;\n          }\n          if (framesIndex === framesLength || status === STOP) framesIndex = 0;\n          ctx.drawImage(\n            sprite,\n            frameWidth * framesIndex,\n            0,\n            frameWidth,\n            sprite.height,\n            -this.width / 2,\n            -this.height / 2,\n            frameWidth,\n            sprite.height\n          );\n        };\n        img.play = function () {\n          status = PLAY;\n          this.dirty = true;\n        };\n        img.pause = function () {\n          status = PAUSE;\n          this.dirty = false;\n        };\n        img.stop = function () {\n          status = STOP;\n          this.dirty = false;\n        };\n        img.getStatus = () => ['Playing', 'Paused', 'Stopped'][status];\n\n        img.play();\n        resolve(img);\n      },\n      imgOptions\n    );\n  });\n};\n\nexport const fabricGif = async (gif, imgOptions, maxWidth, maxHeight, maxDuration) => {\n  const {dataUrl, delay, frameWidth, framesLength} = await gifToSprite(\n    gif,\n    maxWidth,\n    maxHeight,\n    maxDuration\n  );\n\n  return generateImage({dataUrl, delay, frameWidth, framesLength, imgOptions});\n};\n\nexport const fabricGifFromBase64 = async (dataUrl, delay, frameWidth, framesLength, imgOptions) =>\n  generateImage({dataUrl, delay, frameWidth, framesLength, imgOptions});\n","import {decompressFrames, parseGIF} from 'gifuct-js';\n\nexport const gifToSprite = async (gif, maxWidth, maxHeight, maxDuration) => {\n  let arrayBuffer;\n  let error;\n  let frames;\n\n  // if the gif is an input file, get the arrayBuffer with FileReader\n  if (gif.type) {\n    const reader = new FileReader();\n    try {\n      arrayBuffer = await new Promise((resolve, reject) => {\n        reader.onload = () => resolve(reader.result);\n        reader.onerror = () => reject(reader.error);\n        reader.readAsArrayBuffer(gif);\n      });\n    } catch (err) {\n      error = err;\n    }\n  } else {\n    try {\n      arrayBuffer = await fetch(gif).then((resp) => resp.arrayBuffer());\n    } catch (err) {\n      error = err;\n    }\n  }\n\n  // Parse and decompress the gif arrayBuffer to frames with the \"gifuct-js\" library\n  if (!error) frames = decompressFrames(parseGIF(arrayBuffer), true);\n  if (!error && (!frames || !frames.length)) error = 'No_frame_error';\n  if (error) {\n    console.error(error);\n    return {error};\n  }\n\n  const dataCanvas = document.createElement('canvas');\n  const dataCtx = dataCanvas.getContext('2d');\n  const frameCanvas = document.createElement('canvas');\n  const frameCtx = frameCanvas.getContext('2d');\n  const spriteCanvas = document.createElement('canvas');\n  const spriteCtx = spriteCanvas.getContext('2d');\n\n  let [width, height, delay] = [\n    frames[0].dims.width,\n    frames[0].dims.height,\n    frames.reduce((acc, cur) => (acc = !acc ? cur.delay : acc), 0),\n  ];\n\n  const duration = frames.length * delay;\n  maxDuration = maxDuration || duration;\n  if (duration > maxDuration) frames.splice(Math.ceil(maxDuration / delay));\n\n  maxWidth = maxWidth || width;\n  maxHeight = maxHeight || height;\n  const scale = Math.min(maxWidth / width, maxHeight / height);\n  width *= scale;\n  height *= scale;\n\n  frameCanvas.width = width;\n  frameCanvas.height = height;\n  spriteCanvas.width = width * frames.length;\n  spriteCanvas.height = height;\n\n  frames.forEach((frame, i) => {\n    const frameImageData = dataCtx.createImageData(frame.dims.width, frame.dims.height);\n    frameImageData.data.set(frame.patch);\n    dataCanvas.width = frame.dims.width;\n    dataCanvas.height = frame.dims.height;\n    dataCtx.putImageData(frameImageData, 0, 0);\n\n    if (frame.disposalType === 2) frameCtx.clearRect(0, 0, width, height);\n    frameCtx.drawImage(\n      dataCanvas,\n      frame.dims.left * scale,\n      frame.dims.top * scale,\n      frame.dims.width * scale,\n      frame.dims.height * scale\n    );\n\n    spriteCtx.drawImage(frameCanvas, width * i, 0);\n  });\n\n  const dataUrl = spriteCanvas.toDataURL();\n\n  dataCanvas.remove();\n  frameCanvas.remove();\n  spriteCanvas.remove();\n\n  return {\n    dataUrl,\n    frameWidth: width,\n    framesLength: frames.length,\n    delay,\n  };\n};\n","import {fabric} from 'fabric';\n\n/**\n * Should objects be aligned by a bounding box?\n * [Bug] Scaled objects sometimes can not be aligned by edges\n *\n */\nexport function initAligningGuidelines(canvas) {\n  const ctx = canvas.getSelectionContext();\n  const aligningLineOffset = 5;\n  const aligningLineMargin = 4;\n  const aligningLineWidth = 1;\n  const aligningLineColor = 'rgb(255, 0, 0)';\n  let {viewportTransform} = canvas;\n  let zoom = 1;\n\n  function drawVerticalLine(coords) {\n    drawLine(\n      coords.x1 + 0.5,\n      coords.y1 > coords.y2 ? coords.y2 : coords.y1,\n      coords.x1 + 0.5,\n      coords.y2 > coords.y1 ? coords.y2 : coords.y1\n    );\n  }\n\n  function drawHorizontalLine(coords) {\n    drawLine(\n      coords.x1 > coords.x2 ? coords.x2 : coords.x1,\n      coords.y1 + 0.5,\n      coords.x2 > coords.x1 ? coords.x2 : coords.x1,\n      coords.y1 + 0.5\n    );\n  }\n\n  function drawLine(x1, y1, x2, y2) {\n    ctx.save();\n    ctx.lineWidth = aligningLineWidth;\n    ctx.strokeStyle = aligningLineColor;\n    ctx.beginPath();\n    if (viewportTransform) {\n      ctx.moveTo((x1 + viewportTransform[4]) * zoom, (y1 + viewportTransform[5]) * zoom);\n      ctx.lineTo((x2 + viewportTransform[4]) * zoom, (y2 + viewportTransform[5]) * zoom);\n    }\n    ctx.stroke();\n    ctx.restore();\n  }\n\n  function isInRange(value1, value2) {\n    value1 = Math.round(value1);\n    value2 = Math.round(value2);\n    for (let i = value1 - aligningLineMargin, len = value1 + aligningLineMargin; i <= len; i++) {\n      if (i === value2) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  const verticalLines = [];\n  const horizontalLines = [];\n\n  canvas.on('mouse:down', () => {\n    viewportTransform = canvas.viewportTransform;\n    zoom = canvas.getZoom();\n  });\n\n  canvas.on('object:moving', (e) => {\n    const activeObject = e.target;\n    if (!activeObject || !viewportTransform) return;\n\n    const canvasObjects = canvas.getObjects();\n    const activeObjectCenter = activeObject.getCenterPoint();\n    const activeObjectLeft = activeObjectCenter.x;\n    const activeObjectTop = activeObjectCenter.y;\n    const activeObjectBoundingRect = activeObject.getBoundingRect();\n    const activeObjectHeight = activeObjectBoundingRect.height / viewportTransform[3];\n    const activeObjectWidth = activeObjectBoundingRect.width / viewportTransform[0];\n    let horizontalInTheRange = false;\n    let verticalInTheRange = false;\n    const transform = canvas.viewportTransform;\n\n    if (!transform) return;\n\n    // It should be trivial to DRY this up by encapsulating (repeating) creation of x1, x2, y1, and y2 into functions,\n    // but we're not doing it here for perf. reasons -- as this a function that's invoked on every mouse move\n\n    for (let i = canvasObjects.length; i--; ) {\n      if (canvasObjects[i] === activeObject) continue;\n\n      const objectCenter = canvasObjects[i].getCenterPoint();\n      const objectLeft = objectCenter.x;\n      const objectTop = objectCenter.y;\n      const objectBoundingRect = canvasObjects[i].getBoundingRect();\n      const objectHeight = objectBoundingRect.height / viewportTransform[3];\n      const objectWidth = objectBoundingRect.width / viewportTransform[0];\n\n      // snap by the horizontal center line\n      if (isInRange(objectLeft, activeObjectLeft)) {\n        verticalInTheRange = true;\n        verticalLines.push({\n          x1: objectLeft,\n          y1:\n            objectTop < activeObjectTop\n              ? objectTop - objectHeight / 2 - aligningLineOffset\n              : objectTop + objectHeight / 2 + aligningLineOffset,\n          y2:\n            activeObjectTop > objectTop\n              ? activeObjectTop + activeObjectHeight / 2 + aligningLineOffset\n              : activeObjectTop - activeObjectHeight / 2 - aligningLineOffset,\n        });\n        activeObject.setPositionByOrigin(\n          new fabric.Point(objectLeft, activeObjectTop),\n          'center',\n          'center'\n        );\n      }\n\n      // snap by the left edge\n      if (isInRange(objectLeft - objectWidth / 2, activeObjectLeft - activeObjectWidth / 2)) {\n        verticalInTheRange = true;\n        verticalLines.push({\n          x1: objectLeft - objectWidth / 2,\n          y1:\n            objectTop < activeObjectTop\n              ? objectTop - objectHeight / 2 - aligningLineOffset\n              : objectTop + objectHeight / 2 + aligningLineOffset,\n          y2:\n            activeObjectTop > objectTop\n              ? activeObjectTop + activeObjectHeight / 2 + aligningLineOffset\n              : activeObjectTop - activeObjectHeight / 2 - aligningLineOffset,\n        });\n        activeObject.setPositionByOrigin(\n          new fabric.Point(objectLeft - objectWidth / 2 + activeObjectWidth / 2, activeObjectTop),\n          'center',\n          'center'\n        );\n      }\n\n      // snap by the right edge\n      if (isInRange(objectLeft + objectWidth / 2, activeObjectLeft + activeObjectWidth / 2)) {\n        verticalInTheRange = true;\n        verticalLines.push({\n          x1: objectLeft + objectWidth / 2,\n          y1:\n            objectTop < activeObjectTop\n              ? objectTop - objectHeight / 2 - aligningLineOffset\n              : objectTop + objectHeight / 2 + aligningLineOffset,\n          y2:\n            activeObjectTop > objectTop\n              ? activeObjectTop + activeObjectHeight / 2 + aligningLineOffset\n              : activeObjectTop - activeObjectHeight / 2 - aligningLineOffset,\n        });\n        activeObject.setPositionByOrigin(\n          new fabric.Point(objectLeft + objectWidth / 2 - activeObjectWidth / 2, activeObjectTop),\n          'center',\n          'center'\n        );\n      }\n\n      // snap by the vertical center line\n      if (isInRange(objectTop, activeObjectTop)) {\n        horizontalInTheRange = true;\n        horizontalLines.push({\n          y1: objectTop,\n          x1:\n            objectLeft < activeObjectLeft\n              ? objectLeft - objectWidth / 2 - aligningLineOffset\n              : objectLeft + objectWidth / 2 + aligningLineOffset,\n          x2:\n            activeObjectLeft > objectLeft\n              ? activeObjectLeft + activeObjectWidth / 2 + aligningLineOffset\n              : activeObjectLeft - activeObjectWidth / 2 - aligningLineOffset,\n        });\n        activeObject.setPositionByOrigin(\n          new fabric.Point(activeObjectLeft, objectTop),\n          'center',\n          'center'\n        );\n      }\n\n      // snap by the top edge\n      if (isInRange(objectTop - objectHeight / 2, activeObjectTop - activeObjectHeight / 2)) {\n        horizontalInTheRange = true;\n        horizontalLines.push({\n          y1: objectTop - objectHeight / 2,\n          x1:\n            objectLeft < activeObjectLeft\n              ? objectLeft - objectWidth / 2 - aligningLineOffset\n              : objectLeft + objectWidth / 2 + aligningLineOffset,\n          x2:\n            activeObjectLeft > objectLeft\n              ? activeObjectLeft + activeObjectWidth / 2 + aligningLineOffset\n              : activeObjectLeft - activeObjectWidth / 2 - aligningLineOffset,\n        });\n        activeObject.setPositionByOrigin(\n          new fabric.Point(activeObjectLeft, objectTop - objectHeight / 2 + activeObjectHeight / 2),\n          'center',\n          'center'\n        );\n      }\n\n      // snap by the bottom edge\n      if (isInRange(objectTop + objectHeight / 2, activeObjectTop + activeObjectHeight / 2)) {\n        horizontalInTheRange = true;\n        horizontalLines.push({\n          y1: objectTop + objectHeight / 2,\n          x1:\n            objectLeft < activeObjectLeft\n              ? objectLeft - objectWidth / 2 - aligningLineOffset\n              : objectLeft + objectWidth / 2 + aligningLineOffset,\n          x2:\n            activeObjectLeft > objectLeft\n              ? activeObjectLeft + activeObjectWidth / 2 + aligningLineOffset\n              : activeObjectLeft - activeObjectWidth / 2 - aligningLineOffset,\n        });\n        activeObject.setPositionByOrigin(\n          new fabric.Point(activeObjectLeft, objectTop + objectHeight / 2 - activeObjectHeight / 2),\n          'center',\n          'center'\n        );\n      }\n    }\n\n    if (!horizontalInTheRange) {\n      horizontalLines.length = 0;\n    }\n\n    if (!verticalInTheRange) {\n      verticalLines.length = 0;\n    }\n  });\n\n  canvas.on('before:render', () => {\n    canvas.clearContext(ctx);\n  });\n\n  canvas.on('after:render', () => {\n    for (let i = verticalLines.length; i--; ) {\n      drawVerticalLine(verticalLines[i]);\n    }\n    for (let i = horizontalLines.length; i--; ) {\n      drawHorizontalLine(horizontalLines[i]);\n    }\n\n    verticalLines.length = horizontalLines.length = 0;\n  });\n\n  canvas.on('mouse:up', () => {\n    verticalLines.length = horizontalLines.length = 0;\n    canvas.renderAll();\n  });\n}\n","import React from 'react';\nimport {renderIcon} from '~/common/canvas/renderIcon';\nimport PB_Duplicate from '~/common/svg/icons/PB_Duplicate.svg';\nimport {PB_AlertLine} from '~/common/svg/PB_AlertLine';\nimport {toastAlert} from '~/common/_pb_components/atoms/Toast';\nimport {canvasAddTextBorderAndIcon, canvasShowTextBordersAndIcons} from '../customs/text_border';\n\nexport const cloneControl = () => {\n  const cloneObject = (eventData, transform) => {\n    const {target} = transform;\n    const {canvas} = target;\n    const textsQty = canvas.getObjects().filter((obj) => obj.type === 'textbox').length;\n    if (textsQty < 8) {\n      target.clone((cloned) => {\n        canvas.add(\n          cloned.set({\n            left: target.left + 50,\n            top: target.top + 50,\n            text: target.text,\n            letterCasing: target?.letterCasing,\n            _originalObject: JSON.parse(JSON.stringify(target)),\n          })\n        );\n        canvas.setActiveObject(cloned);\n        canvasShowTextBordersAndIcons(canvas);\n        canvasAddTextBorderAndIcon(cloned, canvas, textsQty + 1);\n      });\n    } else {\n      toastAlert('Maximum number of text boxes has been reached', {\n        type: 'error',\n        icon: <PB_AlertLine ratio={0.65} />,\n        position: 'top-right',\n        autoClose: 5000,\n        hideProgressBar: true,\n        closeOnClick: true,\n        pauseOnHover: true,\n        draggable: true,\n        progress: undefined,\n      });\n    }\n  };\n\n  const padding = 9;\n\n  return new fabric.Control({\n    x: 0,\n    y: -0.5,\n    offsetX: 22,\n    offsetY: -16 - padding,\n    cursorStyle: 'pointer',\n    mouseUpHandler: cloneObject,\n    render: renderIcon({icon: PB_Duplicate, padding}),\n    cornerSize: 16,\n    touchSizeX: 32,\n    touchSizeY: 32,\n    sizeX: 30,\n    sizeY: 30,\n  });\n};\n","import React from 'react';\nimport {PB_AlertLine} from '~/common/svg/PB_AlertLine';\nimport {renderIcon} from '~/common/canvas/renderIcon';\nimport PB_Delete from '~/common/svg/icons/PB_Delete.svg';\nimport {toastAlert} from '~/common/_pb_components/atoms/Toast';\nimport {\n  canvasAddTextBordersAndIcons,\n  canvasRemoveTextBordersAndIcons,\n} from '../customs/text_border';\n\nexport const removeControl = ({offsetX} = {}) => {\n  const removeObject = (eventData, obj) => {\n    const {canvas} = obj.target;\n    canvasRemoveTextBordersAndIcons(canvas);\n    const allObjects = canvas.getObjects();\n    const allActiveObjects = canvas.getActiveObjects();\n    const rectObject = allObjects?.find((obj) => obj.type === 'rect');\n\n    const filterTextBoxes = (arr = []) => arr?.filter((obj) => obj?.type === 'textbox');\n\n    const containPicture = allActiveObjects?.some((obj) => obj.type !== 'textbox');\n    const texts = filterTextBoxes(allObjects);\n    const textObjectsToBeRemoved = filterTextBoxes(allActiveObjects);\n    const isSticker = allActiveObjects[0]?.originalUrl?.indexOf('sticker_image') > -1;\n\n    if (isSticker || texts.length - textObjectsToBeRemoved.length >= 1) {\n      if (containPicture) {\n        rectObject?.set({fill: 'rgb(128,128,128,0.5)', type: 'uYOImage'});\n        canvas.renderAll();\n        canvas.fire('object:modified');\n      }\n      allActiveObjects?.map((textObj) => canvas.remove(textObj));\n      canvas.discardActiveObject();\n      canvas.renderAll();\n    } else {\n      toastAlert('Must have at least 1 text box', {\n        type: 'error',\n        icon: <PB_AlertLine ratio={0.65} />,\n        position: 'top-right',\n        autoClose: 5000,\n        hideProgressBar: true,\n        closeOnClick: true,\n        pauseOnHover: true,\n        draggable: true,\n        progress: undefined,\n      });\n    }\n    canvasAddTextBordersAndIcons(canvas);\n  };\n\n  const padding = 9;\n\n  return new fabric.Control({\n    x: 0,\n    y: -0.5,\n    offsetX: offsetX ?? -22,\n    offsetY: -16 - padding,\n    cursorStyle: 'pointer',\n    mouseUpHandler: removeObject,\n    render: renderIcon({icon: PB_Delete, padding}),\n    cornerSize: 16,\n    touchSizeX: 32,\n    touchSizeY: 32,\n    sizeX: 30,\n    sizeY: 30,\n  });\n};\n","import {renderIcon} from '~/common/canvas/renderIcon';\nimport PB_Rotation from '~/common/svg/icons/PB_Rotation.svg';\n\nexport const rotationControl = () =>\n  new fabric.Control({\n    x: 0,\n    y: 0.5,\n    offsetX: 0,\n    offsetY: 20,\n    cornerSize: 12,\n    touchSizeX: 24,\n    touchSizeY: 24,\n    withConnection: false,\n    actionName: 'rotate',\n    cursorStyle: 'pointer',\n    render: renderIcon({icon: PB_Rotation, padding: 4}),\n    actionHandler: fabric.controlsUtils.rotationWithSnapping,\n  });\n","import {fabric} from 'fabric';\n\nfabric.util.object.extend(fabric.Textbox, {\n  async fromObject(object, callback) {\n    const styles = fabric.util.stylesFromArray(object.styles, object.text);\n    const objCopy = {...object, styles};\n\n    try {\n      const promises = Array.from(document.fonts.values())\n        .filter(({family}) => family === object.fontFamily)\n        .map((font) => font.load());\n      await Promise.allSettled(promises);\n    } catch (error) {\n      console.log(`${object.fontFamily} Error loading font: ${error}. Ignoring and moving on...`);\n    } finally {\n      return fabric.Object._fromObject('Textbox', objCopy, callback, 'text');\n    }\n  },\n});\n","import {fabric} from 'fabric';\nimport {fabricGif} from '~/common/canvas/animation/gif/Gif';\n\nfabric.Gif = fabric.util.createClass(fabric.Image, {\n  type: 'gif',\n  originalUrl: '',\n  initialize(options, extra) {\n    options || (options = {});\n    this.callSuper('initialize', options, extra);\n  },\n\n  toObject(propertiesToInclude) {\n    const {src, ...object} = this.callSuper(\n      'toObject',\n      ['originalUrl'].concat(propertiesToInclude)\n    );\n    return object;\n  },\n});\n\nfabric.Gif.fromURL = (url, callback, imgOptions) => {\n  fabric.util.loadImage(url, (img, isError) => {\n    callback && callback(new fabric.Gif(img, imgOptions), isError);\n  });\n};\n\nfabric.Gif.fromObject = (object, callback) =>\n  fabricGif(object.originalUrl, {originalUrl: object.originalUrl}, object.frameWidth).then(\n    (gif) => {\n      gif.set({...object});\n      callback(gif, false);\n    }\n  );\n","export * from './letter_casing';\nexport * from './gif';\nexport * from './fonts';\nexport * from './uyo_image';\n","import {fabric} from 'fabric';\n\nconst capitalize = (text) => {\n  const words = text.split(' ');\n  return words.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' ');\n};\n\nexport const letterCasing = {\n  capitalize,\n  upper: (text) => text.toUpperCase(),\n  lower: (text) => text.toLowerCase(),\n};\n\nconst letterCasingHandler = (operation, text) => (operation ? letterCasing[operation](text) : text);\n\nfabric.util.object.extend(fabric.Textbox.prototype, {\n  enterEditing() {\n    if (this.hiddenTextarea) {\n      this.text = this.hiddenTextarea.value;\n    } else {\n      // eslint-disable-next-line no-underscore-dangle\n      this.text = this._originalText ?? this.text;\n    }\n    this.callSuper('enterEditing');\n    return this;\n  },\n  exitEditing() {\n    // eslint-disable-next-line no-underscore-dangle\n    this._originalText = this.text;\n    this.text = letterCasingHandler(this.letterCasing, this.text);\n    this.callSuper('exitEditing');\n    return this;\n  },\n});\n","import {fabric} from 'fabric';\nimport * as colors from '~sass/pb_styleguide/base/_exports.sass';\n\n// Defining custom fabric element type TextBorder\nfabric.TextBorder = fabric.util.createClass(fabric.Rect, {\n  isError: false,\n  initialize(options) {\n    this.callSuper('initialize', options);\n  },\n});\n\nfabric.TextBorder.fromObject = (object, callback) => {\n  const textBorder = new fabric.TextBorder(object);\n  if (typeof callback === 'function') {\n    callback(textBorder);\n  }\n  return textBorder;\n};\n\n// Hide border for target textbox\nexport const canvasHideTextBorder = (selectedTextbox, canvas) => {\n  const canvasObjs = canvas?.getObjects();\n\n  if (selectedTextbox?.text && canvasObjs.length > 0) {\n    const textBorder = canvasObjs?.find(\n      (obj) => obj.identifier === `border-${selectedTextbox.identifier}`\n    );\n    const textEditIcon = canvasObjs?.find(\n      (obj) => obj.identifier === `icon-${selectedTextbox.identifier}`\n    );\n    textBorder?.set({stroke: 'transparent'});\n    textEditIcon?.set({top: 9999});\n    canvas.renderAll();\n  }\n};\n\n// Hide edit icon for target textbox\nexport const canvasHideEditIcon = (selectedTextbox, canvas) => {\n  const canvasObjs = canvas?.getObjects();\n\n  if (selectedTextbox?.text && canvasObjs.length > 0) {\n    const textEditIcon = canvasObjs.find(\n      (obj) => obj.identifier === `icon-${selectedTextbox.identifier}`\n    );\n    textEditIcon?.set({top: 9999});\n    canvas.renderAll();\n  }\n};\n\n// Remove edit icon for target textbox\nexport const canvasRemoveEditIcon = (selectedTextbox, canvas) => {\n  const canvasObjs = canvas?.getObjects();\n\n  if (selectedTextbox?.text && canvasObjs.length > 0) {\n    const textEditIcon = canvasObjs.find(\n      (obj) => obj.identifier === `icon-${selectedTextbox.identifier}`\n    );\n\n    textEditIcon && canvas.remove(textEditIcon);\n    canvas.renderAll();\n  }\n};\n\n// Show borders and edit icons for textboxes\nexport const canvasShowTextBordersAndIcons = (canvas) => {\n  const canvasObjs = canvas?.getObjects();\n\n  canvasObjs\n    ?.filter((obj) => obj.type === 'textbox')\n    .forEach((textbox) => {\n      const textBorder = canvasObjs.find(\n        (obj) => obj.identifier === `border-${textbox.identifier}`\n      );\n      const iconLeft = textbox.angle === 0 ? textbox.left + (textbox.width - 38) : 9999;\n      const editIcon = canvasObjs.find((obj) => obj.identifier === `icon-${textbox.identifier}`);\n\n      textBorder?.set({\n        stroke: colors.tanzanite,\n        top: textbox.top,\n        right: textbox.right,\n        bottom: textbox.bottom,\n        left: textbox.left,\n        height: textbox.height,\n        width: textbox.width,\n        angle: textbox.angle,\n        scaleX: textbox.scaleX,\n        scaleY: textbox.scaleY,\n      });\n      editIcon?.set({\n        top: textbox.top + 3,\n        left: iconLeft,\n      });\n      canvas.renderAll();\n    });\n};\n\n// Create dashed borders and edit icons for the textboxes showing they're editable\nexport const canvasAddTextBordersAndIcons = (\n  canvas,\n  originalFabricArt = window.fabricTemplate?.editable_art?.default\n) =>\n  new Promise((resolve, reject) => {\n    try {\n      const textboxes = canvas?.getObjects().filter((object) => object.type === 'textbox');\n      const promises = textboxes.map((textbox, index) =>\n        canvasAddTextBorderAndIcon(textbox, canvas, index + 1, originalFabricArt.objects)\n      );\n\n      Promise.all(promises)\n        .then(() => {\n          resolve();\n        })\n        .catch((error) => {\n          reject(error);\n        });\n    } catch (error) {\n      reject(error);\n    }\n  });\n\nexport const canvasAddTextBorderAndIcon = (\n  textbox,\n  canvas,\n  id,\n  objects = window.fabricTemplate?.editable_art?.default?.objects\n) =>\n  new Promise((resolve, reject) => {\n    if (!textbox.height || !textbox.text) {\n      resolve();\n      return;\n    }\n\n    textbox?.set({\n      identifier: `textbox-${id}`,\n    });\n\n    const imgElement = new Image();\n    imgElement.src = '/assets/images/canvas-edit-icon.png';\n    const iconLeft = textbox.angle === 0 ? textbox.left + (textbox.width - 38) : 9999;\n    const activeObj = canvas.getActiveObject();\n    const isActive = !!(textbox.identifier === activeObj?.identifier);\n\n    imgElement.onload = function () {\n      const fabricBorder = new fabric.TextBorder({\n        left: textbox.left,\n        top: textbox.top,\n        width: textbox.width,\n        height: textbox.height, // Setting a minimum height equal to the height of the edit icon\n        fill: 'transparent',\n        stroke: isActive ? 'transparent' : colors.tanzanite,\n        strokeDashArray: [18, 18],\n        strokeWidth: 3,\n        selectable: false,\n        identifier: `border-${textbox.identifier}`,\n        angle: textbox.angle,\n        type: 'textBorder',\n      });\n\n      const fabricImage = new fabric.Image(imgElement, {\n        // Position set to top right corner\n        left: iconLeft,\n        top: isActive ? 9999 : textbox.top + 3,\n        scaleX: 0.22,\n        scaleY: 0.22,\n        selectable: false,\n        identifier: `icon-${textbox.identifier}`,\n      });\n\n      canvas.add(fabricBorder);\n\n      // Bring all textboxes to the front\n      canvas.getObjects().map((obj) => {\n        obj.type === 'textbox' && canvas.bringToFront(obj);\n      });\n\n      // If the text, left and top properties all match, return false; otherwise return true\n      const textboxModified = () => {\n        const matchingObject = objects.find((obj) => obj.text === textbox.text);\n        return !(\n          matchingObject &&\n          matchingObject.left === textbox.left &&\n          matchingObject.top === textbox.top\n        );\n      };\n\n      if (!textboxModified()) {\n        canvas.add(fabricImage);\n        canvas.bringToFront(fabricImage);\n      }\n\n      canvas.renderAll();\n      resolve();\n    };\n\n    imgElement.onerror = function () {\n      reject('Image loading failed');\n    };\n  });\n\n// Remove text borders and edit icons before navigating to step 2\nexport const canvasRemoveTextBordersAndIcons = async (canvas) => {\n  const matchingObjects = canvas?.getObjects().filter(\n    (object) =>\n      object.identifier?.includes('icon-') ||\n      object.identifier?.includes('border-') ||\n      object.src?.includes('edit-icon') || // Redundancy\n      object.type === 'textBorder' // Redundancy\n  );\n\n  const totalMatchingObjects = matchingObjects?.length;\n\n  for (let i = 0; i < totalMatchingObjects; i++) {\n    const textOrIcon = matchingObjects[i];\n    canvas.remove(textOrIcon);\n    if (i === totalMatchingObjects - 1) {\n      return true; // Allow navigation when the last matching object is removed\n    }\n  }\n\n  return true; // Allow navigation if there are no matching objects\n};\n","import {fabric} from 'fabric';\n\nfabric.UYOImage = fabric.util.createClass(fabric.Image, {\n  type: 'uYOImage',\n  isError: false,\n});\n\nconst loadImage = (url, callback, options) => {\n  fabric.util.loadImage(\n    url,\n    (img, isError) => {\n      const uyoImage = new fabric.UYOImage(img, {...options, isError});\n      if (options?.clipPath && options.clipPath.type) {\n        const klass = fabric.util.getKlass(options.clipPath.type, 'fabric');\n        if (klass) {\n          uyoImage.clipPath = new klass(options.clipPath);\n        }\n      }\n      callback && callback(uyoImage);\n    },\n    null,\n    'anonymous'\n  );\n};\n\nfabric.UYOImage.fromURL = loadImage;\n\nfabric.UYOImage.fromObject = (object, callback) => loadImage(object.src, callback, object);\n","import {fabric} from 'fabric';\nimport {removeControl} from '~/common/canvas/controls/remove';\nimport {cloneControl} from '~/common/canvas/controls/clone';\nimport {rotationControl} from '~/common/canvas/controls/rotation';\nimport * as colors from '~sass/pb_styleguide/base/_exports.sass';\nimport './Canvas.sass';\nimport './customs';\n\nfabric.Object.prototype.setControlsVisibility({\n  tl: true, // top-left\n  mt: false, // middle-top\n  tr: true, // top-right\n  ml: true, // middle-left\n  mr: true, // middle-right\n  bl: true, // bottom-left\n  mb: false, // middle-bottom\n  br: true, // bottom-right\n  mtr: true, // rotate icon\n});\n\nfabric.Textbox.prototype.set({\n  hoverCursor: 'pointer',\n  moveCursor: 'default',\n  touchCornerSize: 40,\n  editingBorderColor: colors.tanzanite,\n});\n\nfabric.Image.prototype.set({\n  hoverCursor: 'pointer',\n  moveCursor: 'default',\n  touchCornerSize: 40,\n  editingBorderColor: colors.tanzanite,\n});\n\nfabric.Object.prototype.controls.tl.offsetX = -1;\nfabric.Object.prototype.controls.tl.offsetY = -1;\nfabric.Object.prototype.controls.tr.offsetX = 1;\nfabric.Object.prototype.controls.tr.offsetY = -1;\nfabric.Object.prototype.controls.bl.offsetX = -1;\nfabric.Object.prototype.controls.bl.offsetY = 1;\nfabric.Object.prototype.controls.br.offsetX = 1;\nfabric.Object.prototype.controls.br.offsetY = 1;\n\nfabric.Textbox.prototype.controls.mtr = rotationControl();\nfabric.Textbox.prototype.controls.remove = removeControl();\nfabric.Textbox.prototype.controls.clone = cloneControl();\n\nfabric.Image.prototype.controls.mtr = rotationControl();\nfabric.Image.prototype.controls.remove = removeControl({offsetX: 0});\n\nfabric.Object.prototype.set({\n  cornerSize: 9,\n  borderColor: colors.tanzanite,\n  transparentCorners: false,\n  cornerStrokeColor: colors.tanzanite,\n  cornerColor: colors.white,\n});\n\nconst {_renderBackgroundOrOverlay} = fabric.StaticCanvas.prototype;\n\nfabric.StaticCanvas.prototype._renderBackgroundOrOverlay = function (ctx, property) {\n  if (property !== 'background') {\n    return _renderBackgroundOrOverlay.call(this, ctx, property);\n  }\n\n  if (this.backgroundImage) {\n    const {originalUrl, _originalElement} = this.backgroundImage;\n\n    ctx.canvas.style.backgroundImage = `url(${originalUrl || _originalElement.src})`;\n    ctx.canvas.style.backgroundSize = '100%';\n    ctx.canvas.style.backgroundRepeat = 'no-repeat';\n  }\n};\n\nexport default fabric;\n","import fabric from '~/common/canvas/fabric';\nimport {\n  DEFAULT_CARD_ZOOM,\n  DEFAULT_HEIGHT_DESKTOP,\n  DEFAULT_WIDTH_DESKTOP,\n} from '~/CreateFabricInvitation/routes/EventCreateDesign/constants';\n\nexport const useCanvas = (\n  canvasEl,\n  configJson,\n  callback,\n  defaultDesktopHeight = DEFAULT_HEIGHT_DESKTOP\n) => {\n  const canvasInstance = new fabric.Canvas(canvasEl, {\n    width: DEFAULT_WIDTH_DESKTOP,\n    height: defaultDesktopHeight,\n    includeDefaultValues: false,\n    preserveObjectStacking: true,\n    selection: !evite.detects.isMobile,\n    controlsAboveOverlay: true,\n  });\n\n  canvasInstance.setZoom(DEFAULT_CARD_ZOOM);\n\n  const loadCanvas = (jsonConfig) => {\n    const reviver = (json, obj) => {\n      obj._originalObject = JSON.parse(JSON.stringify(obj));\n      obj.selectable = obj.type === 'textbox';\n    };\n    canvasInstance.loadFromJSON(jsonConfig, () => callback(canvasInstance), reviver);\n  };\n\n  configJson && loadCanvas(configJson);\n\n  return canvasInstance;\n};\n","import {useEffect, useMemo, useState} from 'react';\nimport {useCanvas} from '~/common/canvas/hooks/useCanvas';\nimport {canvasRemoveTextBordersAndIcons} from '~/common/canvas/customs/text_border';\n\nexport const useCanvasImage = (fabricArt) => {\n  const [image, setImage] = useState();\n  const [loaded, setLoaded] = useState(!fabricArt);\n\n  const canvas = useMemo(\n    () =>\n      useCanvas(null, fabricArt, (canvasInstance) => {\n        canvasRemoveTextBordersAndIcons(canvasInstance);\n        setLoaded(true);\n        const snapshot = canvas.toDataURL({\n          enableRetinaScaling: true,\n        });\n        setImage(snapshot);\n      }),\n    [fabricArt]\n  );\n\n  useEffect(\n    () => () => {\n      canvas.setDimensions({width: 1, height: 1});\n      canvas.clear();\n      canvas.dispose();\n    },\n    []\n  );\n\n  return {image, loading: !loaded};\n};\n","import {fabric} from 'fabric';\nimport {silver, cloud} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function renderIcon({icon, fillStyle = silver, padding = 2}) {\n  const img = document.createElement('img');\n  img.src = icon;\n  return function renderIcon(ctx, left, top, styleOverride, fabricObject) {\n    const size = this.cornerSize;\n\n    ctx.save();\n    ctx.beginPath();\n    ctx.arc(left, top, size / 2 + padding, 0, 2 * Math.PI, false);\n    ctx.fillStyle = fillStyle;\n    ctx.fill();\n    ctx.strokeStyle = cloud;\n    ctx.lineWidth = 1;\n    ctx.stroke();\n    ctx.restore();\n\n    ctx.save();\n    ctx.translate(left, top);\n    ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle));\n    ctx.drawImage(img, -size / 2, -size / 2, size, size);\n    ctx.restore();\n  };\n}\n","import {Link} from '~/common/_pb_components/atoms/Link';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {VendorDisc} from '~/ViewInvitation/common/VendorDisc';\nimport {PB_ClickOutLine} from '~/common/svg/PB_ClickOutLine';\nimport {registryUrl} from '~/common/utils';\nimport {gift_registry_vendors} from '~/common/fabric/CreateDesign/registries';\nimport {getTargetURL} from '~/ViewInvitation/routes/Landing/GiftingModule';\n\nimport './Checklist.sass';\n\nexport function Checklist(props) {\n  const {isMobile} = evite.detects;\n\n  // TODO: Pull gifting out of here to make checklist reusable\n  let discList = window.gift_registry;\n  let buttonText = 'View Registry';\n  let headerText = props.headerText || window.checklistData.headerText || '';\n\n  if (!discList) {\n    const {name: vendor_name, icon_url} = gift_registry_vendors.find(({name}) => name === 'Target');\n    discList = [\n      window.defaultVendordisc,\n      {vendor_name, icon_url, url: getTargetURL(window.evite_event)},\n    ];\n    buttonText = 'Buy your gift now';\n    switch (evite_event.event_type) {\n      case 'birthday_forkids':\n      case 'birthday_forher':\n        headerText = 'Shop the perfect gift';\n        break;\n      case 'brunch_lunch':\n        headerText = 'Shop for your event';\n        break;\n      case 'halloween':\n      case 'halloween_kids':\n        buttonText = 'Find your costume';\n        headerText = `Find your costume for ${window.evite_event?.host_name}'s event`;\n        break;\n\n      case 'holiday_party':\n      case 'holidayforkids':\n      case 'christmas':\n      case 'hanukkah':\n        buttonText = 'Shop holiday gifts';\n        headerText = `Shop holiday gifts for ${window.evite_event?.host_name}'s event`;\n        break;\n\n      default:\n        headerText = `Browse the perfect gifts for ${window.evite_event?.host_name}'s event`;\n        break;\n    }\n  }\n\n  const dataQaId = props.dataQaId || window.checklistData.dataQaId || '';\n  const featuredUrl = registryUrl(discList[0], dataQaId);\n  const checklistItems = props.checklistItems || window.checklistData.checklistItems || '';\n\n  return (\n    <div className=\"frp-todo\">\n      <div>\n        <Typography\n          variant={`${props.isReskin ? 'label1' : 'paragraph1'}`}\n          size={`${props.isReskin ? 'large' : 'medium'}`}\n          classNames={`${props.isReskin ? 'checklist-heading' : 'frp-todo__heading font_12'}`}\n          data-qa-id=\"find-the-perfect-gift\"\n        >\n          {' '}\n          Find the Perfect Gift\n        </Typography>\n        <div className=\"frp-todo__items\">\n          <div className=\"frp-todo__item\">\n            <Link\n              href={featuredUrl}\n              target=\"_blank\"\n              className=\"frp-todo__item-top-panel\"\n              data-qa-id={`${dataQaId}-${window.gift_registry ? 'registry' : 'amazon'}`}\n            >\n              <div className=\"frp-todo__item-top-panel-text\">\n                <strong>{headerText}</strong>\n              </div>\n              <PB_ClickOutLine ratio={0.5} className=\"frp-todo__item-top-panel-clickout\" />\n            </Link>\n            {props.children && props.children}\n            {!props.children && (\n              <ul\n                className={`frp-todo__item-content ${\n                  discList.length <= 1 ? 'frp-single-item' : ''\n                }`}\n              >\n                {discList.map((disc, index) => {\n                  const dataQaId = window.gift_registry\n                    ? `button-registry_${index + 1}`\n                    : 'vendor-disc__gifting_link';\n\n                  return (\n                    <li className=\"registry-wrapper\" key={index}>\n                      <VendorDisc\n                        registry={disc}\n                        displayText={buttonText}\n                        dataQaId={dataQaId}\n                        ratio={isMobile ? 1 : 0.75}\n                      />\n                    </li>\n                  );\n                })}\n              </ul>\n            )}\n          </div>\n        </div>\n      </div>\n      <div>\n        <Typography\n          variant={`${props.isReskin ? 'label1' : 'paragraph1'}`}\n          size={`${props.isReskin ? 'large' : 'medium'}`}\n          classNames={`${props.isReskin ? 'checklist-heading' : 'frp-todo__heading font_12'}`}\n          data-qa-id=\"my-event-todos\"\n        >\n          {' '}\n          My event to-dos\n        </Typography>\n        <ul className=\"frp-todo__items\">\n          {checklistItems.map((item, i) => {\n            const {state, text} = item;\n            const classModifier = state === 'checked' ? '--completed' : '';\n\n            return (\n              <li className=\"frp-todo__item\" key={i}>\n                <div className={`frp-todo__item-top-panel${classModifier}`}>\n                  <div className=\"frp-todo__item-top-panel-text\">\n                    <strong>{text}</strong>\n                  </div>\n                </div>\n              </li>\n            );\n          })}\n        </ul>\n      </div>\n    </div>\n  );\n}\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst StyledDiv = styled.div`\n  display: flex;\n  justify-content: ${(props) => props.position || 'center'};\n`;\n\nexport function CircleLoader(props) {\n  const {position = 'center', size = 'small'} = props;\n  const src =\n    size === 'small'\n      ? '/assets/images/loading_circles_70px.gif'\n      : '/assets/images/loading_circles_140px.gif';\n  return (\n    <StyledDiv position={position}>\n      <img alt=\"loader\" src={src} />\n    </StyledDiv>\n  );\n}\n","export function Spinner(props) {\n  return <div style={{margin: props.center ? 'auto' : 0}} className=\"evt-spinner\" />;\n}\n","import FocusTrap from 'focus-trap-react';\nimport React, {Component} from 'react';\nimport {evite} from 'evite';\nimport './styles.sass';\n\nimport {MountComponentOnBody} from '../mount-component-on-body';\n\nlet _modalCount = 0;\n\n// A basic modal component that takes content as props.children\nexport class SimpleModal extends Component {\n  constructor(props) {\n    super(props);\n    this.props = props;\n    if (this.props.isOpen) _modalCount++;\n  }\n\n  componentDidMount() {\n    document.addEventListener('keyup', this.handleDocKeyUp, false);\n  }\n\n  componentWillUnmount() {\n    if (this.props.isOpen) _modalCount--;\n\n    // Remove 'modal-open' class from the body when the last modal is removed\n    if (_modalCount === 0) evite.removeClass(document.body, 'modal-open');\n    evite.removeClass(document.body, 'modal-open-hack');\n    document.removeEventListener('keyup', this.handleDocKeyUp, false);\n    // make sure the sticky header is notified in case of a page jump up due to the modal position hack on ios\n    document.dispatchEvent(new CustomEvent('scroll'));\n  }\n\n  componentDidUpdate(prevProps, prevState) {\n    if (this.props.isOpen) {\n      if (!prevProps.isOpen) {\n        document.addEventListener('keyup', this.handleDocKeyUp, false);\n        _modalCount++;\n      }\n    } else {\n      if (prevProps.isOpen) _modalCount--;\n      if (_modalCount === 0) {\n        evite.removeClass(document.body, 'modal-open');\n        evite.removeClass(document.body, 'modal-open-hack');\n      }\n    }\n  }\n\n  render() {\n    if (!this.props.isOpen) {\n      return null;\n    }\n    evite.addClass(document.body, 'modal-open');\n\n    let cssClass = 'simple-modal';\n    cssClass += this.props.modalClassName ? ` ${this.props.modalClassName}` : '';\n    cssClass += this.props.centered ? ' centered' : '';\n\n    const outerStyle = {};\n    const simpleStyle = {};\n    if (evite.detects.isMobile) {\n      if (this.props.centered) {\n        // this is part of a fix for ios Safari devices that have webkit bugs on input fields\n        // when this is finally fixed we can remove this and the absolute positioning in SimpleModal/styles.sass\n        //   https://hackernoon.com/how-to-fix-the-ios-11-input-element-in-fixed-modals-bug-aaf66c7ba3f8\n        // until then, switching from fixed to absolute messes up the positioning, with modals sometimes appearing\n        // offscreen when fixed would have positioned them in viewport.\n        outerStyle.marginTop = window.scrollY;\n        simpleStyle.position = 'absolute';\n        simpleStyle.height = 'auto';\n      } else if (this.props.wholePage) {\n        // this will scroll to the top of the page, but it fixes cursor issues for position:fixed modals\n        evite.addClass(document.body, 'modal-open-hack');\n        // position fixed breaks scrolling on android chrome\n        simpleStyle.position = 'relative';\n      }\n    }\n\n    return (\n      <MountComponentOnBody {...this.props} componentId={this.props.modalId || 'root-simple-modal'}>\n        <FocusTrap>\n          <div className={cssClass} onMouseDown={this.handleOutsideClick} style={simpleStyle}>\n            <div\n              className={`outer ${this.props.animateButton ? 'animate-bottom' : ''}`}\n              onMouseDown={this.handleOutsideClick}\n              style={outerStyle}\n            >\n              <div\n                className=\"inner\"\n                aria-labelledby=\"header-title\"\n                onClick={this.handleInsideClick}\n                ref={this.props.innerRef}\n                role=\"dialog\"\n                style={this.props.inlineInnerStyle}\n              >\n                {this.props.children}\n                {!this.props.hideCloseButton && (\n                  <button\n                    type=\"button\"\n                    tabIndex=\"0\"\n                    className=\"button-transparent close-modal\"\n                    onClick={this.props.onCloseClick}\n                    data-qa-id=\"simple-modal-close-button\"\n                  >\n                    &times;\n                  </button>\n                )}\n              </div>\n            </div>\n          </div>\n        </FocusTrap>\n      </MountComponentOnBody>\n    );\n  }\n\n  handleOutsideClick = (e) => {\n    /* This is a mouseDown event because of mentions. Clicking inside but\n       releasing *outside* of a contentEditable will result in the outside click\n       being fired. So things like click > drag to select text breaks since the\n       modal closes if the mouse is released outside the modal content.\n\n       To remedy, we use a mouseDown event and ensure that the target is the\n       outer element before triggering a close */\n    if (e.target.className === 'outer') {\n      this.props.onCloseClick(e);\n      e.stopPropagation();\n    }\n  };\n\n  handleInsideClick = (e) => {\n    e.stopPropagation();\n  };\n\n  handleDocKeyUp = (e) => {\n    if (e.keyCode === 27) {\n      // Close modal on esc keyup\n      this.props.onCloseClick(e);\n    }\n  };\n}\n","import React from 'react';\nimport urls from 'urls';\nimport './VideoProcessing.sass';\nimport {HighFiveIcon} from '~/common/svg/HighFiveIcon';\n\n// this component should  know when the event is not in VIDEOPROC state anymore and autorefresh the current url\n\nexport function VideoProcessing({isEvent = true, video_id}) {\n  const ajaxVideoState = async () => {\n    const url = urls.get('ajax_video_state', {video_id});\n    const response = await evite.fetch(url, {\n      method: 'GET',\n    });\n    if (response.ok) {\n      const json = await response.json();\n      return json;\n    }\n  };\n\n  const checkVideoState = async () => {\n    const response = await ajaxVideoState();\n    const {segments} = response;\n    let progressTimeout = null;\n    const video = segments.find((segment) => segment.event_context === 'invitation');\n    const {is_viewable} = video;\n    if (is_viewable) {\n      if (progressTimeout) {\n        clearInterval(progressTimeout);\n      }\n      window.location.reload();\n    } else {\n      progressTimeout = setTimeout(() => {\n        checkVideoState();\n      }, 5000);\n    }\n  };\n\n  checkVideoState();\n\n  return (\n    <div className=\"video-processing\">\n      <div className=\"icon\">\n        <HighFiveIcon ratio={2.6} />\n      </div>\n      <div className=\"voice\">\n        {isEvent\n          ? 'Your invitations are currently on the way!'\n          : 'Your card is currently on the way!'}\n      </div>\n      <div className=\"video-processing__description\">\n        {isEvent\n          ? 'Check back here to see your RSVPs as they come in.'\n          : 'Check back here to see when it has been viewed.'}\n      </div>\n    </div>\n  );\n}\n","import React, {Component} from 'react';\nimport {unmountComponentAtNode, render} from 'react-dom';\n\n// This is a 'portal' which allows us to place components on the root of the\n// body node.\n// To use it, wrap a component in a <MountComponentOnBody> with a componentId:\n// <MountComponentOnBody componentId=\"foo\"><ModalPopup /></MountComponentOnBody>\n\nfunction Provider(props) {\n  const {ProvidedProvider, store} = props;\n  return (\n    <ProvidedProvider store={store} {...props}>\n      {props.children}\n    </ProvidedProvider>\n  );\n}\n\nexport class MountComponentOnBody extends Component {\n  constructor(props) {\n    super(props);\n    this.store = props.store;\n    this.provider = props.ProvidedProvider;\n  }\n\n  render() {\n    return null;\n  }\n\n  portalElement = null;\n\n  componentDidMount() {\n    let p = this.props.componentId && document.getElementById(this.props.componentId);\n    if (!p) {\n      p = document.createElement('div');\n      p.id = this.props.componentId;\n      document.body.appendChild(p);\n    }\n    this.portalElement = p;\n    this.componentDidUpdate();\n  }\n\n  componentWillUnmount() {\n    unmountComponentAtNode(this.portalElement);\n  }\n\n  componentDidUpdate() {\n    render(\n      <Provider ProvidedProvider={this.provider} store={this.store} {...this.props}>\n        {this.props.children}\n      </Provider>,\n      this.portalElement\n    );\n  }\n}\n","// Should align with BE's core/events/constants.py so we maintain a complete list\n\nexport const ORIGIN_DICT = {\n  AG: 3, // American Greeting\n  CEC: 4, // Chuck E. Cheese\n  CMM: 5,\n  AOLMAIL: 6,\n  VISAFT: 7,\n  YMAIL: 8,\n  EVT: 10, // Old/original evite.com java site\n  NEO: 11, // Current core site\n  EVITE: 11, // Current core site\n  SPD: 11, // Failed evite rewrite 'spd' aka 'speed'\n  IOS: 12, // iPhone Core App\n  POSTMARK: 13, // Legacy premium\n  // Plans / Evite Me / Evite Go / New Mobile App\n  // NOTE none of these events should be loaded into the new system.\n  PLANS: 14,\n  ANDROID: 15, // Android\n  GENESIS: 16, // Rudy's new mobile web\n  IOS2: 17, // updated iPhone Core App\n  ANDROID2: 18, // updated iPhone Core App\n  GIFTING: 19, // Lars' Photo Gifting App\n  GREETINGCARD2: 20, // Greeting Card 2.0\n  FABRIC: 21, // Fabric Invitation\n  FABRICGREETINGCARD: 22, // Fabric Greeting Card\n};\n\n// please add any groupings below if these don't meet future needs\nexport const CARD_ORIGINS = [ORIGIN_DICT.FABRICGREETINGCARD, ORIGIN_DICT.GREETINGCARD2];\nexport const FABRIC_EVENT_ORIGINS = [ORIGIN_DICT.FABRIC];\nexport const FABRIC_GRC_ORIGINS = [ORIGIN_DICT.FABRICGREETINGCARD];\nexport const LEGACY_GRC_ORIGINS = [ORIGIN_DICT.GREETINGCARD2];\nexport const LEGACY_PREMIUM_ORIGINS = [ORIGIN_DICT.POSTMARK];\n","export const DEFAULT_CARD_ZOOM = 0.5;\nexport const DEFAULT_WIDTH_DESKTOP = 500;\nexport const DEFAULT_HEIGHT_DESKTOP = 680;\nexport const DEFAULT_WIDTH_MW = 265;\nexport const DEFAULT_HEIGHT_MW = 360;\nexport const DEFAULT_WIDTH_MINIFIED = 132;\nexport const DEFAULT_HEIGHT_MINIFIED = 180;\n\nexport const Sections = {\n  CARD_DESIGN: 'card_design',\n  ENVELOPE_LINER: 'enveloper_line',\n  STAMP: 'stamp',\n  BACKGROUND: 'background',\n};\n\nexport const menuMappingKeys = {\n  KEYBOARD: 'KEYBOARD',\n  FONT_STYLE: 'FONT_STYLE',\n  FONT_SIZE: 'FONT_SIZE',\n  TEXT_FORMAT: 'TEXT_FORMAT',\n  SPACING: 'SPACING',\n  COLOR: 'COLOR',\n  UYO: 'UYO',\n};\n\nexport const RECOMMENDED_FONTS = [\n  {\n    family: 'BrandonGrotesqueMedium',\n    image: '',\n    name: 'Brandon Grotesque Medium',\n    style: 'normal',\n    type: 'sans-serif',\n    url: '/assets/fonts/BrandonGrotesqueMedium.css',\n    weight: 'normal',\n  },\n  {\n    family: 'Vollkorn',\n    image: '',\n    name: 'Vollkorn Regular',\n    style: 'normal',\n    type: 'serif',\n    url: 'https://fonts.googleapis.com/css2?family=Vollkorn&display=swap',\n    weight: '400',\n  },\n  {\n    family: 'la-bohemienne',\n    image: '',\n    name: 'La Bohemienne',\n    style: 'normal',\n    type: 'script',\n    url: '',\n    weight: '400',\n  },\n];\n\nexport const desktopColors = [\n  '#101B21',\n  '#F5F3F2',\n  '#E092FF',\n  '#FF6348',\n  '#CA6E2E',\n  '#5352EB',\n  '#709FFF',\n  '#B9BCBF',\n  '#E1E3E6',\n  '#FFF5ED',\n  '#FFECE9',\n  '#F4E2D5',\n  '#EBEAFD',\n  '#E2ECFF',\n  '#B6AB94',\n  '#7E7458',\n  '#B1A68C',\n  '#EBD0BA',\n  '#943E1E',\n  '#F5C3A6',\n  '#BA9B74',\n];\n\nexport const mobileColors = [\n  '#101B21',\n  '#F5F3F2',\n  '#B71C1C',\n  '#4A148C',\n  '#1A237E',\n  '#004D40',\n  '#F57F17',\n  '#FDD835',\n  '#263238',\n  '#E91E63',\n  '#00BCD4',\n  '#5C6BC0',\n];\n","export const gift_registry_vendors = [\n  {\n    name: 'Amazon',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Amazon@2x.png',\n    sq_icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/81cfece92d5f4fe793d98fa25b99de9d.png?r=0.06251988008735476',\n    email_reg_button_url:\n      'https://g5.evitecdn.com/emails/project_beauty/registry_button-registry-amazon_2x.png',\n    domains: ['www.amazon.com', 'amazon.com', 'amzn.com'],\n  },\n  {\n    name: 'Target',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Target@2x.png',\n    sq_icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/17ce297f4075481bb63803e89a150acc.png?r=0.5258412927975611',\n    email_reg_button_url:\n      'https://g5.evitecdn.com/emails/project_beauty/registry_button-registry-target_2x.png',\n    domains: ['www.target.com', 'target.com', 'tgt.gifts'],\n  },\n  {\n    name: 'Walmart',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Walmart@2x.png',\n    sq_icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/074e295b2d5e4ef1b2aafde5eb533943.png?r=0.2282967197435306',\n    email_reg_button_url:\n      'https://g5.evitecdn.com/emails/project_beauty/registry_button-registry-walmart_2x.png',\n    domains: ['walmart.com'],\n  },\n  {\n    name: 'Bed Bath & Beyond',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Bed%20Bath%20&%20Beyond@2x.png',\n    sq_icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/5d0f30bc04b44c629965a14dc8bea344.png?r=0.8762399265160528',\n    email_reg_button_url:\n      'https://g5.evitecdn.com/emails/project_beauty/registry_button-registry-bbb_2x.png',\n    domains: ['bedbathandbeyond.com', 'www.bedbathandbeyond.com'],\n  },\n  {\n    name: 'The Knot',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/The%20Knot@2x.png',\n    sq_icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/79ffb1b5008347f888798c30326fd62a.png?r=0.35173140771958034',\n    email_reg_button_url:\n      'https://g5.evitecdn.com/emails/project_beauty/registry_button-registry-theknot_2x.png',\n    domains: ['theknot.com', 'www.theknot.com'],\n  },\n  {\n    name: 'The Bump',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/The%20Bump@2x.png',\n    domains: ['thebump.com', 'www.thebump.com'],\n  },\n  {\n    name: 'Crate & Barrel',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Crate%20&%20Barrel@2x.png',\n    domains: ['crateandbarrel.com', 'www.crateandbarrel.com'],\n  },\n  {\n    name: 'Zola',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Zola@2x.png',\n    sq_icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/a19aecfba95f46bfa03e08957d57d909.png?r=0.35014288841736185',\n    email_reg_button_url:\n      'https://g5.evitecdn.com/emails/project_beauty/registry_button-registry-zola_2x.png',\n    domains: ['zola.com', 'www.zola.com'],\n  },\n  {\n    name: 'Babylist',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Baby%20List@2x.png',\n    sq_icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/ed21fdd7c87d430985944ad4a88f9bc4.png?r=0.454778806334023',\n    email_reg_button_url:\n      'https://g5.evitecdn.com/emails/project_beauty/registry_button-registry-babylist_2x.png',\n    domains: ['babylist.com', 'www.babylist.com'],\n  },\n  {\n    name: 'Buy Buy Baby',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Buy%20Buy%20Baby@2x.png',\n    sq_icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/a1cd3708dbcf42139ec044be877035b7.png?r=0.49909382870195573',\n    email_reg_button_url:\n      'https://g5.evitecdn.com/emails/project_beauty/registry_button-registry-buybaby_2x.png',\n    domains: ['buybuybaby.com', 'www.buybuybaby.com'],\n  },\n  {\n    name: 'Pottery Barn',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Pottery%20Barn@2x.png',\n    domains: ['potterybarn.com', 'www.potterybarn.com'],\n  },\n  {\n    name: 'Pottery Barn Kids',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/PB%20Kids@2x.png',\n    domains: ['potterybarnkids.com', 'www.potterybarnkids.com'],\n  },\n  {\n    name: \"Bloomingdale's\",\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Bloomingdales@2x.png',\n    domains: ['bloomingdales.com', 'www.bloomingdales.com'],\n  },\n  {\n    name: \"Macy's\",\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/macys@2x.png',\n    domains: ['macys.com', 'www.macys.com'],\n  },\n  {\n    name: \"Kohl's\",\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Khols@2x.png',\n    domains: ['kohls.com', 'www.kohls.com'],\n  },\n  {\n    name: 'Williams Sonoma',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Williams%20Sonoma@2x.png',\n    domains: ['williams-sonoma.com', 'www.williams-sonoma.com'],\n  },\n  {\n    name: 'Restoration Hardware',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/RH@2x.png',\n    domains: ['restorationhardware.com', 'www.restorationhardware.com'],\n  },\n  {\n    name: 'Best Buy',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Best%20Buy@2x.png',\n    domains: ['bestbuy.com', 'www.bestbuy.com'],\n  },\n  {\n    name: 'Ikea',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/IKEA@2x.png',\n    domains: ['ikea.com', 'www.ikea.com', 'info.ikea-usa.com', 'ikea-usa.com'],\n  },\n  {\n    name: 'myregistry.com',\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/MyRegistry.com@2x.png',\n    sq_icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/54915ed248f346859c2b9d7f87178f30.png?r=0.9025306431922129',\n    email_reg_button_url:\n      'https://g5.evitecdn.com/emails/project_beauty/registry_button-registry-general_2x.png',\n    domains: ['myregistry.com', 'www.myregistry.com'],\n  },\n  {\n    name: \"Blueprint | David's Bridal\",\n    icon_url:\n      'https://g0.evitecdn.com/pages/__gift_registry_vendor_images/5941379294363648/Blueprint@2x.png',\n    domains: ['blueprintregistry.com', 'www.blueprintregistry.com'],\n  },\n];\n","import {useLocation} from 'react-router';\nimport {useAddGuestsCondition} from '~/common/fabric/EventGuests/components/DisplayCondition/hooks/useAddGuestsCondition';\nimport {isWebview} from './addGuestsCondition';\n\nexport const GuestPageDisplayCondition = ({\n  children,\n  preConditions,\n  original,\n  variant = 'variant',\n  ...props\n}) => {\n  const abTestPreCondition = useAddGuestsCondition(preConditions);\n\n  const {pathname} = useLocation();\n\n  const conditions = pathname.includes('guests')\n    ? preConditions.every(Boolean) && !isWebview()\n    : abTestPreCondition;\n\n  return conditions ? children : original;\n};\n","export const eventStepsType = {\n  PREMIUM: 'premium',\n  PREMIUM_ADD_GUESTS_AFTER: 'premium_add_guests_after',\n  FREEMIUM: 'freemium',\n  FREEMIUM_WITH_GUESTS: 'freemium_with_guests',\n  FREE: 'free',\n  FREE_WITH_GUESTS: 'free_with_guests',\n};\n\nexport const isWebview = () =>\n  !!(window?.webkit?.messageHandlers?.fabricCreateOnNav || window?.webview?.fabricCreateOnNav);\n\nexport const addGuestsPreCondition = (state, preConditions = []) => {\n  const conditions = [\n    !isWebview(),\n    !state.fabricTemplate?.premium || !state.guests?.guests?.count,\n    !state?.review?.shareableLinkPremiumUpsell,\n  ];\n\n  if ([...preConditions, ...conditions].every(Boolean)) {\n    if (!state.fabricTemplate?.premium) return true;\n    return (\n      evite.experiments.getOrSetVariation('addGuests-after-create-premium', 'control') ===\n      'variation'\n    );\n  }\n  return false;\n};\n\nexport const getEventStepsType = (state) => {\n  const hasGuests = state.guests?.guests?.count > 0;\n  const {pathname} = window.location;\n  const addGuestsPreConditionsMet = addGuestsPreCondition(state);\n  if (state.fabricTemplate?.premium && addGuestsPreConditionsMet) {\n    return eventStepsType.PREMIUM_ADD_GUESTS_AFTER;\n  }\n  if (!addGuestsPreCondition(state)) {\n    return eventStepsType.PREMIUM;\n  }\n  if (hasGuests || pathname.includes('guests')) {\n    return state.details.isPremium\n      ? eventStepsType.FREEMIUM_WITH_GUESTS\n      : eventStepsType.FREE_WITH_GUESTS;\n  }\n  return state.details.isPremium ? eventStepsType.FREEMIUM : eventStepsType.FREE;\n};\n","import {useStore} from 'react-redux';\nimport {addGuestsPreCondition} from '~/common/fabric/EventGuests/components/DisplayCondition/addGuestsCondition';\n\nexport const useAddGuestsCondition = (preConditions) => {\n  const store = useStore();\n\n  return addGuestsPreCondition(store.getState(), preConditions);\n};\n","export const INIT_APP = 'CreateFabric/*/Init';\nexport const SET_EVENT_TO_BACKEND_SNAPSHOT = 'CreateFabric/*/EventToBackendSnapshot';\n","export const SET_EVITE_EVENT = 'eviteEvent/set';\n\nexport const UPDATE_EVITE_EVENT = 'eviteEvent/update';\n","export const CREATE_EDIT_POLL = 'CreateInvitationWidget/*/CreateEditPoll';\nexport const CREATE_EDIT_WTB = 'CreateInvitationWidget/*/CreateEditWTB';\n","export * from './constants';\nexport * from './reducer';\n","import {CREATE_EDIT_POLL, CREATE_EDIT_WTB} from './constants';\nimport {INIT_APP} from '~/common/fabric/constants';\nimport {SET_EVITE_EVENT} from '~/common/fabric/reducers/eviteEvent/constants';\n\nconst initialState = [];\n\nexport function reducer(state = initialState, action = {}) {\n  switch (action.type) {\n    case CREATE_EDIT_POLL:\n      return {\n        ...state,\n        polls: [...action.payload.polls],\n      };\n    case CREATE_EDIT_WTB:\n      return {\n        ...state,\n        whatToBrings: [...action.payload.whatToBrings],\n      };\n    case SET_EVITE_EVENT:\n      return {\n        ...state,\n        widgets: {...action.payload.widgets},\n      };\n    case INIT_APP:\n      return {\n        ...state,\n        polls: [...action.payload.widgets.polls],\n        whatToBrings: [...action.payload.widgets.whatToBrings],\n      };\n    default:\n      return state;\n  }\n}\n","export const selectIsMealOptionsEventType = ({details}) => {\n  if (details?.type) {\n    const isMealOptionsOnViewInvitation = window.mealOptionsEventTypes?.[0].includes(details.type);\n    const isMealOptionsOnCreateFlow = window.mealOptionsEventTypes?.includes(details.type);\n    return isMealOptionsOnViewInvitation || isMealOptionsOnCreateFlow;\n  }\n  return false;\n};\n\nexport const selectHasPoll = ({widgets}) => Boolean(widgets?.polls?.length);\n\nexport const selectHasWtb = ({widgets}) => Boolean(widgets?.whatToBrings?.length);\n","const ALLOWED_VIDEO_FORMATS = ['mp4', 'webm'];\n\nexport const isAllowedVideoFormat = (src) =>\n  typeof src === 'string'\n    ? ALLOWED_VIDEO_FORMATS.includes(src.split('.').pop().toLowerCase())\n    : false;\n","export const DONE_SAVE_GIFT_KEYWORDS = 'DONE_SAVE_GIFT_KEYWORDS';\n\nexport const GIFT_KEYWORD_AMAZON_TAGS = {\n  birthday: 'bday',\n  birthday_forteens: 'bday_for_teens',\n  birthday_forher: 'bday_for_her',\n  birthday_forhim: 'bday_for_him',\n  birthday_milestones: 'bday_milestones',\n  birthday_save_the_date: 'bday_savethedate',\n  birthday_forkids: 'bday_for_kids',\n};\n\nexport const GIFT_KEYWORD_PLACEHOLDERS = [\n  'Lego',\n  'Soccer',\n  'Arts & Crafts',\n  'Books',\n  'Games & Puzzles',\n];\n","import update from 'immutability-helper';\nimport {hasWidget} from '../../view_invitation/utils';\nimport {DONE_SAVE_GIFT_KEYWORDS, GIFT_KEYWORD_PLACEHOLDERS} from './constants';\n\n// Prep the initial state\nconst initialState = {keywords: []};\nfunction setInitialState() {\n  if (window.evite_event) {\n    const {gift_keywords} = window.evite_event;\n    let len = 0;\n    if (gift_keywords) len = gift_keywords.length;\n    for (let i = 0; i < Math.max(GIFT_KEYWORD_PLACEHOLDERS.length, len); i++) {\n      initialState.keywords.push(i < len ? gift_keywords[i] : '');\n    }\n  }\n}\nsetInitialState();\n\nexport function reducer(state = initialState, action) {\n  switch (action.type) {\n    case DONE_SAVE_GIFT_KEYWORDS:\n      return update(state, {keywords: {$set: [...action.keywords]}});\n    default:\n      return state;\n  }\n}\n","import {GIFT_KEYWORD_AMAZON_TAGS, GIFT_KEYWORD_PLACEHOLDERS} from './constants';\n\nexport const hasGiftKeywords = (items) => {\n  if (!items) items = window.evite_event.gift_keywords;\n  if (!items) return false;\n  for (let i = 0; i < items.length; i++) {\n    if (items[i].keyword) {\n      if (items[i].keyword.length > 0) return true;\n    } else if (items[i].length > 0) return true;\n  }\n  return false;\n};\n\nexport function getGiftKeywordPlaceHolder(index) {\n  if (index >= 0 && index < GIFT_KEYWORD_PLACEHOLDERS.length)\n    return GIFT_KEYWORD_PLACEHOLDERS[index];\n  return '';\n}\n\n// Selector function to get the gift keywords\nexport const selectGiftKeywords = (state) => state.giftKeywords;\n\nexport function selectEvent(state) {\n  return state.eventDetails;\n}\n\n// Builds a url that leads to an amazon search for a keyword and has a tag\n// from the Gift Keywords experiment\nexport function getGiftKeywordAmazonSearchLink(keyword) {\n  return amazon_search_url_template.replace('XXXX', escape(keyword));\n}\n","import {evite} from 'evite';\nimport Appsignal from '@appsignal/javascript';\nimport {plugin} from '@appsignal/plugin-window-events';\n\nconst _pathDecorator = (span) => {\n  span.setTags({path: window.location.pathname});\n};\n\nexport const appsignal = new Appsignal({\n  key: window.app_signal_api_key,\n  revision: process.env.VERSION,\n});\nappsignal.use(plugin()); // should log all uncaught errors in AppSignal\nappsignal.addDecorator(_pathDecorator); // Pass page path to AppSignal\n\nexport const setFocusAccessibility = (function () {\n  document.body.addEventListener('mousedown', () => {\n    document.body.classList.add('using-mouse');\n  });\n  document.body.addEventListener('keydown', () => {\n    document.body.classList.remove('using-mouse');\n  });\n})();\n\nexport const makeDropdownsAccessible = (function () {\n  const buttons = document.querySelectorAll('.secondary-button .evt-dropdown');\n\n  // for keyboard focus, need to do more things\n  for (let i = 0; i < buttons.length; i++) {\n    buttons[i].addEventListener('click', handleDropdownFocus);\n    buttons[i].addEventListener('focusin', handleDropdownFocus);\n  }\n\n  const dropdowns = document.querySelectorAll('.dropdown-trigger');\n  for (let i = 0; i < dropdowns.length; i++) {\n    dropdowns[i].addEventListener('mouseenter', handleDropdownFocus);\n  }\n\n  const ddParent = document.querySelectorAll('.evt-dropdown');\n  for (let i = 0; i < ddParent.length; i++) {\n    ddParent[i].addEventListener('mouseleave', handleDropdownFocusOut);\n  }\n})();\n\nexport function findAncestor(element, className) {\n  while ((element = element.parentElement) && !element.classList.contains(className));\n  return element;\n}\n\n// TODO - Remove site-wide, use clickable .evite-menu instead\nexport function handleDropdownFocus(e) {\n  e.preventDefault();\n  e.stopPropagation();\n  const dropdownParent = findAncestor(e.target, 'evt-dropdown');\n\n  if (evite.hasClass(e.target.parentElement, 'evt-dropdown')) {\n    if (evite.hasClass(dropdownParent, 'open')) {\n      dropdownParent.classList.remove('open');\n      e.target.setAttribute('aria-expanded', 'false');\n    } else {\n      evite.removeClass(document.querySelectorAll('.open'), 'open');\n      dropdownParent.classList.add('open');\n      e.target.setAttribute('aria-expanded', 'true');\n    }\n  } else {\n    evite.removeClass(document.querySelectorAll('.open'), 'open');\n  }\n}\n\nexport function handleDropdownFocusOut(e) {\n  evite.removeClass(document.querySelectorAll('.open'), 'open');\n}\n","import {useState, useEffect} from 'react';\n\nconst getHeight = () =>\n  window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\n\nexport const useBrowserHeight = () => {\n  const [height, setHeight] = useState(getHeight());\n\n  useEffect(() => {\n    let timeoutId = null;\n    const resizeListener = () => {\n      clearTimeout(timeoutId);\n      timeoutId = setTimeout(() => setHeight(getHeight()), 150);\n    };\n\n    window.addEventListener('resize', resizeListener);\n\n    return () => {\n      window.removeEventListener('resize', resizeListener);\n    };\n  }, []);\n\n  return height;\n};\n","import {useState, useEffect} from 'react';\n\nconst getWidth = () =>\n  window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n\nexport const useBrowserWidth = () => {\n  const [width, setWidth] = useState(getWidth());\n\n  useEffect(() => {\n    let timeoutId = null;\n    const resizeListener = () => {\n      clearTimeout(timeoutId);\n      timeoutId = setTimeout(() => setWidth(getWidth()), 150);\n    };\n\n    window.addEventListener('resize', resizeListener);\n\n    return () => {\n      window.removeEventListener('resize', resizeListener);\n    };\n  }, []);\n\n  return width;\n};\n","import {useState, useEffect} from 'react';\n// https://usehooks.com/useOnScreen/\n\nexport function useImpression(ref, id) {\n  const [isIntersecting, setIntersecting] = useState(false);\n  const [hasFired, setHasFired] = useState(false);\n\n  useEffect(() => {\n    const observer = new IntersectionObserver(([entry]) => setIntersecting(entry.isIntersecting), {\n      root: null,\n      rootMargin: '0px',\n      threshold: 0.5,\n    });\n\n    if (ref.current) {\n      observer.observe(ref.current);\n    }\n    return () => {\n      observer.disconnect();\n    };\n  }, []);\n\n  if (!hasFired && isIntersecting) {\n    window.dataLayer.push({event: id});\n    setHasFired(true);\n  }\n\n  return isIntersecting;\n}\n","import {useCallback, useEffect, useState} from 'react';\n\nexport const useMatchQuery = (query, listeners = []) => {\n  const windowSizeQuery = window.matchMedia(query);\n  const [matches, setMatches] = useState(windowSizeQuery.matches);\n\n  const handleWindowResize = useCallback((windowSizeQuery) => {\n    setMatches(windowSizeQuery.matches);\n  }, []);\n\n  listeners.push(handleWindowResize);\n\n  // support older browser versions\n  windowSizeQuery.addEventListener ||= (_, action) => windowSizeQuery.addListener(action);\n  windowSizeQuery.removeEventListener ||= (_, action) => windowSizeQuery.removeListener(action);\n\n  useEffect(() => {\n    listeners.forEach((listener) => {\n      listener(windowSizeQuery);\n      windowSizeQuery.addEventListener('change', listener);\n    });\n    return () =>\n      listeners.forEach((listener) => windowSizeQuery.removeEventListener('change', listener));\n  }, []);\n\n  return {windowSizeQuery, matches};\n};\n","import {useRef, useEffect} from 'react';\n\nexport const usePrevious = (value) => {\n  const ref = useRef();\n  useEffect(() => {\n    ref.current = value;\n  });\n  return ref.current;\n};\n","__webpack_public_path__ = process.env.ASSET_PATH;\n","// TODO - See if this file is needed.\nconst BOX_MODELS = ['margin', 'border', 'padding'];\nconst CONTENT_INDEX = -1;\nconst PADDING_INDEX = 2;\nconst BORDER_INDEX = 1;\nconst MARGIN_INDEX = 0;\n\nconst cssShow = {\n  position: 'absolute',\n  visibility: 'hidden',\n  display: 'block',\n};\n\nfunction getClientPosition(elem) {\n  let box;\n  let x;\n  let y;\n  const doc = elem.ownerDocument;\n  const {body} = doc;\n  const docElem = doc && doc.documentElement;\n  box = elem.getBoundingClientRect();\n\n  x = box.left;\n  y = box.top;\n\n  x -= docElem.clientLeft || body.clientLeft || 0;\n  y -= docElem.clientTop || body.clientTop || 0;\n\n  return {\n    left: x,\n    top: y,\n  };\n}\n\nfunction getScroll(w, top) {\n  let ret = w[`page${top ? 'Y' : 'X'}Offset`];\n  const method = `scroll${top ? 'Top' : 'Left'}`;\n  if (typeof ret !== 'number') {\n    const d = w.document;\n    // ie6,7,8 standard mode\n    ret = d.documentElement[method];\n    if (typeof ret !== 'number') {\n      // quirks mode\n      ret = d.body[method];\n    }\n  }\n  return ret;\n}\n\nfunction getScrollLeft(w) {\n  return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n  return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n  if (!el) return;\n  const pos = getClientPosition(el);\n  const doc = el.ownerDocument;\n  const w = doc.defaultView || doc.parentWindow;\n  pos.left += getScrollLeft(w);\n  pos.top += getScrollTop(w);\n  return pos;\n}\n\nfunction getComputedStyle(elem, name, computedStyle_) {\n  let val = '';\n  const d = elem.ownerDocument;\n  const computedStyle = computedStyle_ || d.defaultView.getComputedStyle(elem, null);\n\n  if (computedStyle) {\n    val = computedStyle.getPropertyValue(name) || computedStyle[name];\n  }\n\n  return val;\n}\n\nfunction isBorderBoxFn(elem) {\n  return getComputedStyle(elem, 'boxSizing') === 'border-box';\n}\n\nfunction swap(elem, options, callback) {\n  const old = {};\n  const {style} = elem;\n  let name;\n\n  // Remember the old values, and insert the new ones\n  for (name in options) {\n    if (options.hasOwnProperty(name)) {\n      old[name] = style[name];\n      style[name] = options[name];\n    }\n  }\n\n  callback.call(elem);\n\n  // Revert the old values\n  for (name in options) {\n    if (options.hasOwnProperty(name)) {\n      style[name] = old[name];\n    }\n  }\n}\n\nfunction getPBMWidth(elem, props, which) {\n  let value = 0;\n  for (let j = 0; j < props.length; j++) {\n    const prop = props[j];\n    if (prop) {\n      for (let i = 0; i < which.length; i++) {\n        let cssProp;\n        if (prop === 'border') {\n          cssProp = `${prop + which[i]}Width`;\n        } else {\n          cssProp = prop + which[i];\n        }\n        value += parseFloat(getComputedStyle(elem, cssProp)) || 0;\n      }\n    }\n  }\n  return value;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n  return obj != null && obj == obj.window;\n}\n\nconst domUtils = {};\n\n['Width', 'Height'].forEach((name) => {\n  domUtils[`doc${name}`] = (refWin) => {\n    const d = refWin.document;\n    return Math.max(\n      d.documentElement[`scroll${name}`],\n      d.body[`scroll${name}`],\n      domUtils[`viewport${name}`](d)\n    );\n  };\n\n  domUtils[`viewport${name}`] = (win) => {\n    const prop = `client${name}`;\n    const doc = win.document;\n    const {body} = doc;\n    const {documentElement} = doc;\n    const documentElementProp = documentElement[prop];\n    return (\n      (doc.compatMode === 'CSS1Compat' && documentElementProp) ||\n      (body && body[prop]) ||\n      documentElementProp\n    );\n  };\n});\n\nfunction getWH(elem, name, extra) {\n  if (isWindow(elem)) {\n    return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n  }\n  if (elem.nodeType === 9) {\n    return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n  }\n  const which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n  let borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;\n  const computedStyle = getComputedStyle(elem);\n  const isBorderBox = isBorderBoxFn(elem, computedStyle);\n  let cssBoxValue = 0;\n  if (borderBoxValue === null || borderBoxValue <= 0) {\n    borderBoxValue = undefined;\n    cssBoxValue = getComputedStyle(elem, name);\n    if (cssBoxValue === null || Number(cssBoxValue) < 0) {\n      cssBoxValue = elem.style[name] || 0;\n    }\n    cssBoxValue = parseFloat(cssBoxValue) || 0;\n  }\n  if (extra === undefined) {\n    extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n  }\n  const borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n  const val = borderBoxValue || cssBoxValue;\n  if (extra === CONTENT_INDEX) {\n    if (borderBoxValueOrIsBorderBox) {\n      return val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle);\n    }\n    return cssBoxValue;\n  }\n  if (borderBoxValueOrIsBorderBox) {\n    const padding =\n      extra === PADDING_INDEX\n        ? -getPBMWidth(elem, ['border'], which, computedStyle)\n        : getPBMWidth(elem, ['margin'], which, computedStyle);\n    return val + (extra === BORDER_INDEX ? 0 : padding);\n  }\n  return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle);\n}\n\nfunction getWHIgnoreDisplay(elem) {\n  let val;\n  const args = arguments;\n  if (elem.offsetWidth !== 0) {\n    val = getWH.apply(undefined, args);\n  } else {\n    swap(elem, cssShow, () => {\n      val = getWH.apply(undefined, args);\n    });\n  }\n  return val;\n}\n\nfunction css(el, name, v) {\n  let value = v;\n  if (typeof name === 'object') {\n    for (const i in name) {\n      if (name.hasOwnProperty(i)) {\n        css(el, i, name[i]);\n      }\n    }\n    return undefined;\n  }\n  if (typeof value !== 'undefined') {\n    if (typeof value === 'number') {\n      value += 'px';\n    }\n    el.style[name] = value;\n    return undefined;\n  }\n  return getComputedStyle(el, name);\n}\n\n['width', 'height'].forEach((name) => {\n  const first = name.charAt(0).toUpperCase() + name.slice(1);\n  domUtils[`outer${first}`] = (el, includeMargin) =>\n    el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n  const which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n  domUtils[name] = (elem, val) => {\n    if (val !== undefined) {\n      if (elem) {\n        const computedStyle = getComputedStyle(elem);\n        const isBorderBox = isBorderBoxFn(elem);\n        if (isBorderBox) {\n          val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);\n        }\n        return css(elem, name, val);\n      }\n      return undefined;\n    }\n    return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n  };\n});\n\nfunction setOffset(elem, offset) {\n  if (css(elem, 'position') === 'static') {\n    elem.style.position = 'relative';\n  }\n\n  const old = getOffset(elem);\n  const ret = {};\n  let current;\n  let key;\n\n  for (key in offset) {\n    if (offset.hasOwnProperty(key)) {\n      current = parseFloat(css(elem, key)) || 0;\n      ret[key] = current + offset[key] - old[key];\n    }\n  }\n  css(elem, ret);\n}\n\nfunction getWindow(node) {\n  const doc = node.ownerDocument || node;\n  return doc.defaultView || doc.parentWindow;\n}\n\nfunction offset(el, value) {\n  if (typeof value !== 'undefined') {\n    setOffset(el, value);\n  } else {\n    return getOffset(el);\n  }\n}\n\nfunction scrollLeft(w, v) {\n  if (isWindow(w)) {\n    if (v === undefined) {\n      return getScrollLeft(w);\n    }\n    window.scrollTo(v, getScrollTop(w));\n  } else {\n    if (v === undefined) {\n      return w.scrollLeft;\n    }\n    w.scrollLeft = v;\n  }\n}\n\nfunction scrollTop(w, v) {\n  if (isWindow(w)) {\n    if (v === undefined) {\n      return getScrollTop(w);\n    }\n    window.scrollTo(getScrollLeft(w), v);\n  } else {\n    if (v === undefined) {\n      return w.scrollTop;\n    }\n    w.scrollTop = v;\n  }\n}\n\nexport const util = {\n  css,\n  offset,\n  getWindow,\n  isWindow,\n  scrollLeft,\n  scrollTop,\n  ...domUtils,\n};\n\nexport function scrollIntoView(elem, container, config) {\n  config = config || {};\n  if (container.nodeType === 9) {\n    container = util.getWindow(container);\n  }\n\n  let {allowHorizontalScroll} = config;\n  const {onlyScrollIfNeeded} = config;\n  let {alignWithTop} = config;\n  let {alignWithLeft} = config;\n  const offsetTop = config.offsetTop || 0;\n  const offsetLeft = config.offsetLeft || 0;\n  const offsetBottom = config.offsetBottom || 0;\n  const offsetRight = config.offsetRight || 0;\n\n  allowHorizontalScroll = allowHorizontalScroll === undefined ? true : allowHorizontalScroll;\n\n  const isWin = util.isWindow(container);\n  const elemOffset = util.offset(elem);\n  if (!elemOffset) return;\n  const eh = util.outerHeight(elem);\n  const ew = util.outerWidth(elem);\n  let containerOffset;\n  let ch;\n  let cw;\n  let containerScroll;\n  let diffTop;\n  let diffBottom;\n  let win;\n  let winScroll;\n  let ww;\n  let wh;\n  if (isWin) {\n    win = container;\n    wh = util.height(win);\n    ww = util.width(win);\n    winScroll = {\n      left: util.scrollLeft(win),\n      top: util.scrollTop(win),\n    };\n    diffTop = {\n      left: elemOffset.left - winScroll.left - offsetLeft,\n      top: elemOffset.top - winScroll.top - offsetTop,\n    };\n    diffBottom = {\n      left: elemOffset.left + ew - (winScroll.left + ww) + offsetRight,\n      top: elemOffset.top + eh - (winScroll.top + wh) + offsetBottom,\n    };\n    containerScroll = winScroll;\n  } else {\n    containerOffset = util.offset(container);\n    ch = container.clientHeight;\n    cw = container.clientWidth;\n    containerScroll = {\n      left: container.scrollLeft,\n      top: container.scrollTop,\n    };\n    diffTop = {\n      left:\n        elemOffset.left -\n        (containerOffset.left + (parseFloat(util.css(container, 'borderLeftWidth')) || 0)) -\n        offsetLeft,\n      top:\n        elemOffset.top -\n        (containerOffset.top + (parseFloat(util.css(container, 'borderTopWidth')) || 0)) -\n        offsetTop,\n    };\n    diffBottom = {\n      left:\n        elemOffset.left +\n        ew -\n        (containerOffset.left + cw + (parseFloat(util.css(container, 'borderRightWidth')) || 0)) +\n        offsetRight,\n      top:\n        elemOffset.top +\n        eh -\n        (containerOffset.top + ch + (parseFloat(util.css(container, 'borderBottomWidth')) || 0)) +\n        offsetBottom,\n    };\n  }\n\n  if (diffTop.top < 0 || diffBottom.top > 0) {\n    if (alignWithTop === true) {\n      util.scrollTop(container, containerScroll.top + diffTop.top);\n    } else if (alignWithTop === false) {\n      util.scrollTop(container, containerScroll.top + diffBottom.top);\n    } else if (diffTop.top < 0) {\n      util.scrollTop(container, containerScroll.top + diffTop.top);\n    } else {\n      util.scrollTop(container, containerScroll.top + diffBottom.top);\n    }\n  } else if (!onlyScrollIfNeeded) {\n    alignWithTop = alignWithTop === undefined ? true : !!alignWithTop;\n    if (alignWithTop) {\n      util.scrollTop(container, containerScroll.top + diffTop.top);\n    } else {\n      util.scrollTop(container, containerScroll.top + diffBottom.top);\n    }\n  }\n\n  if (allowHorizontalScroll) {\n    if (diffTop.left < 0 || diffBottom.left > 0) {\n      if (alignWithLeft === true) {\n        util.scrollLeft(container, containerScroll.left + diffTop.left);\n      } else if (alignWithLeft === false) {\n        util.scrollLeft(container, containerScroll.left + diffBottom.left);\n      } else if (diffTop.left < 0) {\n        util.scrollLeft(container, containerScroll.left + diffTop.left);\n      } else {\n        util.scrollLeft(container, containerScroll.left + diffBottom.left);\n      }\n    } else if (!onlyScrollIfNeeded) {\n      alignWithLeft = alignWithLeft === undefined ? true : !!alignWithLeft;\n      if (alignWithLeft) {\n        util.scrollLeft(container, containerScroll.left + diffTop.left);\n      } else {\n        util.scrollLeft(container, containerScroll.left + diffBottom.left);\n      }\n    }\n  }\n}\n\nexport function smoothScroll(elem, offset = 0, time) {\n  const pos = elem.offsetTop - offset;\n\n  if (isNaN(pos)) {\n    throw 'Position must be a number';\n  }\n  if (pos < 0) {\n    throw 'Position can not be negative';\n  }\n  const currentPos = window.scrollY || window.screenTop;\n  if (currentPos < pos) {\n    if (time) {\n      var x;\n      var i = currentPos;\n      x = setInterval(() => {\n        window.scrollTo(0, i);\n        i += 10;\n        if (i >= pos) {\n          clearInterval(x);\n        }\n      }, time);\n    } else {\n      let t = 10;\n      for (let i = currentPos; i <= pos; i += 10) {\n        t += 10;\n        setTimeout(() => {\n          window.scrollTo(0, i);\n        }, t / 2);\n      }\n    }\n  } else {\n    time = time || 2;\n    var i = currentPos;\n    var x;\n    x = setInterval(() => {\n      window.scrollTo(0, i);\n      if (i <= pos) {\n        clearInterval(x);\n      }\n      i -= 10;\n    }, time);\n  }\n}\n","import urls from 'urls';\n\nconst GCS_PATH_IDS = {\n  anonymous_image: 'anonymous_image',\n  event_video: 'event_video',\n  event_custom_logo: 'event_custom_logo',\n  video_preview_image: 'preview_image',\n  user_profile_photo: 'user_profile_photo',\n  event_photo_insert: 'event_photo_insert',\n  event_custom_image: 'event_custom_image',\n  premium_custom_stamp: 'premium_custom_stamp',\n  feed_photos: 'feed_photos',\n};\n\n/*\nAPI by GCS_PATH_ID:\nanonymous_image: Anonymous Image. Used to temporarily hold a UYO/DYO image during no-login event create flow, Step 1.\nevent_custom_logo: Event custom logo image\n\tevent_id: event ID\npremium_custom_stamp: Premium Event Custom Stamp Image\n\tevent_id: event ID\nevent_photo_insert: Event photo-insert image\n\tevent_id: event ID\n\timage_id: Required. Send an EMPTY STRING for new upload, or a valid id to replace.\nevent_custom_image: Event Custom (UYO/DYO) image\n\tevent_id: event ID\nevent_video: Video invitation segment\n\tvideo_id: Video invitation ID\n\tevent_context: event context name\n\tinput_name: video input name (must match the name of an input defined by the pipeline referenced by ths video template\nevent_video_with_render: Video invitation segment, with render-video as a post-upload action\n\tvideo_id: Video invitation ID\n\tevent_context: event context name\n\tinput_name: video input name (must match the name of an input defined by the pipeline referenced by ths video template\nfeed_photos: Upload a photo related to a post in the feed for one event\n\tevent_id: event ID\n\tphoto_id: PhotoDS ID referenced within the post\nuser_profile_photo: Upload a user-profile photo\n\tuser_id: user ID\npreview_image: Preview image for one video segment\n\tvideo_id: Video invitation ID\n\tevent_context: event context name\nvideo_template_asset: Video Template Asset\n\tvideo_template_id: video template ID\n\tevent_context: event context name\n\tinput_name: video input name (must match the name of an input defined by the pipeline referenced by ths video template\n */\n\nfunction getImageKeyFromPath(gcsPath) {\n  if (gcsPath) {\n    // The last part of the path.\n    const m = gcsPath.match(/\\w+$/);\n    return m ? m[0] : null;\n  }\n}\n\n/**\n * Upload an image to GCS.\n * Wraps the request and upload parts of the upload process.\n *\n * @param gcsPathId like 'event_custom_logo', 'premium_custom_stamp', etc.\n * @param params obj should match the gcsPathId (see 'API by GPS_PATH_ID')\n * @param image, must be a Blob\n * @param redirect true for automatic 'finishing' of images\n * @returns {Promise<{gcsPath: *, url: *}>}\n */\nasync function gcsUploadImage({\n  gcsPathId,\n  params = {},\n  image,\n  redirect = true,\n  forceImageKey = null,\n}) {\n  const body = {\n    redirect,\n    mimetype: image.type ? image.type : 'image/jpeg',\n  };\n\n  console.log('Making uploadRequest with:', {gcsPathId, params, image});\n  const uploadRequest = await request_access(gcsPathId, params, body);\n  console.log('Got upload uploadRequest:', uploadRequest);\n\n  if (uploadRequest instanceof Error) {\n    console.log('FAILED TO GET VALID uploadRequest.');\n    throw uploadRequest;\n  }\n  await upload_file_gcs(uploadRequest, image);\n\n  // const eventId = params ? params.event_id : '';\n  // const imageKey = gcsPath.includes('anonymous')\n  //   ? getImageKeyFromPath(gcsPath)\n  //   : eventId;\n\n  const gcsPath = uploadRequest.gcs_path;\n  const imageKey =\n    gcsPathId == GCS_PATH_IDS.anonymous_image || gcsPathId == GCS_PATH_IDS.event_photo_insert\n      ? getImageKeyFromPath(gcsPath)\n      : forceImageKey;\n\n  const results = {\n    url: uploadRequest.access_url,\n    gcsPath,\n    imageKey,\n  };\n  console.log('Returning gcs upload results:', results);\n  return results;\n}\n\n/**\n * The first step of the upload process, returns an uploadRequest object.\n * @param gcsPathId\n * @param params obj should match the gcsPathId (see 'API by GPS_PATH_ID')\n * @param body obj containing the image and its mime type\n * @returns {Promise<Error|*>}\n */\nconst request_access = async (gcsPathId, params, body) => {\n  // Path validation\n  if (Object.values(GCS_PATH_IDS).includes(gcsPathId)) {\n    const url = urls.get('ajax_upload_request', {\n      upload_path: gcsPathId,\n      ...params, // we add any extra needed param\n    });\n\n    // console.log('Upload access request: ', {url, body});\n    const response = await evite.fetch(url, {\n      method: 'POST',\n      body: JSON.stringify(body),\n    });\n    if (!response.ok) {\n      const {status, statusText} = response;\n      return new Error(`ACCESS REQUEST FAILURE: ${status}, ${statusText}`);\n    }\n    const json = await response.json();\n    return json;\n  }\n  return new Error('path does not exist');\n};\n\n/**\n * Sends the cropped canvas image to be resized and uploaded to gcs in the backend\n * @param gcsPathId like 'event_custom_logo', 'premium_custom_stamp', etc.\n * @param params obj should match the gcsPathId (see 'API by GPS_PATH_ID')\n * @param image the cropped canvas image in base64\n * @param imageType the image mimetype\n * @param width the desired width of the resized image\n * @param height the desired height of the resized image\n * @param redirect true for automatic 'finishing' of images\n * @param forceImageKey the custom image id if from an existing event, otherwise null\n * @returns {Promise<Error|*>}\n */\nconst resizeImageAndUploadToGcs = async ({\n  gcsPathId,\n  params = {},\n  image,\n  imageType,\n  width,\n  height,\n  redirect = true,\n  forceImageKey = null,\n}) => {\n  if (!Object.values(GCS_PATH_IDS).includes(gcsPathId)) {\n    return new Error('path does not exist');\n  }\n  const url = urls.get('ajax_resize_upload_image', {\n    upload_path: gcsPathId,\n    ...params, // we add any extra needed param\n  });\n\n  const dimensions = {width, height};\n  // Fill in the form data to be sent in the ajax call\n  const form_data = new FormData();\n  form_data.append('image', image);\n  form_data.append('dimensions', JSON.stringify(dimensions));\n  form_data.append('redirect', redirect);\n  form_data.append('mimetype', imageType);\n  form_data.append('upload_path', gcsPathId);\n  form_data.append('force_image_key', forceImageKey);\n  const response = await evite.fetch(url, {\n    method: 'POST',\n    body: form_data,\n  });\n  if (!response.ok) {\n    const {status, statusText} = response;\n    return new Error(`RESIZE AND UPLOAD IMAGE FAILURE: ${status}, ${statusText}`);\n  }\n  const results = await response.json();\n  return results;\n};\n\n/**\n * Upload image file with uploadRequest object.\n * @param uploadRequest\n * @param file\n * @param onProgress\n * @param customXHR\n * @returns {Promise<*>}\n */\nconst upload_file_gcs = async (uploadRequest, file, onProgress, customXHR) => {\n  const data = new FormData();\n  const xhr = customXHR || new XMLHttpRequest();\n  const {upload_url, upload_form} = uploadRequest;\n  for (const [key, value] of Object.entries(upload_form)) {\n    data.append(key, value);\n  }\n  data.append('file', file, file.name);\n  return new Promise((resolve, reject) => {\n    xhr.open('POST', upload_url);\n    if (onProgress && xhr.upload) {\n      try {\n        if (evite.detects.isIE || evite.detects.isEdge) {\n          xhr.onprogress = onProgress;\n        } else {\n          xhr.upload.onprogress = onProgress;\n        }\n      } catch (e) {\n        console.error(e);\n      }\n    }\n    xhr.addEventListener('error', (e) => {\n      reject(e);\n    });\n    xhr.addEventListener('load', (res) => {\n      const {\n        target: {status},\n      } = res;\n      if (status == 200 || status == 201 || status == 204) {\n        resolve(true);\n      } else {\n        console.error('error uploading file, status: ', status);\n        reject('error uploading file, status: ', status);\n      }\n    });\n    xhr.send(data);\n  });\n};\n\n// we normally don't use it, because we normally send redirect=true on the request_access, and this will call it for us\nconst upload_gcs_finish = async (gcs_path) => {\n  const url = urls.get('ajax_upload_finish') + gcs_path;\n  const response = await evite.fetch(url, {\n    method: 'POST',\n  });\n  if (response.ok) {\n    return true;\n  }\n  return new Error('error while calling ajax_upload_finish');\n};\n\nexport {\n  GCS_PATH_IDS,\n  getImageKeyFromPath,\n  request_access,\n  upload_file_gcs,\n  upload_gcs_finish,\n  gcsUploadImage,\n  resizeImageAndUploadToGcs,\n};\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function Apple(props) {\n  const {className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M15.4987 9.62942C14.3307 9.62942 12.5227 8.30142 10.6187 8.34942C8.10666 8.38142 5.80266 9.80542 4.50666 12.0614C1.89866 16.5894 3.83466 23.2774 6.37866 26.9574C7.62666 28.7494 9.09866 30.7654 11.0507 30.7014C12.9227 30.6214 13.6267 29.4854 15.8987 29.4854C18.1547 29.4854 18.7947 30.7014 20.7787 30.6534C22.7947 30.6214 24.0747 28.8294 25.3067 27.0214C26.7307 24.9414 27.3227 22.9254 27.3547 22.8134C27.3067 22.7974 23.4347 21.3094 23.3867 16.8294C23.3547 13.0854 26.4427 11.2934 26.5867 11.2134C24.8267 8.63742 22.1227 8.34942 21.1787 8.28542C18.7147 8.09342 16.6507 9.62942 15.4987 9.62942ZM19.6587 5.85342C20.6987 4.60542 21.3867 2.86142 21.1947 1.13342C19.7067 1.19742 17.9147 2.12542 16.8427 3.37342C15.8827 4.47742 15.0507 6.25342 15.2747 7.94942C16.9227 8.07742 18.6187 7.10142 19.6587 5.85342Z\"\n        fill={charcoal}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {eviteBlue} from '~sass/reinvention_styleguide/base/_exports.sass';\n\nexport function ArrowIconReinvention(props) {\n  const {direction, color = eviteBlue, className = '', ratio = 1, dataId} = props;\n\n  // default dimensions\n  const width = 14;\n  const height = 24;\n\n  // Use ratio to calculate width and height\n  const style = {\n    height: `${ratio * height}px`,\n    width: `${ratio * width}px`,\n  };\n\n  let classNames = className;\n\n  // apparently up & down are reversed?\n  switch (direction) {\n    case 'up':\n      style.transform = 'rotate(90deg)';\n      classNames += ' arrow-down';\n      break;\n    case 'down':\n      style.transform = 'rotate(-90deg)';\n      classNames += ' arrow-up';\n      break;\n    case 'left':\n      style.transform = 'rotate(180deg)';\n      classNames += ' arrow-right';\n      break;\n    default:\n      break;\n  }\n\n  return (\n    <svg\n      data-header-id={dataId}\n      className={classNames}\n      viewBox={`0 0 ${width} ${height}`}\n      style={style}\n      fill={color}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M109.7,68.285a1.553,1.553,0,0,1,2.255-2.137L122.4,76.475a1.651,1.651,0,0,1,0,2.255L111.959,89.176c-1.424,1.424-3.68-.831-2.255-2.255l9.258-9.258Z\"\n        transform=\"translate(-109.25 -65.63)\"\n      />\n    </svg>\n  );\n}\n","import React from 'react';\n\nconst css = `\n  .prefix__a,.prefix__l{fill:#ff6997}\n  prefix__b{fill:#b9bcc0}\n  .prefix__c{fill:#e1e3e6}\n  .prefix__e,.prefix__j,.prefix__k{strokeLinecap:round}\n  .prefix__j{strokeLinejoin:round}\n  .prefix__e,.prefix__h,.prefix__k{strokeMiterlimit:10}\n  .prefix__e,.prefix__h,.prefix__j,.prefix__k{strokeWidth:2px;fill:none}\n  .prefix__e{stroke:#fff}\n  .prefix__j{stroke:#5428a8}\n  .prefix__h,.prefix__k{stroke:#ff6997}\n  .prefix__l{stroke:transparent}\n`;\n\nexport function AskAHostIcon(props) {\n  const {color = '#91959c', className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 77;\n  const height = 77;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg xmlns=\"http://www.w3.org/2000/svg\" width={width} height={height}>\n      <defs>\n        <style>{css}</style>\n      </defs>\n      <g transform=\"translate(2761.31 -4685.52)\">\n        <path\n          className=\"prefix__a\"\n          d=\"M-2743.783 4721.904a.619.619 0 0 1-.568-.66v-.529c0-2.826 1.977-5.127 4.408-5.127h20.189a.668.668 0 0 1 0 1.321h-20.189a3.574 3.574 0 0 0-3.269 3.806v.532a.619.619 0 0 1-.571.657z\"\n        />\n        <path\n          className=\"prefix__b\"\n          d=\"m-2750.91 4696.22-2.649 4.588h5.3zM-2686.179 4702.003a2.442 2.442 0 0 0-.261 2.086c.045.166.1.32.14.458.193.567.221.739.078.959s-.31.263-.908.318c-.14.014-.306.031-.475.056a2.415 2.415 0 0 0-2.061 3.175c.046.166.1.321.14.458.193.567.222.739.08.956s-.31.262-.906.317c-.14.014-.306.031-.476.056a2.432 2.432 0 0 0-1.8 1.088.916.916 0 1 0 1.536 1c.14-.219.311-.263.907-.317a2.524 2.524 0 0 0 2.393-3.688c-.193-.567-.222-.739-.08-.958s.311-.262.908-.318a2.525 2.525 0 0 0 2.395-3.689c-.193-.567-.222-.74-.08-.959a.916.916 0 0 0-1.536-1z\"\n        />\n        <path\n          className=\"prefix__c\"\n          d=\"m-2691.162 4754.014-.81-.81-1.493 1.493-1.492-1.493-.809.81-.81.809 1.493 1.494-1.493 1.493.81.81.809.809 1.494-1.493 1.493 1.493.81-.809.808-.81-1.493-1.493 1.493-1.494zM-2756.91 4717.896h-2.289v2.111h-2.111v2.29h2.111v2.111h2.289v-2.111h2.111v-2.29h-2.111zM-2699.859 4685.52l-1.494 1.493-1.491-1.493-1.618 1.618 1.493 1.493-1.493 1.493 1.618 1.62 1.493-1.493 1.494 1.493 1.618-1.62-1.493-1.493 1.493-1.493z\"\n        />\n        <path\n          className=\"prefix__b\"\n          d=\"M-2690.354 4729.534a1.815 1.815 0 1 0 1.815 1.815 1.815 1.815 0 0 0-1.815-1.815zM-2704.352 4696.664a3.267 3.267 0 1 0 3.267 3.267 3.267 3.267 0 0 0-3.267-3.267zm0 4.7a1.435 1.435 0 1 1 1.435-1.435 1.435 1.435 0 0 1-1.435 1.438z\"\n        />\n        <path\n          strokeWidth=\"2\"\n          strokeMiterlimit=\"10\"\n          strokeLinejoin=\"round\"\n          strokeLinecap=\"round\"\n          stroke=\"#0143c8\"\n          fill=\"#f0c8da\"\n          d=\"M-2734.187 4707.549h19.576v27.207h-19.576z\"\n        />\n        <path\n          className=\"prefix__e\"\n          d=\"m-2727.404 4707.66-6.636 6.636M-2718.565 4707.65l-15.539 15.539M-2714.684 4713.346l-19.503 19.051M-2714.078 4722.055l-12.248 12.321\"\n        />\n        <rect\n          width=\"23.225\"\n          height=\"5.088\"\n          rx=\"1\"\n          transform=\"translate(-2735.957 4702.462)\"\n          stroke=\"#5428a8\"\n          strokeWidth=\"2\"\n          strokeMiterlimit=\"10\"\n          strokeLinejoin=\"round\"\n          strokeLinecap=\"round\"\n          fill=\"#f0c8da\"\n        />\n        <path\n          stroke=\"#5428a8\"\n          fill=\"none\"\n          strokeWidth=\"2\"\n          strokeMiterlimit=\"10\"\n          strokeLinejoin=\"round\"\n          strokeLinecap=\"round\"\n          d=\"M-2734.187 4707.549h19.576v27.207h-19.576z\"\n        />\n        <path\n          className=\"prefix__h\"\n          d=\"M-2724.397 4702.317a7.845 7.845 0 0 0 0-2.1 4.569 4.569 0 0 0-.5-1.792 2.994 2.994 0 0 0-1.583-1.483 2.639 2.639 0 0 0-2.339.289 2.492 2.492 0 0 0-1 1.77 2.8 2.8 0 0 0 1 2.1 4.232 4.232 0 0 0 1.991 1.106 5.335 5.335 0 0 0 2.431.11z\"\n        />\n        <path\n          className=\"prefix__h\"\n          d=\"M-2724.259 4702.266a7.936 7.936 0 0 1 0-2.1 4.579 4.579 0 0 1 .5-1.791 2.99 2.99 0 0 1 1.583-1.484 2.637 2.637 0 0 1 2.338.289 2.485 2.485 0 0 1 1 1.77 2.8 2.8 0 0 1-1 2.1 4.227 4.227 0 0 1-1.991 1.106 5.335 5.335 0 0 1-2.43.11z\"\n        />\n        <path\n          className=\"prefix__c\"\n          d=\"M-2751.529 4747.404a3.269 3.269 0 1 0 3.267 3.268 3.269 3.269 0 0 0-3.267-3.268zm0 4.7a1.437 1.437 0 1 1 1.435-1.437 1.437 1.437 0 0 1-1.435 1.441z\"\n        />\n        <g transform=\"translate(-2720.179 4720.33)\">\n          <rect\n            width=\"21.939\"\n            height=\"18.142\"\n            rx=\"4\"\n            fill=\"#fff\"\n            stroke=\"#5428a8\"\n            strokeWidth=\"2\"\n            strokeLinejoin=\"round\"\n            strokeLinecap=\"round\"\n          />\n          <path className=\"prefix__j\" d=\"M0 9.071h21.939M10.969 18.142V0\" />\n        </g>\n        <path\n          className=\"prefix__h\"\n          d=\"M-2709.33 4719.959a49.322 49.322 0 0 0-.316-2.109 7.336 7.336 0 0 0-.633-2.426 3.131 3.131 0 0 0-1.688-1.582 2.76 2.76 0 0 0-2.531.422 2.9 2.9 0 0 0-.633 3.8c.5.738 1.292.959 2.848 1.371a18.345 18.345 0 0 0 2.953.524z\"\n        />\n        <path className=\"prefix__k\" d=\"m-2709.288 4719.959-.633 1.371s-1.477 2.848-3.164 2.32\" />\n        <path\n          className=\"prefix__h\"\n          d=\"M-2709.102 4719.998c.066-.52.167-1.246.316-2.109a7.372 7.372 0 0 1 .633-2.426 3.132 3.132 0 0 1 1.688-1.582 2.761 2.761 0 0 1 2.532.422 2.9 2.9 0 0 1 .633 3.8c-.5.738-1.292.96-2.848 1.371a18.338 18.338 0 0 1-2.953.527z\"\n        />\n        <path className=\"prefix__k\" d=\"m-2709.143 4719.992.633 1.371s1.477 2.848 3.164 2.32\" />\n        <path\n          className=\"prefix__l\"\n          d=\"M-2721.295 4755.036a.659.659 0 0 1-.572-.331l-4.68-8.106h-12.677a5.133 5.133 0 0 1-5.127-5.131v-1.021a.66.66 0 0 1 1.321 0v1.021a3.81 3.81 0 0 0 3.806 3.806h13.059a.658.658 0 0 1 .571.331l4.3 7.446 4.3-7.446a.658.658 0 0 1 .571-.331h13.059a3.81 3.81 0 0 0 3.803-3.806.66.66 0 0 1 1.321 0 5.133 5.133 0 0 1-5.127 5.127h-12.677l-4.68 8.106a.659.659 0 0 1-.571.335z\"\n        />\n        <path\n          className=\"prefix__a\"\n          d=\"M-2743.691 4733.164a.66.66 0 0 1-.66-.659v-3.314a.66.66 0 0 1 1.321 0v3.314a.66.66 0 0 1-.661.659z\"\n        />\n        <path\n          className=\"prefix__l\"\n          d=\"M-2724.063 4746.599h-2.1a.66.66 0 0 1 0-1.321h2.1a.66.66 0 0 1 0 1.321zM-2716.425 4746.599h-2.1a.66.66 0 0 1 0-1.321h2.1a.66.66 0 0 1 0 1.321z\"\n        />\n      </g>\n    </svg>\n  );\n}\n","import React from 'react';\nimport {eviteBlue} from '~sass/reinvention_styleguide/base/_exports.sass';\n\nexport function CalendarReinvention(props) {\n  const {color = eviteBlue, ratio = 1, className} = props;\n\n  // default dimensions\n  const width = 28.66;\n  const height = 27.734;\n\n  // Use ratio to calculate width and height\n  const style = {\n    height: `${ratio * height}px`,\n    width: `${ratio * width}px`,\n    pointerEvents: `none`,\n  };\n\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox={`0 0 ${width} ${height}`}\n      style={style}\n      className={className}\n    >\n      <path\n        fill={color}\n        d=\"M267.628,163.536v-.124H256.809a.747.747,0,0,1-.742-.745V149.993h16.653a.919.919,0,0,0,0-1.838H256.067V145.19a.746.746,0,0,1,.739-.746h2.047v.469a2.309,2.309,0,0,0,2.306,2.306h.463a2.309,2.309,0,0,0,2.306-2.306v-.237h6.485v.237a2.309,2.309,0,0,0,2.306,2.306h.462a2.309,2.309,0,0,0,2.306-2.306v-.469h2.045a.747.747,0,0,1,.741.745v2.965h-2.317a.919.919,0,1,0,0,1.838h2.317v3.6a.919.919,0,1,0,1.838,0v-8.4a2.59,2.59,0,0,0-2.577-2.584h-2.047V142.6a2.309,2.309,0,0,0-2.307-2.306h-.462a2.309,2.309,0,0,0-2.307,2.306v.237h-6.486V142.6a2.309,2.309,0,0,0-2.306-2.306h-.463a2.309,2.309,0,0,0-2.306,2.306v.005H256.8a2.589,2.589,0,0,0-2.576,2.584V162.67a2.589,2.589,0,0,0,2.577,2.584h10.366a.92.92,0,0,0,.456-1.718ZM262.091,142.6v2.312a.468.468,0,0,1-.468.468h-.464a.469.469,0,0,1-.468-.467l0-2.313a.468.468,0,0,1,.468-.468h.463A.468.468,0,0,1,262.091,142.6Zm11.559,2.312a.468.468,0,0,1-.468.468h-.462a.468.468,0,0,1-.468-.468V142.6a.468.468,0,0,1,.468-.468h.462a.468.468,0,0,1,.468.468Z\"\n        transform=\"translate(-254.229 -140.294)\"\n      />\n      <path\n        fill={color}\n        d=\"M325.941,201.027a6.931,6.931,0,1,0,6.931,6.931A6.938,6.938,0,0,0,325.941,201.027Zm0,12.023a5.092,5.092,0,1,1,5.092-5.092A5.1,5.1,0,0,1,325.941,213.05Z\"\n        transform=\"translate(-304.211 -187.154)\"\n      />\n      <path\n        fill={color}\n        d=\"M340.748,219.534h-1.393v-1.392a.919.919,0,1,0-1.839,0v1.393h-1.393a.919.919,0,1,0,0,1.838h1.393v1.392a.92.92,0,0,0,.918.92h0a.921.921,0,0,0,.919-.92v-1.393h1.393a.919.919,0,0,0,0-1.838Z\"\n        transform=\"translate(-316.708 -199.649)\"\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {eviteBlue} from '~sass/reinvention_styleguide/base/_exports.sass';\n\nexport function CameraAddIcon(props) {\n  const {color = eviteBlue, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 29.891;\n  const height = 22.125;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox={`0 0 ${width} ${height}`}\n      style={style}\n      className={className}\n    >\n      <g transform=\"translate(0.25 0.25)\">\n        <path\n          style={{\n            stroke: color,\n            strokeWidth: 0.5,\n            fillRule: 'evenodd',\n            fill: color,\n          }}\n          d=\"M4.531,1.587a.8.8,0,1,0,0,1.6h3.2a.8.8,0,0,0,0-1.6Zm-1.6,3.2a2.411,2.411,0,0,0-2.4,2.4V20.812a2.414,2.414,0,0,0,2.4,2.4h19.2a.807.807,0,1,0,0-1.6H2.93a.782.782,0,0,1-.8-.8V7.186a.779.779,0,0,1,.8-.8h19.2a.786.786,0,0,1,.8.8l.014,3.994a.8.8,0,1,0,1.6,0l-.014-3.994a2.411,2.411,0,0,0-2.4-2.4Zm9.777,3.686a5.6,5.6,0,1,0,5.6,5.6A5.615,5.615,0,0,0,12.707,8.474ZM4.529,7.987a.8.8,0,1,0,.8.8.8.8,0,0,0-.8-.8Zm8.178,2.087a4,4,0,1,1-4,4A3.99,3.99,0,0,1,12.707,10.075Z\"\n          transform=\"translate(-0.529 -1.587)\"\n        />\n        <path\n          style={{\n            fill: color,\n            stroke: color,\n            strokeWidth: 0.75,\n          }}\n          d=\"M42.251,35.874H39.475V33.118a.563.563,0,1,0-1.127,0v2.756H35.618a.563.563,0,0,0,0,1.127h2.756v2.756a.563.563,0,1,0,1.127,0V36.995h2.756a.563.563,0,1,0,0-1.127Z\"\n          transform=\"translate(-13.555 -20.936)\"\n        />\n      </g>\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function CrownIcon(props) {\n  const {color = charcoal, className = '', ratio = 1, direction = 'right'} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 28;\n\n  // Use ratio to calculate width and height\n  const style = {\n    height: `${ratio * height}px`,\n    width: `${ratio * width}px`,\n  };\n\n  return (\n    <svg\n      viewBox=\"0 0 16 14\"\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M1.98611 4.34056L2.71137 9.24273H13.3042L14.0253 4.26903L11.1201 6.78083L7.99696 2.76611L4.74576 6.76753L1.98611 4.34056ZM10.3349 3.06221L10.2701 3.11793L10.3873 3.12958L11.3579 4.37633L12.5531 3.34333L12.6696 3.35497L12.618 3.28677L14.625 1.5518C14.7532 1.44111 14.9123 1.37224 15.0808 1.35442C15.2493 1.3366 15.4192 1.37067 15.5679 1.45208C15.7165 1.53348 15.8367 1.65834 15.9124 1.80994C15.9881 1.96153 16.0157 2.13264 15.9915 2.30035L14.7439 10.9062H1.27582L0.00910656 2.33944C-0.0160553 2.1708 0.0112231 1.9985 0.0872471 1.84587C0.163271 1.69325 0.284367 1.56768 0.434133 1.48617C0.5839 1.40466 0.755099 1.37115 0.924544 1.39018C1.09399 1.40921 1.25349 1.47986 1.38145 1.59255L3.29524 3.27679L3.25365 3.32669L3.34431 3.32004L4.54532 4.37633L5.55336 3.13457L5.64402 3.12708L5.59412 3.08383L7.36652 0.905553C7.44547 0.808499 7.5453 0.730508 7.65857 0.677387C7.77185 0.624266 7.89564 0.597384 8.02075 0.598743C8.14585 0.600102 8.26904 0.629667 8.38113 0.685236C8.49322 0.740805 8.59133 0.820946 8.66816 0.919692L10.3349 3.06221ZM1.34069 11.7379H14.6482V12.5696C14.6482 12.7902 14.5606 13.0018 14.4046 13.1577C14.2487 13.3137 14.0371 13.4013 13.8165 13.4013H2.17241C1.95183 13.4013 1.74028 13.3137 1.5843 13.1577C1.42832 13.0018 1.34069 12.7902 1.34069 12.5696V11.7379Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {roseWebText} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function Diamond(props) {\n  const {color = roseWebText, className = '', ratio = 1, dataId} = props;\n\n  // default dimensions\n  const width = 14;\n  const height = 14;\n\n  const style = {\n    height: `${ratio * height}px`,\n    width: `${ratio * width}px`,\n  };\n\n  return (\n    <svg\n      data-header-id={dataId}\n      className={className}\n      viewBox={`0 0 ${width} ${height}`}\n      style={style}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M3.06266 0.750001C2.98148 0.750004 2.9019 0.772594 2.83283 0.815244C2.76375 0.857894 2.70791 0.918922 2.67154 0.991501L0.921538 4.4915C0.883692 4.56686 0.86843 4.65155 0.877588 4.73537C0.886747 4.8192 0.919937 4.89859 0.973163 4.964L6.66066 11.964C6.70169 12.0145 6.75344 12.0552 6.81217 12.0831C6.8709 12.1111 6.93512 12.1256 7.00016 12.1256C7.0652 12.1256 7.12942 12.1111 7.18815 12.0831C7.24688 12.0552 7.29864 12.0145 7.33966 11.964L13.0272 4.964C13.0805 4.89868 13.1139 4.81933 13.1232 4.7355C13.1325 4.65167 13.1174 4.56694 13.0797 4.4915L11.3297 0.991501C11.2932 0.918789 11.2372 0.857673 11.168 0.815014C11.0988 0.772355 11.019 0.749841 10.9377 0.750001H3.06266ZM2.02054 4.25L3.33304 1.625H5.12679L4.47054 4.25H2.02054ZM2.23141 5.125H4.49154L5.90291 9.6435L2.23141 5.125ZM5.40766 5.125H8.59266L7.00016 10.2201L5.40766 5.125ZM9.50966 5.125H11.7689L8.09741 9.6435L9.50966 5.125ZM11.9798 4.25H9.52979L8.87354 1.625H10.6673L11.9798 4.25ZM8.62766 4.25H5.37266L6.02891 1.625H7.97141L8.62766 4.25Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function Google(props) {\n  const {className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M28 16.482C28 23.441 23.2344 28.3934 16.1967 28.3934C9.44918 28.3934 4 22.9443 4 16.1967C4 9.44918 9.44918 4 16.1967 4C19.482 4 22.2459 5.20492 24.3754 7.1918L21.0557 10.3836C16.7131 6.19344 8.63771 9.34098 8.63771 16.1967C8.63771 20.4508 12.0361 23.8984 16.1967 23.8984C21.0262 23.8984 22.8361 20.4361 23.1213 18.641H16.1967V14.4459H27.8082C27.9213 15.0705 28 15.6705 28 16.482Z\"\n        fill={charcoal}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {gray4} from '~sass/reinvention_styleguide/base/_exports.sass';\n\nexport function HighFiveIcon(props) {\n  const {color = gray4, className = '', ratio = 1} = props;\n  // default dimensions\n  const width = 24;\n  const height = 25;\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n  const pathStyle = {\n    stroke: 'none',\n    fillRule: 'nonzero',\n    fill: color,\n    fillOpacity: 1,\n  };\n\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox={`0 0 ${width} ${height}`}\n      style={style}\n      className={className}\n    >\n      <path\n        style={pathStyle}\n        d=\"M 23.820312 12.59375 C 23.351562 12.007812 22.523438 11.875 21.644531 12.21875 C 21.425781 12.300781 21.09375 12.433594 20.707031 12.59375 L 22.304688 8.347656 C 22.4375 7.980469 22.417969 7.578125 22.246094 7.226562 C 22.078125 6.875 21.773438 6.605469 21.394531 6.476562 C 21.121094 6.375 20.820312 6.367188 20.542969 6.449219 L 20.734375 5.917969 C 20.867188 5.550781 20.847656 5.148438 20.679688 4.792969 C 20.511719 4.445312 20.203125 4.171875 19.824219 4.046875 C 19.058594 3.785156 18.214844 4.164062 17.925781 4.902344 C 17.746094 4.675781 17.507812 4.5 17.238281 4.390625 C 16.453125 4.136719 15.601562 4.527344 15.308594 5.277344 L 15.03125 6.023438 C 14.859375 5.800781 14.621094 5.632812 14.34375 5.542969 C 13.554688 5.285156 12.695312 5.691406 12.414062 6.453125 L 11.535156 8.859375 L 11.121094 7.84375 C 10.980469 7.472656 10.691406 7.175781 10.324219 7.015625 C 9.976562 6.859375 9.578125 6.851562 9.222656 6.988281 C 8.957031 7.09375 8.726562 7.273438 8.558594 7.496094 L 8.257812 6.777344 C 8.117188 6.40625 7.828125 6.109375 7.457031 5.949219 C 7.109375 5.792969 6.710938 5.78125 6.355469 5.921875 C 6.09375 6.027344 5.863281 6.207031 5.695312 6.429688 C 5.535156 6.085938 5.25 5.8125 4.898438 5.65625 C 4.550781 5.5 4.152344 5.492188 3.796875 5.628906 C 3.039062 5.941406 2.671875 6.78125 2.96875 7.527344 L 3.191406 8.058594 C 2.917969 7.996094 2.628906 8.015625 2.367188 8.113281 C 1.609375 8.425781 1.242188 9.261719 1.535156 10.003906 L 3.492188 14.8125 L 2.308594 14.117188 C 1.996094 13.902344 1.613281 13.808594 1.234375 13.851562 C 0.839844 13.90625 0.488281 14.121094 0.269531 14.4375 C -0.1875 15.09375 -0.0429688 15.980469 0.597656 16.46875 C 0.847656 16.707031 4.042969 19.164062 5.199219 19.96875 C 6.0625 20.554688 7.089844 20.875 8.144531 20.875 C 8.863281 20.871094 9.574219 20.738281 10.238281 20.476562 C 11.3125 20.058594 12.21875 19.320312 12.828125 18.367188 C 13.160156 18.578125 13.523438 18.75 13.902344 18.875 C 14.53125 19.089844 15.191406 19.195312 15.855469 19.195312 C 17.007812 19.199219 18.128906 18.84375 19.050781 18.179688 C 20.210938 17.351562 23.378906 14.785156 23.570312 14.621094 C 24.203125 14.121094 24.3125 13.222656 23.820312 12.59375 Z M 9.964844 19.859375 C 8.515625 20.453125 6.855469 20.292969 5.558594 19.429688 C 4.429688 18.632812 1.125 16.066406 1.097656 16.039062 C 0.738281 15.761719 0.652344 15.265625 0.902344 14.890625 C 1.023438 14.714844 1.214844 14.601562 1.429688 14.570312 C 1.632812 14.542969 1.835938 14.589844 2.007812 14.703125 C 2.015625 14.703125 2.019531 14.707031 2.027344 14.710938 C 2.03125 14.714844 2.035156 14.722656 2.035156 14.730469 L 4.097656 15.929688 C 4.21875 16.007812 4.378906 15.996094 4.484375 15.902344 C 4.59375 15.808594 4.625 15.660156 4.566406 15.53125 L 2.222656 9.816406 C 2.050781 9.410156 2.246094 8.945312 2.664062 8.773438 C 2.84375 8.71875 3.042969 8.726562 3.214844 8.800781 C 3.414062 8.890625 3.578125 9.042969 3.683594 9.226562 L 4.921875 12.328125 C 4.972656 12.449219 5.089844 12.53125 5.226562 12.539062 C 5.265625 12.542969 5.304688 12.535156 5.335938 12.515625 C 5.503906 12.441406 5.585938 12.257812 5.53125 12.085938 L 4.316406 9.09375 L 4.316406 9.070312 C 4.316406 9.042969 4.289062 9.015625 4.289062 8.988281 L 3.628906 7.332031 C 3.453125 6.925781 3.652344 6.460938 4.070312 6.289062 C 4.261719 6.210938 4.480469 6.210938 4.675781 6.289062 C 4.878906 6.378906 5.039062 6.542969 5.117188 6.746094 L 5.554688 7.867188 L 6.988281 11.472656 C 7.039062 11.59375 7.15625 11.675781 7.292969 11.6875 C 7.332031 11.691406 7.371094 11.679688 7.402344 11.660156 C 7.570312 11.585938 7.652344 11.402344 7.59375 11.230469 L 6.21875 7.734375 L 6.191406 7.652344 C 6.015625 7.246094 6.210938 6.78125 6.628906 6.613281 C 6.824219 6.53125 7.042969 6.53125 7.238281 6.613281 C 7.441406 6.699219 7.601562 6.863281 7.679688 7.066406 L 8.421875 8.882812 C 8.421875 8.910156 8.421875 8.910156 8.449219 8.933594 L 9.441406 11.472656 C 9.511719 11.640625 9.707031 11.71875 9.878906 11.652344 C 10.050781 11.589844 10.140625 11.402344 10.074219 11.230469 L 9.054688 8.695312 C 8.882812 8.289062 9.078125 7.824219 9.496094 7.652344 C 9.691406 7.574219 9.910156 7.574219 10.101562 7.652344 C 10.304688 7.742188 10.464844 7.90625 10.542969 8.109375 L 12.746094 13.664062 C 13.6875 16.117188 12.457031 18.851562 9.964844 19.859375 Z M 23.128906 14.117188 C 23.101562 14.144531 19.769531 16.816406 18.640625 17.644531 C 17.339844 18.554688 15.65625 18.777344 14.152344 18.230469 C 13.8125 18.117188 13.488281 17.964844 13.1875 17.777344 C 13.21875 17.71875 13.246094 17.65625 13.269531 17.589844 C 13.851562 16.277344 13.898438 14.796875 13.40625 13.449219 L 11.945312 9.816406 L 13.078125 6.691406 C 13.230469 6.277344 13.691406 6.050781 14.125 6.183594 C 14.320312 6.261719 14.488281 6.402344 14.59375 6.582031 C 14.683594 6.777344 14.695312 6.996094 14.621094 7.195312 L 13.628906 9.921875 C 13.578125 10.089844 13.660156 10.269531 13.820312 10.347656 C 13.847656 10.347656 13.902344 10.375 13.933594 10.375 C 14.078125 10.375 14.207031 10.289062 14.261719 10.160156 L 15.253906 7.4375 C 15.253906 7.414062 15.253906 7.414062 15.28125 7.386719 L 15.96875 5.542969 C 16.121094 5.128906 16.582031 4.90625 17.015625 5.035156 C 17.210938 5.113281 17.378906 5.253906 17.484375 5.433594 C 17.574219 5.636719 17.585938 5.867188 17.511719 6.078125 L 17.484375 6.15625 L 16.105469 10.03125 C 16.054688 10.207031 16.148438 10.394531 16.328125 10.457031 C 16.355469 10.457031 16.410156 10.484375 16.4375 10.484375 C 16.582031 10.484375 16.710938 10.398438 16.769531 10.269531 L 18.199219 6.316406 L 18.613281 5.195312 C 18.765625 4.78125 19.226562 4.554688 19.660156 4.6875 C 19.855469 4.765625 20.023438 4.90625 20.128906 5.085938 C 20.21875 5.28125 20.230469 5.5 20.15625 5.699219 L 19.550781 7.304688 C 19.523438 7.355469 19.523438 7.382812 19.496094 7.4375 C 19.496094 7.464844 19.496094 7.488281 19.46875 7.488281 L 18.226562 10.804688 C 18.175781 10.972656 18.257812 11.152344 18.421875 11.230469 C 18.449219 11.230469 18.503906 11.257812 18.53125 11.257812 C 18.675781 11.257812 18.804688 11.171875 18.863281 11.042969 L 20.15625 7.570312 C 20.335938 7.199219 20.765625 7.007812 21.175781 7.117188 C 21.371094 7.199219 21.535156 7.339844 21.644531 7.519531 C 21.734375 7.710938 21.746094 7.929688 21.671875 8.132812 L 19.851562 12.914062 C 19.550781 13.019531 19.273438 13.128906 19.136719 13.179688 C 17.402344 12.539062 16.464844 13.289062 15.695312 13.875 C 15.546875 13.984375 15.523438 14.1875 15.636719 14.328125 C 15.75 14.46875 15.960938 14.496094 16.105469 14.382812 C 16.847656 13.796875 17.539062 13.234375 19 13.824219 C 19.078125 13.851562 19.164062 13.851562 19.246094 13.824219 C 19.328125 13.796875 21.230469 13.074219 21.890625 12.808594 C 22.25 12.675781 22.910156 12.488281 23.269531 12.96875 C 23.410156 13.136719 23.472656 13.355469 23.449219 13.570312 C 23.421875 13.785156 23.308594 13.984375 23.128906 14.117188 Z M 23.128906 14.117188 \"\n      />\n      <path\n        style={pathStyle}\n        d=\"M 4.34375 3.378906 L 6.054688 4.449219 C 6.113281 4.480469 6.179688 4.5 6.246094 4.5 C 6.363281 4.503906 6.46875 4.441406 6.523438 4.339844 C 6.574219 4.265625 6.589844 4.175781 6.570312 4.089844 C 6.546875 4.003906 6.492188 3.929688 6.410156 3.886719 L 4.703125 2.816406 C 4.542969 2.722656 4.335938 2.769531 4.234375 2.925781 C 4.136719 3.078125 4.1875 3.285156 4.34375 3.378906 Z M 4.34375 3.378906 \"\n      />\n      <path\n        style={pathStyle}\n        d=\"M 8.367188 3.113281 C 8.417969 3.246094 8.550781 3.332031 8.699219 3.328125 C 8.734375 3.332031 8.773438 3.320312 8.808594 3.300781 C 8.984375 3.234375 9.082031 3.050781 9.027344 2.871094 L 8.089844 0.226562 C 8.03125 0.0507812 7.832031 -0.0429688 7.648438 0.015625 C 7.46875 0.0742188 7.367188 0.265625 7.429688 0.441406 Z M 8.367188 3.113281 \"\n      />\n      <path\n        style={pathStyle}\n        d=\"M 11.34375 2.871094 C 11.375 2.894531 11.414062 2.902344 11.453125 2.898438 C 11.59375 2.90625 11.71875 2.816406 11.753906 2.683594 L 12.445312 0.839844 C 12.503906 0.675781 12.414062 0.492188 12.246094 0.425781 C 12.074219 0.363281 11.882812 0.441406 11.808594 0.601562 L 11.121094 2.445312 C 11.070312 2.621094 11.164062 2.808594 11.34375 2.871094 Z M 11.34375 2.871094 \"\n      />\n      <path\n        style={pathStyle}\n        d=\"M 13.765625 21.300781 C 13.589844 21.257812 13.410156 21.351562 13.351562 21.515625 L 12.773438 23.386719 C 12.726562 23.554688 12.824219 23.730469 12.996094 23.785156 C 13.023438 23.785156 13.050781 23.8125 13.105469 23.8125 C 13.257812 23.8125 13.390625 23.714844 13.4375 23.570312 L 14.015625 21.703125 C 14.050781 21.527344 13.941406 21.355469 13.765625 21.300781 Z M 13.765625 21.300781 \"\n      />\n      <path\n        style={pathStyle}\n        d=\"M 16.628906 20.820312 C 16.558594 20.65625 16.363281 20.574219 16.191406 20.640625 C 16.019531 20.707031 15.933594 20.894531 15.996094 21.0625 L 17.097656 23.652344 C 17.148438 23.773438 17.265625 23.859375 17.402344 23.867188 C 17.449219 23.871094 17.496094 23.863281 17.539062 23.839844 C 17.703125 23.761719 17.785156 23.582031 17.734375 23.414062 Z M 16.628906 20.820312 \"\n      />\n      <path\n        style={pathStyle}\n        d=\"M 20.652344 20.179688 L 18.890625 19.21875 C 18.722656 19.128906 18.511719 19.191406 18.421875 19.351562 C 18.328125 19.515625 18.390625 19.71875 18.558594 19.804688 L 20.320312 20.769531 C 20.371094 20.796875 20.429688 20.816406 20.488281 20.820312 C 20.609375 20.816406 20.722656 20.757812 20.789062 20.660156 C 20.875 20.488281 20.816406 20.285156 20.652344 20.179688 Z M 20.652344 20.179688 \"\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {eviteGreen} from '~sass/reinvention_styleguide/base/_exports.sass';\n\nexport function LinkOut(props) {\n  const {color = eviteGreen, width = 10.864, height = 10.863, className = ''} = props;\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={width}\n      height={height}\n      viewBox={`0 0 ${width} ${height}`}\n      className={className}\n    >\n      <g>\n        <g>\n          <path\n            d=\"M65.121,5.915v5.374a.915.915,0,1,1-1.831,0V8.125l-7.467,7.47a.925.925,0,0,1-.647.269.917.917,0,0,1-.647-1.565L62,6.831H58.834a.915.915,0,0,1,0-1.831h5.371a1.126,1.126,0,0,1,.174.015,1.09,1.09,0,0,1,.171.052l.079.037a.9.9,0,0,1,.223.165.91.91,0,0,1,.253.473.894.894,0,0,1,.012.091s0,0,0,.006A.632.632,0,0,1,65.121,5.915Z\"\n            transform=\"translate(-54.259 -5)\"\n            fill={color}\n          />\n        </g>\n        <g transform=\"translate(10.859 0.839)\">\n          <path\n            d=\"M94.982,8.223v.089a1,1,0,0,0,0-.165A.632.632,0,0,1,94.982,8.223Z\"\n            transform=\"translate(-94.979 -8.147)\"\n            fill={color}\n          />\n        </g>\n      </g>\n    </svg>\n  );\n}\n","import React from 'react';\nimport {gray4} from '~sass/reinvention_styleguide/base/_exports.sass';\n\nexport function MoreIcon(props) {\n  const {color = gray4, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox={`0 0 ${width} ${height}`}\n      style={style}\n      className={className}\n    >\n      <path\n        d=\"M6 14C4.9 14 4 14.9 4 16C4 17.1 4.9 18 6 18C7.1 18 8 17.1 8 16C8 14.9 7.1 14 6 14ZM26 14C24.9 14 24 14.9 24 16C24 17.1 24.9 18 26 18C27.1 18 28 17.1 28 16C28 14.9 27.1 14 26 14ZM16 14C14.9 14 14 14.9 14 16C14 17.1 14.9 18 16 18C17.1 18 18 17.1 18 16C18 14.9 17.1 14 16 14Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function Outlook(props) {\n  const {className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M2 5.03501V26.6991L18.4805 30.1547V1.84521L2 5.03501ZM10.303 20.9053C5.06388 20.5675 5.60348 11.1239 10.4253 11.0489C15.5908 11.3903 15.0841 20.83 10.303 20.9053ZM10.3785 12.8979C7.61844 13.0895 7.74199 19.0024 10.336 19.05C13.0842 18.8728 12.9228 12.9438 10.3785 12.8979ZM21.2887 16.664C21.5375 16.8468 21.8373 16.664 21.8373 16.664C21.5385 16.8468 30 11.2264 30 11.2264V21.404C30 22.512 29.2908 22.9765 28.4933 22.9765H19.5215L19.5221 15.4508L21.2887 16.664ZM19.5225 7.84736V13.3848L21.4577 14.6033C21.5088 14.6183 21.6193 14.6193 21.6704 14.6033L29.9989 8.98825C29.9989 8.32371 29.3791 7.84736 29.0292 7.84736H19.5225Z\"\n        fill={charcoal}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_AddPhotosLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M28.0003 20V24H32.0003V26.6667H28.0003V30.6667H25.3337V26.6667H21.3337V24H25.3337V20H28.0003ZM28.011 4C28.7417 4 29.3337 4.59333 29.3337 5.324V17.3333H26.667V6.66667H5.33366V25.332L18.667 12L22.667 16V19.772L18.667 15.772L9.10299 25.3333H18.667V28H3.98966C3.63874 27.9996 3.30232 27.86 3.05431 27.6117C2.8063 27.3635 2.66699 27.0269 2.66699 26.676V5.324C2.66943 4.97384 2.80953 4.63869 3.05701 4.39096C3.30449 4.14322 3.6395 4.00279 3.98966 4H28.011ZM10.667 9.33333C11.3742 9.33333 12.0525 9.61428 12.5526 10.1144C13.0527 10.6145 13.3337 11.2928 13.3337 12C13.3337 12.7072 13.0527 13.3855 12.5526 13.8856C12.0525 14.3857 11.3742 14.6667 10.667 14.6667C9.95975 14.6667 9.28147 14.3857 8.78137 13.8856C8.28128 13.3855 8.00033 12.7072 8.00033 12C8.00033 11.2928 8.28128 10.6145 8.78137 10.1144C9.28147 9.61428 9.95975 9.33333 10.667 9.33333Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_AlertLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      onClick={props.onClick}\n    >\n      <path\n        d=\"M16 29.3333C8.63596 29.3333 2.66663 23.364 2.66663 16C2.66663 8.63599 8.63596 2.66666 16 2.66666C23.364 2.66666 29.3333 8.63599 29.3333 16C29.3333 23.364 23.364 29.3333 16 29.3333ZM16 26.6667C18.8289 26.6667 21.542 25.5428 23.5424 23.5425C25.5428 21.5421 26.6666 18.829 26.6666 16C26.6666 13.171 25.5428 10.4579 23.5424 8.45752C21.542 6.45713 18.8289 5.33332 16 5.33332C13.171 5.33332 10.4579 6.45713 8.45749 8.45752C6.4571 10.4579 5.33329 13.171 5.33329 16C5.33329 18.829 6.4571 21.5421 8.45749 23.5425C10.4579 25.5428 13.171 26.6667 16 26.6667ZM14.6666 20H17.3333V22.6667H14.6666V20ZM14.6666 9.33332H17.3333V17.3333H14.6666V9.33332Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_Arrow(props) {\n  const {color = charcoal, className = '', ratio = 1, direction = 'right'} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  const rotateFromRight = (direction) => {\n    switch (direction) {\n      case 'right':\n        return 0;\n      case 'left':\n        return 180;\n      case 'down':\n        return 90;\n      case 'up':\n        return 270;\n    }\n  };\n\n  // Use ratio to calculate width and height\n  const style = {\n    transform: `rotate( ${rotateFromRight(direction)}deg)`,\n    height: `${ratio * height}px`,\n    width: `${ratio * width}px`,\n  };\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M21.5626 14.6666L14.4106 7.51458L16.296 5.62924L26.6666 15.9999L16.296 26.3706L14.4106 24.4852L21.5626 17.3332H5.33331V14.6666H21.5626Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_BroadcastLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <g clipPath=\"url(#clip0_4_4)\">\n        <path\n          d=\"M23.1394 1.84466C23.235 1.56231 23.2085 1.25591 23.0656 0.991792C22.9225 0.727671 22.6745 0.527076 22.3752 0.433433C22.0758 0.339787 21.7493 0.360628 21.4662 0.491442C21.1831 0.622256 20.9663 0.852519 20.8626 1.13238L19.6626 4.51193C19.5669 4.79426 19.5934 5.10066 19.7364 5.3648C19.8795 5.62891 20.1275 5.82951 20.4268 5.92315C20.7261 6.0168 21.0527 5.99595 21.3358 5.86514C21.6189 5.73433 21.8357 5.50407 21.9394 5.2242L23.1394 1.84466ZM30.448 1.81911C30.6727 2.03043 30.7989 2.31687 30.7989 2.61554C30.7989 2.91419 30.6727 3.20064 30.448 3.41195L26.448 7.16868C26.3383 7.2794 26.2057 7.3682 26.0585 7.4298C25.9113 7.4914 25.7525 7.52452 25.5913 7.5272C25.4302 7.52987 25.2702 7.50203 25.1207 7.44535C24.9714 7.38866 24.8357 7.3043 24.7216 7.19728C24.6078 7.09026 24.5179 6.96279 24.4576 6.82244C24.3973 6.68212 24.3675 6.53182 24.3703 6.38048C24.3733 6.22916 24.4085 6.07993 24.4741 5.94167C24.5397 5.80343 24.6343 5.67902 24.7522 5.57582L28.752 1.81911C28.9771 1.60806 29.2821 1.48951 29.6 1.48951C29.9179 1.48951 30.2231 1.60806 30.448 1.81911ZM10.122 4.97175C10.3845 4.45977 10.776 4.01566 11.2626 3.67792C11.7492 3.34018 12.3162 3.11902 12.9144 3.0336C13.5125 2.94818 14.1239 3.0011 14.6953 3.18775C15.2668 3.37438 15.7812 3.68914 16.1939 4.10471L27.4032 15.3839C27.808 15.7912 28.1031 16.2835 28.264 16.8198C28.4249 17.356 28.4471 17.9207 28.3285 18.4666C28.2096 19.0125 27.9536 19.5238 27.5817 19.9578C27.2098 20.3919 26.7328 20.7362 26.1904 20.9618L20.7186 23.24C21.384 24.6939 21.4121 26.3358 20.7966 27.8091C20.1811 29.2823 18.9717 30.4681 17.431 31.1093C15.8903 31.7502 14.1426 31.7947 12.5672 31.2329C10.9918 30.6711 9.71589 29.5486 9.01641 28.1086L6.74924 29.0523C6.23072 29.2681 5.65591 29.3353 5.09689 29.2455C4.53788 29.1557 4.01954 28.9129 3.6069 28.5474L1.30454 26.5083C0.85939 26.1141 0.559418 25.5973 0.44809 25.0322C0.336762 24.4672 0.419861 23.8837 0.685347 23.3662L10.122 4.97175ZM11.2132 27.195C11.6648 28.0725 12.462 28.7509 13.4362 29.0866C14.4105 29.4226 15.4856 29.3895 16.4345 28.9947C17.3834 28.6 18.1317 27.8743 18.5215 26.971C18.9113 26.0677 18.912 25.0574 18.5234 24.1536L11.2132 27.195ZM14.4387 5.64345C14.2923 5.49616 14.11 5.38457 13.9073 5.31838C13.7047 5.25218 13.488 5.23337 13.2759 5.26356C13.0638 5.29376 12.8627 5.37204 12.6901 5.49166C12.5175 5.61127 12.3785 5.76857 12.2851 5.94999L2.8485 24.3445C2.80398 24.4306 2.7899 24.528 2.8083 24.6224C2.82672 24.7166 2.87666 24.803 2.9509 24.8688L5.25326 26.9065C5.32199 26.9673 5.4083 27.0078 5.50135 27.0226C5.5944 27.0377 5.6901 27.0265 5.77646 26.9906L25.2178 18.9016C25.4103 18.8217 25.5797 18.6997 25.7118 18.5458C25.8439 18.3918 25.9349 18.2104 25.9771 18.0168C26.0194 17.8231 26.0117 17.6227 25.9547 17.4324C25.8978 17.242 25.7931 17.0673 25.6496 16.9226L14.4387 5.64345ZM26 10.8788C26 10.5799 26.1266 10.2932 26.3515 10.0819C26.5767 9.87054 26.8818 9.75179 27.2 9.75179H30.4C30.7182 9.75179 31.0235 9.87054 31.2485 10.0819C31.4736 10.2932 31.6 10.5799 31.6 10.8788C31.6 11.1777 31.4736 11.4644 31.2485 11.6757C31.0235 11.8871 30.7182 12.0058 30.4 12.0058H27.2C26.8818 12.0058 26.5767 11.8871 26.3515 11.6757C26.1266 11.4644 26 11.1777 26 10.8788Z\"\n          fill={color}\n        />\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M20.4848 1.00895C20.623 0.635794 20.9122 0.328779 21.2896 0.154361C21.6671 -0.0200575 22.1025 -0.047845 22.5016 0.0770139C22.9008 0.201873 23.2313 0.469333 23.4222 0.821495C23.6128 1.17365 23.6482 1.58219 23.5205 1.95865L23.1394 1.84466C23.235 1.56231 23.2085 1.25591 23.0656 0.991792C22.9225 0.727671 22.6745 0.527077 22.3752 0.433433C22.0758 0.339787 21.7493 0.360629 21.4662 0.491442C21.1831 0.622256 20.9663 0.852519 20.8626 1.13238L19.6626 4.51193C19.5669 4.79426 19.5934 5.10066 19.7364 5.3648C19.8795 5.62891 20.1275 5.82951 20.4268 5.92315C20.7261 6.0168 21.0527 5.99595 21.3358 5.86514C21.6189 5.73433 21.8357 5.50407 21.9394 5.22421L23.1394 1.84466L23.5189 1.9635L22.3172 5.34763C22.179 5.7208 21.8898 6.02779 21.5124 6.20222C21.1349 6.37664 20.6995 6.40443 20.3004 6.27957C19.9013 6.15472 19.5706 5.88725 19.3799 5.53509C19.1892 5.18293 19.1538 4.7744 19.2815 4.39794L19.2831 4.39307L20.4848 1.00895ZM30.731 3.6776L26.7355 7.42997C26.5902 7.5752 26.4153 7.69179 26.2213 7.77296C26.0251 7.85509 25.8133 7.89927 25.5984 7.90281C25.3835 7.90638 25.1703 7.86926 24.971 7.79369C24.7717 7.7181 24.5909 7.60562 24.4389 7.46293C24.2869 7.32023 24.1671 7.15026 24.0866 6.96315C24.0062 6.77605 23.9666 6.57561 23.9705 6.37385C23.9742 6.17209 24.0213 5.97312 24.1088 5.78878C24.1952 5.60663 24.3193 5.44247 24.4738 5.30585L28.4693 1.55347C28.7691 1.27207 29.176 1.11384 29.6 1.11384C30.024 1.11384 30.4306 1.2719 30.7307 1.55331L30.448 1.81911C30.2231 1.60806 29.9179 1.48951 29.6 1.48951C29.2821 1.48951 28.9771 1.60806 28.752 1.81911L24.7522 5.57582C24.6343 5.67902 24.5397 5.80343 24.4741 5.94167C24.4085 6.07993 24.3733 6.22917 24.3703 6.38048C24.3675 6.53182 24.3973 6.68213 24.4576 6.82245C24.5179 6.96279 24.6078 7.09026 24.7216 7.19728C24.8357 7.3043 24.9714 7.38866 25.1207 7.44535C25.2702 7.50203 25.4302 7.52987 25.5913 7.5272C25.7525 7.52453 25.9113 7.49141 26.0585 7.42981C26.2057 7.36821 26.3383 7.27941 26.448 7.16869L30.448 3.41195C30.6727 3.20064 30.7989 2.91419 30.7989 2.61554C30.7989 2.31687 30.6727 2.03043 30.448 1.81911L30.7307 1.55331C31.0304 1.83506 31.1989 2.21732 31.1989 2.61554C31.1989 3.01374 31.0304 3.39584 30.731 3.6776ZM9.7616 4.80875C10.0524 4.24171 10.486 3.74985 11.0249 3.37579C11.5638 3.00176 12.1917 2.7568 12.8542 2.66219C13.5167 2.56759 14.1938 2.62619 14.8267 2.83291C15.4596 3.03961 16.0292 3.38816 16.4863 3.84837L27.6958 15.1275C28.144 15.5787 28.4709 16.124 28.6491 16.7179C28.8274 17.3118 28.8517 17.9371 28.7202 18.5417C28.5888 19.1463 28.3054 19.7126 27.8935 20.1933C27.4816 20.6741 26.9531 21.0554 26.3525 21.3053L21.2317 23.4373C21.7938 24.8933 21.7746 26.4967 21.1689 27.9463C20.5149 29.5118 19.23 30.7717 17.593 31.4528C15.956 32.1337 14.099 32.181 12.4252 31.5842C10.8751 31.0313 9.5979 29.9675 8.82727 28.5982L6.91131 29.3957C6.32078 29.6416 5.6661 29.7179 5.02944 29.6158C4.3928 29.5134 3.80247 29.2368 3.3325 28.8208L1.03017 26.7817C0.523237 26.3328 0.181561 25.744 0.0547758 25.1006C-0.0720148 24.4571 0.0226268 23.7927 0.324985 23.2032L9.7616 4.80875ZM10.122 4.97175L0.685346 23.3662C0.419861 23.8837 0.336761 24.4672 0.448089 25.0322C0.559417 25.5973 0.85939 26.1141 1.30453 26.5083L3.6069 28.5474C4.01954 28.9129 4.53787 29.1557 5.09689 29.2455C5.65591 29.3353 6.23072 29.2681 6.74923 29.0523L9.01641 28.1086C9.71589 29.5486 10.9918 30.6711 12.5672 31.2329C14.1426 31.7947 15.8903 31.7502 17.431 31.1093C18.9717 30.4681 20.1811 29.2823 20.7966 27.8091C21.4121 26.3358 21.384 24.6939 20.7186 23.24L26.1904 20.9618C26.7328 20.7362 27.2098 20.3919 27.5817 19.9578C27.9536 19.5238 28.2096 19.0125 28.3285 18.4666C28.4471 17.9207 28.4249 17.356 28.264 16.8198C28.1031 16.2835 27.808 15.7912 27.4032 15.3839L16.1939 4.10471C15.7812 3.68914 15.2668 3.37438 14.6953 3.18775C14.1239 3.0011 13.5125 2.94818 12.9144 3.0336C12.3162 3.11902 11.7492 3.34018 11.2626 3.67792C10.776 4.01566 10.3845 4.45977 10.122 4.97175ZM11.2132 27.195C11.2716 27.3086 11.3358 27.4187 11.4054 27.5253C11.874 28.2423 12.588 28.7943 13.4362 29.0866C14.4105 29.4226 15.4856 29.3895 16.4345 28.9947C17.3834 28.6 18.1317 27.8743 18.5215 26.971C18.8608 26.1847 18.9053 25.3173 18.6549 24.5097C18.6176 24.3895 18.5738 24.2706 18.5234 24.1536L11.2132 27.195ZM18.2855 24.6633L11.7748 27.3717C12.1967 27.9961 12.8276 28.4768 13.5741 28.7339C14.4509 29.0363 15.4185 29.0066 16.2725 28.6514C17.1264 28.296 17.8 27.643 18.1508 26.8299C18.4493 26.1381 18.4943 25.3762 18.2855 24.6633ZM14.4387 5.64345C14.2923 5.49616 14.11 5.38457 13.9073 5.31838C13.7047 5.25218 13.488 5.23337 13.2759 5.26357C13.0638 5.29376 12.8627 5.37205 12.6901 5.49166C12.5175 5.61127 12.3785 5.76857 12.2851 5.94999L2.8485 24.3445C2.80398 24.4306 2.7899 24.528 2.8083 24.6224C2.82672 24.7166 2.87666 24.803 2.9509 24.8688L5.25326 26.9065C5.32199 26.9673 5.4083 27.0078 5.50135 27.0226C5.5944 27.0377 5.6901 27.0265 5.77646 26.9906L25.2178 18.9016C25.4103 18.8217 25.5797 18.6997 25.7118 18.5458C25.8439 18.3918 25.9349 18.2104 25.9771 18.0168C26.0194 17.8231 26.0117 17.6227 25.9547 17.4324C25.8978 17.242 25.7931 17.0673 25.6496 16.9226L14.4387 5.64345ZM25.357 17.1787C25.4569 17.2795 25.5301 17.4015 25.5696 17.534C25.6094 17.6667 25.6146 17.8063 25.5854 17.9413C25.5559 18.0763 25.4923 18.2027 25.4002 18.31C25.3083 18.4173 25.1902 18.5024 25.056 18.5581L5.61472 26.6471C5.60032 26.653 5.58437 26.6549 5.56887 26.6523C5.55335 26.6498 5.53897 26.6432 5.52752 26.6329L3.22551 24.5957C3.21319 24.5847 3.2048 24.5703 3.20174 24.5545C3.19867 24.539 3.20101 24.5227 3.20843 24.5083L12.6453 6.11342C12.7104 5.98697 12.8072 5.87733 12.9275 5.79397C13.0479 5.71061 13.188 5.65605 13.3358 5.63499C13.4837 5.61397 13.6347 5.62706 13.7759 5.67321C13.9171 5.71934 14.0443 5.7971 14.1463 5.89977L25.357 17.1787ZM25.6 10.8788C25.6 10.4803 25.7687 10.0981 26.0688 9.81625C26.3687 9.53445 26.7758 9.37611 27.2 9.37611H30.4C30.8245 9.37611 31.2313 9.53445 31.5314 9.81625C31.8315 10.0981 32 10.4803 32 10.8788C32 11.2773 31.8315 11.6596 31.5314 11.9414C31.2313 12.2232 30.8245 12.3815 30.4 12.3815H27.2C26.7758 12.3815 26.3687 12.2232 26.0688 11.9414C25.7687 11.6596 25.6 11.2773 25.6 10.8788ZM26.3515 10.0819C26.1266 10.2932 26 10.5799 26 10.8788C26 11.1777 26.1266 11.4644 26.3515 11.6757C26.5767 11.8871 26.8818 12.0058 27.2 12.0058H30.4C30.7182 12.0058 31.0235 11.8871 31.2485 11.6757C31.4736 11.4644 31.6 11.1777 31.6 10.8788C31.6 10.5799 31.4736 10.2932 31.2485 10.0819C31.0235 9.87054 30.7182 9.75179 30.4 9.75179H27.2C26.8818 9.75179 26.5767 9.87054 26.3515 10.0819Z\"\n          fill={color}\n        />\n      </g>\n      <defs>\n        <clipPath id=\"clip0_4_4\">\n          <rect width=\"32\" height=\"32\" fill=\"white\" />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_CalendarLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M22.6666 3.99998H28C28.3536 3.99998 28.6927 4.14046 28.9428 4.3905C29.1928 4.64055 29.3333 4.97969 29.3333 5.33331V26.6666C29.3333 27.0203 29.1928 27.3594 28.9428 27.6095C28.6927 27.8595 28.3536 28 28 28H3.99996C3.64634 28 3.3072 27.8595 3.05715 27.6095C2.8071 27.3594 2.66663 27.0203 2.66663 26.6666V5.33331C2.66663 4.97969 2.8071 4.64055 3.05715 4.3905C3.3072 4.14046 3.64634 3.99998 3.99996 3.99998H9.33329V1.33331H12V3.99998H20V1.33331H22.6666V3.99998ZM20 6.66665H12V9.33331H9.33329V6.66665H5.33329V12H26.6666V6.66665H22.6666V9.33331H20V6.66665ZM26.6666 14.6666H5.33329V25.3333H26.6666V14.6666Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_Checkmark(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M13.3334 20.2293L25.5894 7.97202L27.476 9.85735L13.3334 24L4.84802 15.5147L6.73336 13.6293L13.3334 20.2293Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_CheckmarkCircle(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M16 29.3333C8.63602 29.3333 2.66669 23.364 2.66669 16C2.66669 8.63599 8.63602 2.66666 16 2.66666C23.364 2.66666 29.3334 8.63599 29.3334 16C29.3334 23.364 23.364 29.3333 16 29.3333ZM14.6707 21.3333L24.0974 11.9053L22.212 10.02L14.6707 17.5627L10.8987 13.7907L9.01335 15.676L14.6707 21.3333Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_Chevron(props) {\n  const {color = charcoal, className = '', ratio = 1, direction = 'right'} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const rotateFromRight = (direction) => {\n    switch (direction) {\n      case 'right':\n        return 0;\n      case 'left':\n        return 180;\n      case 'down':\n        return 90;\n      case 'up':\n        return 270;\n    }\n  };\n\n  // Use ratio to calculate width and height\n  const style = {\n    transform: `rotate( ${rotateFromRight(direction)}deg)`,\n    height: `${ratio * height}px`,\n    width: `${ratio * width}px`,\n  };\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M17.5626 16L10.9626 9.39998L12.848 7.51465L21.3333 16L12.848 24.4853L10.9626 22.6L17.5626 16Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_ClickOutLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M13.3333 4V6.66667H6.66667V25.3333H25.3333V18.6667H28V26.6667C28 27.0203 27.8595 27.3594 27.6095 27.6095C27.3594 27.8595 27.0203 28 26.6667 28H5.33333C4.97971 28 4.64057 27.8595 4.39052 27.6095C4.14048 27.3594 4 27.0203 4 26.6667V5.33333C4 4.97971 4.14048 4.64057 4.39052 4.39052C4.64057 4.14048 4.97971 4 5.33333 4H13.3333ZM23.448 6.66667H17.3333V4H28V14.6667H25.3333V8.552L16 17.8853L14.1147 16L23.448 6.66667Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_CloseCircle(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <rect width=\"32\" height=\"32\" rx=\"16\" fill={color} />\n      <path\n        d=\"M16 14.1146L22.6 7.51465L24.4853 9.39998L17.8853 16L24.4853 22.6L22.6 24.4853L16 17.8853L9.39998 24.4853L7.51465 22.6L14.1146 16L7.51465 9.39998L9.39998 7.51465L16 14.1146Z\"\n        fill=\"white\"\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_CloseLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {\n    height: `${ratio * height}px`,\n    width: `${ratio * width}px`,\n    ...props.style,\n  };\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      onClick={props.onClick}\n    >\n      <path\n        d=\"M16 14.1146L22.6 7.51465L24.4853 9.39998L17.8853 16L24.4853 22.6L22.6 24.4853L16 17.8853L9.39998 24.4853L7.51465 22.6L14.1146 16L7.51465 9.39998L9.39998 7.51465L16 14.1146Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_Delete(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 16;\n  const height = 16;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      onClick={props.onClick}\n      {...props}\n    >\n      <path\n        d=\"M10.3335 2.99967H13.6668V4.33301H12.3335V12.9997C12.3335 13.1765 12.2633 13.3461 12.1382 13.4711C12.0132 13.5961 11.8436 13.6663 11.6668 13.6663H2.3335C2.15668 13.6663 1.98712 13.5961 1.86209 13.4711C1.73707 13.3461 1.66683 13.1765 1.66683 12.9997V4.33301H0.333496V2.99967H3.66683V0.999674C3.66683 0.822863 3.73707 0.653294 3.86209 0.52827C3.98712 0.403246 4.15668 0.333008 4.3335 0.333008H9.66683C9.84364 0.333008 10.0132 0.403246 10.1382 0.52827C10.2633 0.653294 10.3335 0.822863 10.3335 0.999674V2.99967ZM11.0002 4.33301H3.00016V12.333H11.0002V4.33301ZM5.00016 1.66634V2.99967H9.00016V1.66634H5.00016Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_DeleteBinLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      onClick={props.onClick}\n    >\n      <path\n        d=\"M22.6667 7.99999H29.3333V10.6667H26.6667V28C26.6667 28.3536 26.5262 28.6927 26.2761 28.9428C26.0261 29.1928 25.687 29.3333 25.3333 29.3333H6.66666C6.31304 29.3333 5.9739 29.1928 5.72386 28.9428C5.47381 28.6927 5.33333 28.3536 5.33333 28V10.6667H2.66666V7.99999H9.33333V3.99999C9.33333 3.64637 9.47381 3.30723 9.72386 3.05718C9.9739 2.80713 10.313 2.66666 10.6667 2.66666H21.3333C21.687 2.66666 22.0261 2.80713 22.2761 3.05718C22.5262 3.30723 22.6667 3.64637 22.6667 3.99999V7.99999ZM24 10.6667H8V26.6667H24V10.6667ZM12 5.33332V7.99999H20V5.33332H12Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_EditLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      onClick={props.onClick}\n      {...props}\n    >\n      <path\n        d=\"M8.552 21.3334L22.0747 7.81077L20.1893 5.92543L6.66667 19.4481V21.3334H8.552ZM9.65733 24.0001H4V18.3428L19.2467 3.0961C19.4967 2.84614 19.8358 2.70572 20.1893 2.70572C20.5429 2.70572 20.882 2.84614 21.132 3.0961L24.904 6.8681C25.154 7.11814 25.2944 7.45722 25.2944 7.81077C25.2944 8.16432 25.154 8.5034 24.904 8.75343L9.65733 24.0001ZM4 26.6668H28V29.3334H4V26.6668Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_FavoritesFill(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M16.0014 6.03864C19.1334 3.22664 23.9734 3.31997 26.9907 6.34264C30.0067 9.36664 30.1107 14.1826 27.3054 17.324L15.9987 28.6466L4.6947 17.324C1.88936 14.1826 1.9947 9.35864 5.00936 6.34264C8.02936 3.32397 12.86 3.22264 16.0014 6.03864Z\"\n        fill={color}\n        stroke={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_FavoritesLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M16.0014 6.03864C19.1334 3.22664 23.9734 3.31997 26.9908 6.34264C30.0068 9.36664 30.1108 14.1826 27.3054 17.324L15.9988 28.6466L4.69476 17.324C1.88942 14.1826 1.99476 9.35864 5.00942 6.34264C8.02942 3.32397 12.8601 3.22264 16.0014 6.03864ZM25.1028 8.22664C23.1028 6.22397 19.8761 6.14264 17.7828 8.02264L16.0028 9.61997L14.2214 8.02397C12.1214 6.14131 8.90142 6.22397 6.89609 8.22931C4.90942 10.216 4.80942 13.396 6.64009 15.4973L16.0001 24.872L25.3601 15.4986C27.1921 13.396 27.0921 10.22 25.1028 8.22664Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_Info(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 14;\n  const height = 14;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      onClick={props.onClick}\n    >\n      <path\n        d=\"M7.00065 13.6668C3.31865 13.6668 0.333984 10.6822 0.333984 7.00016C0.333984 3.31816 3.31865 0.333496 7.00065 0.333496C10.6827 0.333496 13.6673 3.31816 13.6673 7.00016C13.6673 10.6822 10.6827 13.6668 7.00065 13.6668ZM7.00065 12.3335C8.41514 12.3335 9.77169 11.7716 10.7719 10.7714C11.7721 9.7712 12.334 8.41465 12.334 7.00016C12.334 5.58567 11.7721 4.22912 10.7719 3.22893C9.77169 2.22873 8.41514 1.66683 7.00065 1.66683C5.58616 1.66683 4.22961 2.22873 3.22941 3.22893C2.22922 4.22912 1.66732 5.58567 1.66732 7.00016C1.66732 8.41465 2.22922 9.7712 3.22941 10.7714C4.22961 11.7716 5.58616 12.3335 7.00065 12.3335V12.3335ZM6.33398 3.66683H7.66732V5.00016H6.33398V3.66683ZM6.33398 6.3335H7.66732V10.3335H6.33398V6.3335Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\n\nexport function PB_InformationFill(props) {\n  const {color = '#101B21', className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M16 29.3334C8.63599 29.3334 2.66666 23.364 2.66666 16C2.66666 8.63602 8.63599 2.66669 16 2.66669C23.364 2.66669 29.3333 8.63602 29.3333 16C29.3333 23.364 23.364 29.3334 16 29.3334ZM14.6667 14.6667V22.6667H17.3333V14.6667H14.6667ZM14.6667 9.33335V12H17.3333V9.33335H14.6667Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_LocationAddressNavigationLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M2.66669 6.66669L12 2.66669L20 6.66669L28.404 3.06535C28.5055 3.02187 28.6161 3.00425 28.7261 3.01408C28.836 3.02391 28.9418 3.06088 29.0339 3.12168C29.126 3.18248 29.2016 3.2652 29.2539 3.36242C29.3061 3.45964 29.3335 3.56831 29.3334 3.67869V25.3334L20 29.3334L12 25.3334L3.59602 28.9347C3.49457 28.9782 3.38391 28.9958 3.27397 28.986C3.16404 28.9761 3.05826 28.9392 2.96614 28.8784C2.87401 28.8176 2.79843 28.7348 2.74616 28.6376C2.6939 28.5404 2.66659 28.4317 2.66669 28.3214V6.66669ZM21.3334 25.86L26.6667 23.5747V6.71069L21.3334 8.99602V25.86ZM18.6667 25.6854V8.98135L13.3334 6.31469V23.0187L18.6667 25.6854ZM10.6667 23.004V6.14002L5.33335 8.42535V25.2894L10.6667 23.004Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_LockFill(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M24 10.6667H26.6667C27.0203 10.6667 27.3594 10.8071 27.6095 11.0572C27.8595 11.3072 28 11.6464 28 12V28C28 28.3536 27.8595 28.6928 27.6095 28.9428C27.3594 29.1929 27.0203 29.3333 26.6667 29.3333H5.33333C4.97971 29.3333 4.64057 29.1929 4.39052 28.9428C4.14048 28.6928 4 28.3536 4 28V12C4 11.6464 4.14048 11.3072 4.39052 11.0572C4.64057 10.8071 4.97971 10.6667 5.33333 10.6667H8V9.33333C8 7.2116 8.84285 5.17676 10.3431 3.67647C11.8434 2.17618 13.8783 1.33333 16 1.33333C18.1217 1.33333 20.1566 2.17618 21.6569 3.67647C23.1571 5.17676 24 7.2116 24 9.33333V10.6667ZM21.3333 10.6667V9.33333C21.3333 7.91884 20.7714 6.56229 19.7712 5.56209C18.771 4.5619 17.4145 3.99999 16 3.99999C14.5855 3.99999 13.229 4.5619 12.2288 5.56209C11.2286 6.56229 10.6667 7.91884 10.6667 9.33333V10.6667H21.3333Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_MealOptions(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <g>\n        <path\n          d=\"M5.44382 31.9683C4.69588 31.9683 3.97278 31.6722 3.45982 31.1559L3.39773 31.0933C2.54663 30.2368 2.09672 29.0604 2.09672 27.6917C2.09672 25.3257 2.25767 22.9374 2.57528 20.5932L2.68322 19.7977C2.96454 17.7224 3.0954 16.0354 3.0954 14.4888C3.0954 13.7328 2.69516 12.8965 1.99785 12.1944L1.97493 12.1714C0.793313 10.9801 0.0945672 9.45536 0.00764179 7.87748L0.000955224 7.75765C0 7.74448 0 7.73171 0 7.71853C0 3.60581 2.39522 0.384155 5.45242 0.384155C5.98018 0.384155 6.40764 0.752686 6.40764 1.20769C6.40764 1.66269 5.98018 2.03122 5.45242 2.03122C4.95952 2.03122 3.99761 2.22681 3.09302 3.53581C2.33361 4.63564 1.91379 6.11347 1.91045 7.69918L1.91618 7.79883C1.98304 9.01313 2.51988 10.1858 3.42687 11.1004L3.44931 11.123C4.43845 12.1187 5.00585 13.3453 5.00585 14.4884C5.00585 16.1 4.87069 17.8476 4.58078 19.9883L4.47284 20.7839C4.16382 23.0651 4.00716 25.3891 4.00716 27.6913C4.00716 28.3678 4.15331 29.3214 4.84824 30.0214L4.91033 30.084C5.06221 30.2368 5.25134 30.3208 5.44334 30.3208C5.9711 30.3208 6.39857 30.6893 6.39857 31.1443C6.39857 31.5993 5.9711 31.9679 5.44334 31.9679L5.44382 31.9683Z\"\n          fill={color}\n        />\n        <path\n          d=\"M5.45768 31.9683C4.92991 31.9683 4.50245 31.5998 4.50245 31.1448C4.50245 30.6898 4.92991 30.3212 5.45768 30.3212C5.64968 30.3212 5.83881 30.2372 5.99069 30.0845L6.05278 30.0219C6.74818 29.3223 6.89386 28.3686 6.89386 27.6921C6.89386 25.3899 6.7372 23.0659 6.42818 20.7847L6.32024 19.9892C6.03033 17.8488 5.89517 16.1009 5.89517 14.4892C5.89517 13.3462 6.46257 12.1191 7.45218 11.123L7.47415 11.1012C8.38114 10.1867 8.91797 9.01398 8.98484 7.79968L8.99057 7.70004C8.98723 6.11432 8.56741 4.6365 7.808 3.53667C6.90341 2.22725 5.9415 2.03207 5.4486 2.03207C4.92084 2.03207 4.49338 1.66354 4.49338 1.20854C4.49338 0.753541 4.92084 0.38501 5.4486 0.38501C8.50627 0.38501 10.901 3.60667 10.901 7.71939C10.901 7.73257 10.901 7.74533 10.9001 7.75851L10.8934 7.87833C10.8065 9.45622 10.1077 10.981 8.92609 12.1722L8.90269 12.1957C8.20585 12.8973 7.80562 13.7336 7.80562 14.4896C7.80562 16.0358 7.93648 17.7228 8.2178 19.7986L8.32574 20.5941C8.64335 22.9383 8.8043 25.3269 8.8043 27.6925C8.8043 29.0612 8.35439 30.2376 7.50329 31.0941L7.4412 31.1567C6.92824 31.6731 6.20514 31.9691 5.4572 31.9691L5.45768 31.9683Z\"\n          fill={color}\n        />\n        <path\n          d=\"M17.8025 31.9592C17.066 31.9592 16.353 31.6698 15.8467 31.1649L15.7856 31.104C14.9469 30.2677 14.5036 29.1193 14.5036 27.7835C14.5036 25.4859 14.6617 23.1664 14.9731 20.8893L15.0787 20.1168C15.3538 18.1033 15.4823 16.4674 15.4823 14.9673C15.4823 14.2405 15.093 13.4351 14.4143 12.7586C13.5284 11.8749 13.0402 10.708 13.0402 9.47268C13.0402 9.45621 13.0407 9.43933 13.0421 9.42286L13.6096 1.36253C13.6416 0.908355 14.0943 0.562884 14.6211 0.590472C15.1479 0.61806 15.5487 1.00841 15.5167 1.46259L14.9507 9.49698C14.9569 10.3164 15.2874 11.1115 15.8591 11.6818C16.8334 12.6532 17.3922 13.851 17.3922 14.9677C17.3922 16.5336 17.2599 18.2309 16.9753 20.31L16.8697 21.0824C16.5669 23.2957 16.4136 25.5501 16.4136 27.7839C16.4136 28.4358 16.5555 29.354 17.2303 30.0272L17.2915 30.0882C17.4367 30.2327 17.6177 30.3126 17.802 30.3126C17.9864 30.3126 18.1674 30.2327 18.3126 30.0882L18.3733 30.0276C19.0486 29.3544 19.19 28.4362 19.19 27.7843C19.19 25.5505 19.0367 23.2961 18.7338 21.0828L18.6283 20.3104C18.3441 18.2314 18.2113 16.5341 18.2113 14.9681C18.2113 13.8514 18.7701 12.6536 19.7445 11.6822C20.3167 11.1119 20.6467 10.3168 20.6529 9.49739L20.0869 1.463C20.0549 1.00883 20.4561 0.618472 20.9824 0.590884C21.5083 0.563295 21.962 0.909179 21.994 1.36295L22.5614 9.42327C22.5624 9.43974 22.5633 9.45662 22.5633 9.47309C22.5633 10.7088 22.0752 11.8757 21.1893 12.759C20.5106 13.4355 20.1213 14.2409 20.1213 14.9677C20.1213 16.4674 20.2498 18.1037 20.5249 20.1172L20.6304 20.8897C20.9418 23.1664 21.0995 25.4859 21.0995 27.7839C21.0995 29.1197 20.6562 30.2681 19.8176 31.1044L19.7564 31.1649C19.2501 31.6698 18.5371 31.9592 17.8006 31.9592H17.8025Z\"\n          fill={color}\n        />\n        <path\n          d=\"M16.4781 9.09552C16.4714 9.09552 16.4647 9.09552 16.458 9.09552C15.9308 9.08605 15.5119 8.70969 15.5229 8.2551L15.6934 1.1789C15.7044 0.724313 16.1414 0.363606 16.6682 0.372665C17.1955 0.382135 17.6143 0.758489 17.6033 1.21308L17.4328 8.28928C17.4219 8.73811 16.9963 9.09552 16.4781 9.09552Z\"\n          fill={color}\n        />\n        <path\n          d=\"M18.869 9.09549C18.3508 9.09549 17.9252 8.73808 17.9143 8.28925L17.7442 1.21305C17.7332 0.758459 18.1521 0.382105 18.6794 0.372634C19.2057 0.362752 19.6432 0.724283 19.6542 1.17887L19.8242 8.25507C19.8352 8.70966 19.4163 9.08602 18.8891 9.09549C18.8824 9.09549 18.8757 9.09549 18.869 9.09549Z\"\n          fill={color}\n        />\n        <path\n          d=\"M29.0488 32C28.3339 32 27.6461 31.7072 27.1618 31.1962L27.105 31.1365C26.2515 30.236 26.1607 28.2789 26.1507 27.8955C26.1507 27.8856 26.1507 27.8758 26.1507 27.8663C26.2018 24.7628 26.6145 21.6762 27.4431 18.2281H26.3952C25.9023 18.2281 25.4906 17.9048 25.4443 17.482C25.0952 14.2912 24.7938 10.2168 25.5704 7.0021C26.3432 3.80226 27.6303 1.76361 29.8742 0.185719C30.1574 -0.0135759 30.5476 -0.0559879 30.8795 0.0766008C31.2115 0.20919 31.4264 0.493308 31.4331 0.808309L31.9995 26.8978C31.9995 26.9028 31.9995 26.9081 31.9995 26.9131C31.9995 29.0102 31.6604 30.4312 30.9922 31.1361L30.9354 31.1962C30.4511 31.7068 29.7634 32 29.0484 32H29.0488ZM28.0616 27.8737C28.086 28.7079 28.3009 29.7946 28.5846 30.0939L28.6414 30.1537C28.7632 30.2821 28.9079 30.3525 29.0493 30.3525C29.1907 30.3525 29.3354 30.2817 29.4572 30.1537L29.514 30.0935C29.8001 29.7917 30.0891 28.6935 30.09 26.9205L29.5666 2.80785C28.5731 3.94185 27.9179 5.36574 27.4417 7.33727C27.1059 8.7274 26.7329 11.1823 27.2693 16.5802H28.6266C28.9165 16.5802 29.1907 16.6938 29.3717 16.8886C29.5532 17.0834 29.622 17.3391 29.5589 17.5828C28.5798 21.374 28.118 24.5483 28.0621 27.8733L28.0616 27.8737Z\"\n          fill={color}\n        />\n      </g>\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_MessagesLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 34;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      onClick={props.onClick}\n    >\n      <path\n        d=\"M8.16265 20L2.22265 24.6667V4C2.22265 3.64637 2.36313 3.30724 2.61319 3.05719C2.86323 2.80715 3.20237 2.66667 3.55599 2.66667H23.556C23.9096 2.66667 24.2488 2.80715 24.4988 3.05719C24.7488 3.30724 24.8893 3.64637 24.8893 4V20H8.16265ZM7.23999 17.3333H22.2227V5.33333H4.88932V19.18L7.23999 17.3333ZM11.556 22.6667H25.2053L27.556 24.5133V10.6667H28.8893C29.2429 10.6667 29.5821 10.8071 29.8321 11.0572C30.0821 11.3072 30.2227 11.6464 30.2227 12V30L24.2827 25.3333H12.8893C12.5357 25.3333 12.1966 25.1928 11.9465 24.9428C11.6965 24.6928 11.556 24.3536 11.556 24V22.6667Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_Minus(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path d=\"M0.333374 14.6667H25.3334V17.3333H6.66669V14.6667Z\" fill={color} />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_Plus(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M14.6667 14.6667V6.66666H17.3334V14.6667H25.3334V17.3333H17.3334V25.3333H14.6667V17.3333H6.66669V14.6667H14.6667Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_PollLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M10.6667 5.33268H20.6667V7.99935H10.6667V5.33268ZM6 8.66602C5.46957 8.66602 4.96086 8.4553 4.58579 8.08023C4.21071 7.70516 4 7.19645 4 6.66602C4 6.13558 4.21071 5.62687 4.58579 5.2518C4.96086 4.87673 5.46957 4.66602 6 4.66602C6.53043 4.66602 7.03914 4.87673 7.41421 5.2518C7.78929 5.62687 8 6.13558 8 6.66602C8 7.19645 7.78929 7.70516 7.41421 8.08023C7.03914 8.4553 6.53043 8.66602 6 8.66602ZM6 17.9993C5.46957 17.9993 4.96086 17.7886 4.58579 17.4136C4.21071 17.0385 4 16.5298 4 15.9993C4 15.4689 4.21071 14.9602 4.58579 14.5851C4.96086 14.2101 5.46957 13.9993 6 13.9993C6.53043 13.9993 7.03914 14.2101 7.41421 14.5851C7.78929 14.9602 8 15.4689 8 15.9993C8 16.5298 7.78929 17.0385 7.41421 17.4136C7.03914 17.7886 6.53043 17.9993 6 17.9993ZM6 27.1993C5.46957 27.1993 4.96086 26.9886 4.58579 26.6136C4.21071 26.2385 4 25.7298 4 25.1993C4 24.6689 4.21071 24.1602 4.58579 23.7851C4.96086 23.4101 5.46957 23.1993 6 23.1993C6.53043 23.1993 7.03914 23.4101 7.41421 23.7851C7.78929 24.1602 8 24.6689 8 25.1993C8 25.7298 7.78929 26.2385 7.41421 26.6136C7.03914 26.9886 6.53043 27.1993 6 27.1993ZM10.6667 14.666H24.6667V17.3327H10.6667V14.666ZM10.6667 23.9993H28V26.666H10.6667V23.9993Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_QuestionCircle(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <g clipPath=\"url(#clip0_2_13)\">\n        <path\n          fillRule=\"evenodd\"\n          clipRule=\"evenodd\"\n          d=\"M16 0C24.8366 0 32 7.16344 32 16C32 24.8366 24.8366 32 16 32C7.16344 32 0 24.8366 0 16C0 7.16344 7.16344 0 16 0ZM19.304 15.4521C18.2469 16.3216 17.2533 17.1387 17.2533 18.408V18.576H14.7573V18.192C14.7573 16.2525 16.0588 15.1512 17.221 14.1678C18.1585 13.3746 19.0053 12.658 19.0053 11.64C19.0053 10.248 17.9253 9.312 16.1733 9.312C14.3493 9.312 13.1493 10.44 13.0773 12H10.1973C10.2453 8.856 12.8613 6.912 16.1733 6.912C19.5093 6.912 21.7893 8.544 21.7893 11.544C21.7893 13.4081 20.5056 14.4639 19.304 15.4521ZM14.3253 20.688H17.7813V24H14.3253V20.688Z\"\n          fill={color}\n        />\n      </g>\n      <defs>\n        <clipPath id=\"clip0_2_13\">\n          <rect width=\"32\" height=\"32\" fill=\"white\" />\n        </clipPath>\n      </defs>\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal, pebble} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_SearchLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M24.0414 22.156L29.752 27.8653L27.8654 29.752L22.156 24.0413C20.0317 25.7443 17.3894 26.6705 14.6667 26.6667C8.04269 26.6667 2.66669 21.2907 2.66669 14.6667C2.66669 8.04267 8.04269 2.66667 14.6667 2.66667C21.2907 2.66667 26.6667 8.04267 26.6667 14.6667C26.6706 17.3893 25.7443 20.0317 24.0414 22.156ZM21.3667 21.1667C23.0588 19.4265 24.0038 17.0939 24 14.6667C24 9.50934 19.8227 5.33334 14.6667 5.33334C9.50935 5.33334 5.33335 9.50934 5.33335 14.6667C5.33335 19.8227 9.50935 24 14.6667 24C17.0939 24.0038 19.4265 23.0588 21.1667 21.3667L21.3667 21.1667Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_SettingsLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M15.9999 2.66602C17.1533 2.66602 18.2706 2.81268 19.3386 3.08735C19.2999 3.82397 19.4656 4.55695 19.8174 5.20527C20.1693 5.85359 20.6935 6.39199 21.3323 6.76096C21.971 7.12993 22.6993 7.31509 23.4367 7.29598C24.1741 7.27687 24.8918 7.05424 25.5106 6.65268C27.0965 8.26461 28.2459 10.2537 28.8506 12.4327C28.1926 12.7673 27.6401 13.2775 27.2542 13.9068C26.8682 14.5361 26.664 15.2598 26.664 15.998C26.664 16.7362 26.8682 17.46 27.2542 18.0892C27.6401 18.7185 28.1926 19.2287 28.8506 19.5634C28.2459 21.7423 27.0965 23.7314 25.5106 25.3433C24.8917 24.9413 24.1737 24.7184 23.436 24.6991C22.6982 24.6799 21.9696 24.8651 21.3306 25.2343C20.6916 25.6035 20.1672 26.1422 19.8154 26.7909C19.4636 27.4397 19.2981 28.1731 19.3373 28.91C18.2706 29.1847 17.1533 29.3313 15.9999 29.3313C14.8466 29.3313 13.7293 29.1847 12.6613 28.91C12.7002 28.1733 12.5347 27.4401 12.183 26.7916C11.8312 26.1431 11.307 25.6045 10.6682 25.2354C10.0294 24.8662 9.30102 24.6809 8.5635 24.7C7.82599 24.7191 7.10811 24.9417 6.48925 25.3433C4.90334 23.7314 3.75391 21.7423 3.14925 19.5633C3.80722 19.2287 4.35974 18.7185 4.74567 18.0892C5.13159 17.46 5.33586 16.7362 5.33586 15.998C5.33586 15.2598 5.13159 14.5361 4.74567 13.9068C4.35974 13.2775 3.80722 12.7673 3.14925 12.4327C3.75391 10.2537 4.90334 8.2646 6.48925 6.65268C7.10813 7.05469 7.82614 7.27765 8.56387 7.29691C9.3016 7.31616 10.0303 7.13095 10.6693 6.76176C11.3083 6.39258 11.8327 5.85382 12.1845 5.20509C12.5363 4.55636 12.7017 3.82295 12.6626 3.08601C13.7279 2.81268 14.8453 2.66602 15.9999 2.66602ZM11.9999 9.07135C10.5453 9.91135 8.87192 10.1513 7.30125 9.82335C6.91459 10.3673 6.57992 10.946 6.30125 11.5527C7.39614 12.7749 8.00106 14.3584 7.99992 15.9993C7.99992 17.6793 7.37192 19.25 6.30125 20.446C6.57992 21.0527 6.91459 21.6313 7.30125 22.1753C8.90663 21.8386 10.5798 22.1064 11.9999 22.9273C13.4208 23.7469 14.489 25.062 14.9999 26.6207C15.6652 26.6823 16.3347 26.6823 16.9999 26.6207C17.5105 25.0615 18.5788 23.7458 19.9999 22.926C21.42 22.105 23.0932 21.8373 24.6986 22.174C25.0854 21.6302 25.4202 21.0512 25.6986 20.4447C24.604 19.2228 23.9991 17.6398 23.9999 15.9993C23.9988 14.3584 24.6037 12.7749 25.6986 11.5527C25.4202 10.9462 25.0853 10.3672 24.6986 9.82335C23.0932 10.1601 21.42 9.89231 19.9999 9.07135C18.5791 8.25184 17.5108 6.93666 16.9999 5.37802C16.3347 5.31635 15.6652 5.31635 14.9999 5.37801C14.4893 6.93715 13.421 8.25285 11.9999 9.07268L11.9999 9.07135ZM11.9999 15.9993C11.9999 14.9385 12.4213 13.9211 13.1715 13.1709C13.9216 12.4208 14.9391 11.9993 15.9999 11.9993C17.0608 11.9993 18.0782 12.4208 18.8283 13.1709C19.5785 13.9211 19.9999 14.9385 19.9999 15.9993C19.9999 17.0602 19.5785 18.0776 18.8283 18.8278C18.0782 19.5779 17.0608 19.9993 15.9999 19.9993C14.9391 19.9993 13.9216 19.5779 13.1715 18.8278C12.4213 18.0776 11.9999 17.0602 11.9999 15.9993ZM14.6666 15.9993C14.6666 16.353 14.8071 16.6921 15.0571 16.9422C15.3072 17.1922 15.6463 17.3327 15.9999 17.3327C16.3535 17.3327 16.6927 17.1922 16.9427 16.9422C17.1928 16.6921 17.3333 16.353 17.3333 15.9993C17.3333 15.6457 17.1928 15.3066 16.9427 15.0565C16.6927 14.8065 16.3535 14.666 15.9999 14.666C15.6463 14.666 15.3072 14.8065 15.0571 15.0565C14.8071 15.3066 14.6666 15.6457 14.6666 15.9993Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_Triangle(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 12;\n  const height = 14;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M2.00001 3.482V10.518L8.03001 7L2.00001 3.482ZM0.75201 0.439998L11.26 6.57C11.3353 6.61408 11.3978 6.6771 11.4412 6.7528C11.4846 6.8285 11.5074 6.91424 11.5074 7.0015C11.5074 7.08876 11.4846 7.17449 11.4412 7.25019C11.3978 7.32589 11.3353 7.38891 11.26 7.433L0.75201 13.563C0.675804 13.6075 0.589187 13.631 0.500955 13.6312C0.412722 13.6313 0.326016 13.6081 0.249641 13.564C0.173266 13.5198 0.109941 13.4562 0.0660977 13.3796C0.0222543 13.303 -0.000546618 13.2162 9.95048e-06 13.128V0.870997C-1.61235e-05 0.78302 0.0231715 0.696594 0.0672311 0.620445C0.111291 0.544296 0.174663 0.48112 0.250948 0.437297C0.327233 0.393473 0.413731 0.370554 0.501707 0.370852C0.589684 0.371151 0.676024 0.394657 0.75201 0.438998V0.439998Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {charcoal} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function PB_WhatToBringLine(props) {\n  const {color = charcoal, className = '', ratio = 1} = props;\n\n  // default dimensions\n  const width = 32;\n  const height = 32;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      viewBox={`0 0 ${width} ${height}`}\n      fill=\"none\"\n      style={style}\n      className={className}\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <path\n        d=\"M20.4883 4.58398L24.7697 12H29.3337V14.6667H27.7777L26.7683 26.7773C26.7406 27.1105 26.5887 27.4211 26.3427 27.6476C26.0967 27.874 25.7747 27.9998 25.4403 28H6.56033C6.22599 27.9998 5.90392 27.874 5.65795 27.6476C5.41199 27.4211 5.26008 27.1105 5.23233 26.7773L4.22166 14.6667H2.66699V12H7.22966L11.5123 4.58398L13.8217 5.91732L10.3097 12H21.6897L18.179 5.91732L20.4883 4.58398ZM25.1017 14.6667H6.89766L7.78699 25.3333H24.2123L25.1017 14.6667ZM17.3337 17.3333V22.6667H14.667V17.3333H17.3337ZM12.0003 17.3333V22.6667H9.33366V17.3333H12.0003ZM22.667 17.3333V22.6667H20.0003V17.3333H22.667Z\"\n        fill={color}\n      />\n    </svg>\n  );\n}\n","import React from 'react';\nimport {eviteGreen, white} from '~sass/reinvention_styleguide/base/_exports.sass';\n\nexport function SuccessIcon(props) {\n  const {color = eviteGreen, ratio = 1, className} = props;\n\n  // default dimensions\n  const width = 20;\n  const height = 20;\n\n  // Use ratio to calculate width and height\n  const style = {height: `${ratio * height}px`, width: `${ratio * width}px`};\n\n  return (\n    <svg\n      xmlns=\"http://www.w3.org/2000/svg\"\n      width={width}\n      height={height}\n      viewBox={`0 0 ${width} ${height}`}\n      style={style}\n      className={className}\n    >\n      <g className=\"a\" fill={white} stroke={color} strokeWidth={2}>\n        <circle className=\"c\" stroke=\"none\" cx=\"10\" cy=\"10\" r=\"10\" />\n        <circle className=\"d\" fill={white} cx=\"10\" cy=\"10\" r=\"9\" />\n      </g>\n      <g transform=\"translate(4.751 5.945)\">\n        <path\n          className=\"b\"\n          fill={color}\n          d=\"M20.493,20.662l-1.3-1.3a.263.263,0,0,0-.372,0l-4.77,4.77-2.237-2.243a.263.263,0,0,0-.186-.077h0a.263.263,0,0,0-.186.077l-1.3,1.293a.263.263,0,0,0,0,.372l3.718,3.729a.263.263,0,0,0,.186.077h0a.263.263,0,0,0,.186-.077l6.253-6.253a.263.263,0,0,0,0-.372Z\"\n          transform=\"translate(-10.073 -19.29)\"\n        />\n      </g>\n    </svg>\n  );\n}\n","import {pluralize} from './utils';\n\n/*\n    Given a UTC timestamp for a time in the past,\n    return a human-readable label describing how long ago that was.\n */\nfunction getTimeSinceUTCDate(utc_timestamp) {\n  const diffMinutes = utc_timestamp.diffMinutes(XDate());\n\n  let i = Math.floor(diffMinutes / 8640); // 6 days\n  if (i >= 1) return utc_timestamp.toString('MMMM d, yyyy');\n  i = Math.floor(diffMinutes / 1440); // Days\n  if (i >= 1) return `${pluralize('day', i)} ago`;\n  i = Math.floor(diffMinutes / 60); // Hours\n  if (i >= 1) return `${pluralize('hour', i)} ago`;\n  i = Math.floor(diffMinutes); // Minutes\n  if (i >= 1) return `${pluralize('min', i)} ago`;\n  return 'just now';\n}\n\nexport {getTimeSinceUTCDate};\n","import XDate from 'xdate';\nimport {history} from '../create/history';\nimport {appsignal} from './global';\n\nclass DeprecationError extends Error {\n  constructor(message) {\n    super(message);\n    this.name = 'DeprecationError';\n  }\n}\n\nexport const logIfNotDeprecated = (idString) => {\n  // Call this function in a file suspected of being unused & safe to delete from the repo.\n  // Throw an error if hit, so we can easily catch it in AppSignal & by the unique idString,\n  // can see what's still in use & follow up with further debugging.\n  try {\n    throw new DeprecationError(idString);\n  } catch (error) {\n    appsignal.sendError(error);\n  }\n};\n\nexport function pluralize(label, count) {\n  label = count === 1 ? label : `${label}s`;\n  return `${count} ${label}`;\n}\n\nexport function capitalizeFirstLetter(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport function insertAfter(newNode, node) {\n  node.parentNode.insertBefore(newNode, node.nextSibling);\n}\n\nexport function insertBefore(newNode, node) {\n  node.parentNode.insertBefore(newNode, node);\n}\n\nexport function isEventMoreThanTwoWeeksAgo(start) {\n  return start < new Date(new Date().setDate(new Date().getDate() - 14)).toISOString();\n}\n\nexport function htmlFromString(string) {\n  const div = document.createElement('div');\n  div.innerHTML = string;\n  return div.firstChild;\n}\n\nexport function isEmpty(obj) {\n  return Object.keys(obj).length === 0;\n}\n\n// open the specified url in a popup window, with optional\n// umm, options\nexport function popupWindow(url, options = null) {\n  const defaultOptions = {\n    width: 640,\n    height: 320,\n    resizable: 'yes',\n    scrollbars: 'no',\n    toolbar: 'no',\n    dependent: 'no',\n    window_name: 'DependentWindow',\n    location_bar: 'no',\n    status_bar: 'no',\n    align: 'topcenter',\n  };\n\n  const opts = {...defaultOptions, ...(options || {})};\n  let left_position = 1;\n  let top_position = 1;\n\n  if (opts.align === 'center') {\n    left_position = screen.width ? (screen.width - opts.width) / 2 : 0;\n    top_position = screen.height ? (screen.height - opts.height) / 2 : 0;\n  } else if (opts.align === 'topright') {\n    left_position = screen.width ? screen.width - opts.width : 0;\n    top_position = 1;\n  } else if (opts.align === 'topcenter') {\n    left_position = screen.width ? (screen.width - opts.width) / 2 : 0;\n    top_position = 1;\n  }\n\n  const align_value = `top=${top_position},left=${left_position}`;\n  const win = eval(\n    `window.open(url, '${opts.window_name}','width=${opts.width},height=${opts.height},resizable=${opts.resizable},scrollbars=${opts.scrollbars},toolbar=${opts.toolbar},dependent=${opts.dependent},screenX=1,screenY=1,${align_value},location=${opts.location_bar},status=${opts.status_bar}')`\n  );\n  win.focus();\n}\n\nconst MAX_EMAIL_LENGTH = 254;\n\n/**\n * valid_email(email)\n *\n * - says whether the provided email address is valid or not, and if not,\n *   why\n * - returns an Object with three attributes:\n *   {\n *      is_valid: <boolean>,\n *      error_code: <string>\n *      error_message: <string>\n *   }\n *  - possible error codes (strings):\n *    - 'email_empty'\n *    - 'email_invalid'\n *    - 'email_too_long'\n *  - callers can use those error codes to provide their own,\n *    context-specific error messaging\n *\n * */\nexport function valid_email(email) {\n  if (!email) {\n    return {\n      is_valid: false,\n      error_code: 'email_empty',\n      error_message: 'Email address is required',\n    };\n  }\n\n  const email_invalid_message = 'The email address is invalid';\n  const ret_email_invalid = {\n    is_valid: false,\n    error_code: 'email_invalid',\n    error_message: email_invalid_message,\n  };\n\n  // W3C HTML5 Validation\n  if (\n    !/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/i.test(\n      email\n    )\n  ) {\n    return ret_email_invalid;\n  }\n\n  // can't start with a dash\n  if (/^\\-/i.test(email)) {\n    return ret_email_invalid;\n  }\n\n  // require a tld\n  if (email.split('@')[1].split('.').length < 2) {\n    return ret_email_invalid;\n  }\n\n  if (email.length > MAX_EMAIL_LENGTH) {\n    return {\n      is_valid: false,\n      error_code: 'email_too_long',\n      error_message: `The email address is too long. Max length is ${MAX_EMAIL_LENGTH} characters.`,\n    };\n  }\n\n  if (email.search(/\\.\\./g) != -1) {\n    return {\n      is_valid: false,\n      error_code: 'two_consecutive_dots_not_allowed',\n      error_message: `Two consecutive dots are not allowed in an email address.`,\n    };\n  }\n\n  if (email.search(/.*\\.@/g) != -1) {\n    return {\n      is_valid: false,\n      error_code: 'cannot_end_with_period',\n      error_message: `Email address cannot end with a dot.`,\n    };\n  }\n\n  if (\n    [\n      'abuse@evite.com',\n      'postmaster@evite.com',\n      'hostmaster@evite.com',\n      'webmaster@evite.com',\n    ].includes(email.toLowerCase())\n  ) {\n    return {\n      is_valid: false,\n      error_code: 'not_valid_email_for_guest',\n      error_message: `Email address cannot be used`,\n    };\n  }\n  if ((email.match(/.*@.*\\.com.com$/g) || []).length > 1) {\n    return {\n      is_valid: false,\n      error_code: 'cannot_have_more_than_one_dot_com',\n      error_message: `Email address cannot have more than one .com parts`,\n    };\n  }\n\n  return {is_valid: true, error_code: '', error_message: ''};\n}\n\n/**\n * Single validation function for name/email\n *\n * @param field (string, 'name' or 'email')\n * @param value\n * @returns {string|null|string|string|*}\n */\nexport function validate_name_or_email(field, value) {\n  if (field === 'name' && (!value || value.trim() === '')) {\n    return 'Name is required';\n  }\n  if (field === 'email' && !valid_email(value).is_valid) {\n    return valid_email(value).error_message;\n  }\n\n  return null;\n}\n\n/**\n * parse_us_phone_number(phone_number_text)\n *\n * (also works for canadian phone numbers)\n *\n * - pulls out a 10-digit number sequence (string) from the text entered,\n *   if possible\n * - if an 11-digit sequence is found and the first is a 1 (old school\n *   for \"long distance\"), the first digit (1) is discarded\n * - returns an Object with three attributes:\n *   {\n *      is_valid: <boolean>,\n *      formatted: <string>\n *      digits: <string>\n *   }\n *\n * Examples:\n * - parse_us_phone_number('  310.123-4567 ') returns:\n *   {\n *      \"is_valid\": true,\n *      \"formatted\": \"(310) 123-4567\",\n *      \"digits\": \"3101234567\"\n *   }\n * - parse_us_phone_number('3456 tom ugh') returns:\n *   {\n *      \"is_valid\": false,\n *      \"formatted\": \"\",\n *      \"digits\": \"3456\"\n *   }\n *\n * */\nexport function parse_us_phone_number(phone_number_text) {\n  let digits = _get_digits_from(phone_number_text);\n  const is_standard_length = digits.length === 10;\n  const is_1_prefixed_standard_length = digits.length === 11 && digits.charAt(0) === '1';\n  if (\n    !(is_standard_length || is_1_prefixed_standard_length) ||\n    phone_number_text.indexOf('@') > 0\n  ) {\n    return {\n      is_valid: false,\n      formatted: '',\n      digits,\n    };\n  }\n  if (is_1_prefixed_standard_length) {\n    digits = digits.slice(1, 11); // toss the leading 1\n  }\n  // TODO should this also make sure a 10-digit digit sequence is a valid\n  // phone number, or is that overkill?\n  return {\n    is_valid: true,\n    formatted: _format_to_us_phone_number(digits),\n    digits,\n  };\n}\n\nexport function normalize_phone_number(phone_number_string) {\n  // Returns the original string if it doesn't validate\n  const parsed = parse_us_phone_number(phone_number_string);\n  if (parsed.is_valid) return `+1${parsed.digits}`;\n  return phone_number_string;\n}\n\n// return just the digit characters from the given string\nexport function _get_digits_from(string_with_digits) {\n  const allDigitChars = string_with_digits.match(/\\d+/g) || [];\n  return allDigitChars.join('');\n}\n\nexport function pretty_format_phone_number(phone_digits_string) {\n  // Returns a pretty formatted phone number, or the original if it is not a normalized phone number\n  if (!phone_digits_string) return phone_digits_string;\n  let digits = phone_digits_string.trim();\n  if (digits[0] === '+') digits = digits.slice(1);\n  if (digits[0] === '1' && digits.length === 11) digits = digits.slice(1);\n  if (digits.match(/\\D/) || digits.length !== 10)\n    // Not a proper phone number, so return the original string\n    return phone_digits_string;\n  return _format_to_us_phone_number(digits);\n}\n\n// Ex: \"3101234567\" ==> \"(310) 123-4567\"\nfunction _format_to_us_phone_number(digits) {\n  return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6, 10)}`;\n}\n\nexport function getURLParameter(name) {\n  // mocks\n  const search = window.mock_location_search || window.location.search;\n  const regex = new RegExp(`[?|&]${name}=` + `([^&;]+?)(&|#|;|$)`);\n  const matches = regex.exec(search) || [null, ''];\n  const data = decodeURIComponent(matches[1].replace(/\\+/g, '%20'));\n  if (data) return data;\n  return null;\n}\n\n/**\n * checks if the url contains a certain string\n * @param url\n * @param str\n */\nexport function hasStringInUrl(url, str) {\n  const urlArr = url.split('/');\n  if (urlArr.length) {\n    return urlArr.includes(str);\n  }\n  return false;\n}\n\n/**\n * stolen from the plugin jquery.parseParams\n *\n * @param query the url query (minus the ?)\n * @returns object of url parameters\n */\nexport function parseParams(query) {\n  const re = /([^&=]+)=?([^&]*)/g;\n  const decodeRE = /\\+/g; // Regex for replacing addition symbol with a space\n  function decode(str) {\n    return decodeURIComponent(str.replace(decodeRE, ' '));\n  }\n\n  const params = {};\n  let e;\n  while ((e = re.exec(query))) {\n    let k = decode(e[1]);\n    const v = decode(e[2]);\n    if (k.substring(k.length - 2) === '[]') {\n      k = k.substring(0, k.length - 2);\n    }\n    (params[k] || (params[k] = [])).push(v);\n  }\n  for (const key in params) {\n    if (params[key].length === 1) {\n      params[key] = params[key][0];\n    }\n  }\n  return params;\n}\n\nexport function stringifyParams(params) {\n  const paramList = [];\n  for (const key in params) {\n    if (params.hasOwnProperty(key)) {\n      if (typeof params[key] === 'object') {\n        for (let i = 0; i < params[key].length; ++i) {\n          const value = encodeURIComponent(params[key][i]);\n          paramList.push(`${key}=${value}`);\n        }\n      } else {\n        const value = encodeURIComponent(params[key]);\n        paramList.push(`${key}=${value}`);\n      }\n    }\n  }\n  paramList.sort();\n  return Array.from(new Set(paramList).values()).join('&');\n}\n\nexport const addParamsToUrl = (url, params) => {\n  // adds the given parameters (string like \"color=red&size=medium\"\n  // or object like {color: \"red\", size: \"medium\"}) and adds to the\n  // given url (which can have params already or not)\n  const paramsType = typeof params;\n  switch (paramsType) {\n    case 'string':\n      if (!url.includes('?')) {\n        url += '?';\n      }\n\n      const [path, currentQuery] = url.split('?');\n      const paramsToAdd = currentQuery ? `${currentQuery}&${params}` : params;\n      url = `${path}?${stringifyParams(parseParams(paramsToAdd))}`;\n      break;\n\n    case 'object':\n      const keyNames = Object.keys(params);\n      for (const idx in keyNames) {\n        const key = keyNames[idx];\n        const val = params[key] || '';\n        url = addParamsToUrl(url, `${key}=${val}`);\n      }\n      break;\n\n    default:\n      throw \"Unsupported data type! addParamsToUrl() only supports strings and objects for the 'params' argument.\";\n  }\n  return url;\n};\n\nexport function isFunction(value) {\n  return typeof value === 'function' || value instanceof Function;\n}\n\n/**\n * server side expects offset timezones in formats like -0700\n *\n * * the sign must always be present\n * * server does not expect a : to separate minutes and hours\n *\n * @param date\n * @returns {string}\n */\nexport function formatTimezoneOffset(date = null) {\n  date = date || new Date();\n\n  // I had code to do this, but it seems with the native date object very difficult\n  // to figure out the offset reliably given that getTimezoneOffset returns the local\n  // offset no matter what\n  date = new XDate(date);\n\n  let result = date.toString('zzz');\n  if (result === 'Z') {\n    result = '+0000';\n  }\n  return result.replace(':', '');\n}\n\nexport function isJson(str) {\n  try {\n    JSON.parse(str);\n  } catch (e) {\n    return false;\n  }\n  return true;\n}\n\nexport function isStringEmptyOrAllWhitespace(inputString) {\n  return !/\\S/.test(inputString);\n}\n\nexport function numberWithCommas(x) {\n  return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n}\n\nexport function areEqual(array, otherArray) {\n  const s = new Set(array);\n  return otherArray.length === array.length && otherArray.every((e) => s.has(e));\n}\n\nexport function isValidURL(url_string) {\n  return /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:[/?#]\\S*)?$/i.test(\n    url_string\n  );\n}\n\nexport function httpsIfyUrl(url) {\n  return url.replace(/^http:/, 'https:');\n}\n\nfunction pad(value) {\n  return value < 10 ? `0${value}` : value;\n}\n\nfunction createUtcOffsetFromDate(date) {\n  const sign = date.getTimezoneOffset() > 0 ? '-' : '+';\n  const offset = Math.abs(date.getTimezoneOffset());\n  const hours = pad(Math.floor(offset / 60));\n  const minutes = pad(offset % 60);\n  return `${sign + hours}:${minutes}`;\n}\n\nexport function getTimezone() {\n  const {TIMEZONES} = window;\n  const localUtcOffset = createUtcOffsetFromDate(new Date());\n  let timezoneId;\n  let timezoneAbbr;\n\n  for (let i = 0; i < TIMEZONES.length; i++) {\n    const {utc_offset} = TIMEZONES[i];\n\n    if (localUtcOffset === utc_offset) {\n      timezoneId = TIMEZONES[i].timezone_id;\n      timezoneAbbr = TIMEZONES[i].timezone_abbr;\n      return {timezoneId, timezoneAbbr};\n    }\n  }\n}\n\nexport const hasRegistry = (registriesData) =>\n  !!(\n    window.has_gift_registries ||\n    (registriesData?.registry_urls?.length && registriesData?.registry_name?.length)\n  );\n\nexport function registryUrl(registry, qa_id) {\n  // EVT-25885 some data has been corrupted when registry toggled off then on; it was saved only with a name.\n  // Prevents guests from seeing blank RSVP success page.\n  if (!registry) return null;\n\n  const {url} = registry;\n\n  // If amazon & asc_campaign then add qa-id if possible\n  if (\n    !qa_id ||\n    qa_id.length == 0 ||\n    url.indexOf('amazon') == -1 ||\n    url.indexOf('asc_source=') == -1\n  )\n    return url;\n\n  // Note that this assumes the last http get argument is asc_source and appends to it\n  return `${url}%7C${qa_id}`;\n}\n\nexport function changePage(newPage) {\n  // Change the current url\n  history.push(newPage);\n\n  // Tell Google Analytics about being on a new page\n  dataLayer.push({event: 'pageview', page_title: 'drryl', page_path: newPage});\n}\n\nexport function virtualPageview(newPage, pageTitle) {\n  dataLayer.push({\n    event: 'pageview',\n    page_title: pageTitle,\n    page_path: newPage,\n  });\n}\n\n/**\n * This function recursively deletes a property from an object, no matter how deeply it's nested.\n *\n * @param {Object} obj - The object from which to delete the property.\n * @param {string} propertyName - The name of the property to delete.\n */\nexport function removeNestedProperty(obj, propertyName) {\n  for (const prop in obj) {\n    if (prop === propertyName) {\n      delete obj[prop];\n    } else if (typeof obj[prop] === 'object') {\n      removeNestedProperty(obj[prop], propertyName);\n    }\n  }\n}\n","import {renderToStaticMarkup} from 'react-dom/server';\nimport parseHTML from 'html-react-parser';\n\nconst affiliates = {\n  AMAZON: 'amazon',\n  WALMART: 'walmart',\n  TARGET: 'target',\n};\nconst WALMART_AFFILIATE_URL =\n  'https://goto.walmart.com/c/3858077/565706/9383?veh=aff&sourceid=imp_000011112222333344';\nconst TARGET_AFFILIATE_URL =\n  'https://goto.target.com/c/2310483/81938/2092?subId1=A&subId2=B&subId3=C&sharedid=D&partnerpropertyid=2052984';\n\nconst affiliatesTags = {\n  [affiliates.AMAZON]: addAmazonAffiliateTag,\n  [affiliates.WALMART]: (url) => addAffiliateTag(url, WALMART_AFFILIATE_URL),\n  [affiliates.TARGET]: (url) => addAffiliateTag(url, TARGET_AFFILIATE_URL),\n};\n\nexport function extractHtmlATags(htmlString) {\n  const regex = /<a[^>]*>([^<]+)<\\/a>/gi;\n  return htmlString.match(regex);\n}\n\nexport function addAmazonAffiliateTag(url, params) {\n  const urlObj = new URL(url);\n  for (const [key, value] of Object.entries(params)) {\n    urlObj.searchParams.set(key, value);\n  }\n  return urlObj.toString();\n}\n\nexport function addAffiliateTag(url, affiliateUrl) {\n  const urlObj = new URL(affiliateUrl);\n  urlObj.searchParams.set('u', url);\n  return urlObj.toString();\n}\n\nexport function getURLOwner(url) {\n  const domainToOwner = {\n    'amazon.com': affiliates.AMAZON,\n    'amazon.ca': affiliates.AMAZON,\n    'walmart.com': affiliates.WALMART,\n    'target.com': affiliates.TARGET,\n  };\n\n  const regex = /https?:\\/\\/(www\\.)?(amazon\\.com|amazon\\.ca|walmart\\.com|target\\.com)/;\n  const match = url.match(regex);\n\n  if (match) {\n    return domainToOwner[match[2]];\n  }\n\n  return null;\n}\n\nexport function putAffiliateTags(html, params = {}) {\n  let htmlString = renderToStaticMarkup(html);\n  const aTags = extractHtmlATags(htmlString);\n  if (!aTags) {\n    return html;\n  }\n\n  aTags.forEach((aTag) => {\n    const url = aTag.match(/href=\"([^\"]*)\"/)[1];\n    const owner = getURLOwner(url);\n    if (owner) {\n      const newUrl = affiliatesTags[owner](url, params);\n      const hrefRegex = new RegExp(`href=\"${url.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')}\"`, 'g');\n      htmlString = htmlString.replace(hrefRegex, `href=\"${newUrl}\"`);\n    }\n  });\n\n  return parseHTML(htmlString);\n}\n","import * as c from '../constants/event-origins';\nimport {httpsIfyUrl} from '../utils';\n\n// This file intended to hold all event util functions shared across various apps\n\nexport const getUsedAsTypeName = (used_as) => {\n  // Logic should match the corresponding backend function, _get_used_as_type_name\n  if (used_as === 'save_the_date') {\n    return 'Save the Date';\n  }\n  if (used_as === 'card') {\n    return 'Card';\n  }\n  return 'Invitation';\n};\n\nexport const isSaveTheDateByUsedAs = (usedAs) => usedAs === 'save_the_date';\n\n// ORIGIN-BASED HELPERS\nexport const isGreetingCard = (origin) => c.CARD_ORIGINS.includes(origin);\n\nexport const isLegacyGreetingCard = (origin) => c.LEGACY_GRC_ORIGINS.includes(origin);\n\nexport const isFabricGreetingCard = (origin) => c.FABRIC_GRC_ORIGINS.includes(origin);\n\nexport const isFabric = (origin) => c.FABRIC_EVENT_ORIGINS.includes(origin);\n\nexport const isLegacyPremium = (origin) => c.LEGACY_PREMIUM_ORIGINS.includes(origin);\n\n// EVENT STATUS-BASED HELPERS\nexport const isPast = (status) => status === 'past';\n\nexport const isDraft = (status) => status === 'draft';\n\nexport const prettyStatus = (status) => {\n  if (status === 'cancelled') {\n    return 'canceled';\n  }\n  return status;\n};\n\nexport const isCanceled = (status) => prettyStatus(status) === 'canceled';\n\n// EVENT FLAG HELPERS\nexport const isRsvpOff = (rsvpOff) => !rsvpOff;\n\n// EVENT TYPE-BASED HELPERS\n// TODO: this doesn't make sense: window.mealOptionsEventTypes?.[0].includes(eventType);\n// when eventType is an empty string, it checks if the first string `includes` the empty\n// string, which is true. Why are we checking whether the array of characters contains\n// the full event type?\nexport const isMealOptionsEventType = (eventType) => {\n  const isMealOptionsOnViewInvitation = window.mealOptionsEventTypes?.includes(eventType);\n  const isMealOptionsOnCreateFlow = window.mealOptionsEventTypes?.[0].includes(eventType);\n  return !!eventType && (isMealOptionsOnViewInvitation || isMealOptionsOnCreateFlow);\n};\n\n// FABRIC ART HELPERS\nexport const fabricDesignWithTextBorderObjectsRemoved = (design) => {\n  if (!design) return design;\n  const updated = {...design};\n  design.backgroundImage = {...design.backgroundImage};\n  if (updated.objects) {\n    updated.objects = updated.objects.filter((obj) => {\n      obj = {...obj};\n      return !(!obj || obj.type === 'textBorder');\n    });\n  }\n  return updated;\n};\n\n/**\n * Returns a copy of a single fabric design with corrected settings for cross-origin images\n * @param {Fabric Design Object} design\n * @return {Fabric Design Object}\n */\nexport const fabricDesignWithCrossOriginUpdates = (design) => {\n  if (!design) return design;\n  const updated = {...design};\n  let d = design.backgroundImage;\n  if (d) {\n    d = {...d};\n    if (d.originalUrl) d.originalUrl = httpsIfyUrl(d.originalUrl);\n    if (d.src) d.src = d.src.replace('http:', 'https:');\n    d.crossOrigin = 'anonymous';\n    updated.backgroundImage = d;\n  }\n\n  if (updated.objects) {\n    updated.objects = updated.objects.map((obj) => {\n      obj = {...obj};\n      if (obj && ['image', 'uYOImage'].indexOf(obj.type) > -1) {\n        if (obj.originalUrl) obj.originalUrl = httpsIfyUrl(obj.originalUrl);\n        if (obj.src) obj.src = httpsIfyUrl(obj.src);\n        obj.crossOrigin = 'anonymous';\n      }\n      return obj;\n    });\n  }\n  return updated;\n};\n\n/**\n * Returns a copy of fabric_editable_art with corrected settings for cross-origin images for all categories\n *\n * @param {Fabric Editable Art Object} fabricArt\n * @return {Fabric Editable Art Object}\n */\nexport const fabricArtWithHttpsForAllImgPaths = (fabricArt) => {\n  if (!fabricArt) return null;\n\n  // Port all urls to https and add crossOrigin: anonymous\n  const fabricArtByCategoryKeys = fabricArt.editable_art\n    ? {...fabricArt.editable_art}\n    : {...fabricArt};\n  const updatedFabricArt = {...fabricArtByCategoryKeys};\n\n  for (const k of Object.keys(updatedFabricArt)) {\n    updatedFabricArt[k] = fabricDesignWithCrossOriginUpdates(updatedFabricArt[k]);\n  }\n\n  return updatedFabricArt;\n};\n","import DOMPurify from 'dompurify';\nimport linkifyHtml from 'linkifyjs/html';\nimport parseHTML from 'html-react-parser';\n\n/**\n * Parses a string to contain HTML escape characters.\n *\n * @param {Object} unsafe - The string to add escape chars to.\n */\nexport function escapeHtml(unsafe) {\n  return unsafe\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#039;');\n}\n\n/**\n * Sanitizes a string by escaping HTML chars and returns a newly parsed element.\n * Relevant to protect agains cross-site scripting.\n *\n * @param {Object} inputString - The string to sanitize.\n */\nexport function sanitizeString(inputString) {\n  inputString = escapeHtml(inputString);\n  inputString = DOMPurify.sanitize(inputString);\n  inputString = linkifyHtml(inputString).replace(/href/g, \"target='_blank' href\");\n  return parseHTML(inputString);\n}\n","import React from 'react';\n\nexport function CustomLogoImage(props) {\n  const {custom_logo, layout, zIndex = 999} = props;\n  const logoData = custom_logo[layout];\n\n  const onLogoClick = (e) => {\n    e.preventDefault();\n    if (props.showEditLogoDialog) {\n      props.showEditLogoDialog();\n    }\n  };\n\n  if (logoData) {\n    const {width = 100, x = 0, y = 0} = logoData;\n    const style = {\n      position: 'absolute',\n      width: `${width}%`,\n      left: `${x}%`,\n      top: `${y}%`,\n      zIndex,\n    };\n\n    const img = <img id=\"custom-logo-img\" alt=\"custom logo\" src={custom_logo.url} style={style} />;\n\n    return !props.clickable ? (\n      img\n    ) : (\n      <button className=\"button-transparent\" onClick={onLogoClick}>\n        {img}\n      </button>\n    );\n  }\n\n  return null;\n}\n","export const BABY_CATEGORIES = ['baby_shower', 'baby_sprinkle', 'sip_and_see', 'gender_reveal'];\nexport const WEDDING_CATEGORIES = [\n  'wedding_collection',\n  'engagement',\n  'save_the_date',\n  'weddings',\n  'bridal_shower',\n];\nexport const GET_TOGETHER_CATEGORIES = ['housewarming', 'graduation'];\n\nexport const BIRTHDAY_CATEGORIES = [\n  'birthday_forher',\n  'birthday_forhim',\n  'birthday_forkids',\n  'babys_first',\n  'birthday_milestones',\n  'birthday_forteens',\n];\n\n// EVT-20361 Used to bucket for Amazon Giftlist\nexport const HOLIDAY_CATEGORIES = ['christmas', 'hanukkah', 'holiday_party', 'kwanzaa'];\n\nexport const EXCLUDED_CATEGORIES = ['funeral_memorial_service'];\n\nexport const should_show_registry_for_event_type = (event_type) =>\n  !EXCLUDED_CATEGORIES.includes(event_type);\n","import React, {Component} from 'react';\nimport {evite} from 'evite';\n\nexport class StatusAnimation extends Component {\n  render() {\n    const {status, styleModifiers, style, children} = this.props;\n    const childModifiers = evite.styleModifiers('status-animation', {\n      [status]: true,\n      ...styleModifiers,\n    });\n\n    return (\n      <div className={`status-animation__status-animation ${childModifiers} `} style={style}>\n        <i className={`status-animation__icon ${childModifiers}`} />\n        {children}\n      </div>\n    );\n  }\n}\n","import {createBrowserHistory} from 'history';\n\nexport const history = createBrowserHistory();\n","import XDate from 'xdate';\n\nexport const cityAddressLine = (event) => {\n  let line = '';\n\n  if (event.city) line += `${event.city}, `;\n\n  if (event.state) line += event.state;\n\n  if (event.zip_code) line += ` ${event.zip_code}`;\n\n  return line;\n};\n\nexport const cityZip = (event) => {\n  let cityZip = '';\n  if (event.city) {\n    cityZip += event.city;\n    if (event.state || event.zip_code) cityZip += ', ';\n  }\n  if (event.state) {\n    cityZip += event.state;\n    if (event.zip_code) cityZip += ' ';\n  }\n  if (event.zip_code) cityZip += ` ${event.zip_code}`;\n  return cityZip;\n};\n\n// convert to a valid ISO string format from a date string\n// that is formatted like \"20171114T193000\"\nexport const convertToIso = (dateTimeStr) => {\n  const isAlreadyFormatted = !dateTimeStr || (dateTimeStr && dateTimeStr.split('-').length > 2);\n  if (isAlreadyFormatted) return dateTimeStr;\n\n  const eviteDatePattern = /(\\d{4})(\\d{2})(\\d{2})T(\\d{2})(\\d{2})(\\d{2})/;\n  return dateTimeStr.replace(\n    eviteDatePattern,\n    (match, year, month, date, hour, min, sec) => `${year}-${month}-${date}T${hour}:${min}:${sec}`\n  );\n};\n\nexport const templateDates = (_startDateTime, _endDateTime, timezone, dateFormat, timeFormat) => {\n  const startDateTime = new XDate(_startDateTime || '');\n  const endDateTime = new XDate(_endDateTime || '');\n  const dateFormatStr = dateFormat || 'dddd, MMMM d ';\n  const timeFormatStr = timeFormat || 'h:mm TT';\n\n  const isValidStart = startDateTime.toString('i') !== 'Invalid Date';\n  const isValidEnd = endDateTime.toString('i') !== 'Invalid Date';\n\n  let startDateStr;\n  let startTimeStr = '';\n  let datesLineOne = '';\n  if (isValidStart) {\n    startDateStr = startDateTime.toString(dateFormatStr);\n    if (_startDateTime.length >= 16) startTimeStr = startDateTime.toString(timeFormatStr);\n    datesLineOne = `${startDateStr} at ${startTimeStr} ${!isValidEnd ? ` ${timezone}` : ''}`;\n  }\n\n  let datesLineTwo = '';\n  if (isValidEnd) {\n    datesLineOne = datesLineOne.replace(' at', ' from');\n\n    const endDateStr = endDateTime.toString(dateFormatStr);\n    const endTimeStr = _endDateTime.length >= 16 ? endDateTime.toString(timeFormatStr) : '';\n\n    if (isValidStart && startDateStr === endDateStr) {\n      datesLineTwo = ` to ${endTimeStr} ${timezone}`;\n    } else {\n      datesLineTwo = ` to ${endDateStr} at ${endTimeStr} ${timezone}`;\n    }\n  }\n  // Monday, May 10 from 6:00 PM to 10:00 PM PT\n  // Monday, May 10 from 10:00 PM to Tuesday, May 11 at 2:00 AM PT\n  return {start_formatted: datesLineOne, end_formatted: datesLineTwo};\n};\n\nexport const inviteStatus = () => {\n  // Use 'Sent' for cards, and 'Invited' for invitations\n  if (window.is_invite === false) return 'Sent';\n  return 'Invited';\n};\n\nexport const guestTitle = () => {\n  // Use 'Recipient' for cards, and 'Guest' for invitations\n  if (window.is_invite === false) return 'Recipient';\n  return 'Guest';\n};\n\nexport function formatCents(cents) {\n  let neg = '';\n  if (cents < 0) {\n    neg = '-';\n    cents *= -1;\n  }\n  cents = (cents < 10 ? '0' : '') + cents;\n  return `${neg}$${cents.substring(0, cents.length - 2)}.${cents.substring(cents.length - 2)}`;\n}\n\n/*\n  Display the year only if it is not the current year,\n  and end date only if its a different day.\n*/\nexport function dateTimesWithCurrentYear(event) {\n  if (!event.start_datetime) return {start_formatted: '', end_formatted: ''};\n\n  try {\n    const currentYear = new Date().getFullYear();\n    const startYear = Number.parseInt(event.start_datetime.substring(0, 4), 10);\n    const dateFormat = currentYear === startYear ? 'dddd, MMMM d' : 'dddd, MMMM d, yyyy';\n    const timezone = event.known_timezone_abbr;\n\n    const {start_formatted, end_formatted} = templateDates(\n      convertToIso(event.start_datetime),\n      convertToIso(event.end_datetime),\n      timezone,\n      dateFormat\n    );\n    return {start_formatted, end_formatted};\n  } catch (e) {\n    evite.warn(`Failed to parse date: ${e}`);\n  }\n}\n","import React from 'react';\nimport './MessageTextArea.sass';\n\nexport function MessageTextArea(props) {\n  const {textareaChanged, message} = props;\n\n  return (\n    <div className=\"message-textarea\">\n      <label htmlFor=\"message-textarea\" className=\"message-textarea__label\">\n        Message:\n      </label>\n      <textarea\n        id=\"message-textarea\"\n        className=\"message-textarea__textarea\"\n        rows=\"30\"\n        cols=\"80\"\n        value={message}\n        onChange={textareaChanged}\n        maxLength=\"1000\"\n      />\n    </div>\n  );\n}\n","import React from 'react';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport function Heading(props) {\n  const {isFuneral, heading, textClass} = props;\n  const isPremium = window.is_plus;\n  let headingText;\n\n  if (heading) {\n    // For Guest Success Page -- shows RSVP status\n    headingText = heading;\n  } else {\n    // For Host Success Page\n    const eventLabel = window.event_label; // should be available...\n\n    const transactionData = window.transaction_data;\n    const offer = transactionData?.line_items && transactionData?.line_items[0];\n\n    const isProPurchase =\n      transactionData?.what_the_user_received === 'premium_pass_subscription' &&\n      !isPartyPassPurchase;\n\n    const isPartyPassPurchase = window.is_party_pass;\n\n    const isALaCartePurchase =\n      window.is_standalone_purchase && transactionData?.what_the_user_received === 'event_sends';\n\n    const defaultHeading = isFuneral ? 'Your invitation is on its way' : 'Congratulations!';\n\n    if (isProPurchase) {\n      headingText = `You just purchased Evite Pro for your account${!isFuneral ? '!' : ''}`;\n    } else if (isPartyPassPurchase) {\n      headingText = `Woohoo, you now have an Evite Party Pass!`;\n    } else if (isALaCartePurchase) {\n      headingText = `You've purchased a ${offer.name} Package with invitations for up to ${offer.num_sends_provided} guests!`;\n    } else if (!isPremium || (isPremium && eventLabel)) {\n      headingText = defaultHeading;\n    } else {\n      headingText = 'Thank you for your order!';\n    }\n  }\n\n  return (\n    <Typography variant=\"header3\" as=\"h1\" classNames={textClass}>\n      {headingText}\n    </Typography>\n  );\n}\n","import React from 'react';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {GuestPageDisplayCondition} from '~/common/fabric/EventGuests/components/DisplayCondition/GuestPageDisplayCondition';\n\nexport function Subheading(props) {\n  const {isFuneral} = props;\n\n  const subText = props.subText\n    ? props.subText\n    : isFuneral\n      ? \"We'll take it from here\"\n      : 'Your invitation is on its way to your guests.';\n\n  return (\n    <Typography variant=\"paragraph2\" color=\"pebble\" classNames=\"success-header__subtext\">\n      <GuestPageDisplayCondition preConditions={[!props.subText, !isFuneral]} original={subText}>\n        Your invitation has been created.\n      </GuestPageDisplayCondition>\n    </Typography>\n  );\n}\n","import React from 'react';\nimport {Link} from '~/common/_pb_components/atoms/Link';\nimport {Subheading} from '~/event/success/Subheading';\nimport {Heading} from '~/event/success/Heading';\nimport {GuestPageDisplayCondition} from '~/common/fabric/EventGuests/components/DisplayCondition/GuestPageDisplayCondition';\n\nexport function SuccessHeader(props) {\n  const {\n    isFuneral,\n    ctaText,\n    cta,\n    qaId,\n    fullWidth,\n    heading = null,\n    showSubtext = false,\n    textClass = '',\n    showImage = true,\n    subText = '',\n    guestsLink = '',\n  } = props;\n  const animation = isFuneral ? 'dove' : 'highfive';\n\n  function CTAButton() {\n    return (\n      <Link href={cta} as=\"primary\" data-qa-id={qaId} fullWidth={fullWidth}>\n        {ctaText}\n      </Link>\n    );\n  }\n\n  return (\n    <div className=\"success-header\">\n      {showImage && (\n        <img src={`/assets/images/event/success/${animation}.gif`} height=\"164\" alt=\"\" />\n      )}\n      <Heading heading={heading} textClass={textClass} isFuneral={isFuneral} />\n      {showSubtext && <Subheading subText={subText} isFuneral={isFuneral} />}\n      <GuestPageDisplayCondition preConditions={[guestsLink]} original={cta && <CTAButton />}>\n        <div className=\"success-header__manage\">\n          <Link href={guestsLink} as=\"primary\" data-qa-id=\"addGuestsButton\" fullWidth={fullWidth}>\n            Add Guests\n          </Link>\n          {cta && (\n            <Link href={cta} data-qa-id={qaId} fullWidth={fullWidth}>\n              {ctaText}\n            </Link>\n          )}\n        </div>\n      </GuestPageDisplayCondition>\n    </div>\n  );\n}\n","import React from 'react';\n\nexport function GiftlistImage(props) {\n  const {giftlistType, width} = props;\n\n  return (\n    <div className=\"giftlist-image-wrap\">\n      <img\n        src={`/assets/images/giftlist/${giftlistType.toLowerCase()}.png`}\n        alt=\"Amazon\"\n        width={width}\n        className=\"giftlist-image\"\n      />\n      <p className=\"fine-print\">\n        Powered by <img src=\"/assets/images/logos/amazon-logo-v2@2x.png\" height=\"20\" alt=\"Amazon\" />\n      </p>\n    </div>\n  );\n}\n","import React from 'react';\nimport {getGiftlistType} from './utils';\nimport {GiftlistImage} from './GiftlistImage';\nimport {capitalizeFirstLetter} from '~/common/utils';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_ClickOutLine} from '~/common/svg/PB_ClickOutLine';\nimport './GuestGiftlist.sass';\n\nexport function GuestGiftlist() {\n  const giftlistType = capitalizeFirstLetter(getGiftlistType());\n  const {isMobile} = evite.detects;\n  const url = window.evite_event.gift_list_url;\n  const hostName = window.evite_event.host_name;\n  if (!url) return;\n\n  function GuestHeading() {\n    return (\n      <Typography variant=\"header3\" color=\"pebble\">\n        {hostName}'s {giftlistType} Gift List\n      </Typography>\n    );\n  }\n\n  function GuestCopy() {\n    return (\n      <Typography variant=\"paragraph1\" color=\"pebble\">\n        {hostName} has put a gift list together with some great choices.\n      </Typography>\n    );\n  }\n\n  function GuestCTA() {\n    return (\n      <a\n        className=\"button secondary large\"\n        href={url}\n        title=\"Go to the giftlist\"\n        data-qa-id=\"giftlist__link\"\n        target=\"_blank\"\n        rel=\"noreferrer\"\n      >\n        Browse {giftlistType} Gift List <PB_ClickOutLine ratio={0.75} />\n      </a>\n    );\n  }\n\n  if (isMobile) {\n    return (\n      <div className=\"giftlist-wrap\">\n        <GuestHeading />\n        <div className=\"giftlist-text-image\">\n          <GuestCopy />\n          <GiftlistImage giftlistType={giftlistType} width=\"132\" />\n        </div>\n\n        <GuestCTA />\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"giftlist-wrap\">\n      <div className=\"giftlist-guest-desktop-inner\">\n        <div className=\"giftlist-left\">\n          <GuestCopy />\n          <GuestCTA />\n        </div>\n        <GiftlistImage giftlistType={giftlistType} width=\"132\" />\n      </div>\n    </div>\n  );\n}\n","import {BIRTHDAY_CATEGORIES, HOLIDAY_CATEGORIES} from '~/create/components/GiftRegistries/utils';\nimport {stringifyParams} from '~/common/utils';\n\nexport const getGiftlistType = () => {\n  const eventType = window.evite_event.event_type;\n  let giftlistType;\n\n  if (BIRTHDAY_CATEGORIES.includes(eventType)) {\n    giftlistType = 'birthday';\n  } else if (HOLIDAY_CATEGORIES.includes(eventType)) {\n    giftlistType = 'holiday';\n  } else {\n    giftlistType = 'custom';\n  }\n\n  return giftlistType;\n};\n\nexport function getCompiledAmazonGiftlistUrl() {\n  const event = window.evite_event;\n\n  const params = stringifyParams({\n    eventOwnerName: event.host_name,\n    month: event.start_datetime.slice(4, 6),\n    day: event.start_datetime.slice(6, 8),\n    year: event.start_datetime.slice(0, 4),\n    state: event.state || '',\n    registryName: event.title,\n    showFullDetails: 1,\n    tag: 'amazongiftlists-20',\n    asc_campaign: escape('giftlist=treatment'),\n  });\n\n  const giftlistUrl = `https://www.amazon.com/registries/${getGiftlistType()}/create?${params}`;\n\n  return giftlistUrl;\n}\n","import React, {Component} from 'react';\nimport {messagingStore} from '~/messaging/store';\nimport {rtdb, serverPaths} from '~/messaging/database';\nimport {ModalDialog} from '~/modal/dialog_modal';\nimport './AcceptDecline.sass';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport class AcceptDecline extends Component {\n  constructor(props) {\n    super(props);\n    this.userId = messagingStore.userId;\n    this.state = {\n      showDeclineModal: false,\n    };\n  }\n\n  updateApprovalStatus(status) {\n    const {groupId, onAcceptDeclineChanged} = this.props;\n    const approvalStatusPath = `${serverPaths.guests}/${this.userId}/groups/${groupId}`;\n    this.approvalStatusDoc = rtdb.get(approvalStatusPath);\n    this.onDisconnect = this.approvalStatusDoc.onDisconnect();\n    try {\n      this.approvalStatusDoc.update({approvalStatus: status});\n      this.onDisconnect.update({approvalStatus: status});\n      onAcceptDeclineChanged(status);\n    } catch (e) {\n      evite.error('failed on updating status', e);\n    }\n  }\n\n  blockConversation = () => {\n    this.updateApprovalStatus('declined');\n    window.dataLayer.push({\n      event: 'newChatRequest',\n      eventLabel: 'decline',\n      eventValue: this.props.participants ? this.props.participants.length : '',\n    });\n  };\n\n  acceptConversation = () => {\n    this.updateApprovalStatus('accepted');\n    window.dataLayer.push({\n      event: 'newChatRequest',\n      eventLabel: 'accept',\n      eventValue: this.props.participants ? this.props.participants.length : '',\n    });\n  };\n\n  onBlockClicked = () => {\n    this.setState({showDeclineModal: true});\n  };\n\n  onCancelDecline = () => {\n    this.setState({showDeclineModal: false});\n  };\n\n  render() {\n    const {profiles, createdBy} = this.props;\n    const senderId = Object.keys(profiles).find((x) => x === createdBy);\n    const sender = profiles[senderId];\n    if (sender) {\n      const attendingCTA = `You have received a message from ${sender.name}. You are both invited to ${window.evite_event.title}. Declining this message will remove you from this conversation.`;\n      return (\n        <>\n          <div className=\"accept_decline\">\n            {/* <div className=\"accept_decline__header\">{nameCTA}</div> */}\n            <div className=\"accept_decline__body\">\n              <Typography variant=\"paragraph2\" data-qa-id=\"attending-cta-message\">\n                {attendingCTA}\n              </Typography>\n            </div>\n            <div className=\"accept_decline__footer\">\n              <Button\n                variant=\"secondary\"\n                size=\"large\"\n                data-qa-id=\"conversation-decline\"\n                onClick={this.onBlockClicked}\n              >\n                Decline\n              </Button>\n              <Button\n                variant=\"primary\"\n                size=\"large\"\n                data-qa-id=\"conversation-accept\"\n                onClick={this.acceptConversation}\n              >\n                Accept\n              </Button>\n            </div>\n          </div>\n          {this.state.showDeclineModal && (\n            <div className=\"accept-decline__confirm-decline-wrapper\">\n              <div className=\"accept-decline__confirm-decline-modal\">\n                <Typography variant=\"label1\">Decline Conversation</Typography>\n                <Typography variant=\"paragraph2\">\n                  Are you sure you want to decline this message? This action cannot be undone.\n                </Typography>\n                <div className=\"accept-decline__confirm-decline-ctas\">\n                  <Button\n                    data-qa-id=\"cancel-decline\"\n                    variant=\"secondary\"\n                    size=\"large\"\n                    onClick={this.onCancelDecline}\n                  >\n                    Cancel\n                  </Button>\n                  <Button\n                    data-qa-id=\"confirm-decline\"\n                    variant=\"primary\"\n                    size=\"large\"\n                    onClick={this.blockConversation}\n                  >\n                    Decline\n                  </Button>\n                </div>\n              </div>\n            </div>\n          )}\n        </>\n      );\n    }\n    return null;\n  }\n}\n","import React, {PureComponent} from 'react';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\nimport './Banner.sass';\n\nexport class Banner extends PureComponent {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      openBanner: true,\n    };\n  }\n\n  onCloseClick = (e) => {\n    this.setState(\n      {\n        openBanner: false,\n      },\n      this.props.onBannerClose\n    );\n  };\n\n  render() {\n    if (!this.state.openBanner) {\n      return null;\n    }\n\n    const {type = 'info', showCloseBtn = false, text = '', icon, bannerClass = ''} = this.props;\n\n    return (\n      <div className={`banner banner--${type} ${bannerClass}`}>\n        {icon}\n        {text}\n\n        {showCloseBtn && (\n          <button\n            className=\"unstyled-button close-banner\"\n            onClick={this.onCloseClick}\n            data-qa-id=\"close-banner\"\n          >\n            <PB_CloseLine ratio={0.75} />\n          </button>\n        )}\n      </div>\n    );\n  }\n}\n","import {evite} from 'evite';\nimport React from 'react';\nimport {observer as mobxObserver} from 'mobx-react';\nimport {MessageList} from '~/messaging/components/MessageList/MessageList';\nimport {MessageForm} from '~/messaging/components/MessageForm/MessageForm';\nimport {MessageHeader} from '~/messaging/components/MessageHeader/MessageHeader';\nimport {rtdb, serverPaths} from '~/messaging/database';\nimport {messagingStore} from '~/messaging/store';\nimport {Banner} from '~/messaging/components/Banner/Banner';\nimport './Conversation.sass';\nimport {MessageErrorBoundary} from '~/messaging/components/MessageErrorBoundary/MessageErrorBoundary';\nimport {AcceptDecline} from '~/messaging/components/AcceptDecline/AcceptDecline';\nimport {isCanceled} from '~/common/utils/event_utils';\nimport {messagingPathname} from '~/messaging/utils/utils';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {PB_LockFill} from '~/common/svg/PB_LockFill';\nimport {pebble} from '~sass/pb_styleguide/base/_exports.sass';\n\n@mobxObserver\nexport class Conversation extends React.Component {\n  constructor(props) {\n    super(props);\n    const {groupId, groupType} = props.match.params;\n    const {event, userId, isPrivateGuestList, getGroup} = messagingStore;\n\n    const {rsvp} = event;\n\n    // Not Yet Replied SMS users cannot interact with Q\n    // TODO: Fix to not depend on event.rsvp\n    this.blockNyrSmsUser = rsvp && rsvp.response === 'undecided' && rsvp.invite_method === 'sms';\n\n    this.userId = userId;\n    this.state = {\n      group: null,\n      groupValues: {},\n      lockConversationRender: false,\n      pendingApproval: false,\n      blocked: false,\n    };\n\n    this.groupPath = `${serverPaths.messages}/${groupType}/${groupId}`;\n    this.guestPath = `${serverPaths.guests}/${this.userId}/groups/${groupId}`;\n    this.guestDoc = rtdb.get(this.guestPath);\n    this.onDisconnect = this.guestDoc.onDisconnect();\n\n    const group = getGroup(groupId);\n    group.onValues().then((res) => {\n      if (!this.mounted) return;\n      const values = group.value;\n      // If guest list is private, all guest - guest chats should be redirected back to the message hub\n      if (isPrivateGuestList && !(groupType === 'broadcast' || groupType === 'h2g')) {\n        const participants = values.authUsers || {};\n        const isValidConv = this.isValidPrivateConversation(Object.keys(participants));\n        if (!isValidConv) {\n          const location = {\n            pathname: `/messages`,\n            state: {bannerType: 'privateGuestList'},\n            search: window.location.search || '',\n          };\n          this.props.history.push(location);\n        }\n      }\n\n      this.setState({group, groupValues: values});\n    });\n  }\n\n  setReadTimeStampCatchAndUpdate() {\n    try {\n      // never fail on these parts\n      this.setReadTimeStamp(this.userId);\n      this.guestDoc.update({isActive: true});\n      this.onDisconnect.update({isActive: false});\n    } catch (e) {\n      evite.error('failed on mount', e);\n    }\n  }\n\n  /**\n   * Check if the conversation is valid for private guests list\n   * For hosts - only 1:1 & broadcasts messages are allowed\n   * For co-hosts - Only 1:1 conversation\n   * For guests, only allow 1:1 conversation with a host or co-host\n   * @param participantsUserIds\n   * @returns {boolean}\n   */\n  isValidPrivateConversation = (participantsUserIds) => {\n    const {groupType} = this.props.match.params;\n    const {event, isCoHost} = messagingStore;\n    const hostIds = event.host_ids;\n\n    // Allow any host to guest messages\n    if (groupType === 'broadcast' || groupType === 'h2g') {\n      return true;\n    }\n\n    // Don't allow group messages\n    if (participantsUserIds.length > 2) {\n      return false;\n    }\n    // If co-host is viewing, allow any 1:1 messages\n    // If guest is viewing, only allow messages with hosts or co-hosts\n    const isValid =\n      isCoHost ||\n      hostIds.some((hostId) =>\n        // Returns true if at least one matches. Else returns false\n        // Check for 1:1 messages with co-host\n        participantsUserIds.includes(hostId)\n      );\n\n    return isValid;\n  };\n\n  get routeBase() {\n    const {event_id} = window;\n    let base = '/event';\n    if (event_id) base += `/${event_id}`;\n    return base;\n  }\n\n  componentDidMount() {\n    this.mounted = true;\n    // this.getIsAccepted();\n    if (googletag) {\n      googletag.destroySlots && googletag.destroySlots(evite.dfp.oopSlots);\n      const adhesionDiv = document.querySelector('#ad-mobile-adhesion');\n      const consumableDivs = Array.from(document.querySelectorAll('.cnsmbl-audio-320x50-slider'));\n      if (adhesionDiv) {\n        adhesionDiv.innerHTML = '';\n        adhesionDiv.style.display = 'none';\n      }\n      if (consumableDivs.length) {\n        consumableDivs.forEach((div) => div.parentNode.removeChild(div));\n      }\n    }\n    evite.dfp.oopSlots = [];\n    this.guestDoc.onValues().then((res) => {\n      switch (res.approvalStatus) {\n        case 'pending':\n          this.setState(\n            {pendingApproval: true, createdBy: res.createdBy},\n            this.setReadTimeStampCatchAndUpdate\n          );\n          break;\n        case 'accepted':\n          this.setReadTimeStampCatchAndUpdate();\n          break;\n        case 'declined':\n          // should we redirect or should we change the approvalStatus to true?\n          this.setState({blocked: true});\n          const url = `${this.routeBase}/messages/?gid=${window.guest_id}`;\n          this.props.history.push(url);\n          break;\n        default:\n          // handling for old events\n          this.setReadTimeStampCatchAndUpdate();\n          break;\n      }\n    });\n  }\n\n  componentWillUnmount() {\n    this.mounted = false;\n    const adhesion = evite.dfp.autoAds.find((ad) => ad.slotId === 'ad-mobile-adhesion');\n    if (adhesion) {\n      evite.dfp.registerOopSlot(adhesion);\n      initAdhesion();\n    }\n    try {\n      this.state.group && this.state.group.close && this.state.group.close();\n      this.guestDoc.update({isActive: false});\n      // eek this removes all pending children as well\n      this.onDisconnect.cancel();\n      this.guestDoc.close();\n    } catch (e) {\n      // never fail for these nice-to-haves\n      evite.error('failed during unmount', e);\n    }\n  }\n\n  toogleModal = (isModalOpen) => {\n    this.setState({\n      lockConversationRender: isModalOpen,\n    });\n  };\n\n  onAcceptDeclineChanged = (status) => {\n    if (status === 'accepted') {\n      this.setState({pendingApproval: false, blocked: false});\n      this.setReadTimeStampCatchAndUpdate();\n    } else if (status === 'declined') {\n      const url = `${this.routeBase}/messages/?gid=${window.guest_id}`;\n      this.props.history.push(url);\n      // redirect to dashboard\n    }\n  };\n\n  renderForm() {\n    const {\n      isArchived,\n      event: {status},\n    } = messagingStore;\n    const {groupId, groupType} = this.props.match.params;\n    const participants = this.state.group.getParticipants();\n    // TODO: temporarily cap at 6 users so that we don't retrieve 2.5k profiles\n    const trimmedParticipants = participants.slice(0, 6);\n    trimmedParticipants.push(this.state.createdBy);\n    const isPrivateMessage = participants.length <= 2;\n    // Don't allow the guest to send messages  if archived OR guest received the invite via sms and hasn't rsvped yet\n    const hideForm = isArchived || this.blockNyrSmsUser;\n\n    if (isArchived || isCanceled(status)) return null;\n    if (this.state.pendingApproval) {\n      return null;\n    }\n    return (\n      <div className=\"conversation__form\">\n        {hideForm ? (\n          this.getBanner()\n        ) : (\n          <MessageForm\n            path={this.groupPath}\n            database={rtdb}\n            groupType={groupType}\n            groupId={groupId}\n            isPrivateMessage={isPrivateMessage}\n            participantCount={participants.length}\n          />\n        )}\n      </div>\n    );\n  }\n\n  renderAcceptDecline() {\n    const {groupId} = this.props.match.params;\n    const participants = this.state.group.getParticipants();\n    const trimmedParticipants = participants.slice(0, 6);\n    trimmedParticipants.push(this.state.createdBy);\n    const profiles = messagingStore.getProfiles(trimmedParticipants) || {};\n    if (this.state.pendingApproval) {\n      return (\n        <AcceptDecline\n          groupId={groupId}\n          createdBy={this.state.createdBy}\n          profiles={profiles}\n          onAcceptDeclineChanged={this.onAcceptDeclineChanged}\n          participants={participants}\n        />\n      );\n    }\n    return null;\n  }\n\n  render() {\n    if (this.state.group === null) return null;\n    const {groupId, groupType} = this.props.match.params;\n    const eventId = window.event_id;\n    const participants = this.state.group.getParticipants();\n    // TODO: temporarily cap at 6 users so that we don't retrieve 2.5k profiles\n    const trimmedParticipants = participants.slice(0, 6);\n    const profiles = messagingStore.getProfiles(trimmedParticipants) || {};\n    const qs = window.location.search;\n\n    const actualNumOfGuests = Object.keys(profiles).length;\n    return (\n      <>\n        <div\n          data-qa-id=\"conversation\"\n          className={`conversation ${evite.detects.isMobile ? 'is-mobile' : ''}`}\n        >\n          <MessageErrorBoundary>\n            <MessageHeader\n              history={this.props.history}\n              userId={this.userId}\n              participants={profiles}\n              backLink={messagingPathname(`/messages${qs}`)}\n              groupType={groupType}\n              groupId={groupId}\n              participantCount={participants.length}\n              rtdb={rtdb}\n              group={this.state.group}\n              groupValues={this.state.groupValues}\n              eventId={eventId}\n              onSwitchModal={this.toogleModal}\n            />\n            <Divider marginTop=\"1rem\" marginBottom=\"1rem\" />\n            <MessageList\n              history={this.props.history}\n              userId={this.userId}\n              path={this.groupPath}\n              database={rtdb}\n              groupType={groupType}\n              groupId={groupId}\n              participants={profiles}\n              participantCount={participants.length}\n              orderByChild=\"createdAt\"\n              limitToLast={20}\n              setReadTimeStamp={this.setReadTimeStamp}\n              lockConversationRender={this.state.lockConversationRender}\n            />\n\n            {this.renderForm()}\n          </MessageErrorBoundary>\n        </div>\n        {this.renderAcceptDecline()}\n      </>\n    );\n  }\n\n  getBanner = () => {\n    const bannerText = messagingStore.isArchived\n      ? 'This conversation is no longer active.'\n      : 'To participate in this conversation, you must RSVP.';\n\n    return (\n      <Banner\n        type=\"warning\"\n        text={bannerText}\n        icon={<PB_LockFill ratio={0.5} color={pebble} />}\n        bannerClass=\"conversation__banner\"\n      />\n    );\n  };\n\n  /**\n   * Set all the messages for this users as read, up to this current timestamp\n   */\n  setReadTimeStamp = async () => {\n    const data = {readAsOf: rtdb.TIMESTAMP};\n\n    try {\n      await this.guestDoc.update(data);\n      evite.info('Successfully set readAsOf for path ', this.guestPath, ' with data ', data);\n    } catch (e) {\n      evite.error(\n        e.message,\n        ' setting readAsOf failed for path ',\n        this.guestPath,\n        ' with data ',\n        data\n      );\n    }\n  };\n}\n","import React, {PureComponent} from 'react';\nimport {collectionObserver} from 'firebase-react-store';\nimport './ConversationList.sass';\nimport {messagingStore} from '~/messaging/store';\nimport {SingleConversation} from './SingleConversation';\nimport {rtdb, serverPaths} from '~/messaging/database';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\n\n@collectionObserver()\nexport class ConversationList extends PureComponent {\n  constructor(props) {\n    super(props);\n    this.doc = rtdb.get(props.path);\n    this.state = {\n      hasConversations: null, // unknown state\n      showSpinner: false, // not yet\n    };\n\n    setTimeout(() => {\n      this.setState({showSpinner: true});\n    }, 500);\n  }\n\n  componentDidUpdate() {\n    this.doc.onValues().then(() => {\n      const visibleConversations = this.props.collection.filter(\n        (conv) => !conv.value.isHidden && conv.value && conv.value.groupCategory\n      );\n      const hasConversations = visibleConversations.length > 0;\n      this.setState({hasConversations});\n    });\n  }\n\n  componentWillUnmount() {\n    try {\n      this.doc && this.doc.close();\n      this.doc = null;\n    } catch (e) {\n      console.error('Unable to close this.doc');\n    }\n  }\n\n  archiveConversation = async (e, conversationKey) => {\n    e.preventDefault();\n    // get the path and update isHidden to true on firebase\n    const updateConversationPath = `${serverPaths.guests}/${window.user_id}/messageHub/${conversationKey}`;\n    const doc = rtdb.get(updateConversationPath);\n    doc.update({isHidden: true});\n    doc.close();\n\n    // update on front end probably we won't need after backend is done with the update\n    const convToUpdate = this.props.collection.find(\n      (collection) => collection.key === conversationKey\n    );\n    convToUpdate.value.isHidden = true;\n    this.forceUpdate();\n  };\n\n  renderSpinner() {\n    if (this.state.showSpinner) {\n      return <div className=\"conversation-list-css-spinner css-spinner\" />;\n    }\n    return null;\n  }\n\n  render() {\n    const {isHost} = messagingStore;\n    const conversationsItems = this.props.collection\n      .filter((conv) => !conv.value.isHidden && conv.value && conv.value.groupCategory)\n      .reverse();\n    const conversations = conversationsItems.map((conv, index) => (\n      <div key={`conv-${conv.key}`}>\n        <SingleConversation\n          onConversationArchived={(event, conversationKey) => {\n            this.archiveConversation(event, conversationKey);\n          }}\n          conversation={conv}\n          onDisabledConvoClick={this.props.onDisabledConvoClick}\n          desktop={this.props.desktop}\n          onDesktopConversationClick={this.props.onDesktopConversationClick}\n          onDesktopNewConversationClick={this.props.onDesktopNewConversationClick}\n        />\n        {index < conversationsItems.length - 1 && <Divider />}\n      </div>\n    ));\n\n    if (!conversations.length && this.state.hasConversations === null) {\n      // we haven't finished loading yet\n      return this.renderSpinner();\n    }\n    if (!conversations.length && this.state.hasConversations) {\n      // we haven't received the children yet, but the doc returned??\n      // probably just wait for that\n      return this.renderSpinner();\n    }\n\n    if (isHost) {\n      const isBroadCastAllAvailable = this.props.collection.find(\n        (conversation) =>\n          conversation.key === 'all' && conversation.value.groupCategory === 'broadcast'\n      );\n      if (!isBroadCastAllAvailable) {\n        conversations.unshift(\n          <div key=\"conv-broadcast-all\">\n            <SingleConversation\n              conversation={{\n                key: 'all',\n                value: {\n                  isRead: true,\n                  groupCategory: 'broadcast',\n                  messageStub: 'Send a message to all of your guests',\n                },\n              }}\n            />\n          </div>\n        );\n      }\n    } else {\n      // we need to check all of the host ids\n      const hostIds = messagingStore.event.host_ids; // An array of host and co-host ids\n      hostIds.forEach((hostId) => {\n        // check if the conversation is already visible\n        const h2gMessage = this.props.collection.find((conversation) => {\n          const value = conversation.value || {};\n          const {users} = value;\n          const {groupCategory} = value;\n          if (users && groupCategory) {\n            const userIds = Object.keys(users);\n            return userIds.includes(hostId) && userIds.length === 2;\n          }\n          return false;\n        });\n        // if is not visible we need to add it to the conversations array\n        if (!h2gMessage) {\n          const users = {};\n          users[hostId] = hostId;\n          const isCohost = hostId !== messagingStore.event.host_id;\n          conversations.unshift(\n            <div key={`conv-create-to-host-${hostId}`}>\n              <SingleConversation\n                onClick={this.props.messageToHost}\n                isCreateNew\n                conversation={{\n                  key: hostId,\n                  value: {\n                    isRead: true,\n                    groupCategory: 'h2g',\n                    messageStub: `Send a message to your ${isCohost ? 'co-host' : 'host'}`,\n                    users,\n                  },\n                }}\n              />\n            </div>\n          );\n        }\n      });\n      // }\n    }\n\n    if (this.props.collectionError) {\n      const message =\n        this.props.collectionError.message || 'Sorry, an unknown error was encountered.';\n      return (\n        <div data-qa-id=\"conversation-list-error\" className=\"conversation-error error-message\">\n          {message}\n        </div>\n      );\n    }\n    return (\n      <div\n        data-qa-id=\"message-hub-container\"\n        id=\"message-hub-container\"\n        className=\"message-hub__list-container\"\n      >\n        <div data-qa-id=\"conversation-list\" className=\"conversation-list\">\n          {conversations}\n        </div>\n      </div>\n    );\n  }\n}\n","import React, {Component} from 'react';\nimport {Link} from 'react-router-dom';\nimport {observer as mobxObserver} from 'mobx-react';\nimport {getNameString} from '~/messaging/utils/parsers';\nimport {StackedAvatars} from '~/messaging/components/StackedAvatars/StackedAvatars';\nimport {messagingStore} from '~/messaging/store';\nimport {getDateString} from '~/messaging/utils/formatters';\nimport {isUserAHost} from '~/view_invitation/utils';\nimport {messagingPathname} from '~/messaging/utils/utils';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_MessagesLine} from '~/common/svg/PB_MessagesLine';\nimport {ghost} from '~sass/pb_styleguide/base/_exports.sass';\n\n@mobxObserver\nexport class SingleConversation extends Component {\n  getRightContent = (conversation, conversationKey) => {\n    const isHost = evite_event.is_host_viewing;\n    const isDeleteDisabled =\n      !evite.detects.isMobile &&\n      isHost &&\n      (conversation.groupCategory !== 'broadcast' || conversationKey !== 'all');\n    return (\n      <div className=\"conversation-list__info\">\n        <Typography variant=\"paragraph3\" color=\"pebble\" data-qa-id=\"conversation-message-date\">\n          {conversation.messageDate && getDateString(conversation.messageDate)}\n        </Typography>\n        <div className=\"conversation-list__actions\">\n          {isDeleteDisabled && (\n            <div\n              onClick={(event) => {\n                this.props.onConversationArchived(event, conversationKey);\n              }}\n              className=\"conversation-list__archive\"\n              data-qa-id=\"conversation-archive\"\n            >\n              <span className=\"remove-action\">\n                <i className=\"icon-cancel\" />\n              </span>\n            </div>\n          )}\n          {!conversation.isRead && <div className=\"conversation-list__newMessages\" />}\n        </div>\n      </div>\n    );\n  };\n\n  render() {\n    const {conversation} = this.props;\n    const conv = conversation.value;\n    const {isPrivateGuestList} = messagingStore;\n    const groupType = conv.groupCategory;\n    const users = conv.users || {};\n    const userIds = Object.keys(users).filter((user_id) => user_id !== messagingStore.userId);\n\n    // For private guest lists, disable group chats or g2g chats\n    if (isPrivateGuestList && !this.isConversationEnabled(userIds, groupType)) {\n      return this.getDisabledConversation(userIds);\n    }\n\n    return this.getConversationLink(userIds, groupType);\n  }\n\n  isConversationEnabled = (userIds, groupType) => {\n    // Allow any host to guest messages\n    if (groupType === 'broadcast' || groupType === 'h2g') {\n      return true;\n    }\n\n    // userIds don't include the host id\n    if (userIds.length > 1) {\n      return false;\n    }\n    const hostIds = messagingStore.event.host_ids;\n    return (\n      messagingStore.isCoHost ||\n      hostIds.some((hostId) =>\n        // Returns true if at least one matches. Else returns false\n        // Check for 1:1 messages with co-host\n        userIds.includes(hostId)\n      )\n    );\n  };\n\n  getDisabledConversation = (userIds) => {\n    const {isHost} = messagingStore;\n    const {conversation} = this.props;\n    const conv = conversation.value;\n    const maxGuests = 4;\n    let messageTitle = 'Group Message (Hidden)';\n\n    // If a guest is viewing this, userProfiles should only have the hosts' profile data\n    const userProfiles = this.getProfileInfo(userIds) || [];\n\n    // If a guest is viewing and the conversation is a group chat\n    if (!isHost) {\n      const hostIds = messagingStore.event.host_ids;\n\n      // g2g message\n      if (userIds.length === 1 && !hostIds.includes(userIds[0])) {\n        messageTitle = 'Message (Hidden)';\n        userProfiles.push({\n          userId: userIds[0],\n        });\n      } else if (userIds.length > 1) {\n        // Remove hosts from this\n        const guests = userIds.filter((userId) => !hostIds.includes(userId));\n\n        let i = 0;\n        while (userProfiles.length <= maxGuests && i < guests.length) {\n          // Add these guys to the profiles, so it the StackedAvatar will render grey avatars for the hidden users\n          userProfiles.push({\n            userId: guests[i],\n          });\n          i++;\n        }\n      }\n    }\n\n    return (\n      <div\n        key={conversation.key}\n        onClick={this.onDisabledConvoClick}\n        className=\"conversation-list__link conversation-list__link--disabled\"\n      >\n        <div className=\"conversation-list__avatarSection\">\n          <StackedAvatars profiles={userProfiles} maxShown={maxGuests} />\n        </div>\n        <div className=\"conversation-list__content\">\n          <Typography\n            variant=\"paragraph2\"\n            color=\"charcoal\"\n            classNames=\"conversation-list__name\"\n            data-qa-id=\"conversation-name\"\n          >\n            {messageTitle}\n          </Typography>\n          <Typography\n            variant=\"paragraph3\"\n            color=\"pebble\"\n            classNames=\"conversation-list__message\"\n            data-qa-id=\"conversation-message-stub\"\n          >\n            {conv.messageStub}\n          </Typography>\n        </div>\n        {conversation.messageDate && (\n          <div className=\"conversation-list__info\">\n            <Typography variant=\"paragraph3\" color=\"pebble\" data-qa-id=\"conversation-message-date\">\n              {getDateString(conversation.messageDate)}\n            </Typography>\n          </div>\n        )}\n      </div>\n    );\n  };\n\n  onDisabledConvoClick = (e) => {\n    this.props.onDisabledConvoClick(this.getGroupType());\n  };\n\n  getGroupType = () => {\n    const {isHost} = messagingStore;\n    const {conversation} = this.props;\n    const conv = conversation.value || {};\n    const users = conv.users || {};\n    const userIds = Object.keys(users).filter((user_id) => user_id !== messagingStore.userId);\n\n    if (isHost) {\n      return conv.groupCategory;\n    }\n    return userIds.length === 1 ? 'g2g' : conv.groupCategory;\n  };\n\n  getProfileInfo = () => {\n    const conv = this.props.conversation.value;\n    let profiles = [];\n    const users = conv.users || {};\n    // TODO: temporarily cap at 6 users so that we don't retrieve 2.5k profiles\n    const trimmedUsers = Object.keys(users).slice(0, 6);\n    const userIds = trimmedUsers.filter((user_id) => user_id !== messagingStore.userId);\n\n    if (userIds.length) {\n      profiles = Object.values(messagingStore.getProfiles(userIds));\n    }\n\n    return profiles;\n  };\n\n  getConversationLink = (userIds) => {\n    const {conversation, convModClass = ''} = this.props;\n    const conv = conversation.value || {};\n    const groupType = conv.groupCategory;\n    const virtualGroups = ['all', 'yes', 'maybe', 'no', 'undecided', 'attended'];\n    const qs = window.location.search;\n    const conversationLink = messagingPathname(`/messages/${groupType}/${conversation.key}${qs}`);\n\n    // check if the conversation has users\n    let headingCopy = '';\n    const profilesToShow = this.getProfileInfo(userIds);\n\n    const names = profilesToShow.map((g) => (isUserAHost(g.userId) ? `${g.name} (Host)` : g.name));\n\n    const participantNames = evite.detects.isMobile\n      ? getNameString(names, 15)\n      : getNameString(names, 45);\n\n    const isCustomBroadcast =\n      groupType === 'broadcast' && !virtualGroups.includes(conversation.key);\n    const avatarType = isCustomBroadcast ? 'all' : conversation.key;\n    if (groupType === 'broadcast') {\n      const rsvpCopy = conversation.key === 'undecided' ? 'Not Yet Replied' : conversation.key;\n      if (isCustomBroadcast) {\n        headingCopy = participantNames;\n      } else if (rsvpCopy !== 'attended') {\n        headingCopy = conversation.key === 'all' ? 'All Guests' : `All ${rsvpCopy} RSVPs`;\n      } else {\n        headingCopy = 'All Attendant Guests';\n      }\n    }\n\n    let {messageStub} = conv;\n\n    // Set draft message stub\n    if (!messageStub && conv.messageId && conv.messageId.toLowerCase() === 'draft') {\n      const {isHost, isCoHost} = messagingStore;\n      messageStub =\n        isHost || isCoHost ? 'Send a message to your guest' : 'Send a message to your host';\n    }\n\n    const component = (\n      <div key={conversation.key} className={`conversation-list__link ${convModClass}`}>\n        <div className=\"conversation-list__avatarSection\">\n          {groupType !== 'broadcast' ? (\n            <StackedAvatars profiles={profilesToShow} maxShown={4} />\n          ) : (\n            <div className=\"grouped-icon-label\">\n              <div className={`broadcast-rsvp-${avatarType}`}>\n                <PB_MessagesLine color={ghost} ratio={0.75} />\n              </div>\n            </div>\n          )}\n        </div>\n        <div className=\"conversation-list__content\">\n          <Typography\n            variant=\"paragraph2\"\n            color=\"charcoal\"\n            classNames=\"conversation-list__name\"\n            data-qa-id=\"conversation-name\"\n          >\n            {groupType !== 'broadcast' && (conv.groupName || participantNames)}\n            {groupType === 'broadcast' && (conv.groupName || headingCopy)}\n          </Typography>\n          <Typography\n            variant=\"paragraph3\"\n            color=\"pebble\"\n            classNames=\"conversation-list__message\"\n            data-qa-id=\"conversation-message-stub\"\n          >\n            {messageStub}\n          </Typography>\n        </div>\n        {this.getRightContent(conv, conversation.key)}\n      </div>\n    );\n\n    // TODO: Use this when we add a desktop-specific layout for Messaging\n    // return this.props.desktop ? (\n    //   <div\n    //     className='single-conversation-link'\n    //     data-qa-id=\"single-conversation-link\"\n    //     key={conversation.key}\n    //     onClick={this.onButtonClick}\n    //   >\n    //     {component}\n    //   </div>\n    // ) : (\n    //   <Link\n    //     className=\"single-conversation-link\"\n    //     data-qa-id=\"single-conversation-link\"\n    //     key={conversation.key}\n    //     to={conversationLink}\n    //     onClick={this.onLinkClick}\n    //   >\n    //     {component}\n    //   </Link>\n    // );\n    return (\n      <Link\n        className=\"single-conversation-link\"\n        data-qa-id=\"single-conversation-link\"\n        key={conversation.key}\n        to={conversationLink}\n        onClick={this.onLinkClick}\n      >\n        {component}\n      </Link>\n    );\n  };\n\n  onLinkClick = (event) => {\n    const {onClick, conversation, isCreateNew} = this.props;\n\n    if (isCreateNew) {\n      event.preventDefault();\n      const conv = conversation.value || {};\n      const users = conv.users || {};\n      const hostId = Object.keys(users)[0];\n      if (onClick && typeof onClick === 'function') {\n        onClick(event, hostId);\n      }\n    }\n  };\n\n  onButtonClick = (event) => {\n    const {onDesktopConversationClick, onDesktopNewConversationClick, isCreateNew, conversation} =\n      this.props;\n\n    event.preventDefault();\n    const conv = conversation.value || {};\n    const users = conv.users || {};\n    const hostId = Object.keys(users)[0];\n    if (isCreateNew) {\n      onDesktopNewConversationClick(event, hostId);\n    } else {\n      onDesktopConversationClick(event, hostId);\n    }\n  };\n}\n","import React from 'react';\nimport {UserAvatar} from '~/view_invitation/avatars/components';\nimport {messagingStore} from '~/messaging/store';\nimport './GroupedAvatars.sass';\n\n// a component that diplays avatars side-by-side\nexport function GroupedAvatars(props) {\n  const {profiles, maxShown, participantCount} = props;\n\n  const actualNumOfGuests = participantCount;\n  const maxNumOfGuests =\n    (profiles && actualNumOfGuests >= maxShown ? maxShown : actualNumOfGuests) || 0;\n\n  // only render subset of guest avatars if the list is long,\n  // avoid doing a .map below to the entire list\n  let profileIndex = 0;\n  let profilesToRender = {};\n  for (const profile in profiles) {\n    if (profile === messagingStore.userId) continue; // exclude current user in private msg\n    if (profileIndex < maxNumOfGuests) {\n      const profileObj = {[profile]: profiles[profile]};\n      profilesToRender = {...profilesToRender, ...profileObj};\n    } else {\n      break;\n    }\n    profileIndex++;\n  }\n\n  return (\n    <div>\n      <div className={`grouped-avatars grouped-avatars--count${maxNumOfGuests}`}>\n        {Object.keys(profilesToRender).map((userId, index) => {\n          const user = profilesToRender[userId];\n\n          return (\n            <div\n              key={`${user.userId}-${index}`}\n              className={`grouped-avatar grouped-avatar-${index}`}\n            >\n              <UserAvatar {...user} disableButton />\n              {actualNumOfGuests <= maxShown && (\n                <span\n                  className=\"grouped-avatar__name\"\n                  data-qa-id=\"avatar-user-name\"\n                  data-qa-value={user.name}\n                >\n                  {user.name}\n                </span>\n              )}\n            </div>\n          );\n        })}\n        {maxNumOfGuests < actualNumOfGuests && (\n          <div className=\"avatar plus-more-avatar\" data-qa-id=\"avatar-more-guests\">\n            <span data-qa-id=\"more-guests-count\" data-qa-value={actualNumOfGuests - maxNumOfGuests}>\n              +{actualNumOfGuests - maxNumOfGuests}\n            </span>\n          </div>\n        )}\n      </div>\n      {props.children}\n    </div>\n  );\n}\n","import React from 'react';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport './LeaveGroup.sass';\n\nexport function LeaveGroup(props) {\n  const {leaveGroup, toggleLeaveGroupView} = props;\n\n  return (\n    <div data-qa-id=\"leaveGroup\" className=\"leave-group\">\n      <div className=\"content\">\n        <Typography\n          variant=\"paragraph1\"\n          classNames=\"leave-group__header\"\n          data-qa-id=\"leave-group-header\"\n        >\n          Leave this group\n        </Typography>\n        <Typography variant=\"paragraph2\" data-qa-id=\"leave-group-message\">\n          You will be removed from this group chat.\n          <br />\n          This action cannot be undone.\n        </Typography>\n        <div className=\"actions\">\n          <Button\n            variant=\"secondary\"\n            size=\"large\"\n            data-qa-id=\"cancel-leave-group\"\n            onClick={toggleLeaveGroupView}\n          >\n            Cancel\n          </Button>\n          <Button variant=\"primary\" size=\"large\" data-qa-id=\"leave-group\" onClick={leaveGroup}>\n            OK\n          </Button>\n        </div>\n      </div>\n    </div>\n  );\n}\n","import React, {Component} from 'react';\nimport {observer as mobxObserver} from 'mobx-react';\nimport Linkify from 'linkifyjs/react';\nimport {UserAvatar} from '~/view_invitation/avatars/components';\nimport {StyledBubble} from './StyledBubble';\nimport {messagingStore} from '~/messaging/store';\nimport {MessageTimeStamp} from './MessageTimeStamp';\nimport {SeenBy} from '~/messaging/components/SeenBy/SeenBy';\nimport {isUserAHost} from '~/view_invitation/utils';\nimport {setSeenBy} from '~/messaging/utils/setSeenBy';\nimport {MessageEducation} from '~/messaging/components/MessageEducation/MessageEducation';\nimport {MessageEducationButton} from '~/messaging/components/MessageEducationButton/MessageEducationButton';\n\nimport './Message.sass';\n\n@mobxObserver\nexport class Message extends Component {\n  constructor(props) {\n    super(props);\n    // If this message is sent by the current user\n    this.isMsgFromSender = props.createdBy === messagingStore.userId;\n    this.state = {\n      changeRsvp: false,\n      showMessageEducation: false,\n    };\n  }\n\n  componentDidMount() {\n    // Reading someone else's message\n    if (this.props.createdBy !== messagingStore.userId) {\n      const {userId} = messagingStore;\n      const {seenBy, messageId, setReadTimeStamp} = this.props;\n      setSeenBy(seenBy, messageId, setReadTimeStamp, userId);\n    }\n  }\n\n  componentDidCatch(error, info) {\n    // Display fallback UI\n    // You can also log the error to an error reporting service\n    evite.error('Message component failed ', error, info);\n  }\n\n  render() {\n    const {\n      type,\n      createdAt,\n      createdBy,\n      message,\n      newMessage,\n      showTimestamp,\n      showSeenBy,\n      seenBy,\n      messageId,\n      groupType,\n      groupId,\n    } = this.props;\n\n    const {showMessageEducation} = this.state;\n    const isBroadcastMessage = type === 'broadcast';\n\n    let profile = {};\n    if (createdBy !== 'Evite') profile = messagingStore.getProfile(createdBy) || {};\n    this.isMsgFromSender = createdBy === messagingStore.userId;\n\n    // Render the RSVP style message\n    if (type === 'rsvp') {\n      return this.getRsvpMessage();\n    }\n\n    // for system messages, render the RSVP message style for now\n    if (type === 'system') {\n      return this.getRsvpMessage();\n    }\n\n    // Get new message body with sender's profile info\n    if (!this.isMsgFromSender && newMessage) {\n      return this.getNewGuestMessage(profile);\n    }\n\n    return (\n      <div\n        data-qa-id=\"message\"\n        data-message-id={messageId}\n        className={`message ${this.isMsgFromSender ? 'message--right' : ''}`}\n      >\n        {showTimestamp && <MessageTimeStamp classes=\"message__timestamp\" createdAt={createdAt} />}\n\n        <div className=\"message__wrapper\">\n          <StyledBubble isMsgFromSender={this.isMsgFromSender} data-qa-id=\"message-body\">\n            <Linkify>{message}</Linkify>\n\n            {/* {isBroadcastMessage && (\n              <MessageEducationButton\n                type={type}\n                onMessageEducationClick={this.onMessageEducationClick}\n              />\n            )} */}\n          </StyledBubble>\n\n          {/* {isBroadcastMessage && showMessageEducation && (\n            <MessageEducation type={type} />\n          )} */}\n\n          {showSeenBy && (\n            <SeenBy\n              showSeenBy={showSeenBy}\n              seenBy={seenBy}\n              messageId={messageId}\n              createdBy={createdBy}\n              groupType={groupType}\n              groupId={groupId}\n              onShowModal={this.props.onShowModal}\n            />\n          )}\n        </div>\n      </div>\n    );\n  }\n\n  /**\n   * Add the avatar, sender's name and the timestamp for a new message\n   */\n  getNewGuestMessage = (profile) => {\n    const {message, createdBy, createdAt, showTimestamp} = this.props;\n    const guestName = isUserAHost(profile.userId) ? `${profile.name} (Host)` : profile.name;\n\n    return (\n      <div data-qa-id=\"message\" className=\"message message--new\">\n        {showTimestamp && <MessageTimeStamp classes=\"message__timestamp\" createdAt={createdAt} />}\n\n        <div className=\"message__wrapper\">\n          <UserAvatar\n            userId={createdBy}\n            name={profile.name}\n            initials={profile.initials}\n            avatarDisk={profile.avatarDisk}\n            avatarUrl={profile.avatarUrl}\n            avatarCls=\"message__avatar\"\n          />\n          <div className=\"message__profile\">\n            {/* Name */}\n            {/* <div className=\"message__name\">{guestName}</div> */}\n\n            <StyledBubble isMsgFromSender={this.isMsgFromSender} data-qa-id=\"message-body\">\n              <Linkify>{message}</Linkify>\n            </StyledBubble>\n          </div>\n        </div>\n      </div>\n    );\n  };\n\n  /**\n   * Get the RSVP status message\n   */\n  getRsvpMessage = () => {\n    const {showRsvp, createdAt, showTimestamp} = this.props;\n    const showRsvpLink = showRsvp && !this.state.changeRsvp && !window.reinvention;\n    return (\n      <div data-qa-id=\"message\" className=\"message message--rsvp\">\n        {showTimestamp && <MessageTimeStamp classes=\"message__timestamp\" createdAt={createdAt} />}\n        <div className=\"message__wrapper\">\n          <i className=\"icon icon-notification message__icon-rsvp\" />\n          <div className=\"message__status\">{this.props.message}</div>\n        </div>\n      </div>\n    );\n  };\n\n  onMessageEducationClick = () => {\n    this.setState((state, props) => ({showMessageEducation: !state.showMessageEducation}));\n  };\n}\n","import React, {Component} from 'react';\nimport {getDateString} from '~/messaging/utils/formatters';\n\nexport class MessageTimeStamp extends Component {\n  render() {\n    const {createdAt, classes = ''} = this.props;\n    return (\n      <div data-qa-id=\"message-timestamp\" className={classes}>\n        {getDateString(createdAt, true)}\n      </div>\n    );\n  }\n}\n","import styled from 'styled-components';\nimport {tanzanite, ghost, charcoal, silver} from '~sass/pb_styleguide/base/_exports.sass';\n\nconst bubbleRadius = '1rem';\nconst baseColor = '#666e76';\nconst darkBaseColor = '#2b2e32';\nconst eviteBlue = '#3ea5dc';\n\nconst bgHex = [\n  '#848F95',\n  '#CA5352',\n  '#DE7B15',\n  '#BA8C00',\n  '#947E54',\n  '#51A079',\n  '#4498CB',\n  '#2075C0',\n  '#767EC2',\n  '#AB6CBA',\n];\n\nexport const StyledBubble = styled.span`\n  white-space: pre-line\n  word-break: break-word\n  hyphens: auto;\n  max-width: 80%\n  display: inline-block;\n  font-size: 1rem;\n  text-align: left;\n  padding: 0.5rem 1rem;\n  transition: background-color .1s linear\n  border: none;\n  font-family: Brut;\n  border-radius: ${(props) =>\n    props.isMsgFromSender ? `${bubbleRadius} ${bubbleRadius} 0 ${bubbleRadius}` : bubbleRadius};\n  color: ${(props) => (props.isMsgFromSender ? ghost : charcoal)};\n  a {\n    color: ${(props) => (props.isMsgFromSender ? eviteBlue : 'white')};\n    text-decoration: underline\n  }\n  * {\n    margin: auto 0\n  }\n  background-color: ${(props) =>\n    props.isMsgFromSender ? tanzanite : props.colorId ? bgHex[props.colorId] : silver};\n`;\n","import styled from 'styled-components';\nimport {tanzanite, charcoal, silver, ghost} from '~sass/pb_styleguide/base/_exports.sass';\n\nconst bubbleRadius = '1rem';\nconst eviteBlue = '#3ea5dc';\n\nexport const StyledWidget = styled.span`\n  white-space: pre-line\n  word-break: break-word\n  hyphens: auto;\n  width: 100%;\n  max-width: 20.5rem;\n  display: inline-block;\n  text-align: center;\n  padding: 1rem;\n  transition: background-color .1s linear\n  border: 1px ${silver} solid;\n  border-radius: ${bubbleRadius};\n  color: ${charcoal};\n  a {\n    color: ${(props) => (props.isMsgFromSender ? tanzanite : ghost)};\n    text-decoration: underline\n  }\n  background-color: ${ghost};\n  margin-bottom: 0.75rem;\n`;\n","import React, {Component} from 'react';\nimport {observer as mobxObserver} from 'firebase-react-store';\nimport {messagingStore} from '~/messaging/store';\nimport {rtdb, serverPaths} from '~/messaging/database';\nimport {Poll} from '~/messaging/components/polls/Poll';\n\nimport './Message.sass';\n\n@mobxObserver\nexport class Widget extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      widget: null,\n      participants: [],\n    };\n\n    const widgetPath = `${serverPaths.widget}/${props.widgetId}/public`;\n    this.widgetDoc = rtdb.get(widgetPath);\n    this.isMsgFromSender = props.createdBy === messagingStore.userId;\n    this.createdBy = props.createdBy;\n  }\n\n  componentDidMount() {\n    this.widgetDoc.onValues().then((res) => {\n      // keep track of widget doc in local state\n      // to determine whether or not to render <Poll />\n      this.setState({widget: this.widgetDoc});\n    });\n\n    const group = messagingStore.getGroup(this.props.groupId);\n    this.setState({participants: group.getParticipants()});\n  }\n\n  componentWillUnmount() {\n    try {\n      this.widgetDoc && this.widgetDoc.close();\n      this.widgetDoc = null;\n    } catch (e) {\n      console.exception('Failed to close doc', e);\n    }\n  }\n\n  render() {\n    if (!this.state.widget) return null;\n    const {\n      widgetId,\n      newMessage,\n      messageId,\n      groupType,\n      sentTo,\n      setReadTimeStamp,\n      onShowModal,\n      groupId,\n      participantCount,\n    } = this.props;\n\n    const {participants} = this.state;\n\n    const widget = this.state.widget.value;\n    const profile = messagingStore.getProfile(widget.createdBy) || {};\n    this.isMsgFromSender = widget.createdBy === messagingStore.userId;\n\n    if (widget.type === 'poll') {\n      return (\n        <Poll\n          history={this.props.history}\n          pollValues={widget}\n          widgetId={widgetId}\n          newMessage={newMessage}\n          messageId={messageId}\n          isMsgFromSender={this.isMsgFromSender}\n          senderId={this.createdBy}\n          profile={profile}\n          groupType={groupType}\n          sentTo={participants}\n          setReadTimeStamp={setReadTimeStamp}\n          onShowModal={onShowModal}\n          participantCount={participantCount}\n          groupId={groupId}\n        />\n      );\n    }\n  }\n}\n","import {evite} from 'evite';\nimport React, {Component} from 'react';\nimport {PB_BroadcastLine} from '~/common/svg/PB_BroadcastLine';\nimport './MessageEducation.sass';\nimport {pebble} from '~sass/pb_styleguide/base/_exports.sass';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport function MessageEducation(props) {\n  const {type} = props;\n  const config = {};\n\n  if (type === 'broadcast') {\n    config.iconClass = 'icon-broadcast';\n    config.messageEducation = 'This message was sent to multiple guests';\n  }\n\n  // display nothing, if type config is not set\n  if (Object.keys(config).length < 2) return;\n\n  return (\n    <p>\n      <PB_BroadcastLine ratio={0.4375} color={pebble} />\n      <Typography variant=\"paragraph4\" data-qa-id=\"message-education\">\n        {config.messageEducation}\n      </Typography>\n    </p>\n  );\n}\n","import {evite} from 'evite';\nimport React, {Component} from 'react';\nimport './MessageEducationButton.sass';\n\nexport function MessageEducationButton(props) {\n  const {type} = props;\n  let iconClass = '';\n\n  if (type === 'broadcast') {\n    iconClass = 'icon-broadcast';\n  }\n\n  // return nothing if type is not defined\n  if (!iconClass) return;\n\n  return (\n    <p className=\"messageEducationButton\">\n      <i className={iconClass} onClick={(e) => props.onMessageEducationClick()} />\n    </p>\n  );\n}\n","import {evite} from 'evite';\nimport React, {Component} from 'react';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport './MessageErrorBoundary.sass';\n\nexport class MessageErrorBoundary extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {hasError: false};\n  }\n\n  componentDidCatch(error, info) {\n    console.log('error:', error, info);\n    this.setState({hasError: true});\n\n    evite.logError(error);\n  }\n\n  render() {\n    const errorMessage =\n      this.props.errorMessage ||\n      'There was an error while loading your messages. Please refresh and try again.';\n\n    if (this.state.hasError) {\n      return (\n        <div className=\"message-error-boundary\">\n          <Typography variant=\"paragraph1\" data-qa-id=\"error-message\">\n            {errorMessage}\n          </Typography>\n        </div>\n      );\n    }\n\n    return this.props.children;\n  }\n}\n","import React, {PureComponent} from 'react';\nimport {observer} from 'firebase-react-store';\nimport {evite} from 'evite';\nimport {rtdb} from '~/messaging/database';\nimport {TextareaAutosize} from '~/messaging/components/MessageForm/TextareaAutosize';\nimport {messagingStore} from '~/messaging/store';\nimport {CreateEditPollModalContent} from '~/messaging/components/polls/CreateEditPollModalContent';\nimport {isCanceled} from '~/common/utils/event_utils';\nimport * as utils from '../../../view_invitation/utils';\nimport './MessageForm.sass';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {Overlay} from '~/common/_pb_components/atoms/Overlay';\nimport {PB_PollLine} from '~/common/svg/PB_PollLine';\n\n@observer\nexport class MessageForm extends PureComponent {\n  constructor(props) {\n    super(props);\n    this.doc = rtdb.get(props.path);\n    this.state = {\n      isModalOpen: false,\n      message: '',\n      sending: false,\n    };\n    this.messageQueue = [];\n  }\n\n  componentWillUnmount() {\n    try {\n      this.doc && this.doc.close();\n      this.doc = null;\n    } catch (e) {\n      console.exception('Failed to close doc', e);\n    }\n  }\n\n  render() {\n    const {groupType, groupId, isPrivateMessage} = this.props;\n    const {isModalOpen} = this.state;\n    const isHost = window.evite_event.is_host_viewing;\n    const isPollsSwitchOn = evite.features.isEnabled('q-polls');\n\n    return (\n      <div data-qa-id=\"message-form\" className=\"message-form\">\n        {isPollsSwitchOn && !isPrivateMessage && isHost && (\n          <>\n            <button\n              data-qa-id=\"message-poll\"\n              aria-label=\"info\"\n              type=\"button\"\n              className=\"unstyled-button message-form__poll-btn\"\n              onClick={this.openModal}\n              role=\"button\"\n            >\n              <PB_PollLine ratio={0.5} />\n              <Typography variant=\"paragraph2\" color=\"charcoal\">\n                Poll\n              </Typography>\n            </button>\n            <Overlay\n              type=\"popup\"\n              open={isModalOpen}\n              popupWidth=\"31.25rem\"\n              children={\n                <CreateEditPollModalContent\n                  groupId={groupId}\n                  groupType={groupType}\n                  onCloseClick={this.closeModal}\n                />\n              }\n            />\n          </>\n        )}\n        {!isCanceled(window.evite_event.status) && (\n          <>\n            <TextareaAutosize\n              maxRows={3}\n              initialHeight={50}\n              data-qa-id=\"message-input\"\n              value={this.state.message}\n              onTextareaChange={this.onTextareaChange}\n              beforeSend={this.beforeSend}\n              name=\"message\"\n              textAreaClass=\"message-form__input\"\n              placeholder=\"Write a message\"\n              autoCapitalize=\"sentences\"\n              autoComplete=\"off\"\n              maxLength=\"4000\"\n            />\n            <button\n              data-qa-id=\"send-message\"\n              className=\"message-form__button unstyled-button link\"\n              onClick={this.beforeSend}\n              type=\"button\"\n            >\n              Send\n            </button>\n          </>\n        )}\n\n        {isCanceled(window.evite_event.status) && (\n          <h2 style={{fontSize: '14px'}} data-qa-id=\"canceled-event-message\">\n            New messages cannot be posted to canceled events.\n          </h2>\n        )}\n      </div>\n    );\n  }\n\n  openModal = () => {\n    this.setState({isModalOpen: true});\n  };\n\n  closeModal = () => {\n    this.setState({isModalOpen: false});\n  };\n\n  onTextareaChange = (message) => {\n    this.setState({message});\n  };\n\n  /**\n   * Check the sending state before sending the message\n   */\n  beforeSend = () => {\n    const message = this.state.message.trim();\n\n    if (this.state.sending) {\n      // If the previous message still pending, add the current one to the queue\n      this.messageQueue.push(message);\n      this.setState({\n        message: '',\n      });\n    } else {\n      this.send(message);\n    }\n  };\n\n  componentDidUpdate(prevProps, prevState, snapshot) {\n    // When a message is sent successfully, check if there's any pending messages to be sent\n    if (prevState.sending === true && this.state.sending === false) {\n      this.clearMessageQueue();\n    }\n  }\n\n  /**\n   * Send messages that's queued up\n   */\n  clearMessageQueue = async () => {\n    while (this.messageQueue.length > 0) {\n      const message = this.messageQueue.shift();\n      await this.send(message);\n    }\n  };\n\n  /**\n   * TODO: Handle errors\n   * TODO: Add Group fetch stuff\n   * Push the message back to the store\n   * @param message\n   * @return {Promise<boolean>}\n   */\n  send = async (message, captcha = null) => {\n    const {groupType, groupId, participantCount} = this.props;\n    const isBroadcast = groupType === 'broadcast';\n\n    if (!message || message.length > 4000) {\n      return false;\n    }\n\n    this.setState({\n      sending: true,\n    });\n\n    if (isBroadcast) {\n      const virtualGroups = ['all', 'yes', 'no', 'maybe', 'undecided', 'attended'];\n      const url = `/tsunami/v1/services/event/${window.event_id}/broadcast/`;\n\n      const body = {\n        message,\n        captcha,\n        participantCount,\n      };\n\n      if (virtualGroups.indexOf(groupId) > -1) {\n        body.virtual_groups = [groupId];\n      } else {\n        // subset of a broadcast group\n        body.group_id = groupId;\n      }\n      const getBroadcast = {\n        method: 'POST',\n        credentials: 'include',\n        cache: 'no-cache',\n        body: JSON.stringify(body),\n        headers: {\n          'X-CSRFToken': evite.cookie('csrftoken'),\n          Accept: 'application/json',\n        },\n      };\n\n      try {\n        const response = await evite.fetch(url, getBroadcast);\n        const responseText = await response.text();\n\n        if (response.ok) {\n          console.info('Broadcast Successful!', responseText);\n          this.setState({\n            message: '',\n            sending: false,\n          });\n          window.tags.track_event('sent_q', {messageGroupType: 'broadcast'});\n        } else {\n          // TODO: Handle Error\n\n          const xhr = {responseText};\n          xhr.status = response.status;\n          utils.handleCaptcha(xhr, response.status, null, async (captcha) => {\n            if (captcha) {\n              return await this.send(message, captcha);\n            }\n          });\n\n          console.error('Broadcast Failed with response', response.status);\n          this.setState({\n            sending: false,\n          });\n        }\n      } catch (e) {\n        // TODO: Handle Error if message didn't go through\n        console.error('Broadcast Fetch Error', e);\n      }\n    } else {\n      const pushH2G = {\n        createdBy: messagingStore.userId,\n        createdAt: rtdb.TIMESTAMP,\n        message,\n      };\n\n      try {\n        await this.doc.push(pushH2G);\n        console.info('Successfully Pushed to group ', groupType, ' with data ', pushH2G);\n\n        this.setState({\n          message: '',\n          sending: false,\n        });\n        window.tags.track_event('sent_q', {messageGroupType: groupType});\n      } catch (e) {\n        evite.error(\n          e.message,\n          'h2g  push failed on path ',\n          this.props.path,\n          ' with data ',\n          pushH2G\n        );\n      }\n    }\n\n    return false;\n  };\n}\n","import styled from 'styled-components';\n\nexport const StyledTextArea = styled.textarea`\n  resize: none\n  overflow-y: ${(props) => (props.height > 80 ? 'scroll' : 'hidden')}\n  height: ${(props) => (typeof props.height === 'number' ? `${props.height}px` : props.height)}\n  line-height:${(props) => `${props.lineHeight}px`}\n  max-height: ${(props) => `${props.maxHeight}px`}\n  font-size: ${(props) => props.fontSize}\n  padding: ${(props) =>\n    `${props.paddingTop}px  ${props.paddingRight}px ${props.paddingBottom}px ${props.paddingLeft}px`}\n`;\n","import {evite} from 'evite';\nimport React, {PureComponent} from 'react';\nimport {StyledTextArea} from '~/messaging/components/MessageForm/StyledTextArea';\n\n/**\n * This component auto resizes the textarea when the text changes\n * It uses JS to calculate the textarea's scrollHeight to change the height of the teaxarea.\n * It uses css 'maxHeight' to prevent the textarea from growing more than the 'maxRows' prop\n */\nexport class TextareaAutosize extends PureComponent {\n  constructor(props) {\n    super(props);\n    const {\n      maxRows = 2,\n      lineHeight = 16,\n      paddingTop = 5,\n      paddingBottom = 5,\n      fontSize = '1em',\n    } = props;\n\n    this.state = {\n      height: props.initialHeight,\n    };\n\n    this.input = React.createRef();\n    this.maxHeight = lineHeight * maxRows + paddingTop + paddingBottom;\n    this.resizeTextarea = evite.debounce(this.resizeTextarea);\n  }\n\n  componentDidMount() {\n    this.initialInputHeight = this.props.initialHeight;\n    this.prevScrolledHeight = this.input.scrollHeight;\n    if (this.props.focusOnMount) {\n      this.input.focus();\n    }\n  }\n\n  componentDidUpdate(prevProps, prevState, snapshot) {\n    this.resizeTextarea();\n  }\n\n  render() {\n    const {\n      onTextareaChange,\n      value,\n      name,\n      textAreaClass = '',\n      lineHeight = 16,\n      paddingTop = 15,\n      paddingBottom = 15,\n      paddingRight = 15,\n      paddingLeft = 15,\n      maxLength = 4000,\n      fontSize = '1em',\n      dataQaId = 'auto-resize-textarea',\n      ...restOfProps\n    } = this.props;\n\n    return (\n      <StyledTextArea\n        ref={(element) => (this.input = element)}\n        data-qa-id={dataQaId}\n        value={value}\n        name={name}\n        maxLength={maxLength}\n        onChange={this.onChange}\n        onKeyDown={this.onKeyDown}\n        height={this.state.height}\n        maxHeight={this.maxHeight}\n        className={textAreaClass}\n        lineHeight={lineHeight}\n        fontSize={fontSize}\n        paddingTop={paddingTop}\n        paddingBottom={paddingBottom}\n        paddingRight={paddingRight}\n        paddingLeft={paddingLeft}\n        {...restOfProps}\n      />\n    );\n  }\n\n  onChange = (e) => {\n    this.props.onTextareaChange(e.target.value);\n  };\n\n  onKeyDown = (e) => {\n    // Press Enter\n    if (e.keyCode === 13) {\n      // Add line break when user enter \"CTRL + Enter\"  or \"SHIFT + Enter\"\n      // We only need to manually enter new lines for Ctrl + enter\n      if (e.ctrlKey || evite.detects.isMobile) {\n        if (evite.detects.isMobile) e.preventDefault();\n        const value = `${this.input.value} \\r\\n`;\n        this.props.onTextareaChange(value);\n      } else if (!e.shiftKey) {\n        e.preventDefault();\n        this.props.beforeSend();\n      }\n    }\n  };\n\n  /**\n   * Use textarea's scrollHeight to expand/shrink the size of the textarea\n   */\n  resizeTextarea = () => {\n    if (!this.input) return;\n    // reset the height to the initial height to calculate  the scrollHeight\n    // This is useful to check if the textarea needs to shrink, when text is deleted\n    this.input.style.height = this.initialInputHeight;\n    const currScrollHeight = this.input.scrollHeight;\n\n    // scrollHeight changes when a line/row is added or removed from the textarea\n    // Only update the height if jumped to to new line or go back to previous line\n    if (this.prevScrolledHeight !== currScrollHeight) {\n      this.prevScrolledHeight = currScrollHeight;\n\n      this.setState({\n        height: currScrollHeight,\n      });\n    }\n  };\n}\n","import React, {Component} from 'react';\nimport {observer as mobxObserver} from 'mobx-react';\nimport {UserAvatar} from '~/view_invitation/avatars/components';\nimport {messagingStore} from '~/messaging/store';\nimport {StyledBubble} from '~/messaging/components/Message/StyledBubble';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\n/**\n * The message from host is displayed as the first message\n * in a host:guest (h2g) chat. The message itself is from the event\n * and not firebase.\n *\n */\n@mobxObserver\nexport class MessageFromHost extends Component {\n  render() {\n    const message = messagingStore.hostMessage;\n    if (!message) return null; // might not have a host message\n    const {host_id} = messagingStore.event;\n    const profile = messagingStore.getProfile(host_id) || {};\n    const isHost = messagingStore.userId === messagingStore.event.host_id;\n\n    return (\n      <div data-qa-id=\"message\" className={`message ${isHost ? 'message--right' : ''}`}>\n        <div className=\"message__wrapper\">\n          {!isHost && (\n            <UserAvatar\n              userId={host_id}\n              name={profile.name}\n              initials={profile.initials}\n              avatarDisk={profile.avatarDisk}\n              avatarUrl={profile.avatarUrl}\n              avatarCls=\"message__avatar\"\n            />\n          )}\n          <div className=\"message__profile\" data-qa-id=\"message-from-host\">\n            <StyledBubble isMsgFromSender={isHost} data-qa-id=\"message-from-host-body\">\n              <p className=\"host-message-preable\">MESSAGE FROM HOST</p>\n              <div className=\"host-message-body\" dangerouslySetInnerHTML={{__html: message}} />\n            </StyledBubble>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n","import React, {PureComponent} from 'react';\nimport {messagingStore} from '~/messaging/store';\nimport {ParticipantsList} from '~/messaging/components/ParticipantsList/ParticipantsList';\nimport './InfoModalContent.sass';\nimport {SNOOZE_OPTIONS} from '~/messaging/components/SnoozeOptions/snooze-options';\nimport {LeaveGroup} from '~/messaging/components/LeaveGroup/LeaveGroup';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Checkbox} from '~/common/_pb_components/atoms/Checkbox';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Input} from '~/common/_pb_components/atoms/Input';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\n\nexport class InfoModalContent extends PureComponent {\n  constructor(props) {\n    super(props);\n\n    const {groupName, groupType, onlyParticipants, group, guest} = this.props;\n    // There seems to be a bug here... sometimes accessing guest.value triggers an exception\n    const notifyIfAfter = guest.value ? guest.value.notifyIfAfter : false;\n    const isMuted = (notifyIfAfter && notifyIfAfter > Number(Date.now()) + 3155695200000) || false;\n\n    this.isBroadcast = groupType === 'broadcast';\n\n    // display time remaining if notifyIfAfter is > today's date, but less\n    // than the 100 year mark\n    const selectedSnoozeOption =\n      notifyIfAfter && notifyIfAfter > Date.parse(new Date()) && !isMuted ? '' : 'snooze-options-0';\n\n    // Group creator will be the host if it's a broadcast message\n    // Else, if the guest viewing the message matches the group's created by userId\n    this.isGroupCreator =\n      (this.isBroadcast && messagingStore.isHost) ||\n      (group.value && group.value.createdBy === messagingStore.userId);\n\n    this.state = {\n      muteNotifications: isMuted,\n      viewParticipants: onlyParticipants || false,\n      newGroupName: groupName || (groupType === 'h2g' ? '' : group.value ? group.value.name : ''),\n      selectedSnoozeOption,\n      showLeaveGroup: false,\n    };\n\n    // lookup for snooze values\n    this.snoozeMap = SNOOZE_OPTIONS;\n  }\n\n  handleGroupNameChange = (event) => {\n    this.setState({newGroupName: event.target.value});\n  };\n\n  handleMuteChange = () => {\n    this.setState({\n      muteNotifications: !this.state.muteNotifications,\n      selectedSnoozeOption: 'snooze-options-0',\n    });\n  };\n\n  handleParticipantsClick = () => {\n    this.setState({viewParticipants: true});\n  };\n\n  handleBackClick = (e) => {\n    e.preventDefault();\n    this.setState({viewParticipants: false});\n  };\n\n  handleSnoozeChange = (value) => {\n    // turn off mute if user clicked a snooze option\n    const {muteNotifications} = this.state;\n    if (muteNotifications && value) {\n      this.setState({muteNotifications: false});\n    }\n\n    this.setState({\n      selectedSnoozeOption: value || 'snooze-options-0',\n    });\n  };\n\n  handleCancelClick = (event) => {\n    event.preventDefault();\n    const {onCloseClick} = this.props;\n    if (onCloseClick) onCloseClick();\n    return false;\n  };\n\n  updateSnooze = async () => {\n    const {selectedSnoozeOption, muteNotifications} = this.state;\n    const {guest} = this.props;\n    const snoozeDuration = this.snoozeMap[selectedSnoozeOption].time;\n    let newNotifyTime;\n\n    // if muting, set to 200 years from now\n    if (snoozeDuration === 0) {\n      newNotifyTime = muteNotifications ? Number(Date.now()) + 6311390400000 : 0;\n    } else {\n      newNotifyTime = Number(Date.now()) + snoozeDuration;\n    }\n    const data = {notifyIfAfter: newNotifyTime};\n\n    try {\n      return guest.update(data);\n    } catch (error) {\n      evite.error(error.message, ' setting name failed', ' with data ', data);\n      this.setState({errorMsg: 'Error saving snooze option'});\n    }\n  };\n\n  updateGroupName = async () => {\n    const data = {name: this.state.newGroupName};\n\n    try {\n      return this.props.group.update(data);\n    } catch (error) {\n      evite.error(error.message, ' setting name failed', ' with data ', data);\n      this.setState({errorMsg: 'Error saving new group name'});\n    }\n  };\n\n  handleKeyPress = (event) => {\n    if (event.key === 'Enter') {\n      this.handleSaveClick(event);\n    }\n  };\n\n  toggleLeaveGroupView = (event) => {\n    event.preventDefault();\n    if (evite.detects.isMobile) {\n      const message =\n        'Leave this group\\n\\nYou will be removed from this group chat. This action cannot be undone.';\n      if (window.confirm(message)) {\n        this.handleLeaveGroup();\n      }\n    } else {\n      this.setState({showLeaveGroup: !this.state.showLeaveGroup});\n    }\n  };\n\n  handleLeaveGroup = async () => {\n    const {eventId, groupId} = this.props;\n    const url = `/tsunami/v1/services/event/${eventId}/group/${groupId}/guest/${window.guest_id}`;\n\n    const reqOptions = {\n      method: 'DELETE',\n      credentials: 'include',\n      cache: 'no-cache',\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    };\n    try {\n      const response = await evite.fetch(url, reqOptions);\n\n      if (response.ok) {\n        // redirect to hub\n        this.props.history.push(this.props.backLink);\n      } else {\n        console.error('handleLeaveGroup request failed with response', response.status);\n      }\n    } catch (error) {\n      console.error('Error with fetch on handleLeaveGroup', error);\n    }\n  };\n\n  handleSaveClick = async (event) => {\n    event.preventDefault();\n    const {groupType, isG2g} = this.props;\n    const {newGroupName, errorMsg} = this.state;\n\n    if (newGroupName && !(groupType === 'h2g' || isG2g) && this.isGroupCreator)\n      await this.updateGroupName();\n\n    await this.updateSnooze();\n\n    if (!errorMsg) {\n      this.props.onCloseClick();\n    }\n  };\n\n  render() {\n    const {participants, groupId, groupType, groupName, guest, isG2g, participantCount} =\n      this.props;\n    const {\n      muteNotifications,\n      newGroupName,\n      selectedSnoozeOption,\n      viewParticipants,\n      showLeaveGroup,\n    } = this.state;\n    const heading = this.isBroadcast ? 'Recipients' : 'Participants';\n\n    // Remove current user-host from recipient list\n    const {userId} = messagingStore;\n    if (userId in participants) {\n      delete participants[userId];\n    }\n    const headingCount = participantCount;\n\n    const virtualGroups = ['all', 'yes', 'maybe', 'no', 'undecided', 'attended'];\n    const isSpecialBroadcast = this.isBroadcast && virtualGroups.includes(groupId);\n    const placeholderText = isSpecialBroadcast ? groupName : 'Enter a group name';\n\n    return (\n      <div role=\"dialog\" aria-labelledby=\"group-chat-info\">\n        {!showLeaveGroup && (\n          <>\n            <div className=\"modal__header\">\n              <Typography variant=\"label1\" as=\"h1\">\n                Group Chat Info\n              </Typography>\n              <button\n                className=\"unstyled-button\"\n                onClick={this.handleCancelClick}\n                data-qa-id=\"close-group-info-modal\"\n              >\n                <PB_CloseLine />\n              </button>\n            </div>\n            <Divider marginTop=\"1.5rem\" marginBottom=\"1.5rem\" />\n            <form className=\"info-modal__form evite-form\">\n              {/* Only show this to the group creator on a group chat. Don't show this for 1:1 messages */}\n              {!(groupType === 'h2g' || isG2g) && this.isGroupCreator && (\n                <div className=\"info-modal__item info-modal__group-name\">\n                  <Input\n                    id=\"group-name\"\n                    label=\"Group Name\"\n                    type=\"text\"\n                    name=\"group-name\"\n                    placeholder={placeholderText}\n                    onChange={this.handleGroupNameChange}\n                    value={newGroupName}\n                    disabled={isSpecialBroadcast}\n                    onKeyPress={this.handleKeyPress}\n                    maxLength={25}\n                    autoFocus\n                    data-qa-id=\"group-name\"\n                  />\n                  {!isSpecialBroadcast && (\n                    <Typography\n                      variant=\"paragraph4\"\n                      classNames=\"sub-label\"\n                      data-qa-id=\"broadcast-group-name-disclaimer\"\n                    >\n                      Group name is visible to all participants\n                    </Typography>\n                  )}\n                </div>\n              )}\n\n              {groupType !== 'h2g' && !this.props.isG2g && headingCount > 0 && (\n                <div className=\"info-modal__item info-modal__participants-link\">\n                  <Typography variant=\"label2\" color=\"pebble\" data-qa-id=\"participant-count\">\n                    {heading} ({headingCount})\n                  </Typography>\n                  <ParticipantsList\n                    groupId={groupId}\n                    groupType={groupType}\n                    titleLabel={heading}\n                    onlyParticipants={this.props.onlyParticipants}\n                  />\n                </div>\n              )}\n\n              {/* Hide Snooze Options for now */}\n              {/* {!this.isBroadcast &&\n                !evite.features.isEnabled('messages_snooze') && (\n                  <div className=\"info-modal__item info-modal__snooze-options\">\n                    <SnoozeOptions\n                      onSnoozeChange={this.handleSnoozeChange}\n                      selectedSnoozeOption={selectedSnoozeOption}\n                      endSnoozeCallback={this.endSnoozeCallback}\n                      guest={guest}\n                      muteNotifications={muteNotifications}\n                    />\n                  </div>\n                )} */}\n\n              {!this.isBroadcast && !(groupType === 'h2g' && !evite_event.is_host_viewing) && (\n                <div className=\"info-modal__mute-notifications\">\n                  <Checkbox\n                    label=\"Mute Notifications\"\n                    id=\"messaging-mute-notifications\"\n                    data-qa-id=\"messaging-mute-notifications\"\n                    name=\"messaging-mute-notifications\"\n                    checked={muteNotifications}\n                    onChange={this.handleMuteChange}\n                  />\n                </div>\n              )}\n              {/* allow guests to leave group chats, we will later\n                  need to check for the creator of the group vs. the host in v2 */}\n              {groupType !== 'h2g' &&\n                !this.props.isG2g &&\n                !this.isBroadcast &&\n                !this.isGroupCreator && (\n                  <button\n                    className=\"unstyled-button link\"\n                    onClick={this.toggleLeaveGroupView}\n                    data-qa-id=\"leave-this-group\"\n                  >\n                    Leave this Group\n                  </button>\n                )}\n\n              <div className=\"info-modal__actions\">\n                <Button\n                  variant=\"secondary\"\n                  size=\"large\"\n                  onClick={this.handleCancelClick}\n                  data-qa-id=\"cancel-group-info-changes\"\n                >\n                  Cancel\n                </Button>\n                {!isSpecialBroadcast && (\n                  <Button\n                    variant=\"primary\"\n                    size=\"large\"\n                    onClick={this.handleSaveClick}\n                    fullWidth\n                    data-qa-id=\"save-group-info-changes\"\n                    data-impression-tracking=\"true\"\n                  >\n                    Save\n                  </Button>\n                )}\n              </div>\n            </form>\n          </>\n        )}\n        {showLeaveGroup && (\n          <>\n            <Divider marginTop=\"1rem\" marginBottom=\"1rem\" />\n            <LeaveGroup\n              leaveGroup={this.handleLeaveGroup}\n              toggleLeaveGroupView={this.toggleLeaveGroupView}\n            />\n          </>\n        )}\n      </div>\n    );\n  }\n}\n","import React, {PureComponent} from 'react';\nimport {Link} from 'react-router-dom';\nimport {observer as mobxObserver} from 'firebase-react-store';\nimport {messagingStore} from '~/messaging/store';\nimport {GroupedAvatars} from '~/messaging/components/GroupedAvatars/GroupedAvatars';\nimport {StackedAvatars} from '~/messaging/components/StackedAvatars/StackedAvatars';\nimport {InfoModalContent} from './InfoModalContent';\nimport {ParticipantsList} from '~/messaging/components/ParticipantsList/ParticipantsList';\nimport {SimpleModal} from '~/view_invitation/common/components/simple-modal';\nimport './MessageHeader.sass';\nimport {rtdb} from '~/messaging/database';\nimport {messagingPathname} from '~/messaging/utils/utils';\nimport {PB_Arrow} from '~/common/svg/PB_Arrow';\nimport {PB_InformationFill} from '~/common/svg/PB_InformationFill';\nimport {PB_MessagesLine} from '~/common/svg/PB_MessagesLine';\nimport {ghost, feedbackInformation} from '~sass/pb_styleguide/base/_exports.sass';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {Overlay} from '~/common/_pb_components/atoms/Overlay';\n\n@mobxObserver\nexport class MessageHeader extends PureComponent {\n  constructor(props) {\n    super(props);\n\n    // max number of avatars shown\n    this.maxShown = 4;\n    this.headingCopy = '';\n\n    // for special broadcasts\n    const {groupId, groupType, eventId, userId} = this.props;\n    const virtualGroups = ['all', 'yes', 'maybe', 'no', 'undecided', 'attended'];\n    this.isCustomBroadcast = groupType === 'broadcast' && !virtualGroups.includes(groupId);\n\n    // get document info from the groups path\n    const groupsPath = `/chat-q/events/${eventId}/groups/${groupId}`;\n    this.groupsDoc = rtdb.get(groupsPath);\n    // get document info from the guests path\n    const guestPath = `/chat-q/events/${eventId}/guests/${userId}/groups/${groupId}`;\n    this.guestDoc = rtdb.get(guestPath);\n\n    // guest to guest 1:1 message\n    this.isG2g =\n      !messagingStore.isHost &&\n      this.props.groupType === 'group' &&\n      this.props.participantCount === 2;\n\n    // exclude 'you', unless it is a h2g. h2g messages already exclude host from count\n    this.participantCount =\n      groupType === 'h2g' ? this.props.participantCount : this.props.participantCount - 1;\n\n    this.state = {\n      isModalOpen: false,\n      onlyParticipants: false,\n    };\n  }\n\n  componentWillUnmount() {\n    try {\n      this.groupsDoc && this.groupsDoc.close();\n      this.groupsDoc = null;\n\n      this.guestDoc && this.guestDoc.close();\n      this.guestDoc = null;\n    } catch (e) {\n      console.exception('Failed to close doc', e);\n    }\n  }\n\n  openModal = () => {\n    this.setState({isModalOpen: true});\n    if (this.props.onSwitchModal) {\n      this.props.onSwitchModal(true);\n    }\n  };\n\n  closeModal = () => {\n    this.setState({isModalOpen: false});\n    if (this.props.onSwitchModal) {\n      this.props.onSwitchModal(false);\n    }\n  };\n\n  handleGroupedAvatarsClick = (e) => {\n    e.preventDefault();\n    if (this.props.participantCount <= 2) return;\n\n    const {groupType, groupId} = this.props;\n\n    const qs = window.location.search;\n    this.props.history.push(\n      messagingPathname(`/messages/${groupType}/${groupId}/participants${qs}`)\n    );\n  };\n\n  renderParticipants = () => {\n    const {name} = this.groupsDoc.value;\n\n    if (this.participantCount <= this.maxShown) return null; // exclude 'you'\n\n    const headerText = name || `${this.participantCount} Participants`;\n    return (\n      <div className=\"grouped-avatars-name\" data-qa-id=\"grouped-avatars-name\">\n        {headerText}\n      </div>\n    );\n  };\n\n  renderBroadcastHeader = () => {\n    const {groupType, groupId, participantCount} = this.props;\n    const count = participantCount - 1; // exclude 'you'\n\n    if (groupType !== 'broadcast') return null;\n\n    if (this.isCustomBroadcast) {\n      if (this.groupsDoc && this.groupsDoc.value.name) {\n        return this.groupsDoc.value.name;\n      }\n      return `${count} Recipients`;\n    }\n    const rsvpCopy = groupId === 'undecided' ? 'Not Yet Replied' : groupId;\n    return groupId === 'all' ? 'All Guests' : `All ${rsvpCopy} RSVPs`;\n  };\n\n  render() {\n    const {participants, backLink, groupType, groupId, userId, eventId, participantCount} =\n      this.props;\n    const {isModalOpen} = this.state;\n\n    const titleLabel = groupType === 'broadcast' ? 'Recipients' : 'Participants';\n    const avatarType = this.isCustomBroadcast ? 'all' : groupId;\n    // for guests receiving 1-1 messages from host\n    const isGuestAndH2g = groupType === 'h2g' && !evite_event.is_host_viewing;\n\n    let modalChildren = [];\n    if (isModalOpen) {\n      // only create the children if the modal is open\n      if (this.state.onlyParticipants) {\n        modalChildren = (\n          <ParticipantsList\n            groupType={groupType}\n            groupId={groupId}\n            onlyParticipants\n            titleLabel={titleLabel}\n          />\n        );\n      } else {\n        modalChildren = (\n          <InfoModalContent\n            history={this.props.history}\n            userId={userId}\n            eventId={eventId}\n            groupType={groupType}\n            groupId={groupId}\n            participants={participants}\n            participantCount={this.participantCount}\n            backLink={backLink}\n            group={this.groupsDoc}\n            guest={this.guestDoc}\n            onlyParticipants={this.state.onlyParticipants}\n            onCloseClick={this.closeModal}\n            isG2g={this.isG2g}\n            groupName={\n              groupType === 'broadcast' && !this.isCustomBroadcast\n                ? this.renderBroadcastHeader()\n                : null\n            }\n          />\n        );\n      }\n    }\n    return (\n      <>\n        <div data-qa-id=\"message-header\" className=\"message-header\">\n          {backLink && (\n            <Link\n              data-qa-id=\"back-link\"\n              to={backLink}\n              role=\"button\"\n              aria-label=\"back\"\n              className=\"back-link\"\n            >\n              <PB_Arrow ratio={0.75} />\n            </Link>\n          )}\n\n          <div\n            data-qa-id=\"avatars-link\"\n            className={`show-participants ${this.participantCount < 2 ? 'disabled' : ''}`}\n            onClick={this.handleGroupedAvatarsClick}\n          >\n            {groupType !== 'broadcast' &&\n              (Object.keys(participants).length > 2 ? (\n                <>\n                  <StackedAvatars\n                    profiles={Object.values(participants)}\n                    maxShown={this.maxShown}\n                    participantCount={this.participantCount}\n                  >\n                    {this.renderParticipants()}\n                  </StackedAvatars>\n                  <Typography variant=\"paragraph2\" classNames=\"stacked-avatars__group-name\">\n                    {Object.values(participants)\n                      .map((user) => user.firstName || user.lastName || user.name)\n                      .join(', ')}\n                  </Typography>\n                </>\n              ) : (\n                <GroupedAvatars\n                  profiles={participants}\n                  maxShown={this.maxShown}\n                  participantCount={this.participantCount}\n                >\n                  {this.renderParticipants()}\n                </GroupedAvatars>\n              ))}\n            {groupType === 'broadcast' && (\n              <div className=\"grouped-icon-label\">\n                <div className={`broadcast-rsvp-${avatarType}`}>\n                  <PB_MessagesLine color={ghost} ratio={0.75} />\n                </div>\n                <Typography\n                  variant=\"paragraph2\"\n                  classNames=\"broadcast-group-name\"\n                  data-qa-id=\"broadcast-group-name\"\n                >\n                  {this.renderBroadcastHeader()}\n                </Typography>\n              </div>\n            )}\n          </div>\n\n          {participantCount > 1 && (\n            <button\n              data-qa-id=\"group-info\"\n              aria-label=\"info\"\n              type=\"button\"\n              className={`unstyled-button ${isGuestAndH2g ? 'hidden' : ''}`}\n              onClick={this.openModal}\n            >\n              <PB_InformationFill color={feedbackInformation} />\n            </button>\n          )}\n        </div>\n        <Overlay open={isModalOpen} children={modalChildren} popupWidth=\"37.1875rem\" />\n      </>\n    );\n  }\n}\n","import React, {PureComponent} from 'react';\nimport {ConversationList} from '~/messaging/components/ConversationList/ConversationList';\nimport {rtdb, serverPaths} from '~/messaging/database';\nimport './MessageHub.sass';\nimport {SingleConversation} from '~/messaging/components/ConversationList/SingleConversation';\nimport {Banner} from '~/messaging/components/Banner/Banner';\nimport {messagingStore} from '~/messaging/store';\nimport {MessageErrorBoundary} from '~/messaging/components/MessageErrorBoundary/MessageErrorBoundary';\nimport {VirtualGroups} from '~/messaging/components/MessageHub/VirtualGroups';\nimport {isCanceled} from '~/common/utils/event_utils';\nimport {messagingPathname} from '~/messaging/utils/utils';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_LockFill} from '~/common/svg/PB_LockFill';\nimport {pebble} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport class MessageHub extends PureComponent {\n  constructor(props) {\n    super(props);\n\n    const {isArchived, userId} = messagingStore;\n    let banner = null;\n    const isUnknownUser = !userId;\n\n    if (isArchived) {\n      banner = 'archived';\n    } else if (isUnknownUser) {\n      // Guest doesn't have a GID (landed via a sharable link)\n      banner = 'unknownUser';\n    }\n    this.state = {\n      messageTypeSelected: null,\n      editing: false,\n      banner,\n    };\n  }\n\n  componentDidMount() {\n    const {location} = this.props;\n    // This is when a user gets redirected back to the message hub from another route the user doesn't have access to\n    if (location.state && location.state.banner) {\n      this.setState({\n        banner: location.state.banner,\n      });\n    }\n  }\n\n  get routeBase() {\n    const {event_id} = window;\n    let base = '';\n\n    if (this.isPremium) {\n      base += '/plus/create';\n    } else {\n      base += '/event';\n    }\n\n    if (event_id) base += `/${event_id}`;\n    return base;\n  }\n\n  blur = () => {\n    if (document.activeElement) {\n      document.activeElement.blur();\n    }\n  };\n\n  redirectToNewConversation = () => {\n    messagingStore.selected = [];\n    const url = messagingPathname('/messages/new/');\n    this.props.history.push(url);\n  };\n\n  handleGroupCreated = (groupId, groupType) => {\n    const {history} = this.props;\n    const qs = window.location.search;\n    const conversationLink = messagingPathname(`/messages/${groupType}/${groupId}${qs}`);\n    history.push(conversationLink);\n    window.tags.track_event('create_q_group', {messageGroupType: groupType});\n  };\n\n  messageToHost = async (event, hostId) => {\n    const payload = {\n      guest_id: window.guest_id,\n      name: '',\n      is_broadcast: false,\n      user_ids: [hostId],\n    };\n    const url = `/tsunami/v1/services/event/${window.event_id}/group`;\n    const postGroup = {\n      method: 'POST',\n      credentials: 'include',\n      cache: 'no-cache',\n      body: JSON.stringify(payload),\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    };\n    try {\n      console.info('postGroup Fetch url', url);\n      const response = await evite.fetch(url, postGroup);\n      const responseJson = await response.json();\n      if (response.ok) {\n        console.info('postGroup Successful!', responseJson);\n        // send the path\n        this.handleGroupCreated(responseJson.group_id, responseJson.category);\n      } else {\n        // TODO: Handle Error\n        console.error('postGroup Failed with response', response.status);\n      }\n    } catch (e) {\n      // TODO: Handle Error if message didn't go through\n      console.error('postGroup Fetch Error', e);\n    }\n  };\n\n  /**\n   *\n   * @return {*}\n   */\n  getGuestView = () => {\n    const hostIds = [window.evite_event.host_ids];\n    const conversations = hostIds.map((hostId) => {\n      const users = {};\n      users[hostId] = hostId;\n      return (\n        <React.Fragment key={hostId}>\n          <SingleConversation\n            isCreateNew\n            convModClass=\"conversation-list__link--disabled\"\n            conversation={{\n              key: 'all',\n              value: {\n                isRead: true,\n                groupCategory: 'h2g',\n                messageStub: 'Send a message to your host',\n                users,\n              },\n            }}\n            desktop={this.props.desktop}\n            onDesktopConversationClick={this.props.onDesktopConversationClick}\n            onDesktopNewConversationClick={this.props.onDesktopNewConversationClick}\n          />\n        </React.Fragment>\n      );\n    });\n\n    return (\n      <div\n        data-qa-id=\"message-hub-container\"\n        id=\"message-hub-container\"\n        className=\"message-hub__list-container\"\n      >\n        {conversations}\n      </div>\n    );\n  };\n\n  render() {\n    const {isArchived, isHost, isCoHost, userId, isRsvpOff} = messagingStore;\n    const isUnknownUser = !userId;\n    const messageHubPath = !isUnknownUser ? `${serverPaths.guests}/${userId}/messageHub` : null;\n    const isSaveTheDate = window.evite_event?.used_as === 'save_the_date'; // Redundancy - isRsvpOff not always working\n\n    const showVirtualGroups = isHost && !isCoHost && !isRsvpOff && !isSaveTheDate;\n    return (\n      <div\n        data-qa-id=\"message-hub\"\n        className={`message-hub shadowbox ${showVirtualGroups ? 'message-hub--short' : ''}`}\n      >\n        {/* Show virtualgroups only for the primary host */}\n        {showVirtualGroups && <VirtualGroups />}\n\n        <MessageErrorBoundary>\n          <div className=\"message-hub__message-previews\">\n            <div\n              data-qa-id=\"message-hub-header\"\n              className={`message-hub__header ${isArchived ? 'message-hub__header--archived' : ''}`}\n            >\n              <Typography variant=\"label2\">Event Messages</Typography>\n              {this.getRightActions()}\n            </div>\n\n            {this.state.banner && this.getBanner()}\n\n            {isUnknownUser ? (\n              this.getGuestView()\n            ) : (\n              <ConversationList\n                {...this.props}\n                database={rtdb}\n                messageToHost={this.messageToHost}\n                path={messageHubPath}\n                orderByChild=\"messageDate\"\n                onDisabledConvoClick={this.onDisabledConvoClick}\n                desktop={this.props.desktop}\n                onDesktopConversationClick={this.props.onDesktopConversationClick}\n                onDesktopNewConversationClick={this.props.onDesktopNewConversationClick}\n              />\n            )}\n          </div>\n        </MessageErrorBoundary>\n      </div>\n    );\n  }\n\n  onDisabledConvoClick = (messageType) => {\n    this.setState({\n      banner: 'privateGuestList',\n      messageTypeSelected: messageType,\n    });\n  };\n\n  onBannerClose = () => {\n    this.setState({\n      banner: null,\n    });\n  };\n\n  getBanner = () => {\n    let bannerText = '';\n    let bannerCls = '';\n    let icon;\n    let type = 'warning';\n    let showCloseBtn = false;\n    const {banner} = this.state;\n\n    if (banner === 'archived' || banner === 'unknownUser') {\n      type = 'warning';\n      bannerText =\n        banner === 'archived'\n          ? 'Conversations can be viewed but are no longer active'\n          : messagingStore.isRsvpOff\n            ? 'Messaging is disabled, but you can send a reaction to the host.'\n            : 'To participate in this conversation, you must RSVP.';\n      icon = <PB_LockFill ratio={0.5} color={pebble} />;\n      bannerCls = 'message-hub__banner';\n    } else if (banner === 'privateGuestList') {\n      showCloseBtn = true;\n      const baseUrl = `${messagingStore.isPremium ? '/plus/create' : '/event'}/${\n        messagingStore.eventId\n      }`;\n      const optionsUrl = evite.detects.isMobile\n        ? 'options'\n        : messagingStore.isPremium\n          ? 'invite'\n          : 'guests';\n      const url = `${baseUrl}/${optionsUrl}/${window.location.search}`;\n\n      const messageType = this.state.messageTypeSelected === 'g2g' ? 'Guest' : 'Group';\n\n      bannerText = `The host hid the guest list. ${messageType} messaging is unavailable when the guest list is hidden.`;\n      bannerCls = 'banner--float banner--left-align message-hub__banner';\n\n      if (messagingStore.isHost) {\n        bannerText = (\n          <span data-qa-id=\"group-messaging-unavailable\">\n            Group messaging is unavailable when guest list is hidden.\n            <a className=\"banner__link\" href={url}>\n              Unhide guest list\n              <i className=\"icon-arrow-right\" />\n            </a>\n          </span>\n        );\n      }\n    }\n\n    return (\n      <Banner\n        type={type}\n        text={bannerText}\n        icon={icon}\n        bannerClass={bannerCls}\n        showCloseBtn={showCloseBtn}\n        onBannerClose={this.onBannerClose}\n      />\n    );\n  };\n\n  getRightActions = () => {\n    const {isArchived, isPrivateGuestList, isHost, isCoHost} = messagingStore;\n    const isUnknownUser = !messagingStore.userId;\n    // Don't show right actions for archived or hidden guest list for guests\n    if (isArchived || isUnknownUser || (!isHost && isPrivateGuestList)) {\n      return null;\n    }\n    return (\n      <div className=\"message-hub__rightActions\">\n        {!isCanceled(window.evite_event.status) && (\n          <Button\n            data-qa-id=\"new-message\"\n            onClick={this.redirectToNewConversation}\n            variant=\"primary\"\n            size=\"small\"\n          >\n            New\n          </Button>\n        )}\n      </div>\n    );\n  };\n}\n","import React from 'react';\nimport {Link} from 'react-router-dom';\nimport {messagingStore} from '~/messaging/store';\nimport './VirtualGroups.sass';\nimport {messagingPathname} from '~/messaging/utils/utils';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_MessagesLine} from '~/common/svg/PB_MessagesLine';\nimport {ghost, largishAndUp} from '~sass/pb_styleguide/base/_exports.sass';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\n\nexport function VirtualGroups(props) {\n  const {\n    isPremium,\n    eventId,\n    event: {origin},\n  } = messagingStore;\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n\n  const includeMaybe = !isPremium && origin !== 21;\n\n  const getLinks = () => {\n    const baseUrl = messagingPathname(`/messages/broadcast`);\n    const params = window.location.search || '';\n    // TODO UI FOR ATTENDED\n    const rsvpGroups = ['yes', 'no', 'undecided'];\n\n    if (includeMaybe) {\n      rsvpGroups.splice(1, 0, 'maybe');\n    }\n\n    return rsvpGroups.map((group, index) => {\n      const linkName =\n        group === 'undecided' ? 'No Reply' : `${group.charAt(0).toUpperCase()}${group.slice(1)}`;\n      const link = `${baseUrl}/${group}${params}`;\n      return (\n        <Link\n          aria-label={`Broadcast message to all guest with RSVP ${group}`}\n          key={`group-${index}`}\n          to={link}\n          className=\"virtual-groups__link\"\n          data-qa-id={`message-${linkName.replace(' ', '').toLowerCase()}-guests`}\n        >\n          <div className={`broadcast-rsvp-${group}`}>\n            <PB_MessagesLine color={ghost} ratio={0.75} />\n          </div>\n          <Typography variant=\"paragraph3\" color=\"charcoal\">\n            {linkName}\n          </Typography>\n        </Link>\n      );\n    });\n  };\n\n  return (\n    <>\n      <div className=\"virtual-groups__wrapper shadowbox\">\n        <Typography variant=\"label2\">Message Guests by RSVP</Typography>\n\n        <div className={`virtual-groups__links ${includeMaybe ? 'include-maybe' : ''}`}>\n          {getLinks()}\n        </div>\n      </div>\n      {largeScreens && <Divider />}\n    </>\n  );\n}\n","import {evite} from 'evite';\nimport React, {Component} from 'react';\nimport {collectionObserver} from 'firebase-react-store';\nimport XDate from 'xdate';\nimport {Message} from '~/messaging/components/Message/Message';\nimport {ProductEd} from '~/messaging/components/ProductEd/ProductEd';\nimport {ParticipantsList} from '~/messaging/components/ParticipantsList/ParticipantsList';\nimport {Widget} from '~/messaging/components/Message/Widget';\nimport {MessageFromHost} from '~/messaging/components/MessageFromHost/MessageFromHost';\nimport {ModalContent} from '~/messaging/components/ModalContent/ModalContent';\nimport {messagingStore} from '~/messaging/store';\nimport {convertToIso} from '~/create/utils/formatters';\nimport {CreateEditPollModalContent} from '~/messaging/components/polls/CreateEditPollModalContent';\n\nimport './MessageList.sass';\nimport {Overlay} from '~/common/_pb_components/atoms/Overlay';\n\n@collectionObserver()\nexport class MessageList extends Component {\n  constructor(props) {\n    super(props);\n    this.listRef = React.createRef();\n    this.state = {\n      isModalOpen: false,\n      modalChildren: [],\n      fetchingPage: false,\n      modalType: 'info',\n    };\n    this.onScroll = evite.debounce(this.onScroll, 500);\n\n    this.lastScrollPosition = -1;\n    this.scrollBottom = 0;\n    this.seenKeys = new Set();\n    this.isHost = messagingStore.isHost; // TODO - do we need to check for co-host\n\n    const today = new XDate();\n    const eventStateDate = convertToIso(messagingStore.event.start_datetime);\n    this.isEventPast = today.diffDays(eventStateDate) <= -1;\n  }\n\n  componentDidUpdate(prevProps, prevState, snapshot) {\n    const list = this.listRef.current;\n    if (!list) return;\n    const currLen = this.props.collection.length;\n    if (\n      // a new message was added\n      currLen > 0 &&\n      !this.seenKeys.has(this.props.collection[currLen - 1].key)\n    ) {\n      list.scrollTop = list.scrollHeight + 1000;\n      if (this.lastScrollPosition > -1) {\n        this.lastScrollPosition = list.scrollTop;\n      }\n    } else {\n      list.scrollTop = list.scrollHeight - this.scrollBottom;\n    }\n\n    this.props.collection.map((obj) => this.seenKeys.add(obj.key));\n  }\n\n  showModal = (trigger, profiles, sentToProfiles, heading, action, data, bodyOverWrite) => {\n    let modalChildren = [];\n    let modalType = 'info';\n    switch (trigger) {\n      case 'seenby':\n      case 'nonvoters':\n      case 'voters':\n        const isPoll = trigger === 'nonvoters' || trigger === 'voters';\n        modalChildren = (\n          <ParticipantsList\n            history={this.props.history}\n            participants={profiles}\n            groupId={this.props.groupId}\n            groupType={this.props.groupType}\n            onlyParticipants\n            titleLabel={heading}\n            sentToProfiles={sentToProfiles}\n            handleBackClick={this.closeModal}\n            backLabel=\"Group Chat\"\n            isSeenByModal\n            canMessageUsers={isPoll}\n            handleMessageUsersClick={action}\n            isPoll={isPoll}\n          />\n        );\n        break;\n      case 'edit':\n        modalType = 'poll';\n        modalChildren = (\n          <CreateEditPollModalContent\n            groupId={data.groupId}\n            onCloseClick={this.closeModal}\n            pollData={data}\n            onShowModal={this.showModal}\n          />\n        );\n        break;\n\n      case 'delete':\n        modalChildren = (\n          <ModalContent\n            action={action}\n            handleCloseModal={this.closeModal}\n            className=\"delete-poll-wrap\"\n            heading=\"Delete Poll\"\n            bodyCopy=\"By deleting this poll you will lose all of your votes. This\n            action cannot be undone.\"\n            cancelCopy=\"Cancel\"\n            actionCopy=\"Delete Poll\"\n          />\n        );\n        break;\n\n      case 'addOtherOption':\n        modalChildren = (\n          <ModalContent\n            action={action}\n            className=\"add-option-poll-wrap\"\n            handleCloseModal={this.closeModal}\n            heading=\"Other\"\n            bodyCopy={bodyOverWrite}\n            cancelCopy=\"Cancel\"\n            actionCopy=\"Submit Vote\"\n          />\n        );\n        break;\n    }\n    this.setState({isModalOpen: true, modalChildren, modalType});\n  };\n\n  closeModal = () => {\n    this.setState({isModalOpen: false});\n  };\n\n  onScroll = (e) => {\n    const {scrollCollection} = this.props;\n    const list = this.listRef.current;\n    if (!list) return;\n    if (list.scrollTop === 0 && this.lastScrollPosition !== 0) {\n      this.scrollBottom = list.scrollHeight - list.scrollTop;\n      this.setState({fetchingPage: true});\n\n      // events from firebase come almost immediately,\n      // so the spinner is never seen\n      setTimeout(() => {\n        this.setState({fetchingPage: false});\n      }, 5000);\n\n      if (scrollCollection && typeof scrollCollection === 'function') scrollCollection();\n    }\n    if (this.lastScrollPosition === -1) {\n      // scroll to bottom\n      this.lastScrollPosition = list.scrollTop = list.scrollHeight;\n    }\n    this.lastScrollPosition = list.scrollTop;\n  };\n\n  shouldComponentUpdate(nextProps, nextState) {\n    if (!nextProps.lockConversationRender) {\n      return true;\n    }\n    return !this.props.lockConversationRender && !nextProps.lockConversationRender;\n  }\n\n  render() {\n    const {groupType, groupId, participants, participantCount} = this.props;\n    const messages = this.getMessages(messagingStore.rsvpResponse);\n\n    return (\n      <div\n        data-qa-id=\"message-list\"\n        ref={this.listRef}\n        onScroll={this.onScroll}\n        className=\"message-list\"\n        aria-live=\"polite\"\n      >\n        {this.state.fetchingPage && <div className=\"css-spinner\" />}\n        <ProductEd\n          participantCount={participantCount}\n          participants={participants}\n          groupType={groupType}\n          groupId={groupId}\n          messageCount={messages.length}\n        />\n        <div className=\"message-list__body\">{messages}</div>\n      </div>\n    );\n  }\n\n  getMessages = (rsvpResponse) => {\n    const {userId, collection = [], groupId, groupType} = this.props;\n    const {isModalOpen, modalType} = this.state;\n    const messageList = [];\n\n    const showHostMessage = groupType === 'h2g' || (groupType === 'broadcast' && groupId === 'all');\n\n    // If there's a host message, add that to the top of the message list\n    if (showHostMessage) {\n      messageList.push(<MessageFromHost key=\"message-from-host\" />);\n    }\n\n    if (collection.length > 0) {\n      const userIds = collection.map((item) => item.value.createdBy);\n      const lastMessageIndex = userIds.lastIndexOf(userId);\n\n      const messages = collection.map((item, index) => {\n        const {key, value} = item;\n        // if the previous message's user_id is the same as the current one, we don't show the profile info\n        const newMessage =\n          index === 0 || value.createdBy !== this.props.collection[index - 1].value.createdBy;\n        let showSeenBy;\n\n        if (groupType === 'broadcast') {\n          // Seen by shows for every broadcast message: EVT-13043\n          showSeenBy = true;\n        } else {\n          // If the current message is the current user's last message, we show the seenBy text\n          showSeenBy = lastMessageIndex === index;\n        }\n\n        // Only show the RSVP feature for the last message of the guest\n        // Don't show it if the sender is a host or the event has passed\n        const showRsvp = !this.isEventPast && !this.isHost && this.getLastRsvpIndex() === index;\n\n        // Show timestamp for first message after midnight and after 30 minutes of the last message\n        let showTimestamp;\n        if (index === 0) {\n          showTimestamp = true;\n        } else {\n          const currentMessageTS = new XDate(parseInt(value.createdAt));\n          const prevMessateTS = new XDate(\n            parseInt(this.props.collection[index - 1].value.createdAt)\n          );\n\n          // If the current message was sent on a new day or it's been more than 30 mins since the previous message\n          showTimestamp =\n            currentMessageTS.toDateString() !== prevMessateTS.toDateString() ||\n            prevMessateTS.diffMinutes(currentMessageTS) > 30;\n        }\n\n        const isWidget = !!value.widgetId;\n        if (isWidget) {\n          return (\n            <div className=\"message-list__message\" key={key}>\n              <Widget\n                history={this.props.history}\n                key={key}\n                messageId={key}\n                newMessage={newMessage}\n                widgetId={value.widgetId}\n                createdBy={value.createdBy}\n                createdByName={value.createdByName}\n                showTimestamp={showTimestamp}\n                groupType={groupType}\n                groupId={groupId}\n                sentTo={this.props.participants}\n                participantCount={this.props.participantCount}\n                setReadTimeStamp={this.props.setReadTimeStamp}\n                onShowModal={this.showModal}\n              />\n              <Overlay\n                open={isModalOpen}\n                type=\"popup\"\n                popupWidth=\"31.25rem\"\n                children={this.state.modalChildren}\n              />\n            </div>\n          );\n        }\n        return (\n          <div className=\"message-list__message\" key={key}>\n            <Message\n              key={key}\n              messageId={key}\n              createdByName={value.createdByName}\n              createdAt={value.createdAt}\n              createdBy={value.createdBy}\n              message={value.message}\n              type={value.type}\n              newMessage={newMessage}\n              showTimestamp={showTimestamp}\n              groupType={groupType}\n              groupId={groupId}\n              seenBy={value.seenBy}\n              showSeenBy={showSeenBy}\n              setReadTimeStamp={this.props.setReadTimeStamp}\n              onShowModal={this.showModal}\n              showRsvp={showRsvp}\n            />\n            <Overlay\n              open={isModalOpen}\n              type=\"popup\"\n              children={this.state.modalChildren}\n              popupWidth=\"40rem\"\n            />\n          </div>\n        );\n      });\n      messageList.push(...messages);\n    }\n\n    return messageList;\n  };\n\n  /**\n   * Returns the index of the rsvp type message\n   * @returns {number}\n   */\n  getLastRsvpIndex = () => {\n    const {collection = []} = this.props;\n    for (let i = collection.length - 1; i >= 0; i--) {\n      const {type} = collection[i].value;\n      if (type === 'rsvp') {\n        return i;\n      }\n    }\n    return -1;\n  };\n}\n","import React, {useEffect, useState} from 'react';\nimport {DatabaseLoader} from '~/messaging/database';\nimport {MessageHub} from '~/messaging/components/MessageHub/MessageHub';\nimport './Messaging.sass';\n\n// make sure the store is initialized\nimport {messagingStore} from '~/messaging/store';\nimport {useMatchQuery} from '~/common/hooks/useMatchQuery';\nimport {largishAndUp} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport function Messaging(props) {\n  const {matches: largeScreens} = useMatchQuery(`(min-width: ${largishAndUp})`);\n  useEffect(() => {\n    document.body.classList.add('messages');\n    return () => {\n      document.body.classList.remove('messages');\n    };\n  }, []);\n  const [desktopConversationPreviewMode, setDesktopConversationPreviewMode] = useState();\n\n  const isUserUnknown = !messagingStore.userId; // User not signed in or doesn't have a gid\n\n  const onDesktopConversationClick = (e) => {\n    // TODO: Open existing conversation in inline view\n  };\n\n  const onDesktopNewConversationClick = (e) => {\n    // TODO: Open new conversation in inline view\n  };\n\n  const component = (\n    <div>\n      <MessageHub\n        {...props}\n        onDesktopConversationClick={onDesktopConversationClick}\n        onDesktopNewConversationClick={onDesktopNewConversationClick}\n        desktop={largeScreens}\n      />\n      {/* {largeScreens && (\n        <div className=\"message-hub\">\n          {desktopConversationPreviewMode === 'existing' ? (\n            <Conversation {...props} />\n          ) : desktopConversationPreviewMode === 'new' ? (\n            <NewConversation {...props} />\n          ) : (\n            <div className=\"messaging__desktop-conversation-previewer\">\n              <PB_MessagesLine ratio={1.75} />\n              <Typography variant=\"header2\">Your Messages</Typography>\n              <Typography variant=\"paragraph1\">Send private messages to your guests</Typography>\n              <Button\n                variant=\"primary\"\n                size=\"small\"\n                data-qa-id=\"desktopPreviewerSendAMessage\"\n                onClick={onDesktopNewConversationClick}\n              >\n                Send a message\n              </Button>\n            </div>\n          )}\n        </div>\n      )} */}\n    </div>\n  );\n\n  // If guest is unknown, don't init the database\n  if (isUserUnknown) {\n    return component;\n  }\n  console.log('USING DATABASELOADER');\n  return <DatabaseLoader>{component}</DatabaseLoader>;\n}\n","import {PureComponent} from 'react';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport './ModalContent.sass';\n\n/**\n * ModalContent is a basic component for use with SimpleModal for simple actions.\n */\n\nexport class ModalContent extends PureComponent {\n  handleActionCall = () => {\n    const doTheThing = this.props.action.bind(this);\n    doTheThing();\n    this.props.handleCloseModal();\n  };\n\n  render() {\n    const {className, heading, bodyCopy, cancelCopy, actionCopy} = this.props;\n    return (\n      <div className={`modal-content ${className}`}>\n        <Typography variant=\"header3\" as=\"h2\">\n          {heading}\n        </Typography>\n        <Typography variant=\"paragraph2\">{bodyCopy}</Typography>\n        <div className=\"button-group\">\n          <Button\n            variant=\"secondary\"\n            size=\"large\"\n            onClick={this.props.handleCloseModal}\n            data-qa-id=\"modal-close\"\n          >\n            {cancelCopy}\n          </Button>\n          <Button\n            variant=\"primary\"\n            size=\"large\"\n            onClick={this.handleActionCall}\n            data-impression-tracking=\"true\"\n            data-qa-id=\"modal-action\"\n          >\n            {actionCopy}\n          </Button>\n        </div>\n      </div>\n    );\n  }\n}\n","import React, {PureComponent} from 'react';\nimport {SingleGuest} from '~/messaging/components/NewConversation/SingleGuest';\nimport {ShowMoreBtn} from '~/messaging/components/NewConversation/ShowMoreBtn';\nimport {GuestListContext} from '~/messaging/components/NewConversation/GuestListContext';\nimport {messagingStore} from '~/messaging/store';\nimport {guestlistStore} from '~/view_invitation/guestlist/store';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport class AllGuests extends PureComponent {\n  constructor(props) {\n    super(props);\n\n    evite.injectStores('guestlist', this);\n    this.state = {\n      currentPage: 0,\n      guests: [],\n      hasMore: false,\n      isExpanded: true,\n    };\n  }\n\n  componentDidMount() {\n    this.mounted = true;\n\n    this.getGuests(this.state.currentPage);\n  }\n\n  componentWillUnmount() {\n    this.mounted = false;\n  }\n\n  componentDidUpdate(prevProps) {\n    const {searchString} = this.props;\n    if (searchString !== prevProps.searchString) {\n      this.deletePreviousGuests = true;\n      this.getGuests(0);\n    }\n  }\n\n  getGuests = async (page) => {\n    const {searchString, updateGuestsLoading, perPage} = this.props;\n    let searchObj = {\n      per_page: perPage,\n    };\n\n    updateGuestsLoading(true);\n\n    if (searchString.length) {\n      searchObj = {\n        ...searchObj,\n        name: searchString,\n      };\n    }\n\n    searchObj.page = page;\n    if (this.mounted) this.setState({currentPage: page});\n\n    const newGuests = await messagingStore.searchProfiles(searchObj);\n    if (this.mounted) this.setState({hasMore: newGuests.hasMore});\n\n    if (newGuests.length) {\n      const allGuest = !this.deletePreviousGuests ? this.state.guests.concat(newGuests) : newGuests;\n\n      if (this.mounted) {\n        this.setState({\n          guests: allGuest,\n        });\n      }\n      updateGuestsLoading(false);\n    } else {\n      const updatedGuests = this.deletePreviousGuests ? [] : [...this.state.guests];\n      if (this.mounted) this.setState({guests: updatedGuests});\n      updateGuestsLoading(false);\n    }\n  };\n\n  shouldShowMoreBtn = () => this.state.hasMore;\n\n  getNextPage = async () => {\n    const nextPage = this.state.currentPage + 1;\n    if (this.deletePreviousGuests) this.deletePreviousGuests = false;\n\n    await this.getGuests(nextPage);\n    this.setState({currentPage: nextPage});\n  };\n\n  handleHeaderClick = () => {\n    this.setState({isExpanded: !this.state.isExpanded});\n  };\n\n  render() {\n    const {onHandleToggleGuest, recipients} = this.props;\n    const guestlistData = guestlistStore.guestlist;\n    const {guests, isExpanded} = this.state;\n    const shouldShowMoreBtn = this.shouldShowMoreBtn();\n    const count = `all_count`;\n\n    return (\n      <GuestListContext.Consumer>\n        {({isSelectEnabled}) => (\n          <div className=\"newConversation-modal__rsvp_group\" data-qa-id=\"guestlist-panel-all\">\n            {guests.map((guest) => {\n              const selected = recipients && !!recipients.find((x) => x.userId === guest.userId);\n              return (\n                <SingleGuest\n                  onHandleToggleGuest={onHandleToggleGuest}\n                  key={guest.userId}\n                  guest={guest}\n                  selected={selected}\n                />\n              );\n            })}\n\n            {shouldShowMoreBtn && <ShowMoreBtn handleOnClick={this.getNextPage} />}\n          </div>\n        )}\n      </GuestListContext.Consumer>\n    );\n  }\n}\n","import React, {Component, PureComponent} from 'react';\nimport {observer} from 'mobx-react';\nimport {Search} from '~/messaging/components/NewConversation/Search';\nimport {PB_SearchLine} from '~/common/svg/PB_SearchLine';\nimport {charcoal, emeraldWebText} from '~sass/pb_styleguide/base/_exports.sass';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\n\nexport class Filters extends PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isSearch: true,\n      searchString: '',\n      isSearchShowing: false,\n    };\n  }\n\n  componentDidMount() {\n    if (this.props.isRsvpOff) {\n      this.showSearch();\n    }\n  }\n\n  searchChanged = (searchString) => {\n    const {onSearchChanged} = this.props;\n    if (searchString.length) {\n      this.setState({isSearch: true, searchString});\n    } else {\n      this.setState({isSearch: false, searchString});\n    }\n    onSearchChanged(searchString);\n  };\n\n  showSearch = () => {\n    this.setState({isSearchShowing: true});\n    this.searchChanged('');\n    this.props.onSearchNav(true);\n  };\n\n  hideSearch = () => {\n    this.setState({\n      isSearch: false,\n      searchString: '',\n      isSearchShowing: false,\n    });\n    this.props.onSearchNav(false);\n  };\n\n  render() {\n    const {rsvpFilter, onApplyFilter, isRsvpOff} = this.props;\n\n    return (\n      <div>\n        <div\n          data-qa-id=\"new-conversation-filters\"\n          className=\"newConversation__filters\"\n          role=\"tablist\"\n          aria-label=\"Filter Guests\"\n        >\n          <button\n            className={`newConversation__filter searchFilter ${\n              this.state.isSearchShowing ? 'active' : ''\n            }`}\n            role=\"tab\"\n            onClick={this.showSearch}\n            aria-label=\"search\"\n            aria-selected={this.state.isSearchShowing}\n            data-qa-id=\"new-message-search\"\n          >\n            <PB_SearchLine\n              ratio={0.5}\n              color={this.state.isSearchShowing ? emeraldWebText : charcoal}\n            />\n          </button>\n          {!isRsvpOff && (\n            <FiltersOptions\n              rsvpFilter={rsvpFilter}\n              isSearchShowing={this.state.isSearchShowing}\n              onApplyFilter={(e) => {\n                this.hideSearch();\n                onApplyFilter(e);\n              }}\n            />\n          )}\n        </div>\n        <Divider marginTop={0} marginBottom={this.state.isSearchShowing ? '0.5rem' : 0} />\n        {this.state.isSearchShowing && (\n          <Search\n            searchText={this.state.searchString}\n            onSearchChanged={this.searchChanged}\n            placeHolder=\"Search guests\"\n          />\n        )}\n      </div>\n    );\n  }\n}\n\n@observer\nclass FiltersOptions extends Component {\n  constructor(props) {\n    super(props);\n    evite.injectStores('guestlist', this);\n  }\n\n  render() {\n    const guestList = this.guestlist;\n    const yes_count = guestList.invitees_yes;\n    const no_count = guestList.invitees_no;\n    const undecided_count = guestList.invitees_undecided;\n    const maybe_count = guestList.invitees_maybe;\n    const totalCount = guestList.totalInviteesCount;\n    const {checked_in_count} = guestList;\n\n    const {rsvpFilter, onApplyFilter} = this.props;\n    const {\n      user_has_active_premium_pass,\n      event_has_passed,\n      evite_event: {is_host_viewing, origin},\n    } = window;\n    const is_non_fabric_premium = origin === 13;\n    const is_fabric = origin === 21;\n\n    return (\n      <>\n        {is_host_viewing &&\n          user_has_active_premium_pass &&\n          event_has_passed &&\n          checked_in_count > 1 && (\n            <button\n              className={`newConversation__filter attended ${\n                rsvpFilter === 'attended' ? 'active' : ''\n              }`}\n              aria-selected={rsvpFilter === 'attended'}\n              role=\"tab\"\n              onClick={(e) => onApplyFilter('attended')}\n              data-qa-id=\"new-message-attended-guests\"\n            >\n              Attended {`(${checked_in_count})`}\n            </button>\n          )}\n        <button\n          className={`newConversation__filter yes ${rsvpFilter === 'yes' ? 'active' : ''}`}\n          aria-selected={rsvpFilter === 'yes'}\n          role=\"tab\"\n          onClick={(e) => onApplyFilter('yes')}\n          data-qa-id=\"new-message-yes-guests\"\n        >\n          Yes {`(${yes_count})`}\n        </button>\n        {!is_fabric && !is_non_fabric_premium && (\n          <button\n            className={`newConversation__filter maybe ${rsvpFilter === 'maybe' ? 'active' : ''}`}\n            aria-selected={rsvpFilter === 'maybe'}\n            role=\"tab\"\n            onClick={(e) => onApplyFilter('maybe')}\n            data-qa-id=\"new-message-maybe-guests\"\n          >\n            Maybe {`(${maybe_count})`}\n          </button>\n        )}\n        <button\n          className={`newConversation__filter no ${rsvpFilter === 'no' ? 'active' : ''}`}\n          aria-selected={rsvpFilter === 'no'}\n          role=\"tab\"\n          onClick={(e) => onApplyFilter('no')}\n          data-qa-id=\"new-message-no-guests\"\n        >\n          No {`(${no_count})`}\n        </button>\n        <button\n          className={`newConversation__filter no_reply ${\n            rsvpFilter === 'undecided' ? 'active' : ''\n          }`}\n          aria-selected={rsvpFilter === 'undecided'}\n          role=\"tab\"\n          onClick={(e) => onApplyFilter('undecided')}\n          data-qa-id=\"new-message-noreply-guests\"\n        >\n          No Reply {`(${undecided_count})`}\n        </button>\n        <button\n          className={`newConversation__filter all ${\n            rsvpFilter === 'all' && !this.props.isSearchShowing ? 'active' : ''\n          }`}\n          aria-selected={rsvpFilter === 'all'}\n          role=\"tab\"\n          onClick={(e) => {\n            onApplyFilter('all');\n          }}\n          data-qa-id=\"new-message-all-guests\"\n        >\n          All ({totalCount})\n        </button>\n      </>\n    );\n  }\n}\n","import React, {PureComponent} from 'react';\nimport {SingleGuest} from '~/messaging/components/NewConversation/SingleGuest';\nimport {ShowMoreBtn} from '~/messaging/components/NewConversation/ShowMoreBtn';\nimport {GuestListContext} from '~/messaging/components/NewConversation/GuestListContext';\nimport {messagingStore} from '~/messaging/store';\nimport {guestlistStore} from '~/view_invitation/guestlist/store';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport class GuestByRSVP extends PureComponent {\n  constructor(props) {\n    super(props);\n\n    evite.injectStores('guestlist', this);\n    this.state = {\n      currentPage: 0,\n      guests: [],\n      hasMore: false,\n      isExpanded: true,\n    };\n  }\n\n  componentDidMount() {\n    this.mounted = true;\n\n    const {rsvpClass} = this.props;\n    this.getGuests(this.state.currentPage, rsvpClass);\n  }\n\n  componentWillUnmount() {\n    this.mounted = false;\n  }\n\n  componentDidUpdate(prevProps) {\n    const {rsvpClass, searchString} = this.props;\n    if (searchString !== prevProps.searchString) {\n      this.deletePreviousGuests = true;\n      this.getGuests(0, rsvpClass);\n    }\n  }\n\n  getGuests = async (page, rsvpFilterVal) => {\n    const {searchString, updateGuestsLoading, perPage} = this.props;\n    const rsvpVal = rsvpFilterVal === 'attended' ? '' : rsvpFilterVal;\n    const checkedInFilterVal = rsvpFilterVal === 'attended' ? 'true' : '';\n    let searchObj = {\n      per_page: perPage,\n      rsvp: rsvpVal,\n      checked_in: checkedInFilterVal,\n    };\n\n    updateGuestsLoading(true);\n\n    if (searchString.length) {\n      searchObj = {\n        ...searchObj,\n        name: searchString,\n      };\n    }\n\n    searchObj.page = page;\n    if (this.mounted) this.setState({currentPage: page});\n\n    const newGuests = await messagingStore.searchProfiles(searchObj);\n    if (this.mounted) this.setState({hasMore: newGuests.hasMore});\n\n    if (newGuests.length) {\n      const allGuest = !this.deletePreviousGuests ? this.state.guests.concat(newGuests) : newGuests;\n\n      if (this.mounted) {\n        this.setState({\n          guests: allGuest,\n        });\n      }\n      updateGuestsLoading(false);\n    } else {\n      const updatedGuests = this.deletePreviousGuests ? [] : [...this.state.guests];\n      if (this.mounted) this.setState({guests: updatedGuests});\n      updateGuestsLoading(false);\n    }\n  };\n\n  shouldShowMoreBtn = () => this.state.hasMore;\n\n  getNextPage = async () => {\n    const {rsvpClass} = this.props;\n    const nextPage = this.state.currentPage + 1;\n    if (this.deletePreviousGuests) this.deletePreviousGuests = false;\n\n    await this.getGuests(nextPage, rsvpClass);\n    this.setState({currentPage: nextPage});\n  };\n\n  handleHeaderClick = () => {\n    this.setState({isExpanded: !this.state.isExpanded});\n  };\n\n  render() {\n    const {rsvp, onHandleToggleGuest, rsvpClass, recipients} = this.props;\n    const guestlistData = guestlistStore.guestlist;\n    const isRsvpOff = window.evite_event.rsvp_off;\n    const {guests, isExpanded} = this.state;\n    const shouldShowMoreBtn = this.shouldShowMoreBtn();\n    const count = `${rsvpClass}_count`;\n    let rsvpValue = rsvp;\n\n    if (guestlistData.rsvp_style) {\n      if (rsvpClass !== 'undecided' && rsvpClass !== 'attended') {\n        rsvpValue = guestlistData.rsvp_style[rsvpClass];\n      }\n    }\n\n    return (\n      <GuestListContext.Consumer>\n        {() => (\n          <div\n            className={`newConversation-modal__rsvp_group ${isExpanded ? '' : 'collapse'}`}\n            data-qa-id={`guestlist-panel-${rsvpClass}`}\n          >\n            {!isRsvpOff && (\n              <div\n                className={`newConversation-modal__rsvp_header ${rsvpClass}`}\n                onClick={this.handleHeaderClick}\n              >\n                <Typography\n                  variant=\"paragraph2\"\n                  data-qa-id={`rsvp-${rsvpValue.toLowerCase().replaceAll(' ', '-')}`}\n                >\n                  {rsvpValue}\n                </Typography>\n                <Typography\n                  variant=\"paragraph2\"\n                  data-qa-id={`rsvp-${rsvpValue.toLowerCase().replaceAll(' ', '-')}-count`}\n                  data-qa-value={this.guestlist[count]}\n                >\n                  ({this.guestlist[count]})\n                </Typography>\n              </div>\n            )}\n\n            <ul className=\"newConversation-modal__rsvp_section\">\n              {guests.map((guest) => {\n                const selected = recipients && !!recipients.find((x) => x.userId === guest.userId);\n                return (\n                  <SingleGuest\n                    onHandleToggleGuest={onHandleToggleGuest}\n                    key={guest.userId}\n                    guest={guest}\n                    selected={selected}\n                  />\n                );\n              })}\n            </ul>\n\n            {shouldShowMoreBtn && <ShowMoreBtn handleOnClick={this.getNextPage} />}\n          </div>\n        )}\n      </GuestListContext.Consumer>\n    );\n  }\n}\n","import React, {Component} from 'react';\nimport {observer as mobxObserver, inject} from 'mobx-react';\nimport {messagingStore} from '~/messaging/store';\nimport {SingleGuest} from '~/messaging/components/NewConversation/SingleGuest';\nimport {GuestListContext} from '~/messaging/components/NewConversation/GuestListContext';\nimport {GuestByRSVP} from '~/messaging/components/NewConversation/GuestByRSVP';\nimport {HostActions} from '~/messaging/components/NewConversation/HostActions';\nimport {ShowMoreBtn} from '~/messaging/components/NewConversation/ShowMoreBtn';\nimport {VideoProcessing} from '~/common/components/VideoProcessing/VideoProcessing';\n\nimport * as utils from '~/view_invitation/utils';\nimport {AllGuests} from '~/messaging/components/NewConversation/AllGuests';\n\n@mobxObserver\nexport class GuestList extends Component {\n  constructor(props) {\n    super(props);\n\n    evite.injectStores('guestlist', this);\n\n    this.userId = messagingStore.userId;\n    this.isHost = messagingStore.isHost;\n    this.eventOrigin = messagingStore.event.origin;\n    this.includeMaybe = !window.is_premium && this.eventOrigin !== 21;\n    this.per_page = 50;\n    // TODO attendance\n    this.rsvpGroups = ['yes', 'no', 'undecided'];\n\n    if (this.includeMaybe) {\n      this.rsvpGroups.push('maybe');\n    }\n\n    this.state = {\n      guests: [],\n      deletePreviousGuests: false,\n      hasMore: false,\n    };\n\n    // set the guestlist context values\n    this.contextValue = {\n      isSelectEnabled:\n        this.props.onHandleToggleGuest && typeof this.props.onHandleToggleGuest === 'function',\n    };\n  }\n\n  componentDidMount() {\n    this.mounted = true;\n    // only load guests on componentDidMount if on mobile since\n    // we're loading 'yes' by default\n    if (utils.isMobile()) {\n      this.getGuests();\n    }\n  }\n\n  componentWillUnmount() {\n    this.mounted = false;\n  }\n\n  componentDidUpdate(prevProps) {\n    // TODO: eventually lift state up or place in store instead\n    const {isSearch, rsvpFilter} = this.props;\n    if (isSearch !== prevProps.isSearch || rsvpFilter !== prevProps.rsvpFilter) {\n      this.setState({deletePreviousGuests: true}, this.getGuests);\n    }\n  }\n\n  getNextPage = () => {\n    const nextPage = this.props.currentPage + 1;\n    if (this.state.deletePreviousGuests) this.setState({deletePreviousGuests: false});\n    this.getGuests(nextPage);\n  };\n\n  getGuests = async (page) => {\n    const {isSearch, rsvpFilter, searchString, updateCurrentPage, updateGuestsLoading} = this.props;\n    let searchObj = {per_page: this.per_page};\n\n    updateGuestsLoading(true);\n\n    if (isSearch && searchString.length) {\n      searchObj = {\n        ...searchObj,\n        name: searchString,\n      };\n    } else {\n      searchObj = {\n        ...searchObj,\n        rsvp: rsvpFilter === 'all' || rsvpFilter === 'attended' ? '' : rsvpFilter,\n        checked_in: rsvpFilter === 'attended' ? 'true' : '',\n      };\n    }\n\n    if (page) {\n      searchObj.page = page;\n      updateCurrentPage(page);\n    }\n    const newGuests = await messagingStore.searchProfiles(searchObj);\n    if (this.mounted) this.setState({hasMore: newGuests.hasMore});\n\n    if (newGuests.length) {\n      const allGuest = !this.state.deletePreviousGuests\n        ? this.state.guests.concat(newGuests)\n        : newGuests;\n\n      if (this.mounted) {\n        this.setState({\n          guests: allGuest,\n        });\n      }\n      updateGuestsLoading(false);\n    } else {\n      const updatedGuests = this.state.deletePreviousGuests ? [] : [...this.state.guests];\n      if (this.mounted) {\n        this.setState({\n          guests: updatedGuests,\n        });\n      }\n      updateGuestsLoading(false);\n    }\n  };\n\n  shouldShowMoreBtn = () => this.state.hasMore;\n\n  render() {\n    const {\n      onHandleToggleGuest,\n      recipients,\n      isSearch,\n      addAllRecipients,\n      removeAllRecipients,\n      showGuestsLoading,\n      searchString,\n      isRsvpOff,\n    } = this.props;\n    const {\n      user_has_active_premium_pass,\n      event_has_passed,\n      evite_event: {is_host_viewing},\n    } = window;\n    const {checked_in_count} = this.guestlist;\n\n    const {guests} = this.state;\n    const shouldShowMoreBtn = this.shouldShowMoreBtn();\n\n    const shouldShowHostActions = !isSearch && this.isHost && guests && guests.length > 0;\n    if (window.evite_event.status === 'videoproc') {\n      return (\n        <>\n          {shouldShowHostActions && (\n            <HostActions\n              addAllRecipients={addAllRecipients}\n              removeAllRecipients={removeAllRecipients}\n              guests={guests}\n            />\n          )}\n          <div className=\"video-processing-margin-top\">\n            <VideoProcessing video_id={window.evite_event.event_videos_id} />\n          </div>\n        </>\n      );\n    }\n    return (\n      <>\n        {shouldShowHostActions && (\n          <HostActions\n            addAllRecipients={addAllRecipients}\n            removeAllRecipients={removeAllRecipients}\n            guests={guests}\n          />\n        )}\n        <GuestListContext.Provider value={this.contextValue}>\n          <div\n            id=\"new-conversation-guest-list\"\n            data-qa-id=\"new-conversation-guest-list\"\n            className={`newConversation-modal__guest_list ${\n              this.guestlist.shouldShowPlainStyle ? 'newConversation-modal__guest_list--plain' : ''\n            }`}\n          >\n            {/* guestlist loading spinner */}\n            {showGuestsLoading && <div className=\"css-spinner\" />}\n\n            {/* for Yes, Maybe, No tabs */}\n            {!isSearch && (\n              <>\n                <div>\n                  {this.state.guests.map((guest) => {\n                    const selected = !!recipients.find((x) => x.userId === guest.userId);\n                    return (\n                      <SingleGuest\n                        onHandleToggleGuest={onHandleToggleGuest}\n                        key={guest.userId}\n                        guest={guest}\n                        selected={selected}\n                      />\n                    );\n                  })}\n                </div>\n\n                {shouldShowMoreBtn && <ShowMoreBtn handleOnClick={this.getNextPage} />}\n              </>\n            )}\n            {/* for search tab */}\n            {isRsvpOff ? (\n              <AllGuests\n                onHandleToggleGuest={onHandleToggleGuest}\n                recipients={recipients}\n                perPage={this.per_page}\n                searchString={searchString}\n                updateGuestsLoading={this.props.updateGuestsLoading}\n              />\n            ) : (\n              <>\n                {is_host_viewing &&\n                  !this.props.hideAttended &&\n                  user_has_active_premium_pass &&\n                  event_has_passed &&\n                  checked_in_count > 1 && (\n                    <GuestByRSVP\n                      onHandleToggleGuest={onHandleToggleGuest}\n                      rsvp=\"attended\"\n                      rsvpClass=\"attended\"\n                      recipients={recipients}\n                      perPage={this.per_page}\n                      searchString={searchString}\n                      updateGuestsLoading={this.props.updateGuestsLoading}\n                    />\n                  )}\n                <GuestByRSVP\n                  onHandleToggleGuest={onHandleToggleGuest}\n                  rsvp=\"Yes\"\n                  rsvpClass=\"yes\"\n                  recipients={recipients}\n                  perPage={this.per_page}\n                  searchString={searchString}\n                  updateGuestsLoading={this.props.updateGuestsLoading}\n                />\n                {this.includeMaybe && (\n                  <GuestByRSVP\n                    onHandleToggleGuest={onHandleToggleGuest}\n                    rsvp=\"Maybe\"\n                    rsvpClass=\"maybe\"\n                    recipients={recipients}\n                    perPage={this.per_page}\n                    searchString={searchString}\n                    updateGuestsLoading={this.props.updateGuestsLoading}\n                  />\n                )}\n                <GuestByRSVP\n                  onHandleToggleGuest={onHandleToggleGuest}\n                  rsvp=\"No\"\n                  rsvpClass=\"no\"\n                  recipients={recipients}\n                  perPage={this.per_page}\n                  searchString={searchString}\n                  updateGuestsLoading={this.props.updateGuestsLoading}\n                />\n                <GuestByRSVP\n                  onHandleToggleGuest={onHandleToggleGuest}\n                  rsvp=\"No Reply\"\n                  rsvpClass=\"undecided\"\n                  recipients={recipients}\n                  perPage={this.per_page}\n                  searchString={searchString}\n                  updateGuestsLoading={this.props.updateGuestsLoading}\n                />\n              </>\n            )}\n          </div>\n        </GuestListContext.Provider>\n      </>\n    );\n  }\n}\n","import React from 'react';\n\nexport const defaultValues = {\n  isSelectEnabled: false,\n};\n\nexport const GuestListContext = React.createContext(defaultValues);\n","import React from 'react';\n\nexport function HostActions(props) {\n  const {addAllRecipients, removeAllRecipients, guests} = props;\n\n  const handleSelectAllClick = (isSelectAll) => {\n    // more performant\n    const filteredGuests = guests.slice();\n    for (let i = 0; i < filteredGuests.length; i++) {\n      const guest = filteredGuests[i];\n      if (guest.userId === window.user_id) {\n        filteredGuests.splice(i, 1);\n        break;\n      }\n    }\n\n    if (isSelectAll) {\n      addAllRecipients(filteredGuests);\n    } else {\n      removeAllRecipients(filteredGuests);\n    }\n  };\n\n  return (\n    <div className=\"newConversation-modal__selectAll\">\n      <a onClick={() => handleSelectAllClick(true)} data-qa-id=\"select-all-guests\">\n        Select All\n      </a>\n      <span> | </span>\n      <a onClick={() => handleSelectAllClick(false)} data-qa-id=\"select-none-guests\">\n        Select None\n      </a>\n    </div>\n  );\n}\n","import React, {PureComponent} from 'react';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {messagingStore} from '~/messaging/store';\n\nexport class MessageGuestBtn extends PureComponent {\n  render() {\n    return <div className=\"newConversation-modal__ctas\">{this.getMobileButtons()}</div>;\n  }\n\n  getDesktopGroupChatButton = () => {\n    const {maxGroupCount, disableGroupChat, isHost, isGuestListPrivate} = this.props;\n\n    if (isGuestListPrivate) {\n      return null;\n    }\n\n    return (\n      <div\n        className={`newConversation-modal__footer_action  ${\n          isHost && disableGroupChat ? 'disabled' : ''\n        }`}\n      >\n        <button\n          onClick={this.onGroupChatClick}\n          className=\"primary-button button-primary newConversation-modal__footer_button\"\n          data-qa-id=\"start-group-chat\"\n        >\n          Start Group Chat\n        </button>\n\n        <div className=\"newConversation-modal__message_type_description\">\n          {disableGroupChat && (\n            <div className=\"newConversation-modal-message-error\" data-qa-id=\"guest-limit-warning\">\n              Sorry! Group chats can only hold {maxGroupCount} participants.\n              {messagingStore.isHost && <>Try a Broadcast Message</>}\n            </div>\n          )}\n          {!disableGroupChat && <>With up to {maxGroupCount} participants.</>}\n        </div>\n      </div>\n    );\n  };\n\n  getMobileButtons = () => {\n    const {guestCount, onSubmit} = this.props;\n    if (guestCount === 1) {\n      return (\n        <Button\n          variant=\"primary\"\n          size=\"large\"\n          fullWidth\n          onClick={this.onGroupChatClick}\n          data-qa-id=\"message-guest\"\n        >\n          Message Guest\n        </Button>\n      );\n    }\n\n    return (\n      <Button\n        variant=\"primary\"\n        size=\"large\"\n        fullWidth\n        onClick={messagingStore.isHost ? onSubmit : this.onGroupChatClick}\n        data-qa-id=\"message-guest\"\n      >\n        {`Message ${guestCount} Guests`}\n      </Button>\n    );\n  };\n\n  onGroupChatClick = () => {\n    this.props.onMessageTypeSelected('group');\n  };\n\n  onBroadcastClick = () => {\n    this.props.onMessageTypeSelected('broadcast');\n  };\n}\n","import React, {PureComponent} from 'react';\nimport {PB_BroadcastLine} from '~/common/svg/PB_BroadcastLine';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {pebble} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport class MessageType extends PureComponent {\n  render() {\n    const {guestCount, onMessageTypeSelected} = this.props;\n    let groupChatDisabled = false;\n    if (guestCount > window.messaging_group_limit) {\n      groupChatDisabled = true;\n    }\n    return (\n      <div className=\"newConversation-modal__messageType\">\n        <div\n          onClick={(e) => {\n            onMessageTypeSelected('broadcast');\n          }}\n          className=\"newConversation-modal__mega_button\"\n          data-qa-id=\"start-broadcast-message\"\n        >\n          <PB_BroadcastLine ratio={2} color={pebble} />\n          <Typography variant=\"header3\" classNames=\"newConversation-modal__message_type_title\">\n            Broadcast Message\n          </Typography>\n          <Typography\n            variant=\"paragraph2\"\n            classNames=\"newConversation-modal__message_type_description\"\n          >\n            This message will be sent to each recipient privately.\n          </Typography>\n        </div>\n        <div\n          className={`newConversation-modal__mega_button ${groupChatDisabled ? 'disabled' : ''}`}\n          onClick={(e) => {\n            onMessageTypeSelected('group');\n          }}\n          data-qa-id=\"start-group-chat\"\n        >\n          <i className=\"icon icon-group\" />\n          <Typography variant=\"header3\" classNames=\"newConversation-modal__message_type_title\">\n            Group Chat\n          </Typography>\n          <Typography\n            variant=\"paragraph2\"\n            classNames=\"newConversation-modal__message_type_description\"\n            data-qa-id=\"guest-limit-warning\"\n          >\n            {groupChatDisabled\n              ? `Sorry! Group chats can only hold ${window.messaging_group_limit} participants. Try a Broadcast Message.`\n              : `Chat with up to ${window.messaging_group_limit} participants.`}\n          </Typography>\n        </div>\n      </div>\n    );\n  }\n}\n","import React, {Component} from 'react';\nimport {evite} from 'evite';\nimport {inject} from 'mobx-react';\nimport urls from 'urls';\nimport {MessageTextArea} from '~/dashboard/components/EventActions/MessageTextArea';\nimport {guestlistStore} from '~/view_invitation/guestlist/store';\nimport {CaptchaDialog} from '~/modal/index';\n\n// borrowed from controller\nfunction handleCaptcha(responseJson) {\n  return new Promise((resolve) => {\n    new CaptchaDialog({\n      challenge: responseJson,\n      onSubmit: (_response) => {\n        const captchaResponse = {..._response};\n        captchaResponse.name = undefined;\n        resolve(captchaResponse);\n      },\n    }).show();\n  });\n}\n\n@inject('eventStore')\nexport class ModalActions extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      message: this.props.message || '',\n      sending: false,\n      errorMessage: '',\n    };\n\n    this.isCoHost =\n      props.eventStore.event.host_ids.includes(props.eventStore.userId) &&\n      !props.eventStore.event.pending_host_ids.includes(props.eventStore.userId);\n  }\n\n  handleTextareaChanged = (event) => {\n    const {value} = event.target;\n    this.setState({message: value});\n  };\n\n  // return the special broadcast type\n  getBroadcastType = () => {\n    const {allGroups, recipients, rsvpResponses} = this.props;\n    const allSize = allGroups.length;\n\n    // when cohost select all broadcast should be treated as a normal group\n    if (allGroups.length === rsvpResponses.length && !this.isCoHost) {\n      return 'all';\n    }\n    if (allSize === 1) {\n      const group = allGroups[0];\n      const list = guestlistStore.guestlist[group];\n      const guests = list.filter((guest) => guest.user_id !== this.props.eventStore.userId);\n      if (guests.length === recipients.length) {\n        return group;\n      }\n      return null;\n    }\n    return null;\n  };\n\n  validate = () => {\n    const {message} = this.state;\n    const {recipients} = this.props;\n    let errorMessage = '';\n\n    if (!message || message.trim().length === 0) {\n      errorMessage = 'A message is required.';\n    }\n    if (message.length > 1000) {\n      errorMessage = 'Message cannot exceed 1000 characters';\n    }\n    if (!recipients.length) {\n      errorMessage = 'Please select at least one guest.';\n    }\n\n    if (errorMessage) {\n      this.setState({\n        sending: false,\n        errorMessage,\n      });\n      return false;\n    }\n    return true;\n  };\n\n  // sends a broadcast message\n  handleSend = async (event, captcha) => {\n    event.preventDefault();\n\n    const {message} = this.state;\n    const {recipients} = this.props;\n\n    this.setState({\n      sending: true,\n      errorMessage: '',\n    });\n\n    if (!this.validate()) return;\n\n    const virtualGroups = ['all', 'yes', 'no', 'maybe', 'undecided', 'attended'];\n    const url = `/tsunami/v1/services/event/${this.props.eventStore.eventId}/broadcast/`;\n    const groupType = this.getBroadcastType();\n\n    // TODO: will need this later for a future implementation\n    // let qMessageType;\n    // if (this.modalTemplate === 'cancelEventMessage') {\n    //   qMessageType = 'cancellation';\n    // } else if (this.modalTemplate === 'updateEventMessage') {\n    //   qMessageType = 'event_update';\n    // } else {\n    //   qMessageType = 'dashboard_message';\n    // }\n\n    const qMessageType = 'dashboard_message';\n\n    const body = {\n      message,\n      q_message_type: qMessageType,\n      captcha,\n    };\n\n    if (virtualGroups.includes(groupType)) {\n      body.virtual_groups = [groupType];\n    } else {\n      const guestListArr = recipients.map((recipient) => recipient.userId);\n      body.guest_list = guestListArr;\n    }\n\n    const getBroadcast = {\n      method: 'POST',\n      credentials: 'include',\n      cache: 'no-cache',\n      body: JSON.stringify(body),\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    };\n\n    try {\n      const response = await evite.fetch(url, getBroadcast);\n      // const responseText = await response.text();\n      const responseData = await response.json();\n\n      if (response.ok) {\n        window.tags.track_event('sent_q', {messageGroupType: 'broadcast'});\n\n        this.setState({\n          message: '',\n          errorMessage: '',\n        });\n\n        // if free, send to frp page instead of host dashboard\n        let sentPage = 'event_dashboard';\n        if (!this.props.eventStore.isPro) {\n          if (this.props.eventStore.modal.type === 'message') {\n            sentPage = 'frp_message_sent';\n          } else if (this.props.eventStore.modal.type === 'cancel') {\n            sentPage = 'frp_canceled';\n          }\n        }\n\n        window.location.assign(urls.get(sentPage, {event_id: this.props.eventStore.eventId}));\n      } else if (response.status === 412) {\n        this.setState({\n          sending: false,\n          errorMessage: '',\n        });\n        handleCaptcha(responseData).then((captcha) => {\n          this.handleSend(event, captcha);\n        });\n      } else {\n        throw response;\n      }\n    } catch (error) {\n      this.setState({\n        sending: false,\n        errorMessage: 'Sorry, an unknown error was encountered.',\n      });\n    }\n  };\n\n  render() {\n    const {sending, message} = this.state;\n    const isDisabled = sending || !message || !this.props.recipients.length;\n    const cancelText = this.props.eventStore.modal.type === 'cancel' ? 'Skip' : 'Cancel';\n\n    return (\n      <div className=\"dashboard-send-message__actions\">\n        <MessageTextArea\n          textareaChanged={this.handleTextareaChanged}\n          message={this.state.message}\n        />\n        <div className=\"dashboard-send-message__buttons button-group\">\n          <button\n            className=\"button secondary secondary-button dashboard-send-message__cancel-btn small button-group-item\"\n            onClick={this.props.onCloseClick}\n            data-qa-id=\"send-message-cancel\"\n          >\n            {cancelText}\n          </button>\n          <button\n            disabled={isDisabled}\n            className=\"button primary primary-button small button-group-item\"\n            onClick={this.handleSend}\n            data-qa-id=\"send-message-send\"\n          >\n            Send\n          </button>\n        </div>\n      </div>\n    );\n  }\n}\n","import React, {Component} from 'react';\nimport {observer} from 'mobx-react';\nimport {action} from 'mobx';\nimport {guestlistStore} from '~/view_invitation/guestlist/store';\nimport {messagingStore} from '~/messaging/store';\nimport * as actions from '~/view_invitation/guestlist/actions';\nimport {GuestList} from './GuestList';\nimport {Filters} from './Filters';\nimport {MessageGuestBtn} from './MessageGuestButton';\nimport {RecipientList} from './RecipientList';\nimport {NewConversationHeader} from './NewConversationHeader';\nimport {MessageType} from './MessageType';\nimport './NewConversation.sass';\nimport {StatusAnimation} from '~/create/components/StatusAnimation';\nimport * as utils from '~/view_invitation/utils';\nimport {MessageErrorBoundary} from '~/messaging/components/MessageErrorBoundary/MessageErrorBoundary';\nimport {ModalActions} from './ModalActions';\nimport {messagingPathname} from '~/messaging/utils/utils';\n\n@observer\nexport class NewConversation extends Component {\n  constructor(props) {\n    super(props);\n\n    // If messages are archived, redirect them back to message hub\n    if (messagingStore.isArchived) {\n      const location = {\n        pathname: `/messages`,\n        search: window.location.search || '',\n      };\n      props.history.push(location);\n    }\n\n    this.userId = messagingStore.userId;\n    this.isHost = messagingStore.isHost;\n    this.maxGroupCount = window.messaging_group_limit;\n\n    this.rsvpResponses = ['yes', 'no', 'undecided'];\n    this.eventOrigin = messagingStore.event.origin;\n    this.isRsvpOff = messagingStore.isRsvpOff;\n    this.includesMaybe = !window.is_premium && this.eventOrigin !== 21;\n    if (this.includeMaybe) this.rsvpResponses.push('maybe');\n\n    this.state = {\n      isSearch: !utils.isMobile(), // desktop opens to search tab\n      searchString: '',\n      recipients: Array.from(messagingStore.selected) || [],\n      rsvpFilter: utils.isMobile() ? 'yes' : '',\n      isMessageTypeShowing: false,\n      disableGroupChat:\n        messagingStore.selected && messagingStore.selected.length > this.maxGroupCount,\n      allGroups: [],\n      isModalOpen: true,\n      currentPage: 0,\n      showGuestsLoading: false,\n    };\n    this.isGuestListPrivate = messagingStore.isPrivateGuestList;\n  }\n\n  componentDidMount() {\n    if (guestlistStore.fetchingGuestlist) {\n      // unfortunately still need to call this one because we need to retrieve\n      // entire guestlist arrays in order to do Select All\n      actions.fetchGuestlistData();\n      // initial call to retrieve total counts\n      messagingStore.searchProfiles().then(() => {\n        guestlistStore.fetchingGuestlist = false;\n      });\n    }\n\n    // keep track of whether or not the guestlist is loaded in a modal\n    if (this.props.isLoadedInModal) guestlistStore.updateIsLoadedInModal(true);\n  }\n\n  toggleModal = () => {\n    this.setState({\n      isModalOpen: !this.state.isModalOpen,\n    });\n  };\n\n  handleBackClick = () => {\n    messagingStore.selected = [];\n    this.props.history.goBack();\n  };\n\n  updateCurrentPage = (page) => {\n    this.setState({currentPage: page});\n  };\n\n  updateGuestsLoading = (isLoading) => {\n    this.setState({showGuestsLoading: isLoading});\n  };\n\n  removeRecipient = (recipient) => {\n    const newRecipients = [...this.state.recipients];\n    const guestIndex = newRecipients.findIndex((guest) => guest.userId === recipient.userId);\n\n    newRecipients.splice(guestIndex, 1);\n    const disableGroupChat = newRecipients.length > this.maxGroupCount;\n\n    this.setState({\n      recipients: newRecipients,\n      disableGroupChat,\n    });\n\n    this.updateAllGroupOnRemove(recipient.userId);\n  };\n\n  addRecipient(recipient) {\n    if (this.state.recipients.indexOf(recipient.userId) < 0) {\n      const newRecipients = [\n        ...this.state.recipients,\n        {\n          userId: recipient.userId,\n          name: recipient.name,\n        },\n      ];\n\n      const disableGroupChat = newRecipients.length > this.maxGroupCount;\n\n      if (this.isHost || !disableGroupChat) {\n        this.setState({\n          recipients: newRecipients,\n          disableGroupChat,\n        });\n      } else {\n        // This will be a guest that exceeds the max chat count\n        this.setState({\n          disableGroupChat,\n        });\n      }\n    }\n  }\n\n  /**\n   * If the user un-checks a guest from the list, remove the virtual group that guest belongs to\n   * @param userId - of the guest removed from the recipient list\n   */\n  updateAllGroupOnRemove = (userId) => {\n    if (this.state.allGroups.length > 0) {\n      const rsvpGroup = this.findRsvpGroup(userId);\n      const groupIndex = this.state.allGroups.indexOf(rsvpGroup);\n\n      if (groupIndex >= 0) {\n        const allGroups = [...this.state.allGroups];\n        allGroups.splice(groupIndex, 1);\n\n        this.setState({\n          allGroups,\n        });\n      }\n    }\n  };\n\n  /**\n   * Find the RSVP response of the given user\n   * @param userId\n   * @return - rsvp response\n   */\n  findRsvpGroup = (userId) => {\n    const guestList = guestlistStore.guestlist;\n    for (let i = 0; i < this.rsvpResponses.length; i++) {\n      const rsvpGroup = this.rsvpResponses[i];\n      const found = guestList[rsvpGroup].find((guest) => guest.user_id === userId);\n      if (found) {\n        return rsvpGroup;\n      }\n    }\n  };\n\n  /**\n   * Get all the guests that belongs to the rsvp group\n   * @param rsvpGroup - yes, no, undecided, maybe\n   */\n  getRecipientsInGroup = (rsvpGroup) => {\n    const list = guestlistStore.guestlist[rsvpGroup];\n    return list.reduce((recipientsInGroup, guest) => {\n      // must exclude logged in user & if user_id is null;\n      // user_id is queued and may take a while to retrieve from profiles\n      if (this.userId === guest.user_id || !guest.user_id) return recipientsInGroup;\n      const guestInfo = {\n        userId: guest.user_id,\n        name: guest.name,\n      };\n      recipientsInGroup.push(guestInfo);\n      return recipientsInGroup;\n    }, []);\n  };\n\n  /**\n   * Get the update recipient list after the current tab's guests are removed\n   * @return {*[]}\n   */\n  getRecipientsAfterRemoveAll = (guests) => {\n    const currGuestList = guests;\n    const recipients = [...this.state.recipients];\n\n    for (let i = 0; i < currGuestList.length; i++) {\n      const currGuest = currGuestList[i];\n      const foundIndex = recipients.findIndex((guest) => currGuest.userId === guest.userId);\n\n      if (foundIndex >= 0) {\n        recipients.splice(foundIndex, 1);\n      }\n    }\n    return recipients;\n  };\n\n  @action\n  handleToggleGuest = (e, guest) => {\n    if (e.target.checked) {\n      this.addRecipient(guest);\n    } else {\n      this.removeRecipient(guest);\n    }\n  };\n\n  /**\n   * When \"SELECT ALL\" clicked, add the current tab to virtual group\n   * If current tab is \"All\", add only the 'all' tab to the virtual group\n   */\n  @action\n  addAllRecipients = (guests) => {\n    const currTab = this.state.rsvpFilter || 'all';\n\n    if (currTab === 'all') {\n      if (this.state.allGroups.length === this.rsvpResponses.length) {\n        return;\n      }\n      const newRecipients = [];\n      for (let i = 0; i < this.rsvpResponses.length; i++) {\n        const group = this.rsvpResponses[i];\n        const recipients = this.getRecipientsInGroup(group);\n        newRecipients.push(...recipients);\n      }\n\n      this.setState({\n        allGroups: [...this.rsvpResponses],\n        recipients: newRecipients,\n        disableGroupChat: newRecipients.length > this.maxGroupCount,\n      });\n    } else {\n      if (this.state.allGroups.includes(currTab)) return;\n\n      const guestsToAdd = this.getRecipientsInGroup(currTab);\n\n      const filteredGuests = guestsToAdd.filter(\n        (guest) =>\n          this.state.recipients.findIndex((recipient) => recipient.userId === guest.userId) < 0\n      );\n\n      const newRecipients = [...this.state.recipients, ...filteredGuests];\n\n      this.setState({\n        allGroups: [...this.state.allGroups, currTab],\n        recipients: newRecipients,\n        disableGroupChat: newRecipients.length > this.maxGroupCount,\n      });\n    }\n  };\n\n  /**\n   * When \"SELECT NONE\" clicked, remove that the current tab from virtual group\n   * If current tab is \"All\", empty the virtual group\n   */\n  @action\n  removeAllRecipients = (guests) => {\n    const currTab = this.state.rsvpFilter || 'all';\n    if (currTab === 'all') {\n      this.setState({\n        allGroups: [],\n        recipients: [],\n        disableGroupChat: false,\n      });\n    } else {\n      const guestsToRemove = this.getRecipientsInGroup(currTab);\n\n      const allGroups = [...this.state.allGroups];\n      const currTabIndex = allGroups.indexOf(currTab);\n      allGroups.splice(currTabIndex, 1);\n\n      const newRecipients = this.getRecipientsAfterRemoveAll(guestsToRemove);\n\n      this.setState({\n        allGroups,\n        recipients: newRecipients,\n        disableGroupChat: newRecipients.length > this.maxGroupCount,\n      });\n    }\n  };\n\n  setSearch = (active = true) => {\n    this.setState({\n      isSearch: active,\n    });\n  };\n\n  searchChanged = (searchString) => {\n    this.setState({\n      isSearch: true,\n      searchString,\n      rsvpFilter: '',\n      currentPage: 0,\n    });\n    this.switchTabs();\n  };\n\n  // fired after selecting an RSVP Type\n  applyFilter = (filter) => {\n    this.setState({\n      isSearch: false,\n      searchString: '',\n      rsvpFilter: filter,\n      currentPage: 0,\n    });\n    this.switchTabs();\n  };\n\n  switchTabs = () => {\n    // scroll to top for now\n    if (this.scrollableDiv) this.scrollableDiv.scrollTop = 0;\n  };\n\n  setRef = (ref) => {\n    this.scrollableDiv = ref;\n  };\n\n  // fired after clicking send message button\n  gotoMessageType = (e) => {\n    // If guest list is private, skip the message type selection step\n    if (this.isGuestListPrivate) {\n      this.handleBroadcast();\n    } else {\n      this.setState({isMessageTypeShowing: true});\n    }\n  };\n\n  handleClose = (e) => {\n    this.handleBackClick(e);\n  };\n\n  // after clicking back button on the message type screen\n  backToRecipients = (e) => {\n    this.setState({isMessageTypeShowing: false});\n  };\n\n  /**\n   * For broadcast we can only send to 1 virtual group (broadcast/yes (or maybe, no, all etc))\n   * If we want to send to multiple groups, we have to create a static group for now\n   */\n  handleBroadcast = () => {\n    const {allGroups, recipients} = this.state;\n    const allSize = allGroups.length;\n\n    // Get all the users in each rsvp groups and any extra guests the host hand picked\n    // only virtual groups.\n    // when cohost select all broadcast should be treated as a normal group,\n    if (allGroups.length === this.rsvpResponses.length && !messagingStore.isCoHost) {\n      this.handleGroupCreated('all', 'broadcast');\n    } else if (allSize === 1 && !messagingStore.isCoHost) {\n      const group = allGroups[0];\n      const list = guestlistStore.guestlist[group];\n      // must exclude logged in user & if user_id is null;\n      // user_id is queued and may take a while to retrieve from profiles\n      const guests = list.filter((guest) => guest.user_id !== this.userId || !guest.user_id);\n      if (guests.length === recipients.length) {\n        this.handleGroupCreated(group, 'broadcast');\n      } else {\n        this.createGroup(true);\n      }\n    } else {\n      this.createGroup(true);\n    }\n  };\n\n  /**\n   * This method is called after the user picks what type of chat to start\n   * @param messageType - broadcast or group\n   */\n  messageTypeSelected = (messageType) => {\n    const isBroadcast = messageType === 'broadcast';\n\n    if (isBroadcast) {\n      this.handleBroadcast();\n    } else {\n      // Group chat\n      this.createGroup(false);\n    }\n  };\n\n  /**\n    {\n      \"guest_id\":\"0077VPIU4U75JMRI4EPIW6VFM6JBXA\",\n      \"name\":\"\",\n      \"is_broadcast\":true,\n      \"user_ids\":[\"01B8NWTTFHWJPAXHQEPIIJTWIDGLJQ\",\"0142NWTTFHWJPAR5IEPIIJTV4FMMQA\"]\n    }\n   * @return {*}\n   */\n\n  createGroup = async (isBroadcast) => {\n    // If group chat disabled, don't create a group\n    if (!isBroadcast && this.state.recipients.length > this.maxGroupCount) {\n      return;\n    }\n\n    const payload = {\n      guest_id: window.guest_id,\n      name: '',\n      is_broadcast: isBroadcast,\n      user_ids: this.state.recipients.map((user) => user.userId),\n    };\n    const url = `/tsunami/v1/services/event/${window.event_id}/group`;\n    const postGroup = {\n      method: 'POST',\n      credentials: 'include',\n      cache: 'no-cache',\n      body: JSON.stringify(payload),\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    };\n    try {\n      console.info('postGroup Fetch url', url);\n      const response = await evite.fetch(url, postGroup);\n      const responseJson = await response.json();\n      if (response.ok) {\n        console.info('postGroup Successful!', responseJson);\n        // send the path\n        this.handleGroupCreated(responseJson.group_id, responseJson.category);\n      } else {\n        // TODO: Handle Error\n        console.error('postGroup Failed with response', response.status);\n      }\n    } catch (e) {\n      // TODO: Handle Error if message didn't go through\n      console.error('postGroup Fetch Error', e);\n    }\n  };\n\n  getNewConversationContent = (e) => {\n    const showGroupLimitWarning =\n      !this.isHost && evite.detects.isMobile && this.state.disableGroupChat;\n\n    return (\n      <div className={`${this.state.showGuestsLoading ? 'inactive' : ''}`}>\n        {showGroupLimitWarning && this.getGuestLimitWarningBanner()}\n\n        {!this.state.isMessageTypeShowing && (\n          <>\n            {evite.detects.isMobile && !guestlistStore.isLoadedInModal && (\n              <NewConversationHeader\n                backLabel=\"Cancel\"\n                backAction={this.handleClose}\n                title=\"Select Guests\"\n              />\n            )}\n\n            {guestlistStore.fetchingGuestlist && (\n              <StatusAnimation style={{height: 200}} status=\"loading\" />\n            )}\n\n            {!guestlistStore.fetchingGuestlist && (\n              <>\n                <RecipientList\n                  recipients={this.state.recipients}\n                  onRecipientRemoved={this.removeRecipient}\n                  shouldShowPlainStyle={guestlistStore.shouldShowPlainStyle}\n                />\n\n                <Filters\n                  searchText=\"\"\n                  onSearchChanged={this.searchChanged}\n                  rsvpFilter={this.state.rsvpFilter}\n                  onApplyFilter={this.applyFilter}\n                  onSearchNav={this.setSearch}\n                  showFilters={this.props.showFilters}\n                  isRsvpOff={this.isRsvpOff}\n                />\n                <GuestList\n                  isSearch={this.state.isSearch}\n                  rsvpFilter={this.state.rsvpFilter}\n                  searchString={this.state.searchString}\n                  onHandleToggleGuest={this.handleToggleGuest}\n                  addAllRecipients={this.addAllRecipients}\n                  removeAllRecipients={this.removeAllRecipients}\n                  recipients={this.state.recipients}\n                  currentPage={this.state.currentPage}\n                  updateCurrentPage={this.updateCurrentPage}\n                  setRef={this.setRef}\n                  updateGuestsLoading={this.updateGuestsLoading}\n                  showGuestsLoading={this.state.showGuestsLoading}\n                  isRsvpOff={this.isRsvpOff}\n                />\n              </>\n            )}\n\n            {this.state.recipients.length > 0 && !guestlistStore.isLoadedInModal && (\n              <MessageGuestBtn\n                onSubmit={this.gotoMessageType}\n                guestCount={this.state.recipients.length}\n                onMessageTypeSelected={this.messageTypeSelected}\n                disableGroupChat={this.state.disableGroupChat}\n                maxGroupCount={this.maxGroupCount}\n                isHost={this.isHost}\n                isGuestListPrivate={this.isGuestListPrivate}\n              />\n            )}\n\n            {guestlistStore.isLoadedInModal && (\n              <ModalActions\n                message={this.props.message}\n                allGroups={this.state.allGroups}\n                recipients={this.state.recipients}\n                onCloseClick={this.props.onCloseClick}\n                rsvpResponses={this.rsvpResponses}\n              />\n            )}\n          </>\n        )}\n        {this.state.isMessageTypeShowing && (\n          <>\n            {evite.detects.isMobile && !guestlistStore.isLoadedInModal && (\n              <NewConversationHeader\n                backLabel=\"\"\n                backAction={this.backToRecipients}\n                title=\"Select Message Type\"\n              />\n            )}\n            <MessageType\n              onMessageTypeSelected={this.messageTypeSelected}\n              guestCount={this.state.recipients.length}\n            />\n          </>\n        )}\n      </div>\n    );\n  };\n\n  render() {\n    // if (evite.detects.isMobile) {\n    // if it's already loaded in a modal, no need to load in another modal\n    return this.getNewConversationContent();\n    // }\n    // return (\n    //   <div\n    //     data-qa-id=\"messaging\"\n    //     className={`messaging shadowbox ${\n    //       evite.detects.isMobile ? 'is-mobile' : ''\n    //     }`}\n    //   >\n    //     <div data-qa-id=\"message-hub\" className=\"message-hub\">\n    //       <MessageErrorBoundary>\n    //         {!guestlistStore.isLoadedInModal && (\n    //           <div\n    //             data-qa-id=\"message-hub-header\"\n    //             className={`message-hub__header ${\n    //               messagingStore.isArchived\n    //                 ? 'message-hub__header--archived'\n    //                 : ''\n    //             }`}\n    //           >\n    //             {this.getLeftActions()}\n    //             <h1>Select Guests</h1>\n    //             <div className=\"message-hub__rightActions\" />\n    //           </div>\n    //         )}\n\n    //         {this.getNewConversationContent()}\n    //       </MessageErrorBoundary>\n    //     </div>\n    //   </div>\n    // );\n  }\n\n  getGuestLimitWarningBanner = () => (\n    <div className=\"newConversation-modal__warning-banner\" data-qa-id=\"guest-limit-warning-banner\">\n      Group chats can only hold {this.maxGroupCount} participants\n      <button\n        className=\"newConversation-modal__warning-button\"\n        onClick={this.closeWarningBanner}\n        data-qa-id=\"cancel-new-conversation\"\n      >\n        <i className=\"icon-cancel\" />\n      </button>\n    </div>\n  );\n\n  closeWarningBanner = (evt) => {\n    evt.preventDefault();\n    this.setState({\n      disableGroupChat: false,\n    });\n  };\n\n  /**\n   *  TODO: add more logic for when there is an edit button on message hub\n   * @returns {*}\n   */\n  getLeftActions = () => (\n    <div className=\"message-hub__leftActions\">\n      <button\n        data-qa-id=\"back-link\"\n        aria-label=\"back\"\n        onClick={this.handleBackClick}\n        className=\"button-link\"\n      >\n        <i className=\"back icon-arrow-left\" />\n        <span className=\"message-hub__backText\">Messages</span>\n      </button>\n    </div>\n  );\n\n  handleGroupCreated = (groupId, groupType) => {\n    const qs = window.location.search;\n    const conversationLink = messagingPathname(`/messages/${groupType}/${groupId}${qs}`);\n    this.props.history.push(conversationLink);\n    window.tags.track_event('create_q_group', {\n      messageGroupType: groupType,\n      groupId,\n    });\n    messagingStore.selected = [];\n  };\n}\n","import React, {PureComponent} from 'react';\nimport {PB_Arrow} from '~/common/svg/PB_Arrow';\n\nexport class NewConversationHeader extends PureComponent {\n  render() {\n    const {backLabel, backAction, title} = this.props;\n    return (\n      <div className=\"message-header newConversation-modal__header\">\n        <div className=\"newConversation-modal__header__back\">\n          <button\n            data-qa-id=\"back-link\"\n            aria-label={backLabel}\n            className=\"unstyled-button newConversation-modal__cancel-arrow\"\n            onClick={backAction}\n          >\n            <PB_Arrow ratio={0.75} />\n          </button>\n        </div>\n        <div className=\"newConversation-modal__header__title\">{title}</div>\n        <div className=\"newConversation-modal__header__right_actions\" />\n      </div>\n    );\n  }\n}\n","import React, {PureComponent} from 'react';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {pebble} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport class RecipientList extends PureComponent {\n  constructor(props) {\n    super(props);\n\n    // if we are opening up the modal with preselected recipients\n    this.hasPreselectedRecipients =\n      props.recipients.length > 0 && !props.recipients[0].hasOwnProperty('name');\n  }\n\n  componentDidMount() {}\n\n  render() {\n    const {recipients, onRecipientRemoved, shouldShowPlainStyle} = this.props;\n    // in some cases, it is too expensive to getProfiles for all the users, so we only pass in\n    // the userId and no name. If there's no name, only show the number of recipients at the top\n    return (\n      <>\n        {/* {(shouldShowPlainStyle || this.hasPreselectedRecipients) && (\n          <div className=\"newConversation-modal__recipient_list\">\n            {recipients.length > 0 && (\n              <div className=\"newConversation-modal__recipient_list_count\">\n                Sending to {recipients.length} recipient\n                {recipients.length > 1 ? 's' : ''}\n              </div>\n            )}\n          </div>\n        )} */}\n\n        {!shouldShowPlainStyle && (\n          <div className=\"newConversation-modal__recipient_list\">\n            <Typography variant=\"paragraph2\">To:</Typography>\n            {recipients.map((recipient, index) => (\n              <div\n                key={`recipient-${recipient.userId}-${index}`}\n                className=\"newConversation-modal__recipient\"\n              >\n                <div\n                  className=\"newConversation-modal__recipient__name\"\n                  data-qa-id=\"recipient-name\"\n                  data-qa-value={recipient.name.toLowerCase().replaceAll(' ', '-')}\n                >\n                  {recipient.name}\n                </div>\n                <a\n                  href=\"#\"\n                  onClick={(e) => {\n                    onRecipientRemoved(recipient);\n                  }}\n                  className=\"newConversation-modal__recipient__remove\"\n                  data-qa-id=\"remove-recipient\"\n                >\n                  <PB_CloseLine ratio={0.5} color={pebble} />\n                </a>\n              </div>\n            ))}\n          </div>\n        )}\n      </>\n    );\n  }\n}\n","import React, {PureComponent} from 'react';\nimport {Input} from '~/common/_pb_components/atoms/Input';\n\nexport class Search extends PureComponent {\n  searchChanged = (event) => {\n    this.props.onSearchChanged(event.target.value);\n  };\n\n  render() {\n    const {searchText, placeHolder} = this.props;\n\n    return (\n      <div className=\"search__search search__detect\">\n        <Input\n          data-qa-id=\"new-message-search-guests\"\n          type=\"text\"\n          placeholder={placeHolder}\n          autoComplete=\"off\"\n          maxLength={50}\n          onChange={this.searchChanged}\n          value={searchText}\n        />\n      </div>\n    );\n  }\n}\n","import React from 'react';\n\nexport function ShowMoreBtn(props) {\n  return (\n    <div id=\"show-more-button\" className=\"button-container\">\n      <button\n        id=\"more_events\"\n        className=\"unstyled-button link\"\n        onClick={props.handleOnClick}\n        data-qa-id={props['data-qa-id'] || props.dataQaId || 'show-more'}\n      >\n        See More\n      </button>\n    </div>\n  );\n}\n","import React, {Component} from 'react';\nimport {observer} from 'mobx-react';\nimport {GuestListContext} from '~/messaging/components/NewConversation/GuestListContext';\nimport {UserAvatar} from '~/view_invitation/avatars/components';\nimport {ReplyStatus} from '~/view_invitation/guestlist/ReplyStatus';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {Checkbox} from '~/common/_pb_components/atoms/Checkbox';\n\n@observer\nexport class SingleGuest extends Component {\n  constructor() {\n    super();\n    evite.injectStores('guestlist', this);\n    evite.injectStores('messaging', this);\n  }\n\n  render() {\n    const {guest, onHandleToggleGuest, selected} = this.props;\n\n    let badge = '';\n    let isMe = false;\n    const isHost = window.evite_event.host_ids.includes(guest.userId);\n    const isPendingHost = window.evite_event.pending_host_ids.includes(guest.userId);\n    if (this.messaging.userId === guest.userId) {\n      badge = 'You';\n      isMe = true;\n    } else if (isHost && !isPendingHost) {\n      badge = 'Host';\n    }\n\n    const isSelected = selected || isMe;\n\n    const shouldShowAvatars =\n      !this.guestlist.shouldShowPlainStyle && !this.guestlist.isLoadedInModal;\n\n    const shouldShowCount = guest.rsvpResponse === 'maybe' || guest.rsvpResponse === 'yes';\n\n    return (\n      <GuestListContext.Consumer>\n        {({isSelectEnabled}) => (\n          <>\n            {isSelectEnabled && (\n              <div\n                className={`newConversation-modal__guest form-field ${\n                  selected || isMe ? 'active' : ''\n                } ${isMe ? 'disabled' : ''}`}\n              >\n                <Checkbox\n                  onChange={(e) => {\n                    onHandleToggleGuest(e, guest);\n                  }}\n                  checked={isSelected}\n                  id={`checkbox-${guest.userId}`}\n                  label={<span>{`${guest.name}${badge ? ` (${badge})` : ''}`}</span>}\n                  data-qa-id=\"toggle-guest\"\n                />\n              </div>\n            )}\n\n            {!isSelectEnabled && (\n              <div className=\"newConversation-modal__guest form-field\">\n                <div className=\"newConversation-modal__guest__info-and-name\">\n                  <Typography variant=\"paragraph2\">\n                    <span>{`${guest.name}${badge ? ` (${badge})` : ''}`}</span>\n                  </Typography>\n\n                  {shouldShowCount && (\n                    <Typography\n                      variant=\"paragraph3\"\n                      color=\"emeraldWebText\"\n                      data-qa-value={guest.userId}\n                      data-qa-id=\"guest-count\"\n                    >\n                      {this.guestlist.allowKids ? (\n                        <>\n                          {guest.numberOfAdults} {guest.numberOfAdults > 1 ? 'Adults' : 'Adult'}\n                          {guest.numberOfKids > 0 &&\n                            `| ${guest.numberOfKids} ${guest.numberOfKids > 1 ? 'Kids' : 'Kid'}`}\n                        </>\n                      ) : (\n                        <>\n                          {guest.numberOfAdults + guest.numberOfKids} Guest\n                          {guest.numberOfAdults + guest.numberOfKids === 1 ? '' : 's'}\n                        </>\n                      )}\n                    </Typography>\n                  )}\n                </div>\n                <ReplyStatus\n                  dateReplied={guest.dateReplied}\n                  dateViewed={guest.dateViewed}\n                  rsvpResponse={guest.rsvpResponse}\n                />\n              </div>\n            )}\n          </>\n        )}\n      </GuestListContext.Consumer>\n    );\n  }\n}\n\nfunction GuestAvatarItem(props) {\n  const {guest, badge, isSelectEnabled} = props;\n  const avatarUrl = guest.imageId ? `/services/images/${guest.imageId}/` : null;\n\n  return (\n    <div className=\"newConversation-modal__avatarContainer\">\n      {/* <UserAvatar */}\n      {/*  disableButton={isSelectEnabled} */}\n      {/*  userId={guest.userId} */}\n      {/*  firstName={guest.name} */}\n      {/*  avatarDisk={guest.avatarDisk || 3} */}\n      {/*  avatarUrl={avatarUrl} */}\n      {/*  lastName=\"\" */}\n      {/* /> */}\n      <span className=\"name\">\n        {guest.name}\n        {badge ? ' (You)' : ''}\n      </span>\n    </div>\n  );\n}\n\nfunction GuestItem(props) {\n  const {guest, badge} = props;\n\n  return (\n    <div className=\"newConversation-modal__guestContainer\">\n      <span className=\"name\">\n        {guest.name}\n        {badge ? ' (You)' : ''}\n      </span>\n    </div>\n  );\n}\n","import {Component} from 'react';\nimport {observer as mobxObserver} from 'mobx-react';\nimport {messagingStore} from '~/messaging/store';\nimport * as utils from '~/view_invitation/utils';\n\nimport './ParticipantsList.sass';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\n\n@mobxObserver\nexport class ParticipantsList extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      searchText: '',\n      selectedList: 'seenBy',\n      perPage: 50,\n      currentPage: 1,\n      profiles: {},\n      participants: props.participants || [],\n    };\n  }\n\n  componentDidMount() {\n    this.mounted = true;\n\n    // if we pass in participants as a prop, only get profiles for those participants;\n    // otherwise, get profiles for the entire group\n    const {participants} = this.props;\n    if (!participants) {\n      const group = messagingStore.getGroup(this.props.groupId);\n      this.setState({participants: group.getParticipants()});\n\n      group.onValues().then((res) => {\n        this.getParticipants();\n      });\n    } else if (!Array.isArray(participants) && typeof participants === 'object') {\n      const participantsObj = Object.values(participants);\n      this.setState({participants: participantsObj}, () => {\n        this.getParticipants();\n      });\n    } else {\n      this.getParticipants();\n    }\n  }\n\n  componentWillUnmount() {\n    this.mounted = false;\n  }\n\n  getParticipants = async () => {\n    const {perPage, currentPage, profiles, participants} = this.state;\n    const endIndex = perPage * currentPage;\n    const startIndex = endIndex - perPage;\n\n    const participantsToRequest = participants.slice(startIndex, endIndex);\n    const newProfiles = await messagingStore.getParticipants(participantsToRequest);\n\n    if (this.mounted) {\n      this.setState({\n        currentPage: currentPage + 1,\n        profiles: {...profiles, ...newProfiles},\n      });\n    }\n  };\n\n  render() {\n    const {\n      handleBackClick,\n      titleLabel,\n      groupType,\n      isSeenByModal,\n      sentToProfiles,\n      canMessageUsers,\n      isPoll,\n    } = this.props;\n\n    const {searchText, selectedList, profiles, participants} = this.state;\n\n    const {userId} = messagingStore;\n\n    const sentToOrSeenBy = isSeenByModal && selectedList === 'sentTo' ? sentToProfiles : profiles;\n\n    // Remove current user-host from recipient list\n    if (userId in participants && !isPoll) {\n      delete sentToOrSeenBy[userId];\n    }\n\n    // TODO: not sure why we're managing both participants array AND\n    // sentToOrSeenBy object - they fall out of sync when using both to represent\n    // our participants\n    const participantValues = !isPoll\n      ? Object.values(sentToOrSeenBy).filter((user) => user.userId !== userId)\n      : Object.values(sentToOrSeenBy);\n\n    const groupLength = participantValues.length;\n\n    const noSearchResults = participantValues.every(\n      (p) => p.name.toLowerCase().indexOf(searchText.toLowerCase()) === -1\n    );\n    let groupParticipants;\n\n    let heading = groupType === 'broadcast' ? 'Recipients' : 'Participants';\n\n    heading = titleLabel || heading;\n\n    const canUserMessageGuests = utils.isUserAHost(userId) && canMessageUsers;\n\n    // Sort the participants by name to show alphabetically\n    const sortedParticipants = participantValues.sort((a, b) => {\n      const nameA = a.name.toLowerCase();\n      const nameB = b.name.toLowerCase();\n\n      return nameA.localeCompare(nameB);\n    });\n\n    if (groupLength > 0) {\n      groupParticipants = Object.values(sortedParticipants).map((p, i) => {\n        const isHost = window.evite_event.host_ids.includes(p.userId);\n        const isPendingHost = window.evite_event.pending_host_ids.includes(p.userId);\n        let badge = '';\n        if (p.userId === userId) {\n          badge = 'You';\n        } else if (isHost && !isPendingHost) {\n          badge = 'Host';\n        }\n\n        if (searchText === '' || p.name.toLowerCase().indexOf(searchText.toLowerCase()) > -1) {\n          return (\n            <li\n              key={`participant-${p.userId}`}\n              data-qa-id=\"participant\"\n              data-qa-value={p.name.toLowerCase().replaceAll(' ', '-')}\n            >\n              <Typography variant=\"paragraph2\" classNames=\"name\">\n                {p.name}\n                {badge && ` (${badge})`}\n              </Typography>\n            </li>\n          );\n        }\n        if (groupLength === i + 1 && noSearchResults) {\n          return (\n            <li key=\"no-results\" data-qa-id=\"no-matching-guests\">\n              <Typography variant=\"paragraph2\" classNames=\"name\">\n                No matching guests found\n              </Typography>\n            </li>\n          );\n        }\n        return false;\n      });\n    } else {\n      groupParticipants = (\n        <li key=\"no-results\" data-qa-id=\"no-guests\">\n          <Typography variant=\"paragraph2\" classNames=\"name\">\n            There are no guests in this group\n          </Typography>\n        </li>\n      );\n    }\n\n    return (\n      <div data-qa-id=\"participants\" className=\"participants\">\n        {isPoll && (\n          <>\n            <div className=\"modal__header\">\n              <Typography variant=\"header3\" as=\"p\">\n                {heading}\n              </Typography>\n              <button\n                data-qa-id=\"close-participants-list\"\n                className=\"unstyled-button\"\n                onClick={handleBackClick}\n              >\n                <PB_CloseLine ratio={0.75} />\n              </button>\n            </div>\n            <Divider marginTop=\"1rem\" />\n          </>\n        )}\n        {isSeenByModal && !isPoll && groupType === 'broadcast' && (\n          <div className=\"broadcast-list-toggle\" role=\"presentation\">\n            <input\n              type=\"radio\"\n              id=\"sentTo\"\n              name=\"broadcast-toggle\"\n              checked={selectedList === 'sentTo'}\n              onChange={this.toggleBroadcastListView}\n            />\n            <label htmlFor=\"sentTo\" className=\"list-toggle-radio\">\n              Sent to ({Object.keys(sentToProfiles).length})\n            </label>\n            <input\n              type=\"radio\"\n              id=\"seenBy\"\n              name=\"broadcast-toggle\"\n              checked={selectedList === 'seenBy'}\n              onChange={this.toggleBroadcastListView}\n              data-qa-id=\"toggle-broadcast-list-view\"\n            />\n            <label htmlFor=\"seenBy\" className=\"list-toggle-radio\">\n              {titleLabel}\n            </label>\n          </div>\n        )}\n        {/* Temporarily comment out for MVP, will re-enable in EVT-15116 */}\n        {/* {!canUserMessageGuests && (\n          <div className=\"search__search\">\n            <input\n              id=\"participants-filter\"\n              type=\"text\"\n              className=\"search__input\"\n              placeholder=\"Search\"\n              value={searchText}\n              onChange={this.onChange}\n            />\n            <span className=\"search__icon icon-search\" />\n          </div>\n        )} */}\n        <ul className=\"participants-list\">\n          {groupParticipants}\n          {groupParticipants.length > 0 &&\n            this.state.participants.length > Object.keys(this.state.profiles).length && (\n              <li className=\"see-more-button-li\">\n                <button\n                  onClick={this.getParticipants}\n                  className=\"unstyled-button link\"\n                  data-qa-id=\"see-more-participants\"\n                >\n                  See More\n                </button>\n              </li>\n            )}\n        </ul>\n        {/* {canUserMessageGuests && (\n          <div className=\"message-users\">\n            <Button\n              variant=\"secondary\"\n              size=\"large\"\n              onClick={(e) => {\n                this.props.handleMessageUsersClick(participants);\n              }}\n              data-qa-id=\"messageThisGroup\"\n            >\n              Message This Group\n            </Button>\n          </div>\n        )} */}\n      </div>\n    );\n  }\n\n  onChange = (event) => {\n    this.setState({searchText: event.target.value});\n  };\n\n  toggleBroadcastListView = (event) => {\n    this.setState({selectedList: event.target.id});\n  };\n}\n","import React, {Component} from 'react';\nimport {observer as mobxObserver} from 'mobx-react';\nimport {messagingStore} from '~/messaging/store';\nimport {rtdb, serverPaths} from '~/messaging/database';\nimport {messagingPathname} from '~/messaging/utils/utils';\nimport {PB_Arrow} from '~/common/svg/PB_Arrow';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\n// since we are also loading the ParticipantsList component as a route, we\n// are unable to pass in the props that it normally would expect. Use this HOC\n// for \"props proxying\"\nexport function participantsWrapper(ParticipantsList) {\n  return @mobxObserver\n  class ParticipantsWrapperHOC extends Component {\n    constructor(props) {\n      super(props);\n      const {groupId, groupType} = props.match.params;\n      const {userId, isPrivateGuestList, getGroup} = messagingStore;\n\n      this.userId = userId;\n      this.groupPath = `${serverPaths.messages}/${groupType}/${groupId}`;\n      this.guestPath = `${serverPaths.guests}/${this.userId}/groups/${groupId}`;\n      this.guestDoc = rtdb.get(this.guestPath);\n      this.onDisconnect = this.guestDoc.onDisconnect();\n\n      // if we passed a list of participants through <Link/>,\n      // i.e., in NonVoters component\n      if (props.location && props.location.state) {\n        if (props.location.state.participants) {\n          this.participants = props.location.state.participants;\n        }\n        if (props.location.state.sentToProfiles) {\n          this.sentToProfiles = props.location.state.sentToProfiles;\n        }\n        if (props.location.state.isSeenByModal) {\n          this.isSeenByModal = props.location.state.isSeenByModal;\n          this.titleLabel = `Seen By (${this.participants.length})`;\n        }\n      }\n\n      this.state = {\n        group: null,\n      };\n\n      if (!props.history) console.log('Got No History: ');\n      const group = getGroup(groupId);\n\n      group.onValues().then((res) => {\n        if (!this.mounted) return;\n        const values = group.value;\n        // If guest list is private, all guest - guest chats should be redirected back to the message hub\n        if (isPrivateGuestList && !(groupType === 'broadcast' || groupType === 'h2g')) {\n          const participants = values.authUsers || {};\n          const isValidConv = this.isValidPrivateConversation(Object.keys(participants));\n          if (!isValidConv) {\n            const location = {\n              pathname: messagingPathname(`/messages`),\n              state: {bannerType: 'privateGuestList'},\n              search: window.location.search || '',\n            };\n            this.props.history.push(location);\n          }\n        }\n        this.setState({\n          group,\n          groupValues: values,\n        });\n      });\n    }\n\n    componentDidMount() {\n      this.mounted = true;\n    }\n\n    componentWillUnmount() {\n      this.mounted = false;\n      try {\n        this.state.group && this.state.group.close && this.state.group.close();\n        this.guestDoc.update({isActive: false});\n        // eek this removes all pending children as well\n        this.onDisconnect.cancel();\n        this.guestDoc.close();\n      } catch (e) {\n        // never fail for these nice-to-haves\n        evite.error('failed during unmount', e);\n      }\n    }\n\n    handleBackClick = () => {\n      const {groupType, groupId} = this.props.match.params;\n      const qs = window.location.search;\n      this.props.history.push(messagingPathname(`/messages/${groupType}/${groupId}${qs}`));\n    };\n\n    onGoBack = () => {\n      this.props.history.goBack();\n    };\n\n    render() {\n      if (this.state.group === null) return null;\n      const {groupId, groupType} = this.props.match.params;\n\n      return (\n        <div className=\"participants-wrapper conversation\">\n          <div className=\"participants-wrapper__header\">\n            <button\n              className=\"unstyled-button back-link\"\n              onClick={this.onGoBack}\n              data-qa-id=\"back-link\"\n            >\n              <PB_Arrow ratio={0.75} />\n            </button>\n            <Typography variant=\"paragraph2\" classNames=\"stacked-avatars__group-name\">\n              Participants\n            </Typography>\n          </div>\n          <ParticipantsList\n            participants={this.participants}\n            sentToProfiles={this.sentToProfiles}\n            isSeenByModal={this.isSeenByModal}\n            onlyParticipants={false}\n            handleBackClick={this.handleBackClick}\n            titleLabel={this.titleLabel}\n            groupType={groupType}\n            groupId={groupId}\n          />\n        </div>\n      );\n    }\n  };\n}\n","import React, {Component} from 'react';\nimport {observer as mobxObserver} from 'mobx-react';\nimport {messagingStore} from '~/messaging/store';\nimport './ProductEd.sass';\nimport {messagingPathname} from '~/messaging/utils/utils';\nimport {Link} from 'react-router-dom';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {Overlay} from '~/common/_pb_components/atoms/Overlay';\nimport {ParticipantsList} from '~/messaging/components/ParticipantsList/ParticipantsList';\nimport {participantsWrapper} from '~/messaging/components/ParticipantsList/participantsWrapper';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\n\n@mobxObserver\nexport class ProductEd extends Component {\n  constructor(props) {\n    super(props);\n\n    this.headingCopy = '';\n    this.state = {\n      participantsModalOpen: false,\n    };\n  }\n\n  groupParticipantsUrl = () => {\n    const {groupType, groupId} = this.props;\n    const qs = window.location.search;\n\n    return messagingPathname(`/messages/${groupType}/${groupId}/participants${qs}`);\n  };\n\n  getHeadingCopy = () => {\n    if (groupType === 'broadcast') {\n      const rsvpCopy = groupId === 'undecided' ? 'Not Yet Replied' : groupId;\n      if (isCustomBroadcast) {\n        this.headingCopy = `${participantCount} Recipients`;\n      } else {\n        this.headingCopy = groupId === 'all' ? 'All Guests' : `All ${rsvpCopy} RSVPs`;\n      }\n    }\n  };\n\n  getBroadcastLink = () => {\n    const {groupType, groupId} = this.props;\n    const virtualGroups = ['all', 'yes', 'maybe', 'no', 'undecided', 'attended'];\n    const isCustomBroadcast = groupType === 'broadcast' && !virtualGroups.includes(groupId);\n    const virtualGroupNames = {\n      yes: 'Yes',\n      maybe: 'Maybe',\n      no: 'No',\n      undecided: 'Not Yet Replied',\n    };\n\n    if (isCustomBroadcast) {\n      return {\n        dataQaId: 'view-recipientslist',\n        component: <>View List of Recipients</>,\n      };\n    }\n    if (groupId === 'all') {\n      return {\n        dataQaId: 'view-all-guestslist',\n        component: <>View List of All Guests</>,\n      };\n    }\n    return {\n      dataQaId: virtualGroupNames[groupId]\n        ? `view-all-${virtualGroupNames[groupId].toLowerCase().replaceAll(' ', '-')}-rsvpslist`\n        : 'view-all-rsvpslist',\n      component: (\n        <>\n          View list of All\n          <span className=\"rsvp-link\"> {virtualGroupNames[groupId]} </span> RSVPs\n        </>\n      ),\n    };\n  };\n\n  getBroadcastDescription = () => {\n    const {groupType, groupId, participants, participantCount} = this.props;\n    const virtualGroups = ['all', 'yes', 'maybe', 'no', 'undecided', 'attended'];\n    const virtualGroupNames = {\n      yes: 'Yes',\n      maybe: 'Maybe',\n      no: 'No',\n      undecided: 'Not Yet Replied',\n    };\n    const groupName = virtualGroupNames[groupId];\n    const {userId} = messagingStore;\n    // Remove current user-host from recipient list\n    if (groupType === 'broadcast' && userId in participants) {\n      delete participants[userId];\n    }\n\n    const isCustomBroadcast = groupType === 'broadcast' && !virtualGroups.includes(groupId);\n\n    if (isCustomBroadcast) {\n      return (\n        <>\n          This is a broadcast list with {participantCount - 1} recipients. Messages are sent to each\n          guest privately\n        </>\n      );\n    }\n    if (this.props.groupId === 'all') {\n      return 'This is a broadcast list with All Guests. Messages are sent to each guest privately.';\n    }\n    return (\n      <>\n        This is a broadcast list that sends to all guests who have RSVP'd\n        <span className={`rsvp-${groupId}`}> {groupName} </span>. The list will change as guests\n        change their RSVP status. Messages are sent to each guest privately.\n      </>\n    );\n  };\n\n  getDescription = () => {\n    const {groupType, participants} = this.props;\n    const isBroadcast = groupType === 'broadcast';\n    const actualNumOfGuests = Object.keys(participants).length;\n    const isPrivateMessage = groupType === 'h2g' || actualNumOfGuests === 1;\n\n    if (isBroadcast) {\n      return this.getBroadcastDescription();\n    }\n    if (isPrivateMessage) {\n      if (Object.keys(participants).length === 0) {\n        return 'This is a private message';\n      }\n      const privateMsgParticipant = Object.keys(participants).find(\n        (id) => id !== messagingStore.userId\n      );\n\n      return <>This is a private message with {participants[privateMsgParticipant].name}</>;\n    }\n    return <>This is a group chat. Participants will see each other's responses.</>;\n  };\n\n  render() {\n    const {groupType, groupId, participants, messageCount} = this.props;\n    const isBroadcast = groupType === 'broadcast';\n    const actualNumOfGuests = Object.keys(participants).length;\n    const isPrivateMessage = groupType === 'h2g' || actualNumOfGuests === 1; // actualNumOfGuests does not include the viewing user\n    const firstMessageClass = messageCount > 0 ? 'has-messages' : '';\n    const msgType = groupType;\n\n    const onParticipantListClose = () => this.setState({participantsModalOpen: false});\n\n    const heading = isBroadcast ? 'Recipients' : 'Participants';\n    const modalChildren = (\n      <div role=\"dialog\" aria-labelledby=\"participant-list\" className=\"participant-info-modal\">\n        <div className=\"info-modal__item info-modal__participants-link\">\n          <div className=\"product-education__modal-header\">\n            <Typography variant=\"label2\" color=\"pebble\">\n              {heading} ({actualNumOfGuests})\n            </Typography>\n            <button\n              className=\"unstyled-button\"\n              data-qa-id=\"close-participant-list\"\n              onClick={onParticipantListClose}\n            >\n              <PB_CloseLine />\n            </button>\n          </div>\n          <ParticipantsList\n            groupId={groupId}\n            groupType={groupType}\n            titleLabel={heading}\n            onlyParticipants={this.props.onlyParticipants}\n          />\n        </div>\n      </div>\n    );\n\n    const broadcastLink = this.getBroadcastLink();\n\n    return (\n      <div data-qa-id=\"product-education\" className={`product-education  ${firstMessageClass}`}>\n        <div className=\"product-education__details\">\n          <Typography variant=\"paragraph2\" color=\"pebble\">\n            {this.getDescription()}\n          </Typography>\n          {isBroadcast && (\n            <button\n              className=\"unstyled-button link large\"\n              onClick={() => this.setState({participantsModalOpen: true})}\n              data-qa-id={broadcastLink.dataQaId}\n            >\n              {broadcastLink.component}\n            </button>\n          )}\n        </div>\n        <Overlay\n          open={this.state.participantsModalOpen}\n          children={modalChildren}\n          popupWidth=\"37.1875rem\"\n        />\n      </div>\n    );\n  }\n}\n","import React, {Component} from 'react';\nimport {observer as mobxObserver} from 'mobx-react';\nimport {Link} from 'react-router-dom';\nimport {messagingStore} from '~/messaging/store';\nimport {messagingPathname} from '~/messaging/utils/utils';\nimport {pebble} from '~sass/pb_styleguide/base/_exports.sass';\nimport {PB_BroadcastLine} from '~/common/svg/PB_BroadcastLine';\n\n@mobxObserver\nexport class SeenBy extends Component {\n  //\n  // /**\n  //  * Get seenBy copy\n  //  * Get a list of users' names if the seen by count is <4\n  //  * If the seen by count is 4 or more, just display the count\n  //  * If the message is a broadcast, show Sent To <count>. Seen By <count>\n  //  */\n  getSeenBy = () => {\n    let seenByProfiles;\n    let seenByCount = 0;\n    const seenByUserIds = [];\n    const {seenBy = {}, groupType, groupId} = this.props; // seenBy => { joe: 0 , lucy: 12345, bob: 0 }\n    let seenByStr = groupType === 'broadcast' ? '' : 'Delivered';\n    let recipientCount = 0;\n\n    for (const userId in seenBy) {\n      if (seenBy.hasOwnProperty(userId)) {\n        recipientCount++;\n        const timestamp = seenBy[userId]; // seenBy['joe'] => 0 or seenBy['lucy'] => 12345\n        // Valid timestamp (Not 0)\n        if (timestamp) {\n          if (groupType === 'h2g') {\n            seenByStr = 'Seen';\n          } else {\n            seenByUserIds.push(userId);\n          }\n        }\n      }\n    }\n    seenByCount = seenByUserIds.length;\n    const sentToProfiles = messagingStore.getProfiles(Object.keys(seenBy));\n\n    if (seenByCount > 0) {\n      const profiles = messagingStore.getProfiles(seenByUserIds); // {'0208REYFYE26TYHAGEPHRBIT4F6WFM': { userId: 'joe', name: 'Joe Biden'},  ...}\n\n      if (seenByCount >= 4 || groupType === 'broadcast') {\n        seenByStr = this.getSeenByText(seenByCount);\n        // Only show the profiles if the names aren't displayed in the message\n        if (Object.keys(profiles).length > 0) {\n          seenByProfiles = Object.keys(profiles); // ['0208REYFYE26TYHAGEPHRBIT4F6WFM', '1238REYFYE26TYHAGEPHRBIT4F6LKE', ...]\n        }\n      } else {\n        seenByStr = seenByUserIds.reduce((prev, curr, idx) => {\n          const currName = (profiles[curr] && profiles[curr].name) || '';\n          const commaSeparator = idx < seenByCount - 1 ? ',' : '';\n\n          return (\n            <>\n              {prev} <span className=\"message__seenby-name\">{currName}</span>\n              {commaSeparator}\n            </>\n          );\n        }, 'Seen by');\n      }\n    }\n\n    if (seenByProfiles) {\n      return (\n        <>\n          {groupType === 'broadcast' && (\n            <div\n              className=\"message__broadcast-details\"\n              data-qa-id=\"sent-to\"\n              data-qa-value={recipientCount}\n            >\n              <PB_BroadcastLine ratio={0.5} color={pebble} />\n              <p>\n                Sent to <b>{recipientCount}</b>\n              </p>\n            </div>\n          )}\n          <Link\n            to={{\n              pathname: messagingPathname(`/messages/${groupType}/${groupId}/participants`),\n              state: {\n                participants: seenByProfiles,\n                sentToProfiles,\n                isSeenByModal: true,\n              },\n            }}\n            className=\"message__seen-by-link\"\n            data-qa-id=\"open-seen-by\"\n          >\n            {seenByStr}\n          </Link>\n        </>\n      );\n    }\n    // TODO: This all needs to be refactored to return JSX instead of\n    // using dangerouslySetInnerHTML to render text & html.\n    if (groupType === 'broadcast') {\n      return (\n        <>\n          <div\n            className=\"broadcast-details\"\n            data-qa-id=\"sent-to\"\n            //              data-qa-value={recipientValue} Commented out but didn't completely take out in case, addressed for future\n          >\n            <PB_BroadcastLine ratio={0.4375} color={pebble} />\n            <p>\n              Sent to <b>{recipientCount}</b>\n            </p>\n          </div>\n          <span dangerouslySetInnerHTML={{__html: seenByStr}} data-qa-id=\"seen-by\" />\n        </>\n      );\n    }\n    if (seenByCount >= 0 && seenByCount < 4) {\n      return <div data-qa-id=\"seen-by\">{seenByStr}</div>;\n    }\n    return <div dangerouslySetInnerHTML={{__html: seenByStr}} data-qa-id=\"seen-by\" />;\n  };\n\n  getSeenByText = (seenByCount) => (\n    <>\n      Seen by <strong>{seenByCount}</strong>\n    </>\n  );\n\n  render() {\n    const {showSeenBy} = this.props;\n\n    if (showSeenBy) {\n      return <div className=\"message__seen-by\">{this.getSeenBy()}</div>;\n    }\n    return <div className=\"message__seen-by\" />;\n  }\n}\n","// json object containing various snooze\n// and mute options\n\nexport const SNOOZE_OPTIONS = {\n  'snooze-options-0': {\n    label: 'Off',\n    time: 0,\n  },\n  'snooze-options-1': {\n    label: '2 hours',\n    time: 7200000,\n  },\n  'snooze-options-2': {\n    label: '4 hours',\n    time: 14400000,\n  },\n  'snooze-options-3': {\n    label: '8 hours',\n    time: 28800000,\n  },\n  'snooze-options-4': {\n    label: '1 day',\n    time: 86400000,\n  },\n};\n","import React from 'react';\nimport {UserAvatar} from '~/view_invitation/avatars/components';\nimport './StackedAvatars.sass';\n\n// a component that displays avatars in an overlapping stack\nexport function StackedAvatars(props) {\n  const {profiles, maxShown, nameShown} = props;\n\n  const numOfGuests =\n    (profiles && profiles.length && profiles.length >= maxShown ? maxShown : profiles.length) || 0;\n\n  // only render subset of guest avatars if the list is long\n  const guestsToRender = profiles && profiles.length > 0 ? profiles.slice(0, numOfGuests) : [];\n\n  return (\n    <div\n      data-qa-id=\"stacked-avatars\"\n      className={`stacked-avatars stacked-avatars--count${numOfGuests}`}\n    >\n      {guestsToRender.map((user, index) => (\n        <div key={`${user.userId}-${index}`} className={`stacked-avatar stacked-avatar-${index}`}>\n          <UserAvatar {...user} />\n        </div>\n      ))}\n    </div>\n  );\n}\n","import React, {PureComponent} from 'react';\nimport update from 'immutability-helper';\nimport {rtdb} from '~/messaging/database';\nimport './CreateEditPollModalContent.sass';\nimport {ModalContent} from '~/messaging/components/ModalContent/ModalContent';\nimport {messagingStore} from '~/messaging/store';\nimport {Overlay} from '~/common/_pb_components/atoms/Overlay';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Input} from '~/common/_pb_components/atoms/Input';\nimport {Checkbox} from '~/common/_pb_components/atoms/Checkbox';\nimport {Button} from '~/common/_pb_components/atoms/Button';\nimport {PB_CloseLine} from '~/common/svg/PB_CloseLine';\nimport {pebble} from '~sass/pb_styleguide/base/_exports.sass';\n\nexport class CreateEditPollModalContent extends PureComponent {\n  constructor(props) {\n    super(props);\n\n    // use this to get id & edit after widget has been saved\\\n    const {pollData} = props;\n    const editPoll = pollData && pollData.widgetId && pollData.content;\n\n    if (editPoll) {\n      const {widgetId, content} = pollData;\n      const {options, voteCount, question, allow_other_option} = content;\n\n      // format options and append their vote counts\n      const formattedOptions = Object.keys(options).map((key) => ({\n        option: options[key],\n        response_count: voteCount[key],\n        id: key,\n      }));\n      this.state = {\n        editingPoll: true,\n        widgetId,\n        allow_other_option,\n        question,\n        options: formattedOptions,\n        minOptions: allow_other_option ? 1 : 2,\n        maxOptions: 6,\n        validationErrors: null,\n        btnDisabled: false,\n        original_poll_data: formattedOptions,\n        showInternalModal: false,\n        modalChildren: <></>,\n      };\n    } else {\n      this.state = {\n        editingPoll: false,\n        allow_other_option: false,\n        question: '',\n        options: [{option: ''}, {option: ''}],\n        minOptions: 2,\n        maxOptions: 6,\n        validationErrors: null,\n        btnDisabled: false,\n        showInternalModal: false,\n        modalChildren: <></>,\n      };\n    }\n  }\n\n  handleAllowOtherOptionsChange = () => {\n    this.setState(\n      {\n        allow_other_option: !this.state.allow_other_option,\n      },\n      () => {\n        this.setState({minOptions: this.state.allow_other_option ? 1 : 2});\n      }\n    );\n  };\n\n  render() {\n    const {editingPoll, question, options, minOptions, maxOptions, allow_other_option} = this.state;\n    const showAddOptionLink = options.length < maxOptions;\n    const option_nodes = options.map((opt, i) => {\n      const {option, response_count, autofocus} = opt;\n      const optionNum = i + 1;\n      const inputRequired = optionNum <= minOptions;\n      const canRemove = options.length > minOptions;\n      const inputTabIndex = 2 + i * 2;\n      return (\n        <div key={`poll-create-${i}`} className=\"poll-option\">\n          <Input\n            type=\"text\"\n            value={option}\n            placeholder={`Option ${optionNum}`}\n            aria-label={`Option ${optionNum}`}\n            onChange={(e) => this.handleOptionChange(i, e)}\n            // onKeyDown={(e) => this.handleOptionKeyDown(i, e)}\n            maxLength={24}\n            required={inputRequired}\n            tabIndex={inputTabIndex}\n            autoFocus={autofocus}\n            disabled={response_count > 0}\n            data-qa-id=\"poll-option\"\n          />\n          {canRemove && (\n            <DeleteOptionLink\n              heading=\"Are you sure?\"\n              body=\"This poll choice has votes, are you sure you would like to remove it?\"\n              onConfirmClick={(e) => this.handleRemoveOption(i, e)}\n              option={options[i]}\n              key={i}\n              index={i}\n              tabIndex={inputTabIndex + 1}\n            />\n          )}\n          {editingPoll && response_count && (\n            <Typography variant=\"paragraph2\" data-qa-id=\"response-count\">\n              {response_count}\n            </Typography>\n          )}\n        </div>\n      );\n    });\n    const nextIndexAfterOptions = option_nodes.length * 2 + 2;\n    return (\n      <div role=\"dialog\" aria-labelledby=\"group-chat-info\" className=\"poll-modal__wrap\">\n        <Overlay\n          open={this.state.showInternalModal}\n          children={this.state.modalChildren}\n          data-qa-id=\"pollActionModal\"\n        />\n        <div className=\"create-edit-poll__header\">\n          <Typography\n            variant=\"label1\"\n            as=\"h1\"\n            data-qa-id={editingPoll ? 'edit-poll' : 'create-new-poll'}\n          >\n            {editingPoll ? 'Edit Poll' : 'Create a New Poll'}\n          </Typography>\n          <button\n            className=\"unstyled-button\"\n            onClick={this.props.onCloseClick}\n            data-qa-id=\"close-poll-form\"\n          >\n            <PB_CloseLine ratio={0.75} />\n          </button>\n        </div>\n        <Divider marginTop=\"1rem\" marginBottom=\"1rem\" />\n        <form\n          className=\"evite-form create-edit-poll-form\"\n          onSubmit={this.handleFormSubmit}\n          noValidate\n        >\n          <textarea\n            className=\"poll-question\"\n            type=\"text\"\n            placeholder=\"Ask something...\"\n            autoFocus\n            value={question}\n            onChange={this.handleQuestionChange}\n            maxLength={140}\n            rows={3}\n            required\n            tabIndex={1}\n            disabled={this.state.editingPoll}\n            data-qa-id=\"poll-question\"\n          />\n          {option_nodes}\n          <fieldset id=\"allow_options_fieldset\">\n            <Checkbox\n              id=\"allow_other_options\"\n              data-qa-id=\"allow-other-options\"\n              checked={allow_other_option}\n              onChange={this.handleAllowOtherOptionsChange}\n              label=\"Other - Check to allow guests to add custom options.\"\n            />\n          </fieldset>\n\n          <div className=\"poll-options\">\n            {showAddOptionLink && (\n              <button\n                onClick={this.handleAddClick}\n                className=\"unstyled-button link\"\n                tabIndex={nextIndexAfterOptions}\n                data-qa-id=\"add-option\"\n              >\n                Add Option\n              </button>\n            )}\n            {editingPoll && (\n              <button\n                onClick={(e) => {\n                  this.onShowInternalModal('delete_poll', this.deletePoll);\n                }}\n                className=\"delete-poll unstyled-button link\"\n                tabIndex={nextIndexAfterOptions + 1}\n                data-qa-id=\"delete-poll\"\n              >\n                Delete Poll\n              </button>\n            )}\n          </div>\n          {this.state.validationErrors && (\n            <span\n              className=\"validation-error\"\n              style={{marginTop: '15px', display: 'block'}}\n              role=\"alert\"\n              aria-live=\"assertive\"\n            >\n              {this.state.validationErrors}\n            </span>\n          )}\n          <Typography variant=\"paragraph3\" color=\"pebble\" classNames=\"guest-response-disclaimer\">\n            Guests will not see one another's responses.\n          </Typography>\n          <Button\n            formSubmit\n            variant=\"primary\"\n            size=\"large\"\n            fullWidth\n            disabled={this.state.btnDisabled}\n            tabIndex={nextIndexAfterOptions + 2}\n            data-qa-id={editingPoll ? 'save-changes' : 'create-poll'}\n          >\n            {editingPoll ? 'Save Changes' : 'Create Poll'}\n          </Button>\n        </form>\n      </div>\n    );\n  }\n\n  handleQuestionChange = (e) => {\n    const newState = update(this.state, {\n      question: {$set: e.target.value},\n    });\n    this.setState(newState);\n  };\n\n  handleOptionChange = (index, e) => {\n    const newState = update(this.state, {\n      options: {\n        [index]: {\n          option: {$set: e.target.value},\n        },\n      },\n    });\n    this.setState(newState);\n  };\n\n  // handleOptionKeyDown = (index, e) => {\n  //   const optionsLen = this.state.options.length;\n  //   if (e.keyCode === 9 && !e.shiftKey && index + 1 === optionsLen) {\n  //     e.preventDefault();\n  //     this.handleAddClick(e);\n  //   }\n  // };\n\n  /**\n   * Check for duplicate option names\n   * @param {array} options - A list of option objects\n   * @returns {boolean} True/False if found/not found\n   */\n  hasDuplicateOptions = (optionsArray) =>\n    // Check if at-least one of the items passes the check. Returns true/false\n    optionsArray.some(\n      (item, i) =>\n        // If the found index is not the same as the current item's index, it's a duplicate\n        optionsArray.indexOf(item) !== i\n    );\n\n  closeInternalModal = () => {\n    this.setState({showInternalModal: false});\n  };\n\n  onShowInternalModal = (action, callback) => {\n    let modalChildren = null;\n    let showInternalModal = false;\n\n    if (action === 'delete_option_with_votes') {\n      showInternalModal = true;\n      modalChildren = (\n        <ModalContent\n          action={callback}\n          handleCloseModal={this.closeInternalModal}\n          className=\"delete-poll-wrap\"\n          heading=\"Are you sure?\"\n          bodyCopy=\"This poll choice has votes, are you sure you would like to remove it?\"\n          cancelCopy=\"Cancel\"\n          actionCopy=\"Delete Option\"\n        />\n      );\n    } else if (action === 'delete_poll') {\n      showInternalModal = true;\n      const deletePoll = () => {\n        this.setState({btnDisabled: true});\n        callback().then(() => this.props.onCloseClick());\n      };\n      modalChildren = (\n        <ModalContent\n          action={deletePoll}\n          handleCloseModal={this.closeInternalModal}\n          className=\"delete-poll-wrap\"\n          heading=\"Delete Poll\"\n          bodyCopy=\"By deleting this poll you will lose all of your votes. This\n          action cannot be undone.\"\n          cancelCopy=\"Cancel\"\n          actionCopy=\"Delete Poll\"\n        />\n      );\n    }\n\n    this.setState({showInternalModal, modalChildren});\n  };\n\n  handleFormSubmit = (e) => {\n    e.preventDefault();\n    const {groupId} = this.props;\n    const {editingPoll, question, options} = this.state;\n    const optionsArray = options\n      .map((option) => option.option)\n      .filter((el) => !(el.length === 0 || !el.trim()));\n\n    let validationErrors;\n    let poll_widget = {\n      type: 'poll',\n      createdBy: messagingStore.userId,\n      createdAt: rtdb.TIMESTAMP,\n      content: {\n        question: this.state.question,\n        allow_other_option: this.state.allow_other_option,\n        options: optionsArray,\n      },\n    };\n\n    /* VALIDATE FORM */\n    if (!question || !question.trim()) {\n      validationErrors = 'Question is required';\n    } else if (optionsArray.length < this.state.minOptions) {\n      validationErrors = 'At least 2 poll choices are required.';\n    } else if (this.hasDuplicateOptions(optionsArray)) {\n      validationErrors = 'Two or more of your options are the same. Please update and try again.';\n    }\n    // Show errors\n    if (validationErrors) {\n      this.setState({\n        validationErrors,\n      });\n      return false;\n    }\n    /* END VALIDATION */\n\n    const virtualGroups = ['all', 'yes', 'no', 'maybe', 'undecided'];\n    if (virtualGroups.indexOf(groupId) > -1) {\n      poll_widget.virtual_groups = [groupId];\n    } else {\n      poll_widget.group_id = groupId;\n    }\n\n    if (editingPoll && this.state.widgetId) {\n      poll_widget = this.formatEditPayload(poll_widget);\n      this.submitForm(poll_widget, this.state.widgetId);\n    } else {\n      this.submitForm(poll_widget);\n    }\n    this.setState({btnDisabled: true});\n  };\n\n  submitForm = async (poll_widget, widget_id) => {\n    const create_widget_url = `/tsunami/v1/services/event/${window.event_id}/guest/${window.guest_id}/widgets/`;\n\n    const edit_widget_url = `/tsunami/v1/services/event/${window.event_id}/guest/${window.guest_id}/widget/${widget_id}/`;\n\n    const url = this.state.editingPoll ? edit_widget_url : create_widget_url;\n    const method = this.state.editingPoll ? 'PATCH' : 'POST';\n\n    const postPoll = {\n      method,\n      credentials: 'include',\n      cache: 'no-cache',\n      body: JSON.stringify(poll_widget),\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    };\n    try {\n      const response = await evite.fetch(url, postPoll);\n      const responseJson = await response.json();\n      if (response.ok) {\n        window.tags.track_event('sent_q_poll');\n        this.props.onCloseClick();\n      } else {\n        console.log('failed with response', response.status);\n      }\n    } catch (e) {\n      console.error('postPoll Fetch Error', e);\n    }\n  };\n\n  formatEditPayload(poll_widget) {\n    const {state} = this;\n    const {original_poll_data} = state;\n    const modified_poll_options = poll_widget.content ? poll_widget.content.options : [];\n    const new_options = [];\n    const edited_options = {};\n    const deleted_options = [];\n    const original_poll_data_hash = {};\n    const payload = {};\n\n    // store original options in a hash\n    original_poll_data.forEach((option_obj) => {\n      const {option} = option_obj;\n      original_poll_data_hash[option] = option_obj;\n    });\n\n    // remove unchanged options, collect new options\n    modified_poll_options.forEach((opt) => {\n      if (original_poll_data_hash[opt]) delete original_poll_data_hash[opt];\n      else new_options.push(opt);\n    });\n\n    // overwrite remaining discarded options with new options (save memory) & delete surplus options\n    Object.values(original_poll_data_hash).forEach((option_obj, i) => {\n      if (new_options.length) {\n        const new_option = new_options.shift();\n        edited_options[option_obj.id] = new_option;\n      } else {\n        deleted_options.push(option_obj.id);\n      }\n    });\n\n    // format poll_widget edit payload\n    if (new_options.length) payload.poll_add_options = new_options;\n    if (deleted_options.length) payload.poll_delete_options = deleted_options;\n    if (Object.keys(edited_options).length) payload.poll_edit_options = edited_options;\n\n    return payload;\n  }\n\n  handleAddClick = (e) => {\n    e.preventDefault();\n    if (this.state.options.length === this.state.maxOptions) {\n      this.setState({\n        validationErrors: 'The maximum number of poll options is 6',\n      });\n      return false;\n    }\n    const newState = update(this.state, {\n      options: {\n        $push: [\n          {\n            option: '',\n            autofocus: true,\n          },\n        ],\n      },\n    });\n    this.setState(newState);\n  };\n\n  handleRemoveOption = (index) => {\n    let hasVotes = false;\n    const filtered = this.state.options.filter((opt, i) => {\n      if (i === index && opt.response_count) hasVotes = true;\n      return i !== index;\n    });\n    const newState = update(this.state, {\n      options: {$set: filtered},\n    });\n\n    if (hasVotes)\n      this.onShowInternalModal('delete_option_with_votes', () => this.setState(newState));\n    else this.setState(newState);\n  };\n\n  deletePoll = async () => {\n    const {widgetId} = this.state;\n\n    const url = `/tsunami/v1/services/event/${window.event_id}/guest/${window.guest_id}/widget/${widgetId}`;\n\n    const deletePoll = {\n      method: 'DELETE',\n      credentials: 'include',\n      cache: 'no-cache',\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    };\n    try {\n      const response = await evite.fetch(url, deletePoll);\n      if (response.ok) {\n        console.log('poll successfully deleted');\n      } else {\n        console.log('failed with response', response.status);\n      }\n      return response;\n    } catch (e) {\n      console.error('Error deleting this poll', e);\n    }\n  };\n}\n\nclass DeleteOptionLink extends PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {isModalOpen: false};\n  }\n\n  render() {\n    // const {heading, body} = this.props;\n    const {tabIndex} = this.props;\n    return (\n      // this is still pending because host cant edit polls now and having a modal on a modal cause issues:\n      // reffer ticket: https://evitetracking.atlassian.net/browse/EVT-13931\n      <a onClick={this.onConfirmClick} className=\"delete-item\" tabIndex={tabIndex}>\n        <PB_CloseLine ratio={0.75} color={pebble} />\n      </a>\n    );\n  }\n\n  onConfirmClick = (e) => {\n    e.preventDefault();\n    this.props.onConfirmClick(this.props.index);\n    this.setState({isModalOpen: false});\n  };\n\n  // openModal = () => {\n  //   if (this.props.option.response_count > 0) {\n  //     this.setState({isModalOpen: true});\n  //   } else {\n  //     this.setState({isModalOpen: false});\n  //     this.props.onConfirmClick(this.props.index);\n  //   }\n  // };\n\n  // closeModal = () => {\n  //   this.setState({isModalOpen: false});\n  // };\n}\n","import React, {Component} from 'react';\nimport {Link} from 'react-router-dom';\nimport {observer as mobxObserver} from 'mobx-react';\n\n@mobxObserver\nexport class NonVoters extends Component {\n  getNonVoters = () => {\n    const {nonVoterProfiles, groupType, groupId} = this.props;\n\n    const nonVoterCount = Object.keys(nonVoterProfiles).length;\n    const haveOrHas = nonVoterCount === 1 ? ' has' : ' have';\n    const nonVoterStr = `${nonVoterCount + haveOrHas} not replied`;\n\n    if (nonVoterProfiles) {\n      return (\n        <button\n          data-qa-id=\"show-all-seen-non-voters\"\n          aria-label=\"Show all seen by guests\"\n          className=\"unstyled-button link\"\n          onClick={(e) => {\n            this.props.onShowModal(\n              'nonvoters',\n              nonVoterProfiles,\n              [],\n              `Guests who have not replied (${nonVoterCount})`,\n              this.props.handleMessageUsersClick\n            );\n          }}\n        >\n          {nonVoterStr}\n        </button>\n      );\n    }\n    return <div>{nonVoterStr}</div>;\n  };\n\n  render() {\n    return <>{this.getNonVoters()}</>;\n  }\n}\n\n// <Link\n//   to={{\n//     pathname: `/event/${\n//       window.evite_event.id\n//     }/messages/${groupType}/${groupId}/participants`,\n//     state: {participants: nonVoterProfiles},\n//   }}\n// >\n","import React, {Component} from 'react';\nimport {messagingStore} from '~/messaging/store';\nimport {isUserAHost} from '~/view_invitation/utils';\nimport {MessageTimeStamp} from '~/messaging/components/Message/MessageTimeStamp';\nimport {PollContent} from '~/messaging/components/polls/PollContent';\nimport {StyledWidget} from '~/messaging/components/Message/StyledWidget';\nimport {NonVoters} from '~/messaging/components/polls/NonVoters';\nimport {UserAvatar} from '~/view_invitation/avatars/components';\nimport {setSeenBy} from '~/messaging/utils/setSeenBy';\nimport {pebble} from '~sass/pb_styleguide/base/_exports.sass';\nimport {PB_BroadcastLine} from '~/common/svg/PB_BroadcastLine';\nimport './poll.sass';\n\nexport class Poll extends Component {\n  constructor(props) {\n    super(props);\n    const {pollValues} = this.props;\n    if (pollValues.content.voteCount) {\n      const votes = pollValues.content.voteCount;\n      const allResponseCountsArr = Object.values(votes).map((count, i) => count);\n      const total_response_count = allResponseCountsArr.reduce((a, b) => a + b, 0);\n      this.totalVoteCount = total_response_count;\n    }\n  }\n\n  componentDidMount() {\n    // Reading someone else's message\n    if (this.props.createdBy !== messagingStore.userId) {\n      const {userId} = messagingStore;\n      const {sentTo, messageId, setReadTimeStamp} = this.props;\n      setSeenBy(sentTo, messageId, setReadTimeStamp, userId);\n    }\n  }\n\n  get routeBase() {\n    const {event_id} = window;\n    let base = '';\n\n    if (this.isPremium) {\n      base += '/plus/create';\n    } else {\n      base += '/event';\n    }\n\n    if (event_id) base += `/${event_id}`;\n    return base;\n  }\n\n  blur = () => {\n    if (document.activeElement) {\n      document.activeElement.blur();\n    }\n  };\n\n  handleMessageUsersClick = async (participants) => {\n    const url = `${this.routeBase}/messages/new/`;\n\n    messagingStore.selected = participants.map((user) => ({userId: user}));\n\n    this.props.history.push('/messages/new/');\n    this.blur();\n  };\n\n  getPollForGuest = (profile) => {\n    const {pollValues, widgetId, messageId, showTimestamp, isMsgFromSender, onShowModal} =\n      this.props;\n\n    const guestName = isUserAHost(profile.userId) ? `${profile.name} (Host)` : profile.name;\n\n    return (\n      <div\n        data-qa-id=\"message\"\n        data-message-id={messageId}\n        className={`message message--new ${isMsgFromSender ? 'message--right' : ''}`}\n      >\n        {showTimestamp && (\n          <MessageTimeStamp classes=\"message__timestamp\" createdAt={pollValues.createdAt} />\n        )}\n\n        <div className=\"message__wrapper poll-wrap\">\n          <UserAvatar\n            userId={pollValues.createdBy}\n            name={profile.name}\n            initials={profile.initials}\n            avatarDisk={profile.avatarDisk}\n            avatarUrl={profile.avatarUrl}\n            avatarCls=\"message__avatar\"\n          />\n          <div className=\"message__profile\">\n            <div className=\"message__name\">{guestName}</div>\n            <StyledWidget isMsgFromSender={isMsgFromSender}>\n              <PollContent\n                widget={pollValues}\n                voteCount={this.totalVoteCount}\n                widgetId={widgetId}\n                isMsgFromSender={isMsgFromSender}\n                onShowModal={onShowModal}\n              />\n            </StyledWidget>\n          </div>\n        </div>\n      </div>\n    );\n  };\n\n  render() {\n    const {\n      pollValues,\n      widgetId,\n      groupType,\n      groupId,\n      messageId,\n      newMessage,\n      showTimestamp,\n      isMsgFromSender,\n      senderId,\n      onShowModal,\n      participantCount,\n    } = this.props;\n    let nonVoterProfiles;\n\n    const votesByUser = pollValues.content.votesByUser || {};\n\n    // group chats use participant list as sentTo\n    // so remove sender from potential voters\n    const sentTo = this.props.sentTo.filter((id) => id !== senderId);\n\n    const isHostOrCohost = window.evite_event.host_ids.includes(messagingStore.userId);\n    if (!isMsgFromSender && newMessage && !isHostOrCohost) {\n      const profile = messagingStore.getProfile(pollValues.createdBy) || {};\n      return this.getPollForGuest(profile);\n    }\n\n    if (Object.keys(votesByUser).length === 0) {\n      // no one has voted, so everyone is a nonVoter\n      nonVoterProfiles = sentTo;\n    } else {\n      nonVoterProfiles = sentTo.filter((user) => !votesByUser[user]);\n    }\n\n    // do not show nonVoters to guests or if everyone has voted\n    const showNonVoters = isMsgFromSender && participantCount > 0;\n\n    return (\n      <div\n        data-qa-id=\"message\"\n        data-message-id={messageId}\n        className={`message ${isMsgFromSender ? 'message--right' : ''}`}\n      >\n        {showTimestamp && (\n          <MessageTimeStamp classes=\"message__timestamp\" createdAt={pollValues.createdAt} />\n        )}\n\n        <div className=\"message__wrapper poll-wrap\">\n          <StyledWidget isMsgFromSender={isMsgFromSender}>\n            <PollContent\n              widget={pollValues}\n              voteCount={this.totalVoteCount}\n              widgetId={widgetId}\n              groupType={groupType}\n              groupId={groupId}\n              isMsgFromSender={isMsgFromSender}\n              onShowModal={onShowModal}\n              handleMessageUsersClick={this.handleMessageUsersClick}\n            />\n          </StyledWidget>\n        </div>\n        <div className=\"message__seen-by poll\">\n          <PB_BroadcastLine ratio={0.5} color={pebble} />\n          <p>Sent to {participantCount}</p>\n          <span>|</span>\n          {showNonVoters && (\n            <NonVoters\n              sentTo={sentTo}\n              nonVoterProfiles={nonVoterProfiles}\n              messageId={messageId}\n              groupType={this.props.groupType}\n              groupId={this.props.groupId}\n              onShowModal={onShowModal}\n              handleMessageUsersClick={this.handleMessageUsersClick}\n            />\n          )}\n        </div>\n      </div>\n    );\n  }\n}\n","import React, {Component} from 'react';\nimport {PB_Arrow} from '~/common/svg/PB_Arrow';\nimport {PB_CheckmarkCircle} from '~/common/svg/PB_CheckmarkCircle';\nimport {PB_EditLine} from '~/common/svg/PB_EditLine';\nimport {PB_PollLine} from '~/common/svg/PB_PollLine';\nimport {Divider} from '~/common/_pb_components/atoms/Divider';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\nimport {Radio} from '~/common/_pb_components/atoms/Radio';\nimport {messagingStore} from '~/messaging/store';\nimport {tanzanite, emerald} from '~sass/pb_styleguide/base/_exports.sass';\nimport './poll.sass';\n\nexport class PollContent extends Component {\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      wantsToChangeVote: false,\n      voterProfiles: [],\n      newOptionText: '',\n      vote: '',\n    };\n  }\n\n  userHasVoted = () => {\n    let hasVoted;\n    let usersWhoVoted;\n    const user_id = messagingStore.userId || null;\n\n    if (this.props.widget.content.votesByUser) {\n      usersWhoVoted = Object.keys(this.props.widget.content.votesByUser);\n      hasVoted = usersWhoVoted.indexOf(user_id) !== -1;\n    }\n    return hasVoted;\n  };\n\n  getVoters = (voteKey) => {\n    const voterList = [];\n    const {content} = this.props.widget;\n\n    Object.entries(content.votesByOption[voteKey]).forEach((item) => {\n      if (item[1] === true) {\n        return voterList.push(item[0]);\n      }\n    });\n\n    const profilesOfVoters = Object.keys(messagingStore.getProfiles(voterList));\n\n    return profilesOfVoters;\n  };\n\n  handleChangeVote = () => {\n    this.setState({\n      wantsToChangeVote: true,\n    });\n  };\n\n  getVoteResults = () => {\n    const {widget, isMsgFromSender} = this.props;\n    const {content} = widget;\n    const {options} = content;\n    const votes = content.voteCount;\n    let percent = 0;\n\n    const mostVotes = Object.entries(votes).reduce((prev, current) =>\n      prev[1] > current[1] ? prev : current\n    );\n\n    // Loop through each option in the poll\n    const voteBars = Object.entries(options).map((option, i) => {\n      const key = option[0]; // Firebase id of option\n      const value = option[1]; // String text of option user sees\n\n      const voteCounts = Object.entries(votes).map((vote, i) => {\n        const voteKey = vote[0]; // Firebase id of option\n        let voteCount = vote[1]; // Number of votes this option has\n\n        const showVoteCountButton = isMsgFromSender && voteCount >= 1;\n\n        // Match the voteCount to the option\n        if (key === voteKey) {\n          const winner = voteCount === mostVotes[1];\n          percent = this.totalVoteCount > 0 ? (voteCount / this.totalVoteCount) * 100 : 0;\n\n          const titleLabelCopy = `Guests who voted \"${value}\" (${voteCount})`;\n\n          const optionalClass = voteCount == 0 ? 'no-votes' : '';\n          voteCount = voteCount > 0 ? voteCount : 'No'; // show \"No votes\" instead of 0 votes\n          const pluralizedCopy = voteCount !== 1 ? ` votes` : ` vote`;\n          const voteCopy = voteCount + pluralizedCopy;\n\n          return (\n            <li className=\"poll-option\" id={`option-${key}`} key={`option-${key}`}>\n              <div className={`vote-bar ${winner ? 'winner' : ''}`}>\n                <div className=\"option-count-wrap\">\n                  <div className=\"vote-bar__vote-count-wrapper\">\n                    <Typography variant=\"paragraph2\">{value}</Typography>\n                    {winner && <PB_CheckmarkCircle ratio={0.75} color={emerald} />}\n                  </div>\n                  {!showVoteCountButton && (\n                    <Typography variant=\"paragraph2\" classNames={`votes-count ${optionalClass}`}>\n                      {voteCopy}\n                    </Typography>\n                  )}\n                  {showVoteCountButton && (\n                    <button\n                      className=\"votes-count unstyled-button\"\n                      onClick={(e) => {\n                        this.props.onShowModal(\n                          'voters',\n                          this.getVoters(voteKey),\n                          [],\n                          titleLabelCopy,\n                          this.props.handleMessageUsersClick\n                        );\n                      }}\n                      data-qa-id=\"vote-count\"\n                    >\n                      {voteCopy}\n                      <PB_Arrow ratio={0.5} />\n                    </button>\n                  )}\n                </div>\n              </div>\n            </li>\n          );\n        }\n      });\n      return voteCounts;\n    });\n    return voteBars;\n  };\n\n  get routeBase() {\n    const {event_id} = window;\n    let base = '';\n\n    if (this.isPremium) {\n      base += '/plus/create';\n    } else {\n      base += '/event';\n    }\n\n    if (event_id) base += `/${event_id}`;\n    return base;\n  }\n\n  blur = () => {\n    if (document.activeElement) {\n      document.activeElement.blur();\n    }\n  };\n\n  getVoteButtons = () => {\n    const {widget, widgetId} = this.props;\n    const {content} = widget;\n    const {options, allow_other_option} = content;\n    const buttons = Object.entries(options).map((option, i) => {\n      const key = option[0];\n      const value = option[1];\n      return (\n        <li className=\"poll-option-buttons\" key={`button-${key}`}>\n          <Radio\n            id={key}\n            onChange={this.handleVoteAction}\n            label={value}\n            checked={this.state.vote === key}\n            data-qa-id=\"poll-option\"\n            data-qa-value={value.toLowerCase().replaceAll(' ', '-')}\n          />\n        </li>\n      );\n    });\n    if (!allow_other_option) {\n      const otherBtn = (\n        <li key={`addOtherOption-${widgetId}`} className=\"poll-option-buttons\">\n          <Radio\n            onChange={this.handleAddOption}\n            label=\"Other\"\n            id=\"voteOther\"\n            checked={this.state.vote === 'voteOther'}\n            data-qa-id=\"poll-option-other\"\n            data-qa-value=\"other\"\n          />\n        </li>\n      );\n      buttons.push(otherBtn);\n    }\n    return buttons;\n  };\n\n  handleNewOptionTextChanged = (e) => {\n    const newText = e.currentTarget.value.trim();\n    this.setState({\n      newOptionText: newText,\n    });\n  };\n\n  handleAddOption = () => {\n    const bodyContent = (\n      <form>\n        <span>Type your new poll option below.</span>\n        <div className=\"form-field\">\n          <input\n            maxLength=\"140\"\n            className={this.state.newOptionTextError ? 'invalid' : ''}\n            onBlur={this.handleNewOptionTextChanged}\n            type=\"text\"\n            data-qa-id=\"new-poll-option\"\n          />\n        </div>\n      </form>\n    );\n    this.props.onShowModal(\n      'addOtherOption',\n      'type',\n      [],\n      'Other',\n      this.handleNewOptionAdded,\n      null,\n      bodyContent\n    );\n  };\n\n  submitForm = async (widget_id) => {\n    const url = `/tsunami/v1/services/event/${window.event_id}/guest/${window.guest_id}/widget/${widget_id}/`;\n    const postPoll = {\n      method: 'PATCH',\n      credentials: 'include',\n      cache: 'no-cache',\n      body: JSON.stringify({poll_add_other_option: this.state.newOptionText}),\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    };\n    try {\n      const response = await evite.fetch(url, postPoll);\n      const responseJson = await response.json();\n      if (response.ok) {\n        console.log('successfully posted the poll', responseJson);\n        this.setState({hasVoted: true, wantsToChangeVote: false});\n        window.tags.track_event('sent_q_poll');\n      } else {\n        console.log('failed with response', response.status);\n      }\n    } catch (e) {\n      console.error('postPoll Fetch Error', e);\n    }\n  };\n\n  handleNewOptionAdded = (e) => {\n    if (this.state.newOptionText) {\n      const {widgetId} = this.props;\n      this.submitForm(widgetId)\n        .then((data) => {\n          console.log(data);\n        })\n        .catch((error) => {\n          console.log(error);\n        });\n    }\n  };\n\n  handleVoteAction = async (e) => {\n    e.preventDefault();\n    const {widgetId, groupId} = this.props;\n\n    const url = `/tsunami/v1/services/event/${window.event_id}/guest/${window.guest_id}/widget/${widgetId}/action/vote`;\n\n    const body = {option_id: e.currentTarget.id, group_id: groupId};\n\n    const castVote = {\n      method: 'POST',\n      credentials: 'include',\n      cache: 'no-cache',\n      body: JSON.stringify(body),\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    };\n    try {\n      const response = await evite.fetch(url, castVote);\n      const responseJson = await response.json();\n      if (response.ok) {\n        this.setState({wantsToChangeVote: false, vote: e.currentTarget.id});\n        window.tags.track_event('voted_q_poll');\n      } else {\n        console.log('failed with response', response.status, responseJson);\n        // TODO: Handle Error\n      }\n    } catch (e) {\n      // TODO: Handle Server Error\n      console.error('castVote Fetch Error', e);\n    }\n  };\n\n  render() {\n    const {widget, widgetId} = this.props;\n    const {wantsToChangeVote} = this.state;\n    const hasVoted = this.userHasVoted();\n    const createdByThisUser = widget.createdBy === messagingStore.userId;\n    const isHostOrCohost = window.evite_event.host_ids.includes(messagingStore.userId);\n    const {content} = widget;\n    const pollHeading = createdByThisUser ? 'Poll' : 'Poll from the host';\n\n    const votes = widget.content.voteCount;\n    const allResponseCountsArr = Object.values(votes).map((count, i) => count);\n    const total_response_count = allResponseCountsArr.reduce((a, b) => a + b, 0);\n    const groupId =\n      widget.groups && Object.keys(widget.groups).length > 0 ? Object.keys(widget.groups)[0] : '';\n    const pollData = {content, widgetId, groupId};\n    this.totalVoteCount = total_response_count;\n\n    const showResults =\n      (!wantsToChangeVote && hasVoted) || (!wantsToChangeVote && createdByThisUser); // host\n    const pollOptions = showResults ? this.getVoteResults() : this.getVoteButtons();\n\n    return (\n      <>\n        <div className=\"messaging__poll__heading\">\n          <PB_PollLine ratio={0.5} />\n          <Typography variant=\"paragraph2\">{pollHeading}</Typography>\n        </div>\n        <Typography variant=\"header3\" classNames=\"messaging__poll__question\">\n          {content.question}\n        </Typography>\n        <ul className={`poll-bars ${showResults ? '' : 'vote'}`}>{pollOptions}</ul>\n        <Divider marginTop=\"1.5rem\" marginBottom=\"1.5rem\" />\n        <div className=\"messaging__poll__ctas\">\n          {!hasVoted && createdByThisUser && (\n            <>\n              <button\n                className=\"unstyled-button link\"\n                onClick={this.handleChangeVote}\n                data-qa-id=\"submit-vote\"\n              >\n                Vote\n              </button>\n              <span>|</span>\n            </>\n          )}\n          {hasVoted && (\n            <>\n              <button\n                className=\"unstyled-button link\"\n                onClick={this.handleChangeVote}\n                data-qa-id=\"change-vote\"\n              >\n                Change Vote\n              </button>\n              <span>|</span>\n            </>\n          )}\n          {(createdByThisUser || isHostOrCohost) && (\n            <button\n              className=\"unstyled-button link icon-button\"\n              onClick={(e) => {\n                this.props.onShowModal('edit', [], [], '', () => {}, pollData);\n              }}\n              data-qa-id=\"edit-poll\"\n            >\n              <PB_EditLine ratio={0.5} color={tanzanite} />\n              Edit\n            </button>\n          )}\n        </div>\n      </>\n    );\n  }\n}\n","import {evite} from 'evite';\nimport React from 'react';\nimport {RTDatabase} from 'firebase-react-store';\nimport {StatusAnimation} from '~/create/components/StatusAnimation';\nimport {authenticateToTsunami} from '~/messaging/utils/tsunamiAuth';\n\nexport let rtdb = null;\nexport let serverPaths = null;\nexport let readOnly = false;\n\nlet initRunning = false;\n\nexport async function initDatabase() {\n  if (rtdb) return rtdb;\n  if (initRunning) {\n    return evite.when('rtdb');\n  }\n  initRunning = true;\n\n  authenticateToTsunami();\n\n  let response;\n  try {\n    response = await evite.when('tsunami-auth');\n  } catch (e) {\n    console.log('tsunami-auth rejected', e);\n    initRunning = false;\n    return;\n  }\n  let json = null;\n  try {\n    json = await response.json();\n  } catch (e) {\n    console.log('Error with json response: ', response);\n  }\n\n  if (!response.ok) {\n    console.log('Error response: ', response);\n    throw new Error((json && json.message) || 'Unknown error');\n  }\n\n  const {token} = json;\n  const {fire_config} = json;\n  readOnly = json.readOnly;\n  serverPaths = json.refs;\n  const temp = new RTDatabase(fire_config);\n  try {\n    await temp.signInWithCustomToken(token);\n  } catch (e) {\n    console.log('ERROR SIGNING IN', e);\n  }\n  rtdb = temp; // don't assign until available\n  evite.provideStores({rtdb: temp});\n  evite.resolve('rtdb', temp);\n  return temp;\n}\n\n/**\n * for tests\n */\nexport function setDatabase(otherRtdb, otherPaths) {\n  rtdb = otherRtdb;\n  serverPaths = otherPaths;\n}\n\n/**\n * Shows a spinner until rtdb is available\n */\nexport class DatabaseLoader extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    initDatabase();\n    this.state = {resolved: false};\n  }\n\n  componentDidMount() {\n    this.mounted = true;\n    evite.when('rtdb').then(() => {\n      if (!this.mounted) return;\n      this.setState({resolved: true});\n    });\n  }\n\n  componentWillUnmount() {\n    this.mounted = false;\n  }\n\n  render() {\n    if (!this.state.resolved) {\n      return (\n        <StatusAnimation\n          style={{height: 200}}\n          // className=\"status-animation--messaging\"\n          status=\"loading\"\n        />\n      );\n    }\n\n    return this.props.children;\n  }\n}\n","import React from 'react';\nimport {MessagingRouter} from './routes';\n\nexport function Messaging(props) {\n  return <MessagingRouter {...props} />;\n}\n","import {guestlistStore} from '~/view_invitation/guestlist/store';\nimport {fetchGuestlistData} from '~/view_invitation/guestlist/actions';\n\nexport class BroadcastGroup {\n  type = 'broadcast';\n\n  authUsers = [];\n\n  constructor(key) {\n    this.key = key;\n    this._valuesPromise = new Promise((resolve) => {\n      if (!guestlistStore.fetchingGuestlist) resolve();\n      fetchGuestlistData(() => {\n        resolve();\n      });\n    });\n  }\n\n  onValues() {\n    return this._valuesPromise;\n  }\n\n  getParticipants = () => {\n    if (guestlistStore.fetchingGuestlist) {\n      return [];\n    }\n\n    let guests = [];\n    if (this.key === 'all') {\n      guests.push(\n        ...guestlistStore.guestlist.yes,\n        ...guestlistStore.guestlist.no,\n        ...guestlistStore.guestlist.maybe,\n        ...guestlistStore.guestlist.undecided\n      );\n    } else {\n      guests = guestlistStore.guestlist[this.key];\n    }\n\n    return guests.map((g) => g.user_id);\n  };\n}\n","import {guestlistStore} from '~/view_invitation/guestlist/store';\nimport {fetchGuestlistData} from '~/view_invitation/guestlist/actions';\n\nfunction getParticipants() {\n  const {is_host_viewing, rsvp, host_id} = evite_event;\n\n  if (this.type === 'h2g') {\n    // return guest's id if user is original host (host_id)\n    // otherwise return the id of original host (host_id)\n    if (is_host_viewing && rsvp.user_id === host_id) {\n      return [this.key];\n    }\n\n    return [host_id];\n  }\n  if (this.type === 'broadcast' && this.name) {\n    // this is only for predifined yes no maybe\n    if (guestlistStore.fetchingGuestlist) {\n      fetchGuestlistData();\n      return [];\n    }\n\n    return guestlistStore.guestlist[this.name];\n  }\n\n  const {authUsers} = this.value;\n  if (!authUsers) return [];\n  return Object.keys(authUsers);\n}\n\n/**\n * Extend a Document with some additional functionality\n *\n * @param doc\n */\nexport function groupMixin(doc) {\n  doc.getParticipants = getParticipants.bind(doc);\n  Object.defineProperty(doc, 'type', {\n    get() {\n      return this.value.type;\n    },\n  });\n  return doc;\n}\n","import React, {PureComponent} from 'react';\nimport {Route, Switch} from 'react-router-dom';\nimport {Messaging} from '~/messaging/components/Messaging/Messaging';\nimport {Conversation} from '~/messaging/components/Conversation/Conversation';\nimport {DatabaseLoader} from '~/messaging/database';\nimport {onSubRouteEntered} from '~/view_invitation/app-router';\nimport {NewConversation} from '~/messaging/components/NewConversation/NewConversation';\nimport {ParticipantsList} from '~/messaging/components/ParticipantsList/ParticipantsList';\nimport {participantsWrapper} from '~/messaging/components/ParticipantsList/participantsWrapper';\nimport {messagingStore} from '~/messaging/store';\nimport {useTrackPages, messagingPathname, setMessagingBasePathname} from '~/messaging/utils/utils';\n\n// HOC for props proxying, in order to load ParticipantsList as a standalone outside of modal\nconst ParticipantsWrapperHOC = participantsWrapper(ParticipantsList);\n\n// _keepHeaderSpacer is hacked in to\nlet _keepHeaderSpacer = false;\n\nexport class ConversationLoader extends PureComponent {\n  previousHeaderSpacerSize = 0;\n\n  constructor(props) {\n    super(props);\n    const {userId} = messagingStore;\n    // If user not logged in, redirect to message hub\n    if (!userId) {\n      const location = {\n        pathname: messagingPathname('/messages'),\n        search: window.location.search || '',\n      };\n      this.props.history.push(location);\n    }\n  }\n\n  getMainComponent = () =>\n    this.props.match.path.indexOf('/messages/new') >= 0 ? (\n      <div className=\"messaging__inner-wrapper\">\n        <NewConversation {...this.props} />\n      </div>\n    ) : (\n      <Conversation {...this.props} />\n    );\n\n  render() {\n    return <DatabaseLoader>{this.getMainComponent()}</DatabaseLoader>;\n  }\n}\n\nclass ParticipantsWithDatabaseLoader extends PureComponent {\n  render() {\n    return (\n      <DatabaseLoader>\n        <ParticipantsWrapperHOC {...this.props} />\n      </DatabaseLoader>\n    );\n  }\n}\n\nexport function MessagingRouter(props) {\n  const {match, keepHeaderSpacer} = props;\n  // TODO: keepHeaderSpacer can be used to preserve the invitation/messages tabs on screen,\n  // TODO: but there is aditional support needed in nav_setup.js to not bypass the spacer height\n  // TODO: setup for messages urls. (implemented for reinvention, but not currently enabled)\n  _keepHeaderSpacer = keepHeaderSpacer;\n  window._messagingHistory = props.history;\n  if (props.location.pathname.indexOf('/event/') !== 0)\n    // Reinvention app router hides the /event/event_id portion of the pathname\n    setMessagingBasePathname('');\n  return (\n    <div className=\"messaging\" data-qa-id=\"messaging\">\n      <Switch>\n        <Route exact path={`${match.url}`} component={Messaging} />\n        <Route exact path={`${match.url}/:groupType/:groupId`} component={ConversationLoader} />\n        <Route\n          exact\n          path={`${match.url}/:groupType/:groupId/participants`}\n          component={ParticipantsWithDatabaseLoader}\n        />\n        <Route exact path={`${match.url}/new`} component={ConversationLoader} />\n      </Switch>\n    </div>\n  );\n}\n","import {evite} from 'evite';\nimport {action, observable} from 'mobx';\nimport {rtdb, serverPaths, readOnly} from '~/messaging/database';\nimport {groupMixin} from '~/messaging/models/GroupDocument';\nimport {BroadcastGroup} from '~/messaging/models/BroadcastGroup';\n\n/**\n * This is a simplistic store to consolidate a lot of\n * data that we're pulling off of window on page load.\n *\n */\nclass MessagingStore {\n  constructor() {\n    if (window.evite_event) this.populate(window);\n\n    evite.when('rtdb').then(async () => {\n      if (this.userId && serverPaths.guests) {\n        // set presence for this user\n        const path = `${serverPaths.guests}/${this.userId}`;\n        const doc = rtdb.get(path);\n        try {\n          await doc.onValues();\n        } catch (e) {\n          // getting a permission denied here but we don't need the values\n          if (e.code && e.code !== 'PERMISSION_DENIED') {\n            throw e; // just in case\n          } else if (location.href.indexOf('group') != -1) {\n            location.href = location.href.replace(/group\\/.*gid/g, '?gid');\n          }\n        }\n        doc.update({isActive: true});\n        doc.onDisconnect().update({isActive: false});\n        doc.close();\n      }\n    });\n\n    evite.injectStores('guestlist', this);\n  }\n\n  /**\n   * Useful for tests\n   */\n  populate = (obj) => {\n    /**\n     * The event from the server. There's no need to make this observable\n     * since it doesn't change while we're in messaging.\n     */\n    this.event = obj.evite_event;\n\n    /**\n     * For clarity\n     */\n    this.eventId = obj.evite_event.id;\n\n    /**\n     * For clarity\n     */\n    this.userId = obj.evite_event.rsvp && obj.evite_event.rsvp.user_id;\n    this.guestId = obj.evite_event.rsvp && obj.evite_event.rsvp.id;\n    this.rsvpResponse = (obj.evite_event.rsvp && obj.evite_event.rsvp.response) || null;\n\n    /**\n     * The html-cleaned and safe host message\n     */\n    this.hostMessage = obj.host_message;\n\n    /**\n     * for clarity\n     * /\n     */\n    this.isHost = obj.evite_event.is_host_viewing;\n    this.isCoHost = obj.evite_event.is_cohost_viewing;\n    this.isRsvpOff = obj.evite_event.rsvp_off;\n\n    this.isPremium = obj.is_premium;\n\n    this.isPrivateGuestList =\n      obj.evite_event.options && obj.evite_event.options.event_option_private_guestlist;\n\n    this.isPremium = obj.is_premium;\n  };\n\n  @action\n  updateRsvp = (guest) => {\n    this.guestId = guest.id;\n    this.userId = guest.user_id;\n    this.rsvpResponse = guest.response;\n  };\n\n  /**\n   * Guest information\n   *\n   * A cache map of profile information by userid\n   */\n  @observable profiles = new Map();\n\n  /*\n   *  When an archived event is viewed, messages get restored in firestore with readOnly:true state\n   */\n  @observable isArchived = readOnly;\n\n  _requestedProfiles = new Set();\n\n  @observable selected = [];\n\n  @action\n  updateSelected = (selectedGuests = []) => {\n    this.selected = selectedGuests;\n  };\n\n  @action\n  _mergeProfiles = (profiles) => {\n    const obj = profiles.reduce((obj, profile) => {\n      obj[profile.userId] = profile;\n      return obj;\n    }, {});\n    this.profiles.merge(obj);\n  };\n\n  _requestProfiles = async (newIds) => {\n    const url = `${evite.urls.get('ajax_view_profiles', {\n      event_id: this.eventId,\n    })}?gid=${window.guest_id}&user_ids=${newIds.join('|')}`;\n\n    try {\n      for (const uid of newIds) this._requestedProfiles.add(uid);\n\n      const response = await evite.fetch(url, {\n        method: 'get',\n        credentials: 'include',\n        cache: 'no-cache',\n        headers: {\n          'X-CSRFToken': evite.cookie('csrftoken'),\n          Accept: 'application/json',\n        },\n      });\n\n      if (response.ok) {\n        const json = await response.json();\n        this._mergeProfiles(json.profiles);\n        this.guestlist.updateSummary(json.summary);\n      }\n    } finally {\n      // remove these from the requested array\n      for (const uid of newIds) this._requestedProfiles.delete(uid);\n    }\n  };\n\n  getProfiles = (userIds) => {\n    const cached = {};\n    let newIds = [];\n\n    for (const uid of userIds) {\n      const profile = this.profiles.get(uid);\n      if (profile === undefined) newIds.push(uid);\n      else cached[uid] = profile;\n    }\n    if (newIds.length < 1) {\n      return cached;\n    }\n\n    // don't re-request\n    newIds = newIds.filter((uid) => !this._requestedProfiles.has(uid));\n    if (newIds.length < 1) return {};\n\n    // noinspection JSIgnoredPromiseFromCall\n    this._requestProfiles(newIds);\n    return cached;\n  };\n\n  // returns the profiles rather than updating the messagingStore.profiles in the store\n  getParticipants = async (userIds) => {\n    const url = `${evite.urls.get('ajax_view_profiles', {\n      event_id: this.eventId,\n    })}?user_ids=${userIds.join('|')}`;\n\n    const response = await evite.fetch(url, {\n      method: 'get',\n      credentials: 'include',\n      cache: 'no-cache',\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    });\n\n    const json = await response.json();\n    if (response.ok) {\n      // reformat data structure to match and key off ID\n      return json.profiles.reduce((acc, profile) => {\n        const {userId} = profile;\n        acc[userId] = profile;\n        return acc;\n      }, {});\n    }\n    console.log('error with retrieving participants');\n  };\n\n  /**\n   * Convenience alias for `getProfiles`\n   *\n   * @param userId\n   * @returns profile if found, undefined if not yet cached\n   */\n  getProfile = (userId) => this.getProfiles([userId])[userId];\n\n  /**\n   * Search (and cache) profile information\n   *\n   * @param name optional string name to filter by\n   * @param rsvp optional rsvp string to filter by status\n   * @param page optional page number to fetch - defaults to 0\n   * @param per_page optional profiles per page - defaults to 30\n   * @returns {Promise<void>}\n   */\n  searchProfiles = async ({\n    name = null,\n    rsvp = null,\n    checked_in = null,\n    page = 0,\n    per_page = 30,\n  } = {}) => {\n    const url = `${evite.urls.get('ajax_view_profiles', {event_id: this.eventId})}?${evite.param({\n      name_filter: name || '',\n      rsvp_filter: rsvp || '',\n      checked_in: checked_in || '',\n      page,\n      per_page,\n      gid: window.guest_id,\n    })}`;\n\n    const response = await evite.fetch(url, {\n      method: 'get',\n      credentials: 'include',\n      cache: 'no-cache',\n      headers: {\n        'X-CSRFToken': evite.cookie('csrftoken'),\n        Accept: 'application/json',\n      },\n    });\n\n    const json = await response.json();\n    if (!response.ok) throw new Error(`Unable to search: ${json.message}` || 'unknown error');\n\n    this._mergeProfiles(json.profiles);\n    this.guestlist.updateSummary(json.summary);\n    json.profiles.hasMore = json.has_more;\n    return json.profiles;\n  };\n\n  getGroup = (groupId) => {\n    if (['attended', 'all', 'yes', 'no', 'maybe', 'undecided'].includes(groupId)) {\n      return new BroadcastGroup(groupId);\n    }\n    const group = rtdb.get(`${serverPaths.groups}/${groupId}`);\n    return groupMixin(group);\n  };\n}\n\nexport const messagingStore = new MessagingStore();\nevite.provideStores({messaging: messagingStore});\n","import XDate from 'xdate';\n// function to convert a date:\n// if is the same day should display time in HH:MM AA format\n// if is during the same week should display the day  THURSDAY .. etc\n// if is older should display the date on format: MM/DD/YY\nexport const getDateString = (timestamp, forcefullShowTime = false) => {\n  const date = new XDate(parseInt(timestamp));\n  const currentDate = new XDate();\n  const yesterday = new XDate(currentDate).addDays(-1);\n  const diffDays = date.diffDays(currentDate);\n  if (currentDate.toString('yyyy-MM-dd') === date.toString('yyyy-MM-dd')) {\n    return !forcefullShowTime ? date.toString('hh:mm TT') : `Today ${date.toString('hh:mm TT')}`;\n  }\n  if (yesterday.toString('yyyy-MM-dd') === date.toString('yyyy-MM-dd')) {\n    return !forcefullShowTime ? 'Yesterday' : `Yesterday ${date.toString('hh:mm TT')}`;\n  }\n  if (diffDays < 7) {\n    return !forcefullShowTime ? date.toString('dddd') : date.toString('dddd hh:mm TT');\n  }\n  return !forcefullShowTime ? date.toString('MM/dd/yy') : date.toString('MM/dd/yy  hh:mm TT');\n};\n\n/**\n *\n * @param endtime time in the future to countdown\n */\nexport const getTimeRemaining = (endtime) => {\n  const t = Date.parse(endtime) - Date.parse(new Date());\n\n  const seconds = Math.floor((t / 1000) % 60);\n  const minutes = Math.floor((t / 1000 / 60) % 60);\n  const hours = Math.floor((t / (1000 * 60 * 60)) % 24);\n  const days = Math.floor(t / (1000 * 60 * 60 * 24));\n\n  return {\n    total: t,\n    days: `${days}d`,\n    hours: `${hours}h`,\n    minutes: `${minutes}m`,\n    seconds: `${seconds}s`,\n  };\n};\n","// should receibe an array of names, number of max characters and the separator between names\n// use for when we need tro show \"name 1, name 2  + 4 More\"\nconst getNameString = (names, maxCharacters, separator = ', ') => {\n  let strToRet = '';\n  if (!names.length) return null;\n  if (names.length === 1) return names[0];\n  if (names.length === 2 && names[0].length + names[1].length < maxCharacters) {\n    return `${names[0]} and ${names[1]}`;\n  }\n  let remainingCharacters = maxCharacters;\n  let remaingNames = names.length;\n  for (let i = 0; i < names.length; i++) {\n    remainingCharacters = maxCharacters - strToRet.length;\n    remaingNames--;\n    if (i > 0) {\n      strToRet += separator;\n    }\n    // check if the names fits\n    if (names[i].length <= remainingCharacters) {\n      strToRet += names[i];\n    } else {\n      // if it doesnt fit put the remaining fit and create ellipsis\n      const lastStrToInsert = names[i].slice(0, remainingCharacters);\n      strToRet += `${lastStrToInsert}...`;\n      break;\n    }\n  }\n  if (remaingNames) {\n    strToRet += ` +${remaingNames} More`;\n  }\n  return strToRet;\n};\n\nexport {getNameString};\n","export const setSeenBy = async (seenBy, messageId, callBack, userId) => {\n  // const {seenBy, messageId, setReadTimeStamp} = this.props;\n  let validTimeStamp = false;\n  // If the current user has already seen this message, seenBy's userId wil have timestamp otherwise it will be 0\n  if (seenBy) {\n    validTimeStamp = seenBy[userId]; // 0 if hasn't seen the message, else the timestamp\n  }\n  // If no one has seen the current message OR\n  // If some have seen the message but not the current user is not one of them\n  if (!validTimeStamp) {\n    console.info('Setting readAsOf for the message ', messageId, ' for user ', userId);\n    callBack();\n  }\n};\n","import {messagingStore} from '~/messaging/store';\n\nlet _authenticating = false;\nlet _authenticatedGuestId = null;\n\nexport function authenticateToTsunami() {\n  if (_authenticating) return;\n  const {guestId} = messagingStore;\n  if (guestId && guestId !== _authenticatedGuestId) {\n    try {\n      _authenticating = true;\n      evite\n        .fetch(\n          `/tsunami/v1/services/authorization/event/${window.evite_event.id}/guest/${guestId}/`,\n          {\n            method: 'get',\n            credentials: 'include',\n            cache: 'no-cache',\n            headers: {\n              'X-CSRFToken': evite.cookie('csrftoken'),\n              Accept: 'application/json',\n            },\n          }\n        )\n        .then((response) => {\n          _authenticatedGuestId = guestId;\n          evite.resolve('tsunami-auth', response);\n        })\n        .finally(() => {\n          _authenticating = false;\n        });\n    } catch (error) {\n      evite.logError(error);\n      _authenticating = true;\n    }\n  }\n}\n","import {useLocation} from 'react-router-dom';\nimport {usePrevious} from '~/common/hooks/usePrevious';\n\nexport const virtualGroups = () => {\n  const {\n    user_has_active_premium_pass,\n    is_premium,\n    evite_event: {is_host_viewing, origin},\n  } = window;\n  const vg = ['all', 'yes', 'maybe', 'no', 'attended'];\n  if (!is_premium) {\n    vg.push('undecided');\n  }\n  if (is_host_viewing && user_has_active_premium_pass) {\n    vg.unshift('attended');\n  }\n  if (origin === 21) {\n    vg.unshift('maybe');\n  }\n};\n\nlet messagingBasePathname = `/event/${window.event_id}`;\n\nexport const setMessagingBasePathname = (base) => {\n  messagingBasePathname = base;\n};\n\nexport const messagingPathname = (url) => messagingBasePathname + url;\n\nexport function extractTab(pathname) {\n  const components = pathname.split('?')[0].split('/');\n  if (components.length > 1) return components[components.length - 1] || '/';\n  return '/';\n}\n\nfunction trackRouteChange(tab) {\n  window.setTimeout(() => {\n    // DataOps use this to track pageviews within the app\n    window.tags.push('view_tab_active', tab);\n    window.dataLayer.push({\n      event: 'pageview',\n      destination_url: window.location.pathname,\n    });\n  }, 500);\n}\n\n/**\n * Reports top level route changes to google analytics.\n * @function useTrackPages\n * @return none\n */\nexport const useTrackPages = () => {\n  const location = useLocation();\n  const tab = extractTab(location.pathname);\n  const previousTab = usePrevious(tab);\n  if (previousTab !== tab && previousTab !== undefined) {\n    trackRouteChange(tab);\n  }\n};\n","import {ModalAjaxError} from './index';\nimport {PopupModal} from '~/modal/popup_modal';\n\nexport function modal_ajax_error_handler(xhr, status, errorstr, body, title) {\n  let modalBody;\n  const modalTitle = title || 'Error';\n\n  if (body) {\n    modalBody = body;\n  } else {\n    try {\n      modalBody = JSON.parse(xhr.responseText).message;\n    } catch (error) {\n      console.error('Modal err:', error);\n      console.error('Modal response:', xhr);\n      modalBody = 'Sorry, an error has occurred!';\n    }\n  }\n\n  new ModalAjaxError({\n    title: modalTitle,\n    body: modalBody,\n    popup: true,\n    buttons: ['Okay'],\n    url_parameters: {\n      response: xhr && xhr.responseText ? xhr.responseText : '',\n      status,\n      error: errorstr,\n    },\n  }).show();\n}\n\n/**\n * Show a modal dialog for a failed fetch. Should not require a server page render\n *\n * @param response\n * @param title\n * @param body\n */\nexport async function failedFetchModal(response, title = 'Error', body = null) {\n  try {\n    if (!response.responseJSON) {\n      response.responseJSON = await response.json();\n    }\n\n    body = body || response.responseJSON.message;\n  } catch (e) {\n    /* probably read already */\n  }\n\n  new PopupModal({\n    buttons: ['Okay'],\n    title,\n    body,\n    html: true,\n    dataQaId: 'failedFetchModal',\n  }).show();\n}\n","import urls from 'urls';\nimport {EviteModal} from './index';\n\nexport class ModalAjaxError {\n  settings = {\n    url: urls.get('modal_ajax_error'),\n    buttons: ['Okay'],\n    title: null,\n    html: false,\n    width: '480px',\n    dialog: {},\n    url_parameters: {},\n  };\n\n  constructor(settings) {\n    this.settings = {...this.settings, ...settings};\n    this.settings.url_parameters.dialog = {\n      body: settings.body || '',\n      title: settings.title || this.settings.title,\n      buttons: settings.buttons || this.settings.buttons,\n      html: settings.html || this.settings.html,\n    };\n\n    return new EviteModal(this.settings);\n  }\n}\n","import urls from 'urls';\nimport {EviteModal} from './evite_modal';\n\nexport class AuthModal {\n  settings = {\n    clickOutside: true,\n    width: '460px',\n    title: null,\n    url: urls.get('login_modal'),\n  };\n\n  constructor(settings) {\n    this.settings = {\n      ...this.settings,\n      ...settings,\n    };\n    return new EviteModal(this.settings);\n  }\n}\n","const defaults = {\n  modal: '.evite-modal-container',\n  modalInner: '.modal-inner',\n  modalContent: '.modal-content',\n  open: '[data-modal-open]',\n  close: '[data-modal-close]',\n  closeAction: '[data-close-action]',\n  dataAttribute: 'data-current-modal',\n  page: 'body',\n  class: 'modal-visible',\n  loadClass: 'evite-modal',\n  clickOutside: true,\n  closeKeys: [27],\n  transitions: true,\n  transitionEnd: null,\n  onBeforeOpen: null,\n  onBeforeClose: null,\n  onOpen: null,\n  onClose: null,\n  allowClose: true,\n};\n\nfunction throwError(message) {\n  // eslint-disable-next-line no-console\n  console.error(`ModalView: ${message}`);\n}\n\nfunction find(arr, callback) {\n  return (key) => {\n    const filteredArray = arr.filter(callback);\n    return filteredArray[0] ? filteredArray[0][key] : undefined;\n  };\n}\n\nfunction transitionEndVendorSniff() {\n  const el = document.createElement('div');\n  const transitions = [\n    {key: 'transition', value: 'transitionend'},\n    {key: 'OTransition', value: 'otransitionend'},\n    {key: 'MozTransition', value: 'transitionend'},\n    {key: 'WebkitTransition', value: 'webkitTransitionEnd'},\n  ];\n  return find(transitions, ({key}) => typeof el.style[key] !== 'undefined')('value');\n}\n\nfunction isPopulatedArray(arr) {\n  return Object.prototype.toString.call(arr) === '[object Array]' && arr.length;\n}\n\nfunction getNode(selector, parent, skipError = false) {\n  const targetNode = parent || document;\n  const node = targetNode.querySelector(selector);\n  if (!node && !skipError) {\n    throwError(`${selector} not found in document.`);\n  }\n  return node;\n}\n\nfunction addClass(el, className) {\n  if (!(el instanceof HTMLElement)) {\n    throwError('Not a valid HTML element.');\n  }\n  el.setAttribute(\n    'class',\n    el.className\n      .split(' ')\n      .filter((cn) => cn !== className)\n      .concat(className)\n      .join(' ')\n  );\n}\n\nfunction removeClass(el, className) {\n  if (!(el instanceof HTMLElement)) {\n    throwError('Not a valid HTML element.');\n  }\n  el.setAttribute(\n    'class',\n    el.className\n      .split(' ')\n      .filter((cn) => cn !== className)\n      .join(' ')\n  );\n}\n\nfunction getElementContext(e) {\n  if (e && typeof e.hash === 'string') {\n    return document.querySelector(e.hash);\n  }\n  if (typeof e === 'string') {\n    return document.querySelector(e);\n  }\n  throwError('No selector supplied to open()');\n  return null;\n}\n\nfunction applyModalSettings(settings) {\n  return {\n    ...defaults,\n    ...settings,\n    transitionEnd: transitionEndVendorSniff(),\n  };\n}\n\nfunction matches(e, selector) {\n  const allMatches = (e.target.document || e.target.ownerDocument).querySelectorAll(selector);\n  for (let i = 0; i < allMatches.length; i += 1) {\n    let node = e.target;\n    while (node && node !== document.body) {\n      if (node === allMatches[i]) {\n        return node;\n      }\n      node = node.parentNode;\n    }\n  }\n  return null;\n}\n\nexport class ModalBase {\n  currentInstance = null;\n\n  parser = null;\n\n  openCloseQueue = null;\n\n  constructor(options) {\n    if (options && options.loader) {\n      if (!window.EviteLoadingModal) {\n        window.EviteLoadingModal = this;\n      } else {\n        return window.EviteLoadingModal;\n      }\n    } else if (!window.EviteModal) {\n      window.EviteModal = this;\n    } else {\n      return window.EviteModal;\n    }\n\n    this.parser = new DOMParser();\n    this.openCloseQueue = Promise.resolve();\n\n    this.open = this.open.bind(this);\n    this.close = this.close.bind(this);\n    this.closeKeyHandler = this.closeKeyHandler.bind(this);\n    this.outsideClickHandler = this.outsideClickHandler.bind(this);\n    this.delegateOpen = this.delegateOpen.bind(this);\n    this.delegateClose = this.delegateClose.bind(this);\n    this.listen = this.listen.bind(this);\n    this.destroy = this.destroy.bind(this);\n  }\n\n  static getInstance() {\n    return window.EviteModal || new ModalBase();\n  }\n\n  initialize(modalInstance) {\n    this.current = null;\n\n    this.settings = applyModalSettings(modalInstance.settings);\n    this.dom = this.getDomNodes();\n    this.currentInstance = modalInstance;\n\n    this.addLoadedCssClass();\n    this.listen();\n  }\n\n  getDomNodes() {\n    const {modal, page, modalInner, modalContent} = this.settings;\n    return {\n      modal: getNode(modal),\n      page: getNode(page),\n      modalInner: getNode(modalInner, getNode(modal)),\n      modalContent: getNode(modalContent, getNode(modal)),\n    };\n  }\n\n  addLoadedCssClass() {\n    addClass(this.dom.page, this.settings.loadClass);\n  }\n\n  setOpenId(id) {\n    const {page} = this.dom;\n    page.setAttribute(this.settings.dataAttribute, id || 'anonymous');\n  }\n\n  removeOpenId() {\n    const {page} = this.dom;\n    page.removeAttribute(this.settings.dataAttribute);\n  }\n\n  open(allMatches, e) {\n    return this.openCloseQueue.then(() => {\n      // Try to blur any active elements before opening modal\n      if (document.activeElement) document.activeElement.blur();\n\n      const {page, modalContent, modalInner} = this.dom;\n      const {onBeforeOpen, onOpen} = this.settings;\n      if (!(this.current instanceof HTMLElement === false)) {\n        throwError('ModalView target must exist on page.');\n        return;\n      }\n      if (this.current) this.releaseNode(this.current);\n      this.current = getElementContext(allMatches);\n\n      if (!this.current) {\n        evite.error(`Could not locate node: ${allMatches}`);\n        return;\n      }\n\n      if (!this.settings.allowClose) {\n        getNode(this.settings.close).style.display = 'none';\n      }\n      if (typeof onBeforeOpen === 'function') {\n        onBeforeOpen.call(this, e);\n      }\n\n      this.captureNode(this.current);\n      this.setOpenId(this.current.id);\n      this.isOpen = true;\n      addClass(page, this.settings.class);\n      if (evite.detects.isMobile) {\n        // this is part of a fix for ios Safari devices that have webkit bugs on input fields\n        // when this is finally fixed we can remove this and the absolute positioning in SimpleModal/styles.sass\n        //   https://hackernoon.com/how-to-fix-the-ios-11-input-element-in-fixed-modals-bug-aaf66c7ba3f8\n        // until then, switching from fixed to absolute messes up the positioning, with modals sometimes appearing\n        // offscreen when fixed would have positioned them in viewport.\n        evite.css(modalInner, {\n          position: 'absolute',\n          left: '2.5%',\n          top: window.scrollY + 40,\n          // the modal is not visible on ios without this\n          'z-index': '-1',\n        });\n\n        // centers the modal for mobile / tablet\n        evite.css(modalContent, {\n          'max-width': '430px',\n          margin: '0px auto',\n        });\n      }\n\n      // set focus on last input element or anchor in the modal EVT-10809\n      const lastInput = Array.from(modalContent.querySelectorAll('input, button, a')).pop();\n      if (lastInput) lastInput.focus();\n\n      if (typeof onOpen === 'function') {\n        onOpen.call(this, e);\n      }\n    });\n  }\n\n  detectTransition() {\n    const {modal} = this.dom;\n    const css = window.getComputedStyle(modal, null);\n    return Boolean(\n      [\n        'transitionDuration',\n        'oTransitionDuration',\n        'MozTransitionDuration',\n        'webkitTransitionDuration',\n      ].filter((i) => typeof css[i] === 'string' && parseFloat(css[i]) > 0).length\n    );\n  }\n\n  close(e) {\n    return this.openCloseQueue.then(\n      () =>\n        new Promise((resolve) => {\n          const {transitions, transitionEnd, onBeforeClose} = this.settings;\n          const hasTransition = this.detectTransition();\n          if (this.isOpen) {\n            if (typeof onBeforeClose === 'function') {\n              onBeforeClose.call(this, e);\n            }\n            if (transitions && transitionEnd && hasTransition) {\n              this.closeModalWithTransition(e).then(resolve);\n            } else {\n              this.closeModal(e).then(resolve);\n            }\n            removeClass(this.dom.page, this.settings.class);\n          } else {\n            resolve();\n          }\n        })\n    );\n  }\n\n  closeModal(e) {\n    return this.openCloseQueue.then(\n      () =>\n        new Promise((resolve) => {\n          const {onClose} = this.settings;\n          this.removeOpenId(this.dom.page);\n          this.releaseNode(this.current);\n          removeClass(this.dom.page, this.settings.loadClass);\n          if (typeof onClose === 'function') {\n            onClose.call(this, e);\n          }\n          this.current = null;\n          this.isOpen = false;\n          resolve();\n        })\n    );\n  }\n\n  closeTransitionHandler = (e) => {\n    if (this.resolveTransition) {\n      this.resolveTransition(this.closeModal(e));\n      this.resolveTransition = null;\n    }\n  };\n\n  closeModalWithTransition(e) {\n    return this.openCloseQueue.then(\n      () =>\n        new Promise((resolve) => {\n          this.resolveTransition = resolve;\n        })\n    );\n  }\n\n  captureNode(node) {\n    const {modalContent} = this.dom;\n    while (node.childNodes.length) {\n      modalContent.appendChild(node.childNodes[0]);\n    }\n  }\n\n  releaseNode(node) {\n    const {modalContent} = this.dom;\n    while (modalContent.childNodes.length) {\n      modalContent.removeChild(modalContent.childNodes[0]);\n    }\n  }\n\n  closeKeyHandler(e) {\n    const {closeKeys, closeAction} = this.settings;\n\n    if (isPopulatedArray(closeKeys) && closeKeys.indexOf(e.which) > -1 && this.isOpen === true) {\n      e.preventDefault();\n      this.doCancel();\n    }\n  }\n\n  outsideClickHandler(e) {\n    const {clickOutside} = this.settings;\n    const {modalInner} = this.dom;\n\n    if (clickOutside) {\n      let node = e.target;\n      while (node && node !== document.body) {\n        if (node === modalInner) {\n          return;\n        }\n        node = node.parentNode;\n      }\n      this.doCancel();\n    }\n  }\n\n  doCancel() {\n    const {onCancel, closeAction} = this.settings;\n    const closeNode = getNode(closeAction, document, true);\n\n    if (typeof onCancel === 'function') {\n      onCancel();\n    }\n    // if an element has been identified as the close-action node, click that instead of closing\n    if (closeNode) {\n      closeNode.click();\n    } else {\n      this.close();\n    }\n  }\n\n  delegateOpen(e) {\n    const {open} = this.settings;\n    const matchedNode = matches(e, open);\n    if (matchedNode) {\n      e.preventDefault();\n      this.open(matchedNode, e);\n    }\n  }\n\n  delegateClose(e) {\n    const {close} = this.settings;\n    if (matches(e, close)) {\n      e.preventDefault();\n      this.doCancel();\n    }\n  }\n\n  listen() {\n    if (this.isListening) {\n      this.unlisten();\n    }\n    const {modal} = this.dom;\n    const {transitionEnd} = this.settings;\n    if (!this.isListening) {\n      modal.addEventListener(transitionEnd, this.closeTransitionHandler);\n      modal.addEventListener('click', this.outsideClickHandler, false);\n      document.addEventListener('keydown', this.closeKeyHandler, false);\n      document.addEventListener('click', this.delegateOpen, false);\n      document.addEventListener('click', this.delegateClose, false);\n      this.isListening = true;\n    } else {\n      throwError('Event listeners already applied.');\n    }\n  }\n\n  unlisten() {\n    const {modal} = this.dom;\n    const {transitionEnd} = this.settings;\n    modal.removeEventListener('click', this.outsideClickHandler);\n    modal.removeEventListener(transitionEnd, this.closeTransitionHandler);\n    document.removeEventListener('keydown', this.closeKeyHandler);\n    document.removeEventListener('click', this.delegateOpen);\n    document.removeEventListener('click', this.delegateClose);\n    this.isListening = false;\n  }\n\n  respond(response, settings, e) {\n    let useSettings = this.settings;\n    if (settings) {\n      useSettings = Object.assign(useSettings, settings);\n    }\n    this.close().then(() => {\n      window.tags.page_event(useSettings.url, response.name);\n      const name = response.name.split(' ').join(''); // remove spaces\n      const on_response = useSettings[`on${name}`];\n      if (on_response) {\n        on_response(response, e);\n      } else if (useSettings.onResponse) {\n        useSettings.onResponse(response, e);\n      }\n    });\n  }\n\n  destroy() {\n    if (this.isListening) {\n      this.close();\n      this.unlisten();\n    } else {\n      throwError('Event listeners already removed.');\n    }\n  }\n}\n","import urls from 'urls';\nimport {EviteModal} from './evite_modal';\n\nexport class CaptchaDialog {\n  constructor(settings) {\n    this.settings = {\n      width: '520px',\n      ...settings,\n    };\n    if (this.settings.challenge.type === 'sms') {\n      this.settings.url = urls.get('sms_captcha');\n    } else if (this.settings.challenge.type === 'ad') {\n      this.settings.url = urls.get('ad_captcha');\n    } else {\n      this.settings.url = urls.get('recaptcha');\n    }\n    if (this.settings.challenge.captcha_event) {\n      this.settings.url = `${this.settings.url + this.settings.challenge.captcha_event}/`;\n      if (this.settings.challenge.retry) {\n        this.settings.url = `${this.settings.url}retry/`;\n      }\n    }\n    this.settings.url_parameters = {\n      challenge: this.settings.challenge,\n    };\n    return new EviteModal(this.settings);\n  }\n}\n","import urls from 'urls';\nimport {EviteModal} from './index';\n\n// Example simple usage:\n//\n//  delete_modal = new ModalDialog\n//    title:      'Delete Group'\n//    body:       'Are you sure you wish to delete this group?'\n//    buttons:    ['Cancel', 'Delete Group']\n//    onResponse: (response) ->\n//      if response.index == 1\n//        console.log 'delete group'\n//  delete_modal.show()\n\nexport class ModalDialog {\n  settings = {\n    url: urls.get('modal_dialog'),\n    buttons: ['Cancel', 'Yes'],\n    title: null,\n    html: false,\n    width: '480px',\n    dialog: {},\n    footer: false,\n    eventId: null,\n  };\n\n  constructor(settings) {\n    if (!this.settings.url_parameters) {\n      this.settings.url_parameters = {};\n    }\n    this.settings.url_parameters.dialog = {\n      body: settings.body || '',\n      title: settings.title || this.settings.title,\n      buttons: settings.buttons || this.settings.buttons,\n      html: settings.html || this.settings.html,\n      footer: settings.footer || this.settings.footer,\n    };\n    return new EviteModal({...this.settings, ...settings});\n  }\n}\n","import evite, {buildScriptTag} from 'evite';\nimport {ModalBase} from './base';\nimport {htmlFromString} from '~/common/utils';\n\nexport class EviteModal {\n  target = null;\n\n  modalHead = null;\n\n  modalBody = null;\n\n  parser = null;\n\n  open = false;\n\n  id = null;\n\n  defaults = {\n    popup: false,\n    width: '480px',\n    parse: true,\n    buttonLocators: {},\n    dataQaId: null,\n    buttonsDataImpression: [],\n  };\n\n  constructor(settings) {\n    this.settings = {\n      ...this.defaults,\n      ...settings,\n    };\n    this.id = evite.guid();\n    this.modal = ModalBase.getInstance();\n    this.parser = this.modal.parser;\n    this.buildContainer();\n  }\n\n  overwrites() {\n    this.settings.overwrites.forEach((ow) => {\n      document.getElementById(ow.id).innerHTML = ow.text;\n    });\n  }\n\n  buildContainer() {\n    this.target = htmlFromString(\n      `<div id=\"eviteModal-${\n        this.id\n      }\" class=\"eviteModalContentOuter\"><div class=\"eviteModalContainer ${\n        this.settings.className ? this.settings.className : ''\n      }\" ${this.settings.dataQaId ? `data-qa-id=\"${this.settings.dataQaId}\"` : ''}>${\n        this.settings.closeBtn\n          ? '<button id=\"eviteModalCloseBtn\" class=\"eviteModalCloseBtn\">X</button>'\n          : ''\n      }<div class=\"eviteModalContent\"></div></div></div>`\n    );\n    this.target.querySelector('.eviteModalContainer').style.cssText = `\n            max-width: ${this.settings.width};`;\n  }\n\n  encodeUrlParams(data) {\n    const ret = [];\n    for (const d in data) ret.push(`${encodeURIComponent(d)}=${encodeURIComponent(data[d])}`);\n    return ret.join('&');\n  }\n\n  _query_string() {\n    const params = {\n      p: JSON.stringify(this.settings.url_parameters),\n      parent_url: document.location.href,\n    };\n    return `?${this.encodeUrlParams(params)}`;\n  }\n\n  fetchContent = () => {\n    let {url} = this.settings;\n    if (this.settings.forceDesktop) {\n      url += '_desktop';\n    }\n    url += this.settings.url_parameters ? this._query_string() : '';\n    return new Promise((resolve, reject) => {\n      evite\n        .fetch(url, {\n          method: 'get',\n          credentials: 'same-origin',\n          cache: 'no-cache',\n        })\n        .then((response) => {\n          resolve(response.text());\n        })\n        .catch((message) => {\n          reject(message);\n        });\n    });\n  };\n\n  parseContent = (text) => this.parser.parseFromString(text, 'text/html');\n\n  injectContent = (page) => {\n    this.modalHead = page.head;\n    this.modalBody = page.body.innerHTML;\n    this.target.querySelector('.eviteModalContent').innerHTML = this.modalBody;\n    return this;\n  };\n\n  buildPopup() {\n    return new Promise((resolve, reject) => {\n      if (!this.settings.body) {\n        reject('\"body\" is required');\n      }\n      if (!this.settings.title) {\n        reject('\"title\" is required');\n      }\n      if (!this.settings.buttons && !this.settings.buttonMarkup) {\n        reject('\"buttons\" or \"button markup\" is required');\n      }\n      const {buttons} = this.settings;\n      const {buttonLocators} = this.settings;\n      const {buttonsDataImpression} = this.settings;\n      let button_markup = this.settings.buttonMarkup ? this.settings.buttonMarkup : '';\n      if (!button_markup && buttons) {\n        for (const key in buttons) {\n          const button = buttons[key];\n          const buttonLocator = buttonLocators[key];\n          const buttonDataImpression = buttonsDataImpression[key];\n          const buttonId = button.toLowerCase().split(' ').join('-').trim();\n          const dataImpression = buttonDataImpression ? 'data-impression-tracking=\"true\"' : '';\n          if (buttons.length === 1 * key + 1) {\n            button_markup += `<button class=\"button-primary primary-button button-group-item ${\n              evite.detects.isMobile ? 'small' : ''\n            }\" data-qa-id=\"${\n              buttonLocator || buttonId\n            }\" data-name=\"${button}\" data-index=\"${key}\" ${dataImpression}>${button}</button>`;\n          } else {\n            button_markup += `<button class=\"button-primary-inverse secondary-button button-group-item ${\n              evite.detects.isMobile ? 'small' : ''\n            }\" data-qa-id=\"${\n              buttonLocator || buttonId\n            }\" data-name=\"${button}\" data-index=\"${key}\" ${dataImpression}>${button}</button>`;\n          }\n        }\n      }\n      let modalContent;\n      if (this.settings.parse) {\n        modalContent = `<p>${this.settings.body}</p>`;\n      }\n      const container = this.target.querySelector('.eviteModalContent');\n      container.innerHTML = `\n        <div data-qa-id='${\n          this.settings.dataQaId ? this.settings.dataQaId : 'popup-modal'\n        }' class='popup-modal evite-modal-content-container'>\n          <div class=\"modal-header\">\n            <h1 class=\"subtitle\">${this.settings.title}</h1>\n          </div>\n          <div class=\"modal-body\">\n            <div class=\"wrapper\">${modalContent || ''}</div>\n          </div>\n          <div class=\"modal-footer\"><div class=\"button-group\">${button_markup}</div></div>\n        </div>`;\n\n      if (!this.settings.parse) {\n        container.querySelector('.wrapper').appendChild(this.settings.body);\n      }\n\n      const self = this;\n      function respondToPopup(e) {\n        self.close();\n        const name = e.currentTarget.innerText\n          .split(' ')\n          .join('')\n          .replace(/[^\\w\\s]/gi, ''); // remove spaces and special characters\n        const on_response = self.settings[`on${name}`];\n        if (on_response) {\n          on_response(name, e);\n        } else if (self.settings.onResponse) {\n          self.settings.onResponse.apply(self, [e, self, name]);\n        }\n      }\n      const buttonsEl = container.querySelectorAll('.modal-footer button').length\n        ? container.querySelectorAll('.modal-footer button')\n        : container.querySelectorAll('.modal-footer a');\n      for (const key of Object.keys(this.settings.buttons)) {\n        buttonsEl[key].addEventListener('click', respondToPopup);\n      }\n      resolve(true);\n    });\n  }\n\n  parseDependencies = () => {\n    const scripts = Array.from(this.modalHead.querySelectorAll('script'));\n    const links = Array.from(this.modalHead.querySelectorAll('link'));\n    const styles = links.filter((link) => link.type === 'text/css');\n    styles.forEach((style) => {\n      style.className = 'eviteModalStyle';\n      document.head.appendChild(style);\n    });\n\n    scripts.forEach((script) => {\n      let scriptTag;\n      const src = script.getAttribute('src');\n      if (src) {\n        scriptTag = buildScriptTag({\n          src,\n          type: 'text/javascript',\n          async: true,\n          className: 'eviteModalScript',\n          onLoad: () => false,\n        });\n      } else {\n        scriptTag = buildScriptTag({\n          type: 'text/javascript',\n          innerHTML: script.innerHTML,\n          className: 'eviteModalScript',\n          onLoad: () => false,\n        });\n      }\n      document.head.appendChild(scriptTag);\n    });\n\n    return this;\n  };\n\n  buildRemote() {\n    return new Promise((resolve, reject) => {\n      this.fetchContent()\n        .then((text) => this.parseContent(text))\n        .then((page) => this.injectContent(page))\n        .then(this.parseDependencies)\n        .then(resolve)\n        .catch((msg) => reject(msg));\n    });\n  }\n\n  buildFromResponse = (serverResponse) => {\n    const page = this.parseContent(serverResponse);\n    this.injectContent(page);\n    this.parseDependencies();\n  };\n\n  close = () =>\n    new Promise((resolve, reject) => {\n      if (this.open) {\n        this.modal.close().then(() => {\n          this.open = false;\n          const modalDom = document.getElementById(`eviteModal-${this.id}`);\n          const styles = document.querySelectorAll('.eviteModalStyle');\n          const scripts = document.querySelectorAll('.eviteModalScript');\n          Array.from(styles).forEach((el) => el.parentNode.removeChild(el));\n          Array.from(scripts).forEach((el) => el.parentNode.removeChild(el));\n          if (modalDom) modalDom.parentNode.removeChild(modalDom);\n          resolve();\n        });\n      }\n    });\n\n  respond = (options, settings, event) => {\n    this.modal.respond(options, settings, event);\n  };\n\n  show(htmlResponse) {\n    document.querySelector('body').appendChild(this.target);\n    this.modal.initialize(this);\n    if (htmlResponse && !this.settings.popup) {\n      this.buildFromResponse(htmlResponse);\n      this.modal.open(`#eviteModal-${this.id}`);\n      this.open = true;\n      return;\n    }\n    if (this.settings.popup) {\n      this.buildPopup().then(() => {\n        this.modal.open(`#eviteModal-${this.id}`);\n        this.open = true;\n        if (this.settings.overwrites && this.settings.overwrites.length) {\n          this.overwrites();\n        }\n      });\n    } else {\n      this.buildRemote().then(() => {\n        this.modal.open(`#eviteModal-${this.id}`);\n        this.open = true;\n        if (this.settings.overwrites && this.settings.overwrites.length) {\n          this.overwrites();\n        }\n      });\n    }\n  }\n}\n","import {EviteModal} from './evite_modal';\nimport {CaptchaDialog} from './captcha_modal';\nimport {PopupModal} from './popup_modal';\nimport {ModalWarning} from './warning_modal';\nimport {ModalAjaxError} from './ajax_error_modal';\nimport {LoadingModal} from './loading_modal';\nimport {SendMessageModal} from './send_message_modal';\nimport {ModalDialog} from './dialog_modal';\nimport {AuthModal} from './auth_modal';\n\nexport {\n  EviteModal,\n  AuthModal,\n  CaptchaDialog,\n  PopupModal,\n  ModalWarning,\n  ModalAjaxError,\n  LoadingModal,\n  ModalDialog,\n  SendMessageModal,\n};\n","import {htmlFromString} from '../common/utils';\nimport {ModalBase} from './base';\n\nexport class LoadingModal {\n  loadingModalDefaults = {\n    message: 'Loading...',\n    allowClose: false,\n    clickOutside: false,\n    width: `${Math.min(window.screen.width - Math.ceil(window.screen.width * 0.05), 420)}px`,\n  };\n\n  open = false;\n\n  constructor(settings = {}) {\n    if (typeof settings === 'string') {\n      settings = {message: settings};\n    }\n    this.settings = {\n      ...this.loadingModalDefaults,\n      ...settings,\n    };\n    const contents = htmlFromString(\n      `<div id=\"loadingModal\" class=\"eviteModalContent\"><div class=\"loadingContainer\"><div class=\"evt-spinner\"></div><div class=\"loader heading\">${this.settings.message}</div></div></div>`\n    );\n    contents.querySelector('.loadingContainer').style.cssText = `\n      background: white;\n      width: ${this.settings.width};\n      height: 233px;\n      border: 1px solid #A8A8A8;\n      border-radius: 6px;\n      overflow: hidden;`;\n\n    this.target = contents;\n    return this;\n  }\n\n  close = () => {\n    if (this.open) {\n      this.open = false;\n      const modalDom = document.getElementById('loadingModal');\n      if (modalDom) {\n        // Use this instead of remove for ie11 support\n        modalDom.parentNode.removeChild(modalDom);\n      }\n    }\n    return ModalBase.getInstance().close();\n  };\n\n  show = (message) =>\n    new Promise((resolve, reject) => {\n      document.querySelector('body').appendChild(this.target);\n      const modal = ModalBase.getInstance();\n      modal.initialize(this);\n      this.setMessage(message);\n      modal.open(`#loadingModal`);\n      this.open = true;\n      resolve();\n    });\n\n  setMessage = (message) => {\n    if (message && this.target.querySelector('.loader')) {\n      this.target.querySelector('.loader').innerHTML = message;\n    }\n  };\n}\n","import {EviteModal} from './evite_modal';\n\nexport class PopupModal {\n  settings = {\n    buttons: ['Cancel', 'Yes'],\n    buttonMarkup: '',\n    html: false,\n    title: null,\n    body: '',\n    width: '520px',\n    popup: true,\n  };\n\n  constructor(settings) {\n    return new EviteModal({...this.settings, ...settings});\n  }\n}\n","import urls from 'urls';\nimport {EviteModal} from './evite_modal';\n\nexport class SendMessageModal {\n  settings = {\n    clickOutside: false,\n    allowClose: false,\n    width: '800px',\n    title: 'Send a Message',\n    cancel: 'Cancel',\n    subject: 'Message about {subject}',\n    className: 'send-message-modal',\n    dataQaId: 'send-message-modal',\n    message: '',\n    guests: [],\n  };\n\n  constructor(settings) {\n    this.settings = {\n      ...this.settings,\n      ...settings,\n    };\n    this.settings.url_parameters = {\n      subject: this.settings.subject,\n      message: this.settings.message,\n      title: this.settings.title,\n      cancel: this.settings.cancel,\n      template: this.settings.template,\n    };\n    this.settings.url = urls.get('send_message_modal', {\n      event_id: settings.event_id || window.event_id,\n    });\n    return new EviteModal(this.settings);\n  }\n}\n","import urls from 'urls';\nimport {EviteModal} from './index';\n\nexport class ModalWarning {\n  settings = {\n    url: urls.get('modal_warning'),\n    buttons: ['Okay'],\n    title: null,\n    html: false,\n    width: '480px',\n    dialog: {},\n    url_parameters: {},\n  };\n\n  constructor(settings) {\n    this.settings = {...this.settings, ...settings};\n    this.settings.url_parameters.dialog = {\n      body: settings.body || '',\n      title: settings.title || this.settings.title,\n      buttons: settings.buttons || this.settings.buttons,\n      html: settings.html || this.settings.html,\n    };\n\n    return new EviteModal(this.settings);\n  }\n}\n","import {evite} from 'evite';\nimport urls from 'urls';\nimport {failedFetchModal} from '~/modal/_ajax_error_handler';\nimport * as utils from '~/view_invitation/utils';\n\nexport class ActivityFeedApi {\n  hydrateFeedPosts = (cursorValue = '') => {\n    const url = urls.get('ajax_event_posts', {\n      event_id: window.evite_event.id,\n      gid: window.guest_id,\n      cursor: cursorValue,\n    });\n\n    const errorDefault = 'Sorry, an error has occurred!';\n\n    return evite\n      .fetch(url, {\n        credentials: 'include',\n        headers: {\n          'X-CSRFToken': evite.cookie('csrftoken'),\n          Accept: 'application/json',\n          'Content-Type': 'application/json',\n        },\n      })\n      .then(async (response) => {\n        const data = await response.json();\n\n        if (!response.ok) {\n          const error = data.message || errorDefault;\n          failedFetchModal(response, 'Error', error);\n          return false;\n        }\n        const {objects, cursor, more} = data;\n        return {\n          objects,\n          cursor,\n          more,\n          hydratingFeed: false,\n        };\n      })\n      .catch((error) => {\n        evite.error('hydrateFeedPosts failed ', error);\n        failedFetchModal(null, 'Error', errorDefault);\n        return false;\n      });\n  };\n\n  postFeedComment = async (comment, tags, mentions, captcha = null) => {\n    const postData = {\n      comment,\n      captcha: JSON.stringify(captcha),\n      tags: JSON.stringify(tags),\n      mentions: JSON.stringify(mentions),\n    };\n    const url = `/ajax/event/${window.evite_event.id}/posts/comments/?gid=${window.guest_id}`;\n\n    // must convert to FormData\n    const data = new FormData();\n    for (const property in postData) {\n      data.append(property, postData[property]);\n    }\n\n    const errorDefault = 'Sorry, an error has occurred!';\n\n    return evite\n      .fetch(url, {\n        method: 'POST',\n        body: data,\n        credentials: 'include',\n        cache: 'no-cache',\n        headers: {\n          'X-CSRFToken': evite.cookie('csrftoken'),\n          Accept: 'application/json',\n        },\n      })\n      .then(async (response) => {\n        const responseData = await response.json();\n        if (!response.ok) {\n          if (response.status === 412) {\n            const captchaResponse = await utils.handleCaptchaJsonResponse(responseData);\n            return this.postFeedComment(comment, tags, mentions, captchaResponse);\n          }\n          const error = responseData.message || errorDefault;\n          failedFetchModal(response, 'Error', error);\n          return false;\n        }\n        responseData.user_submitted = true;\n        window.dataLayer.push({event: 'comment'});\n        return responseData;\n      })\n      .catch(async (error) => {\n        evite.error('postFeedComment failed ', error);\n        failedFetchModal(null, 'Error', errorDefault);\n        return false;\n      });\n  };\n\n  deletePost = (postId) => {\n    const url = `/ajax/event/${window.evite_event.id}/posts/${postId}/?gid=${window.guest_id}`;\n\n    const errorDefault = 'Sorry, an error has occurred!';\n\n    return evite\n      .fetch(url, {\n        method: 'DELETE',\n        credentials: 'include',\n        cache: 'no-cache',\n        headers: {\n          'X-CSRFToken': evite.cookie('csrftoken'),\n          Accept: 'application/json',\n        },\n      })\n      .then(async (response) => {\n        const responseData = await response.json();\n\n        if (!response.ok) {\n          const error = responseData.message || errorDefault;\n          failedFetchModal(response, 'Error', error);\n          return false;\n        }\n        return true;\n      })\n      .catch((error) => {\n        evite.error('deletePost failed ', error);\n        failedFetchModal(null, 'Error', errorDefault);\n        return false;\n      });\n  };\n}\n","import {evite} from 'evite';\nimport {observable, action} from 'mobx';\nimport {ActivityFeedApi} from './ActivityFeedApi';\nimport {photosStore} from '~/view_invitation/photos/PhotosStore';\nimport * as storeUtils from '~/view_invitation/store-utils';\n\nclass ActivityFeedStore {\n  @observable objects = [];\n\n  @observable cursor = '';\n\n  @observable more = '';\n\n  @observable\n  singlePostOptions = {\n    visible: false,\n  };\n\n  @observable hydratingFeed = true;\n\n  @observable\n  messageNotification = window.initial_message_data\n    ? {...window.initial_message_data, visible: true}\n    : {visible: false};\n\n  // globally-scoped values\n  eventOptionDisableFeed =\n    window.evite_event && window.evite_event.options.event_option_disable_feed;\n\n  hostMessage = window.host_message;\n\n  eventStatus = window.evite_event && window.evite_event.status;\n\n  constructor(activityFeedApi) {\n    this.activityFeedApi = activityFeedApi;\n    this.photosStore = photosStore;\n\n    // If we have an initial post then we want to render it as a modal.\n    if (window.initial_single_post_data) {\n      this.singlePostOptions = {\n        visible: true,\n        post: window.initial_single_post_data,\n      };\n      if (window.initial_single_post_data.deleted) {\n        this.singlePostOptions.deleted = true;\n      }\n    }\n  }\n\n  @action\n  hydrateFeedPosts = async (cursorValue = '') => {\n    const feedPosts = await this.activityFeedApi.hydrateFeedPosts(cursorValue);\n\n    storeUtils.updateAllPosts(this, feedPosts);\n  };\n\n  @action\n  postFeedComment = async (comment, tags = [], mentions = [], captcha = null) => {\n    const newComment = await this.activityFeedApi.postFeedComment(comment, tags, mentions, captcha);\n    storeUtils.addSinglePost(this, newComment);\n  };\n\n  @action\n  deletePost = async (postId) => {\n    const isDeleted = await this.activityFeedApi.deletePost(postId);\n    if (!isDeleted) return;\n\n    storeUtils.deletePostById(this, postId);\n  };\n\n  // get more posts from clicking 'show more'\n  @action\n  getFeedPosts = async (cursorValue = '') => {\n    const feedPosts = await this.activityFeedApi.hydrateFeedPosts(cursorValue);\n\n    storeUtils.getMorePosts(this, feedPosts);\n    window.dataLayer.push({event: 'show_more_feed_posts'});\n  };\n\n  @action\n  setSinglePostModalVisible = (isVisible) => {\n    const options = {visible: isVisible};\n    this.singlePostOptions = {...this.singlePostOptions, ...options};\n  };\n\n  @action\n  setMessageModalVisible = (isVisible) => {\n    const options = {visible: isVisible};\n    this.messageNotification = {...this.messageNotification, ...options};\n  };\n\n  @action\n  invalidate = () => {\n    this.hydratingFeed = true;\n  };\n}\n\nconst activityFeedApi = new ActivityFeedApi();\nconst activityFeedStore = new ActivityFeedStore(activityFeedApi);\n\nexport {activityFeedStore};\nevite.provideStores({activityFeed: activityFeedStore});\n","import {eventTabUrlPath} from './utils';\nimport {history as browserHistory} from './history';\nimport * as utils from '~/view_invitation/utils';\n\nimport {photosStore} from '~/view_invitation/photos/PhotosStore';\nimport {hydrateWhatToBring} from '~/view_invitation/what-to-bring/actions';\nimport {hydratePolls} from '~/view_invitation/polls/actions';\nimport {hydrateSponsoredRegistry} from '~/view_invitation/sponsored-registry/actions';\nimport {checkNewMessages} from '~/view_invitation/event-view-tabs/actions';\n\nexport const renderState = {appRendered: false};\n\nfunction isValidRoute(name) {\n  return [\n    'activity',\n    'donate',\n    'gifts',\n    'guestlist',\n    'photos',\n    'polls',\n    'settings',\n    'rsvp',\n    'what-to-bring',\n  ].includes(name);\n}\n\nexport function isCurrentRoute(name) {\n  return document.location.pathname.indexOf(`/${name}`) !== -1;\n}\n\nexport function toRoute(name, options = {}) {\n  if (!isValidRoute(name)) {\n    evite.assert(false, `Unknown route \"${name}\"`);\n    return false;\n  }\n  if (isCurrentRoute(name)) {\n    return false;\n  }\n\n  window.app.router.preventScroll = Boolean(options.preventScroll);\n  const tabUrl = eventTabUrlPath(name);\n  browserHistory.push(tabUrl);\n  return true;\n}\n\nwindow.app = window.app || {};\nif (!window.app.router) {\n  window.app.router = {...exports, browserHistory};\n}\n\nlet pageViewCount = 0;\n\nexport function onRouteEntered(path) {\n  // check for messages if there is a guest id\n  if (window.evite_event.rsvp && window.evite_event.rsvp.id) {\n    checkNewMessages();\n  }\n  if ((path === 'photos' || path === 'activity') && !photosStore.hydrated) {\n    // noinspection JSIgnoredPromiseFromCall\n    photosStore.hydratePhotoPosts();\n  }\n  if (path === 'what-to-bring') {\n    // noinspection JSIgnoredPromiseFromCall\n    hydrateWhatToBring();\n  }\n  if (path === 'polls') {\n    // noinspection JSIgnoredPromiseFromCall\n    hydratePolls();\n  }\n  if (path === 'rsvp') {\n    const {experiment_variations} = evite_event.options;\n    if (experiment_variations && experiment_variations.allow_videos) {\n      hydratePolls();\n    }\n  }\n  if (path === 'gifts') {\n    // noinspection JSIgnoredPromiseFromCall\n    hydrateSponsoredRegistry();\n  }\n\n  !window.app.router.preventScroll && scrollPage();\n  window.app.router.preventScroll = false;\n\n  trackTabRender(path);\n\n  // Rerun the headerSpacer calculation because the original calculations might be wrong if the\n  // page was loaded on a sub-path of messages which hides the header.\n  if (path === 'messages') {\n    window.setTimeout(() => {\n      // TODO: the following functions don't exist anymore. Since create flow does not use this module,\n      // it's ok to comment them. This file should be removed as well\n      // evite.navSetup.setHeaderSpacerHeight();\n      // evite.navSetup.setFixedHeaderSpacerHeight();\n    }, 1);\n  }\n\n  if (renderState.appRendered && pageViewCount > 0) {\n    // not on the first\n    evite.when('dfp').then(() => {\n      // Adblock removes window.debouncedRefreshAds\n      window.refreshAds && window.refreshAds();\n    });\n  }\n\n  pageViewCount += 1;\n  evite.history.dispatchEvent(new CustomEvent('change'));\n}\n\nexport function onSubRouteEntered() {\n  // check for messages if there is a guest id\n  if (window.evite_event.rsvp && window.evite_event.rsvp.id) {\n    checkNewMessages();\n  }\n\n  if (renderState.appRendered && pageViewCount > 0) {\n    // not on the first\n    evite.when('dfp').then(() => {\n      // Adblock removes window.debouncedRefreshAds\n      window.refreshAds && window.refreshAds();\n    });\n  }\n\n  pageViewCount += 1;\n  evite.history.dispatchEvent(new CustomEvent('change'));\n}\n\nfunction scrollPage() {\n  if (document.location.hash) {\n    window.setTimeout(() => {\n      if (document.getElementById(document.location.hash.substring(1))) {\n        return scrollPageToHash();\n      }\n    }, 500);\n  } else {\n    return scrollPageToFeedTop();\n  }\n}\n\nfunction scrollPageToHash() {\n  $('html, body').animate(\n    {\n      scrollTop: $(document.location.hash).offset().top - 20,\n    },\n    200,\n    'swing'\n  );\n}\n\nfunction scrollPageToFeedTop() {\n  const top = window.pageYOffset || document.documentElement.scrollTop;\n  const invite_height = $('#design-template-wrapper').outerHeight();\n  const threshold = utils.isMobile() ? 0 : window.is_premium ? invite_height - 50 : invite_height;\n  if (top > threshold) {\n    $('html, body').animate({scrollTop: threshold}, 200, 'swing');\n  }\n}\n\nfunction trackTabRender(tab) {\n  if (!renderState.appRendered) {\n    return false;\n  }\n\n  window.setTimeout(() => {\n    // DataOps use this to track pageviews within the app\n    window.tags.push('view_tab_active', tab);\n    window.dataLayer.push({\n      event: 'event_view_tab_rendered',\n      destination_url: window.location.pathname,\n    });\n  }, 500);\n}\n","import React from 'react';\n\nimport {connect} from 'react-redux';\n\n// regular expression for detecting two names within one guest name\n// like \"Jerry & Susan\" or \"Linda and Sam Wilson\" - used in\n// getAvatarLetters() below\nconst AMP_SEPARATED_PATTERN = /^\\s*(\\w+.*)\\s+(&|and)\\s+(\\w+.*)\\s*$/i;\n\nexport class UnconnectedUserAvatar extends React.PureComponent {\n  render() {\n    const avatars = this.props.state.avatars.userAvatars;\n    const {disableButton, userId, size, avatarCls = '', newColors = false} = this.props;\n    const name = this.props.name || `${this.props.firstName} ${this.props.lastName}`.trim();\n    const letters = this.props.initials || this.getAvatarLetters(name);\n\n    let currentAvatar = this.props.avatarUrl;\n    if (avatars) currentAvatar = avatars[userId];\n\n    // TODO: this component needs cleanup; but for now we will let the avatarUrl prop\n    // take precedence over the imgUrl defined here\n    let imgUrl = currentAvatar ? currentAvatar.url : null;\n    if (this.props.avatarUrl) imgUrl = this.props.avatarUrl;\n    const disabledClass = disableButton ? 'disabled' : null;\n    let diskNumber = parseInt(this.props.avatarDisk);\n\n    // if diskNumber is between 0 - 9 , don't set anything\n    if (!(diskNumber >= 0 && diskNumber < 10)) {\n      diskNumber = currentAvatar && currentAvatar.icon_id ? currentAvatar.icon_id : null;\n    }\n\n    const diskClass = imgUrl ? '' : `avatar-${newColors ? `new-${diskNumber}` : diskNumber}`;\n    return (\n      <button\n        tabIndex={disableButton ? '-1' : '0'}\n        aria-hidden={disableButton}\n        onClick={this.onAvatarClick}\n        data-qa-id=\"user-avatar-link\"\n        className={`unstyled-button avatar ${\n          size || ''\n        } ${diskClass} ${avatarCls} ${disabledClass} pb-invitation-avatar`}\n      >\n        {imgUrl ? <img src={imgUrl} alt={letters} /> : <span>{letters}</span>}\n      </button>\n    );\n  }\n\n  onAvatarClick = (evt) => {\n    evt.preventDefault();\n    if (!evite.hasClass(evt.currentTarget, 'disabled')) {\n      window.location.replace(`/profile/public/${this.props.userId}`);\n    } else {\n      return false;\n    }\n  };\n\n  getAvatarLetters = (guestName) => {\n    // strip everything but letters, spaces, and &'s from the guestname\n    // const strippedGuestName = guestName.replace(/[^a-z &]/gi, '');\n    const strippedGuestName = guestName.replace(\n      /([\\u2700-\\u27BF]|[\\uE000-\\uF8FF]|\\uD83C[\\uDC00-\\uDFFF]|\\uD83D[\\uDC00-\\uDFFF]|[\\u2011-\\u26FF]|\\uD83E[\\uDD10-\\uDDFF])/g,\n      ''\n    );\n\n    // special case of two names inside one guest name (see\n    // comment about AMP_SEPARATED_PATTERN, above) - if we\n    // detect that case, grab the first letter from each\n    const matches = strippedGuestName.match(AMP_SEPARATED_PATTERN);\n    if (matches) {\n      const before = matches[1].trim();\n      const after = matches[3].trim();\n      return before[0] + after[0];\n    }\n\n    const strParts = strippedGuestName.trim().split(/[ ]+/);\n    const firstLetter = (guestName && guestName.length ? strParts[0][0] : '') || '';\n    let lastLetter = '';\n\n    if (strParts.length > 1) {\n      lastLetter = strParts[1][0];\n    }\n\n    return firstLetter + lastLetter;\n  };\n}\n\nfunction mapStateToProps(state) {\n  return {\n    state: {\n      avatars: state.avatars,\n    },\n  };\n}\n\nexport const UserAvatar = connect(mapStateToProps)(UnconnectedUserAvatar);\n","export const ADD_AVATARS = 'ADD_AVATARS';\n","import update from 'immutability-helper';\nimport * as types from './constants';\n\nconst initialState = {\n  userAvatars: [],\n  avatarsFetched: false,\n};\n\nexport function avatarsReducer(state = initialState, action) {\n  switch (action.type) {\n    case types.ADD_AVATARS:\n      return update(state, {\n        userAvatars: {$set: action.avatars || action.message},\n        avatarsFetched: {$set: true},\n      });\n    default:\n      return state;\n  }\n}\n","import React, {PureComponent} from 'react';\nimport {Provider} from 'react-redux';\nimport {SimpleModal as SimpleModal_} from '../../../common/components/SimpleModal';\n\nimport {store} from '../../store';\n\nexport class SimpleModal extends PureComponent {\n  render() {\n    return (\n      <SimpleModal_ ProvidedProvider={Provider} store={store} {...this.props}>\n        {this.props.children}\n      </SimpleModal_>\n    );\n  }\n}\n","import React from 'react';\nimport {getTimeSinceUTCDate} from '../../../common/timestamp';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nfunction TimeSince(props) {\n  const {timestamp, dataQaId, inline} = props;\n  return (\n    <Typography inline={inline} data-qa-id={dataQaId || ''} variant=\"paragraph4\">\n      {getTimeSince(timestamp)}\n    </Typography>\n  );\n}\n\n// Not a real iso checker, but checks for our purposes\nfunction isIsoDate(str) {\n  return /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z/.test(str);\n}\n\nfunction getTimeSince(timestamp) {\n  timestamp = isIsoDate(timestamp) ? timestamp : formatTimestamp(timestamp);\n  const utc_timestamp = XDate(timestamp);\n  return getTimeSinceUTCDate(utc_timestamp);\n}\n\nfunction formatTimestamp(timestamp) {\n  /*  Timestamps from the api aren't valid ISO so we need to format them.\n      They look like this: 20161219T205151\n      They need to look like this: 2016-12-19T20:51:51Z */\n\n  timestamp = insertAt(15, 'Z', timestamp);\n  timestamp = insertAt(13, ':', timestamp);\n  timestamp = insertAt(11, ':', timestamp);\n  timestamp = insertAt(6, '-', timestamp);\n  timestamp = insertAt(4, '-', timestamp);\n\n  return timestamp;\n}\n\nfunction insertAt(position, val, str) {\n  return str.substr(0, position) + val + str.substr(position);\n}\n","import {store} from '../store';\nimport {GET_NEW_MESSAGES, SET_NEW_MESSAGES} from './constants';\n\n// function to check if there is a new message and display an alert dot on message tab\n// this is not live time data\nexport async function checkNewMessages() {\n  const url = `/tsunami/v1/services/event/${window.event_id}/guest/${window.guest_id}/messages/status`;\n  const getMessages = {\n    method: 'GET',\n    credentials: 'include',\n    cache: 'no-cache',\n    headers: {\n      'X-CSRFToken': evite.cookie('csrftoken'),\n      Accept: 'application/json',\n    },\n  };\n  try {\n    const response = await evite.fetch(url, getMessages);\n    if (response.ok) {\n      const responseText = await response.json();\n      store.dispatch({\n        type: SET_NEW_MESSAGES,\n        responseText,\n      });\n    } else {\n      // the error will only emit the blue dot, so let's just console error\n      console.error('error fetching new message', response);\n    }\n  } catch (e) {\n    console.error('error fetching new message', response);\n  }\n}\n","export const GET_NEW_MESSAGES = 'GET_NEW_MESSAGES';\nexport const SET_NEW_MESSAGES = 'SET_NEW_MESSAGES';\n","import update from 'immutability-helper';\nimport {GET_NEW_MESSAGES, SET_NEW_MESSAGES} from './constants';\n\nconst initialState = {\n  hasNewMessages: false,\n};\n\nexport function newMessagesReducer(state = initialState, action) {\n  switch (action.type) {\n    case GET_NEW_MESSAGES:\n      break;\n\n    case SET_NEW_MESSAGES:\n      return update(state, {\n        hasNewMessages: {$set: action.responseText.status.has_unread},\n      });\n\n    default:\n      return state;\n  }\n}\n","export const hasGiftRegistries = () => window.has_gift_registries;\n\nexport const getGiftRegistriesName = () => window.gift_registry_name;\n","import React from 'react';\nimport * as utils from '../utils';\nimport {TimeSince} from '~/view_invitation/common/components/time-since';\nimport {Typography} from '~/common/_pb_components/atoms/Typography';\n\nexport function ReplyStatus(props) {\n  const {dateReplied, dateViewed, guestOf, rsvpResponse} = props;\n  let status;\n\n  if (utils.isHost()) {\n    // this is what we show when a HOST is viewing\n    if (dateViewed) {\n      status = (\n        <Typography inline variant=\"paragraph4\">\n          Viewed <TimeSince inline timestamp={dateViewed} />\n        </Typography>\n      );\n    } else {\n      status = (\n        <Typography inline variant=\"paragraph4\">\n          Not yet viewed\n        </Typography>\n      );\n    }\n  } else {\n    // this is what we show when a GUEST is viewing\n    if (guestOf) {\n      status = ''; // 'cause plus ones are special\n    } else if (dateReplied && rsvpResponse !== 'undecided') {\n      status = (\n        <Typography inline variant=\"paragraph4\">\n          Replied <TimeSince inline timestamp={dateReplied} />\n        </Typography>\n      );\n    } else {\n      status = (\n        <Typography inline variant=\"paragraph4\">\n          Not yet replied\n        </Typography>\n      );\n    }\n  }\n\n  return <div className=\"reply-status\">{status}</div>;\n}\n","import {action} from 'mobx';\nimport urls from 'urls';\nimport * as utils from '../utils';\nimport * as types from './constants';\n\nimport {store} from '../store';\nimport {guestlistStore} from '~/view_invitation/guestlist/store';\n\nexport function fetchGuestlistData(cb = null) {\n  const url = urls.get('ajax_event_guestlist', {\n    event_id: window.evite_event.id,\n    gid: window.guest_id,\n  });\n  window.$.get(url, (response) => {\n    // Exit if it's a hidden guest list\n    if (response.length === 0) {\n      return false;\n    }\n\n    // Sort guests in alphabetical order\n    function alphabetical(a, b) {\n      if (a.name < b.name) {\n        return -1;\n      }\n      if (a.name > b.name) {\n        return 1;\n      }\n      return 0;\n    }\n    response.yes.sort(alphabetical);\n    response.no.sort(alphabetical);\n    response.maybe.sort(alphabetical);\n    response.undecided.sort(alphabetical);\n\n    let hostFound = false;\n    let youFound = false;\n    for (const respType of ['yes', 'no', 'maybe', 'undecided']) {\n      // Bring You to the front\n      if (!youFound) {\n        response[respType].forEach((guest, idx) => {\n          if (guest.user_id === window.user_id) {\n            response[respType].unshift(response[respType].splice(idx, 1)[0]);\n            youFound = true;\n            return false;\n          }\n        });\n      }\n\n      // Bring Host to the front\n      if (!hostFound) {\n        response[respType].forEach((guest, idx) => {\n          if (guest.user_id === window.evite_event.host_id) {\n            response[respType].unshift(response[respType].splice(idx, 1)[0]);\n            hostFound = true;\n            return false;\n          }\n        });\n      }\n    }\n\n    action(() => {\n      // TODO: should remove this at some point and use get profiles instead\n      // we also shouldn't mutate the store without an @action\n      guestlistStore.guestlist = {...guestlistStore.guestlist, ...response};\n\n      guestlistStore.fetchingGuestlist = false;\n    })();\n    cb && cb();\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n}\n\nexport const updateSearchText = action((searchText) => {\n  guestlistStore.searchText = searchText;\n});\n\nexport function getNameOfGuestWithId(guestId) {\n  return guestlistStore.getNameOfGuestWithId(guestId);\n}\n","export const HYDRATE_GUESTLIST = 'HYDRATE_GUESTLIST';\nexport const UPDATE_SEARCH_TEXT = 'UPDATE_SEARCH_TEXT';\n","import {action, observable} from 'mobx';\n\nclass GuestlistStore {\n  // not observable since this would take\n  // too long to process and too much memory\n  // components should test and react to changes to fetchingGuestlist\n  // and when true this guestlist is available.\n  // @observable\n  guestlist = {\n    undecided: [],\n    undecided_count: 0,\n    maybe: [],\n    maybe_count: 0,\n    yes: [],\n    yes_count: 0,\n    no: [],\n    no_count: 0,\n    attended: [],\n    checked_in_count: 0,\n    // a map of user_id: name\n    guest_names: {},\n    totalInviteesCount: 0,\n    totalCountWithPlusOnes: 0,\n  };\n\n  allowKids =\n    window.evite_event &&\n    window.evite_event.options &&\n    window.evite_event.options.event_option_allow_kids;\n\n  // observables are needed for these, though\n  // these are rsvp counts\n  @observable yes_count = 0;\n\n  @observable no_count = 0;\n\n  @observable maybe_count = 0;\n\n  @observable undecided_count = 0;\n\n  @observable checked_in_count = 0;\n\n  @observable adults_maybe = 0;\n\n  @observable adults_yes = 0;\n\n  @observable kids_maybe = 0;\n\n  @observable kids_yes = 0;\n\n  // these are raw counts of actual invitations sent\n  @observable invitees_undecided = 0;\n\n  @observable invitees_maybe = 0;\n\n  @observable invitees_yes = 0;\n\n  @observable invitees_no = 0;\n\n  @observable totalInviteesCount = 0;\n\n  @observable shouldShowPlainStyle = true;\n\n  @observable fetchingGuestlist = true;\n\n  @observable searchText = '';\n\n  @observable isLoadedInModal = false;\n\n  @action\n  updateSummary = (summary) => {\n    if (!summary) return;\n    this.guestlist.undecided_count = summary.undecided_count;\n    this.guestlist.maybe_count = summary.adults_maybe + summary.kids_maybe || 0;\n    this.guestlist.yes_count = summary.adults_yes + summary.kids_yes || 0;\n    this.guestlist.no_count = summary.no_count;\n    this.guestlist.checked_in_count = summary.checked_in_count;\n\n    this.undecided_count = summary.undecided_count;\n    this.maybe_count = summary.adults_maybe + summary.kids_maybe || 0;\n    this.yes_count = summary.adults_yes + summary.kids_yes || 0;\n    this.no_count = summary.no_count;\n    this.checked_in_count = summary.checked_in_count;\n\n    this.adults_maybe = summary.adults_maybe || 0;\n    this.adults_yes = summary.adults_yes || 0;\n\n    this.kids_maybe = summary.kids_maybe || 0;\n    this.kids_yes = summary.kids_yes || 0;\n\n    this.invitees_maybe = summary.invitees_maybe;\n    this.invitees_yes = summary.invitees_yes;\n    this.totalInviteesCount =\n      this.invitees_undecided + this.invitees_maybe + this.invitees_yes + this.invitees_no;\n\n    // these are the same. adding for clarity on the FE\n    this.invitees_undecided = summary.undecided_count;\n    this.invitees_no = summary.no_count;\n\n    this.shouldShowPlainStyle = this.totalInviteesCount > 750;\n\n    this.guestlist.totalCountWithPlusOnes =\n      this.undecided_count + this.maybe_count + this.yes_count + this.no_count;\n  };\n\n  @action\n  updateIsLoadedInModal = (isInModal) => {\n    this.isLoadedInModal = isInModal;\n  };\n\n  getNameOfGuestWithId(guestId) {\n    return this.guestlist.guest_names[guestId];\n  }\n}\n\nconst guestlistStore = new GuestlistStore();\nexport {guestlistStore};\nevite.provideStores({guestlist: guestlistStore});\n","import {createBrowserHistory} from 'history';\n\nexport const history = createBrowserHistory();\n","export const SET_MESSAGE_MODAL_VISIBLE = 'SET_MESSAGE_MODAL_VISIBLE';\n","import update from 'immutability-helper';\nimport * as actions from '~/view_invitation/message-modal/constants';\n\nexport function modalReducer(state = initialState, action) {\n  switch (action.type) {\n    case actions.SET_MESSAGE_MODAL_VISIBLE:\n      return update(state, {\n        messageNotification: {\n          visible: {$set: action.visible},\n        },\n      });\n\n    default:\n      return state;\n  }\n}\n","import {evite} from 'evite';\nimport urls from 'urls';\nimport {failedFetchModal} from '~/modal/_ajax_error_handler';\nimport * as utils from '../utils';\n\nexport class PhotosApi {\n  hydratePhotoPosts = (cursor = '') => {\n    const url = urls.get('ajax_event_photos', {\n      event_id: window.evite_event.id,\n      per_page: 120,\n      cursor,\n      gid: window.guest_id,\n    });\n\n    const errorDefault = 'Sorry, an error has occurred!';\n\n    return evite\n      .fetch(url, {\n        credentials: 'include',\n        headers: {\n          'X-CSRFToken': evite.cookie('csrftoken'),\n          Accept: 'application/json',\n          'Content-Type': 'application/json',\n        },\n      })\n      .then(async (response) => {\n        const data = await response.json();\n\n        if (!response.ok) {\n          const error = data.message || errorDefault;\n          failedFetchModal(response, 'Error', error);\n          return false;\n        }\n        const {objects, cursor, more} = data;\n        return {\n          objects,\n          cursor,\n          more,\n          fetchingPhotos: false,\n          hydrated: true,\n        };\n      })\n      .catch((error) => {\n        evite.error('hydratePhotoPosts failed ', error);\n        failedFetchModal(null, 'Error', errorDefault);\n        return false;\n      });\n  };\n\n  getPhotoPostsById = (postIds) => {\n    const url = `/ajax/event/${window.evite_event.id}/posts/?gid=${window.guest_id}&post_ids=${postIds}`;\n\n    const errorDefault = 'Sorry, an error has occurred!';\n\n    return evite\n      .fetch(url, {\n        credentials: 'include',\n        headers: {\n          'X-CSRFToken': evite.cookie('csrftoken'),\n          Accept: 'application/json',\n          'Content-Type': 'application/json',\n        },\n      })\n      .then(async (response) => {\n        const data = await response.json();\n\n        if (!response.ok) {\n          const error = data.message || errorDefault;\n          failedFetchModal(response, 'Error', error);\n          return false;\n        }\n        const {objects} = data;\n\n        return {\n          objects,\n        };\n      })\n      .catch((error) => {\n        evite.error('getPhotoPostsById failed ', error);\n        failedFetchModal(null, 'Error', errorDefault);\n        return false;\n      });\n  };\n\n  deletePhotos = (photoIds) => {\n    const eventId = window.evite_event.id;\n    const url = `/ajax/event/${eventId}/posts/photos/delete/?gid=${window.guest_id}`;\n\n    return window.$.ajax({\n      type: 'POST',\n      data: {postIds: JSON.stringify(photoIds), delete: true},\n      success(responseText, statusText, xhr) {\n        return statusText;\n      },\n      error(jqXHR, textStatus, errorThrown) {\n        utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n      },\n      url,\n    });\n  };\n\n  addPhotos = (postId, comment, mentions, content) => {\n    const postData = {\n      postId,\n      comment,\n      content: JSON.stringify(content),\n      mentions,\n    };\n    const url = `/ajax/event/${window.evite_event.id}/posts/photos/?gid=${window.guest_id}`;\n\n    return window.$.ajax({\n      data: postData,\n      type: 'PATCH',\n      success(response) {\n        return response;\n      },\n      error(jqXHR, textStatus, errorThrown) {\n        utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n      },\n      url,\n    });\n  };\n}\n","import {evite} from 'evite';\nimport {observable, action} from 'mobx';\nimport {PhotosApi} from './PhotosApi';\nimport {activityFeedStore} from '~/view_invitation/activity-feed/ActivityFeedStore';\nimport * as storeUtils from '~/view_invitation/store-utils';\n\nclass PhotosStore {\n  @observable objects = '';\n\n  @observable cursor = '';\n\n  @observable more = '';\n\n  @observable fetchingPhotos = true;\n\n  @observable hydrated = false;\n\n  constructor(photosApi) {\n    this.photosApi = photosApi;\n  }\n\n  @action\n  hydratePhotoPosts = async () => {\n    if (this.objects && !this.more) return false; // All photos loaded\n    const photoPosts = await this.photosApi.hydratePhotoPosts(this.cursor);\n    storeUtils.appendPosts(this, photoPosts);\n    return this.more;\n  };\n\n  @action\n  hydrateAllPhotoPosts = async () => {\n    while (await this.hydratePhotoPosts()) {}\n  };\n\n  @action\n  getPhotoPostsById = async (postIds) => {\n    const photoPosts = await this.photosApi.getPhotoPostsById(postIds);\n\n    storeUtils.addMultiplePosts(this, photoPosts);\n\n    // rehydrate feed posts\n    activityFeedStore.hydrateFeedPosts();\n  };\n\n  @action\n  addPhotoPost = (newPhotoPost) => {\n    storeUtils.addSinglePost(activityFeedStore, newPhotoPost);\n    storeUtils.addSinglePost(this, newPhotoPost);\n  };\n\n  @action\n  deletePhotoPost = (postId) => {\n    const postIndex = storeUtils.getPostIndex(activityFeedStore, postId);\n\n    // make sure this post has been successfully removed from the activityFeedStore before removing from photosStore\n    if (postIndex === -1) storeUtils.deletePostById(this, postId);\n  };\n}\n\nconst photosApi = new PhotosApi();\nconst photosStore = new PhotosStore(photosApi);\n\nexport {photosStore};\nevite.provideStores({photos: photosStore});\n","import {store} from '../store';\nimport * as types from './constants';\nimport * as utils from '../utils';\nimport {activityFeedStore} from '../activity-feed/ActivityFeedStore';\n\nexport async function hydratePolls() {\n  if (!store.getState().polls.hasPoll) return;\n  const url = `/ajax/event/${window.evite_event.id}/polls/?gid=${window.guest_id}`;\n\n  const response = await evite.fetch(url, {\n    method: 'get',\n    credentials: 'include',\n    cache: 'no-cache',\n    headers: {\n      'X-CSRFToken': evite.cookie('csrftoken'),\n      Accept: 'application/json',\n    },\n  });\n  if (!response.ok) {\n    utils.renderAjaxErrorModal(response);\n  }\n\n  const data = await response.json();\n  store.dispatch({\n    type: types.CREATE_POLL,\n    poll: data[0] || [],\n  });\n}\n\nexport function createPoll(data) {\n  const url = `/ajax/event/${window.evite_event.id}/polls/?gid=${window.guest_id}`;\n  window.$.post(url, data, (response) => {\n    store.dispatch({\n      type: types.CREATE_POLL,\n      poll: response,\n    });\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n  window.dataLayer.push({event: 'createpoll'});\n}\n\nexport function cancelEditPoll(data) {\n  store.dispatch({\n    type: types.CANCEL_EDIT_POLL,\n    poll: data,\n  });\n  window.dataLayer.push({event: 'canceleditpoll'});\n}\n\nexport function savePoll(data) {\n  const pollId = data.id;\n  const url = `/ajax/event/${window.evite_event.id}/polls/${pollId}/?gid=${window.guest_id}`;\n  window.$.post(url, data, (response) => {\n    store.dispatch({\n      type: types.SAVE_POLL,\n      poll: response,\n    });\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n  window.dataLayer.push({event: 'savepoll'});\n}\n\nexport function editPoll(pollId) {\n  const url = `/ajax/event/${window.evite_event.id}/polls/${pollId}?gid=${window.guest_id}`;\n  window.$.get(url, (response) => {\n    store.dispatch({\n      type: types.EDIT_POLL,\n      poll: response,\n    });\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n\n  window.dataLayer.push({event: 'editpoll'});\n}\n\nexport function deletePoll(pollId) {\n  const url = `/ajax/event/${window.evite_event.id}/polls/${pollId}?gid=${window.guest_id}`;\n  window.$.ajax({\n    url,\n    type: 'DELETE',\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n  store.dispatch({\n    type: types.DELETE_POLL,\n  });\n}\n\nexport function submitResponse(pollId, choiceId, otherOption) {\n  const url = `/ajax/event/${window.evite_event.id}/polls/${pollId}/responses/?gid=${window.guest_id}`;\n  const data = {\n    option: choiceId,\n    other_option: otherOption,\n  };\n  window.$.post(url, data, (response) => {\n    store.dispatch({\n      type: types.ADD_RESPONSE,\n      poll: response,\n    });\n  })\n    .then(() => {\n      // Refresh the activity feed\n      // noinspection JSIgnoredPromiseFromCall\n      activityFeedStore.hydrateFeedPosts();\n    })\n    .fail((jqXHR, textStatus, errorThrown) => {\n      utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n    });\n  window.dataLayer.push({event: 'pollvote'});\n}\n\nexport function setVoted(pollId, voted, isHostVoting) {\n  store.dispatch({\n    type: types.SET_VOTED,\n    pollId,\n    voted,\n    isHostVoting,\n  });\n}\n","export const CREATE_POLL = 'CREATE_POLL';\nexport const EDIT_POLL = 'EDIT_POLL';\nexport const CANCEL_EDIT_POLL = 'CANCEL_EDIT_POLL';\nexport const SAVE_POLL = 'SAVE_POLL';\nexport const DELETE_POLL = 'DELETE_POLL';\nexport const ADD_RESPONSE = 'ADD_RESPONSE';\nexport const SET_VOTED = 'SET_VOTED';\n","import update from 'immutability-helper';\nimport * as types from './constants';\nimport {hasWidget} from '~/view_invitation/utils';\n\nconst hasPoll = hasWidget('poll');\nconst initialState = {\n  items: [],\n  hasPoll,\n  fetchingPoll: hasPoll,\n};\n\nexport function pollsReducer(state = initialState, action) {\n  switch (action.type) {\n    case types.CREATE_POLL:\n      console.log('create got %O', action);\n      return update(state, {\n        $set: {\n          hasPoll: true,\n          fetchingPoll: false,\n          items: [action.poll],\n        },\n      });\n    case types.SAVE_POLL:\n      return update(state, {\n        $set: {\n          hasPoll: true,\n          fetchingPoll: false,\n          items: [action.poll],\n        },\n      });\n    case types.EDIT_POLL:\n      return update(state, {\n        items: {\n          [getPollIndex(state.items, action.poll.id)]: {\n            $merge: action.poll,\n            editingPoll: {$set: true},\n          },\n        },\n      });\n    case types.CANCEL_EDIT_POLL:\n      return update(state, {\n        $set: {\n          hasPoll: true,\n          fetchingPoll: false,\n          items: [action.poll],\n        },\n      });\n    case types.DELETE_POLL:\n      return update(state, {\n        $set: {\n          hasPoll: false,\n          fetchingPoll: false,\n          items: [],\n        },\n      });\n    case types.ADD_RESPONSE:\n      return {items: [action.poll]};\n    case types.SET_VOTED:\n      return update(state, {\n        items: {\n          [getPollIndex(state.items, action.pollId)]: {\n            voted: {$set: action.voted},\n            isHostVoting: {$set: action.isHostVoting},\n          },\n        },\n      });\n    default:\n      return state;\n  }\n}\n\nfunction getPollIndex(state, pollId) {\n  return state.map((e) => e.id).indexOf(pollId);\n}\n","import {toJSON, str, int} from 'evite';\nimport {valid_email} from '../../common/utils';\nimport * as utils from '../utils';\n\nimport {store} from '../store';\nimport * as types from './constants';\nimport {messagingStore} from '~/messaging/store';\nimport {activityFeedStore} from '~/view_invitation/activity-feed/ActivityFeedStore';\nimport {history as browserHistory} from '../../create/history';\n\nexport function submitRsvp(data, captcha = null, onRsvp = null, rsvpAction = 'frp') {\n  const formData = {...data, captcha: toJSON(captcha)};\n  const url = `/ajax/event/${window.evite_event.id}/view/rsvp`;\n  setFormSubmitting(true);\n  const win = false;\n\n  $.post(url, formData, (response) => {\n    setFormSubmitting(false);\n    window.tags.track_event('submit_rsvp', {\n      invite_rsvp_response: data.response,\n    });\n    if (onRsvp) onRsvp(response);\n    switch (rsvpAction) {\n      case 'interstitial':\n        showInterstitial();\n        updateRsvpFromGuest(response.guest, response.is_registered_user);\n        browserHistory.push(utils.eventTabUrlPath('rsvp'));\n        break;\n\n      case 'show-game-rsvp':\n        updateRsvpFromGuest(response.guest);\n        break;\n\n      case 'frp':\n      default:\n        window.location.assign(response.location);\n    }\n    browserHistory.push({\n      pathname: window.location.pathname,\n      query: {gid: response.guest.id || ''},\n    });\n    if (win) win.focus();\n  }).fail((xhr, status, data) => {\n    if (win) win.close();\n    setFormSubmitting(false);\n    const isPreconditionFailed = xhr && xhr.status === 412;\n    if (isPreconditionFailed) {\n      utils.handleCaptcha(xhr, status, data, (captcha) => {\n        // Only submit the form again if captcha data is available\n        captcha && submitRsvp(formData, captcha);\n      });\n    } else {\n      // if error is not captcha, pass the error message to the rsvp form\n      const json = xhr.responseJSON || toJSON(xhr.responseText);\n      const message =\n        (json && json.message) || 'There was a problem with your submission. Please try again.';\n      showRsvpError(message);\n    }\n  });\n}\n\nexport function updateNotifications(notifications) {\n  store.dispatch({\n    type: types.UPDATE_NOTIFICATIONS,\n    notifications,\n  });\n}\n\nexport function showInterstitial() {\n  store.dispatch({\n    type: types.SHOW_INTERSTITIAL,\n  });\n}\n\nexport function hideInterstitial() {\n  store.dispatch({\n    type: types.HIDE_INTERSTITIAL,\n  });\n}\n\nexport function submitConfirmation() {\n  store.dispatch({\n    type: types.SUBMIT_CONFIRMATION,\n  });\n}\n\nexport function showRsvpModalOverlay(show = true) {\n  store.dispatch({\n    show,\n    type: types.SHOW_RSVP_MODAL_OVERLAY,\n  });\n}\n\nexport function updateRsvpFromGuest(guest, isRegisteredUser) {\n  // Also update state in messaging tab (aka Q)\n  messagingStore.updateRsvp(guest);\n  window.evite_event.rsvp = guest;\n  // Invalidate messaging store so we get the new rsvp message\n  activityFeedStore.invalidate();\n  store.dispatch({\n    guest,\n    isRegisteredUser,\n    type: types.UPDATE_RSVP_FROM_GUEST,\n  });\n}\n\nexport function showRsvpError(error) {\n  store.dispatch({\n    error: str(error),\n    type: types.SHOW_RSVP_ERROR,\n  });\n}\n\nexport function showRsvpForm(show = true) {\n  store.dispatch({\n    show,\n    type: types.SHOW_RSVP_FORM,\n  });\n}\n\nexport function toggleRsvpFormVisible(response) {\n  store.dispatch({\n    type: types.TOGGLE_RSVP_FORM_VISIBLE,\n    response: str(response),\n  });\n}\n\nexport function toggleVideoModalVisibility(response) {\n  store.dispatch({\n    type: types.TOGGLE_VIDEO_MODAL_VISIBILITY,\n    response: str(response),\n  });\n}\n\nexport function setActiveRsvpButton(response) {\n  store.dispatch({\n    type: types.SET_ACTIVE_RSVP_BUTTON,\n    response,\n  });\n}\n\nexport function setFormSubmitting(submitting) {\n  store.dispatch({\n    type: types.SET_FORM_SUBMITTING,\n    submitting,\n  });\n}\n\nexport function setIncompleteGuest() {\n  store.dispatch({\n    type: types.SET_INCOMPLETE_GUEST,\n  });\n}\n\nexport function setNotYou() {\n  store.dispatch({\n    type: types.SET_NOT_YOU,\n  });\n}\n\nexport function unsetNotYou() {\n  store.dispatch({\n    type: types.UNSET_NOT_YOU,\n  });\n}\n\nexport function setEditingGuestName(editing, guestName) {\n  store.dispatch({\n    editing,\n    type: types.SET_EDITING_GUEST_NAME,\n    guestName: str(guestName),\n  });\n}\n\nexport function setGuestName(guestName) {\n  store.dispatch({\n    type: types.SET_GUEST_NAME,\n    guestName: str(guestName),\n  });\n}\n\nexport function getGuestName() {\n  const rsvpState = store.getState().rsvp;\n  if (rsvpState.altGuestName) {\n    return rsvpState.altGuestName;\n  }\n  return rsvpState.guestName;\n}\n\nexport function setAltGuestName(altGuestName) {\n  store.dispatch({\n    type: types.SET_ALT_GUEST_NAME,\n    altGuestName: str(altGuestName),\n  });\n}\n\nexport function setGuestEmail(guestEmail) {\n  store.dispatch({\n    type: types.SET_GUEST_EMAIL,\n    guestEmail: str(guestEmail),\n  });\n}\n\nexport function getGuestEmail() {\n  return str(store.getState().rsvp.guestEmail);\n}\n\nexport function getMaxAdultCount() {\n  const maxGuests = int(store.getState().rsvp.maxGuests);\n  return maxGuests + 1;\n}\n\nexport function getMaxKidCount() {\n  const maxGuests = int(store.getState().rsvp.maxGuests);\n  return maxGuests + 1;\n}\n\nexport function getMinKidCount() {\n  return 0;\n}\n\nexport function getMinAdultCount() {\n  return areKidsAllowed() ? 0 : 1;\n}\n\nexport function setTotalAdults(adultCount) {\n  adultCount = parseInt(adultCount, 10);\n  if (!isNaN(adultCount)) {\n    const maxCount = getMaxAdultCount();\n    const minCount = getMinAdultCount();\n    if (adultCount > maxCount) {\n      adultCount = maxCount;\n    } else if (adultCount < minCount) {\n      adultCount = minCount;\n    }\n  }\n  const currAdultCount = getTotalAdults();\n  if (adultCount == currAdultCount) {\n    return;\n  }\n  store.dispatch({\n    type: types.SET_TOTAL_ADULTS,\n    adultCount,\n  });\n  if (adultCount == 1) {\n    purgeEmptyPlusOnes();\n  } else {\n    addEmptyPlusOnesIfNeeded();\n  }\n  evaluatePlusOneNamesEmailsForErrors();\n}\n\nexport function setTotalKids(kidCount) {\n  kidCount = parseInt(kidCount, 10);\n  if (!isNaN(kidCount)) {\n    const maxCount = getMaxKidCount();\n    const minCount = getMinKidCount();\n    if (kidCount > maxCount) {\n      kidCount = maxCount;\n    } else if (kidCount < minCount) {\n      kidCount = minCount;\n    }\n  }\n  store.dispatch({\n    type: types.SET_TOTAL_KIDS,\n    kidCount,\n  });\n}\n\nexport function getTotalAdults() {\n  return int(store.getState().rsvp.totalAdults);\n}\n\nexport function canIncrementTotalAdults() {\n  return getTotalAdults() < getMaxAdultCount();\n}\n\nexport function incrementTotalAdults() {\n  if (!canIncrementTotalAdults()) {\n    return;\n  }\n  setTotalAdults(getTotalAdults() + 1);\n}\n\nexport function canDecrementTotalAdults() {\n  return getTotalAdults() > getMinAdultCount();\n}\n\nexport function decrementTotalAdults() {\n  if (!canDecrementTotalAdults()) {\n    return;\n  }\n  setTotalAdults(getTotalAdults() - 1);\n}\n\nexport function getTotalKids() {\n  return int(store.getState().rsvp.totalKids);\n}\n\nexport function canIncrementTotalKids() {\n  return true; // TODO is that okay? is there any limit?\n}\n\nexport function incrementTotalKids() {\n  if (!canIncrementTotalKids()) {\n    return;\n  }\n  setTotalKids(getTotalKids() + 1);\n}\n\nexport function canDecrementTotalKids() {\n  return getTotalKids() > 0;\n}\n\nexport function decrementTotalKids() {\n  if (!canDecrementTotalKids()) {\n    return;\n  }\n  setTotalKids(getTotalKids() - 1);\n}\n\nexport function setNotifyMarketing(notify) {\n  store.dispatch({\n    type: types.SET_NOTIFY_MARKETING,\n    notify,\n  });\n}\n\nexport function setRsvpComment(comment) {\n  store.dispatch({\n    type: types.SET_RSVP_COMMENT,\n    comment: str(comment),\n  });\n}\n\nexport function setRsvpResponse(response) {\n  store.dispatch({\n    type: types.SET_RSVP_RESPONSE,\n    response: str(response),\n  });\n}\n\nexport function setRsvpAction(action) {\n  store.dispatch({\n    type: types.SET_RSVP_ACTION,\n    action: str(action),\n  });\n}\n\n//-----------------------------------------------------------------------------\n// functions for plus one stuff\n\nexport function getPlusOnesData() {\n  return store.getState().rsvp.plusOnesData;\n}\n\nexport function getCleanedPlusOnesData(keepIDs = false) {\n  // remove the empties first, and remove the IDs from all of 'em unless\n  // keepIDs is true\n  const plusOnesData = getPlusOnesData();\n  const cleanedP1Data = [];\n  plusOnesData.forEach((p1_data) => {\n    if (p1_data.email) {\n      const p1 = {\n        name: p1_data.name,\n        email: p1_data.email,\n      };\n      if (keepIDs) {\n        p1.id = p1_data.id;\n      }\n      cleanedP1Data.push(p1);\n    }\n  });\n  return cleanedP1Data;\n}\n\nexport function getNumPlusOnes(includeEmpties = true) {\n  if (includeEmpties) {\n    return getPlusOnesData().length;\n  }\n  return getCleanedPlusOnesData().length;\n}\n\nexport function getPlusOnesDataAsJSONStr() {\n  return JSON.stringify(getCleanedPlusOnesData());\n}\n\nexport function setPlusOnesData(plusOnesData, doErrorChecking = true) {\n  store.dispatch({\n    type: types.SET_PLUSONE_DATA,\n    plusOnesData,\n  });\n  if (doErrorChecking) {\n    evaluatePlusOneNamesEmailsForErrors();\n  }\n}\n\nfunction purgeEmptyPlusOnes() {\n  setPlusOnesData(getCleanedPlusOnesData(true));\n}\n\nexport function getPlusOneEmails() {\n  const plus_ones_data = getCleanedPlusOnesData();\n  const emails = [];\n  plus_ones_data.forEach((item) => {\n    emails.push(item.email);\n  });\n  return emails;\n}\n\nexport function setPlusOneEmails(emails) {\n  const plusOnesData = [];\n  emails.forEach((email) => {\n    plusOnesData.push({\n      name: '',\n      email,\n      id: Math.random(),\n    });\n  });\n  setPlusOnesData(plusOnesData);\n}\n\nexport function addEmailFromEditorContents(failIfBeyondMax = false) {\n  const emailEntered = getPlusOneEditText();\n\n  if (!emailEntered) {\n    this.updateErrorMessage();\n    return '';\n  }\n\n  const existingEmails = getPlusOneEmails();\n  if (existingEmails.includes(emailEntered)) {\n    const message = `${emailEntered} is already present.`;\n    return message;\n  }\n\n  if (!valid_email(emailEntered).is_valid) {\n    const message = `${emailEntered} is not a valid email address.`;\n    return message;\n  }\n\n  if (getGuestEmail() == emailEntered) {\n    return getPlusOneAlreadyOnGuestListMessageFor(emailEntered);\n  }\n\n  const errMsg = _addPlusOneEmail(emailEntered, failIfBeyondMax);\n  if (!errMsg) {\n    setPlusOneEditText('');\n  }\n  return errMsg;\n}\n\nexport function getPlusOneAlreadyOnGuestListMessageFor(emailAddress) {\n  return `${emailAddress} is already on the guest list. Enter the emails of your additional guests here.`;\n}\n\nfunction _addPlusOneEmail(email, failIfBeyondMax = false) {\n  const currState = store.getState().rsvp;\n  const currNumEmailsAllowed = currState.totalAdults - 1;\n  const emails = getPlusOneEmails();\n  emails.push(email);\n  const numEmails = emails.length;\n  const maxNumEmails = getMaxAdultCount() - 1;\n  if (numEmails > maxNumEmails && failIfBeyondMax) {\n    return `A maximum of ${maxNumEmails} email address${\n      maxNumEmails > 1 ? 'es' : ''\n    } can be added.`;\n  }\n  if (numEmails > currNumEmailsAllowed && numEmails <= maxNumEmails) {\n    setTotalAdults(numEmails + 1);\n  }\n  setPlusOneEmails(emails);\n  return '';\n}\n\nexport function removePlusOneEmail(email) {\n  const emails = getPlusOneEmails();\n  const idx = emails.indexOf(email);\n  if (idx == -1) {\n    return; // not present\n  }\n  emails.splice(idx, 1);\n  setPlusOneEmails(emails);\n}\n\nexport function removeLastPlusOneEmail() {\n  const emails = getPlusOneEmails();\n  emails.pop();\n  setPlusOneEmails(emails);\n}\n\nfunction _getPlusOneDataAtIndex(idx) {\n  const plusOnesData = getPlusOnesData();\n  if (idx < 0 || idx >= plusOnesData.length) {\n    return null;\n  }\n  return plusOnesData[idx];\n}\n\nfunction _setPlusOneDataAtIndex(idx, p1Data, doErrorChecking = true) {\n  const existingP1Data = _getPlusOneDataAtIndex(idx);\n  if (!existingP1Data) {\n    return; // out of range\n  }\n  const plusOnesData = getPlusOnesData();\n  plusOnesData[idx] = p1Data;\n  setPlusOnesData(plusOnesData, doErrorChecking);\n}\n\nexport function removePlusOneAtIndex(idx) {\n  const p1DataAtIdx = _getPlusOneDataAtIndex(idx);\n  if (!p1DataAtIdx) {\n    return; // out of range\n  }\n  const plusOnesData = getPlusOnesData();\n  plusOnesData.splice(idx, 1);\n  setPlusOnesData(plusOnesData);\n}\n\nexport function setPlusOneNameAtIndex(idx, newName) {\n  const p1Data = _getPlusOneDataAtIndex(idx);\n  if (!p1Data || p1Data.name == newName) {\n    return;\n  }\n  p1Data.name = newName;\n  _setPlusOneDataAtIndex(idx, p1Data, false);\n}\n\nexport function setPlusOneEmailAtIndex(idx, newEmail) {\n  const p1Data = _getPlusOneDataAtIndex(idx);\n  if (!p1Data) {\n    return;\n  }\n  p1Data.email = newEmail.trim();\n  _setPlusOneDataAtIndex(idx, p1Data);\n}\n\nexport function addEmptyPlusOnes(numToAdd = 1) {\n  const maxThatCanBeAdded = _numPlusOnesThatCanBeAdded();\n  if (numToAdd > maxThatCanBeAdded) {\n    numToAdd = maxThatCanBeAdded;\n  }\n  const plusOnesData = getPlusOnesData();\n  for (let count = 0; count < numToAdd; count++) {\n    plusOnesData.push({\n      name: '',\n      email: '',\n      id: Math.random(),\n    });\n  }\n  setPlusOnesData(plusOnesData);\n}\n\nexport function increaseAdultCountIfNeededForPlusOnes() {\n  const numPlusOnes = getNumPlusOnes();\n  const adultCount = getTotalAdults();\n  if (adultCount <= numPlusOnes) {\n    setTotalAdults(numPlusOnes + 1);\n  }\n}\n\nexport function addEmptyPlusOnesIfNeeded() {\n  const adultCount = getTotalAdults();\n  if (adultCount < 2) {\n    return; // that was easy\n  }\n  const numPlusOnes = getNumPlusOnes();\n  if (adultCount > numPlusOnes + 1) {\n    addEmptyPlusOnes(adultCount - (numPlusOnes + 1));\n  }\n}\n\nexport function getPlusOneErrors() {\n  return store.getState().rsvp.plusOnesErrors;\n}\n\nexport function setPlusOneErrors(plusOnesErrors) {\n  store.dispatch({\n    type: types.SET_PLUSONE_ERRORS,\n    plusOnesErrors,\n  });\n}\n\nexport function clearPlusOneErrors() {\n  setPlusOneErrors({});\n}\n\nexport function areThereAnyPlusOneErrors() {\n  return Boolean(Object.keys(getPlusOneErrors()).length > 0);\n}\n\nexport function getPlusOneErrorsAtIndex(idx) {\n  return getPlusOneErrors()[idx];\n}\n\nconst PLUSONES_OVERALL_ERROR_KEY = 'overall';\n\nexport function getOverallPlusOneError() {\n  return getPlusOneErrors()[PLUSONES_OVERALL_ERROR_KEY];\n}\n\nexport function evaluatePlusOneNamesEmailsForErrors() {\n  clearPlusOnesWarningMessage();\n  const p1Errors = {};\n  const plusOnesData = getPlusOnesData();\n  const guestEmail = getGuestEmail();\n  const indexesOfEmailAddresses = {}; // for keeping track of duplicates\n  for (let idx = 0; idx < plusOnesData.length; idx++) {\n    const p1Data = plusOnesData[idx];\n    if (!p1Data.name && !p1Data.email) {\n      continue; // empties are okay\n    }\n    if (!p1Data.email) {\n      p1Errors[idx] = 'Email is a required field';\n      continue;\n    }\n    if (!valid_email(p1Data.email).is_valid) {\n      p1Errors[idx] = 'Email address is invalid';\n      continue;\n    }\n    if (p1Data.email == guestEmail) {\n      p1Errors[idx] = `${guestEmail} is already on the guest list`;\n    }\n    if (indexesOfEmailAddresses[p1Data.email]) {\n      indexesOfEmailAddresses[p1Data.email].push(idx);\n    } else {\n      indexesOfEmailAddresses[p1Data.email] = [idx];\n    }\n  }\n\n  // check for and report on duplicates\n  Object.keys(indexesOfEmailAddresses).forEach((email) => {\n    const indexes = indexesOfEmailAddresses[email];\n    if (indexes.length > 1) {\n      indexes.forEach((idx) => {\n        p1Errors[idx] = `${email} cannot be used more than once`;\n      });\n    }\n  });\n\n  // evaluate for overall plus one errors\n  const numPlusOnes = getNumPlusOnes(false); // excluding empties\n  const numAdults = getTotalAdults();\n  const maxNumPlusOnes = numAdults - 1;\n  if (numPlusOnes > maxNumPlusOnes) {\n    const numPlusOnesNeededToRemove = numPlusOnes - maxNumPlusOnes;\n    const errMsg = `Oops, you need to remove at least ${numPlusOnesNeededToRemove} Guest${\n      numPlusOnesNeededToRemove > 1 ? 's' : ''\n    } to submit your RSVP.`;\n    p1Errors[PLUSONES_OVERALL_ERROR_KEY] = errMsg;\n  }\n  setPlusOneErrors(p1Errors);\n}\n\nlet PLUS_ONES_WARNING_MESSAGE = '';\n\nexport function setPlusOnesWarningMessage(warningMessage) {\n  PLUS_ONES_WARNING_MESSAGE = warningMessage;\n}\n\nexport function clearPlusOnesWarningMessage() {\n  setPlusOnesWarningMessage('');\n}\n\nexport function getPlusOnesWarningMessage() {\n  return PLUS_ONES_WARNING_MESSAGE;\n}\n\nfunction _numPlusOnesThatCanBeAdded() {\n  const maxNumPlusOnes = getMaxAdultCount() - 1;\n  const numPlusOnes = getNumPlusOnes();\n  return maxNumPlusOnes - numPlusOnes;\n}\n\nexport function canAddAPlusOne() {\n  return _numPlusOnesThatCanBeAdded() > 0;\n}\n\nexport function getPlusOneEditText() {\n  return str(store.getState().rsvp.plusOneEditText).trim();\n}\n\nexport function setPlusOneEditText(editTextStr) {\n  store.dispatch({\n    type: types.SET_PLUSONE_EDIT_TEXT,\n    editTextStr: str(editTextStr),\n  });\n}\n\nexport function areKidsAllowed() {\n  return store.getState().rsvp.allowKids;\n}\n\nexport function toggleChangeRsvpVisible() {\n  store.dispatch({\n    type: types.TOGGLE_CHANGE_RSVP_VISIBLE,\n  });\n}\n\nexport function setRsvpInterstitial(value = true) {\n  store.dispatch({\n    type: types.SET_RSVP_INTERSTITIAL,\n    value,\n  });\n}\n\nexport function hideInlineForm() {\n  store.dispatch({\n    type: types.HIDE_INLINE_FORM,\n  });\n}\n","export const SHOW_RSVP_FORM = 'SHOW_RSVP_FORM';\nexport const SET_RSVP_INTERSTITIAL = 'SET_RSVP_INTERSTITIAL';\nexport const TOGGLE_RSVP_FORM_VISIBLE = 'TOGGLE_RSVP_FORM_VISIBLE';\nexport const TOGGLE_VIDEO_MODAL_VISIBILITY = 'TOGGLE_VIDEO_MODAL_VISIBILITY';\nexport const SET_ACTIVE_RSVP_BUTTON = 'SET_ACTIVE_RSVP_BUTTON';\nexport const SET_FORM_SUBMITTING = 'SET_FORM_SUBMITTING';\nexport const SET_INCOMPLETE_GUEST = 'SET_INCOMPLETE_GUEST';\nexport const SET_NOT_YOU = 'SET_NOT_YOU';\nexport const UNSET_NOT_YOU = 'UNSET_NOT_YOU';\nexport const SET_EDITING_GUEST_NAME = 'SET_EDITING_GUEST_NAME';\nexport const SET_GUEST_NAME = 'SET_GUEST_NAME';\nexport const SET_ALT_GUEST_NAME = 'SET_ALT_GUEST_NAME';\nexport const SET_GUEST_EMAIL = 'SET_GUEST_EMAIL';\nexport const SET_TOTAL_ADULTS = 'SET_TOTAL_ADULTS';\nexport const SET_TOTAL_KIDS = 'SET_TOTAL_KIDS';\nexport const SET_NOTIFY_MARKETING = 'SET_NOTIFY_MARKETING';\nexport const SET_RSVP_COMMENT = 'SET_RSVP_COMMENT';\nexport const SET_RSVP_RESPONSE = 'SET_RSVP_RESPONSE';\nexport const SET_RSVP_ACTION = 'SET_RSVP_ACTION';\nexport const SET_PLUSONE_DATA = 'SET_PLUSONE_DATA';\nexport const SET_PLUSONE_ERRORS = 'SET_PLUSONE_ERRORS';\nexport const SET_PLUSONE_EDIT_TEXT = 'SET_PLUSONE_EDIT_TEXT';\nexport const TOGGLE_CHANGE_RSVP_VISIBLE = 'TOGGLE_CHANGE_RSVP_VISIBLE';\nexport {SET_MESSAGE_MODAL_VISIBLE} from '~/view_invitation/message-modal/constants';\nexport const SHOW_RSVP_ERROR = 'SHOW_RSVP_ERROR';\nexport const SHOW_RSVP_MODAL_OVERLAY = 'SHOW_RSVP_MODAL_OVERLAY';\nexport const UPDATE_RSVP_FROM_GUEST = 'UPDATE_RSVP_FROM_GUEST';\nexport const UPDATE_NOTIFICATIONS = 'UPDATE_NOTIFICATIONS';\nexport const SHOW_INTERSTITIAL = 'SHOW_INTERSTITIAL';\nexport const HIDE_INTERSTITIAL = 'HIDE_INTERSTITIAL';\nexport const HIDE_INLINE_FORM = 'SUBMIT_CONFIRMATION';\nexport const SUBMIT_CONFIRMATION = 'SUBMIT_CONFIRMATION';\n\nexport const RSVP_RESPONSES = window.is_premium ? ['yes', 'no'] : ['yes', 'maybe', 'no'];\n\nexport const RSVP_RESPONSE_COPY = {\n  yes: 'Yes',\n  maybe: 'Maybe',\n  no: 'No',\n};\n","import update from 'immutability-helper';\nimport * as types from './constants';\nimport * as utils from '../utils';\nimport {isCanceled} from '~/common/utils/event_utils';\nimport {modalReducer} from '~/view_invitation/message-modal/reducers';\nimport * as video from '~/view_invitation/video-r';\n\nif (process.env.NODE_ENV === 'test') {\n  // this module is untestable. ugh.\n  window.evite_event = {id: 'dumb imports', rsvp: {}, options: {}};\n}\n\nconst {rsvp} = window.evite_event;\nconst event_options = window.evite_event.options;\nconst altGuestName = rsvp ? rsvp.name : '';\n\nconst initialState = {\n  showForm: window.is_preview ? true : !window.has_rsvpd,\n  showModal: false,\n  rsvpInterstitialVariation: undefined,\n  showVideoModal: video.eventHasDisplayableVideo(),\n  showChangeRsvp: false,\n  preventRsvp: Boolean(\n    utils.eventHasPassed() || isCanceled(window.evite_event.status) || window.is_preview\n  ),\n  formSubmitting: false,\n  hasRsvpd: !!window.has_rsvpd,\n  inGuestlist: !!rsvp,\n  rsvpResponse: rsvp && !!window.has_rsvpd ? rsvp.response : 'yes',\n  activeRsvpButton: '',\n  style: window.evite_event.rsvp_style || {},\n  guestId: window.guest_id || '',\n  guestName: rsvp ? rsvp.name : '',\n  altGuestName: window.user_is_registered ? '' : altGuestName,\n  guestEmail: rsvp ? rsvp.email : '',\n  storedGuestId: '',\n  storedGuestName: '',\n  storedGuestEmail: '',\n  totalAdults: rsvp ? rsvp.number_of_adults : 1,\n  totalKids: rsvp ? rsvp.number_of_kids : 0,\n  promptForGuestCount: rsvp ? !rsvp.guest_of : true,\n  comment: '',\n  allowGuests: event_options.event_option_allow_guest_number,\n  allowKids: event_options.event_option_allow_kids,\n  maxGuests: event_options.event_option_max_guest_number || 100, // this is the number of *additional* people coming with the invited guest\n  showNotifyMarketing: rsvp ? !rsvp.optin : true,\n  plusOnesAllowed:\n    !(rsvp && rsvp.guest_of) &&\n    Boolean(event_options.event_option_allow_guest_number) &&\n    Boolean(event_options.event_option_allow_invite_more),\n  plusOnesData: rsvp ? _addIDsToPlusOnesData(rsvp.plus_one_data) : [],\n  plusOnesErrors: {},\n  plusOneEditText: '',\n  // if they have never opted out, the checkbox should be on\n  notifyMarketing: rsvp ? rsvp.optin || !rsvp.optout : true,\n  privateGuestlist: event_options.event_option_private_guestlist,\n  isAnonymous: false,\n  editingName: !window.user_is_registered,\n  inviteMethod: (rsvp && rsvp.invite_method) || '',\n  rsvpErrors: '',\n  showRsvpModalOverlay: !window.has_rsvpd && utils.isMobile(),\n  showInterstitial: false,\n  showConfirmation: !!window.has_rsvpd && utils.isMobile(),\n  messageNotification: window.initial_message_data\n    ? {...window.initial_message_data, visible: true}\n    : {visible: false},\n  rsvpAction: 'frp',\n  notifications: rsvp ? rsvp.notifications : null,\n  isRegisteredUser: window.user_is_registered,\n};\n\nfunction reducer(state = initialState, action) {\n  switch (action.type) {\n    case types.UPDATE_RSVP_FROM_GUEST:\n      // FIXME: setting window.guest_id is a hack that won't update any onscreen components.\n      window.guest_id = action.guest.id;\n      return update(state, {\n        hasRsvpd: {$set: true},\n        inGuestList: {$set: true},\n        rsvpResponse: {$set: action.guest.response},\n        guestId: {$set: action.guest.id},\n        guestName: {$set: action.guest.name},\n        guestEmail: {$set: action.guest.email},\n        totalAdults: {$set: action.guest.number_of_adults},\n        totalKids: {$set: action.guest.number_of_kids},\n        showNotifyMarketing: {$set: action.guest.optin},\n        notifyMarketing: {$set: action.guest.optin || !action.guest.optout},\n        editingName: {$set: false},\n        showChangeRsvp: {$set: false},\n        notifications: {$set: {...action.guest.notifications}},\n        comment: {$set: ''},\n        isRegisteredUser: {$set: action.isRegisteredUser},\n      });\n    case types.UPDATE_NOTIFICATIONS:\n      return update(state, {\n        notifications: {$set: {...action.notifications}},\n      });\n    case types.SET_RSVP_INTERSTITIAL:\n      if (action.value)\n        return update(state, {\n          rsvpInterstitialVariation: {$set: 'interstitial'},\n          rsvpAction: {$set: 'interstitial'},\n        });\n      return update(state, {\n        rsvpInterstitialVariation: {$set: 'control'},\n      });\n    case types.SHOW_RSVP_FORM:\n      return update(state, {\n        showForm: {$set: action.show},\n        rsvpResponse: {$set: window.evite_event.rsvp.response},\n        editingName: {$set: state.editingName},\n      });\n    case types.TOGGLE_RSVP_FORM_VISIBLE:\n      return update(state, {\n        showForm: {$set: state.showForm || !state.showForm},\n        showModal: {$set: !state.showModal},\n        rsvpResponse: {\n          $set:\n            action.response ||\n            (window.evite_event.rsvp ? window.evite_event.rsvp.response : state.rsvpResponse),\n        },\n        activeRsvpButton: {$set: action.response},\n        editingName: {$set: state.editingName},\n        rsvpErrors: {$set: ''},\n        showChangeRsvp: {$set: state.hasRsvpd && action.response},\n      });\n    case types.TOGGLE_VIDEO_MODAL_VISIBILITY:\n      return update(state, {\n        showVideoModal: {$set: !state.showVideoModal},\n      });\n    case types.SET_ACTIVE_RSVP_BUTTON:\n      return update(state, {\n        activeRsvpButton: {$set: action.response},\n      });\n    case types.SET_RSVP_ACTION:\n      return update(state, {\n        rsvpAction: {$set: action.action},\n      });\n    case types.SET_FORM_SUBMITTING:\n      return update(state, {\n        formSubmitting: {$set: action.submitting},\n      });\n    case types.SET_INCOMPLETE_GUEST:\n      return update(state, {\n        inGuestlist: {$set: false},\n      });\n    case types.SET_NOT_YOU:\n      return update(state, {\n        guestId: {$set: ''},\n        isAnonymous: {$set: true},\n        inGuestlist: {$set: false},\n        storedGuestId: {$set: state.guestId},\n        storedGuestName: {$set: state.guestName},\n        storedGuestEmail: {$set: state.guestEmail},\n        guestName: {$set: ''},\n        altGuestName: {$set: ''},\n        guestEmail: {$set: ''},\n        hasRsvpd: {$set: false},\n      });\n    case types.UNSET_NOT_YOU:\n      return update(state, {\n        guestId: {$set: state.storedGuestId},\n        isAnonymous: {$set: false},\n        inGuestlist: {$set: !!rsvp},\n        guestName: {$set: state.storedGuestName},\n        altGuestName: {$set: state.storedGuestName},\n        guestEmail: {$set: state.storedGuestEmail},\n        hasRsvpd: {$set: !!window.has_rsvpd},\n      });\n    case types.SET_EDITING_GUEST_NAME:\n      return update(state, {\n        editingName: {$set: action.editing},\n        altGuestName: {$set: action.guestName},\n      });\n    case types.SET_GUEST_NAME:\n      return update(state, {\n        guestName: {$set: action.guestName},\n      });\n    case types.SET_ALT_GUEST_NAME:\n      return update(state, {\n        altGuestName: {$set: action.altGuestName},\n      });\n    case types.SET_GUEST_EMAIL:\n      return update(state, {\n        guestEmail: {$set: action.guestEmail},\n      });\n    case types.SET_TOTAL_ADULTS:\n      return update(state, {\n        totalAdults: {$set: parseInt(action.adultCount, 10)},\n      });\n    case types.SET_TOTAL_KIDS:\n      return update(state, {\n        totalKids: {$set: parseInt(action.kidCount, 10)},\n      });\n    case types.SET_NOTIFY_MARKETING:\n      return update(state, {\n        notifyMarketing: {$set: action.notify},\n      });\n    case types.SET_RSVP_COMMENT:\n      return update(state, {\n        comment: {$set: action.comment},\n      });\n    case types.TOGGLE_CHANGE_RSVP_VISIBLE:\n      return update(state, {\n        showChangeRsvp: {$set: !state.showChangeRsvp},\n      });\n    case types.SET_RSVP_RESPONSE:\n      return update(state, {\n        rsvpResponse: {$set: action.response},\n      });\n    case types.SET_PLUSONE_DATA:\n      return update(state, {\n        plusOnesData: {$set: action.plusOnesData},\n      });\n    case types.SET_PLUSONE_ERRORS:\n      return update(state, {\n        plusOnesErrors: {$set: action.plusOnesErrors},\n      });\n    case types.SET_PLUSONE_EDIT_TEXT:\n      return update(state, {\n        plusOneEditText: {$set: action.editTextStr},\n      });\n    case types.SHOW_RSVP_ERROR:\n      return update(state, {\n        rsvpErrors: {$set: action.error},\n      });\n    case types.SHOW_RSVP_MODAL_OVERLAY:\n      return update(state, {\n        showRsvpModalOverlay: {$set: action.show},\n      });\n    case types.SHOW_INTERSTITIAL:\n      return update(state, {\n        showInterstitial: {$set: true},\n        showModal: {$set: false},\n      });\n    case types.HIDE_INLINE_FORM:\n      return update(state, {\n        showModal: {$set: false},\n      });\n    case types.HIDE_INTERSTITIAL:\n      return update(state, {\n        showChangeRsvp: {$set: false},\n        showModal: {$set: false},\n        showInterstitial: {$set: false},\n        showConfirmation: {$set: true},\n      });\n    case types.SUBMIT_CONFIRMATION:\n      return update(state, {});\n    default:\n      return state;\n  }\n}\n\nfunction _addIDsToPlusOnesData(plusOnesData) {\n  if (!plusOnesData) return [];\n  for (let idx = 0; idx < plusOnesData.length; idx++) {\n    plusOnesData[idx].id = Math.random();\n  }\n  return plusOnesData;\n}\n\nexport const rsvpReducer = utils.reduceReducers(reducer, modalReducer);\n","export const TOGGLE_SLIDESHOW_VISIBLE = 'TOGGLE_SLIDESHOW_VISIBLE';\nexport const CHANGE_SLIDE = 'CHANGE_SLIDE';\nexport const TOGGLE_COMMENTS_VISIBLE = 'TOGGLE_COMMENTS_VISIBLE';\nexport const SET_COMMENTS_VISIBLE = 'SET_COMMENTS_VISIBLE';\nexport const SET_COMMENT_PADDING = 'SET_COMMENT_PADDING';\nexport const SET_OVERLAY_AD_VISIBLE = 'SET_OVERLAY_AD_VISIBLE';\n","import update from 'immutability-helper';\nimport * as types from './constants';\n\nconst initialState = {\n  isOpen: false,\n  postId: 0,\n  commentsVisible: false,\n  commentPadding: 0,\n  overlayAdVisible: false,\n};\n\nexport function slideshowReducer(state = initialState, action) {\n  switch (action.type) {\n    case types.TOGGLE_SLIDESHOW_VISIBLE:\n      return update(state, {\n        isOpen: {$set: action.isOpen},\n        postId: {$set: action.postId},\n        commentsVisible: {$set: false},\n        overlayAdVisible: {$set: false},\n      });\n    case types.CHANGE_SLIDE:\n      return update(state, {\n        postId: {$set: action.postId},\n      });\n    case types.TOGGLE_COMMENTS_VISIBLE:\n      return update(state, {\n        commentsVisible: {$set: !state.commentsVisible},\n      });\n    case types.SET_COMMENTS_VISIBLE:\n      return update(state, {\n        commentsVisible: {$set: action.commentsVisible},\n      });\n    case types.SET_COMMENT_PADDING:\n      return update(state, {\n        commentPadding: {$set: action.commentPadding},\n      });\n    case types.SET_OVERLAY_AD_VISIBLE:\n      return update(state, {\n        overlayAdVisible: {$set: action.visible},\n      });\n    default:\n      return state;\n  }\n}\n","import {store} from '../store';\nimport * as utils from '../utils';\nimport * as types from './constants';\nimport {getWidget} from '~/view_invitation/utils';\n\nlet widget = null;\n\nexport async function hydrateSponsoredRegistry() {\n  widget = getWidget('sponsored_registry');\n  if (!widget) return;\n\n  const url = `/ajax/event/${window.evite_event.id}/sponsored-registry/${widget.widget_id}/?gid=${window.guest_id}`;\n  const response = await evite.fetch(url, {\n    method: 'get',\n    credentials: 'include',\n    cache: 'no-cache',\n    headers: {\n      'X-CSRFToken': evite.cookie('csrftoken'),\n      Accept: 'application/json',\n    },\n  });\n  if (!response.ok) {\n    utils.renderAjaxErrorModal(response);\n  }\n\n  const data = await response.json();\n  data.data_layer = undefined;\n  store.dispatch({\n    type: types.UPDATE_SPONSORED_REGISTRY,\n    sponsoredRegistry: data,\n  });\n}\n\nexport function selectItem(item, quantity) {\n  const url = getUrlFor('select-item');\n  const data = {\n    item,\n    quantity,\n  };\n  window.$.post(url, data, (response) => {\n    store.dispatch({\n      type: types.UPDATE_SPONSORED_REGISTRY,\n      sponsoredRegistry: response,\n    });\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n}\n\nexport function removeSelection(id) {\n  const url = getUrlFor('remove-selection');\n  const data = {\n    item: id,\n  };\n  window.$.post(url, data, (response) => {\n    store.dispatch({\n      type: types.UPDATE_SPONSORED_REGISTRY,\n      sponsoredRegistry: response,\n    });\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n}\n\nfunction getUrlFor(actionStr) {\n  return `/ajax/event/${window.evite_event.id}/sponsored-registry/${widget.widget_id}/${actionStr}/?gid=${window.guest_id}`;\n}\n","export const UPDATE_SPONSORED_REGISTRY = 'UPDATE_SPONSORED_REGISTRY';\n","import update from 'immutability-helper';\n\nimport * as types from './constants';\n\nconst emptyState = {\n  items: [],\n  editing: true,\n  allow_other_items: false,\n  fetching: true,\n};\n\nconst initialState = emptyState;\n\nexport function sponsoredRegistryReducer(state = initialState, action) {\n  switch (action.type) {\n    case types.UPDATE_SPONSORED_REGISTRY:\n      action.sponsoredRegistry.fetching = false;\n      return update(state, {$set: action.sponsoredRegistry});\n\n    default:\n      return state;\n  }\n}\n","// utility functions for updating the view_invitation mobx stores\n\n/**\n * updates all posts in a given store\n * @param {Object} store - the store we want to update\n * @param {Object} posts - posts can be activity feed posts or photos\n */\nexport const updateAllPosts = (store, posts) => doUpdatePosts(store, posts, false);\n\n/**\n * appends posts to a given store\n * @param {Object} store - the store we want to update\n * @param {Object} posts - posts can be activity feed posts or photos\n */\nexport const appendPosts = (store, posts) => doUpdatePosts(store, posts, true);\n\nconst doUpdatePosts = (store, posts, append) => {\n  if (!posts) return;\n  const {objects, cursor, more, hydratingFeed, fetchingPhotos, hydrated} = posts;\n\n  if (append) store.objects = (store.objects || []).concat(objects);\n  else store.objects = objects;\n  store.cursor = cursor || '';\n  store.more = more;\n\n  if (typeof hydratingFeed === 'boolean') store.hydratingFeed = hydratingFeed;\n  if (typeof fetchingPhotos === 'boolean') store.fetchingPhotos = fetchingPhotos;\n  if (typeof hydrated === 'boolean') store.hydrated = hydrated;\n};\n\n/**\n * adds a single post\n * @param {Object} store - the store we want to update\n * @param {Object} newPost - new post we want to add to the store\n */\nexport const addSinglePost = (store, newPost) => {\n  if (!newPost) return;\n\n  store.objects.unshift(newPost);\n};\n\n/**\n * adds multiple posts to the top\n * @param {Object} store - the store we want to update\n * @param {Object[]} newPosts - new posts we want to add to the store\n */\nexport const addMultiplePosts = (store, newPosts) => {\n  if (!newPosts) return;\n\n  const updatedPosts = [...newPosts.objects, ...store.objects];\n  store.objects = updatedPosts;\n};\n\n/**\n * deletes a post by postId\n * @param {Object} store - the store we want to update\n * @param {string} postId - the ID of the post we want to delete\n */\nexport const deletePostById = (store, postId) => {\n  if (!postId) return;\n\n  const posts = store.objects;\n  for (let i = 0; i < posts.length; i++) {\n    const post = posts[i];\n    if (post.id === postId) {\n      store.objects.splice(i, 1);\n      break;\n    }\n  }\n};\n\n/**\n * 'show more' posts\n * @param {Object} store - the store we want to update\n * @param {string} postId - the ID of the post we want to delete\n */\nexport const getMorePosts = (store, feedPosts) => {\n  if (!feedPosts) return;\n\n  const {objects, cursor, more, hydratingFeed} = feedPosts;\n\n  store.objects = [...store.objects, ...objects];\n  store.cursor = cursor;\n  store.more = more;\n  store.hydratingFeed = hydratingFeed;\n};\n\n/**\n * get the index of a post\n * @param {Object} store - the store we want to search in\n * @param {number} id - the post id to search for\n */\nexport const getPostIndex = (store, id) => store.objects.findIndex((post) => post.id === id);\n\n/**\n * get the index of a reply within a post\n * @param {Object} store - the store we want to search in\n * @param {number} postIndex - the index of the post\n * @param {number} replyId - the reply id to search for\n */\nexport const getReplyIndex = (store, postIndex, replyId) =>\n  store.objects[postIndex].replies.objects.findIndex((reply) => reply.id === replyId);\n","import {combineReducers, compose, createStore, applyMiddleware} from 'redux';\nimport {avatarsReducer} from './avatars/reducers';\nimport {newMessagesReducer} from './event-view-tabs/reducers';\nimport {pollsReducer} from './polls/reducers';\nimport {rsvpReducer} from './rsvp/reducers';\nimport {slideshowReducer} from './slideshow/reducers';\nimport {sponsoredRegistryReducer} from './sponsored-registry/reducers';\nimport {whatToBringReducer} from './what-to-bring/reducers';\nimport {reducer as giftKeywordsReducer} from '../common/gift-keywords/reducer';\n\n// not used here, but it should be part of the main bundle\nimport '~/view_invitation/guestlist/actions';\n\n// Combine Reducers\n// Here we combine reducers into a single object to be used in the store.\n// Important, non-obvious note: The shape of the reducers forms the shape of\n// the store.\n// http://redux.js.org/docs/api/combineReducers.html\nconst eventViewReducer = combineReducers({\n  avatars: avatarsReducer,\n  polls: pollsReducer,\n  rsvp: rsvpReducer,\n  slideshow: slideshowReducer,\n  sponsoredregistry: sponsoredRegistryReducer,\n  whattobring: whatToBringReducer,\n  newMessages: newMessagesReducer,\n  giftKeywords: giftKeywordsReducer,\n});\n\n// Crash reporting Redux middleware for sentry:\n// https://blog.sentry.io/2016/08/24/redux-middleware-error-logging.html\n\n// It would be nice to send state (with extra) but our state is too large...\n// This is also the reason why we cannot use the nicer RavenMiddleware:\n// https://blog.sentry.io/2016/08/24/redux-middleware-error-logging.html#redux-and-sentry\nconst reduxCrashReporter = (store) => (next) => (action) => {\n  try {\n    return next(action); // Dispatch action\n  } catch (err) {\n    Raven.captureException(err, {\n      extra: {\n        action,\n      },\n    });\n    throw err;\n  }\n};\n\n// The devToolsExtension line enables chrome redux-devtools if installed:\n// https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd?hl=en\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\n// Store\n// A store is the application state, composed of the reducer(s)\n// http://redux.js.org/docs/basics/Store.html\nexport const store = createStore(\n  eventViewReducer,\n  composeEnhancers(applyMiddleware(reduxCrashReporter))\n);\n","import {CaptchaDialog} from '~/modal/index';\nimport {modal_ajax_error_handler} from '~/modal/_ajax_error_handler';\nimport {isCanceled} from '~/common/utils/event_utils';\n\nexport function reduceReducers(...reducers) {\n  // This takes 2 reducers and reduces them into a single reducer (from r to l).\n  // We are using this to merge photos and posts reducers, for example. Another\n  // way to look at it is extending a reducer. We can extend the post reducer with\n  // additional actions from the photos reducer.\n  // Example: reducer_A = reduceReducers(reducer_A, reducer_B);\n  return (previous, current) => reducers.reduce((p, r) => r(p, current), previous);\n}\n\nlet guidIndex = 0;\nconst guidPrefix = Math.floor(Math.random() * 2147483647).toString(16);\nexport function guid() {\n  return `${guidPrefix}-${guidIndex++}`;\n}\n\nexport function eventHasPassed() {\n  return !!window.event_has_passed;\n}\n\nexport function isPremium() {\n  return !!window.is_premium;\n}\n\nexport function hasAds() {\n  return !isPremium() && window.evite_event.remove_ads !== true;\n}\n\nexport function isCard() {\n  return !!window.is_card;\n}\n\nexport function canSeeGuests() {\n  return !window.evite_event.options.event_option_private_guestlist;\n}\n\nexport function canRSVP() {\n  return !isCard() && !eventHasPassed() && !isCanceled(window.evite_event.status);\n}\n\nexport function isPreview() {\n  return !!window.is_preview;\n}\n\nexport function isMobile() {\n  return !!window.is_mobile_site;\n}\n\nexport function isMobileDevice() {\n  return !!window.is_mobile;\n}\n\nexport function hasWidget(widget_type) {\n  if (!window.evite_event) return false;\n  const widgets = window.evite_event.widgets || [];\n  for (const widget of widgets) {\n    if (widget.widget_type === widget_type) return true;\n  }\n  return false;\n}\n\nexport function hasSponsoredRegistry() {\n  return hasWidget('sponsored_registry');\n}\n\nexport function getWidget(widget_type) {\n  if (!window.evite_event) return false;\n  const widgets = window.evite_event.widgets || [];\n  for (const widget of widgets) {\n    if (widget.widget_type === widget_type) return widget;\n  }\n}\n\nconst {navigator} = window;\nconst {userAgent} = navigator;\n\nexport function isIpad() {\n  return Boolean(userAgent.match(/iPad/i));\n}\n\nexport function isIphone() {\n  return Boolean(userAgent.match(/iPhone/i));\n}\n\nexport function isFireFox() {\n  return Boolean(userAgent.match(/firefox/i));\n}\n\nexport function isAndroid() {\n  return Boolean(userAgent.match(/android/i));\n}\n\nexport function isWindows() {\n  return (window.navigator.platform || '').match(/Win/i);\n}\n\nexport function isHost() {\n  return !!window.evite_event.is_host_viewing;\n}\n\nexport function isUserAHost(userId) {\n  return window.evite_event.host_ids.includes(userId);\n}\n\nexport function isGuest(state = null) {\n  if (state) return Boolean(state.rsvp.guestId);\n  return Boolean(window.guest_id);\n}\n\nexport function showKnot(storeName = 'template') {\n  return Boolean(\n    window.KNOT_EVENT_TYPES.indexOf(evite.store.get(`${storeName}.event_type`)) !== -1\n  );\n}\nexport function showBump(storeName = 'template') {\n  return Boolean(\n    window.BUMP_EVENT_TYPES.indexOf(evite.store.get(`${storeName}.event_type`)) !== -1\n  );\n}\n\nexport function getGiftingType(storeName) {\n  const show_knot = window.KNOT_EVENT_TYPES ? showKnot(storeName) : window.show_knot;\n  const show_bump = window.BUMP_EVENT_TYPES ? showBump(storeName) : window.show_bump;\n  const giftType = show_knot ? 'knot' : show_bump ? 'bump' : 'amazon';\n\n  return giftType;\n}\n\nexport function hasRsvpd(state = null) {\n  if (state) return state.rsvp.hasRsvpd;\n  return !!window.has_rsvpd;\n}\n\nexport function hasAmazonStoreFront() {\n  return typeof window.amazon_store_front !== 'undefined' && window.amazon_store_front !== null;\n}\n\nexport function isVideo() {\n  return !!window.evite_event.options.video;\n}\n\nexport function canComment(state = null) {\n  if (isCanceled(window.evite_event.status) || (state && isCanceled(state.event?.status))) {\n    return false;\n  }\n  return isGuest(state) && (hasRsvpd(state) || eventHasPassed());\n}\n\nexport function canPostPhotos(state = null) {\n  return isGuest(state) && (hasRsvpd(state) || eventHasPassed());\n}\n\nexport function isBreakPoint(name) {\n  return evite.dom.isBreakPoint(name);\n}\n\nexport function canDeleteEventItem(itemUserId) {\n  return isHost() || window.user_id === itemUserId;\n}\n\nexport function canEditEventItem(itemUserId) {\n  return window.user_id === itemUserId;\n}\n\nexport function eventTabUrlPath(urlPart, urlHash = '') {\n  const qs = window.location.search;\n  return `/event/${window.evite_event.id}/${urlPart}${qs}${urlHash}`;\n}\n\nexport function eventTabUrlPathName(urlPart) {\n  return `/event/${window.evite_event.id}/${urlPart}`;\n}\n\nexport function handleCaptchaJsonResponse(responseJson) {\n  return new Promise((resolve) => {\n    new CaptchaDialog({\n      challenge: responseJson,\n      onSubmit: (_response) => {\n        const captchaResponse = {..._response};\n        captchaResponse.name = undefined;\n        resolve(captchaResponse);\n      },\n    }).show();\n  });\n}\n\nexport function handleCaptcha(xhr, status, data, callback) {\n  if (xhr && xhr.status === 412) {\n    const response = JSON.parse(xhr.responseText);\n    new CaptchaDialog({\n      challenge: response,\n      onSubmit(captcha) {\n        captcha.name = void 0;\n        captcha = JSON.stringify(captcha);\n        callback(captcha);\n      },\n    }).show();\n  } else {\n    renderAjaxErrorModal(xhr, status, data);\n    if (callback) {\n      callback('');\n    }\n  }\n}\n\nexport function renderAjaxErrorModal(xhr, status, data) {\n  const hasStatus = xhr && xhr.status;\n  const isServerError = xhr && xhr.status >= 500 && xhr.status < 600;\n\n  if (hasStatus && (isMobile() || isServerError)) {\n    let message = 'Sorry, an error has occurred';\n    let responseTextMessage;\n\n    try {\n      responseTextMessage = JSON.parse(xhr.responseText).message;\n    } catch (error) {\n      responseTextMessage = xhr.responseText;\n    }\n\n    if (isServerError) {\n      const consoleTitle = typeof data === 'string' ? data : 'Internal Server Error';\n      if (responseTextMessage && console && console.error) {\n        console.error(`${consoleTitle}:\\n\\n${responseTextMessage}\\n`);\n      }\n      message = 'Sorry, an internal server error has occurred';\n    } else if (responseTextMessage) {\n      message = responseTextMessage;\n    }\n\n    alert(message);\n  } else {\n    modal_ajax_error_handler(xhr, status, data);\n  }\n}\n\nexport function pluralize(label, count) {\n  label = count === 1 ? label : `${label}s`;\n  return `${count} ${label}`;\n}\n\nexport function fixupAbsoluteURL(url) {\n  // Adds https:// to url if needed\n  if (url && !url.match(/https?:\\/\\//i)) {\n    if (url[0] !== '/') url = `//${url}`;\n    url = `https:${url}`;\n  }\n  return url;\n}\n\nexport function formatMoney(amount) {\n  return amount.toFixed(2).replace(/(\\d)(?=(\\d{3})+(?:\\.\\d+)?$)/g, '$1,');\n}\n\nexport function indexes(source, find) {\n  const result = [];\n  for (let i = 0; i < source.length; ++i) {\n    if (source.substring(i, i + find.length) === find) {\n      result.push(i);\n    }\n  }\n\n  return result;\n}\n\n// This should only be called from view invitation - returns whether\n// the event being viewed should have its polls be \"meal options\".\n// See EVT-15215 for all the deets.\nexport function isMealOptionsEvent() {\n  return Boolean(window.is_poll_meal_options);\n}\n","import React, {PureComponent} from 'react';\nimport * as utils from './utils';\nimport * as actions from './rsvp/actions';\n\nexport function eventHasDisplayableVideo() {\n  return utils.isVideo() && window.video && JSON.parse(window.video).viewable;\n}\n\nexport class Video extends PureComponent {\n  constructor(props) {\n    super(props);\n    this.state = {\n      viewmap: new Map(JSON.parse(window.video).views),\n    };\n  }\n\n  videoFinished() {\n    actions.toggleVideoModalVisibility();\n  }\n\n  render() {\n    const isChrome = !!window.chrome;\n    let i = 0;\n    const sources = [];\n    this.state.viewmap.forEach((v, k, m) => {\n      sources.push(<source key={i++} src={v} type={k} />);\n    });\n    return (\n      <div id=\"invitation-video-container-id\" className=\"asset invitation-video-container\">\n        {!isChrome && (\n          <video\n            id=\"invitation-video-id\"\n            className=\"invitation-video\"\n            autoPlay\n            controls\n            playsInline\n            onEnded={this.videoFinished}\n          >\n            {sources}\n          </video>\n        )}\n        {isChrome && (\n          <video\n            id=\"invitation-video-id\"\n            className=\"invitation-video\"\n            autoPlay\n            controls\n            muted\n            playsInline\n            onEnded={this.videoFinished}\n          >\n            {sources}\n          </video>\n        )}\n      </div>\n    );\n  }\n}\n","import {store} from '../store';\nimport * as types from './constants';\nimport * as utils from '../utils';\n\nexport async function hydrateWhatToBring() {\n  // get the widget id\n  if (!store.getState().whattobring.hasWhatToBring) return;\n\n  const url = `/ajax/event/${window.evite_event.id}/what-to-bring/?gid=${window.guest_id}`;\n  const response = await evite.fetch(url, {\n    method: 'get',\n    credentials: 'include',\n    cache: 'no-cache',\n    headers: {\n      'X-CSRFToken': evite.cookie('csrftoken'),\n      Accept: 'application/json',\n    },\n  });\n  if (!response.ok) {\n    utils.renderAjaxErrorModal(response);\n  }\n\n  const data = await response.json();\n  store.dispatch({\n    type: types.UPDATE_WHAT_TO_BRING,\n    whatToBring: data,\n  });\n}\n\nexport function createWhatToBring(data) {\n  const url = `/ajax/event/${window.evite_event.id}/what-to-bring/?gid=${window.guest_id}`;\n  window.$.post(url, data, (response) => {\n    store.dispatch({\n      type: types.UPDATE_WHAT_TO_BRING,\n      whatToBring: response,\n    });\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n}\n\nexport function updateWhatToBring(data) {\n  const url = `/ajax/event/${window.evite_event.id}/what-to-bring/update-items/?gid=${window.guest_id}`;\n  window.$.post(url, data, (response) => {\n    store.dispatch({\n      type: types.UPDATE_WHAT_TO_BRING,\n      whatToBring: response,\n    });\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n}\n\nexport function resetWhatToBring(data) {\n  store.dispatch({type: types.UPDATE_WHAT_TO_BRING, whatToBring: data});\n}\n\nexport function updateItemName(index, value) {\n  store.dispatch({\n    type: types.UPDATE_ITEM_NAME,\n    index,\n    value,\n  });\n}\n\nexport function updateItemValidation(index, isDuplicate) {\n  store.dispatch({\n    type: types.UPDATE_ITEM_VALIDATION,\n    index,\n    isDuplicate,\n  });\n}\n\nexport function updateItemQty(index, value) {\n  store.dispatch({\n    type: types.UPDATE_ITEM_QTY,\n    index,\n    value,\n  });\n}\n\nexport function addItem() {\n  store.dispatch({\n    type: types.ADD_ITEM,\n  });\n}\n\nexport function removeItem(index) {\n  store.dispatch({\n    type: types.REMOVE_ITEM,\n    index,\n  });\n}\n\nexport function toggleEdit() {\n  store.dispatch({\n    type: types.TOGGLE_EDIT,\n  });\n}\n\nexport function toggleAllowOtherItems() {\n  store.dispatch({\n    type: types.TOGGLE_ALLOW,\n  });\n}\n\nexport function selectItem(item, name, quantity) {\n  const url = `/ajax/event/${window.evite_event.id}/what-to-bring/select-item/?gid=${window.guest_id}`;\n  const data = {\n    item,\n    name,\n    quantity,\n  };\n  window.$.post(url, data, (response) => {\n    store.dispatch({\n      type: types.UPDATE_WHAT_TO_BRING,\n      whatToBring: response,\n    });\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n}\n\nexport function removeSelection(id) {\n  const url = `/ajax/event/${window.evite_event.id}/what-to-bring/remove-selection/?gid=${window.guest_id}`;\n  const data = {\n    item: id,\n  };\n  window.$.post(url, data, (response) => {\n    store.dispatch({\n      type: types.UPDATE_WHAT_TO_BRING,\n      whatToBring: response,\n    });\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n}\n\nexport function deleteWhatToBring() {\n  const url = `/ajax/event/${window.evite_event.id}/what-to-bring/?gid=${window.guest_id}`;\n  window.$.ajax({\n    url,\n    type: 'DELETE',\n  }).fail((jqXHR, textStatus, errorThrown) => {\n    utils.renderAjaxErrorModal(jqXHR, textStatus, errorThrown);\n  });\n  store.dispatch({\n    type: types.DELETE_WHAT_TO_BRING,\n  });\n}\n\nexport function updateOtherName(index, value) {\n  store.dispatch({\n    type: types.UPDATE_OTHER_NAME,\n    index,\n    value,\n  });\n}\n\nexport function updateOtherQty(index, value) {\n  store.dispatch({\n    type: types.UPDATE_OTHER_QTY,\n    index,\n    value,\n  });\n}\n","export const UPDATE_WHAT_TO_BRING = 'UPDATE_WHAT_TO_BRING';\nexport const UPDATE_ITEM_NAME = 'UPDATE_ITEM_NAME';\nexport const UPDATE_ITEM_VALIDATION = 'UPDATE_ITEM_VALIDATION';\nexport const UPDATE_ITEM_QTY = 'UPDATE_ITEM_QTY';\nexport const ADD_ITEM = 'ADD_ITEM';\nexport const REMOVE_ITEM = 'REMOVE_ITEM';\nexport const TOGGLE_EDIT = 'TOGGLE_EDIT';\nexport const TOGGLE_ALLOW = 'TOGGLE_ALLOW';\nexport const DELETE_WHAT_TO_BRING = 'DELETE_WHAT_TO_BRING';\nexport const UPDATE_OTHER_NAME = 'UDPATE_OTHER_NAME';\nexport const UPDATE_OTHER_QTY = 'UPDATE_OTHER_QTY';\nexport const CANCEL_OTHER = 'CANCEL_OTHER';\n","import update from 'immutability-helper';\nimport {hasWidget} from '~/view_invitation/utils';\n\nimport * as types from './constants';\n\nconst emptyState = {\n  items: [\n    {name: '', quantity: '', placeholder: 'ex: chips', autofocus: true},\n    {name: '', quantity: '', placeholder: 'ex: salsa'},\n    {name: '', quantity: '', placeholder: 'ex: drinks'},\n    {name: '', quantity: '', placeholder: 'ex: cups'},\n  ],\n  editing: true,\n  allow_other_items: false,\n};\n\nconst hasWhatToBring = hasWidget('what_to_bring');\nconst initialState = {\n  hasWhatToBring,\n  fetchingWhatToBring: hasWhatToBring,\n  ...emptyState,\n};\n\nexport function whatToBringReducer(state = initialState, action) {\n  switch (action.type) {\n    case types.UPDATE_WHAT_TO_BRING:\n      action.whatToBring.fetchingWhatToBring = false;\n      action.whatToBring.hasWhatToBring = true;\n      return update(state, {$set: action.whatToBring});\n    case types.UPDATE_ITEM_NAME:\n      return update(state, {\n        items: {\n          [action.index]: {\n            name: {$set: action.value},\n          },\n        },\n      });\n    case types.UPDATE_ITEM_VALIDATION:\n      return update(state, {\n        items: {\n          [action.index]: {\n            isDuplicate: {$set: action.isDuplicate},\n          },\n        },\n      });\n    case types.UPDATE_ITEM_QTY:\n      return update(state, {\n        items: {\n          [action.index]: {\n            quantity: {$set: action.value},\n          },\n        },\n      });\n    case types.ADD_ITEM:\n      return update(state, {\n        items: {\n          $push: [\n            {\n              name: '',\n              quantity: '',\n              autofocus: true,\n            },\n          ],\n        },\n      });\n    case types.REMOVE_ITEM:\n      const filtered = state.items.filter((item, i) => i !== action.index);\n      return update(state, {\n        items: {$set: filtered},\n      });\n    case types.TOGGLE_EDIT:\n      const {editing} = state;\n      return update(state, {\n        editing: {$set: !editing},\n      });\n    case types.TOGGLE_ALLOW:\n      const {allow_other_items} = state;\n      return update(state, {\n        allow_other_items: {$set: !allow_other_items},\n      });\n    case types.DELETE_WHAT_TO_BRING:\n      emptyState.hasWhatToBring = false;\n      return emptyState;\n    case types.UPDATE_OTHER_NAME:\n      return update(state, {\n        items: {\n          other: {\n            name: {$set: action.value},\n          },\n        },\n      });\n    case types.UPDATE_OTHER_QTY:\n      return update(state, {\n        items: {\n          other: {\n            quantity: {$set: action.value},\n          },\n        },\n      });\n    case types.CANCEL_OTHER:\n      return update(state, {});\n\n    default:\n      return state;\n  }\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn target.propertyIsEnumerable(symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","function ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    enumerableOnly && (symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    })), keys.push.apply(keys, symbols);\n  }\n  return keys;\n}\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = null != arguments[i] ? arguments[i] : {};\n    i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n      _defineProperty(target, key, source[key]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n    });\n  }\n  return target;\n}\nfunction _typeof(obj) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  }, _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\n\nvar vendorPrefix;\nvar jsCssMap = {\n  Webkit: '-webkit-',\n  Moz: '-moz-',\n  // IE did it wrong again ...\n  ms: '-ms-',\n  O: '-o-'\n};\nfunction getVendorPrefix() {\n  if (vendorPrefix !== undefined) {\n    return vendorPrefix;\n  }\n  vendorPrefix = '';\n  var style = document.createElement('p').style;\n  var testProp = 'Transform';\n  for (var key in jsCssMap) {\n    if (key + testProp in style) {\n      vendorPrefix = key;\n    }\n  }\n  return vendorPrefix;\n}\nfunction getTransitionName() {\n  return getVendorPrefix() ? \"\".concat(getVendorPrefix(), \"TransitionProperty\") : 'transitionProperty';\n}\nfunction getTransformName() {\n  return getVendorPrefix() ? \"\".concat(getVendorPrefix(), \"Transform\") : 'transform';\n}\nfunction setTransitionProperty(node, value) {\n  var name = getTransitionName();\n  if (name) {\n    node.style[name] = value;\n    if (name !== 'transitionProperty') {\n      node.style.transitionProperty = value;\n    }\n  }\n}\nfunction setTransform(node, value) {\n  var name = getTransformName();\n  if (name) {\n    node.style[name] = value;\n    if (name !== 'transform') {\n      node.style.transform = value;\n    }\n  }\n}\nfunction getTransitionProperty(node) {\n  return node.style.transitionProperty || node.style[getTransitionName()];\n}\nfunction getTransformXY(node) {\n  var style = window.getComputedStyle(node, null);\n  var transform = style.getPropertyValue('transform') || style.getPropertyValue(getTransformName());\n  if (transform && transform !== 'none') {\n    var matrix = transform.replace(/[^0-9\\-.,]/g, '').split(',');\n    return {\n      x: parseFloat(matrix[12] || matrix[4], 0),\n      y: parseFloat(matrix[13] || matrix[5], 0)\n    };\n  }\n  return {\n    x: 0,\n    y: 0\n  };\n}\nvar matrix2d = /matrix\\((.*)\\)/;\nvar matrix3d = /matrix3d\\((.*)\\)/;\nfunction setTransformXY(node, xy) {\n  var style = window.getComputedStyle(node, null);\n  var transform = style.getPropertyValue('transform') || style.getPropertyValue(getTransformName());\n  if (transform && transform !== 'none') {\n    var arr;\n    var match2d = transform.match(matrix2d);\n    if (match2d) {\n      match2d = match2d[1];\n      arr = match2d.split(',').map(function (item) {\n        return parseFloat(item, 10);\n      });\n      arr[4] = xy.x;\n      arr[5] = xy.y;\n      setTransform(node, \"matrix(\".concat(arr.join(','), \")\"));\n    } else {\n      var match3d = transform.match(matrix3d)[1];\n      arr = match3d.split(',').map(function (item) {\n        return parseFloat(item, 10);\n      });\n      arr[12] = xy.x;\n      arr[13] = xy.y;\n      setTransform(node, \"matrix3d(\".concat(arr.join(','), \")\"));\n    }\n  } else {\n    setTransform(node, \"translateX(\".concat(xy.x, \"px) translateY(\").concat(xy.y, \"px) translateZ(0)\"));\n  }\n}\n\nvar RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\nvar getComputedStyleX;\n\n// https://stackoverflow.com/a/3485654/3040605\nfunction forceRelayout(elem) {\n  var originalStyle = elem.style.display;\n  elem.style.display = 'none';\n  elem.offsetHeight; // eslint-disable-line\n  elem.style.display = originalStyle;\n}\nfunction css(el, name, v) {\n  var value = v;\n  if (_typeof(name) === 'object') {\n    for (var i in name) {\n      if (name.hasOwnProperty(i)) {\n        css(el, i, name[i]);\n      }\n    }\n    return undefined;\n  }\n  if (typeof value !== 'undefined') {\n    if (typeof value === 'number') {\n      value = \"\".concat(value, \"px\");\n    }\n    el.style[name] = value;\n    return undefined;\n  }\n  return getComputedStyleX(el, name);\n}\nfunction getClientPosition(elem) {\n  var box;\n  var x;\n  var y;\n  var doc = elem.ownerDocument;\n  var body = doc.body;\n  var docElem = doc && doc.documentElement;\n  // 根据 GBS 最新数据，A-Grade Browsers 都已支持 getBoundingClientRect 方法，不用再考虑传统的实现方式\n  box = elem.getBoundingClientRect();\n\n  // 注：jQuery 还考虑减去 docElem.clientLeft/clientTop\n  // 但测试发现，这样反而会导致当 html 和 body 有边距/边框样式时，获取的值不正确\n  // 此外，ie6 会忽略 html 的 margin 值，幸运地是没有谁会去设置 html 的 margin\n\n  x = Math.floor(box.left);\n  y = Math.floor(box.top);\n\n  // In IE, most of the time, 2 extra pixels are added to the top and left\n  // due to the implicit 2-pixel inset border.  In IE6/7 quirks mode and\n  // IE6 standards mode, this border can be overridden by setting the\n  // document element's border to zero -- thus, we cannot rely on the\n  // offset always being 2 pixels.\n\n  // In quirks mode, the offset can be determined by querying the body's\n  // clientLeft/clientTop, but in standards mode, it is found by querying\n  // the document element's clientLeft/clientTop.  Since we already called\n  // getClientBoundingRect we have already forced a reflow, so it is not\n  // too expensive just to query them all.\n\n  // ie 下应该减去窗口的边框吧，毕竟默认 absolute 都是相对窗口定位的\n  // 窗口边框标准是设 documentElement ,quirks 时设置 body\n  // 最好禁止在 body 和 html 上边框 ，但 ie < 9 html 默认有 2px ，减去\n  // 但是非 ie 不可能设置窗口边框，body html 也不是窗口 ,ie 可以通过 html,body 设置\n  // 标准 ie 下 docElem.clientTop 就是 border-top\n  // ie7 html 即窗口边框改变不了。永远为 2\n  // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框，即使设了 border-top 也为 0\n\n  x -= docElem.clientLeft || body.clientLeft || 0;\n  y -= docElem.clientTop || body.clientTop || 0;\n  return {\n    left: x,\n    top: y\n  };\n}\nfunction getScroll(w, top) {\n  var ret = w[\"page\".concat(top ? 'Y' : 'X', \"Offset\")];\n  var method = \"scroll\".concat(top ? 'Top' : 'Left');\n  if (typeof ret !== 'number') {\n    var d = w.document;\n    // ie6,7,8 standard mode\n    ret = d.documentElement[method];\n    if (typeof ret !== 'number') {\n      // quirks mode\n      ret = d.body[method];\n    }\n  }\n  return ret;\n}\nfunction getScrollLeft(w) {\n  return getScroll(w);\n}\nfunction getScrollTop(w) {\n  return getScroll(w, true);\n}\nfunction getOffset(el) {\n  var pos = getClientPosition(el);\n  var doc = el.ownerDocument;\n  var w = doc.defaultView || doc.parentWindow;\n  pos.left += getScrollLeft(w);\n  pos.top += getScrollTop(w);\n  return pos;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n  // must use == for ie8\n  /* eslint eqeqeq:0 */\n  return obj !== null && obj !== undefined && obj == obj.window;\n}\nfunction getDocument(node) {\n  if (isWindow(node)) {\n    return node.document;\n  }\n  if (node.nodeType === 9) {\n    return node;\n  }\n  return node.ownerDocument;\n}\nfunction _getComputedStyle(elem, name, cs) {\n  var computedStyle = cs;\n  var val = '';\n  var d = getDocument(elem);\n  computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null);\n\n  // https://github.com/kissyteam/kissy/issues/61\n  if (computedStyle) {\n    val = computedStyle.getPropertyValue(name) || computedStyle[name];\n  }\n  return val;\n}\nvar _RE_NUM_NO_PX = new RegExp(\"^(\".concat(RE_NUM, \")(?!px)[a-z%]+$\"), 'i');\nvar RE_POS = /^(top|right|bottom|left)$/;\nvar CURRENT_STYLE = 'currentStyle';\nvar RUNTIME_STYLE = 'runtimeStyle';\nvar LEFT = 'left';\nvar PX = 'px';\nfunction _getComputedStyleIE(elem, name) {\n  // currentStyle maybe null\n  // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n  var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n  // 当 width/height 设置为百分比时，通过 pixelLeft 方式转换的 width/height 值\n  // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n  // 在 ie 下不对，需要直接用 offset 方式\n  // borderWidth 等值也有问题，但考虑到 borderWidth 设为百分比的概率很小，这里就不考虑了\n\n  // From the awesome hack by Dean Edwards\n  // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n  // If we're not dealing with a regular pixel number\n  // but a number that has a weird ending, we need to convert it to pixels\n  // exclude left right for relativity\n  if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n    // Remember the original values\n    var style = elem.style;\n    var left = style[LEFT];\n    var rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n    // prevent flashing of content\n    elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n    // Put in the new values to get a computed value out\n    style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n    ret = style.pixelLeft + PX;\n\n    // Revert the changed values\n    style[LEFT] = left;\n    elem[RUNTIME_STYLE][LEFT] = rsLeft;\n  }\n  return ret === '' ? 'auto' : ret;\n}\nif (typeof window !== 'undefined') {\n  getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE;\n}\nfunction getOffsetDirection(dir, option) {\n  if (dir === 'left') {\n    return option.useCssRight ? 'right' : dir;\n  }\n  return option.useCssBottom ? 'bottom' : dir;\n}\nfunction oppositeOffsetDirection(dir) {\n  if (dir === 'left') {\n    return 'right';\n  } else if (dir === 'right') {\n    return 'left';\n  } else if (dir === 'top') {\n    return 'bottom';\n  } else if (dir === 'bottom') {\n    return 'top';\n  }\n}\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setLeftTop(elem, offset, option) {\n  // set position first, in-case top/left are set even on static elem\n  if (css(elem, 'position') === 'static') {\n    elem.style.position = 'relative';\n  }\n  var presetH = -999;\n  var presetV = -999;\n  var horizontalProperty = getOffsetDirection('left', option);\n  var verticalProperty = getOffsetDirection('top', option);\n  var oppositeHorizontalProperty = oppositeOffsetDirection(horizontalProperty);\n  var oppositeVerticalProperty = oppositeOffsetDirection(verticalProperty);\n  if (horizontalProperty !== 'left') {\n    presetH = 999;\n  }\n  if (verticalProperty !== 'top') {\n    presetV = 999;\n  }\n  var originalTransition = '';\n  var originalOffset = getOffset(elem);\n  if ('left' in offset || 'top' in offset) {\n    originalTransition = getTransitionProperty(elem) || '';\n    setTransitionProperty(elem, 'none');\n  }\n  if ('left' in offset) {\n    elem.style[oppositeHorizontalProperty] = '';\n    elem.style[horizontalProperty] = \"\".concat(presetH, \"px\");\n  }\n  if ('top' in offset) {\n    elem.style[oppositeVerticalProperty] = '';\n    elem.style[verticalProperty] = \"\".concat(presetV, \"px\");\n  }\n  // force relayout\n  forceRelayout(elem);\n  var old = getOffset(elem);\n  var originalStyle = {};\n  for (var key in offset) {\n    if (offset.hasOwnProperty(key)) {\n      var dir = getOffsetDirection(key, option);\n      var preset = key === 'left' ? presetH : presetV;\n      var off = originalOffset[key] - old[key];\n      if (dir === key) {\n        originalStyle[dir] = preset + off;\n      } else {\n        originalStyle[dir] = preset - off;\n      }\n    }\n  }\n  css(elem, originalStyle);\n  // force relayout\n  forceRelayout(elem);\n  if ('left' in offset || 'top' in offset) {\n    setTransitionProperty(elem, originalTransition);\n  }\n  var ret = {};\n  for (var _key in offset) {\n    if (offset.hasOwnProperty(_key)) {\n      var _dir = getOffsetDirection(_key, option);\n      var _off = offset[_key] - originalOffset[_key];\n      if (_key === _dir) {\n        ret[_dir] = originalStyle[_dir] + _off;\n      } else {\n        ret[_dir] = originalStyle[_dir] - _off;\n      }\n    }\n  }\n  css(elem, ret);\n}\nfunction setTransform$1(elem, offset) {\n  var originalOffset = getOffset(elem);\n  var originalXY = getTransformXY(elem);\n  var resultXY = {\n    x: originalXY.x,\n    y: originalXY.y\n  };\n  if ('left' in offset) {\n    resultXY.x = originalXY.x + offset.left - originalOffset.left;\n  }\n  if ('top' in offset) {\n    resultXY.y = originalXY.y + offset.top - originalOffset.top;\n  }\n  setTransformXY(elem, resultXY);\n}\nfunction setOffset(elem, offset, option) {\n  if (option.ignoreShake) {\n    var oriOffset = getOffset(elem);\n    var oLeft = oriOffset.left.toFixed(0);\n    var oTop = oriOffset.top.toFixed(0);\n    var tLeft = offset.left.toFixed(0);\n    var tTop = offset.top.toFixed(0);\n    if (oLeft === tLeft && oTop === tTop) {\n      return;\n    }\n  }\n  if (option.useCssRight || option.useCssBottom) {\n    setLeftTop(elem, offset, option);\n  } else if (option.useCssTransform && getTransformName() in document.body.style) {\n    setTransform$1(elem, offset);\n  } else {\n    setLeftTop(elem, offset, option);\n  }\n}\nfunction each(arr, fn) {\n  for (var i = 0; i < arr.length; i++) {\n    fn(arr[i]);\n  }\n}\nfunction isBorderBoxFn(elem) {\n  return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\nvar BOX_MODELS = ['margin', 'border', 'padding'];\nvar CONTENT_INDEX = -1;\nvar PADDING_INDEX = 2;\nvar BORDER_INDEX = 1;\nvar MARGIN_INDEX = 0;\nfunction swap(elem, options, callback) {\n  var old = {};\n  var style = elem.style;\n  var name;\n\n  // Remember the old values, and insert the new ones\n  for (name in options) {\n    if (options.hasOwnProperty(name)) {\n      old[name] = style[name];\n      style[name] = options[name];\n    }\n  }\n  callback.call(elem);\n\n  // Revert the old values\n  for (name in options) {\n    if (options.hasOwnProperty(name)) {\n      style[name] = old[name];\n    }\n  }\n}\nfunction getPBMWidth(elem, props, which) {\n  var value = 0;\n  var prop;\n  var j;\n  var i;\n  for (j = 0; j < props.length; j++) {\n    prop = props[j];\n    if (prop) {\n      for (i = 0; i < which.length; i++) {\n        var cssProp = void 0;\n        if (prop === 'border') {\n          cssProp = \"\".concat(prop).concat(which[i], \"Width\");\n        } else {\n          cssProp = prop + which[i];\n        }\n        value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n      }\n    }\n  }\n  return value;\n}\nvar domUtils = {\n  getParent: function getParent(element) {\n    var parent = element;\n    do {\n      if (parent.nodeType === 11 && parent.host) {\n        parent = parent.host;\n      } else {\n        parent = parent.parentNode;\n      }\n    } while (parent && parent.nodeType !== 1 && parent.nodeType !== 9);\n    return parent;\n  }\n};\neach(['Width', 'Height'], function (name) {\n  domUtils[\"doc\".concat(name)] = function (refWin) {\n    var d = refWin.document;\n    return Math.max(\n    // firefox chrome documentElement.scrollHeight< body.scrollHeight\n    // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n    d.documentElement[\"scroll\".concat(name)],\n    // quirks : documentElement.scrollHeight 最大等于可视窗口多一点？\n    d.body[\"scroll\".concat(name)], domUtils[\"viewport\".concat(name)](d));\n  };\n  domUtils[\"viewport\".concat(name)] = function (win) {\n    // pc browser includes scrollbar in window.innerWidth\n    var prop = \"client\".concat(name);\n    var doc = win.document;\n    var body = doc.body;\n    var documentElement = doc.documentElement;\n    var documentElementProp = documentElement[prop];\n    // 标准模式取 documentElement\n    // backcompat 取 body\n    return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp;\n  };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra]  'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, ex) {\n  var extra = ex;\n  if (isWindow(elem)) {\n    return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem);\n  } else if (elem.nodeType === 9) {\n    return name === 'width' ? domUtils.docWidth(elem) : domUtils.docHeight(elem);\n  }\n  var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n  var borderBoxValue = name === 'width' ? Math.floor(elem.getBoundingClientRect().width) : Math.floor(elem.getBoundingClientRect().height);\n  var isBorderBox = isBorderBoxFn(elem);\n  var cssBoxValue = 0;\n  if (borderBoxValue === null || borderBoxValue === undefined || borderBoxValue <= 0) {\n    borderBoxValue = undefined;\n    // Fall back to computed then un computed css if necessary\n    cssBoxValue = getComputedStyleX(elem, name);\n    if (cssBoxValue === null || cssBoxValue === undefined || Number(cssBoxValue) < 0) {\n      cssBoxValue = elem.style[name] || 0;\n    }\n    // Normalize '', auto, and prepare for extra\n    cssBoxValue = Math.floor(parseFloat(cssBoxValue)) || 0;\n  }\n  if (extra === undefined) {\n    extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n  }\n  var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox;\n  var val = borderBoxValue || cssBoxValue;\n  if (extra === CONTENT_INDEX) {\n    if (borderBoxValueOrIsBorderBox) {\n      return val - getPBMWidth(elem, ['border', 'padding'], which);\n    }\n    return cssBoxValue;\n  } else if (borderBoxValueOrIsBorderBox) {\n    if (extra === BORDER_INDEX) {\n      return val;\n    }\n    return val + (extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which) : getPBMWidth(elem, ['margin'], which));\n  }\n  return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which);\n}\nvar cssShow = {\n  position: 'absolute',\n  visibility: 'hidden',\n  display: 'block'\n};\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay() {\n  for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n  var val;\n  var elem = args[0];\n  // in case elem is window\n  // elem.offsetWidth === undefined\n  if (elem.offsetWidth !== 0) {\n    val = getWH.apply(undefined, args);\n  } else {\n    swap(elem, cssShow, function () {\n      val = getWH.apply(undefined, args);\n    });\n  }\n  return val;\n}\neach(['width', 'height'], function (name) {\n  var first = name.charAt(0).toUpperCase() + name.slice(1);\n  domUtils[\"outer\".concat(first)] = function (el, includeMargin) {\n    return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX);\n  };\n  var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n  domUtils[name] = function (elem, v) {\n    var val = v;\n    if (val !== undefined) {\n      if (elem) {\n        var isBorderBox = isBorderBoxFn(elem);\n        if (isBorderBox) {\n          val += getPBMWidth(elem, ['padding', 'border'], which);\n        }\n        return css(elem, name, val);\n      }\n      return undefined;\n    }\n    return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n  };\n});\nfunction mix(to, from) {\n  for (var i in from) {\n    if (from.hasOwnProperty(i)) {\n      to[i] = from[i];\n    }\n  }\n  return to;\n}\nvar utils = {\n  getWindow: function getWindow(node) {\n    if (node && node.document && node.setTimeout) {\n      return node;\n    }\n    var doc = node.ownerDocument || node;\n    return doc.defaultView || doc.parentWindow;\n  },\n  getDocument: getDocument,\n  offset: function offset(el, value, option) {\n    if (typeof value !== 'undefined') {\n      setOffset(el, value, option || {});\n    } else {\n      return getOffset(el);\n    }\n  },\n  isWindow: isWindow,\n  each: each,\n  css: css,\n  clone: function clone(obj) {\n    var i;\n    var ret = {};\n    for (i in obj) {\n      if (obj.hasOwnProperty(i)) {\n        ret[i] = obj[i];\n      }\n    }\n    var overflow = obj.overflow;\n    if (overflow) {\n      for (i in obj) {\n        if (obj.hasOwnProperty(i)) {\n          ret.overflow[i] = obj.overflow[i];\n        }\n      }\n    }\n    return ret;\n  },\n  mix: mix,\n  getWindowScrollLeft: function getWindowScrollLeft(w) {\n    return getScrollLeft(w);\n  },\n  getWindowScrollTop: function getWindowScrollTop(w) {\n    return getScrollTop(w);\n  },\n  merge: function merge() {\n    var ret = {};\n    for (var i = 0; i < arguments.length; i++) {\n      utils.mix(ret, i < 0 || arguments.length <= i ? undefined : arguments[i]);\n    }\n    return ret;\n  },\n  viewportWidth: 0,\n  viewportHeight: 0\n};\nmix(utils, domUtils);\n\n/**\n * 得到会导致元素显示不全的祖先元素\n */\nvar getParent = utils.getParent;\nfunction getOffsetParent(element) {\n  if (utils.isWindow(element) || element.nodeType === 9) {\n    return null;\n  }\n  // ie 这个也不是完全可行\n  /*\n   <div style=\"width: 50px;height: 100px;overflow: hidden\">\n   <div style=\"width: 50px;height: 100px;position: relative;\" id=\"d6\">\n   元素 6 高 100px 宽 50px<br/>\n   </div>\n   </div>\n   */\n  // element.offsetParent does the right thing in ie7 and below. Return parent with layout!\n  //  In other browsers it only includes elements with position absolute, relative or\n  // fixed, not elements with overflow set to auto or scroll.\n  //        if (UA.ie && ieMode < 8) {\n  //            return element.offsetParent;\n  //        }\n  // 统一的 offsetParent 方法\n  var doc = utils.getDocument(element);\n  var body = doc.body;\n  var parent;\n  var positionStyle = utils.css(element, 'position');\n  var skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute';\n  if (!skipStatic) {\n    return element.nodeName.toLowerCase() === 'html' ? null : getParent(element);\n  }\n  for (parent = getParent(element); parent && parent !== body && parent.nodeType !== 9; parent = getParent(parent)) {\n    positionStyle = utils.css(parent, 'position');\n    if (positionStyle !== 'static') {\n      return parent;\n    }\n  }\n  return null;\n}\n\nvar getParent$1 = utils.getParent;\nfunction isAncestorFixed(element) {\n  if (utils.isWindow(element) || element.nodeType === 9) {\n    return false;\n  }\n  var doc = utils.getDocument(element);\n  var body = doc.body;\n  var parent = null;\n  for (parent = getParent$1(element);\n  // 修复元素位于 document.documentElement 下导致崩溃问题\n  parent && parent !== body && parent !== doc; parent = getParent$1(parent)) {\n    var positionStyle = utils.css(parent, 'position');\n    if (positionStyle === 'fixed') {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * 获得元素的显示部分的区域\n */\nfunction getVisibleRectForElement(element, alwaysByViewport) {\n  var visibleRect = {\n    left: 0,\n    right: Infinity,\n    top: 0,\n    bottom: Infinity\n  };\n  var el = getOffsetParent(element);\n  var doc = utils.getDocument(element);\n  var win = doc.defaultView || doc.parentWindow;\n  var body = doc.body;\n  var documentElement = doc.documentElement;\n\n  // Determine the size of the visible rect by climbing the dom accounting for\n  // all scrollable containers.\n  while (el) {\n    // clientWidth is zero for inline block elements in ie.\n    if ((navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) &&\n    // body may have overflow set on it, yet we still get the entire\n    // viewport. In some browsers, el.offsetParent may be\n    // document.documentElement, so check for that too.\n    el !== body && el !== documentElement && utils.css(el, 'overflow') !== 'visible') {\n      var pos = utils.offset(el);\n      // add border\n      pos.left += el.clientLeft;\n      pos.top += el.clientTop;\n      visibleRect.top = Math.max(visibleRect.top, pos.top);\n      visibleRect.right = Math.min(visibleRect.right,\n      // consider area without scrollBar\n      pos.left + el.clientWidth);\n      visibleRect.bottom = Math.min(visibleRect.bottom, pos.top + el.clientHeight);\n      visibleRect.left = Math.max(visibleRect.left, pos.left);\n    } else if (el === body || el === documentElement) {\n      break;\n    }\n    el = getOffsetParent(el);\n  }\n\n  // Set element position to fixed\n  // make sure absolute element itself don't affect it's visible area\n  // https://github.com/ant-design/ant-design/issues/7601\n  var originalPosition = null;\n  if (!utils.isWindow(element) && element.nodeType !== 9) {\n    originalPosition = element.style.position;\n    var position = utils.css(element, 'position');\n    if (position === 'absolute') {\n      element.style.position = 'fixed';\n    }\n  }\n  var scrollX = utils.getWindowScrollLeft(win);\n  var scrollY = utils.getWindowScrollTop(win);\n  var viewportWidth = utils.viewportWidth(win);\n  var viewportHeight = utils.viewportHeight(win);\n  var documentWidth = documentElement.scrollWidth;\n  var documentHeight = documentElement.scrollHeight;\n\n  // scrollXXX on html is sync with body which means overflow: hidden on body gets wrong scrollXXX.\n  // We should cut this ourself.\n  var bodyStyle = window.getComputedStyle(body);\n  if (bodyStyle.overflowX === 'hidden') {\n    documentWidth = win.innerWidth;\n  }\n  if (bodyStyle.overflowY === 'hidden') {\n    documentHeight = win.innerHeight;\n  }\n\n  // Reset element position after calculate the visible area\n  if (element.style) {\n    element.style.position = originalPosition;\n  }\n  if (alwaysByViewport || isAncestorFixed(element)) {\n    // Clip by viewport's size.\n    visibleRect.left = Math.max(visibleRect.left, scrollX);\n    visibleRect.top = Math.max(visibleRect.top, scrollY);\n    visibleRect.right = Math.min(visibleRect.right, scrollX + viewportWidth);\n    visibleRect.bottom = Math.min(visibleRect.bottom, scrollY + viewportHeight);\n  } else {\n    // Clip by document's size.\n    var maxVisibleWidth = Math.max(documentWidth, scrollX + viewportWidth);\n    visibleRect.right = Math.min(visibleRect.right, maxVisibleWidth);\n    var maxVisibleHeight = Math.max(documentHeight, scrollY + viewportHeight);\n    visibleRect.bottom = Math.min(visibleRect.bottom, maxVisibleHeight);\n  }\n  return visibleRect.top >= 0 && visibleRect.left >= 0 && visibleRect.bottom > visibleRect.top && visibleRect.right > visibleRect.left ? visibleRect : null;\n}\n\nfunction adjustForViewport(elFuturePos, elRegion, visibleRect, overflow) {\n  var pos = utils.clone(elFuturePos);\n  var size = {\n    width: elRegion.width,\n    height: elRegion.height\n  };\n  if (overflow.adjustX && pos.left < visibleRect.left) {\n    pos.left = visibleRect.left;\n  }\n\n  // Left edge inside and right edge outside viewport, try to resize it.\n  if (overflow.resizeWidth && pos.left >= visibleRect.left && pos.left + size.width > visibleRect.right) {\n    size.width -= pos.left + size.width - visibleRect.right;\n  }\n\n  // Right edge outside viewport, try to move it.\n  if (overflow.adjustX && pos.left + size.width > visibleRect.right) {\n    // 保证左边界和可视区域左边界对齐\n    pos.left = Math.max(visibleRect.right - size.width, visibleRect.left);\n  }\n\n  // Top edge outside viewport, try to move it.\n  if (overflow.adjustY && pos.top < visibleRect.top) {\n    pos.top = visibleRect.top;\n  }\n\n  // Top edge inside and bottom edge outside viewport, try to resize it.\n  if (overflow.resizeHeight && pos.top >= visibleRect.top && pos.top + size.height > visibleRect.bottom) {\n    size.height -= pos.top + size.height - visibleRect.bottom;\n  }\n\n  // Bottom edge outside viewport, try to move it.\n  if (overflow.adjustY && pos.top + size.height > visibleRect.bottom) {\n    // 保证上边界和可视区域上边界对齐\n    pos.top = Math.max(visibleRect.bottom - size.height, visibleRect.top);\n  }\n  return utils.mix(pos, size);\n}\n\nfunction getRegion(node) {\n  var offset;\n  var w;\n  var h;\n  if (!utils.isWindow(node) && node.nodeType !== 9) {\n    offset = utils.offset(node);\n    w = utils.outerWidth(node);\n    h = utils.outerHeight(node);\n  } else {\n    var win = utils.getWindow(node);\n    offset = {\n      left: utils.getWindowScrollLeft(win),\n      top: utils.getWindowScrollTop(win)\n    };\n    w = utils.viewportWidth(win);\n    h = utils.viewportHeight(win);\n  }\n  offset.width = w;\n  offset.height = h;\n  return offset;\n}\n\n/**\n * 获取 node 上的 align 对齐点 相对于页面的坐标\n */\n\nfunction getAlignOffset(region, align) {\n  var V = align.charAt(0);\n  var H = align.charAt(1);\n  var w = region.width;\n  var h = region.height;\n  var x = region.left;\n  var y = region.top;\n  if (V === 'c') {\n    y += h / 2;\n  } else if (V === 'b') {\n    y += h;\n  }\n  if (H === 'c') {\n    x += w / 2;\n  } else if (H === 'r') {\n    x += w;\n  }\n  return {\n    left: x,\n    top: y\n  };\n}\n\nfunction getElFuturePos(elRegion, refNodeRegion, points, offset, targetOffset) {\n  var p1 = getAlignOffset(refNodeRegion, points[1]);\n  var p2 = getAlignOffset(elRegion, points[0]);\n  var diff = [p2.left - p1.left, p2.top - p1.top];\n  return {\n    left: Math.round(elRegion.left - diff[0] + offset[0] - targetOffset[0]),\n    top: Math.round(elRegion.top - diff[1] + offset[1] - targetOffset[1])\n  };\n}\n\n/**\n * align dom node flexibly\n * @author yiminghe@gmail.com\n */\n\n// http://yiminghe.iteye.com/blog/1124720\n\nfunction isFailX(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.left < visibleRect.left || elFuturePos.left + elRegion.width > visibleRect.right;\n}\nfunction isFailY(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.top < visibleRect.top || elFuturePos.top + elRegion.height > visibleRect.bottom;\n}\nfunction isCompleteFailX(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.left > visibleRect.right || elFuturePos.left + elRegion.width < visibleRect.left;\n}\nfunction isCompleteFailY(elFuturePos, elRegion, visibleRect) {\n  return elFuturePos.top > visibleRect.bottom || elFuturePos.top + elRegion.height < visibleRect.top;\n}\nfunction flip(points, reg, map) {\n  var ret = [];\n  utils.each(points, function (p) {\n    ret.push(p.replace(reg, function (m) {\n      return map[m];\n    }));\n  });\n  return ret;\n}\nfunction flipOffset(offset, index) {\n  offset[index] = -offset[index];\n  return offset;\n}\nfunction convertOffset(str, offsetLen) {\n  var n;\n  if (/%$/.test(str)) {\n    n = parseInt(str.substring(0, str.length - 1), 10) / 100 * offsetLen;\n  } else {\n    n = parseInt(str, 10);\n  }\n  return n || 0;\n}\nfunction normalizeOffset(offset, el) {\n  offset[0] = convertOffset(offset[0], el.width);\n  offset[1] = convertOffset(offset[1], el.height);\n}\n\n/**\n * @param el\n * @param tgtRegion 参照节点所占的区域: { left, top, width, height }\n * @param align\n */\nfunction doAlign(el, tgtRegion, align, isTgtRegionVisible) {\n  var points = align.points;\n  var offset = align.offset || [0, 0];\n  var targetOffset = align.targetOffset || [0, 0];\n  var overflow = align.overflow;\n  var source = align.source || el;\n  offset = [].concat(offset);\n  targetOffset = [].concat(targetOffset);\n  overflow = overflow || {};\n  var newOverflowCfg = {};\n  var fail = 0;\n  var alwaysByViewport = !!(overflow && overflow.alwaysByViewport);\n  // 当前节点可以被放置的显示区域\n  var visibleRect = getVisibleRectForElement(source, alwaysByViewport);\n  // 当前节点所占的区域, left/top/width/height\n  var elRegion = getRegion(source);\n  // 将 offset 转换成数值，支持百分比\n  normalizeOffset(offset, elRegion);\n  normalizeOffset(targetOffset, tgtRegion);\n  // 当前节点将要被放置的位置\n  var elFuturePos = getElFuturePos(elRegion, tgtRegion, points, offset, targetOffset);\n  // 当前节点将要所处的区域\n  var newElRegion = utils.merge(elRegion, elFuturePos);\n\n  // 如果可视区域不能完全放置当前节点时允许调整\n  if (visibleRect && (overflow.adjustX || overflow.adjustY) && isTgtRegionVisible) {\n    if (overflow.adjustX) {\n      // 如果横向不能放下\n      if (isFailX(elFuturePos, elRegion, visibleRect)) {\n        // 对齐位置反下\n        var newPoints = flip(points, /[lr]/gi, {\n          l: 'r',\n          r: 'l'\n        });\n        // 偏移量也反下\n        var newOffset = flipOffset(offset, 0);\n        var newTargetOffset = flipOffset(targetOffset, 0);\n        var newElFuturePos = getElFuturePos(elRegion, tgtRegion, newPoints, newOffset, newTargetOffset);\n        if (!isCompleteFailX(newElFuturePos, elRegion, visibleRect)) {\n          fail = 1;\n          points = newPoints;\n          offset = newOffset;\n          targetOffset = newTargetOffset;\n        }\n      }\n    }\n    if (overflow.adjustY) {\n      // 如果纵向不能放下\n      if (isFailY(elFuturePos, elRegion, visibleRect)) {\n        // 对齐位置反下\n        var _newPoints = flip(points, /[tb]/gi, {\n          t: 'b',\n          b: 't'\n        });\n        // 偏移量也反下\n        var _newOffset = flipOffset(offset, 1);\n        var _newTargetOffset = flipOffset(targetOffset, 1);\n        var _newElFuturePos = getElFuturePos(elRegion, tgtRegion, _newPoints, _newOffset, _newTargetOffset);\n        if (!isCompleteFailY(_newElFuturePos, elRegion, visibleRect)) {\n          fail = 1;\n          points = _newPoints;\n          offset = _newOffset;\n          targetOffset = _newTargetOffset;\n        }\n      }\n    }\n\n    // 如果失败，重新计算当前节点将要被放置的位置\n    if (fail) {\n      elFuturePos = getElFuturePos(elRegion, tgtRegion, points, offset, targetOffset);\n      utils.mix(newElRegion, elFuturePos);\n    }\n    var isStillFailX = isFailX(elFuturePos, elRegion, visibleRect);\n    var isStillFailY = isFailY(elFuturePos, elRegion, visibleRect);\n    // 检查反下后的位置是否可以放下了，如果仍然放不下：\n    // 1. 复原修改过的定位参数\n    if (isStillFailX || isStillFailY) {\n      var _newPoints2 = points;\n\n      // 重置对应部分的翻转逻辑\n      if (isStillFailX) {\n        _newPoints2 = flip(points, /[lr]/gi, {\n          l: 'r',\n          r: 'l'\n        });\n      }\n      if (isStillFailY) {\n        _newPoints2 = flip(points, /[tb]/gi, {\n          t: 'b',\n          b: 't'\n        });\n      }\n      points = _newPoints2;\n      offset = align.offset || [0, 0];\n      targetOffset = align.targetOffset || [0, 0];\n    }\n    // 2. 只有指定了可以调整当前方向才调整\n    newOverflowCfg.adjustX = overflow.adjustX && isStillFailX;\n    newOverflowCfg.adjustY = overflow.adjustY && isStillFailY;\n\n    // 确实要调整，甚至可能会调整高度宽度\n    if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) {\n      newElRegion = adjustForViewport(elFuturePos, elRegion, visibleRect, newOverflowCfg);\n    }\n  }\n\n  // need judge to in case set fixed with in css on height auto element\n  if (newElRegion.width !== elRegion.width) {\n    utils.css(source, 'width', utils.width(source) + newElRegion.width - elRegion.width);\n  }\n  if (newElRegion.height !== elRegion.height) {\n    utils.css(source, 'height', utils.height(source) + newElRegion.height - elRegion.height);\n  }\n\n  // https://github.com/kissyteam/kissy/issues/190\n  // 相对于屏幕位置没变，而 left/top 变了\n  // 例如 <div 'relative'><el absolute></div>\n  utils.offset(source, {\n    left: newElRegion.left,\n    top: newElRegion.top\n  }, {\n    useCssRight: align.useCssRight,\n    useCssBottom: align.useCssBottom,\n    useCssTransform: align.useCssTransform,\n    ignoreShake: align.ignoreShake\n  });\n  return {\n    points: points,\n    offset: offset,\n    targetOffset: targetOffset,\n    overflow: newOverflowCfg\n  };\n}\n/**\n *  2012-04-26 yiminghe@gmail.com\n *   - 优化智能对齐算法\n *   - 慎用 resizeXX\n *\n *  2011-07-13 yiminghe@gmail.com note:\n *   - 增加智能对齐，以及大小调整选项\n **/\n\nfunction isOutOfVisibleRect(target, alwaysByViewport) {\n  var visibleRect = getVisibleRectForElement(target, alwaysByViewport);\n  var targetRegion = getRegion(target);\n  return !visibleRect || targetRegion.left + targetRegion.width <= visibleRect.left || targetRegion.top + targetRegion.height <= visibleRect.top || targetRegion.left >= visibleRect.right || targetRegion.top >= visibleRect.bottom;\n}\nfunction alignElement(el, refNode, align) {\n  var target = align.target || refNode;\n  var refNodeRegion = getRegion(target);\n  var isTargetNotOutOfVisible = !isOutOfVisibleRect(target, align.overflow && align.overflow.alwaysByViewport);\n  return doAlign(el, refNodeRegion, align, isTargetNotOutOfVisible);\n}\nalignElement.__getOffsetParent = getOffsetParent;\nalignElement.__getVisibleRectForElement = getVisibleRectForElement;\n\n/**\n * `tgtPoint`: { pageX, pageY } or { clientX, clientY }.\n * If client position provided, will internal convert to page position.\n */\n\nfunction alignPoint(el, tgtPoint, align) {\n  var pageX;\n  var pageY;\n  var doc = utils.getDocument(el);\n  var win = doc.defaultView || doc.parentWindow;\n  var scrollX = utils.getWindowScrollLeft(win);\n  var scrollY = utils.getWindowScrollTop(win);\n  var viewportWidth = utils.viewportWidth(win);\n  var viewportHeight = utils.viewportHeight(win);\n  if ('pageX' in tgtPoint) {\n    pageX = tgtPoint.pageX;\n  } else {\n    pageX = scrollX + tgtPoint.clientX;\n  }\n  if ('pageY' in tgtPoint) {\n    pageY = tgtPoint.pageY;\n  } else {\n    pageY = scrollY + tgtPoint.clientY;\n  }\n  var tgtRegion = {\n    left: pageX,\n    top: pageY,\n    width: 0,\n    height: 0\n  };\n  var pointInView = pageX >= 0 && pageX <= scrollX + viewportWidth && pageY >= 0 && pageY <= scrollY + viewportHeight;\n\n  // Provide default target point\n  var points = [align.points[0], 'cc'];\n  return doAlign(el, tgtRegion, _objectSpread2(_objectSpread2({}, align), {}, {\n    points: points\n  }), pointInView);\n}\n\nexport default alignElement;\nexport { alignElement, alignPoint };\n//# sourceMappingURL=index.js.map\n","/*! @license DOMPurify 2.3.10 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.3.10/LICENSE */\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.DOMPurify = factory());\n})(this, (function () { 'use strict';\n\n  function _typeof(obj) {\n    \"@babel/helpers - typeof\";\n\n    return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n      return typeof obj;\n    } : function (obj) {\n      return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    }, _typeof(obj);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n\n    return _setPrototypeOf(o, p);\n  }\n\n  function _isNativeReflectConstruct() {\n    if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n    if (Reflect.construct.sham) return false;\n    if (typeof Proxy === \"function\") return true;\n\n    try {\n      Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  function _construct(Parent, args, Class) {\n    if (_isNativeReflectConstruct()) {\n      _construct = Reflect.construct;\n    } else {\n      _construct = function _construct(Parent, args, Class) {\n        var a = [null];\n        a.push.apply(a, args);\n        var Constructor = Function.bind.apply(Parent, a);\n        var instance = new Constructor();\n        if (Class) _setPrototypeOf(instance, Class.prototype);\n        return instance;\n      };\n    }\n\n    return _construct.apply(null, arguments);\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n  }\n\n  function _iterableToArray(iter) {\n    if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n  }\n\n  function _unsupportedIterableToArray(o, minLen) {\n    if (!o) return;\n    if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n    var n = Object.prototype.toString.call(o).slice(8, -1);\n    if (n === \"Object\" && o.constructor) n = o.constructor.name;\n    if (n === \"Map\" || n === \"Set\") return Array.from(o);\n    if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n  }\n\n  function _arrayLikeToArray(arr, len) {\n    if (len == null || len > arr.length) len = arr.length;\n\n    for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n    return arr2;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var hasOwnProperty = Object.hasOwnProperty,\n      setPrototypeOf = Object.setPrototypeOf,\n      isFrozen = Object.isFrozen,\n      getPrototypeOf = Object.getPrototypeOf,\n      getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n  var freeze = Object.freeze,\n      seal = Object.seal,\n      create = Object.create; // eslint-disable-line import/no-mutable-exports\n\n  var _ref = typeof Reflect !== 'undefined' && Reflect,\n      apply = _ref.apply,\n      construct = _ref.construct;\n\n  if (!apply) {\n    apply = function apply(fun, thisValue, args) {\n      return fun.apply(thisValue, args);\n    };\n  }\n\n  if (!freeze) {\n    freeze = function freeze(x) {\n      return x;\n    };\n  }\n\n  if (!seal) {\n    seal = function seal(x) {\n      return x;\n    };\n  }\n\n  if (!construct) {\n    construct = function construct(Func, args) {\n      return _construct(Func, _toConsumableArray(args));\n    };\n  }\n\n  var arrayForEach = unapply(Array.prototype.forEach);\n  var arrayPop = unapply(Array.prototype.pop);\n  var arrayPush = unapply(Array.prototype.push);\n  var stringToLowerCase = unapply(String.prototype.toLowerCase);\n  var stringMatch = unapply(String.prototype.match);\n  var stringReplace = unapply(String.prototype.replace);\n  var stringIndexOf = unapply(String.prototype.indexOf);\n  var stringTrim = unapply(String.prototype.trim);\n  var regExpTest = unapply(RegExp.prototype.test);\n  var typeErrorCreate = unconstruct(TypeError);\n  function unapply(func) {\n    return function (thisArg) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      return apply(func, thisArg, args);\n    };\n  }\n  function unconstruct(func) {\n    return function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return construct(func, args);\n    };\n  }\n  /* Add properties to a lookup table */\n\n  function addToSet(set, array, transformCaseFunc) {\n    transformCaseFunc = transformCaseFunc ? transformCaseFunc : stringToLowerCase;\n\n    if (setPrototypeOf) {\n      // Make 'in' and truthy checks like Boolean(set.constructor)\n      // independent of any properties defined on Object.prototype.\n      // Prevent prototype setters from intercepting set as a this value.\n      setPrototypeOf(set, null);\n    }\n\n    var l = array.length;\n\n    while (l--) {\n      var element = array[l];\n\n      if (typeof element === 'string') {\n        var lcElement = transformCaseFunc(element);\n\n        if (lcElement !== element) {\n          // Config presets (e.g. tags.js, attrs.js) are immutable.\n          if (!isFrozen(array)) {\n            array[l] = lcElement;\n          }\n\n          element = lcElement;\n        }\n      }\n\n      set[element] = true;\n    }\n\n    return set;\n  }\n  /* Shallow clone an object */\n\n  function clone(object) {\n    var newObject = create(null);\n    var property;\n\n    for (property in object) {\n      if (apply(hasOwnProperty, object, [property])) {\n        newObject[property] = object[property];\n      }\n    }\n\n    return newObject;\n  }\n  /* IE10 doesn't support __lookupGetter__ so lets'\n   * simulate it. It also automatically checks\n   * if the prop is function or getter and behaves\n   * accordingly. */\n\n  function lookupGetter(object, prop) {\n    while (object !== null) {\n      var desc = getOwnPropertyDescriptor(object, prop);\n\n      if (desc) {\n        if (desc.get) {\n          return unapply(desc.get);\n        }\n\n        if (typeof desc.value === 'function') {\n          return unapply(desc.value);\n        }\n      }\n\n      object = getPrototypeOf(object);\n    }\n\n    function fallbackValue(element) {\n      console.warn('fallback value for', element);\n      return null;\n    }\n\n    return fallbackValue;\n  }\n\n  var html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']); // SVG\n\n  var svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n  var svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']); // List of SVG elements that are disallowed by default.\n  // We still need to know them so that we can do namespace\n  // checks properly in case one wants to add them to\n  // allow-list.\n\n  var svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'fedropshadow', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n  var mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']); // Similarly to SVG, we want to know all MathML elements,\n  // even those that we disallow by default.\n\n  var mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n  var text = freeze(['#text']);\n\n  var html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);\n  var svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n  var mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n  var xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n  var MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n\n  var ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n  var DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n\n  var ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n\n  var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n  );\n  var IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n  var ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n  );\n  var DOCTYPE_NAME = seal(/^html$/i);\n\n  var getGlobal = function getGlobal() {\n    return typeof window === 'undefined' ? null : window;\n  };\n  /**\n   * Creates a no-op policy for internal use only.\n   * Don't export this function outside this module!\n   * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.\n   * @param {Document} document The document object (to determine policy name suffix)\n   * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types\n   * are not supported).\n   */\n\n\n  var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {\n    if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n      return null;\n    } // Allow the callers to control the unique policy name\n    // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n    // Policy creation with duplicate names throws in Trusted Types.\n\n\n    var suffix = null;\n    var ATTR_NAME = 'data-tt-policy-suffix';\n\n    if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {\n      suffix = document.currentScript.getAttribute(ATTR_NAME);\n    }\n\n    var policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n\n    try {\n      return trustedTypes.createPolicy(policyName, {\n        createHTML: function createHTML(html) {\n          return html;\n        },\n        createScriptURL: function createScriptURL(scriptUrl) {\n          return scriptUrl;\n        }\n      });\n    } catch (_) {\n      // Policy creation failed (most likely another DOMPurify script has\n      // already run). Skip creating the policy, as this will only cause errors\n      // if TT are enforced.\n      console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n      return null;\n    }\n  };\n\n  function createDOMPurify() {\n    var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n\n    var DOMPurify = function DOMPurify(root) {\n      return createDOMPurify(root);\n    };\n    /**\n     * Version label, exposed for easier checks\n     * if DOMPurify is up to date or not\n     */\n\n\n    DOMPurify.version = '2.3.10';\n    /**\n     * Array of elements that DOMPurify removed during sanitation.\n     * Empty if nothing was removed.\n     */\n\n    DOMPurify.removed = [];\n\n    if (!window || !window.document || window.document.nodeType !== 9) {\n      // Not running in a browser, provide a factory function\n      // so that you can pass your own Window\n      DOMPurify.isSupported = false;\n      return DOMPurify;\n    }\n\n    var originalDocument = window.document;\n    var document = window.document;\n    var DocumentFragment = window.DocumentFragment,\n        HTMLTemplateElement = window.HTMLTemplateElement,\n        Node = window.Node,\n        Element = window.Element,\n        NodeFilter = window.NodeFilter,\n        _window$NamedNodeMap = window.NamedNodeMap,\n        NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,\n        HTMLFormElement = window.HTMLFormElement,\n        DOMParser = window.DOMParser,\n        trustedTypes = window.trustedTypes;\n    var ElementPrototype = Element.prototype;\n    var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n    var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n    var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n    var getParentNode = lookupGetter(ElementPrototype, 'parentNode'); // As per issue #47, the web-components registry is inherited by a\n    // new document created via createHTMLDocument. As per the spec\n    // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n    // a new empty registry is used when creating a template contents owner\n    // document, so we use that as our parent document to ensure nothing\n    // is inherited.\n\n    if (typeof HTMLTemplateElement === 'function') {\n      var template = document.createElement('template');\n\n      if (template.content && template.content.ownerDocument) {\n        document = template.content.ownerDocument;\n      }\n    }\n\n    var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);\n\n    var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';\n    var _document = document,\n        implementation = _document.implementation,\n        createNodeIterator = _document.createNodeIterator,\n        createDocumentFragment = _document.createDocumentFragment,\n        getElementsByTagName = _document.getElementsByTagName;\n    var importNode = originalDocument.importNode;\n    var documentMode = {};\n\n    try {\n      documentMode = clone(document).documentMode ? document.documentMode : {};\n    } catch (_) {}\n\n    var hooks = {};\n    /**\n     * Expose whether this browser supports running the full DOMPurify.\n     */\n\n    DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;\n    var MUSTACHE_EXPR$1 = MUSTACHE_EXPR,\n        ERB_EXPR$1 = ERB_EXPR,\n        DATA_ATTR$1 = DATA_ATTR,\n        ARIA_ATTR$1 = ARIA_ATTR,\n        IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA,\n        ATTR_WHITESPACE$1 = ATTR_WHITESPACE;\n    var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;\n    /**\n     * We consider the elements and attributes below to be safe. Ideally\n     * don't add any new ones but feel free to remove unwanted ones.\n     */\n\n    /* allowed element names */\n\n    var ALLOWED_TAGS = null;\n    var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));\n    /* Allowed attribute names */\n\n    var ALLOWED_ATTR = null;\n    var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));\n    /*\n     * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n     * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n     * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n     * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n     */\n\n    var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {\n      tagNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null\n      },\n      attributeNameCheck: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: null\n      },\n      allowCustomizedBuiltInElements: {\n        writable: true,\n        configurable: false,\n        enumerable: true,\n        value: false\n      }\n    }));\n    /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n\n    var FORBID_TAGS = null;\n    /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n\n    var FORBID_ATTR = null;\n    /* Decide if ARIA attributes are okay */\n\n    var ALLOW_ARIA_ATTR = true;\n    /* Decide if custom data attributes are okay */\n\n    var ALLOW_DATA_ATTR = true;\n    /* Decide if unknown protocols are okay */\n\n    var ALLOW_UNKNOWN_PROTOCOLS = false;\n    /* Output should be safe for common template engines.\n     * This means, DOMPurify removes data attributes, mustaches and ERB\n     */\n\n    var SAFE_FOR_TEMPLATES = false;\n    /* Decide if document with <html>... should be returned */\n\n    var WHOLE_DOCUMENT = false;\n    /* Track whether config is already set on this instance of DOMPurify. */\n\n    var SET_CONFIG = false;\n    /* Decide if all elements (e.g. style, script) must be children of\n     * document.body. By default, browsers might move them to document.head */\n\n    var FORCE_BODY = false;\n    /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n     * string (or a TrustedHTML object if Trusted Types are supported).\n     * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n     */\n\n    var RETURN_DOM = false;\n    /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n     * string  (or a TrustedHTML object if Trusted Types are supported) */\n\n    var RETURN_DOM_FRAGMENT = false;\n    /* Try to return a Trusted Type object instead of a string, return a string in\n     * case Trusted Types are not supported  */\n\n    var RETURN_TRUSTED_TYPE = false;\n    /* Output should be free from DOM clobbering attacks? */\n\n    var SANITIZE_DOM = true;\n    /* Keep element content when removing element? */\n\n    var KEEP_CONTENT = true;\n    /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n     * of importing it into a new Document and returning a sanitized copy */\n\n    var IN_PLACE = false;\n    /* Allow usage of profiles like html, svg and mathMl */\n\n    var USE_PROFILES = {};\n    /* Tags to ignore content of when KEEP_CONTENT is true */\n\n    var FORBID_CONTENTS = null;\n    var DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n    /* Tags that are safe for data: URIs */\n\n    var DATA_URI_TAGS = null;\n    var DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n    /* Attributes safe for values like \"javascript:\" */\n\n    var URI_SAFE_ATTRIBUTES = null;\n    var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n    var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n    var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n    var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n    /* Document namespace */\n\n    var NAMESPACE = HTML_NAMESPACE;\n    var IS_EMPTY_INPUT = false;\n    /* Parsing of strict XHTML documents */\n\n    var PARSER_MEDIA_TYPE;\n    var SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n    var DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n    var transformCaseFunc;\n    /* Keep a reference to config to pass to hooks */\n\n    var CONFIG = null;\n    /* Ideally, do not touch anything below this line */\n\n    /* ______________________________________________ */\n\n    var formElement = document.createElement('form');\n\n    var isRegexOrFunction = function isRegexOrFunction(testValue) {\n      return testValue instanceof RegExp || testValue instanceof Function;\n    };\n    /**\n     * _parseConfig\n     *\n     * @param  {Object} cfg optional config literal\n     */\n    // eslint-disable-next-line complexity\n\n\n    var _parseConfig = function _parseConfig(cfg) {\n      if (CONFIG && CONFIG === cfg) {\n        return;\n      }\n      /* Shield configuration object from tampering */\n\n\n      if (!cfg || _typeof(cfg) !== 'object') {\n        cfg = {};\n      }\n      /* Shield configuration object from prototype pollution */\n\n\n      cfg = clone(cfg);\n      PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes\n      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE; // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n\n      transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? function (x) {\n        return x;\n      } : stringToLowerCase;\n      /* Set configuration parameters */\n\n      ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n      ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n      URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n      cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n      transformCaseFunc // eslint-disable-line indent\n      ) // eslint-disable-line indent\n      : DEFAULT_URI_SAFE_ATTRIBUTES;\n      DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n      cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n      transformCaseFunc // eslint-disable-line indent\n      ) // eslint-disable-line indent\n      : DEFAULT_DATA_URI_TAGS;\n      FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n      FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n      FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n      USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;\n      ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n\n      ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n\n      ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n\n      SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n\n      WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n\n      RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n\n      RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n\n      RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n\n      FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n\n      SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n\n      KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n\n      IN_PLACE = cfg.IN_PLACE || false; // Default false\n\n      IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;\n      NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n\n      if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n        CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n      }\n\n      if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n        CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n      }\n\n      if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n        CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n      }\n\n      if (SAFE_FOR_TEMPLATES) {\n        ALLOW_DATA_ATTR = false;\n      }\n\n      if (RETURN_DOM_FRAGMENT) {\n        RETURN_DOM = true;\n      }\n      /* Parse profile info */\n\n\n      if (USE_PROFILES) {\n        ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));\n        ALLOWED_ATTR = [];\n\n        if (USE_PROFILES.html === true) {\n          addToSet(ALLOWED_TAGS, html$1);\n          addToSet(ALLOWED_ATTR, html);\n        }\n\n        if (USE_PROFILES.svg === true) {\n          addToSet(ALLOWED_TAGS, svg$1);\n          addToSet(ALLOWED_ATTR, svg);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n\n        if (USE_PROFILES.svgFilters === true) {\n          addToSet(ALLOWED_TAGS, svgFilters);\n          addToSet(ALLOWED_ATTR, svg);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n\n        if (USE_PROFILES.mathMl === true) {\n          addToSet(ALLOWED_TAGS, mathMl$1);\n          addToSet(ALLOWED_ATTR, mathMl);\n          addToSet(ALLOWED_ATTR, xml);\n        }\n      }\n      /* Merge configuration parameters */\n\n\n      if (cfg.ADD_TAGS) {\n        if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n          ALLOWED_TAGS = clone(ALLOWED_TAGS);\n        }\n\n        addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n      }\n\n      if (cfg.ADD_ATTR) {\n        if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n          ALLOWED_ATTR = clone(ALLOWED_ATTR);\n        }\n\n        addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n      }\n\n      if (cfg.ADD_URI_SAFE_ATTR) {\n        addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n      }\n\n      if (cfg.FORBID_CONTENTS) {\n        if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n          FORBID_CONTENTS = clone(FORBID_CONTENTS);\n        }\n\n        addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n      }\n      /* Add #text in case KEEP_CONTENT is set to true */\n\n\n      if (KEEP_CONTENT) {\n        ALLOWED_TAGS['#text'] = true;\n      }\n      /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n\n\n      if (WHOLE_DOCUMENT) {\n        addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n      }\n      /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n\n\n      if (ALLOWED_TAGS.table) {\n        addToSet(ALLOWED_TAGS, ['tbody']);\n        delete FORBID_TAGS.tbody;\n      } // Prevent further manipulation of configuration.\n      // Not available in IE8, Safari 5, etc.\n\n\n      if (freeze) {\n        freeze(cfg);\n      }\n\n      CONFIG = cfg;\n    };\n\n    var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n    var HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']); // Certain elements are allowed in both SVG and HTML\n    // namespace. We need to specify them explicitly\n    // so that they don't get erroneously deleted from\n    // HTML namespace.\n\n    var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n    /* Keep track of all possible SVG and MathML tags\n     * so that we can perform the namespace checks\n     * correctly. */\n\n    var ALL_SVG_TAGS = addToSet({}, svg$1);\n    addToSet(ALL_SVG_TAGS, svgFilters);\n    addToSet(ALL_SVG_TAGS, svgDisallowed);\n    var ALL_MATHML_TAGS = addToSet({}, mathMl$1);\n    addToSet(ALL_MATHML_TAGS, mathMlDisallowed);\n    /**\n     *\n     *\n     * @param  {Element} element a DOM element whose namespace is being checked\n     * @returns {boolean} Return false if the element has a\n     *  namespace that a spec-compliant parser would never\n     *  return. Return true otherwise.\n     */\n\n    var _checkValidNamespace = function _checkValidNamespace(element) {\n      var parent = getParentNode(element); // In JSDOM, if we're inside shadow DOM, then parentNode\n      // can be null. We just simulate parent in this case.\n\n      if (!parent || !parent.tagName) {\n        parent = {\n          namespaceURI: HTML_NAMESPACE,\n          tagName: 'template'\n        };\n      }\n\n      var tagName = stringToLowerCase(element.tagName);\n      var parentTagName = stringToLowerCase(parent.tagName);\n\n      if (element.namespaceURI === SVG_NAMESPACE) {\n        // The only way to switch from HTML namespace to SVG\n        // is via <svg>. If it happens via any other tag, then\n        // it should be killed.\n        if (parent.namespaceURI === HTML_NAMESPACE) {\n          return tagName === 'svg';\n        } // The only way to switch from MathML to SVG is via\n        // svg if parent is either <annotation-xml> or MathML\n        // text integration points.\n\n\n        if (parent.namespaceURI === MATHML_NAMESPACE) {\n          return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n        } // We only allow elements that are defined in SVG\n        // spec. All others are disallowed in SVG namespace.\n\n\n        return Boolean(ALL_SVG_TAGS[tagName]);\n      }\n\n      if (element.namespaceURI === MATHML_NAMESPACE) {\n        // The only way to switch from HTML namespace to MathML\n        // is via <math>. If it happens via any other tag, then\n        // it should be killed.\n        if (parent.namespaceURI === HTML_NAMESPACE) {\n          return tagName === 'math';\n        } // The only way to switch from SVG to MathML is via\n        // <math> and HTML integration points\n\n\n        if (parent.namespaceURI === SVG_NAMESPACE) {\n          return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n        } // We only allow elements that are defined in MathML\n        // spec. All others are disallowed in MathML namespace.\n\n\n        return Boolean(ALL_MATHML_TAGS[tagName]);\n      }\n\n      if (element.namespaceURI === HTML_NAMESPACE) {\n        // The only way to switch from SVG to HTML is via\n        // HTML integration points, and from MathML to HTML\n        // is via MathML text integration points\n        if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n          return false;\n        }\n\n        if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n          return false;\n        } // We disallow tags that are specific for MathML\n        // or SVG and should never appear in HTML namespace\n\n\n        return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n      } // The code should never reach this place (this means\n      // that the element somehow got namespace that is not\n      // HTML, SVG or MathML). Return false just in case.\n\n\n      return false;\n    };\n    /**\n     * _forceRemove\n     *\n     * @param  {Node} node a DOM node\n     */\n\n\n    var _forceRemove = function _forceRemove(node) {\n      arrayPush(DOMPurify.removed, {\n        element: node\n      });\n\n      try {\n        // eslint-disable-next-line unicorn/prefer-dom-node-remove\n        node.parentNode.removeChild(node);\n      } catch (_) {\n        try {\n          node.outerHTML = emptyHTML;\n        } catch (_) {\n          node.remove();\n        }\n      }\n    };\n    /**\n     * _removeAttribute\n     *\n     * @param  {String} name an Attribute name\n     * @param  {Node} node a DOM node\n     */\n\n\n    var _removeAttribute = function _removeAttribute(name, node) {\n      try {\n        arrayPush(DOMPurify.removed, {\n          attribute: node.getAttributeNode(name),\n          from: node\n        });\n      } catch (_) {\n        arrayPush(DOMPurify.removed, {\n          attribute: null,\n          from: node\n        });\n      }\n\n      node.removeAttribute(name); // We void attribute values for unremovable \"is\"\" attributes\n\n      if (name === 'is' && !ALLOWED_ATTR[name]) {\n        if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n          try {\n            _forceRemove(node);\n          } catch (_) {}\n        } else {\n          try {\n            node.setAttribute(name, '');\n          } catch (_) {}\n        }\n      }\n    };\n    /**\n     * _initDocument\n     *\n     * @param  {String} dirty a string of dirty markup\n     * @return {Document} a DOM, filled with the dirty markup\n     */\n\n\n    var _initDocument = function _initDocument(dirty) {\n      /* Create a HTML document */\n      var doc;\n      var leadingWhitespace;\n\n      if (FORCE_BODY) {\n        dirty = '<remove></remove>' + dirty;\n      } else {\n        /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n        var matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n        leadingWhitespace = matches && matches[0];\n      }\n\n      if (PARSER_MEDIA_TYPE === 'application/xhtml+xml') {\n        // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n        dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n      }\n\n      var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      /*\n       * Use the DOMParser API by default, fallback later if needs be\n       * DOMParser not work for svg when has multiple root element.\n       */\n\n      if (NAMESPACE === HTML_NAMESPACE) {\n        try {\n          doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n        } catch (_) {}\n      }\n      /* Use createHTMLDocument in case DOMParser is not available */\n\n\n      if (!doc || !doc.documentElement) {\n        doc = implementation.createDocument(NAMESPACE, 'template', null);\n\n        try {\n          doc.documentElement.innerHTML = IS_EMPTY_INPUT ? '' : dirtyPayload;\n        } catch (_) {// Syntax error if dirtyPayload is invalid xml\n        }\n      }\n\n      var body = doc.body || doc.documentElement;\n\n      if (dirty && leadingWhitespace) {\n        body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n      }\n      /* Work on whole document or just its body */\n\n\n      if (NAMESPACE === HTML_NAMESPACE) {\n        return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n      }\n\n      return WHOLE_DOCUMENT ? doc.documentElement : body;\n    };\n    /**\n     * _createIterator\n     *\n     * @param  {Document} root document/fragment to create iterator for\n     * @return {Iterator} iterator instance\n     */\n\n\n    var _createIterator = function _createIterator(root) {\n      return createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise\n      NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);\n    };\n    /**\n     * _isClobbered\n     *\n     * @param  {Node} elm element to check for clobbering attacks\n     * @return {Boolean} true if clobbered, false if safe\n     */\n\n\n    var _isClobbered = function _isClobbered(elm) {\n      return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function');\n    };\n    /**\n     * _isNode\n     *\n     * @param  {Node} obj object to check whether it's a DOM node\n     * @return {Boolean} true is object is a DOM node\n     */\n\n\n    var _isNode = function _isNode(object) {\n      return _typeof(Node) === 'object' ? object instanceof Node : object && _typeof(object) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';\n    };\n    /**\n     * _executeHook\n     * Execute user configurable hooks\n     *\n     * @param  {String} entryPoint  Name of the hook's entry point\n     * @param  {Node} currentNode node to work on with the hook\n     * @param  {Object} data additional hook parameters\n     */\n\n\n    var _executeHook = function _executeHook(entryPoint, currentNode, data) {\n      if (!hooks[entryPoint]) {\n        return;\n      }\n\n      arrayForEach(hooks[entryPoint], function (hook) {\n        hook.call(DOMPurify, currentNode, data, CONFIG);\n      });\n    };\n    /**\n     * _sanitizeElements\n     *\n     * @protect nodeName\n     * @protect textContent\n     * @protect removeChild\n     *\n     * @param   {Node} currentNode to check for permission to exist\n     * @return  {Boolean} true if node was killed, false if left alive\n     */\n\n\n    var _sanitizeElements = function _sanitizeElements(currentNode) {\n      var content;\n      /* Execute a hook if present */\n\n      _executeHook('beforeSanitizeElements', currentNode, null);\n      /* Check if element is clobbered or can clobber */\n\n\n      if (_isClobbered(currentNode)) {\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Check if tagname contains Unicode */\n\n\n      if (regExpTest(/[\\u0080-\\uFFFF]/, currentNode.nodeName)) {\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Now let's check the element's type and name */\n\n\n      var tagName = transformCaseFunc(currentNode.nodeName);\n      /* Execute a hook if present */\n\n      _executeHook('uponSanitizeElement', currentNode, {\n        tagName: tagName,\n        allowedTags: ALLOWED_TAGS\n      });\n      /* Detect mXSS attempts abusing namespace confusion */\n\n\n      if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Mitigate a problem with templates inside select */\n\n\n      if (tagName === 'select' && regExpTest(/<template/i, currentNode.innerHTML)) {\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Remove element if anything forbids its presence */\n\n\n      if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n        /* Check if we have a custom element to handle */\n        if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {\n          if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;\n          if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) return false;\n        }\n        /* Keep content except for bad-listed elements */\n\n\n        if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n          var parentNode = getParentNode(currentNode) || currentNode.parentNode;\n          var childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n\n          if (childNodes && parentNode) {\n            var childCount = childNodes.length;\n\n            for (var i = childCount - 1; i >= 0; --i) {\n              parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));\n            }\n          }\n        }\n\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Check whether element has a valid namespace */\n\n\n      if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n        _forceRemove(currentNode);\n\n        return true;\n      }\n\n      if ((tagName === 'noscript' || tagName === 'noembed') && regExpTest(/<\\/no(script|embed)/i, currentNode.innerHTML)) {\n        _forceRemove(currentNode);\n\n        return true;\n      }\n      /* Sanitize element content to be template-safe */\n\n\n      if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {\n        /* Get the element's text content */\n        content = currentNode.textContent;\n        content = stringReplace(content, MUSTACHE_EXPR$1, ' ');\n        content = stringReplace(content, ERB_EXPR$1, ' ');\n\n        if (currentNode.textContent !== content) {\n          arrayPush(DOMPurify.removed, {\n            element: currentNode.cloneNode()\n          });\n          currentNode.textContent = content;\n        }\n      }\n      /* Execute a hook if present */\n\n\n      _executeHook('afterSanitizeElements', currentNode, null);\n\n      return false;\n    };\n    /**\n     * _isValidAttribute\n     *\n     * @param  {string} lcTag Lowercase tag name of containing element.\n     * @param  {string} lcName Lowercase attribute name.\n     * @param  {string} value Attribute value.\n     * @return {Boolean} Returns true if `value` is valid, otherwise false.\n     */\n    // eslint-disable-next-line complexity\n\n\n    var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n      /* Make sure attribute cannot clobber */\n      if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n        return false;\n      }\n      /* Allow valid data-* attributes: At least one character after \"-\"\n          (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n          XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n          We don't need to check the value; it's always URI safe. */\n\n\n      if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$1, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n        if ( // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n        // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n        _basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND\n        // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n          return false;\n        }\n        /* Check value is safe. First, is attr inert? If so, is safe */\n\n      } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if (!value) ; else {\n        return false;\n      }\n\n      return true;\n    };\n    /**\n     * _basicCustomElementCheck\n     * checks if at least one dash is included in tagName, and it's not the first char\n     * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n     * @param {string} tagName name of the tag of the node to sanitize\n     */\n\n\n    var _basicCustomElementTest = function _basicCustomElementTest(tagName) {\n      return tagName.indexOf('-') > 0;\n    };\n    /**\n     * _sanitizeAttributes\n     *\n     * @protect attributes\n     * @protect nodeName\n     * @protect removeAttribute\n     * @protect setAttribute\n     *\n     * @param  {Node} currentNode to sanitize\n     */\n\n\n    var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n      var attr;\n      var value;\n      var lcName;\n      var l;\n      /* Execute a hook if present */\n\n      _executeHook('beforeSanitizeAttributes', currentNode, null);\n\n      var attributes = currentNode.attributes;\n      /* Check if we have attributes; if not we might have a text node */\n\n      if (!attributes) {\n        return;\n      }\n\n      var hookEvent = {\n        attrName: '',\n        attrValue: '',\n        keepAttr: true,\n        allowedAttributes: ALLOWED_ATTR\n      };\n      l = attributes.length;\n      /* Go backwards over all attributes; safely remove bad ones */\n\n      while (l--) {\n        attr = attributes[l];\n        var _attr = attr,\n            name = _attr.name,\n            namespaceURI = _attr.namespaceURI;\n        value = name === 'value' ? attr.value : stringTrim(attr.value);\n        lcName = transformCaseFunc(name);\n        /* Execute a hook if present */\n\n        hookEvent.attrName = lcName;\n        hookEvent.attrValue = value;\n        hookEvent.keepAttr = true;\n        hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n\n        _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n\n        value = hookEvent.attrValue;\n        /* Did the hooks approve of the attribute? */\n\n        if (hookEvent.forceKeepAttr) {\n          continue;\n        }\n        /* Remove attribute */\n\n\n        _removeAttribute(name, currentNode);\n        /* Did the hooks approve of the attribute? */\n\n\n        if (!hookEvent.keepAttr) {\n          continue;\n        }\n        /* Work around a security issue in jQuery 3.0 */\n\n\n        if (regExpTest(/\\/>/i, value)) {\n          _removeAttribute(name, currentNode);\n\n          continue;\n        }\n        /* Sanitize attribute content to be template-safe */\n\n\n        if (SAFE_FOR_TEMPLATES) {\n          value = stringReplace(value, MUSTACHE_EXPR$1, ' ');\n          value = stringReplace(value, ERB_EXPR$1, ' ');\n        }\n        /* Is `value` valid for this attribute? */\n\n\n        var lcTag = transformCaseFunc(currentNode.nodeName);\n\n        if (!_isValidAttribute(lcTag, lcName, value)) {\n          continue;\n        }\n        /* Handle attributes that require Trusted Types */\n\n\n        if (trustedTypesPolicy && _typeof(trustedTypes) === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n          if (namespaceURI) ; else {\n            switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n              case 'TrustedHTML':\n                value = trustedTypesPolicy.createHTML(value);\n                break;\n\n              case 'TrustedScriptURL':\n                value = trustedTypesPolicy.createScriptURL(value);\n                break;\n            }\n          }\n        }\n        /* Handle invalid data-* attribute set by try-catching it */\n\n\n        try {\n          if (namespaceURI) {\n            currentNode.setAttributeNS(namespaceURI, name, value);\n          } else {\n            /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n            currentNode.setAttribute(name, value);\n          }\n\n          arrayPop(DOMPurify.removed);\n        } catch (_) {}\n      }\n      /* Execute a hook if present */\n\n\n      _executeHook('afterSanitizeAttributes', currentNode, null);\n    };\n    /**\n     * _sanitizeShadowDOM\n     *\n     * @param  {DocumentFragment} fragment to iterate over recursively\n     */\n\n\n    var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n      var shadowNode;\n\n      var shadowIterator = _createIterator(fragment);\n      /* Execute a hook if present */\n\n\n      _executeHook('beforeSanitizeShadowDOM', fragment, null);\n\n      while (shadowNode = shadowIterator.nextNode()) {\n        /* Execute a hook if present */\n        _executeHook('uponSanitizeShadowNode', shadowNode, null);\n        /* Sanitize tags and elements */\n\n\n        if (_sanitizeElements(shadowNode)) {\n          continue;\n        }\n        /* Deep shadow DOM detected */\n\n\n        if (shadowNode.content instanceof DocumentFragment) {\n          _sanitizeShadowDOM(shadowNode.content);\n        }\n        /* Check attributes, sanitize if necessary */\n\n\n        _sanitizeAttributes(shadowNode);\n      }\n      /* Execute a hook if present */\n\n\n      _executeHook('afterSanitizeShadowDOM', fragment, null);\n    };\n    /**\n     * Sanitize\n     * Public method providing core sanitation functionality\n     *\n     * @param {String|Node} dirty string or DOM node\n     * @param {Object} configuration object\n     */\n    // eslint-disable-next-line complexity\n\n\n    DOMPurify.sanitize = function (dirty, cfg) {\n      var body;\n      var importedNode;\n      var currentNode;\n      var oldNode;\n      var returnNode;\n      /* Make sure we have a string to sanitize.\n        DO NOT return early, as this will return the wrong type if\n        the user has requested a DOM object rather than a string */\n\n      IS_EMPTY_INPUT = !dirty;\n\n      if (IS_EMPTY_INPUT) {\n        dirty = '<!-->';\n      }\n      /* Stringify, in case dirty is an object */\n\n\n      if (typeof dirty !== 'string' && !_isNode(dirty)) {\n        // eslint-disable-next-line no-negated-condition\n        if (typeof dirty.toString !== 'function') {\n          throw typeErrorCreate('toString is not a function');\n        } else {\n          dirty = dirty.toString();\n\n          if (typeof dirty !== 'string') {\n            throw typeErrorCreate('dirty is not a string, aborting');\n          }\n        }\n      }\n      /* Check we can run. Otherwise fall back or ignore */\n\n\n      if (!DOMPurify.isSupported) {\n        if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {\n          if (typeof dirty === 'string') {\n            return window.toStaticHTML(dirty);\n          }\n\n          if (_isNode(dirty)) {\n            return window.toStaticHTML(dirty.outerHTML);\n          }\n        }\n\n        return dirty;\n      }\n      /* Assign config vars */\n\n\n      if (!SET_CONFIG) {\n        _parseConfig(cfg);\n      }\n      /* Clean up removed elements */\n\n\n      DOMPurify.removed = [];\n      /* Check if dirty is correctly typed for IN_PLACE */\n\n      if (typeof dirty === 'string') {\n        IN_PLACE = false;\n      }\n\n      if (IN_PLACE) {\n        /* Do some early pre-sanitization to avoid unsafe root nodes */\n        if (dirty.nodeName) {\n          var tagName = transformCaseFunc(dirty.nodeName);\n\n          if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n            throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n          }\n        }\n      } else if (dirty instanceof Node) {\n        /* If dirty is a DOM element, append to an empty document to avoid\n           elements being stripped by the parser */\n        body = _initDocument('<!---->');\n        importedNode = body.ownerDocument.importNode(dirty, true);\n\n        if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {\n          /* Node is already a body, use as is */\n          body = importedNode;\n        } else if (importedNode.nodeName === 'HTML') {\n          body = importedNode;\n        } else {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          body.appendChild(importedNode);\n        }\n      } else {\n        /* Exit directly if we have nothing to do */\n        if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes\n        dirty.indexOf('<') === -1) {\n          return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n        }\n        /* Initialize the document to work on */\n\n\n        body = _initDocument(dirty);\n        /* Check we have a DOM node from the data */\n\n        if (!body) {\n          return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n        }\n      }\n      /* Remove first element node (ours) if FORCE_BODY is set */\n\n\n      if (body && FORCE_BODY) {\n        _forceRemove(body.firstChild);\n      }\n      /* Get node iterator */\n\n\n      var nodeIterator = _createIterator(IN_PLACE ? dirty : body);\n      /* Now start iterating over the created document */\n\n\n      while (currentNode = nodeIterator.nextNode()) {\n        /* Fix IE's strange behavior with manipulated textNodes #89 */\n        if (currentNode.nodeType === 3 && currentNode === oldNode) {\n          continue;\n        }\n        /* Sanitize tags and elements */\n\n\n        if (_sanitizeElements(currentNode)) {\n          continue;\n        }\n        /* Shadow DOM detected, sanitize it */\n\n\n        if (currentNode.content instanceof DocumentFragment) {\n          _sanitizeShadowDOM(currentNode.content);\n        }\n        /* Check attributes, sanitize if necessary */\n\n\n        _sanitizeAttributes(currentNode);\n\n        oldNode = currentNode;\n      }\n\n      oldNode = null;\n      /* If we sanitized `dirty` in-place, return it. */\n\n      if (IN_PLACE) {\n        return dirty;\n      }\n      /* Return sanitized string or DOM */\n\n\n      if (RETURN_DOM) {\n        if (RETURN_DOM_FRAGMENT) {\n          returnNode = createDocumentFragment.call(body.ownerDocument);\n\n          while (body.firstChild) {\n            // eslint-disable-next-line unicorn/prefer-dom-node-append\n            returnNode.appendChild(body.firstChild);\n          }\n        } else {\n          returnNode = body;\n        }\n\n        if (ALLOWED_ATTR.shadowroot) {\n          /*\n            AdoptNode() is not used because internal state is not reset\n            (e.g. the past names map of a HTMLFormElement), this is safe\n            in theory but we would rather not risk another attack vector.\n            The state that is cloned by importNode() is explicitly defined\n            by the specs.\n          */\n          returnNode = importNode.call(originalDocument, returnNode, true);\n        }\n\n        return returnNode;\n      }\n\n      var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n      /* Serialize doctype if allowed */\n\n      if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n        serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n      }\n      /* Sanitize final string template-safe */\n\n\n      if (SAFE_FOR_TEMPLATES) {\n        serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$1, ' ');\n        serializedHTML = stringReplace(serializedHTML, ERB_EXPR$1, ' ');\n      }\n\n      return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n    };\n    /**\n     * Public method to set the configuration once\n     * setConfig\n     *\n     * @param {Object} cfg configuration object\n     */\n\n\n    DOMPurify.setConfig = function (cfg) {\n      _parseConfig(cfg);\n\n      SET_CONFIG = true;\n    };\n    /**\n     * Public method to remove the configuration\n     * clearConfig\n     *\n     */\n\n\n    DOMPurify.clearConfig = function () {\n      CONFIG = null;\n      SET_CONFIG = false;\n    };\n    /**\n     * Public method to check if an attribute value is valid.\n     * Uses last set config, if any. Otherwise, uses config defaults.\n     * isValidAttribute\n     *\n     * @param  {string} tag Tag name of containing element.\n     * @param  {string} attr Attribute name.\n     * @param  {string} value Attribute value.\n     * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n     */\n\n\n    DOMPurify.isValidAttribute = function (tag, attr, value) {\n      /* Initialize shared config vars if necessary. */\n      if (!CONFIG) {\n        _parseConfig({});\n      }\n\n      var lcTag = transformCaseFunc(tag);\n      var lcName = transformCaseFunc(attr);\n      return _isValidAttribute(lcTag, lcName, value);\n    };\n    /**\n     * AddHook\n     * Public method to add DOMPurify hooks\n     *\n     * @param {String} entryPoint entry point for the hook to add\n     * @param {Function} hookFunction function to execute\n     */\n\n\n    DOMPurify.addHook = function (entryPoint, hookFunction) {\n      if (typeof hookFunction !== 'function') {\n        return;\n      }\n\n      hooks[entryPoint] = hooks[entryPoint] || [];\n      arrayPush(hooks[entryPoint], hookFunction);\n    };\n    /**\n     * RemoveHook\n     * Public method to remove a DOMPurify hook at a given entryPoint\n     * (pops it from the stack of hooks if more are present)\n     *\n     * @param {String} entryPoint entry point for the hook to remove\n     * @return {Function} removed(popped) hook\n     */\n\n\n    DOMPurify.removeHook = function (entryPoint) {\n      if (hooks[entryPoint]) {\n        return arrayPop(hooks[entryPoint]);\n      }\n    };\n    /**\n     * RemoveHooks\n     * Public method to remove all DOMPurify hooks at a given entryPoint\n     *\n     * @param  {String} entryPoint entry point for the hooks to remove\n     */\n\n\n    DOMPurify.removeHooks = function (entryPoint) {\n      if (hooks[entryPoint]) {\n        hooks[entryPoint] = [];\n      }\n    };\n    /**\n     * RemoveAllHooks\n     * Public method to remove all DOMPurify hooks\n     *\n     */\n\n\n    DOMPurify.removeAllHooks = function () {\n      hooks = {};\n    };\n\n    return DOMPurify;\n  }\n\n  var purify = createDOMPurify();\n\n  return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n","/*!\n  Copyright (c) 2015 Jed Watson.\n  Based on code that is Copyright 2013-2015, Facebook, Inc.\n  All rights reserved.\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar canUseDOM = !!(\n\t\ttypeof window !== 'undefined' &&\n\t\twindow.document &&\n\t\twindow.document.createElement\n\t);\n\n\tvar ExecutionEnvironment = {\n\n\t\tcanUseDOM: canUseDOM,\n\n\t\tcanUseWorkers: typeof Worker !== 'undefined',\n\n\t\tcanUseEventListeners:\n\t\t\tcanUseDOM && !!(window.addEventListener || window.attachEvent),\n\n\t\tcanUseViewport: canUseDOM && !!window.screen\n\n\t};\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn ExecutionEnvironment;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = ExecutionEnvironment;\n\t} else {\n\t\twindow.ExecutionEnvironment = ExecutionEnvironment;\n\t}\n\n}());\n","/* build: `node build.js modules=ALL exclude=gestures,accessors,erasing requirejs minifier=uglifyjs` */\n/*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) */\n\nvar fabric = fabric || { version: '5.2.4' };\nif (typeof exports !== 'undefined') {\n  exports.fabric = fabric;\n}\n/* _AMD_START_ */\nelse if (typeof define === 'function' && define.amd) {\n  define([], function() { return fabric; });\n}\n/* _AMD_END_ */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n  if (document instanceof (typeof HTMLDocument !== 'undefined' ? HTMLDocument : Document)) {\n    fabric.document = document;\n  }\n  else {\n    fabric.document = document.implementation.createHTMLDocument('');\n  }\n  fabric.window = window;\n}\nelse {\n  // assume we're running under node.js when document/window are not present\n  var jsdom = require('jsdom');\n  var virtualWindow = new jsdom.JSDOM(\n    decodeURIComponent('%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E'),\n    {\n      features: {\n        FetchExternalResources: ['img']\n      },\n      resources: 'usable'\n    }).window;\n  fabric.document = virtualWindow.document;\n  fabric.jsdomImplForWrapper = require('jsdom/lib/jsdom/living/generated/utils').implForWrapper;\n  fabric.nodeCanvas = require('jsdom/lib/jsdom/utils').Canvas;\n  fabric.window = virtualWindow;\n  DOMParser = fabric.window.DOMParser;\n}\n\n/**\n * True when in environment that supports touch events\n * @type boolean\n */\nfabric.isTouchSupported = 'ontouchstart' in fabric.window || 'ontouchstart' in fabric.document ||\n  (fabric.window && fabric.window.navigator && fabric.window.navigator.maxTouchPoints > 0);\n\n/**\n * True when in environment that's probably Node.js\n * @type boolean\n */\nfabric.isLikelyNode = typeof Buffer !== 'undefined' &&\n                      typeof window === 'undefined';\n\n/* _FROM_SVG_START_ */\n/**\n * Attributes parsed from all SVG elements\n * @type array\n */\nfabric.SHARED_ATTRIBUTES = [\n  'display',\n  'transform',\n  'fill', 'fill-opacity', 'fill-rule',\n  'opacity',\n  'stroke', 'stroke-dasharray', 'stroke-linecap', 'stroke-dashoffset',\n  'stroke-linejoin', 'stroke-miterlimit',\n  'stroke-opacity', 'stroke-width',\n  'id', 'paint-order', 'vector-effect',\n  'instantiated_by_use', 'clip-path',\n];\n/* _FROM_SVG_END_ */\n\n/**\n * Pixel per Inch as a default value set to 96. Can be changed for more realistic conversion.\n */\nfabric.DPI = 96;\nfabric.reNum = '(?:[-+]?(?:\\\\d+|\\\\d*\\\\.\\\\d+)(?:[eE][-+]?\\\\d+)?)';\nfabric.commaWsp = '(?:\\\\s+,?\\\\s*|,\\\\s*)';\nfabric.rePathCommand = /([-+]?((\\d+\\.\\d+)|((\\d+)|(\\.\\d+)))(?:[eE][-+]?\\d+)?)/ig;\nfabric.reNonWord = /[ \\n\\.,;!\\?\\-]/;\nfabric.fontPaths = { };\nfabric.iMatrix = [1, 0, 0, 1, 0, 0];\nfabric.svgNS = 'http://www.w3.org/2000/svg';\n\n/**\n * Pixel limit for cache canvases. 1Mpx , 4Mpx should be fine.\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.perfLimitSizeTotal = 2097152;\n\n/**\n * Pixel limit for cache canvases width or height. IE fixes the maximum at 5000\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.maxCacheSideLimit = 4096;\n\n/**\n * Lowest pixel limit for cache canvases, set at 256PX\n * @since 1.7.14\n * @type Number\n * @default\n */\nfabric.minCacheSideLimit = 256;\n\n/**\n * Cache Object for widths of chars in text rendering.\n */\nfabric.charWidthsCache = { };\n\n/**\n * if webgl is enabled and available, textureSize will determine the size\n * of the canvas backend\n * @since 2.0.0\n * @type Number\n * @default\n */\nfabric.textureSize = 2048;\n\n/**\n * When 'true', style information is not retained when copy/pasting text, making\n * pasted text use destination style.\n * Defaults to 'false'.\n * @type Boolean\n * @default\n */\nfabric.disableStyleCopyPaste = false;\n\n/**\n * Enable webgl for filtering picture is available\n * A filtering backend will be initialized, this will both take memory and\n * time since a default 2048x2048 canvas will be created for the gl context\n * @since 2.0.0\n * @type Boolean\n * @default\n */\nfabric.enableGLFiltering = true;\n\n/**\n * Device Pixel Ratio\n * @see https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html\n */\nfabric.devicePixelRatio = fabric.window.devicePixelRatio ||\n                          fabric.window.webkitDevicePixelRatio ||\n                          fabric.window.mozDevicePixelRatio ||\n                          1;\n/**\n * Browser-specific constant to adjust CanvasRenderingContext2D.shadowBlur value,\n * which is unitless and not rendered equally across browsers.\n *\n * Values that work quite well (as of October 2017) are:\n * - Chrome: 1.5\n * - Edge: 1.75\n * - Firefox: 0.9\n * - Safari: 0.95\n *\n * @since 2.0.0\n * @type Number\n * @default 1\n */\nfabric.browserShadowBlurConstant = 1;\n\n/**\n * This object contains the result of arc to bezier conversion for faster retrieving if the same arc needs to be converted again.\n * It was an internal variable, is accessible since version 2.3.4\n */\nfabric.arcToSegmentsCache = { };\n\n/**\n * This object keeps the results of the boundsOfCurve calculation mapped by the joined arguments necessary to calculate it.\n * It does speed up calculation, if you parse and add always the same paths, but in case of heavy usage of freedrawing\n * you do not get any speed benefit and you get a big object in memory.\n * The object was a private variable before, while now is appended to the lib so that you have access to it and you\n * can eventually clear it.\n * It was an internal variable, is accessible since version 2.3.4\n */\nfabric.boundsOfCurveCache = { };\n\n/**\n * If disabled boundsOfCurveCache is not used. For apps that make heavy usage of pencil drawing probably disabling it is better\n * @default true\n */\nfabric.cachesBoundsOfCurve = true;\n\n/**\n * Skip performance testing of setupGLContext and force the use of putImageData that seems to be the one that works best on\n * Chrome + old hardware. if your users are experiencing empty images after filtering you may try to force this to true\n * this has to be set before instantiating the filtering backend ( before filtering the first image )\n * @type Boolean\n * @default false\n */\nfabric.forceGLPutImageData = false;\n\nfabric.initFilterBackend = function() {\n  if (fabric.enableGLFiltering && fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize)) {\n    console.log('max texture size: ' + fabric.maxTextureSize);\n    return (new fabric.WebglFilterBackend({ tileSize: fabric.textureSize }));\n  }\n  else if (fabric.Canvas2dFilterBackend) {\n    return (new fabric.Canvas2dFilterBackend());\n  }\n};\n\n\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n  // ensure globality even if entire library were function wrapped (as in Meteor.js packaging system)\n  window.fabric = fabric;\n}\n\n\n(function() {\n\n  /**\n   * @private\n   * @param {String} eventName\n   * @param {Function} handler\n   */\n  function _removeEventListener(eventName, handler) {\n    if (!this.__eventListeners[eventName]) {\n      return;\n    }\n    var eventListener = this.__eventListeners[eventName];\n    if (handler) {\n      eventListener[eventListener.indexOf(handler)] = false;\n    }\n    else {\n      fabric.util.array.fill(eventListener, false);\n    }\n  }\n\n  /**\n   * Observes specified event\n   * @memberOf fabric.Observable\n   * @alias on\n   * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n   * @param {Function} handler Function that receives a notification when an event of the specified type occurs\n   * @return {Self} thisArg\n   * @chainable\n   */\n  function on(eventName, handler) {\n    if (!this.__eventListeners) {\n      this.__eventListeners = { };\n    }\n    // one object with key/value pairs was passed\n    if (arguments.length === 1) {\n      for (var prop in eventName) {\n        this.on(prop, eventName[prop]);\n      }\n    }\n    else {\n      if (!this.__eventListeners[eventName]) {\n        this.__eventListeners[eventName] = [];\n      }\n      this.__eventListeners[eventName].push(handler);\n    }\n    return this;\n  }\n\n  function _once(eventName, handler) {\n    var _handler = function () {\n      handler.apply(this, arguments);\n      this.off(eventName, _handler);\n    }.bind(this);\n    this.on(eventName, _handler);\n  }\n\n  function once(eventName, handler) {\n    // one object with key/value pairs was passed\n    if (arguments.length === 1) {\n      for (var prop in eventName) {\n        _once.call(this, prop, eventName[prop]);\n      }\n    }\n    else {\n      _once.call(this, eventName, handler);\n    }\n    return this;\n  }\n\n  /**\n   * Stops event observing for a particular event handler. Calling this method\n   * without arguments removes all handlers for all events\n   * @memberOf fabric.Observable\n   * @alias off\n   * @param {String|Object} eventName Event name (eg. 'after:render') or object with key/value pairs (eg. {'after:render': handler, 'selection:cleared': handler})\n   * @param {Function} handler Function to be deleted from EventListeners\n   * @return {Self} thisArg\n   * @chainable\n   */\n  function off(eventName, handler) {\n    if (!this.__eventListeners) {\n      return this;\n    }\n\n    // remove all key/value pairs (event name -> event handler)\n    if (arguments.length === 0) {\n      for (eventName in this.__eventListeners) {\n        _removeEventListener.call(this, eventName);\n      }\n    }\n    // one object with key/value pairs was passed\n    else if (arguments.length === 1 && typeof arguments[0] === 'object') {\n      for (var prop in eventName) {\n        _removeEventListener.call(this, prop, eventName[prop]);\n      }\n    }\n    else {\n      _removeEventListener.call(this, eventName, handler);\n    }\n    return this;\n  }\n\n  /**\n   * Fires event with an optional options object\n   * @memberOf fabric.Observable\n   * @param {String} eventName Event name to fire\n   * @param {Object} [options] Options object\n   * @return {Self} thisArg\n   * @chainable\n   */\n  function fire(eventName, options) {\n    if (!this.__eventListeners) {\n      return this;\n    }\n\n    var listenersForEvent = this.__eventListeners[eventName];\n    if (!listenersForEvent) {\n      return this;\n    }\n\n    for (var i = 0, len = listenersForEvent.length; i < len; i++) {\n      listenersForEvent[i] && listenersForEvent[i].call(this, options || { });\n    }\n    this.__eventListeners[eventName] = listenersForEvent.filter(function(value) {\n      return value !== false;\n    });\n    return this;\n  }\n\n  /**\n   * @namespace fabric.Observable\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#events}\n   * @see {@link http://fabricjs.com/events|Events demo}\n   */\n  fabric.Observable = {\n    fire: fire,\n    on: on,\n    once: once,\n    off: off,\n  };\n})();\n\n\n/**\n * @namespace fabric.Collection\n */\nfabric.Collection = {\n\n  _objects: [],\n\n  /**\n   * Adds objects to collection, Canvas or Group, then renders canvas\n   * (if `renderOnAddRemove` is not `false`).\n   * in case of Group no changes to bounding box are made.\n   * Objects should be instances of (or inherit from) fabric.Object\n   * Use of this function is highly discouraged for groups.\n   * you can add a bunch of objects with the add method but then you NEED\n   * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n   * @param {...fabric.Object} object Zero or more fabric instances\n   * @return {Self} thisArg\n   * @chainable\n   */\n  add: function () {\n    this._objects.push.apply(this._objects, arguments);\n    if (this._onObjectAdded) {\n      for (var i = 0, length = arguments.length; i < length; i++) {\n        this._onObjectAdded(arguments[i]);\n      }\n    }\n    this.renderOnAddRemove && this.requestRenderAll();\n    return this;\n  },\n\n  /**\n   * Inserts an object into collection at specified index, then renders canvas (if `renderOnAddRemove` is not `false`)\n   * An object should be an instance of (or inherit from) fabric.Object\n   * Use of this function is highly discouraged for groups.\n   * you can add a bunch of objects with the insertAt method but then you NEED\n   * to run a addWithUpdate call for the Group class or position/bbox will be wrong.\n   * @param {Object} object Object to insert\n   * @param {Number} index Index to insert object at\n   * @param {Boolean} nonSplicing When `true`, no splicing (shifting) of objects occurs\n   * @return {Self} thisArg\n   * @chainable\n   */\n  insertAt: function (object, index, nonSplicing) {\n    var objects = this._objects;\n    if (nonSplicing) {\n      objects[index] = object;\n    }\n    else {\n      objects.splice(index, 0, object);\n    }\n    this._onObjectAdded && this._onObjectAdded(object);\n    this.renderOnAddRemove && this.requestRenderAll();\n    return this;\n  },\n\n  /**\n   * Removes objects from a collection, then renders canvas (if `renderOnAddRemove` is not `false`)\n   * @param {...fabric.Object} object Zero or more fabric instances\n   * @return {Self} thisArg\n   * @chainable\n   */\n  remove: function() {\n    var objects = this._objects,\n        index, somethingRemoved = false;\n\n    for (var i = 0, length = arguments.length; i < length; i++) {\n      index = objects.indexOf(arguments[i]);\n\n      // only call onObjectRemoved if an object was actually removed\n      if (index !== -1) {\n        somethingRemoved = true;\n        objects.splice(index, 1);\n        this._onObjectRemoved && this._onObjectRemoved(arguments[i]);\n      }\n    }\n\n    this.renderOnAddRemove && somethingRemoved && this.requestRenderAll();\n    return this;\n  },\n\n  /**\n   * Executes given function for each object in this group\n   * @param {Function} callback\n   *                   Callback invoked with current object as first argument,\n   *                   index - as second and an array of all objects - as third.\n   *                   Callback is invoked in a context of Global Object (e.g. `window`)\n   *                   when no `context` argument is given\n   *\n   * @param {Object} context Context (aka thisObject)\n   * @return {Self} thisArg\n   * @chainable\n   */\n  forEachObject: function(callback, context) {\n    var objects = this.getObjects();\n    for (var i = 0, len = objects.length; i < len; i++) {\n      callback.call(context, objects[i], i, objects);\n    }\n    return this;\n  },\n\n  /**\n   * Returns an array of children objects of this instance\n   * Type parameter introduced in 1.3.10\n   * since 2.3.5 this method return always a COPY of the array;\n   * @param {String} [type] When specified, only objects of this type are returned\n   * @return {Array}\n   */\n  getObjects: function(type) {\n    if (typeof type === 'undefined') {\n      return this._objects.concat();\n    }\n    return this._objects.filter(function(o) {\n      return o.type === type;\n    });\n  },\n\n  /**\n   * Returns object at specified index\n   * @param {Number} index\n   * @return {Self} thisArg\n   */\n  item: function (index) {\n    return this._objects[index];\n  },\n\n  /**\n   * Returns true if collection contains no objects\n   * @return {Boolean} true if collection is empty\n   */\n  isEmpty: function () {\n    return this._objects.length === 0;\n  },\n\n  /**\n   * Returns a size of a collection (i.e: length of an array containing its objects)\n   * @return {Number} Collection size\n   */\n  size: function() {\n    return this._objects.length;\n  },\n\n  /**\n   * Returns true if collection contains an object\n   * @param {Object} object Object to check against\n   * @param {Boolean} [deep=false] `true` to check all descendants, `false` to check only `_objects`\n   * @return {Boolean} `true` if collection contains an object\n   */\n  contains: function (object, deep) {\n    if (this._objects.indexOf(object) > -1) {\n      return true;\n    }\n    else if (deep) {\n      return this._objects.some(function (obj) {\n        return typeof obj.contains === 'function' && obj.contains(object, true);\n      });\n    }\n    return false;\n  },\n\n  /**\n   * Returns number representation of a collection complexity\n   * @return {Number} complexity\n   */\n  complexity: function () {\n    return this._objects.reduce(function (memo, current) {\n      memo += current.complexity ? current.complexity() : 0;\n      return memo;\n    }, 0);\n  }\n};\n\n\n/**\n * @namespace fabric.CommonMethods\n */\nfabric.CommonMethods = {\n\n  /**\n   * Sets object's properties from options\n   * @param {Object} [options] Options object\n   */\n  _setOptions: function(options) {\n    for (var prop in options) {\n      this.set(prop, options[prop]);\n    }\n  },\n\n  /**\n   * @private\n   * @param {Object} [filler] Options object\n   * @param {String} [property] property to set the Gradient to\n   */\n  _initGradient: function(filler, property) {\n    if (filler && filler.colorStops && !(filler instanceof fabric.Gradient)) {\n      this.set(property, new fabric.Gradient(filler));\n    }\n  },\n\n  /**\n   * @private\n   * @param {Object} [filler] Options object\n   * @param {String} [property] property to set the Pattern to\n   * @param {Function} [callback] callback to invoke after pattern load\n   */\n  _initPattern: function(filler, property, callback) {\n    if (filler && filler.source && !(filler instanceof fabric.Pattern)) {\n      this.set(property, new fabric.Pattern(filler, callback));\n    }\n    else {\n      callback && callback();\n    }\n  },\n\n  /**\n   * @private\n   */\n  _setObject: function(obj) {\n    for (var prop in obj) {\n      this._set(prop, obj[prop]);\n    }\n  },\n\n  /**\n   * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n   * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n   * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n   * @return {fabric.Object} thisArg\n   * @chainable\n   */\n  set: function(key, value) {\n    if (typeof key === 'object') {\n      this._setObject(key);\n    }\n    else {\n      this._set(key, value);\n    }\n    return this;\n  },\n\n  _set: function(key, value) {\n    this[key] = value;\n  },\n\n  /**\n   * Toggles specified property from `true` to `false` or from `false` to `true`\n   * @param {String} property Property to toggle\n   * @return {fabric.Object} thisArg\n   * @chainable\n   */\n  toggle: function(property) {\n    var value = this.get(property);\n    if (typeof value === 'boolean') {\n      this.set(property, !value);\n    }\n    return this;\n  },\n\n  /**\n   * Basic getter\n   * @param {String} property Property name\n   * @return {*} value of a property\n   */\n  get: function(property) {\n    return this[property];\n  }\n};\n\n\n(function(global) {\n\n  var sqrt = Math.sqrt,\n      atan2 = Math.atan2,\n      pow = Math.pow,\n      PiBy180 = Math.PI / 180,\n      PiBy2 = Math.PI / 2;\n\n  /**\n   * @namespace fabric.util\n   */\n  fabric.util = {\n\n    /**\n     * Calculate the cos of an angle, avoiding returning floats for known results\n     * @static\n     * @memberOf fabric.util\n     * @param {Number} angle the angle in radians or in degree\n     * @return {Number}\n     */\n    cos: function(angle) {\n      if (angle === 0) { return 1; }\n      if (angle < 0) {\n        // cos(a) = cos(-a)\n        angle = -angle;\n      }\n      var angleSlice = angle / PiBy2;\n      switch (angleSlice) {\n        case 1: case 3: return 0;\n        case 2: return -1;\n      }\n      return Math.cos(angle);\n    },\n\n    /**\n     * Calculate the sin of an angle, avoiding returning floats for known results\n     * @static\n     * @memberOf fabric.util\n     * @param {Number} angle the angle in radians or in degree\n     * @return {Number}\n     */\n    sin: function(angle) {\n      if (angle === 0) { return 0; }\n      var angleSlice = angle / PiBy2, sign = 1;\n      if (angle < 0) {\n        // sin(-a) = -sin(a)\n        sign = -1;\n      }\n      switch (angleSlice) {\n        case 1: return sign;\n        case 2: return 0;\n        case 3: return -sign;\n      }\n      return Math.sin(angle);\n    },\n\n    /**\n     * Removes value from an array.\n     * Presence of value (and its position in an array) is determined via `Array.prototype.indexOf`\n     * @static\n     * @memberOf fabric.util\n     * @param {Array} array\n     * @param {*} value\n     * @return {Array} original array\n     */\n    removeFromArray: function(array, value) {\n      var idx = array.indexOf(value);\n      if (idx !== -1) {\n        array.splice(idx, 1);\n      }\n      return array;\n    },\n\n    /**\n     * Returns random number between 2 specified ones.\n     * @static\n     * @memberOf fabric.util\n     * @param {Number} min lower limit\n     * @param {Number} max upper limit\n     * @return {Number} random value (between min and max)\n     */\n    getRandomInt: function(min, max) {\n      return Math.floor(Math.random() * (max - min + 1)) + min;\n    },\n\n    /**\n     * Transforms degrees to radians.\n     * @static\n     * @memberOf fabric.util\n     * @param {Number} degrees value in degrees\n     * @return {Number} value in radians\n     */\n    degreesToRadians: function(degrees) {\n      return degrees * PiBy180;\n    },\n\n    /**\n     * Transforms radians to degrees.\n     * @static\n     * @memberOf fabric.util\n     * @param {Number} radians value in radians\n     * @return {Number} value in degrees\n     */\n    radiansToDegrees: function(radians) {\n      return radians / PiBy180;\n    },\n\n    /**\n     * Rotates `point` around `origin` with `radians`\n     * @static\n     * @memberOf fabric.util\n     * @param {fabric.Point} point The point to rotate\n     * @param {fabric.Point} origin The origin of the rotation\n     * @param {Number} radians The radians of the angle for the rotation\n     * @return {fabric.Point} The new rotated point\n     */\n    rotatePoint: function(point, origin, radians) {\n      var newPoint = new fabric.Point(point.x - origin.x, point.y - origin.y),\n          v = fabric.util.rotateVector(newPoint, radians);\n      return new fabric.Point(v.x, v.y).addEquals(origin);\n    },\n\n    /**\n     * Rotates `vector` with `radians`\n     * @static\n     * @memberOf fabric.util\n     * @param {Object} vector The vector to rotate (x and y)\n     * @param {Number} radians The radians of the angle for the rotation\n     * @return {Object} The new rotated point\n     */\n    rotateVector: function(vector, radians) {\n      var sin = fabric.util.sin(radians),\n          cos = fabric.util.cos(radians),\n          rx = vector.x * cos - vector.y * sin,\n          ry = vector.x * sin + vector.y * cos;\n      return {\n        x: rx,\n        y: ry\n      };\n    },\n\n    /**\n     * Creates a vetor from points represented as a point\n     * @static\n     * @memberOf fabric.util\n     *\n     * @typedef {Object} Point\n     * @property {number} x\n     * @property {number} y\n     *\n     * @param {Point} from\n     * @param {Point} to\n     * @returns {Point} vector\n     */\n    createVector: function (from, to) {\n      return new fabric.Point(to.x - from.x, to.y - from.y);\n    },\n\n    /**\n     * Calculates angle between 2 vectors using dot product\n     * @static\n     * @memberOf fabric.util\n     * @param {Point} a\n     * @param {Point} b\n     * @returns the angle in radian between the vectors\n     */\n    calcAngleBetweenVectors: function (a, b) {\n      return Math.acos((a.x * b.x + a.y * b.y) / (Math.hypot(a.x, a.y) * Math.hypot(b.x, b.y)));\n    },\n\n    /**\n     * @static\n     * @memberOf fabric.util\n     * @param {Point} v\n     * @returns {Point} vector representing the unit vector of pointing to the direction of `v`\n     */\n    getHatVector: function (v) {\n      return new fabric.Point(v.x, v.y).multiply(1 / Math.hypot(v.x, v.y));\n    },\n\n    /**\n     * @static\n     * @memberOf fabric.util\n     * @param {Point} A\n     * @param {Point} B\n     * @param {Point} C\n     * @returns {{ vector: Point, angle: number }} vector representing the bisector of A and A's angle\n     */\n    getBisector: function (A, B, C) {\n      var AB = fabric.util.createVector(A, B), AC = fabric.util.createVector(A, C);\n      var alpha = fabric.util.calcAngleBetweenVectors(AB, AC);\n      //  check if alpha is relative to AB->BC\n      var ro = fabric.util.calcAngleBetweenVectors(fabric.util.rotateVector(AB, alpha), AC);\n      var phi = alpha * (ro === 0 ? 1 : -1) / 2;\n      return {\n        vector: fabric.util.getHatVector(fabric.util.rotateVector(AB, phi)),\n        angle: alpha\n      };\n    },\n\n    /**\n     * Project stroke width on points returning 2 projections for each point as follows:\n     * - `miter`: 2 points corresponding to the outer boundary and the inner boundary of stroke.\n     * - `bevel`: 2 points corresponding to the bevel boundaries, tangent to the bisector.\n     * - `round`: same as `bevel`\n     * Used to calculate object's bounding box\n     * @static\n     * @memberOf fabric.util\n     * @param {Point[]} points\n     * @param {Object} options\n     * @param {number} options.strokeWidth\n     * @param {'miter'|'bevel'|'round'} options.strokeLineJoin\n     * @param {number} options.strokeMiterLimit https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit\n     * @param {boolean} options.strokeUniform\n     * @param {number} options.scaleX\n     * @param {number} options.scaleY\n     * @param {boolean} [openPath] whether the shape is open or not, affects the calculations of the first and last points\n     * @returns {fabric.Point[]} array of size 2n/4n of all suspected points\n     */\n    projectStrokeOnPoints: function (points, options, openPath) {\n      var coords = [], s = options.strokeWidth / 2,\n          strokeUniformScalar = options.strokeUniform ?\n            new fabric.Point(1 / options.scaleX, 1 / options.scaleY) : new fabric.Point(1, 1),\n          getStrokeHatVector = function (v) {\n            var scalar = s / (Math.hypot(v.x, v.y));\n            return new fabric.Point(v.x * scalar * strokeUniformScalar.x, v.y * scalar * strokeUniformScalar.y);\n          };\n      if (points.length <= 1) {return coords;}\n      points.forEach(function (p, index) {\n        var A = new fabric.Point(p.x, p.y), B, C;\n        if (index === 0) {\n          C = points[index + 1];\n          B = openPath ? getStrokeHatVector(fabric.util.createVector(C, A)).addEquals(A) : points[points.length - 1];\n        }\n        else if (index === points.length - 1) {\n          B = points[index - 1];\n          C = openPath ? getStrokeHatVector(fabric.util.createVector(B, A)).addEquals(A) : points[0];\n        }\n        else {\n          B = points[index - 1];\n          C = points[index + 1];\n        }\n        var bisector = fabric.util.getBisector(A, B, C),\n            bisectorVector = bisector.vector,\n            alpha = bisector.angle,\n            scalar,\n            miterVector;\n        if (options.strokeLineJoin === 'miter') {\n          scalar = -s / Math.sin(alpha / 2);\n          miterVector = new fabric.Point(\n            bisectorVector.x * scalar * strokeUniformScalar.x,\n            bisectorVector.y * scalar * strokeUniformScalar.y\n          );\n          if (Math.hypot(miterVector.x, miterVector.y) / s <= options.strokeMiterLimit) {\n            coords.push(A.add(miterVector));\n            coords.push(A.subtract(miterVector));\n            return;\n          }\n        }\n        scalar = -s * Math.SQRT2;\n        miterVector = new fabric.Point(\n          bisectorVector.x * scalar * strokeUniformScalar.x,\n          bisectorVector.y * scalar * strokeUniformScalar.y\n        );\n        coords.push(A.add(miterVector));\n        coords.push(A.subtract(miterVector));\n      });\n      return coords;\n    },\n\n    /**\n     * Apply transform t to point p\n     * @static\n     * @memberOf fabric.util\n     * @param  {fabric.Point} p The point to transform\n     * @param  {Array} t The transform\n     * @param  {Boolean} [ignoreOffset] Indicates that the offset should not be applied\n     * @return {fabric.Point} The transformed point\n     */\n    transformPoint: function(p, t, ignoreOffset) {\n      if (ignoreOffset) {\n        return new fabric.Point(\n          t[0] * p.x + t[2] * p.y,\n          t[1] * p.x + t[3] * p.y\n        );\n      }\n      return new fabric.Point(\n        t[0] * p.x + t[2] * p.y + t[4],\n        t[1] * p.x + t[3] * p.y + t[5]\n      );\n    },\n\n    /**\n     * Returns coordinates of points's bounding rectangle (left, top, width, height)\n     * @param {Array} points 4 points array\n     * @param {Array} [transform] an array of 6 numbers representing a 2x3 transform matrix\n     * @return {Object} Object with left, top, width, height properties\n     */\n    makeBoundingBoxFromPoints: function(points, transform) {\n      if (transform) {\n        for (var i = 0; i < points.length; i++) {\n          points[i] = fabric.util.transformPoint(points[i], transform);\n        }\n      }\n      var xPoints = [points[0].x, points[1].x, points[2].x, points[3].x],\n          minX = fabric.util.array.min(xPoints),\n          maxX = fabric.util.array.max(xPoints),\n          width = maxX - minX,\n          yPoints = [points[0].y, points[1].y, points[2].y, points[3].y],\n          minY = fabric.util.array.min(yPoints),\n          maxY = fabric.util.array.max(yPoints),\n          height = maxY - minY;\n\n      return {\n        left: minX,\n        top: minY,\n        width: width,\n        height: height\n      };\n    },\n\n    /**\n     * Invert transformation t\n     * @static\n     * @memberOf fabric.util\n     * @param {Array} t The transform\n     * @return {Array} The inverted transform\n     */\n    invertTransform: function(t) {\n      var a = 1 / (t[0] * t[3] - t[1] * t[2]),\n          r = [a * t[3], -a * t[1], -a * t[2], a * t[0]],\n          o = fabric.util.transformPoint({ x: t[4], y: t[5] }, r, true);\n      r[4] = -o.x;\n      r[5] = -o.y;\n      return r;\n    },\n\n    /**\n     * A wrapper around Number#toFixed, which contrary to native method returns number, not string.\n     * @static\n     * @memberOf fabric.util\n     * @param {Number|String} number number to operate on\n     * @param {Number} fractionDigits number of fraction digits to \"leave\"\n     * @return {Number}\n     */\n    toFixed: function(number, fractionDigits) {\n      return parseFloat(Number(number).toFixed(fractionDigits));\n    },\n\n    /**\n     * Converts from attribute value to pixel value if applicable.\n     * Returns converted pixels or original value not converted.\n     * @param {Number|String} value number to operate on\n     * @param {Number} fontSize\n     * @return {Number|String}\n     */\n    parseUnit: function(value, fontSize) {\n      var unit = /\\D{0,2}$/.exec(value),\n          number = parseFloat(value);\n      if (!fontSize) {\n        fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n      }\n      switch (unit[0]) {\n        case 'mm':\n          return number * fabric.DPI / 25.4;\n\n        case 'cm':\n          return number * fabric.DPI / 2.54;\n\n        case 'in':\n          return number * fabric.DPI;\n\n        case 'pt':\n          return number * fabric.DPI / 72; // or * 4 / 3\n\n        case 'pc':\n          return number * fabric.DPI / 72 * 12; // or * 16\n\n        case 'em':\n          return number * fontSize;\n\n        default:\n          return number;\n      }\n    },\n\n    /**\n     * Function which always returns `false`.\n     * @static\n     * @memberOf fabric.util\n     * @return {Boolean}\n     */\n    falseFunction: function() {\n      return false;\n    },\n\n    /**\n     * Returns klass \"Class\" object of given namespace\n     * @memberOf fabric.util\n     * @param {String} type Type of object (eg. 'circle')\n     * @param {String} namespace Namespace to get klass \"Class\" object from\n     * @return {Object} klass \"Class\"\n     */\n    getKlass: function(type, namespace) {\n      // capitalize first letter only\n      type = fabric.util.string.camelize(type.charAt(0).toUpperCase() + type.slice(1));\n      return fabric.util.resolveNamespace(namespace)[type];\n    },\n\n    /**\n     * Returns array of attributes for given svg that fabric parses\n     * @memberOf fabric.util\n     * @param {String} type Type of svg element (eg. 'circle')\n     * @return {Array} string names of supported attributes\n     */\n    getSvgAttributes: function(type) {\n      var attributes = [\n        'instantiated_by_use',\n        'style',\n        'id',\n        'class'\n      ];\n      switch (type) {\n        case 'linearGradient':\n          attributes = attributes.concat(['x1', 'y1', 'x2', 'y2', 'gradientUnits', 'gradientTransform']);\n          break;\n        case 'radialGradient':\n          attributes = attributes.concat(['gradientUnits', 'gradientTransform', 'cx', 'cy', 'r', 'fx', 'fy', 'fr']);\n          break;\n        case 'stop':\n          attributes = attributes.concat(['offset', 'stop-color', 'stop-opacity']);\n          break;\n      }\n      return attributes;\n    },\n\n    /**\n     * Returns object of given namespace\n     * @memberOf fabric.util\n     * @param {String} namespace Namespace string e.g. 'fabric.Image.filter' or 'fabric'\n     * @return {Object} Object for given namespace (default fabric)\n     */\n    resolveNamespace: function(namespace) {\n      if (!namespace) {\n        return fabric;\n      }\n\n      var parts = namespace.split('.'),\n          len = parts.length, i,\n          obj = global || fabric.window;\n\n      for (i = 0; i < len; ++i) {\n        obj = obj[parts[i]];\n      }\n\n      return obj;\n    },\n\n    /**\n     * Loads image element from given url and passes it to a callback\n     * @memberOf fabric.util\n     * @param {String} url URL representing an image\n     * @param {Function} callback Callback; invoked with loaded image\n     * @param {*} [context] Context to invoke callback in\n     * @param {Object} [crossOrigin] crossOrigin value to set image element to\n     */\n    loadImage: function(url, callback, context, crossOrigin) {\n      if (!url) {\n        callback && callback.call(context, url);\n        return;\n      }\n\n      var img = fabric.util.createImage();\n\n      /** @ignore */\n      var onLoadCallback = function () {\n        callback && callback.call(context, img, false);\n        img = img.onload = img.onerror = null;\n      };\n\n      img.onload = onLoadCallback;\n      /** @ignore */\n      img.onerror = function() {\n        fabric.log('Error loading ' + img.src);\n        callback && callback.call(context, null, true);\n        img = img.onload = img.onerror = null;\n      };\n\n      // data-urls appear to be buggy with crossOrigin\n      // https://github.com/kangax/fabric.js/commit/d0abb90f1cd5c5ef9d2a94d3fb21a22330da3e0a#commitcomment-4513767\n      // see https://code.google.com/p/chromium/issues/detail?id=315152\n      //     https://bugzilla.mozilla.org/show_bug.cgi?id=935069\n      // crossOrigin null is the same as not set.\n      if (url.indexOf('data') !== 0 &&\n        crossOrigin !== undefined &&\n        crossOrigin !== null) {\n        img.crossOrigin = crossOrigin;\n      }\n\n      // IE10 / IE11-Fix: SVG contents from data: URI\n      // will only be available if the IMG is present\n      // in the DOM (and visible)\n      if (url.substring(0,14) === 'data:image/svg') {\n        img.onload = null;\n        fabric.util.loadImageInDom(img, onLoadCallback);\n      }\n\n      img.src = url;\n    },\n\n    /**\n     * Attaches SVG image with data: URL to the dom\n     * @memberOf fabric.util\n     * @param {Object} img Image object with data:image/svg src\n     * @param {Function} callback Callback; invoked with loaded image\n     * @return {Object} DOM element (div containing the SVG image)\n     */\n    loadImageInDom: function(img, onLoadCallback) {\n      var div = fabric.document.createElement('div');\n      div.style.width = div.style.height = '1px';\n      div.style.left = div.style.top = '-100%';\n      div.style.position = 'absolute';\n      div.appendChild(img);\n      fabric.document.querySelector('body').appendChild(div);\n      /**\n       * Wrap in function to:\n       *   1. Call existing callback\n       *   2. Cleanup DOM\n       */\n      img.onload = function () {\n        onLoadCallback();\n        div.parentNode.removeChild(div);\n        div = null;\n      };\n    },\n\n    /**\n     * Creates corresponding fabric instances from their object representations\n     * @static\n     * @memberOf fabric.util\n     * @param {Array} objects Objects to enliven\n     * @param {Function} callback Callback to invoke when all objects are created\n     * @param {String} namespace Namespace to get klass \"Class\" object from\n     * @param {Function} reviver Method for further parsing of object elements,\n     * called after each fabric object created.\n     */\n    enlivenObjects: function(objects, callback, namespace, reviver) {\n      objects = objects || [];\n\n      var enlivenedObjects = [],\n          numLoadedObjects = 0,\n          numTotalObjects = objects.length;\n\n      function onLoaded() {\n        if (++numLoadedObjects === numTotalObjects) {\n          callback && callback(enlivenedObjects.filter(function(obj) {\n            // filter out undefined objects (objects that gave error)\n            return obj;\n          }));\n        }\n      }\n\n      if (!numTotalObjects) {\n        callback && callback(enlivenedObjects);\n        return;\n      }\n\n      objects.forEach(function (o, index) {\n        // if sparse array\n        if (!o || !o.type) {\n          onLoaded();\n          return;\n        }\n        var klass = fabric.util.getKlass(o.type, namespace);\n        klass.fromObject(o, function (obj, error) {\n          error || (enlivenedObjects[index] = obj);\n          reviver && reviver(o, obj, error);\n          onLoaded();\n        });\n      });\n    },\n\n    /**\n     * Creates corresponding fabric instances residing in an object, e.g. `clipPath`\n     * @see {@link fabric.Object.ENLIVEN_PROPS}\n     * @param {Object} object\n     * @param {Object} [context] assign enlived props to this object (pass null to skip this)\n     * @param {(objects:fabric.Object[]) => void} callback\n     */\n    enlivenObjectEnlivables: function (object, context, callback) {\n      var enlivenProps = fabric.Object.ENLIVEN_PROPS.filter(function (key) { return !!object[key]; });\n      fabric.util.enlivenObjects(enlivenProps.map(function (key) { return object[key]; }), function (enlivedProps) {\n        var objects = {};\n        enlivenProps.forEach(function (key, index) {\n          objects[key] = enlivedProps[index];\n          context && (context[key] = enlivedProps[index]);\n        });\n        callback && callback(objects);\n      });\n    },\n\n    /**\n     * Create and wait for loading of patterns\n     * @static\n     * @memberOf fabric.util\n     * @param {Array} patterns Objects to enliven\n     * @param {Function} callback Callback to invoke when all objects are created\n     * called after each fabric object created.\n     */\n    enlivenPatterns: function(patterns, callback) {\n      patterns = patterns || [];\n\n      function onLoaded() {\n        if (++numLoadedPatterns === numPatterns) {\n          callback && callback(enlivenedPatterns);\n        }\n      }\n\n      var enlivenedPatterns = [],\n          numLoadedPatterns = 0,\n          numPatterns = patterns.length;\n\n      if (!numPatterns) {\n        callback && callback(enlivenedPatterns);\n        return;\n      }\n\n      patterns.forEach(function (p, index) {\n        if (p && p.source) {\n          new fabric.Pattern(p, function(pattern) {\n            enlivenedPatterns[index] = pattern;\n            onLoaded();\n          });\n        }\n        else {\n          enlivenedPatterns[index] = p;\n          onLoaded();\n        }\n      });\n    },\n\n    /**\n     * Groups SVG elements (usually those retrieved from SVG document)\n     * @static\n     * @memberOf fabric.util\n     * @param {Array} elements SVG elements to group\n     * @param {Object} [options] Options object\n     * @param {String} path Value to set sourcePath to\n     * @return {fabric.Object|fabric.Group}\n     */\n    groupSVGElements: function(elements, options, path) {\n      var object;\n      if (elements && elements.length === 1) {\n        if (typeof path !== 'undefined') {\n          elements[0].sourcePath = path;\n        }\n        return elements[0];\n      }\n      if (options) {\n        if (options.width && options.height) {\n          options.centerPoint = {\n            x: options.width / 2,\n            y: options.height / 2\n          };\n        }\n        else {\n          delete options.width;\n          delete options.height;\n        }\n      }\n      object = new fabric.Group(elements, options);\n      if (typeof path !== 'undefined') {\n        object.sourcePath = path;\n      }\n      return object;\n    },\n\n    /**\n     * Populates an object with properties of another object\n     * @static\n     * @memberOf fabric.util\n     * @param {Object} source Source object\n     * @param {Object} destination Destination object\n     * @return {Array} properties Properties names to include\n     */\n    populateWithProperties: function(source, destination, properties) {\n      if (properties && Array.isArray(properties)) {\n        for (var i = 0, len = properties.length; i < len; i++) {\n          if (properties[i] in source) {\n            destination[properties[i]] = source[properties[i]];\n          }\n        }\n      }\n    },\n\n    /**\n     * Creates canvas element\n     * @static\n     * @memberOf fabric.util\n     * @return {CanvasElement} initialized canvas element\n     */\n    createCanvasElement: function() {\n      return fabric.document.createElement('canvas');\n    },\n\n    /**\n     * Creates a canvas element that is a copy of another and is also painted\n     * @param {CanvasElement} canvas to copy size and content of\n     * @static\n     * @memberOf fabric.util\n     * @return {CanvasElement} initialized canvas element\n     */\n    copyCanvasElement: function(canvas) {\n      var newCanvas = fabric.util.createCanvasElement();\n      newCanvas.width = canvas.width;\n      newCanvas.height = canvas.height;\n      newCanvas.getContext('2d').drawImage(canvas, 0, 0);\n      return newCanvas;\n    },\n\n    /**\n     * since 2.6.0 moved from canvas instance to utility.\n     * @param {CanvasElement} canvasEl to copy size and content of\n     * @param {String} format 'jpeg' or 'png', in some browsers 'webp' is ok too\n     * @param {Number} quality <= 1 and > 0\n     * @static\n     * @memberOf fabric.util\n     * @return {String} data url\n     */\n    toDataURL: function(canvasEl, format, quality) {\n      return canvasEl.toDataURL('image/' + format, quality);\n    },\n\n    /**\n     * Creates image element (works on client and node)\n     * @static\n     * @memberOf fabric.util\n     * @return {HTMLImageElement} HTML image element\n     */\n    createImage: function() {\n      return fabric.document.createElement('img');\n    },\n\n    /**\n     * Multiply matrix A by matrix B to nest transformations\n     * @static\n     * @memberOf fabric.util\n     * @param  {Array} a First transformMatrix\n     * @param  {Array} b Second transformMatrix\n     * @param  {Boolean} is2x2 flag to multiply matrices as 2x2 matrices\n     * @return {Array} The product of the two transform matrices\n     */\n    multiplyTransformMatrices: function(a, b, is2x2) {\n      // Matrix multiply a * b\n      return [\n        a[0] * b[0] + a[2] * b[1],\n        a[1] * b[0] + a[3] * b[1],\n        a[0] * b[2] + a[2] * b[3],\n        a[1] * b[2] + a[3] * b[3],\n        is2x2 ? 0 : a[0] * b[4] + a[2] * b[5] + a[4],\n        is2x2 ? 0 : a[1] * b[4] + a[3] * b[5] + a[5]\n      ];\n    },\n\n    /**\n     * Decomposes standard 2x3 matrix into transform components\n     * @static\n     * @memberOf fabric.util\n     * @param  {Array} a transformMatrix\n     * @return {Object} Components of transform\n     */\n    qrDecompose: function(a) {\n      var angle = atan2(a[1], a[0]),\n          denom = pow(a[0], 2) + pow(a[1], 2),\n          scaleX = sqrt(denom),\n          scaleY = (a[0] * a[3] - a[2] * a[1]) / scaleX,\n          skewX = atan2(a[0] * a[2] + a[1] * a [3], denom);\n      return {\n        angle: angle / PiBy180,\n        scaleX: scaleX,\n        scaleY: scaleY,\n        skewX: skewX / PiBy180,\n        skewY: 0,\n        translateX: a[4],\n        translateY: a[5]\n      };\n    },\n\n    /**\n     * Returns a transform matrix starting from an object of the same kind of\n     * the one returned from qrDecompose, useful also if you want to calculate some\n     * transformations from an object that is not enlived yet\n     * @static\n     * @memberOf fabric.util\n     * @param  {Object} options\n     * @param  {Number} [options.angle] angle in degrees\n     * @return {Number[]} transform matrix\n     */\n    calcRotateMatrix: function(options) {\n      if (!options.angle) {\n        return fabric.iMatrix.concat();\n      }\n      var theta = fabric.util.degreesToRadians(options.angle),\n          cos = fabric.util.cos(theta),\n          sin = fabric.util.sin(theta);\n      return [cos, sin, -sin, cos, 0, 0];\n    },\n\n    /**\n     * Returns a transform matrix starting from an object of the same kind of\n     * the one returned from qrDecompose, useful also if you want to calculate some\n     * transformations from an object that is not enlived yet.\n     * is called DimensionsTransformMatrix because those properties are the one that influence\n     * the size of the resulting box of the object.\n     * @static\n     * @memberOf fabric.util\n     * @param  {Object} options\n     * @param  {Number} [options.scaleX]\n     * @param  {Number} [options.scaleY]\n     * @param  {Boolean} [options.flipX]\n     * @param  {Boolean} [options.flipY]\n     * @param  {Number} [options.skewX]\n     * @param  {Number} [options.skewY]\n     * @return {Number[]} transform matrix\n     */\n    calcDimensionsMatrix: function(options) {\n      var scaleX = typeof options.scaleX === 'undefined' ? 1 : options.scaleX,\n          scaleY = typeof options.scaleY === 'undefined' ? 1 : options.scaleY,\n          scaleMatrix = [\n            options.flipX ? -scaleX : scaleX,\n            0,\n            0,\n            options.flipY ? -scaleY : scaleY,\n            0,\n            0],\n          multiply = fabric.util.multiplyTransformMatrices,\n          degreesToRadians = fabric.util.degreesToRadians;\n      if (options.skewX) {\n        scaleMatrix = multiply(\n          scaleMatrix,\n          [1, 0, Math.tan(degreesToRadians(options.skewX)), 1],\n          true);\n      }\n      if (options.skewY) {\n        scaleMatrix = multiply(\n          scaleMatrix,\n          [1, Math.tan(degreesToRadians(options.skewY)), 0, 1],\n          true);\n      }\n      return scaleMatrix;\n    },\n\n    /**\n     * Returns a transform matrix starting from an object of the same kind of\n     * the one returned from qrDecompose, useful also if you want to calculate some\n     * transformations from an object that is not enlived yet\n     * @static\n     * @memberOf fabric.util\n     * @param  {Object} options\n     * @param  {Number} [options.angle]\n     * @param  {Number} [options.scaleX]\n     * @param  {Number} [options.scaleY]\n     * @param  {Boolean} [options.flipX]\n     * @param  {Boolean} [options.flipY]\n     * @param  {Number} [options.skewX]\n     * @param  {Number} [options.skewX]\n     * @param  {Number} [options.translateX]\n     * @param  {Number} [options.translateY]\n     * @return {Number[]} transform matrix\n     */\n    composeMatrix: function(options) {\n      var matrix = [1, 0, 0, 1, options.translateX || 0, options.translateY || 0],\n          multiply = fabric.util.multiplyTransformMatrices;\n      if (options.angle) {\n        matrix = multiply(matrix, fabric.util.calcRotateMatrix(options));\n      }\n      if (options.scaleX !== 1 || options.scaleY !== 1 ||\n          options.skewX || options.skewY || options.flipX || options.flipY) {\n        matrix = multiply(matrix, fabric.util.calcDimensionsMatrix(options));\n      }\n      return matrix;\n    },\n\n    /**\n     * reset an object transform state to neutral. Top and left are not accounted for\n     * @static\n     * @memberOf fabric.util\n     * @param  {fabric.Object} target object to transform\n     */\n    resetObjectTransform: function (target) {\n      target.scaleX = 1;\n      target.scaleY = 1;\n      target.skewX = 0;\n      target.skewY = 0;\n      target.flipX = false;\n      target.flipY = false;\n      target.rotate(0);\n    },\n\n    /**\n     * Extract Object transform values\n     * @static\n     * @memberOf fabric.util\n     * @param  {fabric.Object} target object to read from\n     * @return {Object} Components of transform\n     */\n    saveObjectTransform: function (target) {\n      return {\n        scaleX: target.scaleX,\n        scaleY: target.scaleY,\n        skewX: target.skewX,\n        skewY: target.skewY,\n        angle: target.angle,\n        left: target.left,\n        flipX: target.flipX,\n        flipY: target.flipY,\n        top: target.top\n      };\n    },\n\n    /**\n     * Returns true if context has transparent pixel\n     * at specified location (taking tolerance into account)\n     * @param {CanvasRenderingContext2D} ctx context\n     * @param {Number} x x coordinate\n     * @param {Number} y y coordinate\n     * @param {Number} tolerance Tolerance\n     */\n    isTransparent: function(ctx, x, y, tolerance) {\n\n      // If tolerance is > 0 adjust start coords to take into account.\n      // If moves off Canvas fix to 0\n      if (tolerance > 0) {\n        if (x > tolerance) {\n          x -= tolerance;\n        }\n        else {\n          x = 0;\n        }\n        if (y > tolerance) {\n          y -= tolerance;\n        }\n        else {\n          y = 0;\n        }\n      }\n\n      var _isTransparent = true, i, temp,\n          imageData = ctx.getImageData(x, y, (tolerance * 2) || 1, (tolerance * 2) || 1),\n          l = imageData.data.length;\n\n      // Split image data - for tolerance > 1, pixelDataSize = 4;\n      for (i = 3; i < l; i += 4) {\n        temp = imageData.data[i];\n        _isTransparent = temp <= 0;\n        if (_isTransparent === false) {\n          break; // Stop if colour found\n        }\n      }\n\n      imageData = null;\n\n      return _isTransparent;\n    },\n\n    /**\n     * Parse preserveAspectRatio attribute from element\n     * @param {string} attribute to be parsed\n     * @return {Object} an object containing align and meetOrSlice attribute\n     */\n    parsePreserveAspectRatioAttribute: function(attribute) {\n      var meetOrSlice = 'meet', alignX = 'Mid', alignY = 'Mid',\n          aspectRatioAttrs = attribute.split(' '), align;\n\n      if (aspectRatioAttrs && aspectRatioAttrs.length) {\n        meetOrSlice = aspectRatioAttrs.pop();\n        if (meetOrSlice !== 'meet' && meetOrSlice !== 'slice') {\n          align = meetOrSlice;\n          meetOrSlice = 'meet';\n        }\n        else if (aspectRatioAttrs.length) {\n          align = aspectRatioAttrs.pop();\n        }\n      }\n      //divide align in alignX and alignY\n      alignX = align !== 'none' ? align.slice(1, 4) : 'none';\n      alignY = align !== 'none' ? align.slice(5, 8) : 'none';\n      return {\n        meetOrSlice: meetOrSlice,\n        alignX: alignX,\n        alignY: alignY\n      };\n    },\n\n    /**\n     * Clear char widths cache for the given font family or all the cache if no\n     * fontFamily is specified.\n     * Use it if you know you are loading fonts in a lazy way and you are not waiting\n     * for custom fonts to load properly when adding text objects to the canvas.\n     * If a text object is added when its own font is not loaded yet, you will get wrong\n     * measurement and so wrong bounding boxes.\n     * After the font cache is cleared, either change the textObject text content or call\n     * initDimensions() to trigger a recalculation\n     * @memberOf fabric.util\n     * @param {String} [fontFamily] font family to clear\n     */\n    clearFabricFontCache: function(fontFamily) {\n      fontFamily = (fontFamily || '').toLowerCase();\n      if (!fontFamily) {\n        fabric.charWidthsCache = { };\n      }\n      else if (fabric.charWidthsCache[fontFamily]) {\n        delete fabric.charWidthsCache[fontFamily];\n      }\n    },\n\n    /**\n     * Given current aspect ratio, determines the max width and height that can\n     * respect the total allowed area for the cache.\n     * @memberOf fabric.util\n     * @param {Number} ar aspect ratio\n     * @param {Number} maximumArea Maximum area you want to achieve\n     * @return {Object.x} Limited dimensions by X\n     * @return {Object.y} Limited dimensions by Y\n     */\n    limitDimsByArea: function(ar, maximumArea) {\n      var roughWidth = Math.sqrt(maximumArea * ar),\n          perfLimitSizeY = Math.floor(maximumArea / roughWidth);\n      return { x: Math.floor(roughWidth), y: perfLimitSizeY };\n    },\n\n    capValue: function(min, value, max) {\n      return Math.max(min, Math.min(value, max));\n    },\n\n    /**\n     * Finds the scale for the object source to fit inside the object destination,\n     * keeping aspect ratio intact.\n     * respect the total allowed area for the cache.\n     * @memberOf fabric.util\n     * @param {Object | fabric.Object} source\n     * @param {Number} source.height natural unscaled height of the object\n     * @param {Number} source.width natural unscaled width of the object\n     * @param {Object | fabric.Object} destination\n     * @param {Number} destination.height natural unscaled height of the object\n     * @param {Number} destination.width natural unscaled width of the object\n     * @return {Number} scale factor to apply to source to fit into destination\n     */\n    findScaleToFit: function(source, destination) {\n      return Math.min(destination.width / source.width, destination.height / source.height);\n    },\n\n    /**\n     * Finds the scale for the object source to cover entirely the object destination,\n     * keeping aspect ratio intact.\n     * respect the total allowed area for the cache.\n     * @memberOf fabric.util\n     * @param {Object | fabric.Object} source\n     * @param {Number} source.height natural unscaled height of the object\n     * @param {Number} source.width natural unscaled width of the object\n     * @param {Object | fabric.Object} destination\n     * @param {Number} destination.height natural unscaled height of the object\n     * @param {Number} destination.width natural unscaled width of the object\n     * @return {Number} scale factor to apply to source to cover destination\n     */\n    findScaleToCover: function(source, destination) {\n      return Math.max(destination.width / source.width, destination.height / source.height);\n    },\n\n    /**\n     * given an array of 6 number returns something like `\"matrix(...numbers)\"`\n     * @memberOf fabric.util\n     * @param {Array} transform an array with 6 numbers\n     * @return {String} transform matrix for svg\n     * @return {Object.y} Limited dimensions by Y\n     */\n    matrixToSVG: function(transform) {\n      return 'matrix(' + transform.map(function(value) {\n        return fabric.util.toFixed(value, fabric.Object.NUM_FRACTION_DIGITS);\n      }).join(' ') + ')';\n    },\n\n    /**\n     * given an object and a transform, apply the inverse transform to the object,\n     * this is equivalent to remove from that object that transformation, so that\n     * added in a space with the removed transform, the object will be the same as before.\n     * Removing from an object a transform that scale by 2 is like scaling it by 1/2.\n     * Removing from an object a transfrom that rotate by 30deg is like rotating by 30deg\n     * in the opposite direction.\n     * This util is used to add objects inside transformed groups or nested groups.\n     * @memberOf fabric.util\n     * @param {fabric.Object} object the object you want to transform\n     * @param {Array} transform the destination transform\n     */\n    removeTransformFromObject: function(object, transform) {\n      var inverted = fabric.util.invertTransform(transform),\n          finalTransform = fabric.util.multiplyTransformMatrices(inverted, object.calcOwnMatrix());\n      fabric.util.applyTransformToObject(object, finalTransform);\n    },\n\n    /**\n     * given an object and a transform, apply the transform to the object.\n     * this is equivalent to change the space where the object is drawn.\n     * Adding to an object a transform that scale by 2 is like scaling it by 2.\n     * This is used when removing an object from an active selection for example.\n     * @memberOf fabric.util\n     * @param {fabric.Object} object the object you want to transform\n     * @param {Array} transform the destination transform\n     */\n    addTransformToObject: function(object, transform) {\n      fabric.util.applyTransformToObject(\n        object,\n        fabric.util.multiplyTransformMatrices(transform, object.calcOwnMatrix())\n      );\n    },\n\n    /**\n     * discard an object transform state and apply the one from the matrix.\n     * @memberOf fabric.util\n     * @param {fabric.Object} object the object you want to transform\n     * @param {Array} transform the destination transform\n     */\n    applyTransformToObject: function(object, transform) {\n      var options = fabric.util.qrDecompose(transform),\n          center = new fabric.Point(options.translateX, options.translateY);\n      object.flipX = false;\n      object.flipY = false;\n      object.set('scaleX', options.scaleX);\n      object.set('scaleY', options.scaleY);\n      object.skewX = options.skewX;\n      object.skewY = options.skewY;\n      object.angle = options.angle;\n      object.setPositionByOrigin(center, 'center', 'center');\n    },\n\n    /**\n     * given a width and height, return the size of the bounding box\n     * that can contains the box with width/height with applied transform\n     * described in options.\n     * Use to calculate the boxes around objects for controls.\n     * @memberOf fabric.util\n     * @param {Number} width\n     * @param {Number} height\n     * @param {Object} options\n     * @param {Number} options.scaleX\n     * @param {Number} options.scaleY\n     * @param {Number} options.skewX\n     * @param {Number} options.skewY\n     * @return {Object.x} width of containing\n     * @return {Object.y} height of containing\n     */\n    sizeAfterTransform: function(width, height, options) {\n      var dimX = width / 2, dimY = height / 2,\n          points = [\n            {\n              x: -dimX,\n              y: -dimY\n            },\n            {\n              x: dimX,\n              y: -dimY\n            },\n            {\n              x: -dimX,\n              y: dimY\n            },\n            {\n              x: dimX,\n              y: dimY\n            }],\n          transformMatrix = fabric.util.calcDimensionsMatrix(options),\n          bbox = fabric.util.makeBoundingBoxFromPoints(points, transformMatrix);\n      return {\n        x: bbox.width,\n        y: bbox.height,\n      };\n    },\n\n    /**\n     * Merges 2 clip paths into one visually equal clip path\n     *\n     * **IMPORTANT**:\\\n     * Does **NOT** clone the arguments, clone them proir if necessary.\n     *\n     * Creates a wrapper (group) that contains one clip path and is clipped by the other so content is kept where both overlap.\n     * Use this method if both the clip paths may have nested clip paths of their own, so assigning one to the other's clip path property is not possible.\n     *\n     * In order to handle the `inverted` property we follow logic described in the following cases:\\\n     * **(1)** both clip paths are inverted - the clip paths pass the inverted prop to the wrapper and loose it themselves.\\\n     * **(2)** one is inverted and the other isn't - the wrapper shouldn't become inverted and the inverted clip path must clip the non inverted one to produce an identical visual effect.\\\n     * **(3)** both clip paths are not inverted - wrapper and clip paths remain unchanged.\n     *\n     * @memberOf fabric.util\n     * @param {fabric.Object} c1\n     * @param {fabric.Object} c2\n     * @returns {fabric.Object} merged clip path\n     */\n    mergeClipPaths: function (c1, c2) {\n      var a = c1, b = c2;\n      if (a.inverted && !b.inverted) {\n        //  case (2)\n        a = c2;\n        b = c1;\n      }\n      //  `b` becomes `a`'s clip path so we transform `b` to `a` coordinate plane\n      fabric.util.applyTransformToObject(\n        b,\n        fabric.util.multiplyTransformMatrices(\n          fabric.util.invertTransform(a.calcTransformMatrix()),\n          b.calcTransformMatrix()\n        )\n      );\n      //  assign the `inverted` prop to the wrapping group\n      var inverted = a.inverted && b.inverted;\n      if (inverted) {\n        //  case (1)\n        a.inverted = b.inverted = false;\n      }\n      return new fabric.Group([a], { clipPath: b, inverted: inverted });\n    },\n\n    /**\n     * @memberOf fabric.util\n     * @param {Object} prevStyle first style to compare\n     * @param {Object} thisStyle second style to compare\n     * @param {boolean} forTextSpans whether to check overline, underline, and line-through properties\n     * @return {boolean} true if the style changed\n     */\n    hasStyleChanged: function(prevStyle, thisStyle, forTextSpans) {\n      forTextSpans = forTextSpans || false;\n      return (prevStyle.fill !== thisStyle.fill ||\n              prevStyle.stroke !== thisStyle.stroke ||\n              prevStyle.strokeWidth !== thisStyle.strokeWidth ||\n              prevStyle.fontSize !== thisStyle.fontSize ||\n              prevStyle.fontFamily !== thisStyle.fontFamily ||\n              prevStyle.fontWeight !== thisStyle.fontWeight ||\n              prevStyle.fontStyle !== thisStyle.fontStyle ||\n              prevStyle.deltaY !== thisStyle.deltaY) ||\n              (forTextSpans &&\n                (prevStyle.overline !== thisStyle.overline ||\n                prevStyle.underline !== thisStyle.underline ||\n                prevStyle.linethrough !== thisStyle.linethrough));\n    },\n\n    /**\n     * Returns the array form of a text object's inline styles property with styles grouped in ranges\n     * rather than per character. This format is less verbose, and is better suited for storage\n     * so it is used in serialization (not during runtime).\n     * @memberOf fabric.util\n     * @param {object} styles per character styles for a text object\n     * @param {String} text the text string that the styles are applied to\n     * @return {{start: number, end: number, style: object}[]}\n     */\n    stylesToArray: function(styles, text) {\n      // clone style structure to prevent mutation\n      var styles = fabric.util.object.clone(styles, true),\n          textLines = text.split('\\n'),\n          charIndex = -1, prevStyle = {}, stylesArray = [];\n      //loop through each textLine\n      for (var i = 0; i < textLines.length; i++) {\n        if (!styles[i]) {\n          //no styles exist for this line, so add the line's length to the charIndex total\n          charIndex += textLines[i].length;\n          continue;\n        }\n        //loop through each character of the current line\n        for (var c = 0; c < textLines[i].length; c++) {\n          charIndex++;\n          var thisStyle = styles[i][c];\n          //check if style exists for this character\n          if (thisStyle) {\n            var styleChanged = fabric.util.hasStyleChanged(prevStyle, thisStyle, true);\n            if (styleChanged) {\n              stylesArray.push({\n                start: charIndex,\n                end: charIndex + 1,\n                style: thisStyle\n              });\n            }\n            else {\n              //if style is the same as previous character, increase end index\n              stylesArray[stylesArray.length - 1].end++;\n            }\n          }\n          prevStyle = thisStyle || {};\n        }\n      }\n      return stylesArray;\n    },\n\n    /**\n     * Returns the object form of the styles property with styles that are assigned per\n     * character rather than grouped by range. This format is more verbose, and is\n     * only used during runtime (not for serialization/storage)\n     * @memberOf fabric.util\n     * @param {Array} styles the serialized form of a text object's styles\n     * @param {String} text the text string that the styles are applied to\n     * @return {Object}\n     */\n    stylesFromArray: function(styles, text) {\n      if (!Array.isArray(styles)) {\n        return styles;\n      }\n      var textLines = text.split('\\n'),\n          charIndex = -1, styleIndex = 0, stylesObject = {};\n      //loop through each textLine\n      for (var i = 0; i < textLines.length; i++) {\n        //loop through each character of the current line\n        for (var c = 0; c < textLines[i].length; c++) {\n          charIndex++;\n          //check if there's a style collection that includes the current character\n          if (styles[styleIndex]\n            && styles[styleIndex].start <= charIndex\n            && charIndex < styles[styleIndex].end) {\n            //create object for line index if it doesn't exist\n            stylesObject[i] = stylesObject[i] || {};\n            //assign a style at this character's index\n            stylesObject[i][c] = Object.assign({}, styles[styleIndex].style);\n            //if character is at the end of the current style collection, move to the next\n            if (charIndex === styles[styleIndex].end - 1) {\n              styleIndex++;\n            }\n          }\n        }\n      }\n      return stylesObject;\n    }\n  };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n  var _join = Array.prototype.join,\n      commandLengths = {\n        m: 2,\n        l: 2,\n        h: 1,\n        v: 1,\n        c: 6,\n        s: 4,\n        q: 4,\n        t: 2,\n        a: 7\n      },\n      repeatedCommands = {\n        m: 'l',\n        M: 'L'\n      };\n  function segmentToBezier(th2, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY) {\n    var costh2 = fabric.util.cos(th2),\n        sinth2 = fabric.util.sin(th2),\n        costh3 = fabric.util.cos(th3),\n        sinth3 = fabric.util.sin(th3),\n        toX = cosTh * rx * costh3 - sinTh * ry * sinth3 + cx1,\n        toY = sinTh * rx * costh3 + cosTh * ry * sinth3 + cy1,\n        cp1X = fromX + mT * ( -cosTh * rx * sinth2 - sinTh * ry * costh2),\n        cp1Y = fromY + mT * ( -sinTh * rx * sinth2 + cosTh * ry * costh2),\n        cp2X = toX + mT * ( cosTh * rx * sinth3 + sinTh * ry * costh3),\n        cp2Y = toY + mT * ( sinTh * rx * sinth3 - cosTh * ry * costh3);\n\n    return ['C',\n      cp1X, cp1Y,\n      cp2X, cp2Y,\n      toX, toY\n    ];\n  }\n\n  /* Adapted from http://dxr.mozilla.org/mozilla-central/source/content/svg/content/src/nsSVGPathDataParser.cpp\n   * by Andrea Bogazzi code is under MPL. if you don't have a copy of the license you can take it here\n   * http://mozilla.org/MPL/2.0/\n   */\n  function arcToSegments(toX, toY, rx, ry, large, sweep, rotateX) {\n    var PI = Math.PI, th = rotateX * PI / 180,\n        sinTh = fabric.util.sin(th),\n        cosTh = fabric.util.cos(th),\n        fromX = 0, fromY = 0;\n\n    rx = Math.abs(rx);\n    ry = Math.abs(ry);\n\n    var px = -cosTh * toX * 0.5 - sinTh * toY * 0.5,\n        py = -cosTh * toY * 0.5 + sinTh * toX * 0.5,\n        rx2 = rx * rx, ry2 = ry * ry, py2 = py * py, px2 = px * px,\n        pl = rx2 * ry2 - rx2 * py2 - ry2 * px2,\n        root = 0;\n\n    if (pl < 0) {\n      var s = Math.sqrt(1 - pl / (rx2 * ry2));\n      rx *= s;\n      ry *= s;\n    }\n    else {\n      root = (large === sweep ? -1.0 : 1.0) *\n              Math.sqrt( pl / (rx2 * py2 + ry2 * px2));\n    }\n\n    var cx = root * rx * py / ry,\n        cy = -root * ry * px / rx,\n        cx1 = cosTh * cx - sinTh * cy + toX * 0.5,\n        cy1 = sinTh * cx + cosTh * cy + toY * 0.5,\n        mTheta = calcVectorAngle(1, 0, (px - cx) / rx, (py - cy) / ry),\n        dtheta = calcVectorAngle((px - cx) / rx, (py - cy) / ry, (-px - cx) / rx, (-py - cy) / ry);\n\n    if (sweep === 0 && dtheta > 0) {\n      dtheta -= 2 * PI;\n    }\n    else if (sweep === 1 && dtheta < 0) {\n      dtheta += 2 * PI;\n    }\n\n    // Convert into cubic bezier segments <= 90deg\n    var segments = Math.ceil(Math.abs(dtheta / PI * 2)),\n        result = [], mDelta = dtheta / segments,\n        mT = 8 / 3 * Math.sin(mDelta / 4) * Math.sin(mDelta / 4) / Math.sin(mDelta / 2),\n        th3 = mTheta + mDelta;\n\n    for (var i = 0; i < segments; i++) {\n      result[i] = segmentToBezier(mTheta, th3, cosTh, sinTh, rx, ry, cx1, cy1, mT, fromX, fromY);\n      fromX = result[i][5];\n      fromY = result[i][6];\n      mTheta = th3;\n      th3 += mDelta;\n    }\n    return result;\n  }\n\n  /*\n   * Private\n   */\n  function calcVectorAngle(ux, uy, vx, vy) {\n    var ta = Math.atan2(uy, ux),\n        tb = Math.atan2(vy, vx);\n    if (tb >= ta) {\n      return tb - ta;\n    }\n    else {\n      return 2 * Math.PI - (ta - tb);\n    }\n  }\n\n  /**\n   * Calculate bounding box of a beziercurve\n   * @param {Number} x0 starting point\n   * @param {Number} y0\n   * @param {Number} x1 first control point\n   * @param {Number} y1\n   * @param {Number} x2 secondo control point\n   * @param {Number} y2\n   * @param {Number} x3 end of bezier\n   * @param {Number} y3\n   */\n  // taken from http://jsbin.com/ivomiq/56/edit  no credits available for that.\n  // TODO: can we normalize this with the starting points set at 0 and then translated the bbox?\n  function getBoundsOfCurve(x0, y0, x1, y1, x2, y2, x3, y3) {\n    var argsString;\n    if (fabric.cachesBoundsOfCurve) {\n      argsString = _join.call(arguments);\n      if (fabric.boundsOfCurveCache[argsString]) {\n        return fabric.boundsOfCurveCache[argsString];\n      }\n    }\n\n    var sqrt = Math.sqrt,\n        min = Math.min, max = Math.max,\n        abs = Math.abs, tvalues = [],\n        bounds = [[], []],\n        a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n\n    b = 6 * x0 - 12 * x1 + 6 * x2;\n    a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n    c = 3 * x1 - 3 * x0;\n\n    for (var i = 0; i < 2; ++i) {\n      if (i > 0) {\n        b = 6 * y0 - 12 * y1 + 6 * y2;\n        a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n        c = 3 * y1 - 3 * y0;\n      }\n\n      if (abs(a) < 1e-12) {\n        if (abs(b) < 1e-12) {\n          continue;\n        }\n        t = -c / b;\n        if (0 < t && t < 1) {\n          tvalues.push(t);\n        }\n        continue;\n      }\n      b2ac = b * b - 4 * c * a;\n      if (b2ac < 0) {\n        continue;\n      }\n      sqrtb2ac = sqrt(b2ac);\n      t1 = (-b + sqrtb2ac) / (2 * a);\n      if (0 < t1 && t1 < 1) {\n        tvalues.push(t1);\n      }\n      t2 = (-b - sqrtb2ac) / (2 * a);\n      if (0 < t2 && t2 < 1) {\n        tvalues.push(t2);\n      }\n    }\n\n    var x, y, j = tvalues.length, jlen = j, mt;\n    while (j--) {\n      t = tvalues[j];\n      mt = 1 - t;\n      x = (mt * mt * mt * x0) + (3 * mt * mt * t * x1) + (3 * mt * t * t * x2) + (t * t * t * x3);\n      bounds[0][j] = x;\n\n      y = (mt * mt * mt * y0) + (3 * mt * mt * t * y1) + (3 * mt * t * t * y2) + (t * t * t * y3);\n      bounds[1][j] = y;\n    }\n\n    bounds[0][jlen] = x0;\n    bounds[1][jlen] = y0;\n    bounds[0][jlen + 1] = x3;\n    bounds[1][jlen + 1] = y3;\n    var result = [\n      {\n        x: min.apply(null, bounds[0]),\n        y: min.apply(null, bounds[1])\n      },\n      {\n        x: max.apply(null, bounds[0]),\n        y: max.apply(null, bounds[1])\n      }\n    ];\n    if (fabric.cachesBoundsOfCurve) {\n      fabric.boundsOfCurveCache[argsString] = result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts arc to a bunch of bezier curves\n   * @param {Number} fx starting point x\n   * @param {Number} fy starting point y\n   * @param {Array} coords Arc command\n   */\n  function fromArcToBeziers(fx, fy, coords) {\n    var rx = coords[1],\n        ry = coords[2],\n        rot = coords[3],\n        large = coords[4],\n        sweep = coords[5],\n        tx = coords[6],\n        ty = coords[7],\n        segsNorm = arcToSegments(tx - fx, ty - fy, rx, ry, large, sweep, rot);\n\n    for (var i = 0, len = segsNorm.length; i < len; i++) {\n      segsNorm[i][1] += fx;\n      segsNorm[i][2] += fy;\n      segsNorm[i][3] += fx;\n      segsNorm[i][4] += fy;\n      segsNorm[i][5] += fx;\n      segsNorm[i][6] += fy;\n    }\n    return segsNorm;\n  };\n\n  /**\n   * This function take a parsed SVG path and make it simpler for fabricJS logic.\n   * simplification consist of: only UPPERCASE absolute commands ( relative converted to absolute )\n   * S converted in C, T converted in Q, A converted in C.\n   * @param {Array} path the array of commands of a parsed svg path for fabric.Path\n   * @return {Array} the simplified array of commands of a parsed svg path for fabric.Path\n   */\n  function makePathSimpler(path) {\n    // x and y represent the last point of the path. the previous command point.\n    // we add them to each relative command to make it an absolute comment.\n    // we also swap the v V h H with L, because are easier to transform.\n    var x = 0, y = 0, len = path.length,\n        // x1 and y1 represent the last point of the subpath. the subpath is started with\n        // m or M command. When a z or Z command is drawn, x and y need to be resetted to\n        // the last x1 and y1.\n        x1 = 0, y1 = 0, current, i, converted,\n        // previous will host the letter of the previous command, to handle S and T.\n        // controlX and controlY will host the previous reflected control point\n        destinationPath = [], previous, controlX, controlY;\n    for (i = 0; i < len; ++i) {\n      converted = false;\n      current = path[i].slice(0);\n      switch (current[0]) { // first letter\n        case 'l': // lineto, relative\n          current[0] = 'L';\n          current[1] += x;\n          current[2] += y;\n          // falls through\n        case 'L':\n          x = current[1];\n          y = current[2];\n          break;\n        case 'h': // horizontal lineto, relative\n          current[1] += x;\n          // falls through\n        case 'H':\n          current[0] = 'L';\n          current[2] = y;\n          x = current[1];\n          break;\n        case 'v': // vertical lineto, relative\n          current[1] += y;\n          // falls through\n        case 'V':\n          current[0] = 'L';\n          y = current[1];\n          current[1] = x;\n          current[2] = y;\n          break;\n        case 'm': // moveTo, relative\n          current[0] = 'M';\n          current[1] += x;\n          current[2] += y;\n          // falls through\n        case 'M':\n          x = current[1];\n          y = current[2];\n          x1 = current[1];\n          y1 = current[2];\n          break;\n        case 'c': // bezierCurveTo, relative\n          current[0] = 'C';\n          current[1] += x;\n          current[2] += y;\n          current[3] += x;\n          current[4] += y;\n          current[5] += x;\n          current[6] += y;\n          // falls through\n        case 'C':\n          controlX = current[3];\n          controlY = current[4];\n          x = current[5];\n          y = current[6];\n          break;\n        case 's': // shorthand cubic bezierCurveTo, relative\n          current[0] = 'S';\n          current[1] += x;\n          current[2] += y;\n          current[3] += x;\n          current[4] += y;\n          // falls through\n        case 'S':\n          // would be sScC but since we are swapping sSc for C, we check just that.\n          if (previous === 'C') {\n            // calculate reflection of previous control points\n            controlX = 2 * x - controlX;\n            controlY = 2 * y - controlY;\n          }\n          else {\n            // If there is no previous command or if the previous command was not a C, c, S, or s,\n            // the control point is coincident with the current point\n            controlX = x;\n            controlY = y;\n          }\n          x = current[3];\n          y = current[4];\n          current[0] = 'C';\n          current[5] = current[3];\n          current[6] = current[4];\n          current[3] = current[1];\n          current[4] = current[2];\n          current[1] = controlX;\n          current[2] = controlY;\n          // current[3] and current[4] are NOW the second control point.\n          // we keep it for the next reflection.\n          controlX = current[3];\n          controlY = current[4];\n          break;\n        case 'q': // quadraticCurveTo, relative\n          current[0] = 'Q';\n          current[1] += x;\n          current[2] += y;\n          current[3] += x;\n          current[4] += y;\n          // falls through\n        case 'Q':\n          controlX = current[1];\n          controlY = current[2];\n          x = current[3];\n          y = current[4];\n          break;\n        case 't': // shorthand quadraticCurveTo, relative\n          current[0] = 'T';\n          current[1] += x;\n          current[2] += y;\n          // falls through\n        case 'T':\n          if (previous === 'Q') {\n            // calculate reflection of previous control point\n            controlX = 2 * x - controlX;\n            controlY = 2 * y - controlY;\n          }\n          else {\n            // If there is no previous command or if the previous command was not a Q, q, T or t,\n            // assume the control point is coincident with the current point\n            controlX = x;\n            controlY = y;\n          }\n          current[0] = 'Q';\n          x = current[1];\n          y = current[2];\n          current[1] = controlX;\n          current[2] = controlY;\n          current[3] = x;\n          current[4] = y;\n          break;\n        case 'a':\n          current[0] = 'A';\n          current[6] += x;\n          current[7] += y;\n          // falls through\n        case 'A':\n          converted = true;\n          destinationPath = destinationPath.concat(fromArcToBeziers(x, y, current));\n          x = current[6];\n          y = current[7];\n          break;\n        case 'z':\n        case 'Z':\n          x = x1;\n          y = y1;\n          break;\n        default:\n      }\n      if (!converted) {\n        destinationPath.push(current);\n      }\n      previous = current[0];\n    }\n    return destinationPath;\n  };\n\n  /**\n   * Calc length from point x1,y1 to x2,y2\n   * @param {Number} x1 starting point x\n   * @param {Number} y1 starting point y\n   * @param {Number} x2 starting point x\n   * @param {Number} y2 starting point y\n   * @return {Number} length of segment\n   */\n  function calcLineLength(x1, y1, x2, y2) {\n    return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n  }\n\n  // functions for the Cubic beizer\n  // taken from: https://github.com/konvajs/konva/blob/7.0.5/src/shapes/Path.ts#L350\n  function CB1(t) {\n    return t * t * t;\n  }\n  function CB2(t) {\n    return 3 * t * t * (1 - t);\n  }\n  function CB3(t) {\n    return 3 * t * (1 - t) * (1 - t);\n  }\n  function CB4(t) {\n    return (1 - t) * (1 - t) * (1 - t);\n  }\n\n  function getPointOnCubicBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n    return function(pct) {\n      var c1 = CB1(pct), c2 = CB2(pct), c3 = CB3(pct), c4 = CB4(pct);\n      return {\n        x: p4x * c1 + p3x * c2 + p2x * c3 + p1x * c4,\n        y: p4y * c1 + p3y * c2 + p2y * c3 + p1y * c4\n      };\n    };\n  }\n\n  function getTangentCubicIterator(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n    return function (pct) {\n      var invT = 1 - pct,\n          tangentX = (3 * invT * invT * (p2x - p1x)) + (6 * invT * pct * (p3x - p2x)) +\n          (3 * pct * pct * (p4x - p3x)),\n          tangentY = (3 * invT * invT * (p2y - p1y)) + (6 * invT * pct * (p3y - p2y)) +\n          (3 * pct * pct * (p4y - p3y));\n      return Math.atan2(tangentY, tangentX);\n    };\n  }\n\n  function QB1(t) {\n    return t * t;\n  }\n\n  function QB2(t) {\n    return 2 * t * (1 - t);\n  }\n\n  function QB3(t) {\n    return (1 - t) * (1 - t);\n  }\n\n  function getPointOnQuadraticBezierIterator(p1x, p1y, p2x, p2y, p3x, p3y) {\n    return function(pct) {\n      var c1 = QB1(pct), c2 = QB2(pct), c3 = QB3(pct);\n      return {\n        x: p3x * c1 + p2x * c2 + p1x * c3,\n        y: p3y * c1 + p2y * c2 + p1y * c3\n      };\n    };\n  }\n\n  function getTangentQuadraticIterator(p1x, p1y, p2x, p2y, p3x, p3y) {\n    return function (pct) {\n      var invT = 1 - pct,\n          tangentX = (2 * invT * (p2x - p1x)) + (2 * pct * (p3x - p2x)),\n          tangentY = (2 * invT * (p2y - p1y)) + (2 * pct * (p3y - p2y));\n      return Math.atan2(tangentY, tangentX);\n    };\n  }\n\n\n  // this will run over a path segment ( a cubic or quadratic segment) and approximate it\n  // with 100 segemnts. This will good enough to calculate the length of the curve\n  function pathIterator(iterator, x1, y1) {\n    var tempP = { x: x1, y: y1 }, p, tmpLen = 0, perc;\n    for (perc = 1; perc <= 100; perc += 1) {\n      p = iterator(perc / 100);\n      tmpLen += calcLineLength(tempP.x, tempP.y, p.x, p.y);\n      tempP = p;\n    }\n    return tmpLen;\n  }\n\n  /**\n   * Given a pathInfo, and a distance in pixels, find the percentage from 0 to 1\n   * that correspond to that pixels run over the path.\n   * The percentage will be then used to find the correct point on the canvas for the path.\n   * @param {Array} segInfo fabricJS collection of information on a parsed path\n   * @param {Number} distance from starting point, in pixels.\n   * @return {Object} info object with x and y ( the point on canvas ) and angle, the tangent on that point;\n   */\n  function findPercentageForDistance(segInfo, distance) {\n    var perc = 0, tmpLen = 0, iterator = segInfo.iterator, tempP = { x: segInfo.x, y: segInfo.y },\n        p, nextLen, nextStep = 0.01, angleFinder = segInfo.angleFinder, lastPerc;\n    // nextStep > 0.0001 covers 0.00015625 that 1/64th of 1/100\n    // the path\n    while (tmpLen < distance && nextStep > 0.0001) {\n      p = iterator(perc);\n      lastPerc = perc;\n      nextLen = calcLineLength(tempP.x, tempP.y, p.x, p.y);\n      // compare tmpLen each cycle with distance, decide next perc to test.\n      if ((nextLen + tmpLen) > distance) {\n        // we discard this step and we make smaller steps.\n        perc -= nextStep;\n        nextStep /= 2;\n      }\n      else {\n        tempP = p;\n        perc += nextStep;\n        tmpLen += nextLen;\n      }\n    }\n    p.angle = angleFinder(lastPerc);\n    return p;\n  }\n\n  /**\n   * Run over a parsed and simplifed path and extrac some informations.\n   * informations are length of each command and starting point\n   * @param {Array} path fabricJS parsed path commands\n   * @return {Array} path commands informations\n   */\n  function getPathSegmentsInfo(path) {\n    var totalLength = 0, len = path.length, current,\n        //x2 and y2 are the coords of segment start\n        //x1 and y1 are the coords of the current point\n        x1 = 0, y1 = 0, x2 = 0, y2 = 0, info = [], iterator, tempInfo, angleFinder;\n    for (var i = 0; i < len; i++) {\n      current = path[i];\n      tempInfo = {\n        x: x1,\n        y: y1,\n        command: current[0],\n      };\n      switch (current[0]) { //first letter\n        case 'M':\n          tempInfo.length = 0;\n          x2 = x1 = current[1];\n          y2 = y1 = current[2];\n          break;\n        case 'L':\n          tempInfo.length = calcLineLength(x1, y1, current[1], current[2]);\n          x1 = current[1];\n          y1 = current[2];\n          break;\n        case 'C':\n          iterator = getPointOnCubicBezierIterator(\n            x1,\n            y1,\n            current[1],\n            current[2],\n            current[3],\n            current[4],\n            current[5],\n            current[6]\n          );\n          angleFinder = getTangentCubicIterator(\n            x1,\n            y1,\n            current[1],\n            current[2],\n            current[3],\n            current[4],\n            current[5],\n            current[6]\n          );\n          tempInfo.iterator = iterator;\n          tempInfo.angleFinder = angleFinder;\n          tempInfo.length = pathIterator(iterator, x1, y1);\n          x1 = current[5];\n          y1 = current[6];\n          break;\n        case 'Q':\n          iterator = getPointOnQuadraticBezierIterator(\n            x1,\n            y1,\n            current[1],\n            current[2],\n            current[3],\n            current[4]\n          );\n          angleFinder = getTangentQuadraticIterator(\n            x1,\n            y1,\n            current[1],\n            current[2],\n            current[3],\n            current[4]\n          );\n          tempInfo.iterator = iterator;\n          tempInfo.angleFinder = angleFinder;\n          tempInfo.length = pathIterator(iterator, x1, y1);\n          x1 = current[3];\n          y1 = current[4];\n          break;\n        case 'Z':\n        case 'z':\n          // we add those in order to ease calculations later\n          tempInfo.destX = x2;\n          tempInfo.destY = y2;\n          tempInfo.length = calcLineLength(x1, y1, x2, y2);\n          x1 = x2;\n          y1 = y2;\n          break;\n      }\n      totalLength += tempInfo.length;\n      info.push(tempInfo);\n    }\n    info.push({ length: totalLength, x: x1, y: y1 });\n    return info;\n  }\n\n  function getPointOnPath(path, distance, infos) {\n    if (!infos) {\n      infos = getPathSegmentsInfo(path);\n    }\n    var i = 0;\n    while ((distance - infos[i].length > 0) && i < (infos.length - 2)) {\n      distance -= infos[i].length;\n      i++;\n    }\n    // var distance = infos[infos.length - 1] * perc;\n    var segInfo = infos[i], segPercent = distance / segInfo.length,\n        command = segInfo.command, segment = path[i], info;\n\n    switch (command) {\n      case 'M':\n        return { x: segInfo.x, y: segInfo.y, angle: 0 };\n      case 'Z':\n      case 'z':\n        info = new fabric.Point(segInfo.x, segInfo.y).lerp(\n          new fabric.Point(segInfo.destX, segInfo.destY),\n          segPercent\n        );\n        info.angle = Math.atan2(segInfo.destY - segInfo.y, segInfo.destX - segInfo.x);\n        return info;\n      case 'L':\n        info = new fabric.Point(segInfo.x, segInfo.y).lerp(\n          new fabric.Point(segment[1], segment[2]),\n          segPercent\n        );\n        info.angle = Math.atan2(segment[2] - segInfo.y, segment[1] - segInfo.x);\n        return info;\n      case 'C':\n        return findPercentageForDistance(segInfo, distance);\n      case 'Q':\n        return findPercentageForDistance(segInfo, distance);\n    }\n  }\n\n  /**\n   *\n   * @param {string} pathString\n   * @return {(string|number)[][]} An array of SVG path commands\n   * @example <caption>Usage</caption>\n   * parsePath('M 3 4 Q 3 5 2 1 4 0 Q 9 12 2 1 4 0') === [\n   *   ['M', 3, 4],\n   *   ['Q', 3, 5, 2, 1, 4, 0],\n   *   ['Q', 9, 12, 2, 1, 4, 0],\n   * ];\n   *\n   */\n  function parsePath(pathString) {\n    var result = [],\n        coords = [],\n        currentPath,\n        parsed,\n        re = fabric.rePathCommand,\n        rNumber = '[-+]?(?:\\\\d*\\\\.\\\\d+|\\\\d+\\\\.?)(?:[eE][-+]?\\\\d+)?\\\\s*',\n        rNumberCommaWsp = '(' + rNumber + ')' + fabric.commaWsp,\n        rFlagCommaWsp = '([01])' + fabric.commaWsp + '?',\n        rArcSeq = rNumberCommaWsp + '?' + rNumberCommaWsp + '?' + rNumberCommaWsp + rFlagCommaWsp + rFlagCommaWsp +\n          rNumberCommaWsp + '?(' + rNumber + ')',\n        regArcArgumentSequence = new RegExp(rArcSeq, 'g'),\n        match,\n        coordsStr,\n        // one of commands (m,M,l,L,q,Q,c,C,etc.) followed by non-command characters (i.e. command values)\n        path;\n    if (!pathString || !pathString.match) {\n      return result;\n    }\n    path = pathString.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);\n\n    for (var i = 0, coordsParsed, len = path.length; i < len; i++) {\n      currentPath = path[i];\n\n      coordsStr = currentPath.slice(1).trim();\n      coords.length = 0;\n\n      var command = currentPath.charAt(0);\n      coordsParsed = [command];\n\n      if (command.toLowerCase() === 'a') {\n        // arcs have special flags that apparently don't require spaces so handle special\n        for (var args; (args = regArcArgumentSequence.exec(coordsStr));) {\n          for (var j = 1; j < args.length; j++) {\n            coords.push(args[j]);\n          }\n        }\n      }\n      else {\n        while ((match = re.exec(coordsStr))) {\n          coords.push(match[0]);\n        }\n      }\n\n      for (var j = 0, jlen = coords.length; j < jlen; j++) {\n        parsed = parseFloat(coords[j]);\n        if (!isNaN(parsed)) {\n          coordsParsed.push(parsed);\n        }\n      }\n\n      var commandLength = commandLengths[command.toLowerCase()],\n          repeatedCommand = repeatedCommands[command] || command;\n\n      if (coordsParsed.length - 1 > commandLength) {\n        for (var k = 1, klen = coordsParsed.length; k < klen; k += commandLength) {\n          result.push([command].concat(coordsParsed.slice(k, k + commandLength)));\n          command = repeatedCommand;\n        }\n      }\n      else {\n        result.push(coordsParsed);\n      }\n    }\n\n    return result;\n  };\n\n  /**\n   *\n   * Converts points to a smooth SVG path\n   * @param {{ x: number,y: number }[]} points Array of points\n   * @param {number} [correction] Apply a correction to the path (usually we use `width / 1000`). If value is undefined 0 is used as the correction value.\n   * @return {(string|number)[][]} An array of SVG path commands\n   */\n  function getSmoothPathFromPoints(points, correction) {\n    var path = [], i,\n        p1 = new fabric.Point(points[0].x, points[0].y),\n        p2 = new fabric.Point(points[1].x, points[1].y),\n        len = points.length, multSignX = 1, multSignY = 0, manyPoints = len > 2;\n    correction = correction || 0;\n\n    if (manyPoints) {\n      multSignX = points[2].x < p2.x ? -1 : points[2].x === p2.x ? 0 : 1;\n      multSignY = points[2].y < p2.y ? -1 : points[2].y === p2.y ? 0 : 1;\n    }\n    path.push(['M', p1.x - multSignX * correction, p1.y - multSignY * correction]);\n    for (i = 1; i < len; i++) {\n      if (!p1.eq(p2)) {\n        var midPoint = p1.midPointFrom(p2);\n        // p1 is our bezier control point\n        // midpoint is our endpoint\n        // start point is p(i-1) value.\n        path.push(['Q', p1.x, p1.y, midPoint.x, midPoint.y]);\n      }\n      p1 = points[i];\n      if ((i + 1) < points.length) {\n        p2 = points[i + 1];\n      }\n    }\n    if (manyPoints) {\n      multSignX = p1.x > points[i - 2].x ? 1 : p1.x === points[i - 2].x ? 0 : -1;\n      multSignY = p1.y > points[i - 2].y ? 1 : p1.y === points[i - 2].y ? 0 : -1;\n    }\n    path.push(['L', p1.x + multSignX * correction, p1.y + multSignY * correction]);\n    return path;\n  }\n  /**\n   * Transform a path by transforming each segment.\n   * it has to be a simplified path or it won't work.\n   * WARNING: this depends from pathOffset for correct operation\n   * @param {Array} path fabricJS parsed and simplified path commands\n   * @param {Array} transform matrix that represent the transformation\n   * @param {Object} [pathOffset] the fabric.Path pathOffset\n   * @param {Number} pathOffset.x\n   * @param {Number} pathOffset.y\n   * @returns {Array} the transformed path\n   */\n  function transformPath(path, transform, pathOffset) {\n    if (pathOffset) {\n      transform = fabric.util.multiplyTransformMatrices(\n        transform,\n        [1, 0, 0, 1, -pathOffset.x, -pathOffset.y]\n      );\n    }\n    return path.map(function(pathSegment) {\n      var newSegment = pathSegment.slice(0), point = {};\n      for (var i = 1; i < pathSegment.length - 1; i += 2) {\n        point.x = pathSegment[i];\n        point.y = pathSegment[i + 1];\n        point = fabric.util.transformPoint(point, transform);\n        newSegment[i] = point.x;\n        newSegment[i + 1] = point.y;\n      }\n      return newSegment;\n    });\n  }\n\n  /**\n   * Join path commands to go back to svg format\n   * @param {Array} pathData fabricJS parsed path commands\n   * @return {String} joined path 'M 0 0 L 20 30'\n   */\n  fabric.util.joinPath = function(pathData) {\n    return pathData.map(function (segment) { return segment.join(' '); }).join(' ');\n  };\n  fabric.util.parsePath = parsePath;\n  fabric.util.makePathSimpler = makePathSimpler;\n  fabric.util.getSmoothPathFromPoints = getSmoothPathFromPoints;\n  fabric.util.getPathSegmentsInfo = getPathSegmentsInfo;\n  fabric.util.getBoundsOfCurve = getBoundsOfCurve;\n  fabric.util.getPointOnPath = getPointOnPath;\n  fabric.util.transformPath = transformPath;\n})();\n\n\n(function() {\n\n  var slice = Array.prototype.slice;\n\n  /**\n   * Invokes method on all items in a given array\n   * @memberOf fabric.util.array\n   * @param {Array} array Array to iterate over\n   * @param {String} method Name of a method to invoke\n   * @return {Array}\n   */\n  function invoke(array, method) {\n    var args = slice.call(arguments, 2), result = [];\n    for (var i = 0, len = array.length; i < len; i++) {\n      result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);\n    }\n    return result;\n  }\n\n  /**\n   * Finds maximum value in array (not necessarily \"first\" one)\n   * @memberOf fabric.util.array\n   * @param {Array} array Array to iterate over\n   * @param {String} byProperty\n   * @return {*}\n   */\n  function max(array, byProperty) {\n    return find(array, byProperty, function(value1, value2) {\n      return value1 >= value2;\n    });\n  }\n\n  /**\n   * Finds minimum value in array (not necessarily \"first\" one)\n   * @memberOf fabric.util.array\n   * @param {Array} array Array to iterate over\n   * @param {String} byProperty\n   * @return {*}\n   */\n  function min(array, byProperty) {\n    return find(array, byProperty, function(value1, value2) {\n      return value1 < value2;\n    });\n  }\n\n  /**\n   * @private\n   */\n  function fill(array, value) {\n    var k = array.length;\n    while (k--) {\n      array[k] = value;\n    }\n    return array;\n  }\n\n  /**\n   * @private\n   */\n  function find(array, byProperty, condition) {\n    if (!array || array.length === 0) {\n      return;\n    }\n\n    var i = array.length - 1,\n        result = byProperty ? array[i][byProperty] : array[i];\n    if (byProperty) {\n      while (i--) {\n        if (condition(array[i][byProperty], result)) {\n          result = array[i][byProperty];\n        }\n      }\n    }\n    else {\n      while (i--) {\n        if (condition(array[i], result)) {\n          result = array[i];\n        }\n      }\n    }\n    return result;\n  }\n\n  /**\n   * @namespace fabric.util.array\n   */\n  fabric.util.array = {\n    fill: fill,\n    invoke: invoke,\n    min: min,\n    max: max\n  };\n\n})();\n\n\n(function() {\n  /**\n   * Copies all enumerable properties of one js object to another\n   * this does not and cannot compete with generic utils.\n   * Does not clone or extend fabric.Object subclasses.\n   * This is mostly for internal use and has extra handling for fabricJS objects\n   * it skips the canvas and group properties in deep cloning.\n   * @memberOf fabric.util.object\n   * @param {Object} destination Where to copy to\n   * @param {Object} source Where to copy from\n   * @param {Boolean} [deep] Whether to extend nested objects\n   * @return {Object}\n   */\n\n  function extend(destination, source, deep) {\n    // JScript DontEnum bug is not taken care of\n    // the deep clone is for internal use, is not meant to avoid\n    // javascript traps or cloning html element or self referenced objects.\n    if (deep) {\n      if (!fabric.isLikelyNode && source instanceof Element) {\n        // avoid cloning deep images, canvases,\n        destination = source;\n      }\n      else if (source instanceof Array) {\n        destination = [];\n        for (var i = 0, len = source.length; i < len; i++) {\n          destination[i] = extend({ }, source[i], deep);\n        }\n      }\n      else if (source && typeof source === 'object') {\n        for (var property in source) {\n          if (property === 'canvas' || property === 'group') {\n            // we do not want to clone this props at all.\n            // we want to keep the keys in the copy\n            destination[property] = null;\n          }\n          else if (source.hasOwnProperty(property)) {\n            destination[property] = extend({ }, source[property], deep);\n          }\n        }\n      }\n      else {\n        // this sounds odd for an extend but is ok for recursive use\n        destination = source;\n      }\n    }\n    else {\n      for (var property in source) {\n        destination[property] = source[property];\n      }\n    }\n    return destination;\n  }\n\n  /**\n   * Creates an empty object and copies all enumerable properties of another object to it\n   * This method is mostly for internal use, and not intended for duplicating shapes in canvas. \n   * @memberOf fabric.util.object\n   * @param {Object} object Object to clone\n   * @param {Boolean} [deep] Whether to clone nested objects\n   * @return {Object}\n   */\n\n  //TODO: this function return an empty object if you try to clone null\n  function clone(object, deep) {\n    return extend({ }, object, deep);\n  }\n\n  /** @namespace fabric.util.object */\n  fabric.util.object = {\n    extend: extend,\n    clone: clone\n  };\n  fabric.util.object.extend(fabric.util, fabric.Observable);\n})();\n\n\n(function() {\n\n  /**\n   * Camelizes a string\n   * @memberOf fabric.util.string\n   * @param {String} string String to camelize\n   * @return {String} Camelized version of a string\n   */\n  function camelize(string) {\n    return string.replace(/-+(.)?/g, function(match, character) {\n      return character ? character.toUpperCase() : '';\n    });\n  }\n\n  /**\n   * Capitalizes a string\n   * @memberOf fabric.util.string\n   * @param {String} string String to capitalize\n   * @param {Boolean} [firstLetterOnly] If true only first letter is capitalized\n   * and other letters stay untouched, if false first letter is capitalized\n   * and other letters are converted to lowercase.\n   * @return {String} Capitalized version of a string\n   */\n  function capitalize(string, firstLetterOnly) {\n    return string.charAt(0).toUpperCase() +\n      (firstLetterOnly ? string.slice(1) : string.slice(1).toLowerCase());\n  }\n\n  /**\n   * Escapes XML in a string\n   * @memberOf fabric.util.string\n   * @param {String} string String to escape\n   * @return {String} Escaped version of a string\n   */\n  function escapeXml(string) {\n    return string.replace(/&/g, '&amp;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&apos;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;');\n  }\n\n  /**\n   * Divide a string in the user perceived single units\n   * @memberOf fabric.util.string\n   * @param {String} textstring String to escape\n   * @return {Array} array containing the graphemes\n   */\n  function graphemeSplit(textstring) {\n    var i = 0, chr, graphemes = [];\n    for (i = 0, chr; i < textstring.length; i++) {\n      if ((chr = getWholeChar(textstring, i)) === false) {\n        continue;\n      }\n      graphemes.push(chr);\n    }\n    return graphemes;\n  }\n\n  // taken from mdn in the charAt doc page.\n  function getWholeChar(str, i) {\n    var code = str.charCodeAt(i);\n\n    if (isNaN(code)) {\n      return ''; // Position not found\n    }\n    if (code < 0xD800 || code > 0xDFFF) {\n      return str.charAt(i);\n    }\n\n    // High surrogate (could change last hex to 0xDB7F to treat high private\n    // surrogates as single characters)\n    if (0xD800 <= code && code <= 0xDBFF) {\n      if (str.length <= (i + 1)) {\n        throw 'High surrogate without following low surrogate';\n      }\n      var next = str.charCodeAt(i + 1);\n      if (0xDC00 > next || next > 0xDFFF) {\n        throw 'High surrogate without following low surrogate';\n      }\n      return str.charAt(i) + str.charAt(i + 1);\n    }\n    // Low surrogate (0xDC00 <= code && code <= 0xDFFF)\n    if (i === 0) {\n      throw 'Low surrogate without preceding high surrogate';\n    }\n    var prev = str.charCodeAt(i - 1);\n\n    // (could change last hex to 0xDB7F to treat high private\n    // surrogates as single characters)\n    if (0xD800 > prev || prev > 0xDBFF) {\n      throw 'Low surrogate without preceding high surrogate';\n    }\n    // We can pass over low surrogates now as the second component\n    // in a pair which we have already processed\n    return false;\n  }\n\n\n  /**\n   * String utilities\n   * @namespace fabric.util.string\n   */\n  fabric.util.string = {\n    camelize: camelize,\n    capitalize: capitalize,\n    escapeXml: escapeXml,\n    graphemeSplit: graphemeSplit\n  };\n})();\n\n\n(function() {\n\n  var slice = Array.prototype.slice, emptyFunction = function() { },\n\n      IS_DONTENUM_BUGGY = (function() {\n        for (var p in { toString: 1 }) {\n          if (p === 'toString') {\n            return false;\n          }\n        }\n        return true;\n      })(),\n\n      /** @ignore */\n      addMethods = function(klass, source, parent) {\n        for (var property in source) {\n\n          if (property in klass.prototype &&\n              typeof klass.prototype[property] === 'function' &&\n              (source[property] + '').indexOf('callSuper') > -1) {\n\n            klass.prototype[property] = (function(property) {\n              return function() {\n\n                var superclass = this.constructor.superclass;\n                this.constructor.superclass = parent;\n                var returnValue = source[property].apply(this, arguments);\n                this.constructor.superclass = superclass;\n\n                if (property !== 'initialize') {\n                  return returnValue;\n                }\n              };\n            })(property);\n          }\n          else {\n            klass.prototype[property] = source[property];\n          }\n\n          if (IS_DONTENUM_BUGGY) {\n            if (source.toString !== Object.prototype.toString) {\n              klass.prototype.toString = source.toString;\n            }\n            if (source.valueOf !== Object.prototype.valueOf) {\n              klass.prototype.valueOf = source.valueOf;\n            }\n          }\n        }\n      };\n\n  function Subclass() { }\n\n  function callSuper(methodName) {\n    var parentMethod = null,\n        _this = this;\n\n    // climb prototype chain to find method not equal to callee's method\n    while (_this.constructor.superclass) {\n      var superClassMethod = _this.constructor.superclass.prototype[methodName];\n      if (_this[methodName] !== superClassMethod) {\n        parentMethod = superClassMethod;\n        break;\n      }\n      // eslint-disable-next-line\n      _this = _this.constructor.superclass.prototype;\n    }\n\n    if (!parentMethod) {\n      return console.log('tried to callSuper ' + methodName + ', method not found in prototype chain', this);\n    }\n\n    return (arguments.length > 1)\n      ? parentMethod.apply(this, slice.call(arguments, 1))\n      : parentMethod.call(this);\n  }\n\n  /**\n   * Helper for creation of \"classes\".\n   * @memberOf fabric.util\n   * @param {Function} [parent] optional \"Class\" to inherit from\n   * @param {Object} [properties] Properties shared by all instances of this class\n   *                  (be careful modifying objects defined here as this would affect all instances)\n   */\n  function createClass() {\n    var parent = null,\n        properties = slice.call(arguments, 0);\n\n    if (typeof properties[0] === 'function') {\n      parent = properties.shift();\n    }\n    function klass() {\n      this.initialize.apply(this, arguments);\n    }\n\n    klass.superclass = parent;\n    klass.subclasses = [];\n\n    if (parent) {\n      Subclass.prototype = parent.prototype;\n      klass.prototype = new Subclass();\n      parent.subclasses.push(klass);\n    }\n    for (var i = 0, length = properties.length; i < length; i++) {\n      addMethods(klass, properties[i], parent);\n    }\n    if (!klass.prototype.initialize) {\n      klass.prototype.initialize = emptyFunction;\n    }\n    klass.prototype.constructor = klass;\n    klass.prototype.callSuper = callSuper;\n    return klass;\n  }\n\n  fabric.util.createClass = createClass;\n})();\n\n\n(function () {\n  // since ie11 can use addEventListener but they do not support options, i need to check\n  var couldUseAttachEvent = !!fabric.document.createElement('div').attachEvent,\n      touchEvents = ['touchstart', 'touchmove', 'touchend'];\n  /**\n   * Adds an event listener to an element\n   * @function\n   * @memberOf fabric.util\n   * @param {HTMLElement} element\n   * @param {String} eventName\n   * @param {Function} handler\n   */\n  fabric.util.addListener = function(element, eventName, handler, options) {\n    element && element.addEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n  };\n\n  /**\n   * Removes an event listener from an element\n   * @function\n   * @memberOf fabric.util\n   * @param {HTMLElement} element\n   * @param {String} eventName\n   * @param {Function} handler\n   */\n  fabric.util.removeListener = function(element, eventName, handler, options) {\n    element && element.removeEventListener(eventName, handler, couldUseAttachEvent ? false : options);\n  };\n\n  function getTouchInfo(event) {\n    var touchProp = event.changedTouches;\n    if (touchProp && touchProp[0]) {\n      return touchProp[0];\n    }\n    return event;\n  }\n\n  fabric.util.getPointer = function(event) {\n    var element = event.target,\n        scroll = fabric.util.getScrollLeftTop(element),\n        _evt = getTouchInfo(event);\n    return {\n      x: _evt.clientX + scroll.left,\n      y: _evt.clientY + scroll.top\n    };\n  };\n\n  fabric.util.isTouchEvent = function(event) {\n    return touchEvents.indexOf(event.type) > -1 || event.pointerType === 'touch';\n  };\n})();\n\n\n(function () {\n\n  /**\n   * Cross-browser wrapper for setting element's style\n   * @memberOf fabric.util\n   * @param {HTMLElement} element\n   * @param {Object} styles\n   * @return {HTMLElement} Element that was passed as a first argument\n   */\n  function setStyle(element, styles) {\n    var elementStyle = element.style;\n    if (!elementStyle) {\n      return element;\n    }\n    if (typeof styles === 'string') {\n      element.style.cssText += ';' + styles;\n      return styles.indexOf('opacity') > -1\n        ? setOpacity(element, styles.match(/opacity:\\s*(\\d?\\.?\\d*)/)[1])\n        : element;\n    }\n    for (var property in styles) {\n      if (property === 'opacity') {\n        setOpacity(element, styles[property]);\n      }\n      else {\n        var normalizedProperty = (property === 'float' || property === 'cssFloat')\n          ? (typeof elementStyle.styleFloat === 'undefined' ? 'cssFloat' : 'styleFloat')\n          : property;\n        elementStyle.setProperty(normalizedProperty, styles[property]);\n      }\n    }\n    return element;\n  }\n\n  var parseEl = fabric.document.createElement('div'),\n      supportsOpacity = typeof parseEl.style.opacity === 'string',\n      supportsFilters = typeof parseEl.style.filter === 'string',\n      reOpacity = /alpha\\s*\\(\\s*opacity\\s*=\\s*([^\\)]+)\\)/,\n\n      /** @ignore */\n      setOpacity = function (element) { return element; };\n\n  if (supportsOpacity) {\n    /** @ignore */\n    setOpacity = function(element, value) {\n      element.style.opacity = value;\n      return element;\n    };\n  }\n  else if (supportsFilters) {\n    /** @ignore */\n    setOpacity = function(element, value) {\n      var es = element.style;\n      if (element.currentStyle && !element.currentStyle.hasLayout) {\n        es.zoom = 1;\n      }\n      if (reOpacity.test(es.filter)) {\n        value = value >= 0.9999 ? '' : ('alpha(opacity=' + (value * 100) + ')');\n        es.filter = es.filter.replace(reOpacity, value);\n      }\n      else {\n        es.filter += ' alpha(opacity=' + (value * 100) + ')';\n      }\n      return element;\n    };\n  }\n\n  fabric.util.setStyle = setStyle;\n\n})();\n\n\n(function() {\n\n  var _slice = Array.prototype.slice;\n\n  /**\n   * Takes id and returns an element with that id (if one exists in a document)\n   * @memberOf fabric.util\n   * @param {String|HTMLElement} id\n   * @return {HTMLElement|null}\n   */\n  function getById(id) {\n    return typeof id === 'string' ? fabric.document.getElementById(id) : id;\n  }\n\n  var sliceCanConvertNodelists,\n      /**\n       * Converts an array-like object (e.g. arguments or NodeList) to an array\n       * @memberOf fabric.util\n       * @param {Object} arrayLike\n       * @return {Array}\n       */\n      toArray = function(arrayLike) {\n        return _slice.call(arrayLike, 0);\n      };\n\n  try {\n    sliceCanConvertNodelists = toArray(fabric.document.childNodes) instanceof Array;\n  }\n  catch (err) { }\n\n  if (!sliceCanConvertNodelists) {\n    toArray = function(arrayLike) {\n      var arr = new Array(arrayLike.length), i = arrayLike.length;\n      while (i--) {\n        arr[i] = arrayLike[i];\n      }\n      return arr;\n    };\n  }\n\n  /**\n   * Creates specified element with specified attributes\n   * @memberOf fabric.util\n   * @param {String} tagName Type of an element to create\n   * @param {Object} [attributes] Attributes to set on an element\n   * @return {HTMLElement} Newly created element\n   */\n  function makeElement(tagName, attributes) {\n    var el = fabric.document.createElement(tagName);\n    for (var prop in attributes) {\n      if (prop === 'class') {\n        el.className = attributes[prop];\n      }\n      else if (prop === 'for') {\n        el.htmlFor = attributes[prop];\n      }\n      else {\n        el.setAttribute(prop, attributes[prop]);\n      }\n    }\n    return el;\n  }\n\n  /**\n   * Adds class to an element\n   * @memberOf fabric.util\n   * @param {HTMLElement} element Element to add class to\n   * @param {String} className Class to add to an element\n   */\n  function addClass(element, className) {\n    if (element && (' ' + element.className + ' ').indexOf(' ' + className + ' ') === -1) {\n      element.className += (element.className ? ' ' : '') + className;\n    }\n  }\n\n  /**\n   * Wraps element with another element\n   * @memberOf fabric.util\n   * @param {HTMLElement} element Element to wrap\n   * @param {HTMLElement|String} wrapper Element to wrap with\n   * @param {Object} [attributes] Attributes to set on a wrapper\n   * @return {HTMLElement} wrapper\n   */\n  function wrapElement(element, wrapper, attributes) {\n    if (typeof wrapper === 'string') {\n      wrapper = makeElement(wrapper, attributes);\n    }\n    if (element.parentNode) {\n      element.parentNode.replaceChild(wrapper, element);\n    }\n    wrapper.appendChild(element);\n    return wrapper;\n  }\n\n  /**\n   * Returns element scroll offsets\n   * @memberOf fabric.util\n   * @param {HTMLElement} element Element to operate on\n   * @return {Object} Object with left/top values\n   */\n  function getScrollLeftTop(element) {\n\n    var left = 0,\n        top = 0,\n        docElement = fabric.document.documentElement,\n        body = fabric.document.body || {\n          scrollLeft: 0, scrollTop: 0\n        };\n\n    // While loop checks (and then sets element to) .parentNode OR .host\n    //  to account for ShadowDOM. We still want to traverse up out of ShadowDOM,\n    //  but the .parentNode of a root ShadowDOM node will always be null, instead\n    //  it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938\n    while (element && (element.parentNode || element.host)) {\n\n      // Set element to element parent, or 'host' in case of ShadowDOM\n      element = element.parentNode || element.host;\n\n      if (element === fabric.document) {\n        left = body.scrollLeft || docElement.scrollLeft || 0;\n        top = body.scrollTop ||  docElement.scrollTop || 0;\n      }\n      else {\n        left += element.scrollLeft || 0;\n        top += element.scrollTop || 0;\n      }\n\n      if (element.nodeType === 1 && element.style.position === 'fixed') {\n        break;\n      }\n    }\n\n    return { left: left, top: top };\n  }\n\n  /**\n   * Returns offset for a given element\n   * @function\n   * @memberOf fabric.util\n   * @param {HTMLElement} element Element to get offset for\n   * @return {Object} Object with \"left\" and \"top\" properties\n   */\n  function getElementOffset(element) {\n    var docElem,\n        doc = element && element.ownerDocument,\n        box = { left: 0, top: 0 },\n        offset = { left: 0, top: 0 },\n        scrollLeftTop,\n        offsetAttributes = {\n          borderLeftWidth: 'left',\n          borderTopWidth:  'top',\n          paddingLeft:     'left',\n          paddingTop:      'top'\n        };\n\n    if (!doc) {\n      return offset;\n    }\n\n    for (var attr in offsetAttributes) {\n      offset[offsetAttributes[attr]] += parseInt(getElementStyle(element, attr), 10) || 0;\n    }\n\n    docElem = doc.documentElement;\n    if ( typeof element.getBoundingClientRect !== 'undefined' ) {\n      box = element.getBoundingClientRect();\n    }\n\n    scrollLeftTop = getScrollLeftTop(element);\n\n    return {\n      left: box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,\n      top: box.top + scrollLeftTop.top - (docElem.clientTop || 0)  + offset.top\n    };\n  }\n\n  /**\n   * Returns style attribute value of a given element\n   * @memberOf fabric.util\n   * @param {HTMLElement} element Element to get style attribute for\n   * @param {String} attr Style attribute to get for element\n   * @return {String} Style attribute value of the given element.\n   */\n  var getElementStyle;\n  if (fabric.document.defaultView && fabric.document.defaultView.getComputedStyle) {\n    getElementStyle = function(element, attr) {\n      var style = fabric.document.defaultView.getComputedStyle(element, null);\n      return style ? style[attr] : undefined;\n    };\n  }\n  else {\n    getElementStyle = function(element, attr) {\n      var value = element.style[attr];\n      if (!value && element.currentStyle) {\n        value = element.currentStyle[attr];\n      }\n      return value;\n    };\n  }\n\n  (function () {\n    var style = fabric.document.documentElement.style,\n        selectProp = 'userSelect' in style\n          ? 'userSelect'\n          : 'MozUserSelect' in style\n            ? 'MozUserSelect'\n            : 'WebkitUserSelect' in style\n              ? 'WebkitUserSelect'\n              : 'KhtmlUserSelect' in style\n                ? 'KhtmlUserSelect'\n                : '';\n\n    /**\n     * Makes element unselectable\n     * @memberOf fabric.util\n     * @param {HTMLElement} element Element to make unselectable\n     * @return {HTMLElement} Element that was passed in\n     */\n    function makeElementUnselectable(element) {\n      if (typeof element.onselectstart !== 'undefined') {\n        element.onselectstart = fabric.util.falseFunction;\n      }\n      if (selectProp) {\n        element.style[selectProp] = 'none';\n      }\n      else if (typeof element.unselectable === 'string') {\n        element.unselectable = 'on';\n      }\n      return element;\n    }\n\n    /**\n     * Makes element selectable\n     * @memberOf fabric.util\n     * @param {HTMLElement} element Element to make selectable\n     * @return {HTMLElement} Element that was passed in\n     */\n    function makeElementSelectable(element) {\n      if (typeof element.onselectstart !== 'undefined') {\n        element.onselectstart = null;\n      }\n      if (selectProp) {\n        element.style[selectProp] = '';\n      }\n      else if (typeof element.unselectable === 'string') {\n        element.unselectable = '';\n      }\n      return element;\n    }\n\n    fabric.util.makeElementUnselectable = makeElementUnselectable;\n    fabric.util.makeElementSelectable = makeElementSelectable;\n  })();\n\n  function getNodeCanvas(element) {\n    var impl = fabric.jsdomImplForWrapper(element);\n    return impl._canvas || impl._image;\n  };\n\n  function cleanUpJsdomNode(element) {\n    if (!fabric.isLikelyNode) {\n      return;\n    }\n    var impl = fabric.jsdomImplForWrapper(element);\n    if (impl) {\n      impl._image = null;\n      impl._canvas = null;\n      // unsure if necessary\n      impl._currentSrc = null;\n      impl._attributes = null;\n      impl._classList = null;\n    }\n  }\n\n  function setImageSmoothing(ctx, value) {\n    ctx.imageSmoothingEnabled = ctx.imageSmoothingEnabled || ctx.webkitImageSmoothingEnabled\n      || ctx.mozImageSmoothingEnabled || ctx.msImageSmoothingEnabled || ctx.oImageSmoothingEnabled;\n    ctx.imageSmoothingEnabled = value;\n  }\n\n  /**\n   * setImageSmoothing sets the context imageSmoothingEnabled property.\n   * Used by canvas and by ImageObject.\n   * @memberOf fabric.util\n   * @since 4.0.0\n   * @param {HTMLRenderingContext2D} ctx to set on\n   * @param {Boolean} value true or false\n   */\n  fabric.util.setImageSmoothing = setImageSmoothing;\n  fabric.util.getById = getById;\n  fabric.util.toArray = toArray;\n  fabric.util.addClass = addClass;\n  fabric.util.makeElement = makeElement;\n  fabric.util.wrapElement = wrapElement;\n  fabric.util.getScrollLeftTop = getScrollLeftTop;\n  fabric.util.getElementOffset = getElementOffset;\n  fabric.util.getNodeCanvas = getNodeCanvas;\n  fabric.util.cleanUpJsdomNode = cleanUpJsdomNode;\n\n})();\n\n\n(function() {\n\n  function addParamToUrl(url, param) {\n    return url + (/\\?/.test(url) ? '&' : '?') + param;\n  }\n\n  function emptyFn() { }\n\n  /**\n   * Cross-browser abstraction for sending XMLHttpRequest\n   * @memberOf fabric.util\n   * @param {String} url URL to send XMLHttpRequest to\n   * @param {Object} [options] Options object\n   * @param {String} [options.method=\"GET\"]\n   * @param {String} [options.parameters] parameters to append to url in GET or in body\n   * @param {String} [options.body] body to send with POST or PUT request\n   * @param {Function} options.onComplete Callback to invoke when request is completed\n   * @return {XMLHttpRequest} request\n   */\n  function request(url, options) {\n    options || (options = { });\n\n    var method = options.method ? options.method.toUpperCase() : 'GET',\n        onComplete = options.onComplete || function() { },\n        xhr = new fabric.window.XMLHttpRequest(),\n        body = options.body || options.parameters;\n\n    /** @ignore */\n    xhr.onreadystatechange = function() {\n      if (xhr.readyState === 4) {\n        onComplete(xhr);\n        xhr.onreadystatechange = emptyFn;\n      }\n    };\n\n    if (method === 'GET') {\n      body = null;\n      if (typeof options.parameters === 'string') {\n        url = addParamToUrl(url, options.parameters);\n      }\n    }\n\n    xhr.open(method, url, true);\n\n    if (method === 'POST' || method === 'PUT') {\n      xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n    }\n\n    xhr.send(body);\n    return xhr;\n  }\n\n  fabric.util.request = request;\n})();\n\n\n/**\n * Wrapper around `console.log` (when available)\n * @param {*} [values] Values to log\n */\nfabric.log = console.log;\n\n/**\n * Wrapper around `console.warn` (when available)\n * @param {*} [values] Values to log as a warning\n */\nfabric.warn = console.warn;\n\n\n(function () {\n\n  var extend = fabric.util.object.extend,\n      clone = fabric.util.object.clone;\n\n  /**\n   * @typedef {Object} AnimationOptions\n   * Animation of a value or list of values.\n   * When using lists, think of something like this:\n   * fabric.util.animate({\n   *   startValue: [1, 2, 3],\n   *   endValue: [2, 4, 6],\n   *   onChange: function([a, b, c]) {\n   *     canvas.zoomToPoint({x: b, y: c}, a)\n   *     canvas.renderAll()\n   *   }\n   * });\n   * @example\n   * @property {Function} [onChange] Callback; invoked on every value change\n   * @property {Function} [onComplete] Callback; invoked when value change is completed\n   * @example\n   * // Note: startValue, endValue, and byValue must match the type\n   * var animationOptions = { startValue: 0, endValue: 1, byValue: 0.25 }\n   * var animationOptions = { startValue: [0, 1], endValue: [1, 2], byValue: [0.25, 0.25] }\n   * @property {number | number[]} [startValue=0] Starting value\n   * @property {number | number[]} [endValue=100] Ending value\n   * @property {number | number[]} [byValue=100] Value to modify the property by\n   * @property {Function} [easing] Easing function\n   * @property {Number} [duration=500] Duration of change (in ms)\n   * @property {Function} [abort] Additional function with logic. If returns true, animation aborts.\n   *\n   * @typedef {() => void} CancelFunction\n   *\n   * @typedef {Object} AnimationCurrentState\n   * @property {number | number[]} currentValue value in range [`startValue`, `endValue`]\n   * @property {number} completionRate value in range [0, 1]\n   * @property {number} durationRate value in range [0, 1]\n   *\n   * @typedef {(AnimationOptions & AnimationCurrentState & { cancel: CancelFunction }} AnimationContext\n   */\n\n  /**\n   * Array holding all running animations\n   * @memberof fabric\n   * @type {AnimationContext[]}\n   */\n  var RUNNING_ANIMATIONS = [];\n  fabric.util.object.extend(RUNNING_ANIMATIONS, {\n\n    /**\n     * cancel all running animations at the next requestAnimFrame\n     * @returns {AnimationContext[]}\n     */\n    cancelAll: function () {\n      var animations = this.splice(0);\n      animations.forEach(function (animation) {\n        animation.cancel();\n      });\n      return animations;\n    },\n\n    /**\n     * cancel all running animations attached to canvas at the next requestAnimFrame\n     * @param {fabric.Canvas} canvas\n     * @returns {AnimationContext[]}\n     */\n    cancelByCanvas: function (canvas) {\n      if (!canvas) {\n        return [];\n      }\n      var cancelled = this.filter(function (animation) {\n        return typeof animation.target === 'object' && animation.target.canvas === canvas;\n      });\n      cancelled.forEach(function (animation) {\n        animation.cancel();\n      });\n      return cancelled;\n    },\n\n    /**\n     * cancel all running animations for target at the next requestAnimFrame\n     * @param {*} target\n     * @returns {AnimationContext[]}\n     */\n    cancelByTarget: function (target) {\n      var cancelled = this.findAnimationsByTarget(target);\n      cancelled.forEach(function (animation) {\n        animation.cancel();\n      });\n      return cancelled;\n    },\n\n    /**\n     *\n     * @param {CancelFunction} cancelFunc the function returned by animate\n     * @returns {number}\n     */\n    findAnimationIndex: function (cancelFunc) {\n      return this.indexOf(this.findAnimation(cancelFunc));\n    },\n\n    /**\n     *\n     * @param {CancelFunction} cancelFunc the function returned by animate\n     * @returns {AnimationContext | undefined} animation's options object\n     */\n    findAnimation: function (cancelFunc) {\n      return this.find(function (animation) {\n        return animation.cancel === cancelFunc;\n      });\n    },\n\n    /**\n     *\n     * @param {*} target the object that is assigned to the target property of the animation context\n     * @returns {AnimationContext[]} array of animation options object associated with target\n     */\n    findAnimationsByTarget: function (target) {\n      if (!target) {\n        return [];\n      }\n      return this.filter(function (animation) {\n        return animation.target === target;\n      });\n    }\n  });\n\n  function noop() {\n    return false;\n  }\n\n  function defaultEasing(t, b, c, d) {\n    return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n  }\n\n  /**\n   * Changes value from one to another within certain period of time, invoking callbacks as value is being changed.\n   * @memberOf fabric.util\n   * @param {AnimationOptions} [options] Animation options\n   * @example\n   * // Note: startValue, endValue, and byValue must match the type\n   * fabric.util.animate({ startValue: 0, endValue: 1, byValue: 0.25 })\n   * fabric.util.animate({ startValue: [0, 1], endValue: [1, 2], byValue: [0.25, 0.25] })\n   * @returns {CancelFunction} cancel function\n   */\n  function animate(options) {\n    options || (options = {});\n    var cancel = false,\n        context,\n        removeFromRegistry = function () {\n          var index = fabric.runningAnimations.indexOf(context);\n          return index > -1 && fabric.runningAnimations.splice(index, 1)[0];\n        };\n\n    context = extend(clone(options), {\n      cancel: function () {\n        cancel = true;\n        return removeFromRegistry();\n      },\n      currentValue: 'startValue' in options ? options.startValue : 0,\n      completionRate: 0,\n      durationRate: 0\n    });\n    fabric.runningAnimations.push(context);\n\n    requestAnimFrame(function(timestamp) {\n      var start = timestamp || +new Date(),\n          duration = options.duration || 500,\n          finish = start + duration, time,\n          onChange = options.onChange || noop,\n          abort = options.abort || noop,\n          onComplete = options.onComplete || noop,\n          easing = options.easing || defaultEasing,\n          isMany = 'startValue' in options ? options.startValue.length > 0 : false,\n          startValue = 'startValue' in options ? options.startValue : 0,\n          endValue = 'endValue' in options ? options.endValue : 100,\n          byValue = options.byValue || (isMany ? startValue.map(function(value, i) {\n            return endValue[i] - startValue[i];\n          }) : endValue - startValue);\n\n      options.onStart && options.onStart();\n\n      (function tick(ticktime) {\n        time = ticktime || +new Date();\n        var currentTime = time > finish ? duration : (time - start),\n            timePerc = currentTime / duration,\n            current = isMany ? startValue.map(function(_value, i) {\n              return easing(currentTime, startValue[i], byValue[i], duration);\n            }) : easing(currentTime, startValue, byValue, duration),\n            valuePerc = isMany ? Math.abs((current[0] - startValue[0]) / byValue[0])\n              : Math.abs((current - startValue) / byValue);\n        //  update context\n        context.currentValue = isMany ? current.slice() : current;\n        context.completionRate = valuePerc;\n        context.durationRate = timePerc;\n        if (cancel) {\n          return;\n        }\n        if (abort(current, valuePerc, timePerc)) {\n          removeFromRegistry();\n          return;\n        }\n        if (time > finish) {\n          //  update context\n          context.currentValue = isMany ? endValue.slice() : endValue;\n          context.completionRate = 1;\n          context.durationRate = 1;\n          //  execute callbacks\n          onChange(isMany ? endValue.slice() : endValue, 1, 1);\n          onComplete(endValue, 1, 1);\n          removeFromRegistry();\n          return;\n        }\n        else {\n          onChange(current, valuePerc, timePerc);\n          requestAnimFrame(tick);\n        }\n      })(start);\n    });\n\n    return context.cancel;\n  }\n\n  var _requestAnimFrame = fabric.window.requestAnimationFrame       ||\n                          fabric.window.webkitRequestAnimationFrame ||\n                          fabric.window.mozRequestAnimationFrame    ||\n                          fabric.window.oRequestAnimationFrame      ||\n                          fabric.window.msRequestAnimationFrame     ||\n                          function(callback) {\n                            return fabric.window.setTimeout(callback, 1000 / 60);\n                          };\n\n  var _cancelAnimFrame = fabric.window.cancelAnimationFrame || fabric.window.clearTimeout;\n\n  /**\n   * requestAnimationFrame polyfill based on http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n   * In order to get a precise start time, `requestAnimFrame` should be called as an entry into the method\n   * @memberOf fabric.util\n   * @param {Function} callback Callback to invoke\n   * @param {DOMElement} element optional Element to associate with animation\n   */\n  function requestAnimFrame() {\n    return _requestAnimFrame.apply(fabric.window, arguments);\n  }\n\n  function cancelAnimFrame() {\n    return _cancelAnimFrame.apply(fabric.window, arguments);\n  }\n\n  fabric.util.animate = animate;\n  fabric.util.requestAnimFrame = requestAnimFrame;\n  fabric.util.cancelAnimFrame = cancelAnimFrame;\n  fabric.runningAnimations = RUNNING_ANIMATIONS;\n})();\n\n\n(function() {\n  // Calculate an in-between color. Returns a \"rgba()\" string.\n  // Credit: Edwin Martin <edwin@bitstorm.org>\n  //         http://www.bitstorm.org/jquery/color-animation/jquery.animate-colors.js\n  function calculateColor(begin, end, pos) {\n    var color = 'rgba('\n        + parseInt((begin[0] + pos * (end[0] - begin[0])), 10) + ','\n        + parseInt((begin[1] + pos * (end[1] - begin[1])), 10) + ','\n        + parseInt((begin[2] + pos * (end[2] - begin[2])), 10);\n\n    color += ',' + (begin && end ? parseFloat(begin[3] + pos * (end[3] - begin[3])) : 1);\n    color += ')';\n    return color;\n  }\n\n  /**\n   * Changes the color from one to another within certain period of time, invoking callbacks as value is being changed.\n   * @memberOf fabric.util\n   * @param {String} fromColor The starting color in hex or rgb(a) format.\n   * @param {String} toColor The starting color in hex or rgb(a) format.\n   * @param {Number} [duration] Duration of change (in ms).\n   * @param {Object} [options] Animation options\n   * @param {Function} [options.onChange] Callback; invoked on every value change\n   * @param {Function} [options.onComplete] Callback; invoked when value change is completed\n   * @param {Function} [options.colorEasing] Easing function. Note that this function only take two arguments (currentTime, duration). Thus the regular animation easing functions cannot be used.\n   * @param {Function} [options.abort] Additional function with logic. If returns true, onComplete is called.\n   * @returns {Function} abort function\n   */\n  function animateColor(fromColor, toColor, duration, options) {\n    var startColor = new fabric.Color(fromColor).getSource(),\n        endColor = new fabric.Color(toColor).getSource(),\n        originalOnComplete = options.onComplete,\n        originalOnChange = options.onChange;\n    options = options || {};\n\n    return fabric.util.animate(fabric.util.object.extend(options, {\n      duration: duration || 500,\n      startValue: startColor,\n      endValue: endColor,\n      byValue: endColor,\n      easing: function (currentTime, startValue, byValue, duration) {\n        var posValue = options.colorEasing\n          ? options.colorEasing(currentTime, duration)\n          : 1 - Math.cos(currentTime / duration * (Math.PI / 2));\n        return calculateColor(startValue, byValue, posValue);\n      },\n      // has to take in account for color restoring;\n      onComplete: function(current, valuePerc, timePerc) {\n        if (originalOnComplete) {\n          return originalOnComplete(\n            calculateColor(endColor, endColor, 0),\n            valuePerc,\n            timePerc\n          );\n        }\n      },\n      onChange: function(current, valuePerc, timePerc) {\n        if (originalOnChange) {\n          if (Array.isArray(current)) {\n            return originalOnChange(\n              calculateColor(current, current, 0),\n              valuePerc,\n              timePerc\n            );\n          }\n          originalOnChange(current, valuePerc, timePerc);\n        }\n      }\n    }));\n  }\n\n  fabric.util.animateColor = animateColor;\n\n})();\n\n\n(function() {\n\n  function normalize(a, c, p, s) {\n    if (a < Math.abs(c)) {\n      a = c;\n      s = p / 4;\n    }\n    else {\n      //handle the 0/0 case:\n      if (c === 0 && a === 0) {\n        s = p / (2 * Math.PI) * Math.asin(1);\n      }\n      else {\n        s = p / (2 * Math.PI) * Math.asin(c / a);\n      }\n    }\n    return { a: a, c: c, p: p, s: s };\n  }\n\n  function elastic(opts, t, d) {\n    return opts.a *\n      Math.pow(2, 10 * (t -= 1)) *\n      Math.sin( (t * d - opts.s) * (2 * Math.PI) / opts.p );\n  }\n\n  /**\n   * Cubic easing out\n   * @memberOf fabric.util.ease\n   */\n  function easeOutCubic(t, b, c, d) {\n    return c * ((t = t / d - 1) * t * t + 1) + b;\n  }\n\n  /**\n   * Cubic easing in and out\n   * @memberOf fabric.util.ease\n   */\n  function easeInOutCubic(t, b, c, d) {\n    t /= d / 2;\n    if (t < 1) {\n      return c / 2 * t * t * t + b;\n    }\n    return c / 2 * ((t -= 2) * t * t + 2) + b;\n  }\n\n  /**\n   * Quartic easing in\n   * @memberOf fabric.util.ease\n   */\n  function easeInQuart(t, b, c, d) {\n    return c * (t /= d) * t * t * t + b;\n  }\n\n  /**\n   * Quartic easing out\n   * @memberOf fabric.util.ease\n   */\n  function easeOutQuart(t, b, c, d) {\n    return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n  }\n\n  /**\n   * Quartic easing in and out\n   * @memberOf fabric.util.ease\n   */\n  function easeInOutQuart(t, b, c, d) {\n    t /= d / 2;\n    if (t < 1) {\n      return c / 2 * t * t * t * t + b;\n    }\n    return -c / 2 * ((t -= 2) * t * t * t - 2) + b;\n  }\n\n  /**\n   * Quintic easing in\n   * @memberOf fabric.util.ease\n   */\n  function easeInQuint(t, b, c, d) {\n    return c * (t /= d) * t * t * t * t + b;\n  }\n\n  /**\n   * Quintic easing out\n   * @memberOf fabric.util.ease\n   */\n  function easeOutQuint(t, b, c, d) {\n    return c * ((t = t / d - 1) * t * t * t * t + 1) + b;\n  }\n\n  /**\n   * Quintic easing in and out\n   * @memberOf fabric.util.ease\n   */\n  function easeInOutQuint(t, b, c, d) {\n    t /= d / 2;\n    if (t < 1) {\n      return c / 2 * t * t * t * t * t + b;\n    }\n    return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;\n  }\n\n  /**\n   * Sinusoidal easing in\n   * @memberOf fabric.util.ease\n   */\n  function easeInSine(t, b, c, d) {\n    return -c * Math.cos(t / d * (Math.PI / 2)) + c + b;\n  }\n\n  /**\n   * Sinusoidal easing out\n   * @memberOf fabric.util.ease\n   */\n  function easeOutSine(t, b, c, d) {\n    return c * Math.sin(t / d * (Math.PI / 2)) + b;\n  }\n\n  /**\n   * Sinusoidal easing in and out\n   * @memberOf fabric.util.ease\n   */\n  function easeInOutSine(t, b, c, d) {\n    return -c / 2 * (Math.cos(Math.PI * t / d) - 1) + b;\n  }\n\n  /**\n   * Exponential easing in\n   * @memberOf fabric.util.ease\n   */\n  function easeInExpo(t, b, c, d) {\n    return (t === 0) ? b : c * Math.pow(2, 10 * (t / d - 1)) + b;\n  }\n\n  /**\n   * Exponential easing out\n   * @memberOf fabric.util.ease\n   */\n  function easeOutExpo(t, b, c, d) {\n    return (t === d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n  }\n\n  /**\n   * Exponential easing in and out\n   * @memberOf fabric.util.ease\n   */\n  function easeInOutExpo(t, b, c, d) {\n    if (t === 0) {\n      return b;\n    }\n    if (t === d) {\n      return b + c;\n    }\n    t /= d / 2;\n    if (t < 1) {\n      return c / 2 * Math.pow(2, 10 * (t - 1)) + b;\n    }\n    return c / 2 * (-Math.pow(2, -10 * --t) + 2) + b;\n  }\n\n  /**\n   * Circular easing in\n   * @memberOf fabric.util.ease\n   */\n  function easeInCirc(t, b, c, d) {\n    return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;\n  }\n\n  /**\n   * Circular easing out\n   * @memberOf fabric.util.ease\n   */\n  function easeOutCirc(t, b, c, d) {\n    return c * Math.sqrt(1 - (t = t / d - 1) * t) + b;\n  }\n\n  /**\n   * Circular easing in and out\n   * @memberOf fabric.util.ease\n   */\n  function easeInOutCirc(t, b, c, d) {\n    t /= d / 2;\n    if (t < 1) {\n      return -c / 2 * (Math.sqrt(1 - t * t) - 1) + b;\n    }\n    return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n  }\n\n  /**\n   * Elastic easing in\n   * @memberOf fabric.util.ease\n   */\n  function easeInElastic(t, b, c, d) {\n    var s = 1.70158, p = 0, a = c;\n    if (t === 0) {\n      return b;\n    }\n    t /= d;\n    if (t === 1) {\n      return b + c;\n    }\n    if (!p) {\n      p = d * 0.3;\n    }\n    var opts = normalize(a, c, p, s);\n    return -elastic(opts, t, d) + b;\n  }\n\n  /**\n   * Elastic easing out\n   * @memberOf fabric.util.ease\n   */\n  function easeOutElastic(t, b, c, d) {\n    var s = 1.70158, p = 0, a = c;\n    if (t === 0) {\n      return b;\n    }\n    t /= d;\n    if (t === 1) {\n      return b + c;\n    }\n    if (!p) {\n      p = d * 0.3;\n    }\n    var opts = normalize(a, c, p, s);\n    return opts.a * Math.pow(2, -10 * t) * Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) + opts.c + b;\n  }\n\n  /**\n   * Elastic easing in and out\n   * @memberOf fabric.util.ease\n   */\n  function easeInOutElastic(t, b, c, d) {\n    var s = 1.70158, p = 0, a = c;\n    if (t === 0) {\n      return b;\n    }\n    t /= d / 2;\n    if (t === 2) {\n      return b + c;\n    }\n    if (!p) {\n      p = d * (0.3 * 1.5);\n    }\n    var opts = normalize(a, c, p, s);\n    if (t < 1) {\n      return -0.5 * elastic(opts, t, d) + b;\n    }\n    return opts.a * Math.pow(2, -10 * (t -= 1)) *\n      Math.sin((t * d - opts.s) * (2 * Math.PI) / opts.p ) * 0.5 + opts.c + b;\n  }\n\n  /**\n   * Backwards easing in\n   * @memberOf fabric.util.ease\n   */\n  function easeInBack(t, b, c, d, s) {\n    if (s === undefined) {\n      s = 1.70158;\n    }\n    return c * (t /= d) * t * ((s + 1) * t - s) + b;\n  }\n\n  /**\n   * Backwards easing out\n   * @memberOf fabric.util.ease\n   */\n  function easeOutBack(t, b, c, d, s) {\n    if (s === undefined) {\n      s = 1.70158;\n    }\n    return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n  }\n\n  /**\n   * Backwards easing in and out\n   * @memberOf fabric.util.ease\n   */\n  function easeInOutBack(t, b, c, d, s) {\n    if (s === undefined) {\n      s = 1.70158;\n    }\n    t /= d / 2;\n    if (t < 1) {\n      return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b;\n    }\n    return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\n  }\n\n  /**\n   * Bouncing easing in\n   * @memberOf fabric.util.ease\n   */\n  function easeInBounce(t, b, c, d) {\n    return c - easeOutBounce (d - t, 0, c, d) + b;\n  }\n\n  /**\n   * Bouncing easing out\n   * @memberOf fabric.util.ease\n   */\n  function easeOutBounce(t, b, c, d) {\n    if ((t /= d) < (1 / 2.75)) {\n      return c * (7.5625 * t * t) + b;\n    }\n    else if (t < (2 / 2.75)) {\n      return c * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75) + b;\n    }\n    else if (t < (2.5 / 2.75)) {\n      return c * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375) + b;\n    }\n    else {\n      return c * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375) + b;\n    }\n  }\n\n  /**\n   * Bouncing easing in and out\n   * @memberOf fabric.util.ease\n   */\n  function easeInOutBounce(t, b, c, d) {\n    if (t < d / 2) {\n      return easeInBounce (t * 2, 0, c, d) * 0.5 + b;\n    }\n    return easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;\n  }\n\n  /**\n   * Easing functions\n   * See <a href=\"http://gizma.com/easing/\">Easing Equations by Robert Penner</a>\n   * @namespace fabric.util.ease\n   */\n  fabric.util.ease = {\n\n    /**\n     * Quadratic easing in\n     * @memberOf fabric.util.ease\n     */\n    easeInQuad: function(t, b, c, d) {\n      return c * (t /= d) * t + b;\n    },\n\n    /**\n     * Quadratic easing out\n     * @memberOf fabric.util.ease\n     */\n    easeOutQuad: function(t, b, c, d) {\n      return -c * (t /= d) * (t - 2) + b;\n    },\n\n    /**\n     * Quadratic easing in and out\n     * @memberOf fabric.util.ease\n     */\n    easeInOutQuad: function(t, b, c, d) {\n      t /= (d / 2);\n      if (t < 1) {\n        return c / 2 * t * t + b;\n      }\n      return -c / 2 * ((--t) * (t - 2) - 1) + b;\n    },\n\n    /**\n     * Cubic easing in\n     * @memberOf fabric.util.ease\n     */\n    easeInCubic: function(t, b, c, d) {\n      return c * (t /= d) * t * t + b;\n    },\n\n    easeOutCubic: easeOutCubic,\n    easeInOutCubic: easeInOutCubic,\n    easeInQuart: easeInQuart,\n    easeOutQuart: easeOutQuart,\n    easeInOutQuart: easeInOutQuart,\n    easeInQuint: easeInQuint,\n    easeOutQuint: easeOutQuint,\n    easeInOutQuint: easeInOutQuint,\n    easeInSine: easeInSine,\n    easeOutSine: easeOutSine,\n    easeInOutSine: easeInOutSine,\n    easeInExpo: easeInExpo,\n    easeOutExpo: easeOutExpo,\n    easeInOutExpo: easeInOutExpo,\n    easeInCirc: easeInCirc,\n    easeOutCirc: easeOutCirc,\n    easeInOutCirc: easeInOutCirc,\n    easeInElastic: easeInElastic,\n    easeOutElastic: easeOutElastic,\n    easeInOutElastic: easeInOutElastic,\n    easeInBack: easeInBack,\n    easeOutBack: easeOutBack,\n    easeInOutBack: easeInOutBack,\n    easeInBounce: easeInBounce,\n    easeOutBounce: easeOutBounce,\n    easeInOutBounce: easeInOutBounce\n  };\n\n})();\n\n\n(function(global) {\n\n  'use strict';\n\n  /**\n   * @name fabric\n   * @namespace\n   */\n\n  var fabric = global.fabric || (global.fabric = { }),\n      extend = fabric.util.object.extend,\n      clone = fabric.util.object.clone,\n      toFixed = fabric.util.toFixed,\n      parseUnit = fabric.util.parseUnit,\n      multiplyTransformMatrices = fabric.util.multiplyTransformMatrices,\n\n      svgValidTagNames = ['path', 'circle', 'polygon', 'polyline', 'ellipse', 'rect', 'line',\n        'image', 'text'],\n      svgViewBoxElements = ['symbol', 'image', 'marker', 'pattern', 'view', 'svg'],\n      svgInvalidAncestors = ['pattern', 'defs', 'symbol', 'metadata', 'clipPath', 'mask', 'desc'],\n      svgValidParents = ['symbol', 'g', 'a', 'svg', 'clipPath', 'defs'],\n\n      attributesMap = {\n        cx:                   'left',\n        x:                    'left',\n        r:                    'radius',\n        cy:                   'top',\n        y:                    'top',\n        display:              'visible',\n        visibility:           'visible',\n        transform:            'transformMatrix',\n        'fill-opacity':       'fillOpacity',\n        'fill-rule':          'fillRule',\n        'font-family':        'fontFamily',\n        'font-size':          'fontSize',\n        'font-style':         'fontStyle',\n        'font-weight':        'fontWeight',\n        'letter-spacing':     'charSpacing',\n        'paint-order':        'paintFirst',\n        'stroke-dasharray':   'strokeDashArray',\n        'stroke-dashoffset':  'strokeDashOffset',\n        'stroke-linecap':     'strokeLineCap',\n        'stroke-linejoin':    'strokeLineJoin',\n        'stroke-miterlimit':  'strokeMiterLimit',\n        'stroke-opacity':     'strokeOpacity',\n        'stroke-width':       'strokeWidth',\n        'text-decoration':    'textDecoration',\n        'text-anchor':        'textAnchor',\n        opacity:              'opacity',\n        'clip-path':          'clipPath',\n        'clip-rule':          'clipRule',\n        'vector-effect':      'strokeUniform',\n        'image-rendering':    'imageSmoothing',\n      },\n\n      colorAttributes = {\n        stroke: 'strokeOpacity',\n        fill:   'fillOpacity'\n      },\n\n      fSize = 'font-size', cPath = 'clip-path';\n\n  fabric.svgValidTagNamesRegEx = getSvgRegex(svgValidTagNames);\n  fabric.svgViewBoxElementsRegEx = getSvgRegex(svgViewBoxElements);\n  fabric.svgInvalidAncestorsRegEx = getSvgRegex(svgInvalidAncestors);\n  fabric.svgValidParentsRegEx = getSvgRegex(svgValidParents);\n\n  fabric.cssRules = { };\n  fabric.gradientDefs = { };\n  fabric.clipPaths = { };\n\n  function normalizeAttr(attr) {\n    // transform attribute names\n    if (attr in attributesMap) {\n      return attributesMap[attr];\n    }\n    return attr;\n  }\n\n  function normalizeValue(attr, value, parentAttributes, fontSize) {\n    var isArray = Array.isArray(value), parsed;\n\n    if ((attr === 'fill' || attr === 'stroke') && value === 'none') {\n      value = '';\n    }\n    else if (attr === 'strokeUniform') {\n      return (value === 'non-scaling-stroke');\n    }\n    else if (attr === 'strokeDashArray') {\n      if (value === 'none') {\n        value = null;\n      }\n      else {\n        value = value.replace(/,/g, ' ').split(/\\s+/).map(parseFloat);\n      }\n    }\n    else if (attr === 'transformMatrix') {\n      if (parentAttributes && parentAttributes.transformMatrix) {\n        value = multiplyTransformMatrices(\n          parentAttributes.transformMatrix, fabric.parseTransformAttribute(value));\n      }\n      else {\n        value = fabric.parseTransformAttribute(value);\n      }\n    }\n    else if (attr === 'visible') {\n      value = value !== 'none' && value !== 'hidden';\n      // display=none on parent element always takes precedence over child element\n      if (parentAttributes && parentAttributes.visible === false) {\n        value = false;\n      }\n    }\n    else if (attr === 'opacity') {\n      value = parseFloat(value);\n      if (parentAttributes && typeof parentAttributes.opacity !== 'undefined') {\n        value *= parentAttributes.opacity;\n      }\n    }\n    else if (attr === 'textAnchor' /* text-anchor */) {\n      value = value === 'start' ? 'left' : value === 'end' ? 'right' : 'center';\n    }\n    else if (attr === 'charSpacing') {\n      // parseUnit returns px and we convert it to em\n      parsed = parseUnit(value, fontSize) / fontSize * 1000;\n    }\n    else if (attr === 'paintFirst') {\n      var fillIndex = value.indexOf('fill');\n      var strokeIndex = value.indexOf('stroke');\n      var value = 'fill';\n      if (fillIndex > -1 && strokeIndex > -1 && strokeIndex < fillIndex) {\n        value = 'stroke';\n      }\n      else if (fillIndex === -1 && strokeIndex > -1) {\n        value = 'stroke';\n      }\n    }\n    else if (attr === 'href' || attr === 'xlink:href' || attr === 'font') {\n      return value;\n    }\n    else if (attr === 'imageSmoothing') {\n      return (value === 'optimizeQuality');\n    }\n    else {\n      parsed = isArray ? value.map(parseUnit) : parseUnit(value, fontSize);\n    }\n\n    return (!isArray && isNaN(parsed) ? value : parsed);\n  }\n\n  /**\n    * @private\n    */\n  function getSvgRegex(arr) {\n    return new RegExp('^(' + arr.join('|') + ')\\\\b', 'i');\n  }\n\n  /**\n   * @private\n   * @param {Object} attributes Array of attributes to parse\n   */\n  function _setStrokeFillOpacity(attributes) {\n    for (var attr in colorAttributes) {\n\n      if (typeof attributes[colorAttributes[attr]] === 'undefined' || attributes[attr] === '') {\n        continue;\n      }\n\n      if (typeof attributes[attr] === 'undefined') {\n        if (!fabric.Object.prototype[attr]) {\n          continue;\n        }\n        attributes[attr] = fabric.Object.prototype[attr];\n      }\n\n      if (attributes[attr].indexOf('url(') === 0) {\n        continue;\n      }\n\n      var color = new fabric.Color(attributes[attr]);\n      attributes[attr] = color.setAlpha(toFixed(color.getAlpha() * attributes[colorAttributes[attr]], 2)).toRgba();\n    }\n    return attributes;\n  }\n\n  /**\n   * @private\n   */\n  function _getMultipleNodes(doc, nodeNames) {\n    var nodeName, nodeArray = [], nodeList, i, len;\n    for (i = 0, len = nodeNames.length; i < len; i++) {\n      nodeName = nodeNames[i];\n      nodeList = doc.getElementsByTagName(nodeName);\n      nodeArray = nodeArray.concat(Array.prototype.slice.call(nodeList));\n    }\n    return nodeArray;\n  }\n\n  /**\n   * Parses \"transform\" attribute, returning an array of values\n   * @static\n   * @function\n   * @memberOf fabric\n   * @param {String} attributeValue String containing attribute value\n   * @return {Array} Array of 6 elements representing transformation matrix\n   */\n  fabric.parseTransformAttribute = (function() {\n    function rotateMatrix(matrix, args) {\n      var cos = fabric.util.cos(args[0]), sin = fabric.util.sin(args[0]),\n          x = 0, y = 0;\n      if (args.length === 3) {\n        x = args[1];\n        y = args[2];\n      }\n\n      matrix[0] = cos;\n      matrix[1] = sin;\n      matrix[2] = -sin;\n      matrix[3] = cos;\n      matrix[4] = x - (cos * x - sin * y);\n      matrix[5] = y - (sin * x + cos * y);\n    }\n\n    function scaleMatrix(matrix, args) {\n      var multiplierX = args[0],\n          multiplierY = (args.length === 2) ? args[1] : args[0];\n\n      matrix[0] = multiplierX;\n      matrix[3] = multiplierY;\n    }\n\n    function skewMatrix(matrix, args, pos) {\n      matrix[pos] = Math.tan(fabric.util.degreesToRadians(args[0]));\n    }\n\n    function translateMatrix(matrix, args) {\n      matrix[4] = args[0];\n      if (args.length === 2) {\n        matrix[5] = args[1];\n      }\n    }\n\n    // identity matrix\n    var iMatrix = fabric.iMatrix,\n\n        // == begin transform regexp\n        number = fabric.reNum,\n\n        commaWsp = fabric.commaWsp,\n\n        skewX = '(?:(skewX)\\\\s*\\\\(\\\\s*(' + number + ')\\\\s*\\\\))',\n\n        skewY = '(?:(skewY)\\\\s*\\\\(\\\\s*(' + number + ')\\\\s*\\\\))',\n\n        rotate = '(?:(rotate)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n                    commaWsp + '(' + number + ')' +\n                    commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n        scale = '(?:(scale)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n                    commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n        translate = '(?:(translate)\\\\s*\\\\(\\\\s*(' + number + ')(?:' +\n                    commaWsp + '(' + number + '))?\\\\s*\\\\))',\n\n        matrix = '(?:(matrix)\\\\s*\\\\(\\\\s*' +\n                  '(' + number + ')' + commaWsp +\n                  '(' + number + ')' + commaWsp +\n                  '(' + number + ')' + commaWsp +\n                  '(' + number + ')' + commaWsp +\n                  '(' + number + ')' + commaWsp +\n                  '(' + number + ')' +\n                  '\\\\s*\\\\))',\n\n        transform = '(?:' +\n                    matrix + '|' +\n                    translate + '|' +\n                    scale + '|' +\n                    rotate + '|' +\n                    skewX + '|' +\n                    skewY +\n                    ')',\n\n        transforms = '(?:' + transform + '(?:' + commaWsp + '*' + transform + ')*' + ')',\n\n        transformList = '^\\\\s*(?:' + transforms + '?)\\\\s*$',\n\n        // http://www.w3.org/TR/SVG/coords.html#TransformAttribute\n        reTransformList = new RegExp(transformList),\n        // == end transform regexp\n\n        reTransform = new RegExp(transform, 'g');\n\n    return function(attributeValue) {\n\n      // start with identity matrix\n      var matrix = iMatrix.concat(),\n          matrices = [];\n\n      // return if no argument was given or\n      // an argument does not match transform attribute regexp\n      if (!attributeValue || (attributeValue && !reTransformList.test(attributeValue))) {\n        return matrix;\n      }\n\n      attributeValue.replace(reTransform, function(match) {\n\n        var m = new RegExp(transform).exec(match).filter(function (match) {\n              // match !== '' && match != null\n              return (!!match);\n            }),\n            operation = m[1],\n            args = m.slice(2).map(parseFloat);\n\n        switch (operation) {\n          case 'translate':\n            translateMatrix(matrix, args);\n            break;\n          case 'rotate':\n            args[0] = fabric.util.degreesToRadians(args[0]);\n            rotateMatrix(matrix, args);\n            break;\n          case 'scale':\n            scaleMatrix(matrix, args);\n            break;\n          case 'skewX':\n            skewMatrix(matrix, args, 2);\n            break;\n          case 'skewY':\n            skewMatrix(matrix, args, 1);\n            break;\n          case 'matrix':\n            matrix = args;\n            break;\n        }\n\n        // snapshot current matrix into matrices array\n        matrices.push(matrix.concat());\n        // reset\n        matrix = iMatrix.concat();\n      });\n\n      var combinedMatrix = matrices[0];\n      while (matrices.length > 1) {\n        matrices.shift();\n        combinedMatrix = fabric.util.multiplyTransformMatrices(combinedMatrix, matrices[0]);\n      }\n      return combinedMatrix;\n    };\n  })();\n\n  /**\n   * @private\n   */\n  function parseStyleString(style, oStyle) {\n    var attr, value;\n    style.replace(/;\\s*$/, '').split(';').forEach(function (chunk) {\n      var pair = chunk.split(':');\n\n      attr = pair[0].trim().toLowerCase();\n      value =  pair[1].trim();\n\n      oStyle[attr] = value;\n    });\n  }\n\n  /**\n   * @private\n   */\n  function parseStyleObject(style, oStyle) {\n    var attr, value;\n    for (var prop in style) {\n      if (typeof style[prop] === 'undefined') {\n        continue;\n      }\n\n      attr = prop.toLowerCase();\n      value = style[prop];\n\n      oStyle[attr] = value;\n    }\n  }\n\n  /**\n   * @private\n   */\n  function getGlobalStylesForElement(element, svgUid) {\n    var styles = { };\n    for (var rule in fabric.cssRules[svgUid]) {\n      if (elementMatchesRule(element, rule.split(' '))) {\n        for (var property in fabric.cssRules[svgUid][rule]) {\n          styles[property] = fabric.cssRules[svgUid][rule][property];\n        }\n      }\n    }\n    return styles;\n  }\n\n  /**\n   * @private\n   */\n  function elementMatchesRule(element, selectors) {\n    var firstMatching, parentMatching = true;\n    //start from rightmost selector.\n    firstMatching = selectorMatches(element, selectors.pop());\n    if (firstMatching && selectors.length) {\n      parentMatching = doesSomeParentMatch(element, selectors);\n    }\n    return firstMatching && parentMatching && (selectors.length === 0);\n  }\n\n  function doesSomeParentMatch(element, selectors) {\n    var selector, parentMatching = true;\n    while (element.parentNode && element.parentNode.nodeType === 1 && selectors.length) {\n      if (parentMatching) {\n        selector = selectors.pop();\n      }\n      element = element.parentNode;\n      parentMatching = selectorMatches(element, selector);\n    }\n    return selectors.length === 0;\n  }\n\n  /**\n   * @private\n   */\n  function selectorMatches(element, selector) {\n    var nodeName = element.nodeName,\n        classNames = element.getAttribute('class'),\n        id = element.getAttribute('id'), matcher, i;\n    // i check if a selector matches slicing away part from it.\n    // if i get empty string i should match\n    matcher = new RegExp('^' + nodeName, 'i');\n    selector = selector.replace(matcher, '');\n    if (id && selector.length) {\n      matcher = new RegExp('#' + id + '(?![a-zA-Z\\\\-]+)', 'i');\n      selector = selector.replace(matcher, '');\n    }\n    if (classNames && selector.length) {\n      classNames = classNames.split(' ');\n      for (i = classNames.length; i--;) {\n        matcher = new RegExp('\\\\.' + classNames[i] + '(?![a-zA-Z\\\\-]+)', 'i');\n        selector = selector.replace(matcher, '');\n      }\n    }\n    return selector.length === 0;\n  }\n\n  /**\n   * @private\n   * to support IE8 missing getElementById on SVGdocument and on node xmlDOM\n   */\n  function elementById(doc, id) {\n    var el;\n    doc.getElementById && (el = doc.getElementById(id));\n    if (el) {\n      return el;\n    }\n    var node, i, len, nodelist = doc.getElementsByTagName('*');\n    for (i = 0, len = nodelist.length; i < len; i++) {\n      node = nodelist[i];\n      if (id === node.getAttribute('id')) {\n        return node;\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  function parseUseDirectives(doc) {\n    var nodelist = _getMultipleNodes(doc, ['use', 'svg:use']), i = 0;\n    while (nodelist.length && i < nodelist.length) {\n      var el = nodelist[i],\n          xlinkAttribute = el.getAttribute('xlink:href') || el.getAttribute('href');\n\n      if (xlinkAttribute === null) {\n        return;\n      }\n\n      var xlink = xlinkAttribute.slice(1),\n          x = el.getAttribute('x') || 0,\n          y = el.getAttribute('y') || 0,\n          el2 = elementById(doc, xlink).cloneNode(true),\n          currentTrans = (el2.getAttribute('transform') || '') + ' translate(' + x + ', ' + y + ')',\n          parentNode,\n          oldLength = nodelist.length, attr,\n          j,\n          attrs,\n          len,\n          namespace = fabric.svgNS;\n\n      applyViewboxTransform(el2);\n      if (/^svg$/i.test(el2.nodeName)) {\n        var el3 = el2.ownerDocument.createElementNS(namespace, 'g');\n        for (j = 0, attrs = el2.attributes, len = attrs.length; j < len; j++) {\n          attr = attrs.item(j);\n          el3.setAttributeNS(namespace, attr.nodeName, attr.nodeValue);\n        }\n        // el2.firstChild != null\n        while (el2.firstChild) {\n          el3.appendChild(el2.firstChild);\n        }\n        el2 = el3;\n      }\n\n      for (j = 0, attrs = el.attributes, len = attrs.length; j < len; j++) {\n        attr = attrs.item(j);\n        if (attr.nodeName === 'x' || attr.nodeName === 'y' ||\n          attr.nodeName === 'xlink:href' || attr.nodeName === 'href') {\n          continue;\n        }\n\n        if (attr.nodeName === 'transform') {\n          currentTrans = attr.nodeValue + ' ' + currentTrans;\n        }\n        else {\n          el2.setAttribute(attr.nodeName, attr.nodeValue);\n        }\n      }\n\n      el2.setAttribute('transform', currentTrans);\n      el2.setAttribute('instantiated_by_use', '1');\n      el2.removeAttribute('id');\n      parentNode = el.parentNode;\n      parentNode.replaceChild(el2, el);\n      // some browsers do not shorten nodelist after replaceChild (IE8)\n      if (nodelist.length === oldLength) {\n        i++;\n      }\n    }\n  }\n\n  // http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute\n  // matches, e.g.: +14.56e-12, etc.\n  var reViewBoxAttrValue = new RegExp(\n    '^' +\n    '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n    '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n    '\\\\s*(' + fabric.reNum + '+)\\\\s*,?' +\n    '\\\\s*(' + fabric.reNum + '+)\\\\s*' +\n    '$'\n  );\n\n  /**\n   * Add a <g> element that envelop all child elements and makes the viewbox transformMatrix descend on all elements\n   */\n  function applyViewboxTransform(element) {\n    if (!fabric.svgViewBoxElementsRegEx.test(element.nodeName)) {\n      return {};\n    }\n    var viewBoxAttr = element.getAttribute('viewBox'),\n        scaleX = 1,\n        scaleY = 1,\n        minX = 0,\n        minY = 0,\n        viewBoxWidth, viewBoxHeight, matrix, el,\n        widthAttr = element.getAttribute('width'),\n        heightAttr = element.getAttribute('height'),\n        x = element.getAttribute('x') || 0,\n        y = element.getAttribute('y') || 0,\n        preserveAspectRatio = element.getAttribute('preserveAspectRatio') || '',\n        missingViewBox = (!viewBoxAttr || !(viewBoxAttr = viewBoxAttr.match(reViewBoxAttrValue))),\n        missingDimAttr = (!widthAttr || !heightAttr || widthAttr === '100%' || heightAttr === '100%'),\n        toBeParsed = missingViewBox && missingDimAttr,\n        parsedDim = { }, translateMatrix = '', widthDiff = 0, heightDiff = 0;\n\n    parsedDim.width = 0;\n    parsedDim.height = 0;\n    parsedDim.toBeParsed = toBeParsed;\n\n    if (missingViewBox) {\n      if (((x || y) && element.parentNode && element.parentNode.nodeName !== '#document')) {\n        translateMatrix = ' translate(' + parseUnit(x) + ' ' + parseUnit(y) + ') ';\n        matrix = (element.getAttribute('transform') || '') + translateMatrix;\n        element.setAttribute('transform', matrix);\n        element.removeAttribute('x');\n        element.removeAttribute('y');\n      }\n    }\n\n    if (toBeParsed) {\n      return parsedDim;\n    }\n\n    if (missingViewBox) {\n      parsedDim.width = parseUnit(widthAttr);\n      parsedDim.height = parseUnit(heightAttr);\n      // set a transform for elements that have x y and are inner(only) SVGs\n      return parsedDim;\n    }\n    minX = -parseFloat(viewBoxAttr[1]);\n    minY = -parseFloat(viewBoxAttr[2]);\n    viewBoxWidth = parseFloat(viewBoxAttr[3]);\n    viewBoxHeight = parseFloat(viewBoxAttr[4]);\n    parsedDim.minX = minX;\n    parsedDim.minY = minY;\n    parsedDim.viewBoxWidth = viewBoxWidth;\n    parsedDim.viewBoxHeight = viewBoxHeight;\n    if (!missingDimAttr) {\n      parsedDim.width = parseUnit(widthAttr);\n      parsedDim.height = parseUnit(heightAttr);\n      scaleX = parsedDim.width / viewBoxWidth;\n      scaleY = parsedDim.height / viewBoxHeight;\n    }\n    else {\n      parsedDim.width = viewBoxWidth;\n      parsedDim.height = viewBoxHeight;\n    }\n\n    // default is to preserve aspect ratio\n    preserveAspectRatio = fabric.util.parsePreserveAspectRatioAttribute(preserveAspectRatio);\n    if (preserveAspectRatio.alignX !== 'none') {\n      //translate all container for the effect of Mid, Min, Max\n      if (preserveAspectRatio.meetOrSlice === 'meet') {\n        scaleY = scaleX = (scaleX > scaleY ? scaleY : scaleX);\n        // calculate additional translation to move the viewbox\n      }\n      if (preserveAspectRatio.meetOrSlice === 'slice') {\n        scaleY = scaleX = (scaleX > scaleY ? scaleX : scaleY);\n        // calculate additional translation to move the viewbox\n      }\n      widthDiff = parsedDim.width - viewBoxWidth * scaleX;\n      heightDiff = parsedDim.height - viewBoxHeight * scaleX;\n      if (preserveAspectRatio.alignX === 'Mid') {\n        widthDiff /= 2;\n      }\n      if (preserveAspectRatio.alignY === 'Mid') {\n        heightDiff /= 2;\n      }\n      if (preserveAspectRatio.alignX === 'Min') {\n        widthDiff = 0;\n      }\n      if (preserveAspectRatio.alignY === 'Min') {\n        heightDiff = 0;\n      }\n    }\n\n    if (scaleX === 1 && scaleY === 1 && minX === 0 && minY === 0 && x === 0 && y === 0) {\n      return parsedDim;\n    }\n    if ((x || y) && element.parentNode.nodeName !== '#document') {\n      translateMatrix = ' translate(' + parseUnit(x) + ' ' + parseUnit(y) + ') ';\n    }\n\n    matrix = translateMatrix + ' matrix(' + scaleX +\n                  ' 0' +\n                  ' 0 ' +\n                  scaleY + ' ' +\n                  (minX * scaleX + widthDiff) + ' ' +\n                  (minY * scaleY + heightDiff) + ') ';\n    // seems unused.\n    // parsedDim.viewboxTransform = fabric.parseTransformAttribute(matrix);\n    if (element.nodeName === 'svg') {\n      el = element.ownerDocument.createElementNS(fabric.svgNS, 'g');\n      // element.firstChild != null\n      while (element.firstChild) {\n        el.appendChild(element.firstChild);\n      }\n      element.appendChild(el);\n    }\n    else {\n      el = element;\n      el.removeAttribute('x');\n      el.removeAttribute('y');\n      matrix = el.getAttribute('transform') + matrix;\n    }\n    el.setAttribute('transform', matrix);\n    return parsedDim;\n  }\n\n  function hasAncestorWithNodeName(element, nodeName) {\n    while (element && (element = element.parentNode)) {\n      if (element.nodeName && nodeName.test(element.nodeName.replace('svg:', ''))\n        && !element.getAttribute('instantiated_by_use')) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Parses an SVG document, converts it to an array of corresponding fabric.* instances and passes them to a callback\n   * @static\n   * @function\n   * @memberOf fabric\n   * @param {SVGDocument} doc SVG document to parse\n   * @param {Function} callback Callback to call when parsing is finished;\n   * It's being passed an array of elements (parsed from a document).\n   * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n   * @param {Object} [parsingOptions] options for parsing document\n   * @param {String} [parsingOptions.crossOrigin] crossOrigin settings\n   */\n  fabric.parseSVGDocument = function(doc, callback, reviver, parsingOptions) {\n    if (!doc) {\n      return;\n    }\n\n    parseUseDirectives(doc);\n\n    var svgUid =  fabric.Object.__uid++, i, len,\n        options = applyViewboxTransform(doc),\n        descendants = fabric.util.toArray(doc.getElementsByTagName('*'));\n    options.crossOrigin = parsingOptions && parsingOptions.crossOrigin;\n    options.svgUid = svgUid;\n\n    if (descendants.length === 0 && fabric.isLikelyNode) {\n      // we're likely in node, where \"o3-xml\" library fails to gEBTN(\"*\")\n      // https://github.com/ajaxorg/node-o3-xml/issues/21\n      descendants = doc.selectNodes('//*[name(.)!=\"svg\"]');\n      var arr = [];\n      for (i = 0, len = descendants.length; i < len; i++) {\n        arr[i] = descendants[i];\n      }\n      descendants = arr;\n    }\n\n    var elements = descendants.filter(function(el) {\n      applyViewboxTransform(el);\n      return fabric.svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', '')) &&\n            !hasAncestorWithNodeName(el, fabric.svgInvalidAncestorsRegEx); // http://www.w3.org/TR/SVG/struct.html#DefsElement\n    });\n    if (!elements || (elements && !elements.length)) {\n      callback && callback([], {});\n      return;\n    }\n    var clipPaths = { };\n    descendants.filter(function(el) {\n      return el.nodeName.replace('svg:', '') === 'clipPath';\n    }).forEach(function(el) {\n      var id = el.getAttribute('id');\n      clipPaths[id] = fabric.util.toArray(el.getElementsByTagName('*')).filter(function(el) {\n        return fabric.svgValidTagNamesRegEx.test(el.nodeName.replace('svg:', ''));\n      });\n    });\n    fabric.gradientDefs[svgUid] = fabric.getGradientDefs(doc);\n    fabric.cssRules[svgUid] = fabric.getCSSRules(doc);\n    fabric.clipPaths[svgUid] = clipPaths;\n    // Precedence of rules:   style > class > attribute\n    fabric.parseElements(elements, function(instances, elements) {\n      if (callback) {\n        callback(instances, options, elements, descendants);\n        delete fabric.gradientDefs[svgUid];\n        delete fabric.cssRules[svgUid];\n        delete fabric.clipPaths[svgUid];\n      }\n    }, clone(options), reviver, parsingOptions);\n  };\n\n  function recursivelyParseGradientsXlink(doc, gradient) {\n    var gradientsAttrs = ['gradientTransform', 'x1', 'x2', 'y1', 'y2', 'gradientUnits', 'cx', 'cy', 'r', 'fx', 'fy'],\n        xlinkAttr = 'xlink:href',\n        xLink = gradient.getAttribute(xlinkAttr).slice(1),\n        referencedGradient = elementById(doc, xLink);\n    if (referencedGradient && referencedGradient.getAttribute(xlinkAttr)) {\n      recursivelyParseGradientsXlink(doc, referencedGradient);\n    }\n    gradientsAttrs.forEach(function(attr) {\n      if (referencedGradient && !gradient.hasAttribute(attr) && referencedGradient.hasAttribute(attr)) {\n        gradient.setAttribute(attr, referencedGradient.getAttribute(attr));\n      }\n    });\n    if (!gradient.children.length) {\n      var referenceClone = referencedGradient.cloneNode(true);\n      while (referenceClone.firstChild) {\n        gradient.appendChild(referenceClone.firstChild);\n      }\n    }\n    gradient.removeAttribute(xlinkAttr);\n  }\n\n  var reFontDeclaration = new RegExp(\n    '(normal|italic)?\\\\s*(normal|small-caps)?\\\\s*' +\n    '(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\\\s*(' +\n      fabric.reNum +\n    '(?:px|cm|mm|em|pt|pc|in)*)(?:\\\\/(normal|' + fabric.reNum + '))?\\\\s+(.*)');\n\n  extend(fabric, {\n    /**\n     * Parses a short font declaration, building adding its properties to a style object\n     * @static\n     * @function\n     * @memberOf fabric\n     * @param {String} value font declaration\n     * @param {Object} oStyle definition\n     */\n    parseFontDeclaration: function(value, oStyle) {\n      var match = value.match(reFontDeclaration);\n\n      if (!match) {\n        return;\n      }\n      var fontStyle = match[1],\n          // font variant is not used\n          // fontVariant = match[2],\n          fontWeight = match[3],\n          fontSize = match[4],\n          lineHeight = match[5],\n          fontFamily = match[6];\n\n      if (fontStyle) {\n        oStyle.fontStyle = fontStyle;\n      }\n      if (fontWeight) {\n        oStyle.fontWeight = isNaN(parseFloat(fontWeight)) ? fontWeight : parseFloat(fontWeight);\n      }\n      if (fontSize) {\n        oStyle.fontSize = parseUnit(fontSize);\n      }\n      if (fontFamily) {\n        oStyle.fontFamily = fontFamily;\n      }\n      if (lineHeight) {\n        oStyle.lineHeight = lineHeight === 'normal' ? 1 : lineHeight;\n      }\n    },\n\n    /**\n     * Parses an SVG document, returning all of the gradient declarations found in it\n     * @static\n     * @function\n     * @memberOf fabric\n     * @param {SVGDocument} doc SVG document to parse\n     * @return {Object} Gradient definitions; key corresponds to element id, value -- to gradient definition element\n     */\n    getGradientDefs: function(doc) {\n      var tagArray = [\n            'linearGradient',\n            'radialGradient',\n            'svg:linearGradient',\n            'svg:radialGradient'],\n          elList = _getMultipleNodes(doc, tagArray),\n          el, j = 0, gradientDefs = { };\n      j = elList.length;\n      while (j--) {\n        el = elList[j];\n        if (el.getAttribute('xlink:href')) {\n          recursivelyParseGradientsXlink(doc, el);\n        }\n        gradientDefs[el.getAttribute('id')] = el;\n      }\n      return gradientDefs;\n    },\n\n    /**\n     * Returns an object of attributes' name/value, given element and an array of attribute names;\n     * Parses parent \"g\" nodes recursively upwards.\n     * @static\n     * @memberOf fabric\n     * @param {DOMElement} element Element to parse\n     * @param {Array} attributes Array of attributes to parse\n     * @return {Object} object containing parsed attributes' names/values\n     */\n    parseAttributes: function(element, attributes, svgUid) {\n\n      if (!element) {\n        return;\n      }\n\n      var value,\n          parentAttributes = { },\n          fontSize, parentFontSize;\n\n      if (typeof svgUid === 'undefined') {\n        svgUid = element.getAttribute('svgUid');\n      }\n      // if there's a parent container (`g` or `a` or `symbol` node), parse its attributes recursively upwards\n      if (element.parentNode && fabric.svgValidParentsRegEx.test(element.parentNode.nodeName)) {\n        parentAttributes = fabric.parseAttributes(element.parentNode, attributes, svgUid);\n      }\n\n      var ownAttributes = attributes.reduce(function(memo, attr) {\n        value = element.getAttribute(attr);\n        if (value) { // eslint-disable-line\n          memo[attr] = value;\n        }\n        return memo;\n      }, { });\n      // add values parsed from style, which take precedence over attributes\n      // (see: http://www.w3.org/TR/SVG/styling.html#UsingPresentationAttributes)\n      var cssAttrs = extend(\n        getGlobalStylesForElement(element, svgUid),\n        fabric.parseStyleAttribute(element)\n      );\n      ownAttributes = extend(\n        ownAttributes,\n        cssAttrs\n      );\n      if (cssAttrs[cPath]) {\n        element.setAttribute(cPath, cssAttrs[cPath]);\n      }\n      fontSize = parentFontSize = parentAttributes.fontSize || fabric.Text.DEFAULT_SVG_FONT_SIZE;\n      if (ownAttributes[fSize]) {\n        // looks like the minimum should be 9px when dealing with ems. this is what looks like in browsers.\n        ownAttributes[fSize] = fontSize = parseUnit(ownAttributes[fSize], parentFontSize);\n      }\n\n      var normalizedAttr, normalizedValue, normalizedStyle = {};\n      for (var attr in ownAttributes) {\n        normalizedAttr = normalizeAttr(attr);\n        normalizedValue = normalizeValue(normalizedAttr, ownAttributes[attr], parentAttributes, fontSize);\n        normalizedStyle[normalizedAttr] = normalizedValue;\n      }\n      if (normalizedStyle && normalizedStyle.font) {\n        fabric.parseFontDeclaration(normalizedStyle.font, normalizedStyle);\n      }\n      var mergedAttrs = extend(parentAttributes, normalizedStyle);\n      return fabric.svgValidParentsRegEx.test(element.nodeName) ? mergedAttrs : _setStrokeFillOpacity(mergedAttrs);\n    },\n\n    /**\n     * Transforms an array of svg elements to corresponding fabric.* instances\n     * @static\n     * @memberOf fabric\n     * @param {Array} elements Array of elements to parse\n     * @param {Function} callback Being passed an array of fabric instances (transformed from SVG elements)\n     * @param {Object} [options] Options object\n     * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n     */\n    parseElements: function(elements, callback, options, reviver, parsingOptions) {\n      new fabric.ElementsParser(elements, callback, options, reviver, parsingOptions).parse();\n    },\n\n    /**\n     * Parses \"style\" attribute, retuning an object with values\n     * @static\n     * @memberOf fabric\n     * @param {SVGElement} element Element to parse\n     * @return {Object} Objects with values parsed from style attribute of an element\n     */\n    parseStyleAttribute: function(element) {\n      var oStyle = { },\n          style = element.getAttribute('style');\n\n      if (!style) {\n        return oStyle;\n      }\n\n      if (typeof style === 'string') {\n        parseStyleString(style, oStyle);\n      }\n      else {\n        parseStyleObject(style, oStyle);\n      }\n\n      return oStyle;\n    },\n\n    /**\n     * Parses \"points\" attribute, returning an array of values\n     * @static\n     * @memberOf fabric\n     * @param {String} points points attribute string\n     * @return {Array} array of points\n     */\n    parsePointsAttribute: function(points) {\n\n      // points attribute is required and must not be empty\n      if (!points) {\n        return null;\n      }\n\n      // replace commas with whitespace and remove bookending whitespace\n      points = points.replace(/,/g, ' ').trim();\n\n      points = points.split(/\\s+/);\n      var parsedPoints = [], i, len;\n\n      for (i = 0, len = points.length; i < len; i += 2) {\n        parsedPoints.push({\n          x: parseFloat(points[i]),\n          y: parseFloat(points[i + 1])\n        });\n      }\n\n      // odd number of points is an error\n      // if (parsedPoints.length % 2 !== 0) {\n      //   return null;\n      // }\n\n      return parsedPoints;\n    },\n\n    /**\n     * Returns CSS rules for a given SVG document\n     * @static\n     * @function\n     * @memberOf fabric\n     * @param {SVGDocument} doc SVG document to parse\n     * @return {Object} CSS rules of this document\n     */\n    getCSSRules: function(doc) {\n      var styles = doc.getElementsByTagName('style'), i, len,\n          allRules = { }, rules;\n\n      // very crude parsing of style contents\n      for (i = 0, len = styles.length; i < len; i++) {\n        var styleContents = styles[i].textContent;\n\n        // remove comments\n        styleContents = styleContents.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n        if (styleContents.trim() === '') {\n          continue;\n        }\n        // recovers all the rule in this form `body { style code... }`\n        // rules = styleContents.match(/[^{]*\\{[\\s\\S]*?\\}/g);\n        rules = styleContents.split('}');\n        // remove empty rules.\n        rules = rules.filter(function(rule) { return rule.trim(); });\n        // at this point we have hopefully an array of rules `body { style code... `\n        // eslint-disable-next-line no-loop-func\n        rules.forEach(function(rule) {\n\n          var match = rule.split('{'),\n              ruleObj = { }, declaration = match[1].trim(),\n              propertyValuePairs = declaration.split(';').filter(function(pair) { return pair.trim(); });\n\n          for (i = 0, len = propertyValuePairs.length; i < len; i++) {\n            var pair = propertyValuePairs[i].split(':'),\n                property = pair[0].trim(),\n                value = pair[1].trim();\n            ruleObj[property] = value;\n          }\n          rule = match[0].trim();\n          rule.split(',').forEach(function(_rule) {\n            _rule = _rule.replace(/^svg/i, '').trim();\n            if (_rule === '') {\n              return;\n            }\n            if (allRules[_rule]) {\n              fabric.util.object.extend(allRules[_rule], ruleObj);\n            }\n            else {\n              allRules[_rule] = fabric.util.object.clone(ruleObj);\n            }\n          });\n        });\n      }\n      return allRules;\n    },\n\n    /**\n     * Takes url corresponding to an SVG document, and parses it into a set of fabric objects.\n     * Note that SVG is fetched via XMLHttpRequest, so it needs to conform to SOP (Same Origin Policy)\n     * @memberOf fabric\n     * @param {String} url\n     * @param {Function} callback\n     * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n     * @param {Object} [options] Object containing options for parsing\n     * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources\n     */\n    loadSVGFromURL: function(url, callback, reviver, options) {\n\n      url = url.replace(/^\\n\\s*/, '').trim();\n      new fabric.util.request(url, {\n        method: 'get',\n        onComplete: onComplete\n      });\n\n      function onComplete(r) {\n\n        var xml = r.responseXML;\n        if (!xml || !xml.documentElement) {\n          callback && callback(null);\n          return false;\n        }\n\n        fabric.parseSVGDocument(xml.documentElement, function (results, _options, elements, allElements) {\n          callback && callback(results, _options, elements, allElements);\n        }, reviver, options);\n      }\n    },\n\n    /**\n     * Takes string corresponding to an SVG document, and parses it into a set of fabric objects\n     * @memberOf fabric\n     * @param {String} string\n     * @param {Function} callback\n     * @param {Function} [reviver] Method for further parsing of SVG elements, called after each fabric object created.\n     * @param {Object} [options] Object containing options for parsing\n     * @param {String} [options.crossOrigin] crossOrigin crossOrigin setting to use for external resources\n     */\n    loadSVGFromString: function(string, callback, reviver, options) {\n      var parser = new fabric.window.DOMParser(),\n          doc = parser.parseFromString(string.trim(), 'text/xml');\n      fabric.parseSVGDocument(doc.documentElement, function (results, _options, elements, allElements) {\n        callback(results, _options, elements, allElements);\n      }, reviver, options);\n    }\n  });\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\nfabric.ElementsParser = function(elements, callback, options, reviver, parsingOptions, doc) {\n  this.elements = elements;\n  this.callback = callback;\n  this.options = options;\n  this.reviver = reviver;\n  this.svgUid = (options && options.svgUid) || 0;\n  this.parsingOptions = parsingOptions;\n  this.regexUrl = /^url\\(['\"]?#([^'\"]+)['\"]?\\)/g;\n  this.doc = doc;\n};\n\n(function(proto) {\n  proto.parse = function() {\n    this.instances = new Array(this.elements.length);\n    this.numElements = this.elements.length;\n    this.createObjects();\n  };\n\n  proto.createObjects = function() {\n    var _this = this;\n    this.elements.forEach(function(element, i) {\n      element.setAttribute('svgUid', _this.svgUid);\n      _this.createObject(element, i);\n    });\n  };\n\n  proto.findTag = function(el) {\n    return fabric[fabric.util.string.capitalize(el.tagName.replace('svg:', ''))];\n  };\n\n  proto.createObject = function(el, index) {\n    var klass = this.findTag(el);\n    if (klass && klass.fromElement) {\n      try {\n        klass.fromElement(el, this.createCallback(index, el), this.options);\n      }\n      catch (err) {\n        fabric.log(err);\n      }\n    }\n    else {\n      this.checkIfDone();\n    }\n  };\n\n  proto.createCallback = function(index, el) {\n    var _this = this;\n    return function(obj) {\n      var _options;\n      _this.resolveGradient(obj, el, 'fill');\n      _this.resolveGradient(obj, el, 'stroke');\n      if (obj instanceof fabric.Image && obj._originalElement) {\n        _options = obj.parsePreserveAspectRatioAttribute(el);\n      }\n      obj._removeTransformMatrix(_options);\n      _this.resolveClipPath(obj, el);\n      _this.reviver && _this.reviver(el, obj);\n      _this.instances[index] = obj;\n      _this.checkIfDone();\n    };\n  };\n\n  proto.extractPropertyDefinition = function(obj, property, storage) {\n    var value = obj[property], regex = this.regexUrl;\n    if (!regex.test(value)) {\n      return;\n    }\n    regex.lastIndex = 0;\n    var id = regex.exec(value)[1];\n    regex.lastIndex = 0;\n    return fabric[storage][this.svgUid][id];\n  };\n\n  proto.resolveGradient = function(obj, el, property) {\n    var gradientDef = this.extractPropertyDefinition(obj, property, 'gradientDefs');\n    if (gradientDef) {\n      var opacityAttr = el.getAttribute(property + '-opacity');\n      var gradient = fabric.Gradient.fromElement(gradientDef, obj, opacityAttr, this.options);\n      obj.set(property, gradient);\n    }\n  };\n\n  proto.createClipPathCallback = function(obj, container) {\n    return function(_newObj) {\n      _newObj._removeTransformMatrix();\n      _newObj.fillRule = _newObj.clipRule;\n      container.push(_newObj);\n    };\n  };\n\n  proto.resolveClipPath = function(obj, usingElement) {\n    var clipPath = this.extractPropertyDefinition(obj, 'clipPath', 'clipPaths'),\n        element, klass, objTransformInv, container, gTransform, options;\n    if (clipPath) {\n      container = [];\n      objTransformInv = fabric.util.invertTransform(obj.calcTransformMatrix());\n      // move the clipPath tag as sibling to the real element that is using it\n      var clipPathTag = clipPath[0].parentNode;\n      var clipPathOwner = usingElement;\n      while (clipPathOwner.parentNode && clipPathOwner.getAttribute('clip-path') !== obj.clipPath) {\n        clipPathOwner = clipPathOwner.parentNode;\n      }\n      clipPathOwner.parentNode.appendChild(clipPathTag);\n      for (var i = 0; i < clipPath.length; i++) {\n        element = clipPath[i];\n        klass = this.findTag(element);\n        klass.fromElement(\n          element,\n          this.createClipPathCallback(obj, container),\n          this.options\n        );\n      }\n      if (container.length === 1) {\n        clipPath = container[0];\n      }\n      else {\n        clipPath = new fabric.Group(container);\n      }\n      gTransform = fabric.util.multiplyTransformMatrices(\n        objTransformInv,\n        clipPath.calcTransformMatrix()\n      );\n      if (clipPath.clipPath) {\n        this.resolveClipPath(clipPath, clipPathOwner);\n      }\n      var options = fabric.util.qrDecompose(gTransform);\n      clipPath.flipX = false;\n      clipPath.flipY = false;\n      clipPath.set('scaleX', options.scaleX);\n      clipPath.set('scaleY', options.scaleY);\n      clipPath.angle = options.angle;\n      clipPath.skewX = options.skewX;\n      clipPath.skewY = 0;\n      clipPath.setPositionByOrigin({ x: options.translateX, y: options.translateY }, 'center', 'center');\n      obj.clipPath = clipPath;\n    }\n    else {\n      // if clip-path does not resolve to any element, delete the property.\n      delete obj.clipPath;\n    }\n  };\n\n  proto.checkIfDone = function() {\n    if (--this.numElements === 0) {\n      this.instances = this.instances.filter(function(el) {\n        // eslint-disable-next-line no-eq-null, eqeqeq\n        return el != null;\n      });\n      this.callback(this.instances, this.elements);\n    }\n  };\n})(fabric.ElementsParser.prototype);\n\n\n(function(global) {\n\n  'use strict';\n\n  /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n\n  var fabric = global.fabric || (global.fabric = { });\n\n  if (fabric.Point) {\n    fabric.warn('fabric.Point is already defined');\n    return;\n  }\n\n  fabric.Point = Point;\n\n  /**\n   * Point class\n   * @class fabric.Point\n   * @memberOf fabric\n   * @constructor\n   * @param {Number} x\n   * @param {Number} y\n   * @return {fabric.Point} thisArg\n   */\n  function Point(x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  Point.prototype = /** @lends fabric.Point.prototype */ {\n\n    type: 'point',\n\n    constructor: Point,\n\n    /**\n     * Adds another point to this one and returns another one\n     * @param {fabric.Point} that\n     * @return {fabric.Point} new Point instance with added values\n     */\n    add: function (that) {\n      return new Point(this.x + that.x, this.y + that.y);\n    },\n\n    /**\n     * Adds another point to this one\n     * @param {fabric.Point} that\n     * @return {fabric.Point} thisArg\n     * @chainable\n     */\n    addEquals: function (that) {\n      this.x += that.x;\n      this.y += that.y;\n      return this;\n    },\n\n    /**\n     * Adds value to this point and returns a new one\n     * @param {Number} scalar\n     * @return {fabric.Point} new Point with added value\n     */\n    scalarAdd: function (scalar) {\n      return new Point(this.x + scalar, this.y + scalar);\n    },\n\n    /**\n     * Adds value to this point\n     * @param {Number} scalar\n     * @return {fabric.Point} thisArg\n     * @chainable\n     */\n    scalarAddEquals: function (scalar) {\n      this.x += scalar;\n      this.y += scalar;\n      return this;\n    },\n\n    /**\n     * Subtracts another point from this point and returns a new one\n     * @param {fabric.Point} that\n     * @return {fabric.Point} new Point object with subtracted values\n     */\n    subtract: function (that) {\n      return new Point(this.x - that.x, this.y - that.y);\n    },\n\n    /**\n     * Subtracts another point from this point\n     * @param {fabric.Point} that\n     * @return {fabric.Point} thisArg\n     * @chainable\n     */\n    subtractEquals: function (that) {\n      this.x -= that.x;\n      this.y -= that.y;\n      return this;\n    },\n\n    /**\n     * Subtracts value from this point and returns a new one\n     * @param {Number} scalar\n     * @return {fabric.Point}\n     */\n    scalarSubtract: function (scalar) {\n      return new Point(this.x - scalar, this.y - scalar);\n    },\n\n    /**\n     * Subtracts value from this point\n     * @param {Number} scalar\n     * @return {fabric.Point} thisArg\n     * @chainable\n     */\n    scalarSubtractEquals: function (scalar) {\n      this.x -= scalar;\n      this.y -= scalar;\n      return this;\n    },\n\n    /**\n     * Multiplies this point by a value and returns a new one\n     * TODO: rename in scalarMultiply in 2.0\n     * @param {Number} scalar\n     * @return {fabric.Point}\n     */\n    multiply: function (scalar) {\n      return new Point(this.x * scalar, this.y * scalar);\n    },\n\n    /**\n     * Multiplies this point by a value\n     * TODO: rename in scalarMultiplyEquals in 2.0\n     * @param {Number} scalar\n     * @return {fabric.Point} thisArg\n     * @chainable\n     */\n    multiplyEquals: function (scalar) {\n      this.x *= scalar;\n      this.y *= scalar;\n      return this;\n    },\n\n    /**\n     * Divides this point by a value and returns a new one\n     * TODO: rename in scalarDivide in 2.0\n     * @param {Number} scalar\n     * @return {fabric.Point}\n     */\n    divide: function (scalar) {\n      return new Point(this.x / scalar, this.y / scalar);\n    },\n\n    /**\n     * Divides this point by a value\n     * TODO: rename in scalarDivideEquals in 2.0\n     * @param {Number} scalar\n     * @return {fabric.Point} thisArg\n     * @chainable\n     */\n    divideEquals: function (scalar) {\n      this.x /= scalar;\n      this.y /= scalar;\n      return this;\n    },\n\n    /**\n     * Returns true if this point is equal to another one\n     * @param {fabric.Point} that\n     * @return {Boolean}\n     */\n    eq: function (that) {\n      return (this.x === that.x && this.y === that.y);\n    },\n\n    /**\n     * Returns true if this point is less than another one\n     * @param {fabric.Point} that\n     * @return {Boolean}\n     */\n    lt: function (that) {\n      return (this.x < that.x && this.y < that.y);\n    },\n\n    /**\n     * Returns true if this point is less than or equal to another one\n     * @param {fabric.Point} that\n     * @return {Boolean}\n     */\n    lte: function (that) {\n      return (this.x <= that.x && this.y <= that.y);\n    },\n\n    /**\n\n     * Returns true if this point is greater another one\n     * @param {fabric.Point} that\n     * @return {Boolean}\n     */\n    gt: function (that) {\n      return (this.x > that.x && this.y > that.y);\n    },\n\n    /**\n     * Returns true if this point is greater than or equal to another one\n     * @param {fabric.Point} that\n     * @return {Boolean}\n     */\n    gte: function (that) {\n      return (this.x >= that.x && this.y >= that.y);\n    },\n\n    /**\n     * Returns new point which is the result of linear interpolation with this one and another one\n     * @param {fabric.Point} that\n     * @param {Number} t , position of interpolation, between 0 and 1 default 0.5\n     * @return {fabric.Point}\n     */\n    lerp: function (that, t) {\n      if (typeof t === 'undefined') {\n        t = 0.5;\n      }\n      t = Math.max(Math.min(1, t), 0);\n      return new Point(this.x + (that.x - this.x) * t, this.y + (that.y - this.y) * t);\n    },\n\n    /**\n     * Returns distance from this point and another one\n     * @param {fabric.Point} that\n     * @return {Number}\n     */\n    distanceFrom: function (that) {\n      var dx = this.x - that.x,\n          dy = this.y - that.y;\n      return Math.sqrt(dx * dx + dy * dy);\n    },\n\n    /**\n     * Returns the point between this point and another one\n     * @param {fabric.Point} that\n     * @return {fabric.Point}\n     */\n    midPointFrom: function (that) {\n      return this.lerp(that);\n    },\n\n    /**\n     * Returns a new point which is the min of this and another one\n     * @param {fabric.Point} that\n     * @return {fabric.Point}\n     */\n    min: function (that) {\n      return new Point(Math.min(this.x, that.x), Math.min(this.y, that.y));\n    },\n\n    /**\n     * Returns a new point which is the max of this and another one\n     * @param {fabric.Point} that\n     * @return {fabric.Point}\n     */\n    max: function (that) {\n      return new Point(Math.max(this.x, that.x), Math.max(this.y, that.y));\n    },\n\n    /**\n     * Returns string representation of this point\n     * @return {String}\n     */\n    toString: function () {\n      return this.x + ',' + this.y;\n    },\n\n    /**\n     * Sets x/y of this point\n     * @param {Number} x\n     * @param {Number} y\n     * @chainable\n     */\n    setXY: function (x, y) {\n      this.x = x;\n      this.y = y;\n      return this;\n    },\n\n    /**\n     * Sets x of this point\n     * @param {Number} x\n     * @chainable\n     */\n    setX: function (x) {\n      this.x = x;\n      return this;\n    },\n\n    /**\n     * Sets y of this point\n     * @param {Number} y\n     * @chainable\n     */\n    setY: function (y) {\n      this.y = y;\n      return this;\n    },\n\n    /**\n     * Sets x/y of this point from another point\n     * @param {fabric.Point} that\n     * @chainable\n     */\n    setFromPoint: function (that) {\n      this.x = that.x;\n      this.y = that.y;\n      return this;\n    },\n\n    /**\n     * Swaps x/y of this point and another point\n     * @param {fabric.Point} that\n     */\n    swap: function (that) {\n      var x = this.x,\n          y = this.y;\n      this.x = that.x;\n      this.y = that.y;\n      that.x = x;\n      that.y = y;\n    },\n\n    /**\n     * return a cloned instance of the point\n     * @return {fabric.Point}\n     */\n    clone: function () {\n      return new Point(this.x, this.y);\n    }\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  /* Adaptation of work of Kevin Lindsey (kevin@kevlindev.com) */\n  var fabric = global.fabric || (global.fabric = { });\n\n  if (fabric.Intersection) {\n    fabric.warn('fabric.Intersection is already defined');\n    return;\n  }\n\n  /**\n   * Intersection class\n   * @class fabric.Intersection\n   * @memberOf fabric\n   * @constructor\n   */\n  function Intersection(status) {\n    this.status = status;\n    this.points = [];\n  }\n\n  fabric.Intersection = Intersection;\n\n  fabric.Intersection.prototype = /** @lends fabric.Intersection.prototype */ {\n\n    constructor: Intersection,\n\n    /**\n     * Appends a point to intersection\n     * @param {fabric.Point} point\n     * @return {fabric.Intersection} thisArg\n     * @chainable\n     */\n    appendPoint: function (point) {\n      this.points.push(point);\n      return this;\n    },\n\n    /**\n     * Appends points to intersection\n     * @param {Array} points\n     * @return {fabric.Intersection} thisArg\n     * @chainable\n     */\n    appendPoints: function (points) {\n      this.points = this.points.concat(points);\n      return this;\n    }\n  };\n\n  /**\n   * Checks if one line intersects another\n   * TODO: rename in intersectSegmentSegment\n   * @static\n   * @param {fabric.Point} a1\n   * @param {fabric.Point} a2\n   * @param {fabric.Point} b1\n   * @param {fabric.Point} b2\n   * @return {fabric.Intersection}\n   */\n  fabric.Intersection.intersectLineLine = function (a1, a2, b1, b2) {\n    var result,\n        uaT = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x),\n        ubT = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x),\n        uB = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n    if (uB !== 0) {\n      var ua = uaT / uB,\n          ub = ubT / uB;\n      if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\n        result = new Intersection('Intersection');\n        result.appendPoint(new fabric.Point(a1.x + ua * (a2.x - a1.x), a1.y + ua * (a2.y - a1.y)));\n      }\n      else {\n        result = new Intersection();\n      }\n    }\n    else {\n      if (uaT === 0 || ubT === 0) {\n        result = new Intersection('Coincident');\n      }\n      else {\n        result = new Intersection('Parallel');\n      }\n    }\n    return result;\n  };\n\n  /**\n   * Checks if line intersects polygon\n   * TODO: rename in intersectSegmentPolygon\n   * fix detection of coincident\n   * @static\n   * @param {fabric.Point} a1\n   * @param {fabric.Point} a2\n   * @param {Array} points\n   * @return {fabric.Intersection}\n   */\n  fabric.Intersection.intersectLinePolygon = function(a1, a2, points) {\n    var result = new Intersection(),\n        length = points.length,\n        b1, b2, inter, i;\n\n    for (i = 0; i < length; i++) {\n      b1 = points[i];\n      b2 = points[(i + 1) % length];\n      inter = Intersection.intersectLineLine(a1, a2, b1, b2);\n\n      result.appendPoints(inter.points);\n    }\n    if (result.points.length > 0) {\n      result.status = 'Intersection';\n    }\n    return result;\n  };\n\n  /**\n   * Checks if polygon intersects another polygon\n   * @static\n   * @param {Array} points1\n   * @param {Array} points2\n   * @return {fabric.Intersection}\n   */\n  fabric.Intersection.intersectPolygonPolygon = function (points1, points2) {\n    var result = new Intersection(),\n        length = points1.length, i;\n\n    for (i = 0; i < length; i++) {\n      var a1 = points1[i],\n          a2 = points1[(i + 1) % length],\n          inter = Intersection.intersectLinePolygon(a1, a2, points2);\n\n      result.appendPoints(inter.points);\n    }\n    if (result.points.length > 0) {\n      result.status = 'Intersection';\n    }\n    return result;\n  };\n\n  /**\n   * Checks if polygon intersects rectangle\n   * @static\n   * @param {Array} points\n   * @param {fabric.Point} r1\n   * @param {fabric.Point} r2\n   * @return {fabric.Intersection}\n   */\n  fabric.Intersection.intersectPolygonRectangle = function (points, r1, r2) {\n    var min = r1.min(r2),\n        max = r1.max(r2),\n        topRight = new fabric.Point(max.x, min.y),\n        bottomLeft = new fabric.Point(min.x, max.y),\n        inter1 = Intersection.intersectLinePolygon(min, topRight, points),\n        inter2 = Intersection.intersectLinePolygon(topRight, max, points),\n        inter3 = Intersection.intersectLinePolygon(max, bottomLeft, points),\n        inter4 = Intersection.intersectLinePolygon(bottomLeft, min, points),\n        result = new Intersection();\n\n    result.appendPoints(inter1.points);\n    result.appendPoints(inter2.points);\n    result.appendPoints(inter3.points);\n    result.appendPoints(inter4.points);\n\n    if (result.points.length > 0) {\n      result.status = 'Intersection';\n    }\n    return result;\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { });\n\n  if (fabric.Color) {\n    fabric.warn('fabric.Color is already defined.');\n    return;\n  }\n\n  /**\n   * Color class\n   * The purpose of {@link fabric.Color} is to abstract and encapsulate common color operations;\n   * {@link fabric.Color} is a constructor and creates instances of {@link fabric.Color} objects.\n   *\n   * @class fabric.Color\n   * @param {String} color optional in hex or rgb(a) or hsl format or from known color list\n   * @return {fabric.Color} thisArg\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-2/#colors}\n   */\n  function Color(color) {\n    if (!color) {\n      this.setSource([0, 0, 0, 1]);\n    }\n    else {\n      this._tryParsingColor(color);\n    }\n  }\n\n  fabric.Color = Color;\n\n  fabric.Color.prototype = /** @lends fabric.Color.prototype */ {\n\n    /**\n     * @private\n     * @param {String|Array} color Color value to parse\n     */\n    _tryParsingColor: function(color) {\n      var source;\n\n      if (color in Color.colorNameMap) {\n        color = Color.colorNameMap[color];\n      }\n\n      if (color === 'transparent') {\n        source = [255, 255, 255, 0];\n      }\n\n      if (!source) {\n        source = Color.sourceFromHex(color);\n      }\n      if (!source) {\n        source = Color.sourceFromRgb(color);\n      }\n      if (!source) {\n        source = Color.sourceFromHsl(color);\n      }\n      if (!source) {\n        //if color is not recognize let's make black as canvas does\n        source = [0, 0, 0, 1];\n      }\n      if (source) {\n        this.setSource(source);\n      }\n    },\n\n    /**\n     * Adapted from <a href=\"https://rawgithub.com/mjijackson/mjijackson.github.com/master/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript.html\">https://github.com/mjijackson</a>\n     * @private\n     * @param {Number} r Red color value\n     * @param {Number} g Green color value\n     * @param {Number} b Blue color value\n     * @return {Array} Hsl color\n     */\n    _rgbToHsl: function(r, g, b) {\n      r /= 255; g /= 255; b /= 255;\n\n      var h, s, l,\n          max = fabric.util.array.max([r, g, b]),\n          min = fabric.util.array.min([r, g, b]);\n\n      l = (max + min) / 2;\n\n      if (max === min) {\n        h = s = 0; // achromatic\n      }\n      else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n        switch (max) {\n          case r:\n            h = (g - b) / d + (g < b ? 6 : 0);\n            break;\n          case g:\n            h = (b - r) / d + 2;\n            break;\n          case b:\n            h = (r - g) / d + 4;\n            break;\n        }\n        h /= 6;\n      }\n\n      return [\n        Math.round(h * 360),\n        Math.round(s * 100),\n        Math.round(l * 100)\n      ];\n    },\n\n    /**\n     * Returns source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n     * @return {Array}\n     */\n    getSource: function() {\n      return this._source;\n    },\n\n    /**\n     * Sets source of this color (where source is an array representation; ex: [200, 200, 100, 1])\n     * @param {Array} source\n     */\n    setSource: function(source) {\n      this._source = source;\n    },\n\n    /**\n     * Returns color representation in RGB format\n     * @return {String} ex: rgb(0-255,0-255,0-255)\n     */\n    toRgb: function() {\n      var source = this.getSource();\n      return 'rgb(' + source[0] + ',' + source[1] + ',' + source[2] + ')';\n    },\n\n    /**\n     * Returns color representation in RGBA format\n     * @return {String} ex: rgba(0-255,0-255,0-255,0-1)\n     */\n    toRgba: function() {\n      var source = this.getSource();\n      return 'rgba(' + source[0] + ',' + source[1] + ',' + source[2] + ',' + source[3] + ')';\n    },\n\n    /**\n     * Returns color representation in HSL format\n     * @return {String} ex: hsl(0-360,0%-100%,0%-100%)\n     */\n    toHsl: function() {\n      var source = this.getSource(),\n          hsl = this._rgbToHsl(source[0], source[1], source[2]);\n\n      return 'hsl(' + hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%)';\n    },\n\n    /**\n     * Returns color representation in HSLA format\n     * @return {String} ex: hsla(0-360,0%-100%,0%-100%,0-1)\n     */\n    toHsla: function() {\n      var source = this.getSource(),\n          hsl = this._rgbToHsl(source[0], source[1], source[2]);\n\n      return 'hsla(' + hsl[0] + ',' + hsl[1] + '%,' + hsl[2] + '%,' + source[3] + ')';\n    },\n\n    /**\n     * Returns color representation in HEX format\n     * @return {String} ex: FF5555\n     */\n    toHex: function() {\n      var source = this.getSource(), r, g, b;\n\n      r = source[0].toString(16);\n      r = (r.length === 1) ? ('0' + r) : r;\n\n      g = source[1].toString(16);\n      g = (g.length === 1) ? ('0' + g) : g;\n\n      b = source[2].toString(16);\n      b = (b.length === 1) ? ('0' + b) : b;\n\n      return r.toUpperCase() + g.toUpperCase() + b.toUpperCase();\n    },\n\n    /**\n     * Returns color representation in HEXA format\n     * @return {String} ex: FF5555CC\n     */\n    toHexa: function() {\n      var source = this.getSource(), a;\n\n      a = Math.round(source[3] * 255);\n      a = a.toString(16);\n      a = (a.length === 1) ? ('0' + a) : a;\n\n      return this.toHex() + a.toUpperCase();\n    },\n\n    /**\n     * Gets value of alpha channel for this color\n     * @return {Number} 0-1\n     */\n    getAlpha: function() {\n      return this.getSource()[3];\n    },\n\n    /**\n     * Sets value of alpha channel for this color\n     * @param {Number} alpha Alpha value 0-1\n     * @return {fabric.Color} thisArg\n     */\n    setAlpha: function(alpha) {\n      var source = this.getSource();\n      source[3] = alpha;\n      this.setSource(source);\n      return this;\n    },\n\n    /**\n     * Transforms color to its grayscale representation\n     * @return {fabric.Color} thisArg\n     */\n    toGrayscale: function() {\n      var source = this.getSource(),\n          average = parseInt((source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0), 10),\n          currentAlpha = source[3];\n      this.setSource([average, average, average, currentAlpha]);\n      return this;\n    },\n\n    /**\n     * Transforms color to its black and white representation\n     * @param {Number} threshold\n     * @return {fabric.Color} thisArg\n     */\n    toBlackWhite: function(threshold) {\n      var source = this.getSource(),\n          average = (source[0] * 0.3 + source[1] * 0.59 + source[2] * 0.11).toFixed(0),\n          currentAlpha = source[3];\n\n      threshold = threshold || 127;\n\n      average = (Number(average) < Number(threshold)) ? 0 : 255;\n      this.setSource([average, average, average, currentAlpha]);\n      return this;\n    },\n\n    /**\n     * Overlays color with another color\n     * @param {String|fabric.Color} otherColor\n     * @return {fabric.Color} thisArg\n     */\n    overlayWith: function(otherColor) {\n      if (!(otherColor instanceof Color)) {\n        otherColor = new Color(otherColor);\n      }\n\n      var result = [],\n          alpha = this.getAlpha(),\n          otherAlpha = 0.5,\n          source = this.getSource(),\n          otherSource = otherColor.getSource(), i;\n\n      for (i = 0; i < 3; i++) {\n        result.push(Math.round((source[i] * (1 - otherAlpha)) + (otherSource[i] * otherAlpha)));\n      }\n\n      result[3] = alpha;\n      this.setSource(result);\n      return this;\n    }\n  };\n\n  /**\n   * Regex matching color in RGB or RGBA formats (ex: rgb(0, 0, 0), rgba(255, 100, 10, 0.5), rgba( 255 , 100 , 10 , 0.5 ), rgb(1,1,1), rgba(100%, 60%, 10%, 0.5))\n   * @static\n   * @field\n   * @memberOf fabric.Color\n   */\n  // eslint-disable-next-line max-len\n  fabric.Color.reRGBa = /^rgba?\\(\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*,\\s*(\\d{1,3}(?:\\.\\d+)?\\%?)\\s*(?:\\s*,\\s*((?:\\d*\\.?\\d+)?)\\s*)?\\)$/i;\n\n  /**\n   * Regex matching color in HSL or HSLA formats (ex: hsl(200, 80%, 10%), hsla(300, 50%, 80%, 0.5), hsla( 300 , 50% , 80% , 0.5 ))\n   * @static\n   * @field\n   * @memberOf fabric.Color\n   */\n  fabric.Color.reHSLa = /^hsla?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3}\\%)\\s*,\\s*(\\d{1,3}\\%)\\s*(?:\\s*,\\s*(\\d+(?:\\.\\d+)?)\\s*)?\\)$/i;\n\n  /**\n   * Regex matching color in HEX format (ex: #FF5544CC, #FF5555, 010155, aff)\n   * @static\n   * @field\n   * @memberOf fabric.Color\n   */\n  fabric.Color.reHex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n\n  /**\n   * Map of the 148 color names with HEX code\n   * @static\n   * @field\n   * @memberOf fabric.Color\n   * @see: https://www.w3.org/TR/css3-color/#svg-color\n   */\n  fabric.Color.colorNameMap = {\n    aliceblue:            '#F0F8FF',\n    antiquewhite:         '#FAEBD7',\n    aqua:                 '#00FFFF',\n    aquamarine:           '#7FFFD4',\n    azure:                '#F0FFFF',\n    beige:                '#F5F5DC',\n    bisque:               '#FFE4C4',\n    black:                '#000000',\n    blanchedalmond:       '#FFEBCD',\n    blue:                 '#0000FF',\n    blueviolet:           '#8A2BE2',\n    brown:                '#A52A2A',\n    burlywood:            '#DEB887',\n    cadetblue:            '#5F9EA0',\n    chartreuse:           '#7FFF00',\n    chocolate:            '#D2691E',\n    coral:                '#FF7F50',\n    cornflowerblue:       '#6495ED',\n    cornsilk:             '#FFF8DC',\n    crimson:              '#DC143C',\n    cyan:                 '#00FFFF',\n    darkblue:             '#00008B',\n    darkcyan:             '#008B8B',\n    darkgoldenrod:        '#B8860B',\n    darkgray:             '#A9A9A9',\n    darkgrey:             '#A9A9A9',\n    darkgreen:            '#006400',\n    darkkhaki:            '#BDB76B',\n    darkmagenta:          '#8B008B',\n    darkolivegreen:       '#556B2F',\n    darkorange:           '#FF8C00',\n    darkorchid:           '#9932CC',\n    darkred:              '#8B0000',\n    darksalmon:           '#E9967A',\n    darkseagreen:         '#8FBC8F',\n    darkslateblue:        '#483D8B',\n    darkslategray:        '#2F4F4F',\n    darkslategrey:        '#2F4F4F',\n    darkturquoise:        '#00CED1',\n    darkviolet:           '#9400D3',\n    deeppink:             '#FF1493',\n    deepskyblue:          '#00BFFF',\n    dimgray:              '#696969',\n    dimgrey:              '#696969',\n    dodgerblue:           '#1E90FF',\n    firebrick:            '#B22222',\n    floralwhite:          '#FFFAF0',\n    forestgreen:          '#228B22',\n    fuchsia:              '#FF00FF',\n    gainsboro:            '#DCDCDC',\n    ghostwhite:           '#F8F8FF',\n    gold:                 '#FFD700',\n    goldenrod:            '#DAA520',\n    gray:                 '#808080',\n    grey:                 '#808080',\n    green:                '#008000',\n    greenyellow:          '#ADFF2F',\n    honeydew:             '#F0FFF0',\n    hotpink:              '#FF69B4',\n    indianred:            '#CD5C5C',\n    indigo:               '#4B0082',\n    ivory:                '#FFFFF0',\n    khaki:                '#F0E68C',\n    lavender:             '#E6E6FA',\n    lavenderblush:        '#FFF0F5',\n    lawngreen:            '#7CFC00',\n    lemonchiffon:         '#FFFACD',\n    lightblue:            '#ADD8E6',\n    lightcoral:           '#F08080',\n    lightcyan:            '#E0FFFF',\n    lightgoldenrodyellow: '#FAFAD2',\n    lightgray:            '#D3D3D3',\n    lightgrey:            '#D3D3D3',\n    lightgreen:           '#90EE90',\n    lightpink:            '#FFB6C1',\n    lightsalmon:          '#FFA07A',\n    lightseagreen:        '#20B2AA',\n    lightskyblue:         '#87CEFA',\n    lightslategray:       '#778899',\n    lightslategrey:       '#778899',\n    lightsteelblue:       '#B0C4DE',\n    lightyellow:          '#FFFFE0',\n    lime:                 '#00FF00',\n    limegreen:            '#32CD32',\n    linen:                '#FAF0E6',\n    magenta:              '#FF00FF',\n    maroon:               '#800000',\n    mediumaquamarine:     '#66CDAA',\n    mediumblue:           '#0000CD',\n    mediumorchid:         '#BA55D3',\n    mediumpurple:         '#9370DB',\n    mediumseagreen:       '#3CB371',\n    mediumslateblue:      '#7B68EE',\n    mediumspringgreen:    '#00FA9A',\n    mediumturquoise:      '#48D1CC',\n    mediumvioletred:      '#C71585',\n    midnightblue:         '#191970',\n    mintcream:            '#F5FFFA',\n    mistyrose:            '#FFE4E1',\n    moccasin:             '#FFE4B5',\n    navajowhite:          '#FFDEAD',\n    navy:                 '#000080',\n    oldlace:              '#FDF5E6',\n    olive:                '#808000',\n    olivedrab:            '#6B8E23',\n    orange:               '#FFA500',\n    orangered:            '#FF4500',\n    orchid:               '#DA70D6',\n    palegoldenrod:        '#EEE8AA',\n    palegreen:            '#98FB98',\n    paleturquoise:        '#AFEEEE',\n    palevioletred:        '#DB7093',\n    papayawhip:           '#FFEFD5',\n    peachpuff:            '#FFDAB9',\n    peru:                 '#CD853F',\n    pink:                 '#FFC0CB',\n    plum:                 '#DDA0DD',\n    powderblue:           '#B0E0E6',\n    purple:               '#800080',\n    rebeccapurple:        '#663399',\n    red:                  '#FF0000',\n    rosybrown:            '#BC8F8F',\n    royalblue:            '#4169E1',\n    saddlebrown:          '#8B4513',\n    salmon:               '#FA8072',\n    sandybrown:           '#F4A460',\n    seagreen:             '#2E8B57',\n    seashell:             '#FFF5EE',\n    sienna:               '#A0522D',\n    silver:               '#C0C0C0',\n    skyblue:              '#87CEEB',\n    slateblue:            '#6A5ACD',\n    slategray:            '#708090',\n    slategrey:            '#708090',\n    snow:                 '#FFFAFA',\n    springgreen:          '#00FF7F',\n    steelblue:            '#4682B4',\n    tan:                  '#D2B48C',\n    teal:                 '#008080',\n    thistle:              '#D8BFD8',\n    tomato:               '#FF6347',\n    turquoise:            '#40E0D0',\n    violet:               '#EE82EE',\n    wheat:                '#F5DEB3',\n    white:                '#FFFFFF',\n    whitesmoke:           '#F5F5F5',\n    yellow:               '#FFFF00',\n    yellowgreen:          '#9ACD32'\n  };\n\n  /**\n   * @private\n   * @param {Number} p\n   * @param {Number} q\n   * @param {Number} t\n   * @return {Number}\n   */\n  function hue2rgb(p, q, t) {\n    if (t < 0) {\n      t += 1;\n    }\n    if (t > 1) {\n      t -= 1;\n    }\n    if (t < 1 / 6) {\n      return p + (q - p) * 6 * t;\n    }\n    if (t < 1 / 2) {\n      return q;\n    }\n    if (t < 2 / 3) {\n      return p + (q - p) * (2 / 3 - t) * 6;\n    }\n    return p;\n  }\n\n  /**\n   * Returns new color object, when given a color in RGB format\n   * @memberOf fabric.Color\n   * @param {String} color Color value ex: rgb(0-255,0-255,0-255)\n   * @return {fabric.Color}\n   */\n  fabric.Color.fromRgb = function(color) {\n    return Color.fromSource(Color.sourceFromRgb(color));\n  };\n\n  /**\n   * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in RGB or RGBA format\n   * @memberOf fabric.Color\n   * @param {String} color Color value ex: rgb(0-255,0-255,0-255), rgb(0%-100%,0%-100%,0%-100%)\n   * @return {Array} source\n   */\n  fabric.Color.sourceFromRgb = function(color) {\n    var match = color.match(Color.reRGBa);\n    if (match) {\n      var r = parseInt(match[1], 10) / (/%$/.test(match[1]) ? 100 : 1) * (/%$/.test(match[1]) ? 255 : 1),\n          g = parseInt(match[2], 10) / (/%$/.test(match[2]) ? 100 : 1) * (/%$/.test(match[2]) ? 255 : 1),\n          b = parseInt(match[3], 10) / (/%$/.test(match[3]) ? 100 : 1) * (/%$/.test(match[3]) ? 255 : 1);\n\n      return [\n        parseInt(r, 10),\n        parseInt(g, 10),\n        parseInt(b, 10),\n        match[4] ? parseFloat(match[4]) : 1\n      ];\n    }\n  };\n\n  /**\n   * Returns new color object, when given a color in RGBA format\n   * @static\n   * @function\n   * @memberOf fabric.Color\n   * @param {String} color\n   * @return {fabric.Color}\n   */\n  fabric.Color.fromRgba = Color.fromRgb;\n\n  /**\n   * Returns new color object, when given a color in HSL format\n   * @param {String} color Color value ex: hsl(0-260,0%-100%,0%-100%)\n   * @memberOf fabric.Color\n   * @return {fabric.Color}\n   */\n  fabric.Color.fromHsl = function(color) {\n    return Color.fromSource(Color.sourceFromHsl(color));\n  };\n\n  /**\n   * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HSL or HSLA format.\n   * Adapted from <a href=\"https://rawgithub.com/mjijackson/mjijackson.github.com/master/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript.html\">https://github.com/mjijackson</a>\n   * @memberOf fabric.Color\n   * @param {String} color Color value ex: hsl(0-360,0%-100%,0%-100%) or hsla(0-360,0%-100%,0%-100%, 0-1)\n   * @return {Array} source\n   * @see http://http://www.w3.org/TR/css3-color/#hsl-color\n   */\n  fabric.Color.sourceFromHsl = function(color) {\n    var match = color.match(Color.reHSLa);\n    if (!match) {\n      return;\n    }\n\n    var h = (((parseFloat(match[1]) % 360) + 360) % 360) / 360,\n        s = parseFloat(match[2]) / (/%$/.test(match[2]) ? 100 : 1),\n        l = parseFloat(match[3]) / (/%$/.test(match[3]) ? 100 : 1),\n        r, g, b;\n\n    if (s === 0) {\n      r = g = b = l;\n    }\n    else {\n      var q = l <= 0.5 ? l * (s + 1) : l + s - l * s,\n          p = l * 2 - q;\n\n      r = hue2rgb(p, q, h + 1 / 3);\n      g = hue2rgb(p, q, h);\n      b = hue2rgb(p, q, h - 1 / 3);\n    }\n\n    return [\n      Math.round(r * 255),\n      Math.round(g * 255),\n      Math.round(b * 255),\n      match[4] ? parseFloat(match[4]) : 1\n    ];\n  };\n\n  /**\n   * Returns new color object, when given a color in HSLA format\n   * @static\n   * @function\n   * @memberOf fabric.Color\n   * @param {String} color\n   * @return {fabric.Color}\n   */\n  fabric.Color.fromHsla = Color.fromHsl;\n\n  /**\n   * Returns new color object, when given a color in HEX format\n   * @static\n   * @memberOf fabric.Color\n   * @param {String} color Color value ex: FF5555\n   * @return {fabric.Color}\n   */\n  fabric.Color.fromHex = function(color) {\n    return Color.fromSource(Color.sourceFromHex(color));\n  };\n\n  /**\n   * Returns array representation (ex: [100, 100, 200, 1]) of a color that's in HEX format\n   * @static\n   * @memberOf fabric.Color\n   * @param {String} color ex: FF5555 or FF5544CC (RGBa)\n   * @return {Array} source\n   */\n  fabric.Color.sourceFromHex = function(color) {\n    if (color.match(Color.reHex)) {\n      var value = color.slice(color.indexOf('#') + 1),\n          isShortNotation = (value.length === 3 || value.length === 4),\n          isRGBa = (value.length === 8 || value.length === 4),\n          r = isShortNotation ? (value.charAt(0) + value.charAt(0)) : value.substring(0, 2),\n          g = isShortNotation ? (value.charAt(1) + value.charAt(1)) : value.substring(2, 4),\n          b = isShortNotation ? (value.charAt(2) + value.charAt(2)) : value.substring(4, 6),\n          a = isRGBa ? (isShortNotation ? (value.charAt(3) + value.charAt(3)) : value.substring(6, 8)) : 'FF';\n\n      return [\n        parseInt(r, 16),\n        parseInt(g, 16),\n        parseInt(b, 16),\n        parseFloat((parseInt(a, 16) / 255).toFixed(2))\n      ];\n    }\n  };\n\n  /**\n   * Returns new color object, when given color in array representation (ex: [200, 100, 100, 0.5])\n   * @static\n   * @memberOf fabric.Color\n   * @param {Array} source\n   * @return {fabric.Color}\n   */\n  fabric.Color.fromSource = function(source) {\n    var oColor = new Color();\n    oColor.setSource(source);\n    return oColor;\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      scaleMap = ['e', 'se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'],\n      skewMap = ['ns', 'nesw', 'ew', 'nwse'],\n      controls = {},\n      LEFT = 'left', TOP = 'top', RIGHT = 'right', BOTTOM = 'bottom', CENTER = 'center',\n      opposite = {\n        top: BOTTOM,\n        bottom: TOP,\n        left: RIGHT,\n        right: LEFT,\n        center: CENTER,\n      }, radiansToDegrees = fabric.util.radiansToDegrees,\n      sign = (Math.sign || function(x) { return ((x > 0) - (x < 0)) || +x; });\n\n  /**\n   * Combine control position and object angle to find the control direction compared\n   * to the object center.\n   * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n   * @param {fabric.Control} control the control class\n   * @return {Number} 0 - 7 a quadrant number\n   */\n  function findCornerQuadrant(fabricObject, control) {\n    var cornerAngle = fabricObject.angle + radiansToDegrees(Math.atan2(control.y, control.x)) + 360;\n    return Math.round((cornerAngle % 360) / 45);\n  }\n\n  function fireEvent(eventName, options) {\n    var target = options.transform.target,\n        canvas = target.canvas,\n        canvasOptions = fabric.util.object.clone(options);\n    canvasOptions.target = target;\n    canvas && canvas.fire('object:' + eventName, canvasOptions);\n    target.fire(eventName, options);\n  }\n\n  /**\n   * Inspect event and fabricObject properties to understand if the scaling action\n   * @param {Event} eventData from the user action\n   * @param {fabric.Object} fabricObject the fabric object about to scale\n   * @return {Boolean} true if scale is proportional\n   */\n  function scaleIsProportional(eventData, fabricObject) {\n    var canvas = fabricObject.canvas, uniScaleKey = canvas.uniScaleKey,\n        uniformIsToggled = eventData[uniScaleKey];\n    return (canvas.uniformScaling && !uniformIsToggled) ||\n    (!canvas.uniformScaling && uniformIsToggled);\n  }\n\n  /**\n   * Checks if transform is centered\n   * @param {Object} transform transform data\n   * @return {Boolean} true if transform is centered\n   */\n  function isTransformCentered(transform) {\n    return transform.originX === CENTER && transform.originY === CENTER;\n  }\n\n  /**\n   * Inspect fabricObject to understand if the current scaling action is allowed\n   * @param {fabric.Object} fabricObject the fabric object about to scale\n   * @param {String} by 'x' or 'y' or ''\n   * @param {Boolean} scaleProportionally true if we are trying to scale proportionally\n   * @return {Boolean} true if scaling is not allowed at current conditions\n   */\n  function scalingIsForbidden(fabricObject, by, scaleProportionally) {\n    var lockX = fabricObject.lockScalingX, lockY = fabricObject.lockScalingY;\n    if (lockX && lockY) {\n      return true;\n    }\n    if (!by && (lockX || lockY) && scaleProportionally) {\n      return true;\n    }\n    if (lockX && by === 'x') {\n      return true;\n    }\n    if (lockY && by === 'y') {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * return the correct cursor style for the scale action\n   * @param {Event} eventData the javascript event that is causing the scale\n   * @param {fabric.Control} control the control that is interested in the action\n   * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n   * @return {String} a valid css string for the cursor\n   */\n  function scaleCursorStyleHandler(eventData, control, fabricObject) {\n    var notAllowed = 'not-allowed',\n        scaleProportionally = scaleIsProportional(eventData, fabricObject),\n        by = '';\n    if (control.x !== 0 && control.y === 0) {\n      by = 'x';\n    }\n    else if (control.x === 0 && control.y !== 0) {\n      by = 'y';\n    }\n    if (scalingIsForbidden(fabricObject, by, scaleProportionally)) {\n      return notAllowed;\n    }\n    var n = findCornerQuadrant(fabricObject, control);\n    return scaleMap[n] + '-resize';\n  }\n\n  /**\n   * return the correct cursor style for the skew action\n   * @param {Event} eventData the javascript event that is causing the scale\n   * @param {fabric.Control} control the control that is interested in the action\n   * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n   * @return {String} a valid css string for the cursor\n   */\n  function skewCursorStyleHandler(eventData, control, fabricObject) {\n    var notAllowed = 'not-allowed';\n    if (control.x !== 0 && fabricObject.lockSkewingY) {\n      return notAllowed;\n    }\n    if (control.y !== 0 && fabricObject.lockSkewingX) {\n      return notAllowed;\n    }\n    var n = findCornerQuadrant(fabricObject, control) % 4;\n    return skewMap[n] + '-resize';\n  }\n\n  /**\n   * Combine skew and scale style handlers to cover fabric standard use case\n   * @param {Event} eventData the javascript event that is causing the scale\n   * @param {fabric.Control} control the control that is interested in the action\n   * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n   * @return {String} a valid css string for the cursor\n   */\n  function scaleSkewCursorStyleHandler(eventData, control, fabricObject) {\n    if (eventData[fabricObject.canvas.altActionKey]) {\n      return controls.skewCursorStyleHandler(eventData, control, fabricObject);\n    }\n    return controls.scaleCursorStyleHandler(eventData, control, fabricObject);\n  }\n\n  /**\n   * Inspect event, control and fabricObject to return the correct action name\n   * @param {Event} eventData the javascript event that is causing the scale\n   * @param {fabric.Control} control the control that is interested in the action\n   * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n   * @return {String} an action name\n   */\n  function scaleOrSkewActionName(eventData, control, fabricObject) {\n    var isAlternative = eventData[fabricObject.canvas.altActionKey];\n    if (control.x === 0) {\n      // then is scaleY or skewX\n      return isAlternative ? 'skewX' : 'scaleY';\n    }\n    if (control.y === 0) {\n      // then is scaleY or skewX\n      return isAlternative ? 'skewY' : 'scaleX';\n    }\n  }\n\n  /**\n   * Find the correct style for the control that is used for rotation.\n   * this function is very simple and it just take care of not-allowed or standard cursor\n   * @param {Event} eventData the javascript event that is causing the scale\n   * @param {fabric.Control} control the control that is interested in the action\n   * @param {fabric.Object} fabricObject the fabric object that is interested in the action\n   * @return {String} a valid css string for the cursor\n   */\n  function rotationStyleHandler(eventData, control, fabricObject) {\n    if (fabricObject.lockRotation) {\n      return 'not-allowed';\n    }\n    return control.cursorStyle;\n  }\n\n  function commonEventInfo(eventData, transform, x, y) {\n    return {\n      e: eventData,\n      transform: transform,\n      pointer: {\n        x: x,\n        y: y,\n      }\n    };\n  }\n\n  /**\n   * Wrap an action handler with saving/restoring object position on the transform.\n   * this is the code that permits to objects to keep their position while transforming.\n   * @param {Function} actionHandler the function to wrap\n   * @return {Function} a function with an action handler signature\n   */\n  function wrapWithFixedAnchor(actionHandler) {\n    return function(eventData, transform, x, y) {\n      var target = transform.target, centerPoint = target.getCenterPoint(),\n          constraint = target.translateToOriginPoint(centerPoint, transform.originX, transform.originY),\n          actionPerformed = actionHandler(eventData, transform, x, y);\n      target.setPositionByOrigin(constraint, transform.originX, transform.originY);\n      return actionPerformed;\n    };\n  }\n\n  /**\n   * Wrap an action handler with firing an event if the action is performed\n   * @param {Function} actionHandler the function to wrap\n   * @return {Function} a function with an action handler signature\n   */\n  function wrapWithFireEvent(eventName, actionHandler) {\n    return function(eventData, transform, x, y) {\n      var actionPerformed = actionHandler(eventData, transform, x, y);\n      if (actionPerformed) {\n        fireEvent(eventName, commonEventInfo(eventData, transform, x, y));\n      }\n      return actionPerformed;\n    };\n  }\n\n  /**\n   * Transforms a point described by x and y in a distance from the top left corner of the object\n   * bounding box.\n   * @param {Object} transform\n   * @param {String} originX\n   * @param {String} originY\n   * @param {number} x\n   * @param {number} y\n   * @return {Fabric.Point} the normalized point\n   */\n  function getLocalPoint(transform, originX, originY, x, y) {\n    var target = transform.target,\n        control = target.controls[transform.corner],\n        zoom = target.canvas.getZoom(),\n        padding = target.padding / zoom,\n        localPoint = target.toLocalPoint(new fabric.Point(x, y), originX, originY);\n    if (localPoint.x >= padding) {\n      localPoint.x -= padding;\n    }\n    if (localPoint.x <= -padding) {\n      localPoint.x += padding;\n    }\n    if (localPoint.y >= padding) {\n      localPoint.y -= padding;\n    }\n    if (localPoint.y <= padding) {\n      localPoint.y += padding;\n    }\n    localPoint.x -= control.offsetX;\n    localPoint.y -= control.offsetY;\n    return localPoint;\n  }\n\n  /**\n   * Detect if the fabric object is flipped on one side.\n   * @param {fabric.Object} target\n   * @return {Boolean} true if one flip, but not two.\n   */\n  function targetHasOneFlip(target) {\n    return target.flipX !== target.flipY;\n  }\n\n  /**\n   * Utility function to compensate the scale factor when skew is applied on both axes\n   * @private\n   */\n  function compensateScaleForSkew(target, oppositeSkew, scaleToCompensate, axis, reference) {\n    if (target[oppositeSkew] !== 0) {\n      var newDim = target._getTransformedDimensions()[axis];\n      var newValue = reference / newDim * target[scaleToCompensate];\n      target.set(scaleToCompensate, newValue);\n    }\n  }\n\n  /**\n   * Action handler for skewing on the X axis\n   * @private\n   */\n  function skewObjectX(eventData, transform, x, y) {\n    var target = transform.target,\n        // find how big the object would be, if there was no skewX. takes in account scaling\n        dimNoSkew = target._getTransformedDimensions(0, target.skewY),\n        localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n        // the mouse is in the center of the object, and we want it to stay there.\n        // so the object will grow twice as much as the mouse.\n        // this makes the skew growth to localPoint * 2 - dimNoSkew.\n        totalSkewSize = Math.abs(localPoint.x * 2) - dimNoSkew.x,\n        currentSkew = target.skewX, newSkew;\n    if (totalSkewSize < 2) {\n      // let's make it easy to go back to position 0.\n      newSkew = 0;\n    }\n    else {\n      newSkew = radiansToDegrees(\n        Math.atan2((totalSkewSize / target.scaleX), (dimNoSkew.y / target.scaleY))\n      );\n      // now we have to find the sign of the skew.\n      // it mostly depend on the origin of transformation.\n      if (transform.originX === LEFT && transform.originY === BOTTOM) {\n        newSkew = -newSkew;\n      }\n      if (transform.originX === RIGHT && transform.originY === TOP) {\n        newSkew = -newSkew;\n      }\n      if (targetHasOneFlip(target)) {\n        newSkew = -newSkew;\n      }\n    }\n    var hasSkewed = currentSkew !== newSkew;\n    if (hasSkewed) {\n      var dimBeforeSkewing = target._getTransformedDimensions().y;\n      target.set('skewX', newSkew);\n      compensateScaleForSkew(target, 'skewY', 'scaleY', 'y', dimBeforeSkewing);\n    }\n    return hasSkewed;\n  }\n\n  /**\n   * Action handler for skewing on the Y axis\n   * @private\n   */\n  function skewObjectY(eventData, transform, x, y) {\n    var target = transform.target,\n        // find how big the object would be, if there was no skewX. takes in account scaling\n        dimNoSkew = target._getTransformedDimensions(target.skewX, 0),\n        localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n        // the mouse is in the center of the object, and we want it to stay there.\n        // so the object will grow twice as much as the mouse.\n        // this makes the skew growth to localPoint * 2 - dimNoSkew.\n        totalSkewSize = Math.abs(localPoint.y * 2) - dimNoSkew.y,\n        currentSkew = target.skewY, newSkew;\n    if (totalSkewSize < 2) {\n      // let's make it easy to go back to position 0.\n      newSkew = 0;\n    }\n    else {\n      newSkew = radiansToDegrees(\n        Math.atan2((totalSkewSize / target.scaleY), (dimNoSkew.x / target.scaleX))\n      );\n      // now we have to find the sign of the skew.\n      // it mostly depend on the origin of transformation.\n      if (transform.originX === LEFT && transform.originY === BOTTOM) {\n        newSkew = -newSkew;\n      }\n      if (transform.originX === RIGHT && transform.originY === TOP) {\n        newSkew = -newSkew;\n      }\n      if (targetHasOneFlip(target)) {\n        newSkew = -newSkew;\n      }\n    }\n    var hasSkewed = currentSkew !== newSkew;\n    if (hasSkewed) {\n      var dimBeforeSkewing = target._getTransformedDimensions().x;\n      target.set('skewY', newSkew);\n      compensateScaleForSkew(target, 'skewX', 'scaleX', 'x', dimBeforeSkewing);\n    }\n    return hasSkewed;\n  }\n\n  /**\n   * Wrapped Action handler for skewing on the Y axis, takes care of the\n   * skew direction and determine the correct transform origin for the anchor point\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @return {Boolean} true if some change happened\n   */\n  function skewHandlerX(eventData, transform, x, y) {\n    // step1 figure out and change transform origin.\n    // if skewX > 0 and originY bottom we anchor on right\n    // if skewX > 0 and originY top we anchor on left\n    // if skewX < 0 and originY bottom we anchor on left\n    // if skewX < 0 and originY top we anchor on right\n    // if skewX is 0, we look for mouse position to understand where are we going.\n    var target = transform.target, currentSkew = target.skewX, originX, originY = transform.originY;\n    if (target.lockSkewingX) {\n      return false;\n    }\n    if (currentSkew === 0) {\n      var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);\n      if (localPointFromCenter.x > 0) {\n        // we are pulling right, anchor left;\n        originX = LEFT;\n      }\n      else {\n        // we are pulling right, anchor right\n        originX = RIGHT;\n      }\n    }\n    else {\n      if (currentSkew > 0) {\n        originX = originY === TOP ? LEFT : RIGHT;\n      }\n      if (currentSkew < 0) {\n        originX = originY === TOP ? RIGHT : LEFT;\n      }\n      // is the object flipped on one side only? swap the origin.\n      if (targetHasOneFlip(target)) {\n        originX = originX === LEFT ? RIGHT : LEFT;\n      }\n    }\n\n    // once we have the origin, we find the anchor point\n    transform.originX = originX;\n    var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectX));\n    return finalHandler(eventData, transform, x, y);\n  }\n\n  /**\n   * Wrapped Action handler for skewing on the Y axis, takes care of the\n   * skew direction and determine the correct transform origin for the anchor point\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @return {Boolean} true if some change happened\n   */\n  function skewHandlerY(eventData, transform, x, y) {\n    // step1 figure out and change transform origin.\n    // if skewY > 0 and originX left we anchor on top\n    // if skewY > 0 and originX right we anchor on bottom\n    // if skewY < 0 and originX left we anchor on bottom\n    // if skewY < 0 and originX right we anchor on top\n    // if skewY is 0, we look for mouse position to understand where are we going.\n    var target = transform.target, currentSkew = target.skewY, originY, originX = transform.originX;\n    if (target.lockSkewingY) {\n      return false;\n    }\n    if (currentSkew === 0) {\n      var localPointFromCenter = getLocalPoint(transform, CENTER, CENTER, x, y);\n      if (localPointFromCenter.y > 0) {\n        // we are pulling down, anchor up;\n        originY = TOP;\n      }\n      else {\n        // we are pulling up, anchor down\n        originY = BOTTOM;\n      }\n    }\n    else {\n      if (currentSkew > 0) {\n        originY = originX === LEFT ? TOP : BOTTOM;\n      }\n      if (currentSkew < 0) {\n        originY = originX === LEFT ? BOTTOM : TOP;\n      }\n      // is the object flipped on one side only? swap the origin.\n      if (targetHasOneFlip(target)) {\n        originY = originY === TOP ? BOTTOM : TOP;\n      }\n    }\n\n    // once we have the origin, we find the anchor point\n    transform.originY = originY;\n    var finalHandler = wrapWithFireEvent('skewing', wrapWithFixedAnchor(skewObjectY));\n    return finalHandler(eventData, transform, x, y);\n  }\n\n  /**\n   * Action handler for rotation and snapping, without anchor point.\n   * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @return {Boolean} true if some change happened\n   * @private\n   */\n  function rotationWithSnapping(eventData, transform, x, y) {\n    var t = transform,\n        target = t.target,\n        pivotPoint = target.translateToOriginPoint(target.getCenterPoint(), t.originX, t.originY);\n\n    if (target.lockRotation) {\n      return false;\n    }\n\n    var lastAngle = Math.atan2(t.ey - pivotPoint.y, t.ex - pivotPoint.x),\n        curAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x),\n        angle = radiansToDegrees(curAngle - lastAngle + t.theta),\n        hasRotated = true;\n\n    if (target.snapAngle > 0) {\n      var snapAngle  = target.snapAngle,\n          snapThreshold  = target.snapThreshold || snapAngle,\n          rightAngleLocked = Math.ceil(angle / snapAngle) * snapAngle,\n          leftAngleLocked = Math.floor(angle / snapAngle) * snapAngle;\n\n      if (Math.abs(angle - leftAngleLocked) < snapThreshold) {\n        angle = leftAngleLocked;\n      }\n      else if (Math.abs(angle - rightAngleLocked) < snapThreshold) {\n        angle = rightAngleLocked;\n      }\n    }\n\n    // normalize angle to positive value\n    if (angle < 0) {\n      angle = 360 + angle;\n    }\n    angle %= 360;\n\n    hasRotated = target.angle !== angle;\n    target.angle = angle;\n    return hasRotated;\n  }\n\n  /**\n   * Basic scaling logic, reused with different constrain for scaling X,Y, freely or equally.\n   * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @param {Object} options additional information for scaling\n   * @param {String} options.by 'x', 'y', 'equally' or '' to indicate type of scaling\n   * @return {Boolean} true if some change happened\n   * @private\n   */\n  function scaleObject(eventData, transform, x, y, options) {\n    options = options || {};\n    var target = transform.target,\n        lockScalingX = target.lockScalingX, lockScalingY = target.lockScalingY,\n        by = options.by, newPoint, scaleX, scaleY, dim,\n        scaleProportionally = scaleIsProportional(eventData, target),\n        forbidScaling = scalingIsForbidden(target, by, scaleProportionally),\n        signX, signY, gestureScale = transform.gestureScale;\n\n    if (forbidScaling) {\n      return false;\n    }\n    if (gestureScale) {\n      scaleX = transform.scaleX * gestureScale;\n      scaleY = transform.scaleY * gestureScale;\n    }\n    else {\n      newPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y);\n      // use of sign: We use sign to detect change of direction of an action. sign usually change when\n      // we cross the origin point with the mouse. So a scale flip for example. There is an issue when scaling\n      // by center and scaling using one middle control ( default: mr, mt, ml, mb), the mouse movement can easily\n      // cross many time the origin point and flip the object. so we need a way to filter out the noise.\n      // This ternary here should be ok to filter out X scaling when we want Y only and vice versa.\n      signX = by !== 'y' ? sign(newPoint.x) : 1;\n      signY = by !== 'x' ? sign(newPoint.y) : 1;\n      if (!transform.signX) {\n        transform.signX = signX;\n      }\n      if (!transform.signY) {\n        transform.signY = signY;\n      }\n\n      if (target.lockScalingFlip &&\n        (transform.signX !== signX || transform.signY !== signY)\n      ) {\n        return false;\n      }\n\n      dim = target._getTransformedDimensions();\n      // missing detection of flip and logic to switch the origin\n      if (scaleProportionally && !by) {\n        // uniform scaling\n        var distance = Math.abs(newPoint.x) + Math.abs(newPoint.y),\n            original = transform.original,\n            originalDistance = Math.abs(dim.x * original.scaleX / target.scaleX) +\n              Math.abs(dim.y * original.scaleY / target.scaleY),\n            scale = distance / originalDistance;\n        scaleX = original.scaleX * scale;\n        scaleY = original.scaleY * scale;\n      }\n      else {\n        scaleX = Math.abs(newPoint.x * target.scaleX / dim.x);\n        scaleY = Math.abs(newPoint.y * target.scaleY / dim.y);\n      }\n      // if we are scaling by center, we need to double the scale\n      if (isTransformCentered(transform)) {\n        scaleX *= 2;\n        scaleY *= 2;\n      }\n      if (transform.signX !== signX && by !== 'y') {\n        transform.originX = opposite[transform.originX];\n        scaleX *= -1;\n        transform.signX = signX;\n      }\n      if (transform.signY !== signY && by !== 'x') {\n        transform.originY = opposite[transform.originY];\n        scaleY *= -1;\n        transform.signY = signY;\n      }\n    }\n    // minScale is taken are in the setter.\n    var oldScaleX = target.scaleX, oldScaleY = target.scaleY;\n    if (!by) {\n      !lockScalingX && target.set('scaleX', scaleX);\n      !lockScalingY && target.set('scaleY', scaleY);\n    }\n    else {\n      // forbidden cases already handled on top here.\n      by === 'x' && target.set('scaleX', scaleX);\n      by === 'y' && target.set('scaleY', scaleY);\n    }\n    return oldScaleX !== target.scaleX || oldScaleY !== target.scaleY;\n  }\n\n  /**\n   * Generic scaling logic, to scale from corners either equally or freely.\n   * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @return {Boolean} true if some change happened\n   */\n  function scaleObjectFromCorner(eventData, transform, x, y) {\n    return scaleObject(eventData, transform, x, y);\n  }\n\n  /**\n   * Scaling logic for the X axis.\n   * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @return {Boolean} true if some change happened\n   */\n  function scaleObjectX(eventData, transform, x, y) {\n    return scaleObject(eventData, transform, x, y , { by: 'x' });\n  }\n\n  /**\n   * Scaling logic for the Y axis.\n   * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @return {Boolean} true if some change happened\n   */\n  function scaleObjectY(eventData, transform, x, y) {\n    return scaleObject(eventData, transform, x, y , { by: 'y' });\n  }\n\n  /**\n   * Composed action handler to either scale Y or skew X\n   * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @return {Boolean} true if some change happened\n   */\n  function scalingYOrSkewingX(eventData, transform, x, y) {\n    // ok some safety needed here.\n    if (eventData[transform.target.canvas.altActionKey]) {\n      return controls.skewHandlerX(eventData, transform, x, y);\n    }\n    return controls.scalingY(eventData, transform, x, y);\n  }\n\n  /**\n   * Composed action handler to either scale X or skew Y\n   * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @return {Boolean} true if some change happened\n   */\n  function scalingXOrSkewingY(eventData, transform, x, y) {\n    // ok some safety needed here.\n    if (eventData[transform.target.canvas.altActionKey]) {\n      return controls.skewHandlerY(eventData, transform, x, y);\n    }\n    return controls.scalingX(eventData, transform, x, y);\n  }\n\n  /**\n   * Action handler to change textbox width\n   * Needs to be wrapped with `wrapWithFixedAnchor` to be effective\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @return {Boolean} true if some change happened\n   */\n  function changeWidth(eventData, transform, x, y) {\n    var target = transform.target, localPoint = getLocalPoint(transform, transform.originX, transform.originY, x, y),\n        strokePadding = target.strokeWidth / (target.strokeUniform ? target.scaleX : 1),\n        multiplier = isTransformCentered(transform) ? 2 : 1,\n        oldWidth = target.width,\n        newWidth = Math.abs(localPoint.x * multiplier / target.scaleX) - strokePadding;\n    target.set('width', Math.max(newWidth, 0));\n    return oldWidth !== newWidth;\n  }\n\n  /**\n   * Action handler\n   * @private\n   * @param {Event} eventData javascript event that is doing the transform\n   * @param {Object} transform javascript object containing a series of information around the current transform\n   * @param {number} x current mouse x position, canvas normalized\n   * @param {number} y current mouse y position, canvas normalized\n   * @return {Boolean} true if the translation occurred\n   */\n  function dragHandler(eventData, transform, x, y) {\n    var target = transform.target,\n        newLeft = x - transform.offsetX,\n        newTop = y - transform.offsetY,\n        moveX = !target.get('lockMovementX') && target.left !== newLeft,\n        moveY = !target.get('lockMovementY') && target.top !== newTop;\n    moveX && target.set('left', newLeft);\n    moveY && target.set('top', newTop);\n    if (moveX || moveY) {\n      fireEvent('moving', commonEventInfo(eventData, transform, x, y));\n    }\n    return moveX || moveY;\n  }\n\n  controls.scaleCursorStyleHandler = scaleCursorStyleHandler;\n  controls.skewCursorStyleHandler = skewCursorStyleHandler;\n  controls.scaleSkewCursorStyleHandler = scaleSkewCursorStyleHandler;\n  controls.rotationWithSnapping = wrapWithFireEvent('rotating', wrapWithFixedAnchor(rotationWithSnapping));\n  controls.scalingEqually = wrapWithFireEvent('scaling', wrapWithFixedAnchor( scaleObjectFromCorner));\n  controls.scalingX = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectX));\n  controls.scalingY = wrapWithFireEvent('scaling', wrapWithFixedAnchor(scaleObjectY));\n  controls.scalingYOrSkewingX = scalingYOrSkewingX;\n  controls.scalingXOrSkewingY = scalingXOrSkewingY;\n  controls.changeWidth = wrapWithFireEvent('resizing', wrapWithFixedAnchor(changeWidth));\n  controls.skewHandlerX = skewHandlerX;\n  controls.skewHandlerY = skewHandlerY;\n  controls.dragHandler = dragHandler;\n  controls.scaleOrSkewActionName = scaleOrSkewActionName;\n  controls.rotationStyleHandler = rotationStyleHandler;\n  controls.fireEvent = fireEvent;\n  controls.wrapWithFixedAnchor = wrapWithFixedAnchor;\n  controls.wrapWithFireEvent = wrapWithFireEvent;\n  controls.getLocalPoint = getLocalPoint;\n  fabric.controlsUtils = controls;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      degreesToRadians = fabric.util.degreesToRadians,\n      controls = fabric.controlsUtils;\n\n  /**\n   * Render a round control, as per fabric features.\n   * This function is written to respect object properties like transparentCorners, cornerSize\n   * cornerColor, cornerStrokeColor\n   * plus the addition of offsetY and offsetX.\n   * @param {CanvasRenderingContext2D} ctx context to render on\n   * @param {Number} left x coordinate where the control center should be\n   * @param {Number} top y coordinate where the control center should be\n   * @param {Object} styleOverride override for fabric.Object controls style\n   * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n   */\n  function renderCircleControl (ctx, left, top, styleOverride, fabricObject) {\n    styleOverride = styleOverride || {};\n    var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n        ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n        transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\n          styleOverride.transparentCorners : fabricObject.transparentCorners,\n        methodName = transparentCorners ? 'stroke' : 'fill',\n        stroke = !transparentCorners && (styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor),\n        myLeft = left,\n        myTop = top, size;\n    ctx.save();\n    ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor;\n    ctx.strokeStyle = styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor;\n    // as soon as fabric react v5, remove ie11, use proper ellipse code.\n    if (xSize > ySize) {\n      size = xSize;\n      ctx.scale(1.0, ySize / xSize);\n      myTop = top * xSize / ySize;\n    }\n    else if (ySize > xSize) {\n      size = ySize;\n      ctx.scale(xSize / ySize, 1.0);\n      myLeft = left * ySize / xSize;\n    }\n    else {\n      size = xSize;\n    }\n    // this is still wrong\n    ctx.lineWidth = 1;\n    ctx.beginPath();\n    ctx.arc(myLeft, myTop, size / 2, 0, 2 * Math.PI, false);\n    ctx[methodName]();\n    if (stroke) {\n      ctx.stroke();\n    }\n    ctx.restore();\n  }\n\n  /**\n   * Render a square control, as per fabric features.\n   * This function is written to respect object properties like transparentCorners, cornerSize\n   * cornerColor, cornerStrokeColor\n   * plus the addition of offsetY and offsetX.\n   * @param {CanvasRenderingContext2D} ctx context to render on\n   * @param {Number} left x coordinate where the control center should be\n   * @param {Number} top y coordinate where the control center should be\n   * @param {Object} styleOverride override for fabric.Object controls style\n   * @param {fabric.Object} fabricObject the fabric object for which we are rendering controls\n   */\n  function renderSquareControl(ctx, left, top, styleOverride, fabricObject) {\n    styleOverride = styleOverride || {};\n    var xSize = this.sizeX || styleOverride.cornerSize || fabricObject.cornerSize,\n        ySize = this.sizeY || styleOverride.cornerSize || fabricObject.cornerSize,\n        transparentCorners = typeof styleOverride.transparentCorners !== 'undefined' ?\n          styleOverride.transparentCorners : fabricObject.transparentCorners,\n        methodName = transparentCorners ? 'stroke' : 'fill',\n        stroke = !transparentCorners && (\n          styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor\n        ), xSizeBy2 = xSize / 2, ySizeBy2 = ySize / 2;\n    ctx.save();\n    ctx.fillStyle = styleOverride.cornerColor || fabricObject.cornerColor;\n    ctx.strokeStyle = styleOverride.cornerStrokeColor || fabricObject.cornerStrokeColor;\n    // this is still wrong\n    ctx.lineWidth = 1;\n    ctx.translate(left, top);\n    ctx.rotate(degreesToRadians(fabricObject.angle));\n    // this does not work, and fixed with ( && ) does not make sense.\n    // to have real transparent corners we need the controls on upperCanvas\n    // transparentCorners || ctx.clearRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n    ctx[methodName + 'Rect'](-xSizeBy2, -ySizeBy2, xSize, ySize);\n    if (stroke) {\n      ctx.strokeRect(-xSizeBy2, -ySizeBy2, xSize, ySize);\n    }\n    ctx.restore();\n  }\n\n  controls.renderCircleControl = renderCircleControl;\n  controls.renderSquareControl = renderSquareControl;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { });\n\n  function Control(options) {\n    for (var i in options) {\n      this[i] = options[i];\n    }\n  }\n\n  fabric.Control = Control;\n\n  fabric.Control.prototype = /** @lends fabric.Control.prototype */ {\n\n    /**\n     * keep track of control visibility.\n     * mainly for backward compatibility.\n     * if you do not want to see a control, you can remove it\n     * from the controlset.\n     * @type {Boolean}\n     * @default true\n     */\n    visible: true,\n\n    /**\n     * Name of the action that the control will likely execute.\n     * This is optional. FabricJS uses to identify what the user is doing for some\n     * extra optimizations. If you are writing a custom control and you want to know\n     * somewhere else in the code what is going on, you can use this string here.\n     * you can also provide a custom getActionName if your control run multiple actions\n     * depending on some external state.\n     * default to scale since is the most common, used on 4 corners by default\n     * @type {String}\n     * @default 'scale'\n     */\n    actionName: 'scale',\n\n    /**\n     * Drawing angle of the control.\n     * NOT used for now, but name marked as needed for internal logic\n     * example: to reuse the same drawing function for different rotated controls\n     * @type {Number}\n     * @default 0\n     */\n    angle: 0,\n\n    /**\n     * Relative position of the control. X\n     * 0,0 is the center of the Object, while -0.5 (left) or 0.5 (right) are the extremities\n     * of the bounding box.\n     * @type {Number}\n     * @default 0\n     */\n    x: 0,\n\n    /**\n     * Relative position of the control. Y\n     * 0,0 is the center of the Object, while -0.5 (top) or 0.5 (bottom) are the extremities\n     * of the bounding box.\n     * @type {Number}\n     * @default 0\n     */\n    y: 0,\n\n    /**\n     * Horizontal offset of the control from the defined position. In pixels\n     * Positive offset moves the control to the right, negative to the left.\n     * It used when you want to have position of control that does not scale with\n     * the bounding box. Example: rotation control is placed at x:0, y: 0.5 on\n     * the boundindbox, with an offset of 30 pixels vertically. Those 30 pixels will\n     * stay 30 pixels no matter how the object is big. Another example is having 2\n     * controls in the corner, that stay in the same position when the object scale.\n     * of the bounding box.\n     * @type {Number}\n     * @default 0\n     */\n    offsetX: 0,\n\n    /**\n     * Vertical offset of the control from the defined position. In pixels\n     * Positive offset moves the control to the bottom, negative to the top.\n     * @type {Number}\n     * @default 0\n     */\n    offsetY: 0,\n\n    /**\n     * Sets the length of the control. If null, defaults to object's cornerSize.\n     * Expects both sizeX and sizeY to be set when set.\n     * @type {?Number}\n     * @default null\n     */\n    sizeX: null,\n\n    /**\n     * Sets the height of the control. If null, defaults to object's cornerSize.\n     * Expects both sizeX and sizeY to be set when set.\n     * @type {?Number}\n     * @default null\n     */\n    sizeY: null,\n\n    /**\n     * Sets the length of the touch area of the control. If null, defaults to object's touchCornerSize.\n     * Expects both touchSizeX and touchSizeY to be set when set.\n     * @type {?Number}\n     * @default null\n     */\n    touchSizeX: null,\n\n    /**\n     * Sets the height of the touch area of the control. If null, defaults to object's touchCornerSize.\n     * Expects both touchSizeX and touchSizeY to be set when set.\n     * @type {?Number}\n     * @default null\n     */\n    touchSizeY: null,\n\n    /**\n     * Css cursor style to display when the control is hovered.\n     * if the method `cursorStyleHandler` is provided, this property is ignored.\n     * @type {String}\n     * @default 'crosshair'\n     */\n    cursorStyle: 'crosshair',\n\n    /**\n     * If controls has an offsetY or offsetX, draw a line that connects\n     * the control to the bounding box\n     * @type {Boolean}\n     * @default false\n     */\n    withConnection: false,\n\n    /**\n     * The control actionHandler, provide one to handle action ( control being moved )\n     * @param {Event} eventData the native mouse event\n     * @param {Object} transformData properties of the current transform\n     * @param {Number} x x position of the cursor\n     * @param {Number} y y position of the cursor\n     * @return {Boolean} true if the action/event modified the object\n     */\n    actionHandler: function(/* eventData, transformData, x, y */) { },\n\n    /**\n     * The control handler for mouse down, provide one to handle mouse down on control\n     * @param {Event} eventData the native mouse event\n     * @param {Object} transformData properties of the current transform\n     * @param {Number} x x position of the cursor\n     * @param {Number} y y position of the cursor\n     * @return {Boolean} true if the action/event modified the object\n     */\n    mouseDownHandler: function(/* eventData, transformData, x, y */) { },\n\n    /**\n     * The control mouseUpHandler, provide one to handle an effect on mouse up.\n     * @param {Event} eventData the native mouse event\n     * @param {Object} transformData properties of the current transform\n     * @param {Number} x x position of the cursor\n     * @param {Number} y y position of the cursor\n     * @return {Boolean} true if the action/event modified the object\n     */\n    mouseUpHandler: function(/* eventData, transformData, x, y */) { },\n\n    /**\n     * Returns control actionHandler\n     * @param {Event} eventData the native mouse event\n     * @param {fabric.Object} fabricObject on which the control is displayed\n     * @param {fabric.Control} control control for which the action handler is being asked\n     * @return {Function} the action handler\n     */\n    getActionHandler: function(/* eventData, fabricObject, control */) {\n      return this.actionHandler;\n    },\n\n    /**\n     * Returns control mouseDown handler\n     * @param {Event} eventData the native mouse event\n     * @param {fabric.Object} fabricObject on which the control is displayed\n     * @param {fabric.Control} control control for which the action handler is being asked\n     * @return {Function} the action handler\n     */\n    getMouseDownHandler: function(/* eventData, fabricObject, control */) {\n      return this.mouseDownHandler;\n    },\n\n    /**\n     * Returns control mouseUp handler\n     * @param {Event} eventData the native mouse event\n     * @param {fabric.Object} fabricObject on which the control is displayed\n     * @param {fabric.Control} control control for which the action handler is being asked\n     * @return {Function} the action handler\n     */\n    getMouseUpHandler: function(/* eventData, fabricObject, control */) {\n      return this.mouseUpHandler;\n    },\n\n    /**\n     * Returns control cursorStyle for css using cursorStyle. If you need a more elaborate\n     * function you can pass one in the constructor\n     * the cursorStyle property\n     * @param {Event} eventData the native mouse event\n     * @param {fabric.Control} control the current control ( likely this)\n     * @param {fabric.Object} object on which the control is displayed\n     * @return {String}\n     */\n    cursorStyleHandler: function(eventData, control /* fabricObject */) {\n      return control.cursorStyle;\n    },\n\n    /**\n     * Returns the action name. The basic implementation just return the actionName property.\n     * @param {Event} eventData the native mouse event\n     * @param {fabric.Control} control the current control ( likely this)\n     * @param {fabric.Object} object on which the control is displayed\n     * @return {String}\n     */\n    getActionName: function(eventData, control /* fabricObject */) {\n      return control.actionName;\n    },\n\n    /**\n     * Returns controls visibility\n     * @param {fabric.Object} object on which the control is displayed\n     * @param {String} controlKey key where the control is memorized on the\n     * @return {Boolean}\n     */\n    getVisibility: function(fabricObject, controlKey) {\n      var objectVisibility = fabricObject._controlsVisibility;\n      if (objectVisibility && typeof objectVisibility[controlKey] !== 'undefined') {\n        return objectVisibility[controlKey];\n      }\n      return this.visible;\n    },\n\n    /**\n     * Sets controls visibility\n     * @param {Boolean} visibility for the object\n     * @return {Void}\n     */\n    setVisibility: function(visibility /* name, fabricObject */) {\n      this.visible = visibility;\n    },\n\n\n    positionHandler: function(dim, finalMatrix /*, fabricObject, currentControl */) {\n      var point = fabric.util.transformPoint({\n        x: this.x * dim.x + this.offsetX,\n        y: this.y * dim.y + this.offsetY }, finalMatrix);\n      return point;\n    },\n\n    /**\n     * Returns the coords for this control based on object values.\n     * @param {Number} objectAngle angle from the fabric object holding the control\n     * @param {Number} objectCornerSize cornerSize from the fabric object holding the control (or touchCornerSize if\n     *   isTouch is true)\n     * @param {Number} centerX x coordinate where the control center should be\n     * @param {Number} centerY y coordinate where the control center should be\n     * @param {boolean} isTouch true if touch corner, false if normal corner\n     */\n    calcCornerCoords: function(objectAngle, objectCornerSize, centerX, centerY, isTouch) {\n      var cosHalfOffset,\n          sinHalfOffset,\n          cosHalfOffsetComp,\n          sinHalfOffsetComp,\n          xSize = (isTouch) ? this.touchSizeX : this.sizeX,\n          ySize = (isTouch) ? this.touchSizeY : this.sizeY;\n      if (xSize && ySize && xSize !== ySize) {\n        // handle rectangular corners\n        var controlTriangleAngle = Math.atan2(ySize, xSize);\n        var cornerHypotenuse = Math.sqrt(xSize * xSize + ySize * ySize) / 2;\n        var newTheta = controlTriangleAngle - fabric.util.degreesToRadians(objectAngle);\n        var newThetaComp = Math.PI / 2 - controlTriangleAngle - fabric.util.degreesToRadians(objectAngle);\n        cosHalfOffset = cornerHypotenuse * fabric.util.cos(newTheta);\n        sinHalfOffset = cornerHypotenuse * fabric.util.sin(newTheta);\n        // use complementary angle for two corners\n        cosHalfOffsetComp = cornerHypotenuse * fabric.util.cos(newThetaComp);\n        sinHalfOffsetComp = cornerHypotenuse * fabric.util.sin(newThetaComp);\n      }\n      else {\n        // handle square corners\n        // use default object corner size unless size is defined\n        var cornerSize = (xSize && ySize) ? xSize : objectCornerSize;\n        /* 0.7071067812 stands for sqrt(2)/2 */\n        cornerHypotenuse = cornerSize * 0.7071067812;\n        // complementary angles are equal since they're both 45 degrees\n        var newTheta = fabric.util.degreesToRadians(45 - objectAngle);\n        cosHalfOffset = cosHalfOffsetComp = cornerHypotenuse * fabric.util.cos(newTheta);\n        sinHalfOffset = sinHalfOffsetComp = cornerHypotenuse * fabric.util.sin(newTheta);\n      }\n\n      return {\n        tl: {\n          x: centerX - sinHalfOffsetComp,\n          y: centerY - cosHalfOffsetComp,\n        },\n        tr: {\n          x: centerX + cosHalfOffset,\n          y: centerY - sinHalfOffset,\n        },\n        bl: {\n          x: centerX - cosHalfOffset,\n          y: centerY + sinHalfOffset,\n        },\n        br: {\n          x: centerX + sinHalfOffsetComp,\n          y: centerY + cosHalfOffsetComp,\n        },\n      };\n    },\n\n    /**\n    * Render function for the control.\n    * When this function runs the context is unscaled. unrotate. Just retina scaled.\n    * all the functions will have to translate to the point left,top before starting Drawing\n    * if they want to draw a control where the position is detected.\n    * left and top are the result of the positionHandler function\n    * @param {RenderingContext2D} ctx the context where the control will be drawn\n    * @param {Number} left position of the canvas where we are about to render the control.\n    * @param {Number} top position of the canvas where we are about to render the control.\n    * @param {Object} styleOverride\n    * @param {fabric.Object} fabricObject the object where the control is about to be rendered\n    */\n    render: function(ctx, left, top, styleOverride, fabricObject) {\n      styleOverride = styleOverride || {};\n      switch (styleOverride.cornerStyle || fabricObject.cornerStyle) {\n        case 'circle':\n          fabric.controlsUtils.renderCircleControl.call(this, ctx, left, top, styleOverride, fabricObject);\n          break;\n        default:\n          fabric.controlsUtils.renderSquareControl.call(this, ctx, left, top, styleOverride, fabricObject);\n      }\n    },\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n  /* _FROM_SVG_START_ */\n  function getColorStop(el, multiplier) {\n    var style = el.getAttribute('style'),\n        offset = el.getAttribute('offset') || 0,\n        color, colorAlpha, opacity, i;\n\n    // convert percents to absolute values\n    offset = parseFloat(offset) / (/%$/.test(offset) ? 100 : 1);\n    offset = offset < 0 ? 0 : offset > 1 ? 1 : offset;\n    if (style) {\n      var keyValuePairs = style.split(/\\s*;\\s*/);\n\n      if (keyValuePairs[keyValuePairs.length - 1] === '') {\n        keyValuePairs.pop();\n      }\n\n      for (i = keyValuePairs.length; i--; ) {\n\n        var split = keyValuePairs[i].split(/\\s*:\\s*/),\n            key = split[0].trim(),\n            value = split[1].trim();\n\n        if (key === 'stop-color') {\n          color = value;\n        }\n        else if (key === 'stop-opacity') {\n          opacity = value;\n        }\n      }\n    }\n\n    if (!color) {\n      color = el.getAttribute('stop-color') || 'rgb(0,0,0)';\n    }\n    if (!opacity) {\n      opacity = el.getAttribute('stop-opacity');\n    }\n\n    color = new fabric.Color(color);\n    colorAlpha = color.getAlpha();\n    opacity = isNaN(parseFloat(opacity)) ? 1 : parseFloat(opacity);\n    opacity *= colorAlpha * multiplier;\n\n    return {\n      offset: offset,\n      color: color.toRgb(),\n      opacity: opacity\n    };\n  }\n\n  function getLinearCoords(el) {\n    return {\n      x1: el.getAttribute('x1') || 0,\n      y1: el.getAttribute('y1') || 0,\n      x2: el.getAttribute('x2') || '100%',\n      y2: el.getAttribute('y2') || 0\n    };\n  }\n\n  function getRadialCoords(el) {\n    return {\n      x1: el.getAttribute('fx') || el.getAttribute('cx') || '50%',\n      y1: el.getAttribute('fy') || el.getAttribute('cy') || '50%',\n      r1: 0,\n      x2: el.getAttribute('cx') || '50%',\n      y2: el.getAttribute('cy') || '50%',\n      r2: el.getAttribute('r') || '50%'\n    };\n  }\n  /* _FROM_SVG_END_ */\n\n  var clone = fabric.util.object.clone;\n\n  /**\n   * Gradient class\n   * @class fabric.Gradient\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#gradients}\n   * @see {@link fabric.Gradient#initialize} for constructor definition\n   */\n  fabric.Gradient = fabric.util.createClass(/** @lends fabric.Gradient.prototype */ {\n\n    /**\n     * Horizontal offset for aligning gradients coming from SVG when outside pathgroups\n     * @type Number\n     * @default 0\n     */\n    offsetX: 0,\n\n    /**\n     * Vertical offset for aligning gradients coming from SVG when outside pathgroups\n     * @type Number\n     * @default 0\n     */\n    offsetY: 0,\n\n    /**\n     * A transform matrix to apply to the gradient before painting.\n     * Imported from svg gradients, is not applied with the current transform in the center.\n     * Before this transform is applied, the origin point is at the top left corner of the object\n     * plus the addition of offsetY and offsetX.\n     * @type Number[]\n     * @default null\n     */\n    gradientTransform: null,\n\n    /**\n     * coordinates units for coords.\n     * If `pixels`, the number of coords are in the same unit of width / height.\n     * If set as `percentage` the coords are still a number, but 1 means 100% of width\n     * for the X and 100% of the height for the y. It can be bigger than 1 and negative.\n     * allowed values pixels or percentage.\n     * @type String\n     * @default 'pixels'\n     */\n    gradientUnits: 'pixels',\n\n    /**\n     * Gradient type linear or radial\n     * @type String\n     * @default 'pixels'\n     */\n    type: 'linear',\n\n    /**\n     * Constructor\n     * @param {Object} options Options object with type, coords, gradientUnits and colorStops\n     * @param {Object} [options.type] gradient type linear or radial\n     * @param {Object} [options.gradientUnits] gradient units\n     * @param {Object} [options.offsetX] SVG import compatibility\n     * @param {Object} [options.offsetY] SVG import compatibility\n     * @param {Object[]} options.colorStops contains the colorstops.\n     * @param {Object} options.coords contains the coords of the gradient\n     * @param {Number} [options.coords.x1] X coordiante of the first point for linear or of the focal point for radial\n     * @param {Number} [options.coords.y1] Y coordiante of the first point for linear or of the focal point for radial\n     * @param {Number} [options.coords.x2] X coordiante of the second point for linear or of the center point for radial\n     * @param {Number} [options.coords.y2] Y coordiante of the second point for linear or of the center point for radial\n     * @param {Number} [options.coords.r1] only for radial gradient, radius of the inner circle\n     * @param {Number} [options.coords.r2] only for radial gradient, radius of the external circle\n     * @return {fabric.Gradient} thisArg\n     */\n    initialize: function(options) {\n      options || (options = { });\n      options.coords || (options.coords = { });\n\n      var coords, _this = this;\n\n      // sets everything, then coords and colorstops get sets again\n      Object.keys(options).forEach(function(option) {\n        _this[option] = options[option];\n      });\n\n      if (this.id) {\n        this.id += '_' + fabric.Object.__uid++;\n      }\n      else {\n        this.id = fabric.Object.__uid++;\n      }\n\n      coords = {\n        x1: options.coords.x1 || 0,\n        y1: options.coords.y1 || 0,\n        x2: options.coords.x2 || 0,\n        y2: options.coords.y2 || 0\n      };\n\n      if (this.type === 'radial') {\n        coords.r1 = options.coords.r1 || 0;\n        coords.r2 = options.coords.r2 || 0;\n      }\n\n      this.coords = coords;\n      this.colorStops = options.colorStops.slice();\n    },\n\n    /**\n     * Adds another colorStop\n     * @param {Object} colorStop Object with offset and color\n     * @return {fabric.Gradient} thisArg\n     */\n    addColorStop: function(colorStops) {\n      for (var position in colorStops) {\n        var color = new fabric.Color(colorStops[position]);\n        this.colorStops.push({\n          offset: parseFloat(position),\n          color: color.toRgb(),\n          opacity: color.getAlpha()\n        });\n      }\n      return this;\n    },\n\n    /**\n     * Returns object representation of a gradient\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object}\n     */\n    toObject: function(propertiesToInclude) {\n      var object = {\n        type: this.type,\n        coords: this.coords,\n        colorStops: this.colorStops,\n        offsetX: this.offsetX,\n        offsetY: this.offsetY,\n        gradientUnits: this.gradientUnits,\n        gradientTransform: this.gradientTransform ? this.gradientTransform.concat() : this.gradientTransform\n      };\n      fabric.util.populateWithProperties(this, object, propertiesToInclude);\n\n      return object;\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns SVG representation of an gradient\n     * @param {Object} object Object to create a gradient for\n     * @return {String} SVG representation of an gradient (linear/radial)\n     */\n    toSVG: function(object, options) {\n      var coords = clone(this.coords, true), i, len, options = options || {},\n          markup, commonAttributes, colorStops = clone(this.colorStops, true),\n          needsSwap = coords.r1 > coords.r2,\n          transform = this.gradientTransform ? this.gradientTransform.concat() : fabric.iMatrix.concat(),\n          offsetX = -this.offsetX, offsetY = -this.offsetY,\n          withViewport = !!options.additionalTransform,\n          gradientUnits = this.gradientUnits === 'pixels' ? 'userSpaceOnUse' : 'objectBoundingBox';\n      // colorStops must be sorted ascending\n      colorStops.sort(function(a, b) {\n        return a.offset - b.offset;\n      });\n\n      if (gradientUnits === 'objectBoundingBox') {\n        offsetX /= object.width;\n        offsetY /= object.height;\n      }\n      else {\n        offsetX += object.width / 2;\n        offsetY += object.height / 2;\n      }\n      if (object.type === 'path' && this.gradientUnits !== 'percentage') {\n        offsetX -= object.pathOffset.x;\n        offsetY -= object.pathOffset.y;\n      }\n\n\n      transform[4] -= offsetX;\n      transform[5] -= offsetY;\n\n      commonAttributes = 'id=\"SVGID_' + this.id +\n                     '\" gradientUnits=\"' + gradientUnits + '\"';\n      commonAttributes += ' gradientTransform=\"' + (withViewport ?\n        options.additionalTransform + ' ' : '') + fabric.util.matrixToSVG(transform) + '\" ';\n\n      if (this.type === 'linear') {\n        markup = [\n          '<linearGradient ',\n          commonAttributes,\n          ' x1=\"', coords.x1,\n          '\" y1=\"', coords.y1,\n          '\" x2=\"', coords.x2,\n          '\" y2=\"', coords.y2,\n          '\">\\n'\n        ];\n      }\n      else if (this.type === 'radial') {\n        // svg radial gradient has just 1 radius. the biggest.\n        markup = [\n          '<radialGradient ',\n          commonAttributes,\n          ' cx=\"', needsSwap ? coords.x1 : coords.x2,\n          '\" cy=\"', needsSwap ? coords.y1 : coords.y2,\n          '\" r=\"', needsSwap ? coords.r1 : coords.r2,\n          '\" fx=\"', needsSwap ? coords.x2 : coords.x1,\n          '\" fy=\"', needsSwap ? coords.y2 : coords.y1,\n          '\">\\n'\n        ];\n      }\n\n      if (this.type === 'radial') {\n        if (needsSwap) {\n          // svg goes from internal to external radius. if radius are inverted, swap color stops.\n          colorStops = colorStops.concat();\n          colorStops.reverse();\n          for (i = 0, len = colorStops.length; i < len; i++) {\n            colorStops[i].offset = 1 - colorStops[i].offset;\n          }\n        }\n        var minRadius = Math.min(coords.r1, coords.r2);\n        if (minRadius > 0) {\n          // i have to shift all colorStops and add new one in 0.\n          var maxRadius = Math.max(coords.r1, coords.r2),\n              percentageShift = minRadius / maxRadius;\n          for (i = 0, len = colorStops.length; i < len; i++) {\n            colorStops[i].offset += percentageShift * (1 - colorStops[i].offset);\n          }\n        }\n      }\n\n      for (i = 0, len = colorStops.length; i < len; i++) {\n        var colorStop = colorStops[i];\n        markup.push(\n          '<stop ',\n          'offset=\"', (colorStop.offset * 100) + '%',\n          '\" style=\"stop-color:', colorStop.color,\n          (typeof colorStop.opacity !== 'undefined' ? ';stop-opacity: ' + colorStop.opacity : ';'),\n          '\"/>\\n'\n        );\n      }\n\n      markup.push((this.type === 'linear' ? '</linearGradient>\\n' : '</radialGradient>\\n'));\n\n      return markup.join('');\n    },\n    /* _TO_SVG_END_ */\n\n    /**\n     * Returns an instance of CanvasGradient\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @return {CanvasGradient}\n     */\n    toLive: function(ctx) {\n      var gradient, coords = fabric.util.object.clone(this.coords), i, len;\n\n      if (!this.type) {\n        return;\n      }\n\n      if (this.type === 'linear') {\n        gradient = ctx.createLinearGradient(\n          coords.x1, coords.y1, coords.x2, coords.y2);\n      }\n      else if (this.type === 'radial') {\n        gradient = ctx.createRadialGradient(\n          coords.x1, coords.y1, coords.r1, coords.x2, coords.y2, coords.r2);\n      }\n\n      for (i = 0, len = this.colorStops.length; i < len; i++) {\n        var color = this.colorStops[i].color,\n            opacity = this.colorStops[i].opacity,\n            offset = this.colorStops[i].offset;\n\n        if (typeof opacity !== 'undefined') {\n          color = new fabric.Color(color).setAlpha(opacity).toRgba();\n        }\n        gradient.addColorStop(offset, color);\n      }\n\n      return gradient;\n    }\n  });\n\n  fabric.util.object.extend(fabric.Gradient, {\n\n    /* _FROM_SVG_START_ */\n    /**\n     * Returns {@link fabric.Gradient} instance from an SVG element\n     * @static\n     * @memberOf fabric.Gradient\n     * @param {SVGGradientElement} el SVG gradient element\n     * @param {fabric.Object} instance\n     * @param {String} opacityAttr A fill-opacity or stroke-opacity attribute to multiply to each stop's opacity.\n     * @param {Object} svgOptions an object containing the size of the SVG in order to parse correctly gradients\n     * that uses gradientUnits as 'userSpaceOnUse' and percentages.\n     * @param {Object.number} viewBoxWidth width part of the viewBox attribute on svg\n     * @param {Object.number} viewBoxHeight height part of the viewBox attribute on svg\n     * @param {Object.number} width width part of the svg tag if viewBox is not specified\n     * @param {Object.number} height height part of the svg tag if viewBox is not specified\n     * @return {fabric.Gradient} Gradient instance\n     * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement\n     * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement\n     */\n    fromElement: function(el, instance, opacityAttr, svgOptions) {\n      /**\n       *  @example:\n       *\n       *  <linearGradient id=\"linearGrad1\">\n       *    <stop offset=\"0%\" stop-color=\"white\"/>\n       *    <stop offset=\"100%\" stop-color=\"black\"/>\n       *  </linearGradient>\n       *\n       *  OR\n       *\n       *  <linearGradient id=\"linearGrad2\">\n       *    <stop offset=\"0\" style=\"stop-color:rgb(255,255,255)\"/>\n       *    <stop offset=\"1\" style=\"stop-color:rgb(0,0,0)\"/>\n       *  </linearGradient>\n       *\n       *  OR\n       *\n       *  <radialGradient id=\"radialGrad1\">\n       *    <stop offset=\"0%\" stop-color=\"white\" stop-opacity=\"1\" />\n       *    <stop offset=\"50%\" stop-color=\"black\" stop-opacity=\"0.5\" />\n       *    <stop offset=\"100%\" stop-color=\"white\" stop-opacity=\"1\" />\n       *  </radialGradient>\n       *\n       *  OR\n       *\n       *  <radialGradient id=\"radialGrad2\">\n       *    <stop offset=\"0\" stop-color=\"rgb(255,255,255)\" />\n       *    <stop offset=\"0.5\" stop-color=\"rgb(0,0,0)\" />\n       *    <stop offset=\"1\" stop-color=\"rgb(255,255,255)\" />\n       *  </radialGradient>\n       *\n       */\n\n      var multiplier = parseFloat(opacityAttr) / (/%$/.test(opacityAttr) ? 100 : 1);\n      multiplier = multiplier < 0 ? 0 : multiplier > 1 ? 1 : multiplier;\n      if (isNaN(multiplier)) {\n        multiplier = 1;\n      }\n\n      var colorStopEls = el.getElementsByTagName('stop'),\n          type,\n          gradientUnits = el.getAttribute('gradientUnits') === 'userSpaceOnUse' ?\n            'pixels' : 'percentage',\n          gradientTransform = el.getAttribute('gradientTransform') || '',\n          colorStops = [],\n          coords, i, offsetX = 0, offsetY = 0,\n          transformMatrix;\n      if (el.nodeName === 'linearGradient' || el.nodeName === 'LINEARGRADIENT') {\n        type = 'linear';\n        coords = getLinearCoords(el);\n      }\n      else {\n        type = 'radial';\n        coords = getRadialCoords(el);\n      }\n\n      for (i = colorStopEls.length; i--; ) {\n        colorStops.push(getColorStop(colorStopEls[i], multiplier));\n      }\n\n      transformMatrix = fabric.parseTransformAttribute(gradientTransform);\n\n      __convertPercentUnitsToValues(instance, coords, svgOptions, gradientUnits);\n\n      if (gradientUnits === 'pixels') {\n        offsetX = -instance.left;\n        offsetY = -instance.top;\n      }\n\n      var gradient = new fabric.Gradient({\n        id: el.getAttribute('id'),\n        type: type,\n        coords: coords,\n        colorStops: colorStops,\n        gradientUnits: gradientUnits,\n        gradientTransform: transformMatrix,\n        offsetX: offsetX,\n        offsetY: offsetY,\n      });\n\n      return gradient;\n    }\n    /* _FROM_SVG_END_ */\n  });\n\n  /**\n   * @private\n   */\n  function __convertPercentUnitsToValues(instance, options, svgOptions, gradientUnits) {\n    var propValue, finalValue;\n    Object.keys(options).forEach(function(prop) {\n      propValue = options[prop];\n      if (propValue === 'Infinity') {\n        finalValue = 1;\n      }\n      else if (propValue === '-Infinity') {\n        finalValue = 0;\n      }\n      else {\n        finalValue = parseFloat(options[prop], 10);\n        if (typeof propValue === 'string' && /^(\\d+\\.\\d+)%|(\\d+)%$/.test(propValue)) {\n          finalValue *= 0.01;\n          if (gradientUnits === 'pixels') {\n            // then we need to fix those percentages here in svg parsing\n            if (prop === 'x1' || prop === 'x2' || prop === 'r2') {\n              finalValue *= svgOptions.viewBoxWidth || svgOptions.width;\n            }\n            if (prop === 'y1' || prop === 'y2') {\n              finalValue *= svgOptions.viewBoxHeight || svgOptions.height;\n            }\n          }\n        }\n      }\n      options[prop] = finalValue;\n    });\n  }\n})();\n\n\n(function() {\n\n  'use strict';\n\n  var toFixed = fabric.util.toFixed;\n\n  /**\n   * Pattern class\n   * @class fabric.Pattern\n   * @see {@link http://fabricjs.com/patterns|Pattern demo}\n   * @see {@link http://fabricjs.com/dynamic-patterns|DynamicPattern demo}\n   * @see {@link fabric.Pattern#initialize} for constructor definition\n   */\n\n\n  fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ {\n\n    /**\n     * Repeat property of a pattern (one of repeat, repeat-x, repeat-y or no-repeat)\n     * @type String\n     * @default\n     */\n    repeat: 'repeat',\n\n    /**\n     * Pattern horizontal offset from object's left/top corner\n     * @type Number\n     * @default\n     */\n    offsetX: 0,\n\n    /**\n     * Pattern vertical offset from object's left/top corner\n     * @type Number\n     * @default\n     */\n    offsetY: 0,\n\n    /**\n     * crossOrigin value (one of \"\", \"anonymous\", \"use-credentials\")\n     * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes\n     * @type String\n     * @default\n     */\n    crossOrigin: '',\n\n    /**\n     * transform matrix to change the pattern, imported from svgs.\n     * @type Array\n     * @default\n     */\n    patternTransform: null,\n\n    /**\n     * Constructor\n     * @param {Object} [options] Options object\n     * @param {Function} [callback] function to invoke after callback init.\n     * @return {fabric.Pattern} thisArg\n     */\n    initialize: function(options, callback) {\n      options || (options = { });\n\n      this.id = fabric.Object.__uid++;\n      this.setOptions(options);\n      if (!options.source || (options.source && typeof options.source !== 'string')) {\n        callback && callback(this);\n        return;\n      }\n      else {\n        // img src string\n        var _this = this;\n        this.source = fabric.util.createImage();\n        fabric.util.loadImage(options.source, function(img, isError) {\n          _this.source = img;\n          callback && callback(_this, isError);\n        }, null, this.crossOrigin);\n      }\n    },\n\n    /**\n     * Returns object representation of a pattern\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} Object representation of a pattern instance\n     */\n    toObject: function(propertiesToInclude) {\n      var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n          source, object;\n\n      // <img> element\n      if (typeof this.source.src === 'string') {\n        source = this.source.src;\n      }\n      // <canvas> element\n      else if (typeof this.source === 'object' && this.source.toDataURL) {\n        source = this.source.toDataURL();\n      }\n\n      object = {\n        type: 'pattern',\n        source: source,\n        repeat: this.repeat,\n        crossOrigin: this.crossOrigin,\n        offsetX: toFixed(this.offsetX, NUM_FRACTION_DIGITS),\n        offsetY: toFixed(this.offsetY, NUM_FRACTION_DIGITS),\n        patternTransform: this.patternTransform ? this.patternTransform.concat() : null\n      };\n      fabric.util.populateWithProperties(this, object, propertiesToInclude);\n\n      return object;\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns SVG representation of a pattern\n     * @param {fabric.Object} object\n     * @return {String} SVG representation of a pattern\n     */\n    toSVG: function(object) {\n      var patternSource = typeof this.source === 'function' ? this.source() : this.source,\n          patternWidth = patternSource.width / object.width,\n          patternHeight = patternSource.height / object.height,\n          patternOffsetX = this.offsetX / object.width,\n          patternOffsetY = this.offsetY / object.height,\n          patternImgSrc = '';\n      if (this.repeat === 'repeat-x' || this.repeat === 'no-repeat') {\n        patternHeight = 1;\n        if (patternOffsetY) {\n          patternHeight += Math.abs(patternOffsetY);\n        }\n      }\n      if (this.repeat === 'repeat-y' || this.repeat === 'no-repeat') {\n        patternWidth = 1;\n        if (patternOffsetX) {\n          patternWidth += Math.abs(patternOffsetX);\n        }\n\n      }\n      if (patternSource.src) {\n        patternImgSrc = patternSource.src;\n      }\n      else if (patternSource.toDataURL) {\n        patternImgSrc = patternSource.toDataURL();\n      }\n\n      return '<pattern id=\"SVGID_' + this.id +\n                    '\" x=\"' + patternOffsetX +\n                    '\" y=\"' + patternOffsetY +\n                    '\" width=\"' + patternWidth +\n                    '\" height=\"' + patternHeight + '\">\\n' +\n               '<image x=\"0\" y=\"0\"' +\n                      ' width=\"' + patternSource.width +\n                      '\" height=\"' + patternSource.height +\n                      '\" xlink:href=\"' + patternImgSrc +\n               '\"></image>\\n' +\n             '</pattern>\\n';\n    },\n    /* _TO_SVG_END_ */\n\n    setOptions: function(options) {\n      for (var prop in options) {\n        this[prop] = options[prop];\n      }\n    },\n\n    /**\n     * Returns an instance of CanvasPattern\n     * @param {CanvasRenderingContext2D} ctx Context to create pattern\n     * @return {CanvasPattern}\n     */\n    toLive: function(ctx) {\n      var source = this.source;\n      // if the image failed to load, return, and allow rest to continue loading\n      if (!source) {\n        return '';\n      }\n\n      // if an image\n      if (typeof source.src !== 'undefined') {\n        if (!source.complete) {\n          return '';\n        }\n        if (source.naturalWidth === 0 || source.naturalHeight === 0) {\n          return '';\n        }\n      }\n      return ctx.createPattern(source, this.repeat);\n    }\n  });\n})();\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      toFixed = fabric.util.toFixed;\n\n  if (fabric.Shadow) {\n    fabric.warn('fabric.Shadow is already defined.');\n    return;\n  }\n\n  /**\n   * Shadow class\n   * @class fabric.Shadow\n   * @see {@link http://fabricjs.com/shadows|Shadow demo}\n   * @see {@link fabric.Shadow#initialize} for constructor definition\n   */\n  fabric.Shadow = fabric.util.createClass(/** @lends fabric.Shadow.prototype */ {\n\n    /**\n     * Shadow color\n     * @type String\n     * @default\n     */\n    color: 'rgb(0,0,0)',\n\n    /**\n     * Shadow blur\n     * @type Number\n     */\n    blur: 0,\n\n    /**\n     * Shadow horizontal offset\n     * @type Number\n     * @default\n     */\n    offsetX: 0,\n\n    /**\n     * Shadow vertical offset\n     * @type Number\n     * @default\n     */\n    offsetY: 0,\n\n    /**\n     * Whether the shadow should affect stroke operations\n     * @type Boolean\n     * @default\n     */\n    affectStroke: false,\n\n    /**\n     * Indicates whether toObject should include default values\n     * @type Boolean\n     * @default\n     */\n    includeDefaultValues: true,\n\n    /**\n     * When `false`, the shadow will scale with the object.\n     * When `true`, the shadow's offsetX, offsetY, and blur will not be affected by the object's scale.\n     * default to false\n     * @type Boolean\n     * @default\n     */\n    nonScaling: false,\n\n    /**\n     * Constructor\n     * @param {Object|String} [options] Options object with any of color, blur, offsetX, offsetY properties or string (e.g. \"rgba(0,0,0,0.2) 2px 2px 10px\")\n     * @return {fabric.Shadow} thisArg\n     */\n    initialize: function(options) {\n\n      if (typeof options === 'string') {\n        options = this._parseShadow(options);\n      }\n\n      for (var prop in options) {\n        this[prop] = options[prop];\n      }\n\n      this.id = fabric.Object.__uid++;\n    },\n\n    /**\n     * @private\n     * @param {String} shadow Shadow value to parse\n     * @return {Object} Shadow object with color, offsetX, offsetY and blur\n     */\n    _parseShadow: function(shadow) {\n      var shadowStr = shadow.trim(),\n          offsetsAndBlur = fabric.Shadow.reOffsetsAndBlur.exec(shadowStr) || [],\n          color = shadowStr.replace(fabric.Shadow.reOffsetsAndBlur, '') || 'rgb(0,0,0)';\n\n      return {\n        color: color.trim(),\n        offsetX: parseFloat(offsetsAndBlur[1], 10) || 0,\n        offsetY: parseFloat(offsetsAndBlur[2], 10) || 0,\n        blur: parseFloat(offsetsAndBlur[3], 10) || 0\n      };\n    },\n\n    /**\n     * Returns a string representation of an instance\n     * @see http://www.w3.org/TR/css-text-decor-3/#text-shadow\n     * @return {String} Returns CSS3 text-shadow declaration\n     */\n    toString: function() {\n      return [this.offsetX, this.offsetY, this.blur, this.color].join('px ');\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns SVG representation of a shadow\n     * @param {fabric.Object} object\n     * @return {String} SVG representation of a shadow\n     */\n    toSVG: function(object) {\n      var fBoxX = 40, fBoxY = 40, NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n          offset = fabric.util.rotateVector(\n            { x: this.offsetX, y: this.offsetY },\n            fabric.util.degreesToRadians(-object.angle)),\n          BLUR_BOX = 20, color = new fabric.Color(this.color);\n\n      if (object.width && object.height) {\n        //http://www.w3.org/TR/SVG/filters.html#FilterEffectsRegion\n        // we add some extra space to filter box to contain the blur ( 20 )\n        fBoxX = toFixed((Math.abs(offset.x) + this.blur) / object.width, NUM_FRACTION_DIGITS) * 100 + BLUR_BOX;\n        fBoxY = toFixed((Math.abs(offset.y) + this.blur) / object.height, NUM_FRACTION_DIGITS) * 100 + BLUR_BOX;\n      }\n      if (object.flipX) {\n        offset.x *= -1;\n      }\n      if (object.flipY) {\n        offset.y *= -1;\n      }\n\n      return (\n        '<filter id=\"SVGID_' + this.id + '\" y=\"-' + fBoxY + '%\" height=\"' + (100 + 2 * fBoxY) + '%\" ' +\n          'x=\"-' + fBoxX + '%\" width=\"' + (100 + 2 * fBoxX) + '%\" ' + '>\\n' +\n          '\\t<feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"' +\n            toFixed(this.blur ? this.blur / 2 : 0, NUM_FRACTION_DIGITS) + '\"></feGaussianBlur>\\n' +\n          '\\t<feOffset dx=\"' + toFixed(offset.x, NUM_FRACTION_DIGITS) +\n          '\" dy=\"' + toFixed(offset.y, NUM_FRACTION_DIGITS) + '\" result=\"oBlur\" ></feOffset>\\n' +\n          '\\t<feFlood flood-color=\"' + color.toRgb() + '\" flood-opacity=\"' + color.getAlpha() + '\"/>\\n' +\n          '\\t<feComposite in2=\"oBlur\" operator=\"in\" />\\n' +\n          '\\t<feMerge>\\n' +\n            '\\t\\t<feMergeNode></feMergeNode>\\n' +\n            '\\t\\t<feMergeNode in=\"SourceGraphic\"></feMergeNode>\\n' +\n          '\\t</feMerge>\\n' +\n        '</filter>\\n');\n    },\n    /* _TO_SVG_END_ */\n\n    /**\n     * Returns object representation of a shadow\n     * @return {Object} Object representation of a shadow instance\n     */\n    toObject: function() {\n      if (this.includeDefaultValues) {\n        return {\n          color: this.color,\n          blur: this.blur,\n          offsetX: this.offsetX,\n          offsetY: this.offsetY,\n          affectStroke: this.affectStroke,\n          nonScaling: this.nonScaling\n        };\n      }\n      var obj = { }, proto = fabric.Shadow.prototype;\n\n      ['color', 'blur', 'offsetX', 'offsetY', 'affectStroke', 'nonScaling'].forEach(function(prop) {\n        if (this[prop] !== proto[prop]) {\n          obj[prop] = this[prop];\n        }\n      }, this);\n\n      return obj;\n    }\n  });\n\n  /**\n   * Regex matching shadow offsetX, offsetY and blur (ex: \"2px 2px 10px rgba(0,0,0,0.2)\", \"rgb(0,255,0) 2px 2px\")\n   * @static\n   * @field\n   * @memberOf fabric.Shadow\n   */\n  // eslint-disable-next-line max-len\n  fabric.Shadow.reOffsetsAndBlur = /(?:\\s|^)(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?(-?\\d+(?:\\.\\d*)?(?:px)?(?:\\s?|$))?(\\d+(?:\\.\\d*)?(?:px)?)?(?:\\s?|$)(?:$|\\s)/;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function () {\n\n  'use strict';\n\n  if (fabric.StaticCanvas) {\n    fabric.warn('fabric.StaticCanvas is already defined.');\n    return;\n  }\n\n  // aliases for faster resolution\n  var extend = fabric.util.object.extend,\n      getElementOffset = fabric.util.getElementOffset,\n      removeFromArray = fabric.util.removeFromArray,\n      toFixed = fabric.util.toFixed,\n      transformPoint = fabric.util.transformPoint,\n      invertTransform = fabric.util.invertTransform,\n      getNodeCanvas = fabric.util.getNodeCanvas,\n      createCanvasElement = fabric.util.createCanvasElement,\n\n      CANVAS_INIT_ERROR = new Error('Could not initialize `canvas` element');\n\n  /**\n   * Static canvas class\n   * @class fabric.StaticCanvas\n   * @mixes fabric.Collection\n   * @mixes fabric.Observable\n   * @see {@link http://fabricjs.com/static_canvas|StaticCanvas demo}\n   * @see {@link fabric.StaticCanvas#initialize} for constructor definition\n   * @fires before:render\n   * @fires after:render\n   * @fires canvas:cleared\n   * @fires object:added\n   * @fires object:removed\n   */\n  fabric.StaticCanvas = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.StaticCanvas.prototype */ {\n\n    /**\n     * Constructor\n     * @param {HTMLElement | String} el &lt;canvas> element to initialize instance on\n     * @param {Object} [options] Options object\n     * @return {Object} thisArg\n     */\n    initialize: function(el, options) {\n      options || (options = { });\n      this.renderAndResetBound = this.renderAndReset.bind(this);\n      this.requestRenderAllBound = this.requestRenderAll.bind(this);\n      this._initStatic(el, options);\n    },\n\n    /**\n     * Background color of canvas instance.\n     * Should be set via {@link fabric.StaticCanvas#setBackgroundColor}.\n     * @type {(String|fabric.Pattern)}\n     * @default\n     */\n    backgroundColor: '',\n\n    /**\n     * Background image of canvas instance.\n     * since 2.4.0 image caching is active, please when putting an image as background, add to the\n     * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n     * vale. As an alternative you can disable image objectCaching\n     * @type fabric.Image\n     * @default\n     */\n    backgroundImage: null,\n\n    /**\n     * Overlay color of canvas instance.\n     * Should be set via {@link fabric.StaticCanvas#setOverlayColor}\n     * @since 1.3.9\n     * @type {(String|fabric.Pattern)}\n     * @default\n     */\n    overlayColor: '',\n\n    /**\n     * Overlay image of canvas instance.\n     * since 2.4.0 image caching is active, please when putting an image as overlay, add to the\n     * canvas property a reference to the canvas it is on. Otherwise the image cannot detect the zoom\n     * vale. As an alternative you can disable image objectCaching\n     * @type fabric.Image\n     * @default\n     */\n    overlayImage: null,\n\n    /**\n     * Indicates whether toObject/toDatalessObject should include default values\n     * if set to false, takes precedence over the object value.\n     * @type Boolean\n     * @default\n     */\n    includeDefaultValues: true,\n\n    /**\n     * Indicates whether objects' state should be saved\n     * @type Boolean\n     * @default\n     */\n    stateful: false,\n\n    /**\n     * Indicates whether {@link fabric.Collection.add}, {@link fabric.Collection.insertAt} and {@link fabric.Collection.remove},\n     * {@link fabric.StaticCanvas.moveTo}, {@link fabric.StaticCanvas.clear} and many more, should also re-render canvas.\n     * Disabling this option will not give a performance boost when adding/removing a lot of objects to/from canvas at once\n     * since the renders are quequed and executed one per frame.\n     * Disabling is suggested anyway and managing the renders of the app manually is not a big effort ( canvas.requestRenderAll() )\n     * Left default to true to do not break documentation and old app, fiddles.\n     * @type Boolean\n     * @default\n     */\n    renderOnAddRemove: true,\n\n    /**\n     * Indicates whether object controls (borders/controls) are rendered above overlay image\n     * @type Boolean\n     * @default\n     */\n    controlsAboveOverlay: false,\n\n    /**\n     * Indicates whether the browser can be scrolled when using a touchscreen and dragging on the canvas\n     * @type Boolean\n     * @default\n     */\n    allowTouchScrolling: false,\n\n    /**\n     * Indicates whether this canvas will use image smoothing, this is on by default in browsers\n     * @type Boolean\n     * @default\n     */\n    imageSmoothingEnabled: true,\n\n    /**\n     * The transformation (a Canvas 2D API transform matrix) which focuses the viewport\n     * @type Array\n     * @example <caption>Default transform</caption>\n     * canvas.viewportTransform = [1, 0, 0, 1, 0, 0];\n     * @example <caption>Scale by 70% and translate toward bottom-right by 50, without skewing</caption>\n     * canvas.viewportTransform = [0.7, 0, 0, 0.7, 50, 50];\n     * @default\n     */\n    viewportTransform: fabric.iMatrix.concat(),\n\n    /**\n     * if set to false background image is not affected by viewport transform\n     * @since 1.6.3\n     * @type Boolean\n     * @default\n     */\n    backgroundVpt: true,\n\n    /**\n     * if set to false overlya image is not affected by viewport transform\n     * @since 1.6.3\n     * @type Boolean\n     * @default\n     */\n    overlayVpt: true,\n\n    /**\n     * When true, canvas is scaled by devicePixelRatio for better rendering on retina screens\n     * @type Boolean\n     * @default\n     */\n    enableRetinaScaling: true,\n\n    /**\n     * Describe canvas element extension over design\n     * properties are tl,tr,bl,br.\n     * if canvas is not zoomed/panned those points are the four corner of canvas\n     * if canvas is viewportTransformed you those points indicate the extension\n     * of canvas element in plain untrasformed coordinates\n     * The coordinates get updated with @method calcViewportBoundaries.\n     * @memberOf fabric.StaticCanvas.prototype\n     */\n    vptCoords: { },\n\n    /**\n     * Based on vptCoords and object.aCoords, skip rendering of objects that\n     * are not included in current viewport.\n     * May greatly help in applications with crowded canvas and use of zoom/pan\n     * If One of the corner of the bounding box of the object is on the canvas\n     * the objects get rendered.\n     * @memberOf fabric.StaticCanvas.prototype\n     * @type Boolean\n     * @default\n     */\n    skipOffscreen: true,\n\n    /**\n     * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n     * the clipPath object gets used when the canvas has rendered, and the context is placed in the\n     * top left corner of the canvas.\n     * clipPath will clip away controls, if you do not want this to happen use controlsAboveOverlay = true\n     * @type fabric.Object\n     */\n    clipPath: undefined,\n\n    /**\n     * @private\n     * @param {HTMLElement | String} el &lt;canvas> element to initialize instance on\n     * @param {Object} [options] Options object\n     */\n    _initStatic: function(el, options) {\n      var cb = this.requestRenderAllBound;\n      this._objects = [];\n      this._createLowerCanvas(el);\n      this._initOptions(options);\n      // only initialize retina scaling once\n      if (!this.interactive) {\n        this._initRetinaScaling();\n      }\n\n      if (options.overlayImage) {\n        this.setOverlayImage(options.overlayImage, cb);\n      }\n      if (options.backgroundImage) {\n        this.setBackgroundImage(options.backgroundImage, cb);\n      }\n      if (options.backgroundColor) {\n        this.setBackgroundColor(options.backgroundColor, cb);\n      }\n      if (options.overlayColor) {\n        this.setOverlayColor(options.overlayColor, cb);\n      }\n      this.calcOffset();\n    },\n\n    /**\n     * @private\n     */\n    _isRetinaScaling: function() {\n      return (fabric.devicePixelRatio > 1 && this.enableRetinaScaling);\n    },\n\n    /**\n     * @private\n     * @return {Number} retinaScaling if applied, otherwise 1;\n     */\n    getRetinaScaling: function() {\n      return this._isRetinaScaling() ? Math.max(1, fabric.devicePixelRatio) : 1;\n    },\n\n    /**\n     * @private\n     */\n    _initRetinaScaling: function() {\n      if (!this._isRetinaScaling()) {\n        return;\n      }\n      var scaleRatio = fabric.devicePixelRatio;\n      this.__initRetinaScaling(scaleRatio, this.lowerCanvasEl, this.contextContainer);\n      if (this.upperCanvasEl) {\n        this.__initRetinaScaling(scaleRatio, this.upperCanvasEl, this.contextTop);\n      }\n    },\n\n    __initRetinaScaling: function(scaleRatio, canvas, context) {\n      canvas.setAttribute('width', this.width * scaleRatio);\n      canvas.setAttribute('height', this.height * scaleRatio);\n      context.scale(scaleRatio, scaleRatio);\n    },\n\n\n    /**\n     * Calculates canvas element offset relative to the document\n     * This method is also attached as \"resize\" event handler of window\n     * @return {fabric.Canvas} instance\n     * @chainable\n     */\n    calcOffset: function () {\n      this._offset = getElementOffset(this.lowerCanvasEl);\n      return this;\n    },\n\n    /**\n     * Sets {@link fabric.StaticCanvas#overlayImage|overlay image} for this canvas\n     * @param {(fabric.Image|String)} image fabric.Image instance or URL of an image to set overlay to\n     * @param {Function} callback callback to invoke when image is loaded and set as an overlay\n     * @param {Object} [options] Optional options to set for the {@link fabric.Image|overlay image}.\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     * @see {@link http://jsfiddle.net/fabricjs/MnzHT/|jsFiddle demo}\n     * @example <caption>Normal overlayImage with left/top = 0</caption>\n     * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n     *   // Needed to position overlayImage at 0/0\n     *   originX: 'left',\n     *   originY: 'top'\n     * });\n     * @example <caption>overlayImage with different properties</caption>\n     * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n     *   opacity: 0.5,\n     *   angle: 45,\n     *   left: 400,\n     *   top: 400,\n     *   originX: 'left',\n     *   originY: 'top'\n     * });\n     * @example <caption>Stretched overlayImage #1 - width/height correspond to canvas width/height</caption>\n     * fabric.Image.fromURL('http://fabricjs.com/assets/jail_cell_bars.png', function(img, isError) {\n     *    img.set({width: canvas.width, height: canvas.height, originX: 'left', originY: 'top'});\n     *    canvas.setOverlayImage(img, canvas.renderAll.bind(canvas));\n     * });\n     * @example <caption>Stretched overlayImage #2 - width/height correspond to canvas width/height</caption>\n     * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n     *   width: canvas.width,\n     *   height: canvas.height,\n     *   // Needed to position overlayImage at 0/0\n     *   originX: 'left',\n     *   originY: 'top'\n     * });\n     * @example <caption>overlayImage loaded from cross-origin</caption>\n     * canvas.setOverlayImage('http://fabricjs.com/assets/jail_cell_bars.png', canvas.renderAll.bind(canvas), {\n     *   opacity: 0.5,\n     *   angle: 45,\n     *   left: 400,\n     *   top: 400,\n     *   originX: 'left',\n     *   originY: 'top',\n     *   crossOrigin: 'anonymous'\n     * });\n     */\n    setOverlayImage: function (image, callback, options) {\n      return this.__setBgOverlayImage('overlayImage', image, callback, options);\n    },\n\n    /**\n     * Sets {@link fabric.StaticCanvas#backgroundImage|background image} for this canvas\n     * @param {(fabric.Image|String)} image fabric.Image instance or URL of an image to set background to\n     * @param {Function} callback Callback to invoke when image is loaded and set as background\n     * @param {Object} [options] Optional options to set for the {@link fabric.Image|background image}.\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     * @see {@link http://jsfiddle.net/djnr8o7a/28/|jsFiddle demo}\n     * @example <caption>Normal backgroundImage with left/top = 0</caption>\n     * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n     *   // Needed to position backgroundImage at 0/0\n     *   originX: 'left',\n     *   originY: 'top'\n     * });\n     * @example <caption>backgroundImage with different properties</caption>\n     * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n     *   opacity: 0.5,\n     *   angle: 45,\n     *   left: 400,\n     *   top: 400,\n     *   originX: 'left',\n     *   originY: 'top'\n     * });\n     * @example <caption>Stretched backgroundImage #1 - width/height correspond to canvas width/height</caption>\n     * fabric.Image.fromURL('http://fabricjs.com/assets/honey_im_subtle.png', function(img, isError) {\n     *    img.set({width: canvas.width, height: canvas.height, originX: 'left', originY: 'top'});\n     *    canvas.setBackgroundImage(img, canvas.renderAll.bind(canvas));\n     * });\n     * @example <caption>Stretched backgroundImage #2 - width/height correspond to canvas width/height</caption>\n     * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n     *   width: canvas.width,\n     *   height: canvas.height,\n     *   // Needed to position backgroundImage at 0/0\n     *   originX: 'left',\n     *   originY: 'top'\n     * });\n     * @example <caption>backgroundImage loaded from cross-origin</caption>\n     * canvas.setBackgroundImage('http://fabricjs.com/assets/honey_im_subtle.png', canvas.renderAll.bind(canvas), {\n     *   opacity: 0.5,\n     *   angle: 45,\n     *   left: 400,\n     *   top: 400,\n     *   originX: 'left',\n     *   originY: 'top',\n     *   crossOrigin: 'anonymous'\n     * });\n     */\n    // TODO: fix stretched examples\n    setBackgroundImage: function (image, callback, options) {\n      return this.__setBgOverlayImage('backgroundImage', image, callback, options);\n    },\n\n    /**\n     * Sets {@link fabric.StaticCanvas#overlayColor|foreground color} for this canvas\n     * @param {(String|fabric.Pattern)} overlayColor Color or pattern to set foreground color to\n     * @param {Function} callback Callback to invoke when foreground color is set\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     * @see {@link http://jsfiddle.net/fabricjs/pB55h/|jsFiddle demo}\n     * @example <caption>Normal overlayColor - color value</caption>\n     * canvas.setOverlayColor('rgba(255, 73, 64, 0.6)', canvas.renderAll.bind(canvas));\n     * @example <caption>fabric.Pattern used as overlayColor</caption>\n     * canvas.setOverlayColor({\n     *   source: 'http://fabricjs.com/assets/escheresque_ste.png'\n     * }, canvas.renderAll.bind(canvas));\n     * @example <caption>fabric.Pattern used as overlayColor with repeat and offset</caption>\n     * canvas.setOverlayColor({\n     *   source: 'http://fabricjs.com/assets/escheresque_ste.png',\n     *   repeat: 'repeat',\n     *   offsetX: 200,\n     *   offsetY: 100\n     * }, canvas.renderAll.bind(canvas));\n     */\n    setOverlayColor: function(overlayColor, callback) {\n      return this.__setBgOverlayColor('overlayColor', overlayColor, callback);\n    },\n\n    /**\n     * Sets {@link fabric.StaticCanvas#backgroundColor|background color} for this canvas\n     * @param {(String|fabric.Pattern)} backgroundColor Color or pattern to set background color to\n     * @param {Function} callback Callback to invoke when background color is set\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     * @see {@link http://jsfiddle.net/fabricjs/hXzvk/|jsFiddle demo}\n     * @example <caption>Normal backgroundColor - color value</caption>\n     * canvas.setBackgroundColor('rgba(255, 73, 64, 0.6)', canvas.renderAll.bind(canvas));\n     * @example <caption>fabric.Pattern used as backgroundColor</caption>\n     * canvas.setBackgroundColor({\n     *   source: 'http://fabricjs.com/assets/escheresque_ste.png'\n     * }, canvas.renderAll.bind(canvas));\n     * @example <caption>fabric.Pattern used as backgroundColor with repeat and offset</caption>\n     * canvas.setBackgroundColor({\n     *   source: 'http://fabricjs.com/assets/escheresque_ste.png',\n     *   repeat: 'repeat',\n     *   offsetX: 200,\n     *   offsetY: 100\n     * }, canvas.renderAll.bind(canvas));\n     */\n    setBackgroundColor: function(backgroundColor, callback) {\n      return this.__setBgOverlayColor('backgroundColor', backgroundColor, callback);\n    },\n\n    /**\n     * @private\n     * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundImage|backgroundImage}\n     * or {@link fabric.StaticCanvas#overlayImage|overlayImage})\n     * @param {(fabric.Image|String|null)} image fabric.Image instance, URL of an image or null to set background or overlay to\n     * @param {Function} callback Callback to invoke when image is loaded and set as background or overlay. The first argument is the created image, the second argument is a flag indicating whether an error occurred or not.\n     * @param {Object} [options] Optional options to set for the {@link fabric.Image|image}.\n     */\n    __setBgOverlayImage: function(property, image, callback, options) {\n      if (typeof image === 'string') {\n        fabric.util.loadImage(image, function(img, isError) {\n          if (img) {\n            var instance = new fabric.Image(img, options);\n            this[property] = instance;\n            instance.canvas = this;\n          }\n          callback && callback(img, isError);\n        }, this, options && options.crossOrigin);\n      }\n      else {\n        options && image.setOptions(options);\n        this[property] = image;\n        image && (image.canvas = this);\n        callback && callback(image, false);\n      }\n\n      return this;\n    },\n\n    /**\n     * @private\n     * @param {String} property Property to set ({@link fabric.StaticCanvas#backgroundColor|backgroundColor}\n     * or {@link fabric.StaticCanvas#overlayColor|overlayColor})\n     * @param {(Object|String|null)} color Object with pattern information, color value or null\n     * @param {Function} [callback] Callback is invoked when color is set\n     */\n    __setBgOverlayColor: function(property, color, callback) {\n      this[property] = color;\n      this._initGradient(color, property);\n      this._initPattern(color, property, callback);\n      return this;\n    },\n\n    /**\n     * @private\n     */\n    _createCanvasElement: function() {\n      var element = createCanvasElement();\n      if (!element) {\n        throw CANVAS_INIT_ERROR;\n      }\n      if (!element.style) {\n        element.style = { };\n      }\n      if (typeof element.getContext === 'undefined') {\n        throw CANVAS_INIT_ERROR;\n      }\n      return element;\n    },\n\n    /**\n     * @private\n     * @param {Object} [options] Options object\n     */\n    _initOptions: function (options) {\n      var lowerCanvasEl = this.lowerCanvasEl;\n      this._setOptions(options);\n\n      this.width = this.width || parseInt(lowerCanvasEl.width, 10) || 0;\n      this.height = this.height || parseInt(lowerCanvasEl.height, 10) || 0;\n\n      if (!this.lowerCanvasEl.style) {\n        return;\n      }\n\n      lowerCanvasEl.width = this.width;\n      lowerCanvasEl.height = this.height;\n\n      lowerCanvasEl.style.width = this.width + 'px';\n      lowerCanvasEl.style.height = this.height + 'px';\n\n      this.viewportTransform = this.viewportTransform.slice();\n    },\n\n    /**\n     * Creates a bottom canvas\n     * @private\n     * @param {HTMLElement} [canvasEl]\n     */\n    _createLowerCanvas: function (canvasEl) {\n      // canvasEl === 'HTMLCanvasElement' does not work on jsdom/node\n      if (canvasEl && canvasEl.getContext) {\n        this.lowerCanvasEl = canvasEl;\n      }\n      else {\n        this.lowerCanvasEl = fabric.util.getById(canvasEl) || this._createCanvasElement();\n      }\n\n      fabric.util.addClass(this.lowerCanvasEl, 'lower-canvas');\n      this._originalCanvasStyle = this.lowerCanvasEl.style;\n      if (this.interactive) {\n        this._applyCanvasStyle(this.lowerCanvasEl);\n      }\n\n      this.contextContainer = this.lowerCanvasEl.getContext('2d');\n    },\n\n    /**\n     * Returns canvas width (in px)\n     * @return {Number}\n     */\n    getWidth: function () {\n      return this.width;\n    },\n\n    /**\n     * Returns canvas height (in px)\n     * @return {Number}\n     */\n    getHeight: function () {\n      return this.height;\n    },\n\n    /**\n     * Sets width of this canvas instance\n     * @param {Number|String} value                         Value to set width to\n     * @param {Object}        [options]                     Options object\n     * @param {Boolean}       [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n     * @param {Boolean}       [options.cssOnly=false]       Set the given dimensions only as css dimensions\n     * @return {fabric.Canvas} instance\n     * @chainable true\n     */\n    setWidth: function (value, options) {\n      return this.setDimensions({ width: value }, options);\n    },\n\n    /**\n     * Sets height of this canvas instance\n     * @param {Number|String} value                         Value to set height to\n     * @param {Object}        [options]                     Options object\n     * @param {Boolean}       [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n     * @param {Boolean}       [options.cssOnly=false]       Set the given dimensions only as css dimensions\n     * @return {fabric.Canvas} instance\n     * @chainable true\n     */\n    setHeight: function (value, options) {\n      return this.setDimensions({ height: value }, options);\n    },\n\n    /**\n     * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em)\n     * @param {Object}        dimensions                    Object with width/height properties\n     * @param {Number|String} [dimensions.width]            Width of canvas element\n     * @param {Number|String} [dimensions.height]           Height of canvas element\n     * @param {Object}        [options]                     Options object\n     * @param {Boolean}       [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions\n     * @param {Boolean}       [options.cssOnly=false]       Set the given dimensions only as css dimensions\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    setDimensions: function (dimensions, options) {\n      var cssValue;\n\n      options = options || {};\n\n      for (var prop in dimensions) {\n        cssValue = dimensions[prop];\n\n        if (!options.cssOnly) {\n          this._setBackstoreDimension(prop, dimensions[prop]);\n          cssValue += 'px';\n          this.hasLostContext = true;\n        }\n\n        if (!options.backstoreOnly) {\n          this._setCssDimension(prop, cssValue);\n        }\n      }\n      if (this._isCurrentlyDrawing) {\n        this.freeDrawingBrush && this.freeDrawingBrush._setBrushStyles(this.contextTop);\n      }\n      this._initRetinaScaling();\n      this.calcOffset();\n\n      if (!options.cssOnly) {\n        this.requestRenderAll();\n      }\n\n      return this;\n    },\n\n    /**\n     * Helper for setting width/height\n     * @private\n     * @param {String} prop property (width|height)\n     * @param {Number} value value to set property to\n     * @return {fabric.Canvas} instance\n     * @chainable true\n     */\n    _setBackstoreDimension: function (prop, value) {\n      this.lowerCanvasEl[prop] = value;\n\n      if (this.upperCanvasEl) {\n        this.upperCanvasEl[prop] = value;\n      }\n\n      if (this.cacheCanvasEl) {\n        this.cacheCanvasEl[prop] = value;\n      }\n\n      this[prop] = value;\n\n      return this;\n    },\n\n    /**\n     * Helper for setting css width/height\n     * @private\n     * @param {String} prop property (width|height)\n     * @param {String} value value to set property to\n     * @return {fabric.Canvas} instance\n     * @chainable true\n     */\n    _setCssDimension: function (prop, value) {\n      this.lowerCanvasEl.style[prop] = value;\n\n      if (this.upperCanvasEl) {\n        this.upperCanvasEl.style[prop] = value;\n      }\n\n      if (this.wrapperEl) {\n        this.wrapperEl.style[prop] = value;\n      }\n\n      return this;\n    },\n\n    /**\n     * Returns canvas zoom level\n     * @return {Number}\n     */\n    getZoom: function () {\n      return this.viewportTransform[0];\n    },\n\n    /**\n     * Sets viewport transformation of this canvas instance\n     * @param {Array} vpt a Canvas 2D API transform matrix\n     * @return {fabric.Canvas} instance\n     * @chainable true\n     */\n    setViewportTransform: function (vpt) {\n      var activeObject = this._activeObject,\n          backgroundObject = this.backgroundImage,\n          overlayObject = this.overlayImage,\n          object, i, len;\n      this.viewportTransform = vpt;\n      for (i = 0, len = this._objects.length; i < len; i++) {\n        object = this._objects[i];\n        object.group || object.setCoords(true);\n      }\n      if (activeObject) {\n        activeObject.setCoords();\n      }\n      if (backgroundObject) {\n        backgroundObject.setCoords(true);\n      }\n      if (overlayObject) {\n        overlayObject.setCoords(true);\n      }\n      this.calcViewportBoundaries();\n      this.renderOnAddRemove && this.requestRenderAll();\n      return this;\n    },\n\n    /**\n     * Sets zoom level of this canvas instance, the zoom centered around point\n     * meaning that following zoom to point with the same point will have the visual\n     * effect of the zoom originating from that point. The point won't move.\n     * It has nothing to do with canvas center or visual center of the viewport.\n     * @param {fabric.Point} point to zoom with respect to\n     * @param {Number} value to set zoom to, less than 1 zooms out\n     * @return {fabric.Canvas} instance\n     * @chainable true\n     */\n    zoomToPoint: function (point, value) {\n      // TODO: just change the scale, preserve other transformations\n      var before = point, vpt = this.viewportTransform.slice(0);\n      point = transformPoint(point, invertTransform(this.viewportTransform));\n      vpt[0] = value;\n      vpt[3] = value;\n      var after = transformPoint(point, vpt);\n      vpt[4] += before.x - after.x;\n      vpt[5] += before.y - after.y;\n      return this.setViewportTransform(vpt);\n    },\n\n    /**\n     * Sets zoom level of this canvas instance\n     * @param {Number} value to set zoom to, less than 1 zooms out\n     * @return {fabric.Canvas} instance\n     * @chainable true\n     */\n    setZoom: function (value) {\n      this.zoomToPoint(new fabric.Point(0, 0), value);\n      return this;\n    },\n\n    /**\n     * Pan viewport so as to place point at top left corner of canvas\n     * @param {fabric.Point} point to move to\n     * @return {fabric.Canvas} instance\n     * @chainable true\n     */\n    absolutePan: function (point) {\n      var vpt = this.viewportTransform.slice(0);\n      vpt[4] = -point.x;\n      vpt[5] = -point.y;\n      return this.setViewportTransform(vpt);\n    },\n\n    /**\n     * Pans viewpoint relatively\n     * @param {fabric.Point} point (position vector) to move by\n     * @return {fabric.Canvas} instance\n     * @chainable true\n     */\n    relativePan: function (point) {\n      return this.absolutePan(new fabric.Point(\n        -point.x - this.viewportTransform[4],\n        -point.y - this.viewportTransform[5]\n      ));\n    },\n\n    /**\n     * Returns &lt;canvas> element corresponding to this instance\n     * @return {HTMLCanvasElement}\n     */\n    getElement: function () {\n      return this.lowerCanvasEl;\n    },\n\n    /**\n     * @private\n     * @param {fabric.Object} obj Object that was added\n     */\n    _onObjectAdded: function(obj) {\n      this.stateful && obj.setupState();\n      obj._set('canvas', this);\n      obj.setCoords();\n      this.fire('object:added', { target: obj });\n      obj.fire('added');\n    },\n\n    /**\n     * @private\n     * @param {fabric.Object} obj Object that was removed\n     */\n    _onObjectRemoved: function(obj) {\n      this.fire('object:removed', { target: obj });\n      obj.fire('removed');\n      delete obj.canvas;\n    },\n\n    /**\n     * Clears specified context of canvas element\n     * @param {CanvasRenderingContext2D} ctx Context to clear\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    clearContext: function(ctx) {\n      ctx.clearRect(0, 0, this.width, this.height);\n      return this;\n    },\n\n    /**\n     * Returns context of canvas where objects are drawn\n     * @return {CanvasRenderingContext2D}\n     */\n    getContext: function () {\n      return this.contextContainer;\n    },\n\n    /**\n     * Clears all contexts (background, main, top) of an instance\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    clear: function () {\n      this.remove.apply(this, this.getObjects());\n      this.backgroundImage = null;\n      this.overlayImage = null;\n      this.backgroundColor = '';\n      this.overlayColor = '';\n      if (this._hasITextHandlers) {\n        this.off('mouse:up', this._mouseUpITextHandler);\n        this._iTextInstances = null;\n        this._hasITextHandlers = false;\n      }\n      this.clearContext(this.contextContainer);\n      this.fire('canvas:cleared');\n      this.renderOnAddRemove && this.requestRenderAll();\n      return this;\n    },\n\n    /**\n     * Renders the canvas\n     * @return {fabric.Canvas} instance\n     * @chainable\n     */\n    renderAll: function () {\n      var canvasToDrawOn = this.contextContainer;\n      this.renderCanvas(canvasToDrawOn, this._objects);\n      return this;\n    },\n\n    /**\n     * Function created to be instance bound at initialization\n     * used in requestAnimationFrame rendering\n     * Let the fabricJS call it. If you call it manually you could have more\n     * animationFrame stacking on to of each other\n     * for an imperative rendering, use canvas.renderAll\n     * @private\n     * @return {fabric.Canvas} instance\n     * @chainable\n     */\n    renderAndReset: function() {\n      this.isRendering = 0;\n      this.renderAll();\n    },\n\n    /**\n     * Append a renderAll request to next animation frame.\n     * unless one is already in progress, in that case nothing is done\n     * a boolean flag will avoid appending more.\n     * @return {fabric.Canvas} instance\n     * @chainable\n     */\n    requestRenderAll: function () {\n      if (!this.isRendering) {\n        this.isRendering = fabric.util.requestAnimFrame(this.renderAndResetBound);\n      }\n      return this;\n    },\n\n    /**\n     * Calculate the position of the 4 corner of canvas with current viewportTransform.\n     * helps to determinate when an object is in the current rendering viewport using\n     * object absolute coordinates ( aCoords )\n     * @return {Object} points.tl\n     * @chainable\n     */\n    calcViewportBoundaries: function() {\n      var points = { }, width = this.width, height = this.height,\n          iVpt = invertTransform(this.viewportTransform);\n      points.tl = transformPoint({ x: 0, y: 0 }, iVpt);\n      points.br = transformPoint({ x: width, y: height }, iVpt);\n      points.tr = new fabric.Point(points.br.x, points.tl.y);\n      points.bl = new fabric.Point(points.tl.x, points.br.y);\n      this.vptCoords = points;\n      return points;\n    },\n\n    cancelRequestedRender: function() {\n      if (this.isRendering) {\n        fabric.util.cancelAnimFrame(this.isRendering);\n        this.isRendering = 0;\n      }\n    },\n\n    /**\n     * Renders background, objects, overlay and controls.\n     * @param {CanvasRenderingContext2D} ctx\n     * @param {Array} objects to render\n     * @return {fabric.Canvas} instance\n     * @chainable\n     */\n    renderCanvas: function(ctx, objects) {\n      var v = this.viewportTransform, path = this.clipPath;\n      this.cancelRequestedRender();\n      this.calcViewportBoundaries();\n      this.clearContext(ctx);\n      fabric.util.setImageSmoothing(ctx, this.imageSmoothingEnabled);\n      this.fire('before:render', { ctx: ctx, });\n      this._renderBackground(ctx);\n\n      ctx.save();\n      //apply viewport transform once for all rendering process\n      ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n      this._renderObjects(ctx, objects);\n      ctx.restore();\n      if (!this.controlsAboveOverlay && this.interactive) {\n        this.drawControls(ctx);\n      }\n      if (path) {\n        path.canvas = this;\n        // needed to setup a couple of variables\n        path.shouldCache();\n        path._transformDone = true;\n        path.renderCache({ forClipping: true });\n        this.drawClipPathOnCanvas(ctx);\n      }\n      this._renderOverlay(ctx);\n      if (this.controlsAboveOverlay && this.interactive) {\n        this.drawControls(ctx);\n      }\n      this.fire('after:render', { ctx: ctx, });\n    },\n\n    /**\n     * Paint the cached clipPath on the lowerCanvasEl\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    drawClipPathOnCanvas: function(ctx) {\n      var v = this.viewportTransform, path = this.clipPath;\n      ctx.save();\n      ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n      // DEBUG: uncomment this line, comment the following\n      // ctx.globalAlpha = 0.4;\n      ctx.globalCompositeOperation = 'destination-in';\n      path.transform(ctx);\n      ctx.scale(1 / path.zoomX, 1 / path.zoomY);\n      ctx.drawImage(path._cacheCanvas, -path.cacheTranslationX, -path.cacheTranslationY);\n      ctx.restore();\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {Array} objects to render\n     */\n    _renderObjects: function(ctx, objects) {\n      var i, len;\n      for (i = 0, len = objects.length; i < len; ++i) {\n        objects[i] && objects[i].render(ctx);\n      }\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {string} property 'background' or 'overlay'\n     */\n    _renderBackgroundOrOverlay: function(ctx, property) {\n      var fill = this[property + 'Color'], object = this[property + 'Image'],\n          v = this.viewportTransform, needsVpt = this[property + 'Vpt'];\n      if (!fill && !object) {\n        return;\n      }\n      if (fill) {\n        ctx.save();\n        ctx.beginPath();\n        ctx.moveTo(0, 0);\n        ctx.lineTo(this.width, 0);\n        ctx.lineTo(this.width, this.height);\n        ctx.lineTo(0, this.height);\n        ctx.closePath();\n        ctx.fillStyle = fill.toLive\n          ? fill.toLive(ctx, this)\n          : fill;\n        if (needsVpt) {\n          ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n        }\n        ctx.transform(1, 0, 0, 1, fill.offsetX || 0, fill.offsetY || 0);\n        var m = fill.gradientTransform || fill.patternTransform;\n        m && ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n        ctx.fill();\n        ctx.restore();\n      }\n      if (object) {\n        ctx.save();\n        if (needsVpt) {\n          ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n        }\n        object.render(ctx);\n        ctx.restore();\n      }\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderBackground: function(ctx) {\n      this._renderBackgroundOrOverlay(ctx, 'background');\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderOverlay: function(ctx) {\n      this._renderBackgroundOrOverlay(ctx, 'overlay');\n    },\n\n    /**\n     * Returns coordinates of a center of canvas.\n     * Returned value is an object with top and left properties\n     * @return {Object} object with \"top\" and \"left\" number values\n     * @deprecated migrate to `getCenterPoint`\n     */\n    getCenter: function () {\n      return {\n        top: this.height / 2,\n        left: this.width / 2\n      };\n    },\n\n    /**\n     * Returns coordinates of a center of canvas.\n     * @return {fabric.Point} \n     */\n    getCenterPoint: function () {\n      return new fabric.Point(this.width / 2, this.height / 2);\n    },\n\n    /**\n     * Centers object horizontally in the canvas\n     * @param {fabric.Object} object Object to center horizontally\n     * @return {fabric.Canvas} thisArg\n     */\n    centerObjectH: function (object) {\n      return this._centerObject(object, new fabric.Point(this.getCenterPoint().x, object.getCenterPoint().y));\n    },\n\n    /**\n     * Centers object vertically in the canvas\n     * @param {fabric.Object} object Object to center vertically\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    centerObjectV: function (object) {\n      return this._centerObject(object, new fabric.Point(object.getCenterPoint().x, this.getCenterPoint().y));\n    },\n\n    /**\n     * Centers object vertically and horizontally in the canvas\n     * @param {fabric.Object} object Object to center vertically and horizontally\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    centerObject: function(object) {\n      var center = this.getCenterPoint();\n      return this._centerObject(object, center);\n    },\n\n    /**\n     * Centers object vertically and horizontally in the viewport\n     * @param {fabric.Object} object Object to center vertically and horizontally\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    viewportCenterObject: function(object) {\n      var vpCenter = this.getVpCenter();\n      return this._centerObject(object, vpCenter);\n    },\n\n    /**\n     * Centers object horizontally in the viewport, object.top is unchanged\n     * @param {fabric.Object} object Object to center vertically and horizontally\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    viewportCenterObjectH: function(object) {\n      var vpCenter = this.getVpCenter();\n      this._centerObject(object, new fabric.Point(vpCenter.x, object.getCenterPoint().y));\n      return this;\n    },\n\n    /**\n     * Centers object Vertically in the viewport, object.top is unchanged\n     * @param {fabric.Object} object Object to center vertically and horizontally\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    viewportCenterObjectV: function(object) {\n      var vpCenter = this.getVpCenter();\n\n      return this._centerObject(object, new fabric.Point(object.getCenterPoint().x, vpCenter.y));\n    },\n\n    /**\n     * Calculate the point in canvas that correspond to the center of actual viewport.\n     * @return {fabric.Point} vpCenter, viewport center\n     * @chainable\n     */\n    getVpCenter: function() {\n      var center = this.getCenterPoint(),\n          iVpt = invertTransform(this.viewportTransform);\n      return transformPoint(center, iVpt);\n    },\n\n    /**\n     * @private\n     * @param {fabric.Object} object Object to center\n     * @param {fabric.Point} center Center point\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    _centerObject: function(object, center) {\n      object.setPositionByOrigin(center, 'center', 'center');\n      object.setCoords();\n      this.renderOnAddRemove && this.requestRenderAll();\n      return this;\n    },\n\n    /**\n     * Returns dataless JSON representation of canvas\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {String} json string\n     */\n    toDatalessJSON: function (propertiesToInclude) {\n      return this.toDatalessObject(propertiesToInclude);\n    },\n\n    /**\n     * Returns object representation of canvas\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toObject: function (propertiesToInclude) {\n      return this._toObjectMethod('toObject', propertiesToInclude);\n    },\n\n    /**\n     * Returns dataless object representation of canvas\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toDatalessObject: function (propertiesToInclude) {\n      return this._toObjectMethod('toDatalessObject', propertiesToInclude);\n    },\n\n    /**\n     * @private\n     */\n    _toObjectMethod: function (methodName, propertiesToInclude) {\n\n      var clipPath = this.clipPath, data = {\n        version: fabric.version,\n        objects: this._toObjects(methodName, propertiesToInclude),\n      };\n      if (clipPath && !clipPath.excludeFromExport) {\n        data.clipPath = this._toObject(this.clipPath, methodName, propertiesToInclude);\n      }\n      extend(data, this.__serializeBgOverlay(methodName, propertiesToInclude));\n\n      fabric.util.populateWithProperties(this, data, propertiesToInclude);\n\n      return data;\n    },\n\n    /**\n     * @private\n     */\n    _toObjects: function(methodName, propertiesToInclude) {\n      return this._objects.filter(function(object) {\n        return !object.excludeFromExport;\n      }).map(function(instance) {\n        return this._toObject(instance, methodName, propertiesToInclude);\n      }, this);\n    },\n\n    /**\n     * @private\n     */\n    _toObject: function(instance, methodName, propertiesToInclude) {\n      var originalValue;\n\n      if (!this.includeDefaultValues) {\n        originalValue = instance.includeDefaultValues;\n        instance.includeDefaultValues = false;\n      }\n\n      var object = instance[methodName](propertiesToInclude);\n      if (!this.includeDefaultValues) {\n        instance.includeDefaultValues = originalValue;\n      }\n      return object;\n    },\n\n    /**\n     * @private\n     */\n    __serializeBgOverlay: function(methodName, propertiesToInclude) {\n      var data = {}, bgImage = this.backgroundImage, overlayImage = this.overlayImage,\n          bgColor = this.backgroundColor, overlayColor = this.overlayColor;\n\n      if (bgColor && bgColor.toObject) {\n        if (!bgColor.excludeFromExport) {\n          data.background = bgColor.toObject(propertiesToInclude);\n        }\n      }\n      else if (bgColor) {\n        data.background = bgColor;\n      }\n\n      if (overlayColor && overlayColor.toObject) {\n        if (!overlayColor.excludeFromExport) {\n          data.overlay = overlayColor.toObject(propertiesToInclude);\n        }\n      }\n      else if (overlayColor) {\n        data.overlay = overlayColor;\n      }\n\n      if (bgImage && !bgImage.excludeFromExport) {\n        data.backgroundImage = this._toObject(bgImage, methodName, propertiesToInclude);\n      }\n      if (overlayImage && !overlayImage.excludeFromExport) {\n        data.overlayImage = this._toObject(overlayImage, methodName, propertiesToInclude);\n      }\n\n      return data;\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * When true, getSvgTransform() will apply the StaticCanvas.viewportTransform to the SVG transformation. When true,\n     * a zoomed canvas will then produce zoomed SVG output.\n     * @type Boolean\n     * @default\n     */\n    svgViewportTransformation: true,\n\n    /**\n     * Returns SVG representation of canvas\n     * @function\n     * @param {Object} [options] Options object for SVG output\n     * @param {Boolean} [options.suppressPreamble=false] If true xml tag is not included\n     * @param {Object} [options.viewBox] SVG viewbox object\n     * @param {Number} [options.viewBox.x] x-coordinate of viewbox\n     * @param {Number} [options.viewBox.y] y-coordinate of viewbox\n     * @param {Number} [options.viewBox.width] Width of viewbox\n     * @param {Number} [options.viewBox.height] Height of viewbox\n     * @param {String} [options.encoding=UTF-8] Encoding of SVG output\n     * @param {String} [options.width] desired width of svg with or without units\n     * @param {String} [options.height] desired height of svg with or without units\n     * @param {Function} [reviver] Method for further parsing of svg elements, called after each fabric object converted into svg representation.\n     * @return {String} SVG string\n     * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n     * @see {@link http://jsfiddle.net/fabricjs/jQ3ZZ/|jsFiddle demo}\n     * @example <caption>Normal SVG output</caption>\n     * var svg = canvas.toSVG();\n     * @example <caption>SVG output without preamble (without &lt;?xml ../>)</caption>\n     * var svg = canvas.toSVG({suppressPreamble: true});\n     * @example <caption>SVG output with viewBox attribute</caption>\n     * var svg = canvas.toSVG({\n     *   viewBox: {\n     *     x: 100,\n     *     y: 100,\n     *     width: 200,\n     *     height: 300\n     *   }\n     * });\n     * @example <caption>SVG output with different encoding (default: UTF-8)</caption>\n     * var svg = canvas.toSVG({encoding: 'ISO-8859-1'});\n     * @example <caption>Modify SVG output with reviver function</caption>\n     * var svg = canvas.toSVG(null, function(svg) {\n     *   return svg.replace('stroke-dasharray: ; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; ', '');\n     * });\n     */\n    toSVG: function(options, reviver) {\n      options || (options = { });\n      options.reviver = reviver;\n      var markup = [];\n\n      this._setSVGPreamble(markup, options);\n      this._setSVGHeader(markup, options);\n      if (this.clipPath) {\n        markup.push('<g clip-path=\"url(#' + this.clipPath.clipPathId + ')\" >\\n');\n      }\n      this._setSVGBgOverlayColor(markup, 'background');\n      this._setSVGBgOverlayImage(markup, 'backgroundImage', reviver);\n      this._setSVGObjects(markup, reviver);\n      if (this.clipPath) {\n        markup.push('</g>\\n');\n      }\n      this._setSVGBgOverlayColor(markup, 'overlay');\n      this._setSVGBgOverlayImage(markup, 'overlayImage', reviver);\n\n      markup.push('</svg>');\n\n      return markup.join('');\n    },\n\n    /**\n     * @private\n     */\n    _setSVGPreamble: function(markup, options) {\n      if (options.suppressPreamble) {\n        return;\n      }\n      markup.push(\n        '<?xml version=\"1.0\" encoding=\"', (options.encoding || 'UTF-8'), '\" standalone=\"no\" ?>\\n',\n        '<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" ',\n        '\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\\n'\n      );\n    },\n\n    /**\n     * @private\n     */\n    _setSVGHeader: function(markup, options) {\n      var width = options.width || this.width,\n          height = options.height || this.height,\n          vpt, viewBox = 'viewBox=\"0 0 ' + this.width + ' ' + this.height + '\" ',\n          NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n\n      if (options.viewBox) {\n        viewBox = 'viewBox=\"' +\n                options.viewBox.x + ' ' +\n                options.viewBox.y + ' ' +\n                options.viewBox.width + ' ' +\n                options.viewBox.height + '\" ';\n      }\n      else {\n        if (this.svgViewportTransformation) {\n          vpt = this.viewportTransform;\n          viewBox = 'viewBox=\"' +\n                  toFixed(-vpt[4] / vpt[0], NUM_FRACTION_DIGITS) + ' ' +\n                  toFixed(-vpt[5] / vpt[3], NUM_FRACTION_DIGITS) + ' ' +\n                  toFixed(this.width / vpt[0], NUM_FRACTION_DIGITS) + ' ' +\n                  toFixed(this.height / vpt[3], NUM_FRACTION_DIGITS) + '\" ';\n        }\n      }\n\n      markup.push(\n        '<svg ',\n        'xmlns=\"http://www.w3.org/2000/svg\" ',\n        'xmlns:xlink=\"http://www.w3.org/1999/xlink\" ',\n        'version=\"1.1\" ',\n        'width=\"', width, '\" ',\n        'height=\"', height, '\" ',\n        viewBox,\n        'xml:space=\"preserve\">\\n',\n        '<desc>Created with Fabric.js ', fabric.version, '</desc>\\n',\n        '<defs>\\n',\n        this.createSVGFontFacesMarkup(),\n        this.createSVGRefElementsMarkup(),\n        this.createSVGClipPathMarkup(options),\n        '</defs>\\n'\n      );\n    },\n\n    createSVGClipPathMarkup: function(options) {\n      var clipPath = this.clipPath;\n      if (clipPath) {\n        clipPath.clipPathId = 'CLIPPATH_' + fabric.Object.__uid++;\n        return  '<clipPath id=\"' + clipPath.clipPathId + '\" >\\n' +\n          this.clipPath.toClipPathSVG(options.reviver) +\n          '</clipPath>\\n';\n      }\n      return '';\n    },\n\n    /**\n     * Creates markup containing SVG referenced elements like patterns, gradients etc.\n     * @return {String}\n     */\n    createSVGRefElementsMarkup: function() {\n      var _this = this,\n          markup = ['background', 'overlay'].map(function(prop) {\n            var fill = _this[prop + 'Color'];\n            if (fill && fill.toLive) {\n              var shouldTransform = _this[prop + 'Vpt'], vpt = _this.viewportTransform,\n                  object = {\n                    width: _this.width / (shouldTransform ? vpt[0] : 1),\n                    height: _this.height / (shouldTransform ? vpt[3] : 1)\n                  };\n              return fill.toSVG(\n                object,\n                { additionalTransform: shouldTransform ? fabric.util.matrixToSVG(vpt) : '' }\n              );\n            }\n          });\n      return markup.join('');\n    },\n\n    /**\n     * Creates markup containing SVG font faces,\n     * font URLs for font faces must be collected by developers\n     * and are not extracted from the DOM by fabricjs\n     * @param {Array} objects Array of fabric objects\n     * @return {String}\n     */\n    createSVGFontFacesMarkup: function() {\n      var markup = '', fontList = { }, obj, fontFamily,\n          style, row, rowIndex, _char, charIndex, i, len,\n          fontPaths = fabric.fontPaths, objects = [];\n\n      this._objects.forEach(function add(object) {\n        objects.push(object);\n        if (object._objects) {\n          object._objects.forEach(add);\n        }\n      });\n\n      for (i = 0, len = objects.length; i < len; i++) {\n        obj = objects[i];\n        fontFamily = obj.fontFamily;\n        if (obj.type.indexOf('text') === -1 || fontList[fontFamily] || !fontPaths[fontFamily]) {\n          continue;\n        }\n        fontList[fontFamily] = true;\n        if (!obj.styles) {\n          continue;\n        }\n        style = obj.styles;\n        for (rowIndex in style) {\n          row = style[rowIndex];\n          for (charIndex in row) {\n            _char = row[charIndex];\n            fontFamily = _char.fontFamily;\n            if (!fontList[fontFamily] && fontPaths[fontFamily]) {\n              fontList[fontFamily] = true;\n            }\n          }\n        }\n      }\n\n      for (var j in fontList) {\n        markup += [\n          '\\t\\t@font-face {\\n',\n          '\\t\\t\\tfont-family: \\'', j, '\\';\\n',\n          '\\t\\t\\tsrc: url(\\'', fontPaths[j], '\\');\\n',\n          '\\t\\t}\\n'\n        ].join('');\n      }\n\n      if (markup) {\n        markup = [\n          '\\t<style type=\"text/css\">',\n          '<![CDATA[\\n',\n          markup,\n          ']]>',\n          '</style>\\n'\n        ].join('');\n      }\n\n      return markup;\n    },\n\n    /**\n     * @private\n     */\n    _setSVGObjects: function(markup, reviver) {\n      var instance, i, len, objects = this._objects;\n      for (i = 0, len = objects.length; i < len; i++) {\n        instance = objects[i];\n        if (instance.excludeFromExport) {\n          continue;\n        }\n        this._setSVGObject(markup, instance, reviver);\n      }\n    },\n\n    /**\n     * @private\n     */\n    _setSVGObject: function(markup, instance, reviver) {\n      markup.push(instance.toSVG(reviver));\n    },\n\n    /**\n     * @private\n     */\n    _setSVGBgOverlayImage: function(markup, property, reviver) {\n      if (this[property] && !this[property].excludeFromExport && this[property].toSVG) {\n        markup.push(this[property].toSVG(reviver));\n      }\n    },\n\n    /**\n     * @private\n     */\n    _setSVGBgOverlayColor: function(markup, property) {\n      var filler = this[property + 'Color'], vpt = this.viewportTransform, finalWidth = this.width,\n          finalHeight = this.height;\n      if (!filler) {\n        return;\n      }\n      if (filler.toLive) {\n        var repeat = filler.repeat, iVpt = fabric.util.invertTransform(vpt), shouldInvert = this[property + 'Vpt'],\n            additionalTransform = shouldInvert ? fabric.util.matrixToSVG(iVpt) : '';\n        markup.push(\n          '<rect transform=\"' + additionalTransform + ' translate(', finalWidth / 2, ',', finalHeight / 2, ')\"',\n          ' x=\"', filler.offsetX - finalWidth / 2,\n          '\" y=\"', filler.offsetY - finalHeight / 2, '\" ',\n          'width=\"',\n          (repeat === 'repeat-y' || repeat === 'no-repeat'\n            ? filler.source.width\n            : finalWidth ),\n          '\" height=\"',\n          (repeat === 'repeat-x' || repeat === 'no-repeat'\n            ? filler.source.height\n            : finalHeight),\n          '\" fill=\"url(#SVGID_' + filler.id + ')\"',\n          '></rect>\\n'\n        );\n      }\n      else {\n        markup.push(\n          '<rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" ',\n          'fill=\"', filler, '\"',\n          '></rect>\\n'\n        );\n      }\n    },\n    /* _TO_SVG_END_ */\n\n    /**\n     * Moves an object or the objects of a multiple selection\n     * to the bottom of the stack of drawn objects\n     * @param {fabric.Object} object Object to send to back\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    sendToBack: function (object) {\n      if (!object) {\n        return this;\n      }\n      var activeSelection = this._activeObject,\n          i, obj, objs;\n      if (object === activeSelection && object.type === 'activeSelection') {\n        objs = activeSelection._objects;\n        for (i = objs.length; i--;) {\n          obj = objs[i];\n          removeFromArray(this._objects, obj);\n          this._objects.unshift(obj);\n        }\n      }\n      else {\n        removeFromArray(this._objects, object);\n        this._objects.unshift(object);\n      }\n      this.renderOnAddRemove && this.requestRenderAll();\n      return this;\n    },\n\n    /**\n     * Moves an object or the objects of a multiple selection\n     * to the top of the stack of drawn objects\n     * @param {fabric.Object} object Object to send\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    bringToFront: function (object) {\n      if (!object) {\n        return this;\n      }\n      var activeSelection = this._activeObject,\n          i, obj, objs;\n      if (object === activeSelection && object.type === 'activeSelection') {\n        objs = activeSelection._objects;\n        for (i = 0; i < objs.length; i++) {\n          obj = objs[i];\n          removeFromArray(this._objects, obj);\n          this._objects.push(obj);\n        }\n      }\n      else {\n        removeFromArray(this._objects, object);\n        this._objects.push(object);\n      }\n      this.renderOnAddRemove && this.requestRenderAll();\n      return this;\n    },\n\n    /**\n     * Moves an object or a selection down in stack of drawn objects\n     * An optional parameter, intersecting allows to move the object in behind\n     * the first intersecting object. Where intersection is calculated with\n     * bounding box. If no intersection is found, there will not be change in the\n     * stack.\n     * @param {fabric.Object} object Object to send\n     * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    sendBackwards: function (object, intersecting) {\n      if (!object) {\n        return this;\n      }\n      var activeSelection = this._activeObject,\n          i, obj, idx, newIdx, objs, objsMoved = 0;\n\n      if (object === activeSelection && object.type === 'activeSelection') {\n        objs = activeSelection._objects;\n        for (i = 0; i < objs.length; i++) {\n          obj = objs[i];\n          idx = this._objects.indexOf(obj);\n          if (idx > 0 + objsMoved) {\n            newIdx = idx - 1;\n            removeFromArray(this._objects, obj);\n            this._objects.splice(newIdx, 0, obj);\n          }\n          objsMoved++;\n        }\n      }\n      else {\n        idx = this._objects.indexOf(object);\n        if (idx !== 0) {\n          // if object is not on the bottom of stack\n          newIdx = this._findNewLowerIndex(object, idx, intersecting);\n          removeFromArray(this._objects, object);\n          this._objects.splice(newIdx, 0, object);\n        }\n      }\n      this.renderOnAddRemove && this.requestRenderAll();\n      return this;\n    },\n\n    /**\n     * @private\n     */\n    _findNewLowerIndex: function(object, idx, intersecting) {\n      var newIdx, i;\n\n      if (intersecting) {\n        newIdx = idx;\n\n        // traverse down the stack looking for the nearest intersecting object\n        for (i = idx - 1; i >= 0; --i) {\n\n          var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\n                               object.isContainedWithinObject(this._objects[i]) ||\n                               this._objects[i].isContainedWithinObject(object);\n\n          if (isIntersecting) {\n            newIdx = i;\n            break;\n          }\n        }\n      }\n      else {\n        newIdx = idx - 1;\n      }\n\n      return newIdx;\n    },\n\n    /**\n     * Moves an object or a selection up in stack of drawn objects\n     * An optional parameter, intersecting allows to move the object in front\n     * of the first intersecting object. Where intersection is calculated with\n     * bounding box. If no intersection is found, there will not be change in the\n     * stack.\n     * @param {fabric.Object} object Object to send\n     * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    bringForward: function (object, intersecting) {\n      if (!object) {\n        return this;\n      }\n      var activeSelection = this._activeObject,\n          i, obj, idx, newIdx, objs, objsMoved = 0;\n\n      if (object === activeSelection && object.type === 'activeSelection') {\n        objs = activeSelection._objects;\n        for (i = objs.length; i--;) {\n          obj = objs[i];\n          idx = this._objects.indexOf(obj);\n          if (idx < this._objects.length - 1 - objsMoved) {\n            newIdx = idx + 1;\n            removeFromArray(this._objects, obj);\n            this._objects.splice(newIdx, 0, obj);\n          }\n          objsMoved++;\n        }\n      }\n      else {\n        idx = this._objects.indexOf(object);\n        if (idx !== this._objects.length - 1) {\n          // if object is not on top of stack (last item in an array)\n          newIdx = this._findNewUpperIndex(object, idx, intersecting);\n          removeFromArray(this._objects, object);\n          this._objects.splice(newIdx, 0, object);\n        }\n      }\n      this.renderOnAddRemove && this.requestRenderAll();\n      return this;\n    },\n\n    /**\n     * @private\n     */\n    _findNewUpperIndex: function(object, idx, intersecting) {\n      var newIdx, i, len;\n\n      if (intersecting) {\n        newIdx = idx;\n\n        // traverse up the stack looking for the nearest intersecting object\n        for (i = idx + 1, len = this._objects.length; i < len; ++i) {\n\n          var isIntersecting = object.intersectsWithObject(this._objects[i]) ||\n                               object.isContainedWithinObject(this._objects[i]) ||\n                               this._objects[i].isContainedWithinObject(object);\n\n          if (isIntersecting) {\n            newIdx = i;\n            break;\n          }\n        }\n      }\n      else {\n        newIdx = idx + 1;\n      }\n\n      return newIdx;\n    },\n\n    /**\n     * Moves an object to specified level in stack of drawn objects\n     * @param {fabric.Object} object Object to send\n     * @param {Number} index Position to move to\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    moveTo: function (object, index) {\n      removeFromArray(this._objects, object);\n      this._objects.splice(index, 0, object);\n      return this.renderOnAddRemove && this.requestRenderAll();\n    },\n\n    /**\n     * Clears a canvas element and dispose objects\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    dispose: function () {\n      // cancel eventually ongoing renders\n      if (this.isRendering) {\n        fabric.util.cancelAnimFrame(this.isRendering);\n        this.isRendering = 0;\n      }\n      this.forEachObject(function(object) {\n        object.dispose && object.dispose();\n      });\n      this._objects = [];\n      if (this.backgroundImage && this.backgroundImage.dispose) {\n        this.backgroundImage.dispose();\n      }\n      this.backgroundImage = null;\n      if (this.overlayImage && this.overlayImage.dispose) {\n        this.overlayImage.dispose();\n      }\n      this.overlayImage = null;\n      this._iTextInstances = null;\n      this.contextContainer = null;\n      // restore canvas style\n      this.lowerCanvasEl.classList.remove('lower-canvas');\n      fabric.util.setStyle(this.lowerCanvasEl, this._originalCanvasStyle);\n      delete this._originalCanvasStyle;\n      // restore canvas size to original size in case retina scaling was applied\n      this.lowerCanvasEl.setAttribute('width', this.width);\n      this.lowerCanvasEl.setAttribute('height', this.height);\n      fabric.util.cleanUpJsdomNode(this.lowerCanvasEl);\n      this.lowerCanvasEl = undefined;\n      return this;\n    },\n\n    /**\n     * Returns a string representation of an instance\n     * @return {String} string representation of an instance\n     */\n    toString: function () {\n      return '#<fabric.Canvas (' + this.complexity() + '): ' +\n               '{ objects: ' + this._objects.length + ' }>';\n    }\n  });\n\n  extend(fabric.StaticCanvas.prototype, fabric.Observable);\n  extend(fabric.StaticCanvas.prototype, fabric.Collection);\n  extend(fabric.StaticCanvas.prototype, fabric.DataURLExporter);\n\n  extend(fabric.StaticCanvas, /** @lends fabric.StaticCanvas */ {\n\n    /**\n     * @static\n     * @type String\n     * @default\n     */\n    EMPTY_JSON: '{\"objects\": [], \"background\": \"white\"}',\n\n    /**\n     * Provides a way to check support of some of the canvas methods\n     * (either those of HTMLCanvasElement itself, or rendering context)\n     *\n     * @param {String} methodName Method to check support for;\n     *                            Could be one of \"setLineDash\"\n     * @return {Boolean | null} `true` if method is supported (or at least exists),\n     *                          `null` if canvas element or context can not be initialized\n     */\n    supports: function (methodName) {\n      var el = createCanvasElement();\n\n      if (!el || !el.getContext) {\n        return null;\n      }\n\n      var ctx = el.getContext('2d');\n      if (!ctx) {\n        return null;\n      }\n\n      switch (methodName) {\n\n        case 'setLineDash':\n          return typeof ctx.setLineDash !== 'undefined';\n\n        default:\n          return null;\n      }\n    }\n  });\n\n  /**\n   * Returns Object representation of canvas\n   * this alias is provided because if you call JSON.stringify on an instance,\n   * the toJSON object will be invoked if it exists.\n   * Having a toJSON method means you can do JSON.stringify(myCanvas)\n   * @function\n   * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n   * @return {Object} JSON compatible object\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#serialization}\n   * @see {@link http://jsfiddle.net/fabricjs/pec86/|jsFiddle demo}\n   * @example <caption>JSON without additional properties</caption>\n   * var json = canvas.toJSON();\n   * @example <caption>JSON with additional properties included</caption>\n   * var json = canvas.toJSON(['lockMovementX', 'lockMovementY', 'lockRotation', 'lockScalingX', 'lockScalingY']);\n   * @example <caption>JSON without default values</caption>\n   * canvas.includeDefaultValues = false;\n   * var json = canvas.toJSON();\n   */\n  fabric.StaticCanvas.prototype.toJSON = fabric.StaticCanvas.prototype.toObject;\n\n  if (fabric.isLikelyNode) {\n    fabric.StaticCanvas.prototype.createPNGStream = function() {\n      var impl = getNodeCanvas(this.lowerCanvasEl);\n      return impl && impl.createPNGStream();\n    };\n    fabric.StaticCanvas.prototype.createJPEGStream = function(opts) {\n      var impl = getNodeCanvas(this.lowerCanvasEl);\n      return impl && impl.createJPEGStream(opts);\n    };\n  }\n})();\n\n\n/**\n * BaseBrush class\n * @class fabric.BaseBrush\n * @see {@link http://fabricjs.com/freedrawing|Freedrawing demo}\n */\nfabric.BaseBrush = fabric.util.createClass(/** @lends fabric.BaseBrush.prototype */ {\n\n  /**\n   * Color of a brush\n   * @type String\n   * @default\n   */\n  color: 'rgb(0, 0, 0)',\n\n  /**\n   * Width of a brush, has to be a Number, no string literals\n   * @type Number\n   * @default\n   */\n  width: 1,\n\n  /**\n   * Shadow object representing shadow of this shape.\n   * <b>Backwards incompatibility note:</b> This property replaces \"shadowColor\" (String), \"shadowOffsetX\" (Number),\n   * \"shadowOffsetY\" (Number) and \"shadowBlur\" (Number) since v1.2.12\n   * @type fabric.Shadow\n   * @default\n   */\n  shadow: null,\n\n  /**\n   * Line endings style of a brush (one of \"butt\", \"round\", \"square\")\n   * @type String\n   * @default\n   */\n  strokeLineCap: 'round',\n\n  /**\n   * Corner style of a brush (one of \"bevel\", \"round\", \"miter\")\n   * @type String\n   * @default\n   */\n  strokeLineJoin: 'round',\n\n  /**\n   * Maximum miter length (used for strokeLineJoin = \"miter\") of a brush's\n   * @type Number\n   * @default\n   */\n  strokeMiterLimit:         10,\n\n  /**\n   * Stroke Dash Array.\n   * @type Array\n   * @default\n   */\n  strokeDashArray: null,\n\n  /**\n   * When `true`, the free drawing is limited to the whiteboard size. Default to false.\n   * @type Boolean\n   * @default false\n  */\n\n  limitedToCanvasSize: false,\n\n\n  /**\n   * Sets brush styles\n   * @private\n   * @param {CanvasRenderingContext2D} ctx\n   */\n  _setBrushStyles: function (ctx) {\n    ctx.strokeStyle = this.color;\n    ctx.lineWidth = this.width;\n    ctx.lineCap = this.strokeLineCap;\n    ctx.miterLimit = this.strokeMiterLimit;\n    ctx.lineJoin = this.strokeLineJoin;\n    ctx.setLineDash(this.strokeDashArray || []);\n  },\n\n  /**\n   * Sets the transformation on given context\n   * @param {RenderingContext2d} ctx context to render on\n   * @private\n   */\n  _saveAndTransform: function(ctx) {\n    var v = this.canvas.viewportTransform;\n    ctx.save();\n    ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n  },\n\n  /**\n   * Sets brush shadow styles\n   * @private\n   */\n  _setShadow: function() {\n    if (!this.shadow) {\n      return;\n    }\n\n    var canvas = this.canvas,\n        shadow = this.shadow,\n        ctx = canvas.contextTop,\n        zoom = canvas.getZoom();\n    if (canvas && canvas._isRetinaScaling()) {\n      zoom *= fabric.devicePixelRatio;\n    }\n\n    ctx.shadowColor = shadow.color;\n    ctx.shadowBlur = shadow.blur * zoom;\n    ctx.shadowOffsetX = shadow.offsetX * zoom;\n    ctx.shadowOffsetY = shadow.offsetY * zoom;\n  },\n\n  needsFullRender: function() {\n    var color = new fabric.Color(this.color);\n    return color.getAlpha() < 1 || !!this.shadow;\n  },\n\n  /**\n   * Removes brush shadow styles\n   * @private\n   */\n  _resetShadow: function() {\n    var ctx = this.canvas.contextTop;\n\n    ctx.shadowColor = '';\n    ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n  },\n\n  /**\n   * Check is pointer is outside canvas boundaries\n   * @param {Object} pointer\n   * @private\n  */\n  _isOutSideCanvas: function(pointer) {\n    return pointer.x < 0 || pointer.x > this.canvas.getWidth() || pointer.y < 0 || pointer.y > this.canvas.getHeight();\n  }\n});\n\n\n(function() {\n  /**\n   * PencilBrush class\n   * @class fabric.PencilBrush\n   * @extends fabric.BaseBrush\n   */\n  fabric.PencilBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.PencilBrush.prototype */ {\n\n    /**\n     * Discard points that are less than `decimate` pixel distant from each other\n     * @type Number\n     * @default 0.4\n     */\n    decimate: 0.4,\n\n    /**\n     * Draws a straight line between last recorded point to current pointer\n     * Used for `shift` functionality\n     *\n     * @type boolean\n     * @default false\n     */\n    drawStraightLine: false,\n\n    /**\n     * The event modifier key that makes the brush draw a straight line.\n     * If `null` or 'none' or any other string that is not a modifier key the feature is disabled.\n     * @type {'altKey' | 'shiftKey' | 'ctrlKey' | 'none' | undefined | null}\n     */\n    straightLineKey: 'shiftKey',\n\n    /**\n     * Constructor\n     * @param {fabric.Canvas} canvas\n     * @return {fabric.PencilBrush} Instance of a pencil brush\n     */\n    initialize: function(canvas) {\n      this.canvas = canvas;\n      this._points = [];\n    },\n\n    needsFullRender: function () {\n      return this.callSuper('needsFullRender') || this._hasStraightLine;\n    },\n\n    /**\n     * Invoked inside on mouse down and mouse move\n     * @param {Object} pointer\n     */\n    _drawSegment: function (ctx, p1, p2) {\n      var midPoint = p1.midPointFrom(p2);\n      ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n      return midPoint;\n    },\n\n    /**\n     * Invoked on mouse down\n     * @param {Object} pointer\n     */\n    onMouseDown: function(pointer, options) {\n      if (!this.canvas._isMainEvent(options.e)) {\n        return;\n      }\n      this.drawStraightLine = options.e[this.straightLineKey];\n      this._prepareForDrawing(pointer);\n      // capture coordinates immediately\n      // this allows to draw dots (when movement never occurs)\n      this._captureDrawingPath(pointer);\n      this._render();\n    },\n\n    /**\n     * Invoked on mouse move\n     * @param {Object} pointer\n     */\n    onMouseMove: function(pointer, options) {\n      if (!this.canvas._isMainEvent(options.e)) {\n        return;\n      }\n      this.drawStraightLine = options.e[this.straightLineKey];\n      if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n        return;\n      }\n      if (this._captureDrawingPath(pointer) && this._points.length > 1) {\n        if (this.needsFullRender()) {\n          // redraw curve\n          // clear top canvas\n          this.canvas.clearContext(this.canvas.contextTop);\n          this._render();\n        }\n        else {\n          var points = this._points, length = points.length, ctx = this.canvas.contextTop;\n          // draw the curve update\n          this._saveAndTransform(ctx);\n          if (this.oldEnd) {\n            ctx.beginPath();\n            ctx.moveTo(this.oldEnd.x, this.oldEnd.y);\n          }\n          this.oldEnd = this._drawSegment(ctx, points[length - 2], points[length - 1], true);\n          ctx.stroke();\n          ctx.restore();\n        }\n      }\n    },\n\n    /**\n     * Invoked on mouse up\n     */\n    onMouseUp: function(options) {\n      if (!this.canvas._isMainEvent(options.e)) {\n        return true;\n      }\n      this.drawStraightLine = false;\n      this.oldEnd = undefined;\n      this._finalizeAndAddPath();\n      return false;\n    },\n\n    /**\n     * @private\n     * @param {Object} pointer Actual mouse position related to the canvas.\n     */\n    _prepareForDrawing: function(pointer) {\n\n      var p = new fabric.Point(pointer.x, pointer.y);\n\n      this._reset();\n      this._addPoint(p);\n      this.canvas.contextTop.moveTo(p.x, p.y);\n    },\n\n    /**\n     * @private\n     * @param {fabric.Point} point Point to be added to points array\n     */\n    _addPoint: function(point) {\n      if (this._points.length > 1 && point.eq(this._points[this._points.length - 1])) {\n        return false;\n      }\n      if (this.drawStraightLine && this._points.length > 1) {\n        this._hasStraightLine = true;\n        this._points.pop();\n      }\n      this._points.push(point);\n      return true;\n    },\n\n    /**\n     * Clear points array and set contextTop canvas style.\n     * @private\n     */\n    _reset: function() {\n      this._points = [];\n      this._setBrushStyles(this.canvas.contextTop);\n      this._setShadow();\n      this._hasStraightLine = false;\n    },\n\n    /**\n     * @private\n     * @param {Object} pointer Actual mouse position related to the canvas.\n     */\n    _captureDrawingPath: function(pointer) {\n      var pointerPoint = new fabric.Point(pointer.x, pointer.y);\n      return this._addPoint(pointerPoint);\n    },\n\n    /**\n     * Draw a smooth path on the topCanvas using quadraticCurveTo\n     * @private\n     * @param {CanvasRenderingContext2D} [ctx]\n     */\n    _render: function(ctx) {\n      var i, len,\n          p1 = this._points[0],\n          p2 = this._points[1];\n      ctx = ctx || this.canvas.contextTop;\n      this._saveAndTransform(ctx);\n      ctx.beginPath();\n      //if we only have 2 points in the path and they are the same\n      //it means that the user only clicked the canvas without moving the mouse\n      //then we should be drawing a dot. A path isn't drawn between two identical dots\n      //that's why we set them apart a bit\n      if (this._points.length === 2 && p1.x === p2.x && p1.y === p2.y) {\n        var width = this.width / 1000;\n        p1 = new fabric.Point(p1.x, p1.y);\n        p2 = new fabric.Point(p2.x, p2.y);\n        p1.x -= width;\n        p2.x += width;\n      }\n      ctx.moveTo(p1.x, p1.y);\n\n      for (i = 1, len = this._points.length; i < len; i++) {\n        // we pick the point between pi + 1 & pi + 2 as the\n        // end point and p1 as our control point.\n        this._drawSegment(ctx, p1, p2);\n        p1 = this._points[i];\n        p2 = this._points[i + 1];\n      }\n      // Draw last line as a straight line while\n      // we wait for the next point to be able to calculate\n      // the bezier control point\n      ctx.lineTo(p1.x, p1.y);\n      ctx.stroke();\n      ctx.restore();\n    },\n\n    /**\n     * Converts points to SVG path\n     * @param {Array} points Array of points\n     * @return {(string|number)[][]} SVG path commands\n     */\n    convertPointsToSVGPath: function (points) {\n      var correction = this.width / 1000;\n      return fabric.util.getSmoothPathFromPoints(points, correction);\n    },\n\n    /**\n     * @private\n     * @param {(string|number)[][]} pathData SVG path commands\n     * @returns {boolean}\n     */\n    _isEmptySVGPath: function (pathData) {\n      var pathString = fabric.util.joinPath(pathData);\n      return pathString === 'M 0 0 Q 0 0 0 0 L 0 0';\n    },\n\n    /**\n     * Creates fabric.Path object to add on canvas\n     * @param {(string|number)[][]} pathData Path data\n     * @return {fabric.Path} Path to add on canvas\n     */\n    createPath: function(pathData) {\n      var path = new fabric.Path(pathData, {\n        fill: null,\n        stroke: this.color,\n        strokeWidth: this.width,\n        strokeLineCap: this.strokeLineCap,\n        strokeMiterLimit: this.strokeMiterLimit,\n        strokeLineJoin: this.strokeLineJoin,\n        strokeDashArray: this.strokeDashArray,\n      });\n      if (this.shadow) {\n        this.shadow.affectStroke = true;\n        path.shadow = new fabric.Shadow(this.shadow);\n      }\n\n      return path;\n    },\n\n    /**\n     * Decimate points array with the decimate value\n     */\n    decimatePoints: function(points, distance) {\n      if (points.length <= 2) {\n        return points;\n      }\n      var zoom = this.canvas.getZoom(), adjustedDistance = Math.pow(distance / zoom, 2),\n          i, l = points.length - 1, lastPoint = points[0], newPoints = [lastPoint],\n          cDistance;\n      for (i = 1; i < l - 1; i++) {\n        cDistance = Math.pow(lastPoint.x - points[i].x, 2) + Math.pow(lastPoint.y - points[i].y, 2);\n        if (cDistance >= adjustedDistance) {\n          lastPoint = points[i];\n          newPoints.push(lastPoint);\n        }\n      }\n      /**\n       * Add the last point from the original line to the end of the array.\n       * This ensures decimate doesn't delete the last point on the line, and ensures the line is > 1 point.\n       */\n      newPoints.push(points[l]);\n      return newPoints;\n    },\n\n    /**\n     * On mouseup after drawing the path on contextTop canvas\n     * we use the points captured to create an new fabric path object\n     * and add it to the fabric canvas.\n     */\n    _finalizeAndAddPath: function() {\n      var ctx = this.canvas.contextTop;\n      ctx.closePath();\n      if (this.decimate) {\n        this._points = this.decimatePoints(this._points, this.decimate);\n      }\n      var pathData = this.convertPointsToSVGPath(this._points);\n      if (this._isEmptySVGPath(pathData)) {\n        // do not create 0 width/height paths, as they are\n        // rendered inconsistently across browsers\n        // Firefox 4, for example, renders a dot,\n        // whereas Chrome 10 renders nothing\n        this.canvas.requestRenderAll();\n        return;\n      }\n\n      var path = this.createPath(pathData);\n      this.canvas.clearContext(this.canvas.contextTop);\n      this.canvas.fire('before:path:created', { path: path });\n      this.canvas.add(path);\n      this.canvas.requestRenderAll();\n      path.setCoords();\n      this._resetShadow();\n\n\n      // fire event 'path' created\n      this.canvas.fire('path:created', { path: path });\n    }\n  });\n})();\n\n\n/**\n * CircleBrush class\n * @class fabric.CircleBrush\n */\nfabric.CircleBrush = fabric.util.createClass(fabric.BaseBrush, /** @lends fabric.CircleBrush.prototype */ {\n\n  /**\n   * Width of a brush\n   * @type Number\n   * @default\n   */\n  width: 10,\n\n  /**\n   * Constructor\n   * @param {fabric.Canvas} canvas\n   * @return {fabric.CircleBrush} Instance of a circle brush\n   */\n  initialize: function(canvas) {\n    this.canvas = canvas;\n    this.points = [];\n  },\n\n  /**\n   * Invoked inside on mouse down and mouse move\n   * @param {Object} pointer\n   */\n  drawDot: function(pointer) {\n    var point = this.addPoint(pointer),\n        ctx = this.canvas.contextTop;\n    this._saveAndTransform(ctx);\n    this.dot(ctx, point);\n    ctx.restore();\n  },\n\n  dot: function(ctx, point) {\n    ctx.fillStyle = point.fill;\n    ctx.beginPath();\n    ctx.arc(point.x, point.y, point.radius, 0, Math.PI * 2, false);\n    ctx.closePath();\n    ctx.fill();\n  },\n\n  /**\n   * Invoked on mouse down\n   */\n  onMouseDown: function(pointer) {\n    this.points.length = 0;\n    this.canvas.clearContext(this.canvas.contextTop);\n    this._setShadow();\n    this.drawDot(pointer);\n  },\n\n  /**\n   * Render the full state of the brush\n   * @private\n   */\n  _render: function() {\n    var ctx  = this.canvas.contextTop, i, len,\n        points = this.points;\n    this._saveAndTransform(ctx);\n    for (i = 0, len = points.length; i < len; i++) {\n      this.dot(ctx, points[i]);\n    }\n    ctx.restore();\n  },\n\n  /**\n   * Invoked on mouse move\n   * @param {Object} pointer\n   */\n  onMouseMove: function(pointer) {\n    if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n      return;\n    }\n    if (this.needsFullRender()) {\n      this.canvas.clearContext(this.canvas.contextTop);\n      this.addPoint(pointer);\n      this._render();\n    }\n    else {\n      this.drawDot(pointer);\n    }\n  },\n\n  /**\n   * Invoked on mouse up\n   */\n  onMouseUp: function() {\n    var originalRenderOnAddRemove = this.canvas.renderOnAddRemove, i, len;\n    this.canvas.renderOnAddRemove = false;\n\n    var circles = [];\n\n    for (i = 0, len = this.points.length; i < len; i++) {\n      var point = this.points[i],\n          circle = new fabric.Circle({\n            radius: point.radius,\n            left: point.x,\n            top: point.y,\n            originX: 'center',\n            originY: 'center',\n            fill: point.fill\n          });\n\n      this.shadow && (circle.shadow = new fabric.Shadow(this.shadow));\n\n      circles.push(circle);\n    }\n    var group = new fabric.Group(circles);\n    group.canvas = this.canvas;\n\n    this.canvas.fire('before:path:created', { path: group });\n    this.canvas.add(group);\n    this.canvas.fire('path:created', { path: group });\n\n    this.canvas.clearContext(this.canvas.contextTop);\n    this._resetShadow();\n    this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n    this.canvas.requestRenderAll();\n  },\n\n  /**\n   * @param {Object} pointer\n   * @return {fabric.Point} Just added pointer point\n   */\n  addPoint: function(pointer) {\n    var pointerPoint = new fabric.Point(pointer.x, pointer.y),\n\n        circleRadius = fabric.util.getRandomInt(\n          Math.max(0, this.width - 20), this.width + 20) / 2,\n\n        circleColor = new fabric.Color(this.color)\n          .setAlpha(fabric.util.getRandomInt(0, 100) / 100)\n          .toRgba();\n\n    pointerPoint.radius = circleRadius;\n    pointerPoint.fill = circleColor;\n\n    this.points.push(pointerPoint);\n\n    return pointerPoint;\n  }\n});\n\n\n/**\n * SprayBrush class\n * @class fabric.SprayBrush\n */\nfabric.SprayBrush = fabric.util.createClass( fabric.BaseBrush, /** @lends fabric.SprayBrush.prototype */ {\n\n  /**\n   * Width of a spray\n   * @type Number\n   * @default\n   */\n  width:              10,\n\n  /**\n   * Density of a spray (number of dots per chunk)\n   * @type Number\n   * @default\n   */\n  density:            20,\n\n  /**\n   * Width of spray dots\n   * @type Number\n   * @default\n   */\n  dotWidth:           1,\n\n  /**\n   * Width variance of spray dots\n   * @type Number\n   * @default\n   */\n  dotWidthVariance:   1,\n\n  /**\n   * Whether opacity of a dot should be random\n   * @type Boolean\n   * @default\n   */\n  randomOpacity:        false,\n\n  /**\n   * Whether overlapping dots (rectangles) should be removed (for performance reasons)\n   * @type Boolean\n   * @default\n   */\n  optimizeOverlapping:  true,\n\n  /**\n   * Constructor\n   * @param {fabric.Canvas} canvas\n   * @return {fabric.SprayBrush} Instance of a spray brush\n   */\n  initialize: function(canvas) {\n    this.canvas = canvas;\n    this.sprayChunks = [];\n  },\n\n  /**\n   * Invoked on mouse down\n   * @param {Object} pointer\n   */\n  onMouseDown: function(pointer) {\n    this.sprayChunks.length = 0;\n    this.canvas.clearContext(this.canvas.contextTop);\n    this._setShadow();\n\n    this.addSprayChunk(pointer);\n    this.render(this.sprayChunkPoints);\n  },\n\n  /**\n   * Invoked on mouse move\n   * @param {Object} pointer\n   */\n  onMouseMove: function(pointer) {\n    if (this.limitedToCanvasSize === true && this._isOutSideCanvas(pointer)) {\n      return;\n    }\n    this.addSprayChunk(pointer);\n    this.render(this.sprayChunkPoints);\n  },\n\n  /**\n   * Invoked on mouse up\n   */\n  onMouseUp: function() {\n    var originalRenderOnAddRemove = this.canvas.renderOnAddRemove;\n    this.canvas.renderOnAddRemove = false;\n\n    var rects = [];\n\n    for (var i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n      var sprayChunk = this.sprayChunks[i];\n\n      for (var j = 0, jlen = sprayChunk.length; j < jlen; j++) {\n\n        var rect = new fabric.Rect({\n          width: sprayChunk[j].width,\n          height: sprayChunk[j].width,\n          left: sprayChunk[j].x + 1,\n          top: sprayChunk[j].y + 1,\n          originX: 'center',\n          originY: 'center',\n          fill: this.color\n        });\n        rects.push(rect);\n      }\n    }\n\n    if (this.optimizeOverlapping) {\n      rects = this._getOptimizedRects(rects);\n    }\n\n    var group = new fabric.Group(rects);\n    this.shadow && group.set('shadow', new fabric.Shadow(this.shadow));\n    this.canvas.fire('before:path:created', { path: group });\n    this.canvas.add(group);\n    this.canvas.fire('path:created', { path: group });\n\n    this.canvas.clearContext(this.canvas.contextTop);\n    this._resetShadow();\n    this.canvas.renderOnAddRemove = originalRenderOnAddRemove;\n    this.canvas.requestRenderAll();\n  },\n\n  /**\n   * @private\n   * @param {Array} rects\n   */\n  _getOptimizedRects: function(rects) {\n\n    // avoid creating duplicate rects at the same coordinates\n    var uniqueRects = { }, key, i, len;\n\n    for (i = 0, len = rects.length; i < len; i++) {\n      key = rects[i].left + '' + rects[i].top;\n      if (!uniqueRects[key]) {\n        uniqueRects[key] = rects[i];\n      }\n    }\n    var uniqueRectsArray = [];\n    for (key in uniqueRects) {\n      uniqueRectsArray.push(uniqueRects[key]);\n    }\n\n    return uniqueRectsArray;\n  },\n\n  /**\n   * Render new chunk of spray brush\n   */\n  render: function(sprayChunk) {\n    var ctx = this.canvas.contextTop, i, len;\n    ctx.fillStyle = this.color;\n\n    this._saveAndTransform(ctx);\n\n    for (i = 0, len = sprayChunk.length; i < len; i++) {\n      var point = sprayChunk[i];\n      if (typeof point.opacity !== 'undefined') {\n        ctx.globalAlpha = point.opacity;\n      }\n      ctx.fillRect(point.x, point.y, point.width, point.width);\n    }\n    ctx.restore();\n  },\n\n  /**\n   * Render all spray chunks\n   */\n  _render: function() {\n    var ctx = this.canvas.contextTop, i, ilen;\n    ctx.fillStyle = this.color;\n\n    this._saveAndTransform(ctx);\n\n    for (i = 0, ilen = this.sprayChunks.length; i < ilen; i++) {\n      this.render(this.sprayChunks[i]);\n    }\n    ctx.restore();\n  },\n\n  /**\n   * @param {Object} pointer\n   */\n  addSprayChunk: function(pointer) {\n    this.sprayChunkPoints = [];\n\n    var x, y, width, radius = this.width / 2, i;\n\n    for (i = 0; i < this.density; i++) {\n\n      x = fabric.util.getRandomInt(pointer.x - radius, pointer.x + radius);\n      y = fabric.util.getRandomInt(pointer.y - radius, pointer.y + radius);\n\n      if (this.dotWidthVariance) {\n        width = fabric.util.getRandomInt(\n          // bottom clamp width to 1\n          Math.max(1, this.dotWidth - this.dotWidthVariance),\n          this.dotWidth + this.dotWidthVariance);\n      }\n      else {\n        width = this.dotWidth;\n      }\n\n      var point = new fabric.Point(x, y);\n      point.width = width;\n\n      if (this.randomOpacity) {\n        point.opacity = fabric.util.getRandomInt(0, 100) / 100;\n      }\n\n      this.sprayChunkPoints.push(point);\n    }\n\n    this.sprayChunks.push(this.sprayChunkPoints);\n  }\n});\n\n\n/**\n * PatternBrush class\n * @class fabric.PatternBrush\n * @extends fabric.BaseBrush\n */\nfabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fabric.PatternBrush.prototype */ {\n\n  getPatternSrc: function() {\n\n    var dotWidth = 20,\n        dotDistance = 5,\n        patternCanvas = fabric.util.createCanvasElement(),\n        patternCtx = patternCanvas.getContext('2d');\n\n    patternCanvas.width = patternCanvas.height = dotWidth + dotDistance;\n\n    patternCtx.fillStyle = this.color;\n    patternCtx.beginPath();\n    patternCtx.arc(dotWidth / 2, dotWidth / 2, dotWidth / 2, 0, Math.PI * 2, false);\n    patternCtx.closePath();\n    patternCtx.fill();\n\n    return patternCanvas;\n  },\n\n  getPatternSrcFunction: function() {\n    return String(this.getPatternSrc).replace('this.color', '\"' + this.color + '\"');\n  },\n\n  /**\n   * Creates \"pattern\" instance property\n   * @param {CanvasRenderingContext2D} ctx\n   */\n  getPattern: function(ctx) {\n    return ctx.createPattern(this.source || this.getPatternSrc(), 'repeat');\n  },\n\n  /**\n   * Sets brush styles\n   * @param {CanvasRenderingContext2D} ctx\n   */\n  _setBrushStyles: function(ctx) {\n    this.callSuper('_setBrushStyles', ctx);\n    ctx.strokeStyle = this.getPattern(ctx);\n  },\n\n  /**\n   * Creates path\n   */\n  createPath: function(pathData) {\n    var path = this.callSuper('createPath', pathData),\n        topLeft = path._getLeftTopCoords().scalarAdd(path.strokeWidth / 2);\n\n    path.stroke = new fabric.Pattern({\n      source: this.source || this.getPatternSrcFunction(),\n      offsetX: -topLeft.x,\n      offsetY: -topLeft.y\n    });\n    return path;\n  }\n});\n\n\n(function() {\n\n  var getPointer = fabric.util.getPointer,\n      degreesToRadians = fabric.util.degreesToRadians,\n      isTouchEvent = fabric.util.isTouchEvent;\n\n  /**\n   * Canvas class\n   * @class fabric.Canvas\n   * @extends fabric.StaticCanvas\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#canvas}\n   * @see {@link fabric.Canvas#initialize} for constructor definition\n   *\n   * @fires object:modified at the end of a transform or any change when statefull is true\n   * @fires object:rotating while an object is being rotated from the control\n   * @fires object:scaling while an object is being scaled by controls\n   * @fires object:moving while an object is being dragged\n   * @fires object:skewing while an object is being skewed from the controls\n   *\n   * @fires before:transform before a transform is is started\n   * @fires before:selection:cleared\n   * @fires selection:cleared\n   * @fires selection:updated\n   * @fires selection:created\n   *\n   * @fires path:created after a drawing operation ends and the path is added\n   * @fires mouse:down\n   * @fires mouse:move\n   * @fires mouse:up\n   * @fires mouse:down:before  on mouse down, before the inner fabric logic runs\n   * @fires mouse:move:before on mouse move, before the inner fabric logic runs\n   * @fires mouse:up:before on mouse up, before the inner fabric logic runs\n   * @fires mouse:over\n   * @fires mouse:out\n   * @fires mouse:dblclick whenever a native dbl click event fires on the canvas.\n   *\n   * @fires dragover\n   * @fires dragenter\n   * @fires dragleave\n   * @fires drop:before before drop event. same native event. This is added to handle edge cases\n   * @fires drop\n   * @fires after:render at the end of the render process, receives the context in the callback\n   * @fires before:render at start the render process, receives the context in the callback\n   *\n   */\n  fabric.Canvas = fabric.util.createClass(fabric.StaticCanvas, /** @lends fabric.Canvas.prototype */ {\n\n    /**\n     * Constructor\n     * @param {HTMLElement | String} el &lt;canvas> element to initialize instance on\n     * @param {Object} [options] Options object\n     * @return {Object} thisArg\n     */\n    initialize: function(el, options) {\n      options || (options = { });\n      this.renderAndResetBound = this.renderAndReset.bind(this);\n      this.requestRenderAllBound = this.requestRenderAll.bind(this);\n      this._initStatic(el, options);\n      this._initInteractive();\n      this._createCacheCanvas();\n    },\n\n    /**\n     * When true, objects can be transformed by one side (unproportionally)\n     * when dragged on the corners that normally would not do that.\n     * @type Boolean\n     * @default\n     * @since fabric 4.0 // changed name and default value\n     */\n    uniformScaling:      true,\n\n    /**\n     * Indicates which key switches uniform scaling.\n     * values: 'altKey', 'shiftKey', 'ctrlKey'.\n     * If `null` or 'none' or any other string that is not a modifier key\n     * feature is disabled.\n     * totally wrong named. this sounds like `uniform scaling`\n     * if Canvas.uniformScaling is true, pressing this will set it to false\n     * and viceversa.\n     * @since 1.6.2\n     * @type String\n     * @default\n     */\n    uniScaleKey:           'shiftKey',\n\n    /**\n     * When true, objects use center point as the origin of scale transformation.\n     * <b>Backwards incompatibility note:</b> This property replaces \"centerTransform\" (Boolean).\n     * @since 1.3.4\n     * @type Boolean\n     * @default\n     */\n    centeredScaling:        false,\n\n    /**\n     * When true, objects use center point as the origin of rotate transformation.\n     * <b>Backwards incompatibility note:</b> This property replaces \"centerTransform\" (Boolean).\n     * @since 1.3.4\n     * @type Boolean\n     * @default\n     */\n    centeredRotation:       false,\n\n    /**\n     * Indicates which key enable centered Transform\n     * values: 'altKey', 'shiftKey', 'ctrlKey'.\n     * If `null` or 'none' or any other string that is not a modifier key\n     * feature is disabled feature disabled.\n     * @since 1.6.2\n     * @type String\n     * @default\n     */\n    centeredKey:           'altKey',\n\n    /**\n     * Indicates which key enable alternate action on corner\n     * values: 'altKey', 'shiftKey', 'ctrlKey'.\n     * If `null` or 'none' or any other string that is not a modifier key\n     * feature is disabled feature disabled.\n     * @since 1.6.2\n     * @type String\n     * @default\n     */\n    altActionKey:           'shiftKey',\n\n    /**\n     * Indicates that canvas is interactive. This property should not be changed.\n     * @type Boolean\n     * @default\n     */\n    interactive:            true,\n\n    /**\n     * Indicates whether group selection should be enabled\n     * @type Boolean\n     * @default\n     */\n    selection:              true,\n\n    /**\n     * Indicates which key or keys enable multiple click selection\n     * Pass value as a string or array of strings\n     * values: 'altKey', 'shiftKey', 'ctrlKey'.\n     * If `null` or empty or containing any other string that is not a modifier key\n     * feature is disabled.\n     * @since 1.6.2\n     * @type String|Array\n     * @default\n     */\n    selectionKey:           'shiftKey',\n\n    /**\n     * Indicates which key enable alternative selection\n     * in case of target overlapping with active object\n     * values: 'altKey', 'shiftKey', 'ctrlKey'.\n     * For a series of reason that come from the general expectations on how\n     * things should work, this feature works only for preserveObjectStacking true.\n     * If `null` or 'none' or any other string that is not a modifier key\n     * feature is disabled.\n     * @since 1.6.5\n     * @type null|String\n     * @default\n     */\n    altSelectionKey:           null,\n\n    /**\n     * Color of selection\n     * @type String\n     * @default\n     */\n    selectionColor:         'rgba(100, 100, 255, 0.3)', // blue\n\n    /**\n     * Default dash array pattern\n     * If not empty the selection border is dashed\n     * @type Array\n     */\n    selectionDashArray:     [],\n\n    /**\n     * Color of the border of selection (usually slightly darker than color of selection itself)\n     * @type String\n     * @default\n     */\n    selectionBorderColor:   'rgba(255, 255, 255, 0.3)',\n\n    /**\n     * Width of a line used in object/group selection\n     * @type Number\n     * @default\n     */\n    selectionLineWidth:     1,\n\n    /**\n     * Select only shapes that are fully contained in the dragged selection rectangle.\n     * @type Boolean\n     * @default\n     */\n    selectionFullyContained: false,\n\n    /**\n     * Default cursor value used when hovering over an object on canvas\n     * @type String\n     * @default\n     */\n    hoverCursor:            'move',\n\n    /**\n     * Default cursor value used when moving an object on canvas\n     * @type String\n     * @default\n     */\n    moveCursor:             'move',\n\n    /**\n     * Default cursor value used for the entire canvas\n     * @type String\n     * @default\n     */\n    defaultCursor:          'default',\n\n    /**\n     * Cursor value used during free drawing\n     * @type String\n     * @default\n     */\n    freeDrawingCursor:      'crosshair',\n\n    /**\n     * Cursor value used for disabled elements ( corners with disabled action )\n     * @type String\n     * @since 2.0.0\n     * @default\n     */\n    notAllowedCursor:         'not-allowed',\n\n    /**\n     * Default element class that's given to wrapper (div) element of canvas\n     * @type String\n     * @default\n     */\n    containerClass:         'canvas-container',\n\n    /**\n     * When true, object detection happens on per-pixel basis rather than on per-bounding-box\n     * @type Boolean\n     * @default\n     */\n    perPixelTargetFind:     false,\n\n    /**\n     * Number of pixels around target pixel to tolerate (consider active) during object detection\n     * @type Number\n     * @default\n     */\n    targetFindTolerance:    0,\n\n    /**\n     * When true, target detection is skipped. Target detection will return always undefined.\n     * click selection won't work anymore, events will fire with no targets.\n     * if something is selected before setting it to true, it will be deselected at the first click.\n     * area selection will still work. check the `selection` property too.\n     * if you deactivate both, you should look into staticCanvas.\n     * @type Boolean\n     * @default\n     */\n    skipTargetFind:         false,\n\n    /**\n     * When true, mouse events on canvas (mousedown/mousemove/mouseup) result in free drawing.\n     * After mousedown, mousemove creates a shape,\n     * and then mouseup finalizes it and adds an instance of `fabric.Path` onto canvas.\n     * @tutorial {@link http://fabricjs.com/fabric-intro-part-4#free_drawing}\n     * @type Boolean\n     * @default\n     */\n    isDrawingMode:          false,\n\n    /**\n     * Indicates whether objects should remain in current stack position when selected.\n     * When false objects are brought to top and rendered as part of the selection group\n     * @type Boolean\n     * @default\n     */\n    preserveObjectStacking: false,\n\n    /**\n     * Indicates the angle that an object will lock to while rotating.\n     * @type Number\n     * @since 1.6.7\n     * @default\n     */\n    snapAngle: 0,\n\n    /**\n     * Indicates the distance from the snapAngle the rotation will lock to the snapAngle.\n     * When `null`, the snapThreshold will default to the snapAngle.\n     * @type null|Number\n     * @since 1.6.7\n     * @default\n     */\n    snapThreshold: null,\n\n    /**\n     * Indicates if the right click on canvas can output the context menu or not\n     * @type Boolean\n     * @since 1.6.5\n     * @default\n     */\n    stopContextMenu: false,\n\n    /**\n     * Indicates if the canvas can fire right click events\n     * @type Boolean\n     * @since 1.6.5\n     * @default\n     */\n    fireRightClick: false,\n\n    /**\n     * Indicates if the canvas can fire middle click events\n     * @type Boolean\n     * @since 1.7.8\n     * @default\n     */\n    fireMiddleClick: false,\n\n    /**\n     * Keep track of the subTargets for Mouse Events\n     * @type fabric.Object[]\n     */\n    targets: [],\n\n    /**\n     * When the option is enabled, PointerEvent is used instead of MouseEvent.\n     * @type Boolean\n     * @default\n     */\n    enablePointerEvents: false,\n\n    /**\n     * Keep track of the hovered target\n     * @type fabric.Object\n     * @private\n     */\n    _hoveredTarget: null,\n\n    /**\n     * hold the list of nested targets hovered\n     * @type fabric.Object[]\n     * @private\n     */\n    _hoveredTargets: [],\n\n    /**\n     * @private\n     */\n    _initInteractive: function() {\n      this._currentTransform = null;\n      this._groupSelector = null;\n      this._initWrapperElement();\n      this._createUpperCanvas();\n      this._initEventListeners();\n\n      this._initRetinaScaling();\n\n      this.freeDrawingBrush = fabric.PencilBrush && new fabric.PencilBrush(this);\n\n      this.calcOffset();\n    },\n\n    /**\n     * Divides objects in two groups, one to render immediately\n     * and one to render as activeGroup.\n     * @return {Array} objects to render immediately and pushes the other in the activeGroup.\n     */\n    _chooseObjectsToRender: function() {\n      var activeObjects = this.getActiveObjects(),\n          object, objsToRender, activeGroupObjects;\n\n      if (activeObjects.length > 0 && !this.preserveObjectStacking) {\n        objsToRender = [];\n        activeGroupObjects = [];\n        for (var i = 0, length = this._objects.length; i < length; i++) {\n          object = this._objects[i];\n          if (activeObjects.indexOf(object) === -1 ) {\n            objsToRender.push(object);\n          }\n          else {\n            activeGroupObjects.push(object);\n          }\n        }\n        if (activeObjects.length > 1) {\n          this._activeObject._objects = activeGroupObjects;\n        }\n        objsToRender.push.apply(objsToRender, activeGroupObjects);\n      }\n      else {\n        objsToRender = this._objects;\n      }\n      return objsToRender;\n    },\n\n    /**\n     * Renders both the top canvas and the secondary container canvas.\n     * @return {fabric.Canvas} instance\n     * @chainable\n     */\n    renderAll: function () {\n      if (this.contextTopDirty && !this._groupSelector && !this.isDrawingMode) {\n        this.clearContext(this.contextTop);\n        this.contextTopDirty = false;\n      }\n      if (this.hasLostContext) {\n        this.renderTopLayer(this.contextTop);\n        this.hasLostContext = false;\n      }\n      var canvasToDrawOn = this.contextContainer;\n      this.renderCanvas(canvasToDrawOn, this._chooseObjectsToRender());\n      return this;\n    },\n\n    renderTopLayer: function(ctx) {\n      ctx.save();\n      if (this.isDrawingMode && this._isCurrentlyDrawing) {\n        this.freeDrawingBrush && this.freeDrawingBrush._render();\n        this.contextTopDirty = true;\n      }\n      // we render the top context - last object\n      if (this.selection && this._groupSelector) {\n        this._drawSelection(ctx);\n        this.contextTopDirty = true;\n      }\n      ctx.restore();\n    },\n\n    /**\n     * Method to render only the top canvas.\n     * Also used to render the group selection box.\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    renderTop: function () {\n      var ctx = this.contextTop;\n      this.clearContext(ctx);\n      this.renderTopLayer(ctx);\n      this.fire('after:render');\n      return this;\n    },\n\n    /**\n     * @private\n     */\n    _normalizePointer: function (object, pointer) {\n      var m = object.calcTransformMatrix(),\n          invertedM = fabric.util.invertTransform(m),\n          vptPointer = this.restorePointerVpt(pointer);\n      return fabric.util.transformPoint(vptPointer, invertedM);\n    },\n\n    /**\n     * Returns true if object is transparent at a certain location\n     * @param {fabric.Object} target Object to check\n     * @param {Number} x Left coordinate\n     * @param {Number} y Top coordinate\n     * @return {Boolean}\n     */\n    isTargetTransparent: function (target, x, y) {\n      // in case the target is the activeObject, we cannot execute this optimization\n      // because we need to draw controls too.\n      if (target.shouldCache() && target._cacheCanvas && target !== this._activeObject) {\n        var normalizedPointer = this._normalizePointer(target, {x: x, y: y}),\n            targetRelativeX = Math.max(target.cacheTranslationX + (normalizedPointer.x * target.zoomX), 0),\n            targetRelativeY = Math.max(target.cacheTranslationY + (normalizedPointer.y * target.zoomY), 0);\n\n        var isTransparent = fabric.util.isTransparent(\n          target._cacheContext, Math.round(targetRelativeX), Math.round(targetRelativeY), this.targetFindTolerance);\n\n        return isTransparent;\n      }\n\n      var ctx = this.contextCache,\n          originalColor = target.selectionBackgroundColor, v = this.viewportTransform;\n\n      target.selectionBackgroundColor = '';\n\n      this.clearContext(ctx);\n\n      ctx.save();\n      ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n      target.render(ctx);\n      ctx.restore();\n\n      target.selectionBackgroundColor = originalColor;\n\n      var isTransparent = fabric.util.isTransparent(\n        ctx, x, y, this.targetFindTolerance);\n\n      return isTransparent;\n    },\n\n    /**\n     * takes an event and determines if selection key has been pressed\n     * @private\n     * @param {Event} e Event object\n     */\n    _isSelectionKeyPressed: function(e) {\n      var selectionKeyPressed = false;\n\n      if (Array.isArray(this.selectionKey)) {\n        selectionKeyPressed = !!this.selectionKey.find(function(key) { return e[key] === true; });\n      }\n      else {\n        selectionKeyPressed = e[this.selectionKey];\n      }\n\n      return selectionKeyPressed;\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object\n     * @param {fabric.Object} target\n     */\n    _shouldClearSelection: function (e, target) {\n      var activeObjects = this.getActiveObjects(),\n          activeObject = this._activeObject;\n\n      return (\n        !target\n        ||\n        (target &&\n          activeObject &&\n          activeObjects.length > 1 &&\n          activeObjects.indexOf(target) === -1 &&\n          activeObject !== target &&\n          !this._isSelectionKeyPressed(e))\n        ||\n        (target && !target.evented)\n        ||\n        (target &&\n          !target.selectable &&\n          activeObject &&\n          activeObject !== target)\n      );\n    },\n\n    /**\n     * centeredScaling from object can't override centeredScaling from canvas.\n     * this should be fixed, since object setting should take precedence over canvas.\n     * also this should be something that will be migrated in the control properties.\n     * as ability to define the origin of the transformation that the control provide.\n     * @private\n     * @param {fabric.Object} target\n     * @param {String} action\n     * @param {Boolean} altKey\n     */\n    _shouldCenterTransform: function (target, action, altKey) {\n      if (!target) {\n        return;\n      }\n\n      var centerTransform;\n\n      if (action === 'scale' || action === 'scaleX' || action === 'scaleY' || action === 'resizing') {\n        centerTransform = this.centeredScaling || target.centeredScaling;\n      }\n      else if (action === 'rotate') {\n        centerTransform = this.centeredRotation || target.centeredRotation;\n      }\n\n      return centerTransform ? !altKey : altKey;\n    },\n\n    /**\n     * should disappear before release 4.0\n     * @private\n     */\n    _getOriginFromCorner: function(target, corner) {\n      var origin = {\n        x: target.originX,\n        y: target.originY\n      };\n\n      if (corner === 'ml' || corner === 'tl' || corner === 'bl') {\n        origin.x = 'right';\n      }\n      else if (corner === 'mr' || corner === 'tr' || corner === 'br') {\n        origin.x = 'left';\n      }\n\n      if (corner === 'tl' || corner === 'mt' || corner === 'tr') {\n        origin.y = 'bottom';\n      }\n      else if (corner === 'bl' || corner === 'mb' || corner === 'br') {\n        origin.y = 'top';\n      }\n      return origin;\n    },\n\n    /**\n     * @private\n     * @param {Boolean} alreadySelected true if target is already selected\n     * @param {String} corner a string representing the corner ml, mr, tl ...\n     * @param {Event} e Event object\n     * @param {fabric.Object} [target] inserted back to help overriding. Unused\n     */\n    _getActionFromCorner: function(alreadySelected, corner, e, target) {\n      if (!corner || !alreadySelected) {\n        return 'drag';\n      }\n      var control = target.controls[corner];\n      return control.getActionName(e, control, target);\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object\n     * @param {fabric.Object} target\n     */\n    _setupCurrentTransform: function (e, target, alreadySelected) {\n      if (!target) {\n        return;\n      }\n\n      var pointer = this.getPointer(e), corner = target.__corner,\n          control = target.controls[corner],\n          actionHandler = (alreadySelected && corner) ?\n            control.getActionHandler(e, target, control) : fabric.controlsUtils.dragHandler,\n          action = this._getActionFromCorner(alreadySelected, corner, e, target),\n          origin = this._getOriginFromCorner(target, corner),\n          altKey = e[this.centeredKey],\n          transform = {\n            target: target,\n            action: action,\n            actionHandler: actionHandler,\n            corner: corner,\n            scaleX: target.scaleX,\n            scaleY: target.scaleY,\n            skewX: target.skewX,\n            skewY: target.skewY,\n            // used by transation\n            offsetX: pointer.x - target.left,\n            offsetY: pointer.y - target.top,\n            originX: origin.x,\n            originY: origin.y,\n            ex: pointer.x,\n            ey: pointer.y,\n            lastX: pointer.x,\n            lastY: pointer.y,\n            // unsure they are useful anymore.\n            // left: target.left,\n            // top: target.top,\n            theta: degreesToRadians(target.angle),\n            // end of unsure\n            width: target.width * target.scaleX,\n            shiftKey: e.shiftKey,\n            altKey: altKey,\n            original: fabric.util.saveObjectTransform(target),\n          };\n\n      if (this._shouldCenterTransform(target, action, altKey)) {\n        transform.originX = 'center';\n        transform.originY = 'center';\n      }\n      transform.original.originX = origin.x;\n      transform.original.originY = origin.y;\n      this._currentTransform = transform;\n      this._beforeTransform(e);\n    },\n\n    /**\n     * Set the cursor type of the canvas element\n     * @param {String} value Cursor type of the canvas element.\n     * @see http://www.w3.org/TR/css3-ui/#cursor\n     */\n    setCursor: function (value) {\n      this.upperCanvasEl.style.cursor = value;\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx to draw the selection on\n     */\n    _drawSelection: function (ctx) {\n      var selector = this._groupSelector,\n          viewportStart = new fabric.Point(selector.ex, selector.ey),\n          start = fabric.util.transformPoint(viewportStart, this.viewportTransform),\n          viewportExtent = new fabric.Point(selector.ex + selector.left, selector.ey + selector.top),\n          extent = fabric.util.transformPoint(viewportExtent, this.viewportTransform),\n          minX = Math.min(start.x, extent.x),\n          minY = Math.min(start.y, extent.y),\n          maxX = Math.max(start.x, extent.x),\n          maxY = Math.max(start.y, extent.y),\n          strokeOffset = this.selectionLineWidth / 2;\n\n      if (this.selectionColor) {\n        ctx.fillStyle = this.selectionColor;\n        ctx.fillRect(minX, minY, maxX - minX, maxY - minY);\n      }\n\n      if (!this.selectionLineWidth || !this.selectionBorderColor) {\n        return;\n      }\n      ctx.lineWidth = this.selectionLineWidth;\n      ctx.strokeStyle = this.selectionBorderColor;\n\n      minX += strokeOffset;\n      minY += strokeOffset;\n      maxX -= strokeOffset;\n      maxY -= strokeOffset;\n      // selection border\n      fabric.Object.prototype._setLineDash.call(this, ctx, this.selectionDashArray);\n      ctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\n    },\n\n    /**\n     * Method that determines what object we are clicking on\n     * the skipGroup parameter is for internal use, is needed for shift+click action\n     * 11/09/2018 TODO: would be cool if findTarget could discern between being a full target\n     * or the outside part of the corner.\n     * @param {Event} e mouse event\n     * @param {Boolean} skipGroup when true, activeGroup is skipped and only objects are traversed through\n     * @return {fabric.Object} the target found\n     */\n    findTarget: function (e, skipGroup) {\n      if (this.skipTargetFind) {\n        return;\n      }\n\n      var ignoreZoom = true,\n          pointer = this.getPointer(e, ignoreZoom),\n          activeObject = this._activeObject,\n          aObjects = this.getActiveObjects(),\n          activeTarget, activeTargetSubs,\n          isTouch = isTouchEvent(e),\n          shouldLookForActive = (aObjects.length > 1 && !skipGroup) || aObjects.length === 1;\n\n      // first check current group (if one exists)\n      // active group does not check sub targets like normal groups.\n      // if active group just exits.\n      this.targets = [];\n\n      // if we hit the corner of an activeObject, let's return that.\n      if (shouldLookForActive && activeObject._findTargetCorner(pointer, isTouch)) {\n        return activeObject;\n      }\n      if (aObjects.length > 1 && !skipGroup && activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n        return activeObject;\n      }\n      if (aObjects.length === 1 &&\n        activeObject === this._searchPossibleTargets([activeObject], pointer)) {\n        if (!this.preserveObjectStacking) {\n          return activeObject;\n        }\n        else {\n          activeTarget = activeObject;\n          activeTargetSubs = this.targets;\n          this.targets = [];\n        }\n      }\n      var target = this._searchPossibleTargets(this._objects, pointer);\n      if (e[this.altSelectionKey] && target && activeTarget && target !== activeTarget) {\n        target = activeTarget;\n        this.targets = activeTargetSubs;\n      }\n      return target;\n    },\n\n    /**\n     * Checks point is inside the object.\n     * @param {Object} [pointer] x,y object of point coordinates we want to check.\n     * @param {fabric.Object} obj Object to test against\n     * @param {Object} [globalPointer] x,y object of point coordinates relative to canvas used to search per pixel target.\n     * @return {Boolean} true if point is contained within an area of given object\n     * @private\n     */\n    _checkTarget: function(pointer, obj, globalPointer) {\n      if (obj &&\n          obj.visible &&\n          obj.evented &&\n          // http://www.geog.ubc.ca/courses/klink/gis.notes/ncgia/u32.html\n          // http://idav.ucdavis.edu/~okreylos/TAship/Spring2000/PointInPolygon.html\n          obj.containsPoint(pointer)\n      ) {\n        if ((this.perPixelTargetFind || obj.perPixelTargetFind) && !obj.isEditing) {\n          var isTransparent = this.isTargetTransparent(obj, globalPointer.x, globalPointer.y);\n          if (!isTransparent) {\n            return true;\n          }\n        }\n        else {\n          return true;\n        }\n      }\n    },\n\n    /**\n     * Function used to search inside objects an object that contains pointer in bounding box or that contains pointerOnCanvas when painted\n     * @param {Array} [objects] objects array to look into\n     * @param {Object} [pointer] x,y object of point coordinates we want to check.\n     * @return {fabric.Object} object that contains pointer\n     * @private\n     */\n    _searchPossibleTargets: function(objects, pointer) {\n      // Cache all targets where their bounding box contains point.\n      var target, i = objects.length, subTarget;\n      // Do not check for currently grouped objects, since we check the parent group itself.\n      // until we call this function specifically to search inside the activeGroup\n      while (i--) {\n        var objToCheck = objects[i];\n        var pointerToUse = objToCheck.group ?\n          this._normalizePointer(objToCheck.group, pointer) : pointer;\n        if (this._checkTarget(pointerToUse, objToCheck, pointer)) {\n          target = objects[i];\n          if (target.subTargetCheck && target instanceof fabric.Group) {\n            subTarget = this._searchPossibleTargets(target._objects, pointer);\n            subTarget && this.targets.push(subTarget);\n          }\n          break;\n        }\n      }\n      return target;\n    },\n\n    /**\n     * Returns pointer coordinates without the effect of the viewport\n     * @param {Object} pointer with \"x\" and \"y\" number values\n     * @return {Object} object with \"x\" and \"y\" number values\n     */\n    restorePointerVpt: function(pointer) {\n      return fabric.util.transformPoint(\n        pointer,\n        fabric.util.invertTransform(this.viewportTransform)\n      );\n    },\n\n    /**\n     * Returns pointer coordinates relative to canvas.\n     * Can return coordinates with or without viewportTransform.\n     * ignoreZoom false gives back coordinates that represent\n     * the point clicked on canvas element.\n     * ignoreZoom true gives back coordinates after being processed\n     * by the viewportTransform ( sort of coordinates of what is displayed\n     * on the canvas where you are clicking.\n     * ignoreZoom true = HTMLElement coordinates relative to top,left\n     * ignoreZoom false, default = fabric space coordinates, the same used for shape position\n     * To interact with your shapes top and left you want to use ignoreZoom true\n     * most of the time, while ignoreZoom false will give you coordinates\n     * compatible with the object.oCoords system.\n     * of the time.\n     * @param {Event} e\n     * @param {Boolean} ignoreZoom\n     * @return {Object} object with \"x\" and \"y\" number values\n     */\n    getPointer: function (e, ignoreZoom) {\n      // return cached values if we are in the event processing chain\n      if (this._absolutePointer && !ignoreZoom) {\n        return this._absolutePointer;\n      }\n      if (this._pointer && ignoreZoom) {\n        return this._pointer;\n      }\n\n      var pointer = getPointer(e),\n          upperCanvasEl = this.upperCanvasEl,\n          bounds = upperCanvasEl.getBoundingClientRect(),\n          boundsWidth = bounds.width || 0,\n          boundsHeight = bounds.height || 0,\n          cssScale;\n\n      if (!boundsWidth || !boundsHeight ) {\n        if ('top' in bounds && 'bottom' in bounds) {\n          boundsHeight = Math.abs( bounds.top - bounds.bottom );\n        }\n        if ('right' in bounds && 'left' in bounds) {\n          boundsWidth = Math.abs( bounds.right - bounds.left );\n        }\n      }\n\n      this.calcOffset();\n      pointer.x = pointer.x - this._offset.left;\n      pointer.y = pointer.y - this._offset.top;\n      if (!ignoreZoom) {\n        pointer = this.restorePointerVpt(pointer);\n      }\n\n      var retinaScaling = this.getRetinaScaling();\n      if (retinaScaling !== 1) {\n        pointer.x /= retinaScaling;\n        pointer.y /= retinaScaling;\n      }\n\n      if (boundsWidth === 0 || boundsHeight === 0) {\n        // If bounds are not available (i.e. not visible), do not apply scale.\n        cssScale = { width: 1, height: 1 };\n      }\n      else {\n        cssScale = {\n          width: upperCanvasEl.width / boundsWidth,\n          height: upperCanvasEl.height / boundsHeight\n        };\n      }\n\n      return {\n        x: pointer.x * cssScale.width,\n        y: pointer.y * cssScale.height\n      };\n    },\n\n    /**\n     * @private\n     * @throws {CANVAS_INIT_ERROR} If canvas can not be initialized\n     */\n    _createUpperCanvas: function () {\n      var lowerCanvasClass = this.lowerCanvasEl.className.replace(/\\s*lower-canvas\\s*/, ''),\n          lowerCanvasEl = this.lowerCanvasEl, upperCanvasEl = this.upperCanvasEl;\n\n      // there is no need to create a new upperCanvas element if we have already one.\n      if (upperCanvasEl) {\n        upperCanvasEl.className = '';\n      }\n      else {\n        upperCanvasEl = this._createCanvasElement();\n        this.upperCanvasEl = upperCanvasEl;\n      }\n      fabric.util.addClass(upperCanvasEl, 'upper-canvas ' + lowerCanvasClass);\n\n      this.wrapperEl.appendChild(upperCanvasEl);\n\n      this._copyCanvasStyle(lowerCanvasEl, upperCanvasEl);\n      this._applyCanvasStyle(upperCanvasEl);\n      this.contextTop = upperCanvasEl.getContext('2d');\n    },\n\n    /**\n     * Returns context of top canvas where interactions are drawn\n     * @returns {CanvasRenderingContext2D}\n     */\n    getTopContext: function () {\n      return this.contextTop;\n    },\n\n    /**\n     * @private\n     */\n    _createCacheCanvas: function () {\n      this.cacheCanvasEl = this._createCanvasElement();\n      this.cacheCanvasEl.setAttribute('width', this.width);\n      this.cacheCanvasEl.setAttribute('height', this.height);\n      this.contextCache = this.cacheCanvasEl.getContext('2d');\n    },\n\n    /**\n     * @private\n     */\n    _initWrapperElement: function () {\n      this.wrapperEl = fabric.util.wrapElement(this.lowerCanvasEl, 'div', {\n        'class': this.containerClass\n      });\n      fabric.util.setStyle(this.wrapperEl, {\n        width: this.width + 'px',\n        height: this.height + 'px',\n        position: 'relative'\n      });\n      fabric.util.makeElementUnselectable(this.wrapperEl);\n    },\n\n    /**\n     * @private\n     * @param {HTMLElement} element canvas element to apply styles on\n     */\n    _applyCanvasStyle: function (element) {\n      var width = this.width || element.width,\n          height = this.height || element.height;\n\n      fabric.util.setStyle(element, {\n        position: 'absolute',\n        width: width + 'px',\n        height: height + 'px',\n        left: 0,\n        top: 0,\n        'touch-action': this.allowTouchScrolling ? 'manipulation' : 'none',\n        '-ms-touch-action': this.allowTouchScrolling ? 'manipulation' : 'none'\n      });\n      element.width = width;\n      element.height = height;\n      fabric.util.makeElementUnselectable(element);\n    },\n\n    /**\n     * Copy the entire inline style from one element (fromEl) to another (toEl)\n     * @private\n     * @param {Element} fromEl Element style is copied from\n     * @param {Element} toEl Element copied style is applied to\n     */\n    _copyCanvasStyle: function (fromEl, toEl) {\n      toEl.style.cssText = fromEl.style.cssText;\n    },\n\n    /**\n     * Returns context of canvas where object selection is drawn\n     * @return {CanvasRenderingContext2D}\n     */\n    getSelectionContext: function() {\n      return this.contextTop;\n    },\n\n    /**\n     * Returns &lt;canvas> element on which object selection is drawn\n     * @return {HTMLCanvasElement}\n     */\n    getSelectionElement: function () {\n      return this.upperCanvasEl;\n    },\n\n    /**\n     * Returns currently active object\n     * @return {fabric.Object} active object\n     */\n    getActiveObject: function () {\n      return this._activeObject;\n    },\n\n    /**\n     * Returns an array with the current selected objects\n     * @return {fabric.Object} active object\n     */\n    getActiveObjects: function () {\n      var active = this._activeObject;\n      if (active) {\n        if (active.type === 'activeSelection' && active._objects) {\n          return active._objects.slice(0);\n        }\n        else {\n          return [active];\n        }\n      }\n      return [];\n    },\n\n    /**\n     * @private\n     * @param {fabric.Object} obj Object that was removed\n     */\n    _onObjectRemoved: function(obj) {\n      // removing active object should fire \"selection:cleared\" events\n      if (obj === this._activeObject) {\n        this.fire('before:selection:cleared', { target: obj });\n        this._discardActiveObject();\n        this.fire('selection:cleared', { target: obj });\n        obj.fire('deselected');\n      }\n      if (obj === this._hoveredTarget){\n        this._hoveredTarget = null;\n        this._hoveredTargets = [];\n      }\n      this.callSuper('_onObjectRemoved', obj);\n    },\n\n    /**\n     * @private\n     * Compares the old activeObject with the current one and fires correct events\n     * @param {fabric.Object} obj old activeObject\n     */\n    _fireSelectionEvents: function(oldObjects, e) {\n      var somethingChanged = false, objects = this.getActiveObjects(),\n          added = [], removed = [];\n      oldObjects.forEach(function(oldObject) {\n        if (objects.indexOf(oldObject) === -1) {\n          somethingChanged = true;\n          oldObject.fire('deselected', {\n            e: e,\n            target: oldObject\n          });\n          removed.push(oldObject);\n        }\n      });\n      objects.forEach(function(object) {\n        if (oldObjects.indexOf(object) === -1) {\n          somethingChanged = true;\n          object.fire('selected', {\n            e: e,\n            target: object\n          });\n          added.push(object);\n        }\n      });\n      if (oldObjects.length > 0 && objects.length > 0) {\n        somethingChanged && this.fire('selection:updated', {\n          e: e,\n          selected: added,\n          deselected: removed,\n        });\n      }\n      else if (objects.length > 0) {\n        this.fire('selection:created', {\n          e: e,\n          selected: added,\n        });\n      }\n      else if (oldObjects.length > 0) {\n        this.fire('selection:cleared', {\n          e: e,\n          deselected: removed,\n        });\n      }\n    },\n\n    /**\n     * Sets given object as the only active object on canvas\n     * @param {fabric.Object} object Object to set as an active one\n     * @param {Event} [e] Event (passed along when firing \"object:selected\")\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    setActiveObject: function (object, e) {\n      var currentActives = this.getActiveObjects();\n      this._setActiveObject(object, e);\n      this._fireSelectionEvents(currentActives, e);\n      return this;\n    },\n\n    /**\n     * This is a private method for now.\n     * This is supposed to be equivalent to setActiveObject but without firing\n     * any event. There is commitment to have this stay this way.\n     * This is the functional part of setActiveObject.\n     * @private\n     * @param {Object} object to set as active\n     * @param {Event} [e] Event (passed along when firing \"object:selected\")\n     * @return {Boolean} true if the selection happened\n     */\n    _setActiveObject: function(object, e) {\n      if (this._activeObject === object) {\n        return false;\n      }\n      if (!this._discardActiveObject(e, object)) {\n        return false;\n      }\n      if (object.onSelect({ e: e })) {\n        return false;\n      }\n      this._activeObject = object;\n      return true;\n    },\n\n    /**\n     * This is a private method for now.\n     * This is supposed to be equivalent to discardActiveObject but without firing\n     * any events. There is commitment to have this stay this way.\n     * This is the functional part of discardActiveObject.\n     * @param {Event} [e] Event (passed along when firing \"object:deselected\")\n     * @param {Object} object to set as active\n     * @return {Boolean} true if the selection happened\n     * @private\n     */\n    _discardActiveObject: function(e, object) {\n      var obj = this._activeObject;\n      if (obj) {\n        // onDeselect return TRUE to cancel selection;\n        if (obj.onDeselect({ e: e, object: object })) {\n          return false;\n        }\n        this._activeObject = null;\n      }\n      return true;\n    },\n\n    /**\n     * Discards currently active object and fire events. If the function is called by fabric\n     * as a consequence of a mouse event, the event is passed as a parameter and\n     * sent to the fire function for the custom events. When used as a method the\n     * e param does not have any application.\n     * @param {event} e\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    discardActiveObject: function (e) {\n      var currentActives = this.getActiveObjects(), activeObject = this.getActiveObject();\n      if (currentActives.length) {\n        this.fire('before:selection:cleared', { target: activeObject, e: e });\n      }\n      this._discardActiveObject(e);\n      this._fireSelectionEvents(currentActives, e);\n      return this;\n    },\n\n    /**\n     * Clears a canvas element and removes all event listeners\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    dispose: function () {\n      var wrapper = this.wrapperEl;\n      this.removeListeners();\n      wrapper.removeChild(this.upperCanvasEl);\n      wrapper.removeChild(this.lowerCanvasEl);\n      this.contextCache = null;\n      this.contextTop = null;\n      ['upperCanvasEl', 'cacheCanvasEl'].forEach((function(element) {\n        fabric.util.cleanUpJsdomNode(this[element]);\n        this[element] = undefined;\n      }).bind(this));\n      if (wrapper.parentNode) {\n        wrapper.parentNode.replaceChild(this.lowerCanvasEl, this.wrapperEl);\n      }\n      delete this.wrapperEl;\n      fabric.StaticCanvas.prototype.dispose.call(this);\n      return this;\n    },\n\n    /**\n     * Clears all contexts (background, main, top) of an instance\n     * @return {fabric.Canvas} thisArg\n     * @chainable\n     */\n    clear: function () {\n      // this.discardActiveGroup();\n      this.discardActiveObject();\n      this.clearContext(this.contextTop);\n      return this.callSuper('clear');\n    },\n\n    /**\n     * Draws objects' controls (borders/controls)\n     * @param {CanvasRenderingContext2D} ctx Context to render controls on\n     */\n    drawControls: function(ctx) {\n      var activeObject = this._activeObject;\n\n      if (activeObject) {\n        activeObject._renderControls(ctx);\n      }\n    },\n\n    /**\n     * @private\n     */\n    _toObject: function(instance, methodName, propertiesToInclude) {\n      //If the object is part of the current selection group, it should\n      //be transformed appropriately\n      //i.e. it should be serialised as it would appear if the selection group\n      //were to be destroyed.\n      var originalProperties = this._realizeGroupTransformOnObject(instance),\n          object = this.callSuper('_toObject', instance, methodName, propertiesToInclude);\n      //Undo the damage we did by changing all of its properties\n      this._unwindGroupTransformOnObject(instance, originalProperties);\n      return object;\n    },\n\n    /**\n     * Realises an object's group transformation on it\n     * @private\n     * @param {fabric.Object} [instance] the object to transform (gets mutated)\n     * @returns the original values of instance which were changed\n     */\n    _realizeGroupTransformOnObject: function(instance) {\n      if (instance.group && instance.group.type === 'activeSelection' && this._activeObject === instance.group) {\n        var layoutProps = ['angle', 'flipX', 'flipY', 'left', 'scaleX', 'scaleY', 'skewX', 'skewY', 'top'];\n        //Copy all the positionally relevant properties across now\n        var originalValues = {};\n        layoutProps.forEach(function(prop) {\n          originalValues[prop] = instance[prop];\n        });\n        fabric.util.addTransformToObject(instance, this._activeObject.calcOwnMatrix());\n        return originalValues;\n      }\n      else {\n        return null;\n      }\n    },\n\n    /**\n     * Restores the changed properties of instance\n     * @private\n     * @param {fabric.Object} [instance] the object to un-transform (gets mutated)\n     * @param {Object} [originalValues] the original values of instance, as returned by _realizeGroupTransformOnObject\n     */\n    _unwindGroupTransformOnObject: function(instance, originalValues) {\n      if (originalValues) {\n        instance.set(originalValues);\n      }\n    },\n\n    /**\n     * @private\n     */\n    _setSVGObject: function(markup, instance, reviver) {\n      //If the object is in a selection group, simulate what would happen to that\n      //object when the group is deselected\n      var originalProperties = this._realizeGroupTransformOnObject(instance);\n      this.callSuper('_setSVGObject', markup, instance, reviver);\n      this._unwindGroupTransformOnObject(instance, originalProperties);\n    },\n\n    setViewportTransform: function (vpt) {\n      if (this.renderOnAddRemove && this._activeObject && this._activeObject.isEditing) {\n        this._activeObject.clearContextTop();\n      }\n      fabric.StaticCanvas.prototype.setViewportTransform.call(this, vpt);\n    }\n  });\n\n  // copying static properties manually to work around Opera's bug,\n  // where \"prototype\" property is enumerable and overrides existing prototype\n  for (var prop in fabric.StaticCanvas) {\n    if (prop !== 'prototype') {\n      fabric.Canvas[prop] = fabric.StaticCanvas[prop];\n    }\n  }\n})();\n\n\n(function() {\n\n  var addListener = fabric.util.addListener,\n      removeListener = fabric.util.removeListener,\n      RIGHT_CLICK = 3, MIDDLE_CLICK = 2, LEFT_CLICK = 1,\n      addEventOptions = { passive: false };\n\n  function checkClick(e, value) {\n    return e.button && (e.button === value - 1);\n  }\n\n  fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\n\n    /**\n     * Contains the id of the touch event that owns the fabric transform\n     * @type Number\n     * @private\n     */\n    mainTouchId: null,\n\n    /**\n     * Adds mouse listeners to canvas\n     * @private\n     */\n    _initEventListeners: function () {\n      // in case we initialized the class twice. This should not happen normally\n      // but in some kind of applications where the canvas element may be changed\n      // this is a workaround to having double listeners.\n      this.removeListeners();\n      this._bindEvents();\n      this.addOrRemove(addListener, 'add');\n    },\n\n    /**\n     * return an event prefix pointer or mouse.\n     * @private\n     */\n    _getEventPrefix: function () {\n      return this.enablePointerEvents ? 'pointer' : 'mouse';\n    },\n\n    addOrRemove: function(functor, eventjsFunctor) {\n      var canvasElement = this.upperCanvasEl,\n          eventTypePrefix = this._getEventPrefix();\n      functor(fabric.window, 'resize', this._onResize);\n      functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n      functor(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n      functor(canvasElement, eventTypePrefix + 'out', this._onMouseOut);\n      functor(canvasElement, eventTypePrefix + 'enter', this._onMouseEnter);\n      functor(canvasElement, 'wheel', this._onMouseWheel);\n      functor(canvasElement, 'contextmenu', this._onContextMenu);\n      functor(canvasElement, 'dblclick', this._onDoubleClick);\n      functor(canvasElement, 'dragover', this._onDragOver);\n      functor(canvasElement, 'dragenter', this._onDragEnter);\n      functor(canvasElement, 'dragleave', this._onDragLeave);\n      functor(canvasElement, 'drop', this._onDrop);\n      if (!this.enablePointerEvents) {\n        functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);\n      }\n      if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {\n        eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);\n        eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);\n        eventjs[eventjsFunctor](canvasElement, 'orientation', this._onOrientationChange);\n        eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);\n        eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);\n      }\n    },\n\n    /**\n     * Removes all event listeners\n     */\n    removeListeners: function() {\n      this.addOrRemove(removeListener, 'remove');\n      // if you dispose on a mouseDown, before mouse up, you need to clean document to...\n      var eventTypePrefix = this._getEventPrefix();\n      removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n      removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n      removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n      removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n    },\n\n    /**\n     * @private\n     */\n    _bindEvents: function() {\n      if (this.eventsBound) {\n        // for any reason we pass here twice we do not want to bind events twice.\n        return;\n      }\n      this._onMouseDown = this._onMouseDown.bind(this);\n      this._onTouchStart = this._onTouchStart.bind(this);\n      this._onMouseMove = this._onMouseMove.bind(this);\n      this._onMouseUp = this._onMouseUp.bind(this);\n      this._onTouchEnd = this._onTouchEnd.bind(this);\n      this._onResize = this._onResize.bind(this);\n      this._onGesture = this._onGesture.bind(this);\n      this._onDrag = this._onDrag.bind(this);\n      this._onShake = this._onShake.bind(this);\n      this._onLongPress = this._onLongPress.bind(this);\n      this._onOrientationChange = this._onOrientationChange.bind(this);\n      this._onMouseWheel = this._onMouseWheel.bind(this);\n      this._onMouseOut = this._onMouseOut.bind(this);\n      this._onMouseEnter = this._onMouseEnter.bind(this);\n      this._onContextMenu = this._onContextMenu.bind(this);\n      this._onDoubleClick = this._onDoubleClick.bind(this);\n      this._onDragOver = this._onDragOver.bind(this);\n      this._onDragEnter = this._simpleEventHandler.bind(this, 'dragenter');\n      this._onDragLeave = this._simpleEventHandler.bind(this, 'dragleave');\n      this._onDrop = this._onDrop.bind(this);\n      this.eventsBound = true;\n    },\n\n    /**\n     * @private\n     * @param {Event} [e] Event object fired on Event.js gesture\n     * @param {Event} [self] Inner Event object\n     */\n    _onGesture: function(e, self) {\n      this.__onTransformGesture && this.__onTransformGesture(e, self);\n    },\n\n    /**\n     * @private\n     * @param {Event} [e] Event object fired on Event.js drag\n     * @param {Event} [self] Inner Event object\n     */\n    _onDrag: function(e, self) {\n      this.__onDrag && this.__onDrag(e, self);\n    },\n\n    /**\n     * @private\n     * @param {Event} [e] Event object fired on wheel event\n     */\n    _onMouseWheel: function(e) {\n      this.__onMouseWheel(e);\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mousedown\n     */\n    _onMouseOut: function(e) {\n      var target = this._hoveredTarget;\n      this.fire('mouse:out', { target: target, e: e });\n      this._hoveredTarget = null;\n      target && target.fire('mouseout', { e: e });\n\n      var _this = this;\n      this._hoveredTargets.forEach(function(_target){\n        _this.fire('mouse:out', { target: target, e: e });\n        _target && target.fire('mouseout', { e: e });\n      });\n      this._hoveredTargets = [];\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mouseenter\n     */\n    _onMouseEnter: function(e) {\n      // This find target and consequent 'mouse:over' is used to\n      // clear old instances on hovered target.\n      // calling findTarget has the side effect of killing target.__corner.\n      // as a short term fix we are not firing this if we are currently transforming.\n      // as a long term fix we need to separate the action of finding a target with the\n      // side effects we added to it.\n      if (!this._currentTransform && !this.findTarget(e)) {\n        this.fire('mouse:over', { target: null, e: e });\n        this._hoveredTarget = null;\n        this._hoveredTargets = [];\n      }\n    },\n\n    /**\n     * @private\n     * @param {Event} [e] Event object fired on Event.js orientation change\n     * @param {Event} [self] Inner Event object\n     */\n    _onOrientationChange: function(e, self) {\n      this.__onOrientationChange && this.__onOrientationChange(e, self);\n    },\n\n    /**\n     * @private\n     * @param {Event} [e] Event object fired on Event.js shake\n     * @param {Event} [self] Inner Event object\n     */\n    _onShake: function(e, self) {\n      this.__onShake && this.__onShake(e, self);\n    },\n\n    /**\n     * @private\n     * @param {Event} [e] Event object fired on Event.js shake\n     * @param {Event} [self] Inner Event object\n     */\n    _onLongPress: function(e, self) {\n      this.__onLongPress && this.__onLongPress(e, self);\n    },\n\n    /**\n     * prevent default to allow drop event to be fired\n     * @private\n     * @param {Event} [e] Event object fired on Event.js shake\n     */\n    _onDragOver: function(e) {\n      e.preventDefault();\n      var target = this._simpleEventHandler('dragover', e);\n      this._fireEnterLeaveEvents(target, e);\n    },\n\n    /**\n     * `drop:before` is a an event that allow you to schedule logic\n     * before the `drop` event. Prefer `drop` event always, but if you need\n     * to run some drop-disabling logic on an event, since there is no way\n     * to handle event handlers ordering, use `drop:before`\n     * @param {Event} e\n     */\n    _onDrop: function (e) {\n      this._simpleEventHandler('drop:before', e);\n      return this._simpleEventHandler('drop', e);\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mousedown\n     */\n    _onContextMenu: function (e) {\n      if (this.stopContextMenu) {\n        e.stopPropagation();\n        e.preventDefault();\n      }\n      return false;\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mousedown\n     */\n    _onDoubleClick: function (e) {\n      this._cacheTransformEventData(e);\n      this._handleEvent(e, 'dblclick');\n      this._resetTransformEventData(e);\n    },\n\n    /**\n     * Return a the id of an event.\n     * returns either the pointerId or the identifier or 0 for the mouse event\n     * @private\n     * @param {Event} evt Event object\n     */\n    getPointerId: function(evt) {\n      var changedTouches = evt.changedTouches;\n\n      if (changedTouches) {\n        return changedTouches[0] && changedTouches[0].identifier;\n      }\n\n      if (this.enablePointerEvents) {\n        return evt.pointerId;\n      }\n\n      return -1;\n    },\n\n    /**\n     * Determines if an event has the id of the event that is considered main\n     * @private\n     * @param {evt} event Event object\n     */\n    _isMainEvent: function(evt) {\n      if (evt.isPrimary === true) {\n        return true;\n      }\n      if (evt.isPrimary === false) {\n        return false;\n      }\n      if (evt.type === 'touchend' && evt.touches.length === 0) {\n        return true;\n      }\n      if (evt.changedTouches) {\n        return evt.changedTouches[0].identifier === this.mainTouchId;\n      }\n      return true;\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mousedown\n     */\n    _onTouchStart: function(e) {\n      e.preventDefault();\n      if (this.mainTouchId === null) {\n        this.mainTouchId = this.getPointerId(e);\n      }\n      this.__onMouseDown(e);\n      this._resetTransformEventData();\n      var canvasElement = this.upperCanvasEl,\n          eventTypePrefix = this._getEventPrefix();\n      addListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n      addListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n      // Unbind mousedown to prevent double triggers from touch devices\n      removeListener(canvasElement, eventTypePrefix + 'down', this._onMouseDown);\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mousedown\n     */\n    _onMouseDown: function (e) {\n      this.__onMouseDown(e);\n      this._resetTransformEventData();\n      var canvasElement = this.upperCanvasEl,\n          eventTypePrefix = this._getEventPrefix();\n      removeListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n      addListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n      addListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mousedown\n     */\n    _onTouchEnd: function(e) {\n      if (e.touches.length > 0) {\n        // if there are still touches stop here\n        return;\n      }\n      this.__onMouseUp(e);\n      this._resetTransformEventData();\n      this.mainTouchId = null;\n      var eventTypePrefix = this._getEventPrefix();\n      removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);\n      removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);\n      var _this = this;\n      if (this._willAddMouseDown) {\n        clearTimeout(this._willAddMouseDown);\n      }\n      this._willAddMouseDown = setTimeout(function() {\n        // Wait 400ms before rebinding mousedown to prevent double triggers\n        // from touch devices\n        addListener(_this.upperCanvasEl, eventTypePrefix + 'down', _this._onMouseDown);\n        _this._willAddMouseDown = 0;\n      }, 400);\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mouseup\n     */\n    _onMouseUp: function (e) {\n      this.__onMouseUp(e);\n      this._resetTransformEventData();\n      var canvasElement = this.upperCanvasEl,\n          eventTypePrefix = this._getEventPrefix();\n      if (this._isMainEvent(e)) {\n        removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);\n        removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n        addListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);\n      }\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mousemove\n     */\n    _onMouseMove: function (e) {\n      !this.allowTouchScrolling && e.preventDefault && e.preventDefault();\n      this.__onMouseMove(e);\n    },\n\n    /**\n     * @private\n     */\n    _onResize: function () {\n      this.calcOffset();\n    },\n\n    /**\n     * Decides whether the canvas should be redrawn in mouseup and mousedown events.\n     * @private\n     * @param {Object} target\n     */\n    _shouldRender: function(target) {\n      var activeObject = this._activeObject;\n\n      if (\n        !!activeObject !== !!target ||\n        (activeObject && target && (activeObject !== target))\n      ) {\n        // this covers: switch of target, from target to no target, selection of target\n        // multiSelection with key and mouse\n        return true;\n      }\n      else if (activeObject && activeObject.isEditing) {\n        // if we mouse up/down over a editing textbox a cursor change,\n        // there is no need to re render\n        return false;\n      }\n      return false;\n    },\n\n    /**\n     * Method that defines the actions when mouse is released on canvas.\n     * The method resets the currentTransform parameters, store the image corner\n     * position in the image object and render the canvas on top.\n     * @private\n     * @param {Event} e Event object fired on mouseup\n     */\n    __onMouseUp: function (e) {\n      var target, transform = this._currentTransform,\n          groupSelector = this._groupSelector, shouldRender = false,\n          isClick = (!groupSelector || (groupSelector.left === 0 && groupSelector.top === 0));\n      this._cacheTransformEventData(e);\n      target = this._target;\n      this._handleEvent(e, 'up:before');\n      // if right/middle click just fire events and return\n      // target undefined will make the _handleEvent search the target\n      if (checkClick(e, RIGHT_CLICK)) {\n        if (this.fireRightClick) {\n          this._handleEvent(e, 'up', RIGHT_CLICK, isClick);\n        }\n        return;\n      }\n\n      if (checkClick(e, MIDDLE_CLICK)) {\n        if (this.fireMiddleClick) {\n          this._handleEvent(e, 'up', MIDDLE_CLICK, isClick);\n        }\n        this._resetTransformEventData();\n        return;\n      }\n\n      if (this.isDrawingMode && this._isCurrentlyDrawing) {\n        this._onMouseUpInDrawingMode(e);\n        return;\n      }\n\n      if (!this._isMainEvent(e)) {\n        return;\n      }\n      if (transform) {\n        this._finalizeCurrentTransform(e);\n        shouldRender = transform.actionPerformed;\n      }\n      if (!isClick) {\n        var targetWasActive = target === this._activeObject;\n        this._maybeGroupObjects(e);\n        if (!shouldRender) {\n          shouldRender = (\n            this._shouldRender(target) ||\n            (!targetWasActive && target === this._activeObject)\n          );\n        }\n      }\n      var corner, pointer;\n      if (target) {\n        corner = target._findTargetCorner(\n          this.getPointer(e, true),\n          fabric.util.isTouchEvent(e)\n        );\n        if (target.selectable && target !== this._activeObject && target.activeOn === 'up') {\n          this.setActiveObject(target, e);\n          shouldRender = true;\n        }\n        else {\n          var control = target.controls[corner],\n              mouseUpHandler = control && control.getMouseUpHandler(e, target, control);\n          if (mouseUpHandler) {\n            pointer = this.getPointer(e);\n            mouseUpHandler(e, transform, pointer.x, pointer.y);\n          }\n        }\n        target.isMoving = false;\n      }\n      // if we are ending up a transform on a different control or a new object\n      // fire the original mouse up from the corner that started the transform\n      if (transform && (transform.target !== target || transform.corner !== corner)) {\n        var originalControl = transform.target && transform.target.controls[transform.corner],\n            originalMouseUpHandler = originalControl && originalControl.getMouseUpHandler(e, target, control);\n        pointer = pointer || this.getPointer(e);\n        originalMouseUpHandler && originalMouseUpHandler(e, transform, pointer.x, pointer.y);\n      }\n      this._setCursorFromEvent(e, target);\n      this._handleEvent(e, 'up', LEFT_CLICK, isClick);\n      this._groupSelector = null;\n      this._currentTransform = null;\n      // reset the target information about which corner is selected\n      target && (target.__corner = 0);\n      if (shouldRender) {\n        this.requestRenderAll();\n      }\n      else if (!isClick) {\n        this.renderTop();\n      }\n    },\n\n    /**\n     * @private\n     * Handle event firing for target and subtargets\n     * @param {Event} e event from mouse\n     * @param {String} eventType event to fire (up, down or move)\n     * @return {Fabric.Object} target return the the target found, for internal reasons.\n     */\n    _simpleEventHandler: function(eventType, e) {\n      var target = this.findTarget(e),\n          targets = this.targets,\n          options = {\n            e: e,\n            target: target,\n            subTargets: targets,\n          };\n      this.fire(eventType, options);\n      target && target.fire(eventType, options);\n      if (!targets) {\n        return target;\n      }\n      for (var i = 0; i < targets.length; i++) {\n        targets[i].fire(eventType, options);\n      }\n      return target;\n    },\n\n    /**\n     * @private\n     * Handle event firing for target and subtargets\n     * @param {Event} e event from mouse\n     * @param {String} eventType event to fire (up, down or move)\n     * @param {fabric.Object} targetObj receiving event\n     * @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right\n     * @param {Boolean} isClick for left button only, indicates that the mouse up happened without move.\n     */\n    _handleEvent: function(e, eventType, button, isClick) {\n      var target = this._target,\n          targets = this.targets || [],\n          options = {\n            e: e,\n            target: target,\n            subTargets: targets,\n            button: button || LEFT_CLICK,\n            isClick: isClick || false,\n            pointer: this._pointer,\n            absolutePointer: this._absolutePointer,\n            transform: this._currentTransform\n          };\n      if (eventType === 'up') {\n        options.currentTarget = this.findTarget(e);\n        options.currentSubTargets = this.targets;\n      }\n      this.fire('mouse:' + eventType, options);\n      target && target.fire('mouse' + eventType, options);\n      for (var i = 0; i < targets.length; i++) {\n        targets[i].fire('mouse' + eventType, options);\n      }\n    },\n\n    /**\n     * @private\n     * @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event\n     */\n    _finalizeCurrentTransform: function(e) {\n\n      var transform = this._currentTransform,\n          target = transform.target,\n          options = {\n            e: e,\n            target: target,\n            transform: transform,\n            action: transform.action,\n          };\n\n      if (target._scaling) {\n        target._scaling = false;\n      }\n\n      target.setCoords();\n\n      if (transform.actionPerformed || (this.stateful && target.hasStateChanged())) {\n        this._fire('modified', options);\n      }\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mousedown\n     */\n    _onMouseDownInDrawingMode: function(e) {\n      this._isCurrentlyDrawing = true;\n      if (this.getActiveObject()) {\n        this.discardActiveObject(e).requestRenderAll();\n      }\n      var pointer = this.getPointer(e);\n      this.freeDrawingBrush.onMouseDown(pointer, { e: e, pointer: pointer });\n      this._handleEvent(e, 'down');\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mousemove\n     */\n    _onMouseMoveInDrawingMode: function(e) {\n      if (this._isCurrentlyDrawing) {\n        var pointer = this.getPointer(e);\n        this.freeDrawingBrush.onMouseMove(pointer, { e: e, pointer: pointer });\n      }\n      this.setCursor(this.freeDrawingCursor);\n      this._handleEvent(e, 'move');\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object fired on mouseup\n     */\n    _onMouseUpInDrawingMode: function(e) {\n      var pointer = this.getPointer(e);\n      this._isCurrentlyDrawing = this.freeDrawingBrush.onMouseUp({ e: e, pointer: pointer });\n      this._handleEvent(e, 'up');\n    },\n\n    /**\n     * Method that defines the actions when mouse is clicked on canvas.\n     * The method inits the currentTransform parameters and renders all the\n     * canvas so the current image can be placed on the top canvas and the rest\n     * in on the container one.\n     * @private\n     * @param {Event} e Event object fired on mousedown\n     */\n    __onMouseDown: function (e) {\n      this._cacheTransformEventData(e);\n      this._handleEvent(e, 'down:before');\n      var target = this._target;\n      // if right click just fire events\n      if (checkClick(e, RIGHT_CLICK)) {\n        if (this.fireRightClick) {\n          this._handleEvent(e, 'down', RIGHT_CLICK);\n        }\n        return;\n      }\n\n      if (checkClick(e, MIDDLE_CLICK)) {\n        if (this.fireMiddleClick) {\n          this._handleEvent(e, 'down', MIDDLE_CLICK);\n        }\n        return;\n      }\n\n      if (this.isDrawingMode) {\n        this._onMouseDownInDrawingMode(e);\n        return;\n      }\n\n      if (!this._isMainEvent(e)) {\n        return;\n      }\n\n      // ignore if some object is being transformed at this moment\n      if (this._currentTransform) {\n        return;\n      }\n\n      var pointer = this._pointer;\n      // save pointer for check in __onMouseUp event\n      this._previousPointer = pointer;\n      var shouldRender = this._shouldRender(target),\n          shouldGroup = this._shouldGroup(e, target);\n      if (this._shouldClearSelection(e, target)) {\n        this.discardActiveObject(e);\n      }\n      else if (shouldGroup) {\n        this._handleGrouping(e, target);\n        target = this._activeObject;\n      }\n\n      if (this.selection && (!target ||\n        (!target.selectable && !target.isEditing && target !== this._activeObject))) {\n        this._groupSelector = {\n          ex: this._absolutePointer.x,\n          ey: this._absolutePointer.y,\n          top: 0,\n          left: 0\n        };\n      }\n\n      if (target) {\n        var alreadySelected = target === this._activeObject;\n        if (target.selectable && target.activeOn === 'down') {\n          this.setActiveObject(target, e);\n        }\n        var corner = target._findTargetCorner(\n          this.getPointer(e, true),\n          fabric.util.isTouchEvent(e)\n        );\n        target.__corner = corner;\n        if (target === this._activeObject && (corner || !shouldGroup)) {\n          this._setupCurrentTransform(e, target, alreadySelected);\n          var control = target.controls[corner],\n              pointer = this.getPointer(e),\n              mouseDownHandler = control && control.getMouseDownHandler(e, target, control);\n          if (mouseDownHandler) {\n            mouseDownHandler(e, this._currentTransform, pointer.x, pointer.y);\n          }\n        }\n      }\n      this._handleEvent(e, 'down');\n      // we must renderAll so that we update the visuals\n      (shouldRender || shouldGroup) && this.requestRenderAll();\n    },\n\n    /**\n     * reset cache form common information needed during event processing\n     * @private\n     */\n    _resetTransformEventData: function() {\n      this._target = null;\n      this._pointer = null;\n      this._absolutePointer = null;\n    },\n\n    /**\n     * Cache common information needed during event processing\n     * @private\n     * @param {Event} e Event object fired on event\n     */\n    _cacheTransformEventData: function(e) {\n      // reset in order to avoid stale caching\n      this._resetTransformEventData();\n      this._pointer = this.getPointer(e, true);\n      this._absolutePointer = this.restorePointerVpt(this._pointer);\n      this._target = this._currentTransform ? this._currentTransform.target : this.findTarget(e) || null;\n    },\n\n    /**\n     * @private\n     */\n    _beforeTransform: function(e) {\n      var t = this._currentTransform;\n      this.stateful && t.target.saveState();\n      this.fire('before:transform', {\n        e: e,\n        transform: t,\n      });\n    },\n\n    /**\n     * Method that defines the actions when mouse is hovering the canvas.\n     * The currentTransform parameter will define whether the user is rotating/scaling/translating\n     * an image or neither of them (only hovering). A group selection is also possible and would cancel\n     * all any other type of action.\n     * In case of an image transformation only the top canvas will be rendered.\n     * @private\n     * @param {Event} e Event object fired on mousemove\n     */\n    __onMouseMove: function (e) {\n      this._handleEvent(e, 'move:before');\n      this._cacheTransformEventData(e);\n      var target, pointer;\n\n      if (this.isDrawingMode) {\n        this._onMouseMoveInDrawingMode(e);\n        return;\n      }\n\n      if (!this._isMainEvent(e)) {\n        return;\n      }\n\n      var groupSelector = this._groupSelector;\n\n      // We initially clicked in an empty area, so we draw a box for multiple selection\n      if (groupSelector) {\n        pointer = this._absolutePointer;\n\n        groupSelector.left = pointer.x - groupSelector.ex;\n        groupSelector.top = pointer.y - groupSelector.ey;\n\n        this.renderTop();\n      }\n      else if (!this._currentTransform) {\n        target = this.findTarget(e) || null;\n        this._setCursorFromEvent(e, target);\n        this._fireOverOutEvents(target, e);\n      }\n      else {\n        this._transformObject(e);\n      }\n      this._handleEvent(e, 'move');\n      this._resetTransformEventData();\n    },\n\n    /**\n     * Manage the mouseout, mouseover events for the fabric object on the canvas\n     * @param {Fabric.Object} target the target where the target from the mousemove event\n     * @param {Event} e Event object fired on mousemove\n     * @private\n     */\n    _fireOverOutEvents: function(target, e) {\n      var _hoveredTarget = this._hoveredTarget,\n          _hoveredTargets = this._hoveredTargets, targets = this.targets,\n          length = Math.max(_hoveredTargets.length, targets.length);\n\n      this.fireSyntheticInOutEvents(target, e, {\n        oldTarget: _hoveredTarget,\n        evtOut: 'mouseout',\n        canvasEvtOut: 'mouse:out',\n        evtIn: 'mouseover',\n        canvasEvtIn: 'mouse:over',\n      });\n      for (var i = 0; i < length; i++){\n        this.fireSyntheticInOutEvents(targets[i], e, {\n          oldTarget: _hoveredTargets[i],\n          evtOut: 'mouseout',\n          evtIn: 'mouseover',\n        });\n      }\n      this._hoveredTarget = target;\n      this._hoveredTargets = this.targets.concat();\n    },\n\n    /**\n     * Manage the dragEnter, dragLeave events for the fabric objects on the canvas\n     * @param {Fabric.Object} target the target where the target from the onDrag event\n     * @param {Event} e Event object fired on ondrag\n     * @private\n     */\n    _fireEnterLeaveEvents: function(target, e) {\n      var _draggedoverTarget = this._draggedoverTarget,\n          _hoveredTargets = this._hoveredTargets, targets = this.targets,\n          length = Math.max(_hoveredTargets.length, targets.length);\n\n      this.fireSyntheticInOutEvents(target, e, {\n        oldTarget: _draggedoverTarget,\n        evtOut: 'dragleave',\n        evtIn: 'dragenter',\n      });\n      for (var i = 0; i < length; i++) {\n        this.fireSyntheticInOutEvents(targets[i], e, {\n          oldTarget: _hoveredTargets[i],\n          evtOut: 'dragleave',\n          evtIn: 'dragenter',\n        });\n      }\n      this._draggedoverTarget = target;\n    },\n\n    /**\n     * Manage the synthetic in/out events for the fabric objects on the canvas\n     * @param {Fabric.Object} target the target where the target from the supported events\n     * @param {Event} e Event object fired\n     * @param {Object} config configuration for the function to work\n     * @param {String} config.targetName property on the canvas where the old target is stored\n     * @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out\n     * @param {String} config.evtOut name of the event to fire for out\n     * @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in\n     * @param {String} config.evtIn name of the event to fire for in\n     * @private\n     */\n    fireSyntheticInOutEvents: function(target, e, config) {\n      var inOpt, outOpt, oldTarget = config.oldTarget, outFires, inFires,\n          targetChanged = oldTarget !== target, canvasEvtIn = config.canvasEvtIn, canvasEvtOut = config.canvasEvtOut;\n      if (targetChanged) {\n        inOpt = { e: e, target: target, previousTarget: oldTarget };\n        outOpt = { e: e, target: oldTarget, nextTarget: target };\n      }\n      inFires = target && targetChanged;\n      outFires = oldTarget && targetChanged;\n      if (outFires) {\n        canvasEvtOut && this.fire(canvasEvtOut, outOpt);\n        oldTarget.fire(config.evtOut, outOpt);\n      }\n      if (inFires) {\n        canvasEvtIn && this.fire(canvasEvtIn, inOpt);\n        target.fire(config.evtIn, inOpt);\n      }\n    },\n\n    /**\n     * Method that defines actions when an Event Mouse Wheel\n     * @param {Event} e Event object fired on mouseup\n     */\n    __onMouseWheel: function(e) {\n      this._cacheTransformEventData(e);\n      this._handleEvent(e, 'wheel');\n      this._resetTransformEventData();\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event fired on mousemove\n     */\n    _transformObject: function(e) {\n      var pointer = this.getPointer(e),\n          transform = this._currentTransform;\n\n      transform.reset = false;\n      transform.shiftKey = e.shiftKey;\n      transform.altKey = e[this.centeredKey];\n\n      this._performTransformAction(e, transform, pointer);\n      transform.actionPerformed && this.requestRenderAll();\n    },\n\n    /**\n     * @private\n     */\n    _performTransformAction: function(e, transform, pointer) {\n      var x = pointer.x,\n          y = pointer.y,\n          action = transform.action,\n          actionPerformed = false,\n          actionHandler = transform.actionHandler;\n          // this object could be created from the function in the control handlers\n\n\n      if (actionHandler) {\n        actionPerformed = actionHandler(e, transform, x, y);\n      }\n      if (action === 'drag' && actionPerformed) {\n        transform.target.isMoving = true;\n        this.setCursor(transform.target.moveCursor || this.moveCursor);\n      }\n      transform.actionPerformed = transform.actionPerformed || actionPerformed;\n    },\n\n    /**\n     * @private\n     */\n    _fire: fabric.controlsUtils.fireEvent,\n\n    /**\n     * Sets the cursor depending on where the canvas is being hovered.\n     * Note: very buggy in Opera\n     * @param {Event} e Event object\n     * @param {Object} target Object that the mouse is hovering, if so.\n     */\n    _setCursorFromEvent: function (e, target) {\n      if (!target) {\n        this.setCursor(this.defaultCursor);\n        return false;\n      }\n      var hoverCursor = target.hoverCursor || this.hoverCursor,\n          activeSelection = this._activeObject && this._activeObject.type === 'activeSelection' ?\n            this._activeObject : null,\n          // only show proper corner when group selection is not active\n          corner = (!activeSelection || !activeSelection.contains(target))\n          // here we call findTargetCorner always with undefined for the touch parameter.\n          // we assume that if you are using a cursor you do not need to interact with\n          // the bigger touch area.\n                    && target._findTargetCorner(this.getPointer(e, true));\n\n      if (!corner) {\n        if (target.subTargetCheck){\n          // hoverCursor should come from top-most subTarget,\n          // so we walk the array backwards\n          this.targets.concat().reverse().map(function(_target){\n            hoverCursor = _target.hoverCursor || hoverCursor;\n          });\n        }\n        this.setCursor(hoverCursor);\n      }\n      else {\n        this.setCursor(this.getCornerCursor(corner, target, e));\n      }\n    },\n\n    /**\n     * @private\n     */\n    getCornerCursor: function(corner, target, e) {\n      var control = target.controls[corner];\n      return control.cursorStyleHandler(e, control, target);\n    }\n  });\n})();\n\n\n(function() {\n\n  var min = Math.min,\n      max = Math.max;\n\n  fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {\n\n    /**\n     * @private\n     * @param {Event} e Event object\n     * @param {fabric.Object} target\n     * @return {Boolean}\n     */\n    _shouldGroup: function(e, target) {\n      var activeObject = this._activeObject;\n      return activeObject && this._isSelectionKeyPressed(e) && target && target.selectable && this.selection &&\n            (activeObject !== target || activeObject.type === 'activeSelection') && !target.onSelect({ e: e });\n    },\n\n    /**\n     * @private\n     * @param {Event} e Event object\n     * @param {fabric.Object} target\n     */\n    _handleGrouping: function (e, target) {\n      var activeObject = this._activeObject;\n      // avoid multi select when shift click on a corner\n      if (activeObject.__corner) {\n        return;\n      }\n      if (target === activeObject) {\n        // if it's a group, find target again, using activeGroup objects\n        target = this.findTarget(e, true);\n        // if even object is not found or we are on activeObjectCorner, bail out\n        if (!target || !target.selectable) {\n          return;\n        }\n      }\n      if (activeObject && activeObject.type === 'activeSelection') {\n        this._updateActiveSelection(target, e);\n      }\n      else {\n        this._createActiveSelection(target, e);\n      }\n    },\n\n    /**\n     * @private\n     */\n    _updateActiveSelection: function(target, e) {\n      var activeSelection = this._activeObject,\n          currentActiveObjects = activeSelection._objects.slice(0);\n      if (activeSelection.contains(target)) {\n        activeSelection.removeWithUpdate(target);\n        this._hoveredTarget = target;\n        this._hoveredTargets = this.targets.concat();\n        if (activeSelection.size() === 1) {\n          // activate last remaining object\n          this._setActiveObject(activeSelection.item(0), e);\n        }\n      }\n      else {\n        activeSelection.addWithUpdate(target);\n        this._hoveredTarget = activeSelection;\n        this._hoveredTargets = this.targets.concat();\n      }\n      this._fireSelectionEvents(currentActiveObjects, e);\n    },\n\n    /**\n     * @private\n     */\n    _createActiveSelection: function(target, e) {\n      var currentActives = this.getActiveObjects(), group = this._createGroup(target);\n      this._hoveredTarget = group;\n      // ISSUE 4115: should we consider subTargets here?\n      // this._hoveredTargets = [];\n      // this._hoveredTargets = this.targets.concat();\n      this._setActiveObject(group, e);\n      this._fireSelectionEvents(currentActives, e);\n    },\n\n    /**\n     * @private\n     * @param {Object} target\n     */\n    _createGroup: function(target) {\n      var objects = this._objects,\n          isActiveLower = objects.indexOf(this._activeObject) < objects.indexOf(target),\n          groupObjects = isActiveLower\n            ? [this._activeObject, target]\n            : [target, this._activeObject];\n      this._activeObject.isEditing && this._activeObject.exitEditing();\n      return new fabric.ActiveSelection(groupObjects, {\n        canvas: this\n      });\n    },\n\n    /**\n     * @private\n     * @param {Event} e mouse event\n     */\n    _groupSelectedObjects: function (e) {\n\n      var group = this._collectObjects(e),\n          aGroup;\n\n      // do not create group for 1 element only\n      if (group.length === 1) {\n        this.setActiveObject(group[0], e);\n      }\n      else if (group.length > 1) {\n        aGroup = new fabric.ActiveSelection(group.reverse(), {\n          canvas: this\n        });\n        this.setActiveObject(aGroup, e);\n      }\n    },\n\n    /**\n     * @private\n     */\n    _collectObjects: function(e) {\n      var group = [],\n          currentObject,\n          x1 = this._groupSelector.ex,\n          y1 = this._groupSelector.ey,\n          x2 = x1 + this._groupSelector.left,\n          y2 = y1 + this._groupSelector.top,\n          selectionX1Y1 = new fabric.Point(min(x1, x2), min(y1, y2)),\n          selectionX2Y2 = new fabric.Point(max(x1, x2), max(y1, y2)),\n          allowIntersect = !this.selectionFullyContained,\n          isClick = x1 === x2 && y1 === y2;\n      // we iterate reverse order to collect top first in case of click.\n      for (var i = this._objects.length; i--; ) {\n        currentObject = this._objects[i];\n\n        if (!currentObject || !currentObject.selectable || !currentObject.visible) {\n          continue;\n        }\n\n        if ((allowIntersect && currentObject.intersectsWithRect(selectionX1Y1, selectionX2Y2, true)) ||\n            currentObject.isContainedWithinRect(selectionX1Y1, selectionX2Y2, true) ||\n            (allowIntersect && currentObject.containsPoint(selectionX1Y1, null, true)) ||\n            (allowIntersect && currentObject.containsPoint(selectionX2Y2, null, true))\n        ) {\n          group.push(currentObject);\n          // only add one object if it's a click\n          if (isClick) {\n            break;\n          }\n        }\n      }\n\n      if (group.length > 1) {\n        group = group.filter(function(object) {\n          return !object.onSelect({ e: e });\n        });\n      }\n\n      return group;\n    },\n\n    /**\n     * @private\n     */\n    _maybeGroupObjects: function(e) {\n      if (this.selection && this._groupSelector) {\n        this._groupSelectedObjects(e);\n      }\n      this.setCursor(this.defaultCursor);\n      // clear selection and current transformation\n      this._groupSelector = null;\n    }\n  });\n\n})();\n\n\n(function () {\n  fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n    /**\n     * Exports canvas element to a dataurl image. Note that when multiplier is used, cropping is scaled appropriately\n     * @param {Object} [options] Options object\n     * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n     * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n     * @param {Number} [options.multiplier=1] Multiplier to scale by, to have consistent\n     * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n     * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n     * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n     * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n     * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 2.0.0\n     * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n     * @see {@link http://jsfiddle.net/fabricjs/NfZVb/|jsFiddle demo}\n     * @example <caption>Generate jpeg dataURL with lower quality</caption>\n     * var dataURL = canvas.toDataURL({\n     *   format: 'jpeg',\n     *   quality: 0.8\n     * });\n     * @example <caption>Generate cropped png dataURL (clipping of canvas)</caption>\n     * var dataURL = canvas.toDataURL({\n     *   format: 'png',\n     *   left: 100,\n     *   top: 100,\n     *   width: 200,\n     *   height: 200\n     * });\n     * @example <caption>Generate double scaled png dataURL</caption>\n     * var dataURL = canvas.toDataURL({\n     *   format: 'png',\n     *   multiplier: 2\n     * });\n     */\n    toDataURL: function (options) {\n      options || (options = { });\n\n      var format = options.format || 'png',\n          quality = options.quality || 1,\n          multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? this.getRetinaScaling() : 1),\n          canvasEl = this.toCanvasElement(multiplier, options);\n      return fabric.util.toDataURL(canvasEl, format, quality);\n    },\n\n    /**\n     * Create a new HTMLCanvas element painted with the current canvas content.\n     * No need to resize the actual one or repaint it.\n     * Will transfer object ownership to a new canvas, paint it, and set everything back.\n     * This is an intermediary step used to get to a dataUrl but also it is useful to\n     * create quick image copies of a canvas without passing for the dataUrl string\n     * @param {Number} [multiplier] a zoom factor.\n     * @param {Object} [cropping] Cropping informations\n     * @param {Number} [cropping.left] Cropping left offset.\n     * @param {Number} [cropping.top] Cropping top offset.\n     * @param {Number} [cropping.width] Cropping width.\n     * @param {Number} [cropping.height] Cropping height.\n     */\n    toCanvasElement: function(multiplier, cropping) {\n      multiplier = multiplier || 1;\n      cropping = cropping || { };\n      var scaledWidth = (cropping.width || this.width) * multiplier,\n          scaledHeight = (cropping.height || this.height) * multiplier,\n          zoom = this.getZoom(),\n          originalWidth = this.width,\n          originalHeight = this.height,\n          newZoom = zoom * multiplier,\n          vp = this.viewportTransform,\n          translateX = (vp[4] - (cropping.left || 0)) * multiplier,\n          translateY = (vp[5] - (cropping.top || 0)) * multiplier,\n          originalInteractive = this.interactive,\n          newVp = [newZoom, 0, 0, newZoom, translateX, translateY],\n          originalRetina = this.enableRetinaScaling,\n          canvasEl = fabric.util.createCanvasElement(),\n          originalContextTop = this.contextTop;\n      canvasEl.width = scaledWidth;\n      canvasEl.height = scaledHeight;\n      this.contextTop = null;\n      this.enableRetinaScaling = false;\n      this.interactive = false;\n      this.viewportTransform = newVp;\n      this.width = scaledWidth;\n      this.height = scaledHeight;\n      this.calcViewportBoundaries();\n      this.renderCanvas(canvasEl.getContext('2d'), this._objects);\n      this.viewportTransform = vp;\n      this.width = originalWidth;\n      this.height = originalHeight;\n      this.calcViewportBoundaries();\n      this.interactive = originalInteractive;\n      this.enableRetinaScaling = originalRetina;\n      this.contextTop = originalContextTop;\n      return canvasEl;\n    },\n  });\n\n})();\n\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n  /**\n   * Populates canvas with data from the specified JSON.\n   * JSON format must conform to the one of {@link fabric.Canvas#toJSON}\n   * @param {String|Object} json JSON string or object\n   * @param {Function} callback Callback, invoked when json is parsed\n   *                            and corresponding objects (e.g: {@link fabric.Image})\n   *                            are initialized\n   * @param {Function} [reviver] Method for further parsing of JSON elements, called after each fabric object created.\n   * @return {fabric.Canvas} instance\n   * @chainable\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#deserialization}\n   * @see {@link http://jsfiddle.net/fabricjs/fmgXt/|jsFiddle demo}\n   * @example <caption>loadFromJSON</caption>\n   * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas));\n   * @example <caption>loadFromJSON with reviver</caption>\n   * canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) {\n   *   // `o` = json object\n   *   // `object` = fabric.Object instance\n   *   // ... do some stuff ...\n   * });\n   */\n  loadFromJSON: function (json, callback, reviver) {\n    if (!json) {\n      return;\n    }\n\n    // serialize if it wasn't already\n    var serialized = (typeof json === 'string')\n      ? JSON.parse(json)\n      : fabric.util.object.clone(json);\n\n    var _this = this,\n        clipPath = serialized.clipPath,\n        renderOnAddRemove = this.renderOnAddRemove;\n\n    this.renderOnAddRemove = false;\n\n    delete serialized.clipPath;\n\n    this._enlivenObjects(serialized.objects, function (enlivenedObjects) {\n      _this.clear();\n      _this._setBgOverlay(serialized, function () {\n        if (clipPath) {\n          _this._enlivenObjects([clipPath], function (enlivenedCanvasClip) {\n            _this.clipPath = enlivenedCanvasClip[0];\n            _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n          });\n        }\n        else {\n          _this.__setupCanvas.call(_this, serialized, enlivenedObjects, renderOnAddRemove, callback);\n        }\n      });\n    }, reviver);\n    return this;\n  },\n\n  /**\n   * @private\n   * @param {Object} serialized Object with background and overlay information\n   * @param {Array} restored canvas objects\n   * @param {Function} cached renderOnAddRemove callback\n   * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n   */\n  __setupCanvas: function(serialized, enlivenedObjects, renderOnAddRemove, callback) {\n    var _this = this;\n    enlivenedObjects.forEach(function(obj, index) {\n      // we splice the array just in case some custom classes restored from JSON\n      // will add more object to canvas at canvas init.\n      _this.insertAt(obj, index);\n    });\n    this.renderOnAddRemove = renderOnAddRemove;\n    // remove parts i cannot set as options\n    delete serialized.objects;\n    delete serialized.backgroundImage;\n    delete serialized.overlayImage;\n    delete serialized.background;\n    delete serialized.overlay;\n    // this._initOptions does too many things to just\n    // call it. Normally loading an Object from JSON\n    // create the Object instance. Here the Canvas is\n    // already an instance and we are just loading things over it\n    this._setOptions(serialized);\n    this.renderAll();\n    callback && callback();\n  },\n\n  /**\n   * @private\n   * @param {Object} serialized Object with background and overlay information\n   * @param {Function} callback Invoked after all background and overlay images/patterns loaded\n   */\n  _setBgOverlay: function(serialized, callback) {\n    var loaded = {\n      backgroundColor: false,\n      overlayColor: false,\n      backgroundImage: false,\n      overlayImage: false\n    };\n\n    if (!serialized.backgroundImage && !serialized.overlayImage && !serialized.background && !serialized.overlay) {\n      callback && callback();\n      return;\n    }\n\n    var cbIfLoaded = function () {\n      if (loaded.backgroundImage && loaded.overlayImage && loaded.backgroundColor && loaded.overlayColor) {\n        callback && callback();\n      }\n    };\n\n    this.__setBgOverlay('backgroundImage', serialized.backgroundImage, loaded, cbIfLoaded);\n    this.__setBgOverlay('overlayImage', serialized.overlayImage, loaded, cbIfLoaded);\n    this.__setBgOverlay('backgroundColor', serialized.background, loaded, cbIfLoaded);\n    this.__setBgOverlay('overlayColor', serialized.overlay, loaded, cbIfLoaded);\n  },\n\n  /**\n   * @private\n   * @param {String} property Property to set (backgroundImage, overlayImage, backgroundColor, overlayColor)\n   * @param {(Object|String)} value Value to set\n   * @param {Object} loaded Set loaded property to true if property is set\n   * @param {Object} callback Callback function to invoke after property is set\n   */\n  __setBgOverlay: function(property, value, loaded, callback) {\n    var _this = this;\n\n    if (!value) {\n      loaded[property] = true;\n      callback && callback();\n      return;\n    }\n\n    if (property === 'backgroundImage' || property === 'overlayImage') {\n      fabric.util.enlivenObjects([value], function(enlivedObject){\n        _this[property] = enlivedObject[0];\n        loaded[property] = true;\n        callback && callback();\n      });\n    }\n    else {\n      this['set' + fabric.util.string.capitalize(property, true)](value, function() {\n        loaded[property] = true;\n        callback && callback();\n      });\n    }\n  },\n\n  /**\n   * @private\n   * @param {Array} objects\n   * @param {Function} callback\n   * @param {Function} [reviver]\n   */\n  _enlivenObjects: function (objects, callback, reviver) {\n    if (!objects || objects.length === 0) {\n      callback && callback([]);\n      return;\n    }\n\n    fabric.util.enlivenObjects(objects, function(enlivenedObjects) {\n      callback && callback(enlivenedObjects);\n    }, null, reviver);\n  },\n\n  /**\n   * @private\n   * @param {String} format\n   * @param {Function} callback\n   */\n  _toDataURL: function (format, callback) {\n    this.clone(function (clone) {\n      callback(clone.toDataURL(format));\n    });\n  },\n\n  /**\n   * @private\n   * @param {String} format\n   * @param {Number} multiplier\n   * @param {Function} callback\n   */\n  _toDataURLWithMultiplier: function (format, multiplier, callback) {\n    this.clone(function (clone) {\n      callback(clone.toDataURLWithMultiplier(format, multiplier));\n    });\n  },\n\n  /**\n   * Clones canvas instance\n   * @param {Object} [callback] Receives cloned instance as a first argument\n   * @param {Array} [properties] Array of properties to include in the cloned canvas and children\n   */\n  clone: function (callback, properties) {\n    var data = JSON.stringify(this.toJSON(properties));\n    this.cloneWithoutData(function(clone) {\n      clone.loadFromJSON(data, function() {\n        callback && callback(clone);\n      });\n    });\n  },\n\n  /**\n   * Clones canvas instance without cloning existing data.\n   * This essentially copies canvas dimensions, clipping properties, etc.\n   * but leaves data empty (so that you can populate it with your own)\n   * @param {Object} [callback] Receives cloned instance as a first argument\n   */\n  cloneWithoutData: function(callback) {\n    var el = fabric.util.createCanvasElement();\n\n    el.width = this.width;\n    el.height = this.height;\n\n    var clone = new fabric.Canvas(el);\n    if (this.backgroundImage) {\n      clone.setBackgroundImage(this.backgroundImage.src, function() {\n        clone.renderAll();\n        callback && callback(clone);\n      });\n      clone.backgroundImageOpacity = this.backgroundImageOpacity;\n      clone.backgroundImageStretch = this.backgroundImageStretch;\n    }\n    else {\n      callback && callback(clone);\n    }\n  }\n});\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      extend = fabric.util.object.extend,\n      clone = fabric.util.object.clone,\n      toFixed = fabric.util.toFixed,\n      capitalize = fabric.util.string.capitalize,\n      degreesToRadians = fabric.util.degreesToRadians,\n      objectCaching = !fabric.isLikelyNode,\n      ALIASING_LIMIT = 2;\n\n  if (fabric.Object) {\n    return;\n  }\n\n  /**\n   * Root object class from which all 2d shape classes inherit from\n   * @class fabric.Object\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#objects}\n   * @see {@link fabric.Object#initialize} for constructor definition\n   *\n   * @fires added\n   * @fires removed\n   *\n   * @fires selected\n   * @fires deselected\n   * @fires modified\n   * @fires modified\n   * @fires moved\n   * @fires scaled\n   * @fires rotated\n   * @fires skewed\n   *\n   * @fires rotating\n   * @fires scaling\n   * @fires moving\n   * @fires skewing\n   *\n   * @fires mousedown\n   * @fires mouseup\n   * @fires mouseover\n   * @fires mouseout\n   * @fires mousewheel\n   * @fires mousedblclick\n   *\n   * @fires dragover\n   * @fires dragenter\n   * @fires dragleave\n   * @fires drop\n   */\n  fabric.Object = fabric.util.createClass(fabric.CommonMethods, /** @lends fabric.Object.prototype */ {\n\n    /**\n     * Type of an object (rect, circle, path, etc.).\n     * Note that this property is meant to be read-only and not meant to be modified.\n     * If you modify, certain parts of Fabric (such as JSON loading) won't work correctly.\n     * @type String\n     * @default\n     */\n    type:                     'object',\n\n    /**\n     * Horizontal origin of transformation of an object (one of \"left\", \"right\", \"center\")\n     * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n     * @type String\n     * @default\n     */\n    originX:                  'left',\n\n    /**\n     * Vertical origin of transformation of an object (one of \"top\", \"bottom\", \"center\")\n     * See http://jsfiddle.net/1ow02gea/244/ on how originX/originY affect objects in groups\n     * @type String\n     * @default\n     */\n    originY:                  'top',\n\n    /**\n     * Top position of an object. Note that by default it's relative to object top. You can change this by setting originY={top/center/bottom}\n     * @type Number\n     * @default\n     */\n    top:                      0,\n\n    /**\n     * Left position of an object. Note that by default it's relative to object left. You can change this by setting originX={left/center/right}\n     * @type Number\n     * @default\n     */\n    left:                     0,\n\n    /**\n     * Object width\n     * @type Number\n     * @default\n     */\n    width:                    0,\n\n    /**\n     * Object height\n     * @type Number\n     * @default\n     */\n    height:                   0,\n\n    /**\n     * Object scale factor (horizontal)\n     * @type Number\n     * @default\n     */\n    scaleX:                   1,\n\n    /**\n     * Object scale factor (vertical)\n     * @type Number\n     * @default\n     */\n    scaleY:                   1,\n\n    /**\n     * When true, an object is rendered as flipped horizontally\n     * @type Boolean\n     * @default\n     */\n    flipX:                    false,\n\n    /**\n     * When true, an object is rendered as flipped vertically\n     * @type Boolean\n     * @default\n     */\n    flipY:                    false,\n\n    /**\n     * Opacity of an object\n     * @type Number\n     * @default\n     */\n    opacity:                  1,\n\n    /**\n     * Angle of rotation of an object (in degrees)\n     * @type Number\n     * @default\n     */\n    angle:                    0,\n\n    /**\n     * Angle of skew on x axes of an object (in degrees)\n     * @type Number\n     * @default\n     */\n    skewX:                    0,\n\n    /**\n     * Angle of skew on y axes of an object (in degrees)\n     * @type Number\n     * @default\n     */\n    skewY:                    0,\n\n    /**\n     * Size of object's controlling corners (in pixels)\n     * @type Number\n     * @default\n     */\n    cornerSize:               13,\n\n    /**\n     * Size of object's controlling corners when touch interaction is detected\n     * @type Number\n     * @default\n     */\n    touchCornerSize:               24,\n\n    /**\n     * When true, object's controlling corners are rendered as transparent inside (i.e. stroke instead of fill)\n     * @type Boolean\n     * @default\n     */\n    transparentCorners:       true,\n\n    /**\n     * Default cursor value used when hovering over this object on canvas\n     * @type String\n     * @default\n     */\n    hoverCursor:              null,\n\n    /**\n     * Default cursor value used when moving this object on canvas\n     * @type String\n     * @default\n     */\n    moveCursor:               null,\n\n    /**\n     * Padding between object and its controlling borders (in pixels)\n     * @type Number\n     * @default\n     */\n    padding:                  0,\n\n    /**\n     * Color of controlling borders of an object (when it's active)\n     * @type String\n     * @default\n     */\n    borderColor:              'rgb(178,204,255)',\n\n    /**\n     * Array specifying dash pattern of an object's borders (hasBorder must be true)\n     * @since 1.6.2\n     * @type Array\n     */\n    borderDashArray:          null,\n\n    /**\n     * Color of controlling corners of an object (when it's active)\n     * @type String\n     * @default\n     */\n    cornerColor:              'rgb(178,204,255)',\n\n    /**\n     * Color of controlling corners of an object (when it's active and transparentCorners false)\n     * @since 1.6.2\n     * @type String\n     * @default\n     */\n    cornerStrokeColor:        null,\n\n    /**\n     * Specify style of control, 'rect' or 'circle'\n     * @since 1.6.2\n     * @type String\n     */\n    cornerStyle:          'rect',\n\n    /**\n     * Array specifying dash pattern of an object's control (hasBorder must be true)\n     * @since 1.6.2\n     * @type Array\n     */\n    cornerDashArray:          null,\n\n    /**\n     * When true, this object will use center point as the origin of transformation\n     * when being scaled via the controls.\n     * <b>Backwards incompatibility note:</b> This property replaces \"centerTransform\" (Boolean).\n     * @since 1.3.4\n     * @type Boolean\n     * @default\n     */\n    centeredScaling:          false,\n\n    /**\n     * When true, this object will use center point as the origin of transformation\n     * when being rotated via the controls.\n     * <b>Backwards incompatibility note:</b> This property replaces \"centerTransform\" (Boolean).\n     * @since 1.3.4\n     * @type Boolean\n     * @default\n     */\n    centeredRotation:         true,\n\n    /**\n     * Color of object's fill\n     * takes css colors https://www.w3.org/TR/css-color-3/\n     * @type String\n     * @default\n     */\n    fill:                     'rgb(0,0,0)',\n\n    /**\n     * Fill rule used to fill an object\n     * accepted values are nonzero, evenodd\n     * <b>Backwards incompatibility note:</b> This property was used for setting globalCompositeOperation until v1.4.12 (use `fabric.Object#globalCompositeOperation` instead)\n     * @type String\n     * @default\n     */\n    fillRule:                 'nonzero',\n\n    /**\n     * Composite rule used for canvas globalCompositeOperation\n     * @type String\n     * @default\n     */\n    globalCompositeOperation: 'source-over',\n\n    /**\n     * Background color of an object.\n     * takes css colors https://www.w3.org/TR/css-color-3/\n     * @type String\n     * @default\n     */\n    backgroundColor:          '',\n\n    /**\n     * Selection Background color of an object. colored layer behind the object when it is active.\n     * does not mix good with globalCompositeOperation methods.\n     * @type String\n     * @default\n     */\n    selectionBackgroundColor:          '',\n\n    /**\n     * When defined, an object is rendered via stroke and this property specifies its color\n     * takes css colors https://www.w3.org/TR/css-color-3/\n     * @type String\n     * @default\n     */\n    stroke:                   null,\n\n    /**\n     * Width of a stroke used to render this object\n     * @type Number\n     * @default\n     */\n    strokeWidth:              1,\n\n    /**\n     * Array specifying dash pattern of an object's stroke (stroke must be defined)\n     * @type Array\n     */\n    strokeDashArray:          null,\n\n    /**\n     * Line offset of an object's stroke\n     * @type Number\n     * @default\n     */\n    strokeDashOffset: 0,\n\n    /**\n     * Line endings style of an object's stroke (one of \"butt\", \"round\", \"square\")\n     * @type String\n     * @default\n     */\n    strokeLineCap:            'butt',\n\n    /**\n     * Corner style of an object's stroke (one of \"bevel\", \"round\", \"miter\")\n     * @type String\n     * @default\n     */\n    strokeLineJoin:           'miter',\n\n    /**\n     * Maximum miter length (used for strokeLineJoin = \"miter\") of an object's stroke\n     * @type Number\n     * @default\n     */\n    strokeMiterLimit:         4,\n\n    /**\n     * Shadow object representing shadow of this shape\n     * @type fabric.Shadow\n     * @default\n     */\n    shadow:                   null,\n\n    /**\n     * Opacity of object's controlling borders when object is active and moving\n     * @type Number\n     * @default\n     */\n    borderOpacityWhenMoving:  0.4,\n\n    /**\n     * Scale factor of object's controlling borders\n     * bigger number will make a thicker border\n     * border is 1, so this is basically a border thickness\n     * since there is no way to change the border itself.\n     * @type Number\n     * @default\n     */\n    borderScaleFactor:        1,\n\n    /**\n     * Minimum allowed scale value of an object\n     * @type Number\n     * @default\n     */\n    minScaleLimit:            0,\n\n    /**\n     * When set to `false`, an object can not be selected for modification (using either point-click-based or group-based selection).\n     * But events still fire on it.\n     * @type Boolean\n     * @default\n     */\n    selectable:               true,\n\n    /**\n     * When set to `false`, an object can not be a target of events. All events propagate through it. Introduced in v1.3.4\n     * @type Boolean\n     * @default\n     */\n    evented:                  true,\n\n    /**\n     * When set to `false`, an object is not rendered on canvas\n     * @type Boolean\n     * @default\n     */\n    visible:                  true,\n\n    /**\n     * When set to `false`, object's controls are not displayed and can not be used to manipulate object\n     * @type Boolean\n     * @default\n     */\n    hasControls:              true,\n\n    /**\n     * When set to `false`, object's controlling borders are not rendered\n     * @type Boolean\n     * @default\n     */\n    hasBorders:               true,\n\n    /**\n     * When set to `true`, objects are \"found\" on canvas on per-pixel basis rather than according to bounding box\n     * @type Boolean\n     * @default\n     */\n    perPixelTargetFind:       false,\n\n    /**\n     * When `false`, default object's values are not included in its serialization\n     * @type Boolean\n     * @default\n     */\n    includeDefaultValues:     true,\n\n    /**\n     * When `true`, object horizontal movement is locked\n     * @type Boolean\n     * @default\n     */\n    lockMovementX:            false,\n\n    /**\n     * When `true`, object vertical movement is locked\n     * @type Boolean\n     * @default\n     */\n    lockMovementY:            false,\n\n    /**\n     * When `true`, object rotation is locked\n     * @type Boolean\n     * @default\n     */\n    lockRotation:             false,\n\n    /**\n     * When `true`, object horizontal scaling is locked\n     * @type Boolean\n     * @default\n     */\n    lockScalingX:             false,\n\n    /**\n     * When `true`, object vertical scaling is locked\n     * @type Boolean\n     * @default\n     */\n    lockScalingY:             false,\n\n    /**\n     * When `true`, object horizontal skewing is locked\n     * @type Boolean\n     * @default\n     */\n    lockSkewingX:             false,\n\n    /**\n     * When `true`, object vertical skewing is locked\n     * @type Boolean\n     * @default\n     */\n    lockSkewingY:             false,\n\n    /**\n     * When `true`, object cannot be flipped by scaling into negative values\n     * @type Boolean\n     * @default\n     */\n    lockScalingFlip:          false,\n\n    /**\n     * When `true`, object is not exported in OBJECT/JSON\n     * @since 1.6.3\n     * @type Boolean\n     * @default\n     */\n    excludeFromExport:        false,\n\n    /**\n     * When `true`, object is cached on an additional canvas.\n     * When `false`, object is not cached unless necessary ( clipPath )\n     * default to true\n     * @since 1.7.0\n     * @type Boolean\n     * @default true\n     */\n    objectCaching:            objectCaching,\n\n    /**\n     * When `true`, object properties are checked for cache invalidation. In some particular\n     * situation you may want this to be disabled ( spray brush, very big, groups)\n     * or if your application does not allow you to modify properties for groups child you want\n     * to disable it for groups.\n     * default to false\n     * since 1.7.0\n     * @type Boolean\n     * @default false\n     */\n    statefullCache:            false,\n\n    /**\n     * When `true`, cache does not get updated during scaling. The picture will get blocky if scaled\n     * too much and will be redrawn with correct details at the end of scaling.\n     * this setting is performance and application dependant.\n     * default to true\n     * since 1.7.0\n     * @type Boolean\n     * @default true\n     */\n    noScaleCache:              true,\n\n    /**\n     * When `false`, the stoke width will scale with the object.\n     * When `true`, the stroke will always match the exact pixel size entered for stroke width.\n     * this Property does not work on Text classes or drawing call that uses strokeText,fillText methods\n     * default to false\n     * @since 2.6.0\n     * @type Boolean\n     * @default false\n     * @type Boolean\n     * @default false\n     */\n    strokeUniform:              false,\n\n    /**\n     * When set to `true`, object's cache will be rerendered next render call.\n     * since 1.7.0\n     * @type Boolean\n     * @default true\n     */\n    dirty:                true,\n\n    /**\n     * keeps the value of the last hovered corner during mouse move.\n     * 0 is no corner, or 'mt', 'ml', 'mtr' etc..\n     * It should be private, but there is no harm in using it as\n     * a read-only property.\n     * @type number|string|any\n     * @default 0\n     */\n    __corner: 0,\n\n    /**\n     * Determines if the fill or the stroke is drawn first (one of \"fill\" or \"stroke\")\n     * @type String\n     * @default\n     */\n    paintFirst:           'fill',\n\n    /**\n     * When 'down', object is set to active on mousedown/touchstart\n     * When 'up', object is set to active on mouseup/touchend\n     * Experimental. Let's see if this breaks anything before supporting officially\n     * @private\n     * since 4.4.0\n     * @type String\n     * @default 'down'\n     */\n    activeOn:           'down',\n\n    /**\n     * List of properties to consider when checking if state\n     * of an object is changed (fabric.Object#hasStateChanged)\n     * as well as for history (undo/redo) purposes\n     * @type Array\n     */\n    stateProperties: (\n      'top left width height scaleX scaleY flipX flipY originX originY transformMatrix ' +\n      'stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit ' +\n      'angle opacity fill globalCompositeOperation shadow visible backgroundColor ' +\n      'skewX skewY fillRule paintFirst clipPath strokeUniform'\n    ).split(' '),\n\n    /**\n     * List of properties to consider when checking if cache needs refresh\n     * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single\n     * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n     * and refreshed at the next render\n     * @type Array\n     */\n    cacheProperties: (\n      'fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform' +\n      ' strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath'\n    ).split(' '),\n\n    /**\n     * List of properties to consider for animating colors.\n     * @type Array\n     */\n    colorProperties: (\n      'fill stroke backgroundColor'\n    ).split(' '),\n\n    /**\n     * a fabricObject that, without stroke define a clipping area with their shape. filled in black\n     * the clipPath object gets used when the object has rendered, and the context is placed in the center\n     * of the object cacheCanvas.\n     * If you want 0,0 of a clipPath to align with an object center, use clipPath.originX/Y to 'center'\n     * @type fabric.Object\n     */\n    clipPath: undefined,\n\n    /**\n     * Meaningful ONLY when the object is used as clipPath.\n     * if true, the clipPath will make the object clip to the outside of the clipPath\n     * since 2.4.0\n     * @type boolean\n     * @default false\n     */\n    inverted: false,\n\n    /**\n     * Meaningful ONLY when the object is used as clipPath.\n     * if true, the clipPath will have its top and left relative to canvas, and will\n     * not be influenced by the object transform. This will make the clipPath relative\n     * to the canvas, but clipping just a particular object.\n     * WARNING this is beta, this feature may change or be renamed.\n     * since 2.4.0\n     * @type boolean\n     * @default false\n     */\n    absolutePositioned: false,\n\n    /**\n     * Constructor\n     * @param {Object} [options] Options object\n     */\n    initialize: function(options) {\n      if (options) {\n        this.setOptions(options);\n      }\n    },\n\n    /**\n     * Create a the canvas used to keep the cached copy of the object\n     * @private\n     */\n    _createCacheCanvas: function() {\n      this._cacheProperties = {};\n      this._cacheCanvas = fabric.util.createCanvasElement();\n      this._cacheContext = this._cacheCanvas.getContext('2d');\n      this._updateCacheCanvas();\n      // if canvas gets created, is empty, so dirty.\n      this.dirty = true;\n    },\n\n    /**\n     * Limit the cache dimensions so that X * Y do not cross fabric.perfLimitSizeTotal\n     * and each side do not cross fabric.cacheSideLimit\n     * those numbers are configurable so that you can get as much detail as you want\n     * making bargain with performances.\n     * @param {Object} dims\n     * @param {Object} dims.width width of canvas\n     * @param {Object} dims.height height of canvas\n     * @param {Object} dims.zoomX zoomX zoom value to unscale the canvas before drawing cache\n     * @param {Object} dims.zoomY zoomY zoom value to unscale the canvas before drawing cache\n     * @return {Object}.width width of canvas\n     * @return {Object}.height height of canvas\n     * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n     * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n     */\n    _limitCacheSize: function(dims) {\n      var perfLimitSizeTotal = fabric.perfLimitSizeTotal,\n          width = dims.width, height = dims.height,\n          max = fabric.maxCacheSideLimit, min = fabric.minCacheSideLimit;\n      if (width <= max && height <= max && width * height <= perfLimitSizeTotal) {\n        if (width < min) {\n          dims.width = min;\n        }\n        if (height < min) {\n          dims.height = min;\n        }\n        return dims;\n      }\n      var ar = width / height, limitedDims = fabric.util.limitDimsByArea(ar, perfLimitSizeTotal),\n          capValue = fabric.util.capValue,\n          x = capValue(min, limitedDims.x, max),\n          y = capValue(min, limitedDims.y, max);\n      if (width > x) {\n        dims.zoomX /= width / x;\n        dims.width = x;\n        dims.capped = true;\n      }\n      if (height > y) {\n        dims.zoomY /= height / y;\n        dims.height = y;\n        dims.capped = true;\n      }\n      return dims;\n    },\n\n    /**\n     * Return the dimension and the zoom level needed to create a cache canvas\n     * big enough to host the object to be cached.\n     * @private\n     * @return {Object}.x width of object to be cached\n     * @return {Object}.y height of object to be cached\n     * @return {Object}.width width of canvas\n     * @return {Object}.height height of canvas\n     * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n     * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n     */\n    _getCacheCanvasDimensions: function() {\n      var objectScale = this.getTotalObjectScaling(),\n          // caculate dimensions without skewing\n          dim = this._getTransformedDimensions(0, 0),\n          neededX = dim.x * objectScale.scaleX / this.scaleX,\n          neededY = dim.y * objectScale.scaleY / this.scaleY;\n      return {\n        // for sure this ALIASING_LIMIT is slightly creating problem\n        // in situation in which the cache canvas gets an upper limit\n        // also objectScale contains already scaleX and scaleY\n        width: neededX + ALIASING_LIMIT,\n        height: neededY + ALIASING_LIMIT,\n        zoomX: objectScale.scaleX,\n        zoomY: objectScale.scaleY,\n        x: neededX,\n        y: neededY\n      };\n    },\n\n    /**\n     * Update width and height of the canvas for cache\n     * returns true or false if canvas needed resize.\n     * @private\n     * @return {Boolean} true if the canvas has been resized\n     */\n    _updateCacheCanvas: function() {\n      var targetCanvas = this.canvas;\n      if (this.noScaleCache && targetCanvas && targetCanvas._currentTransform) {\n        var target = targetCanvas._currentTransform.target,\n            action = targetCanvas._currentTransform.action;\n        if (this === target && action.slice && action.slice(0, 5) === 'scale') {\n          return false;\n        }\n      }\n      var canvas = this._cacheCanvas,\n          dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n          minCacheSize = fabric.minCacheSideLimit,\n          width = dims.width, height = dims.height, drawingWidth, drawingHeight,\n          zoomX = dims.zoomX, zoomY = dims.zoomY,\n          dimensionsChanged = width !== this.cacheWidth || height !== this.cacheHeight,\n          zoomChanged = this.zoomX !== zoomX || this.zoomY !== zoomY,\n          shouldRedraw = dimensionsChanged || zoomChanged,\n          additionalWidth = 0, additionalHeight = 0, shouldResizeCanvas = false;\n      if (dimensionsChanged) {\n        var canvasWidth = this._cacheCanvas.width,\n            canvasHeight = this._cacheCanvas.height,\n            sizeGrowing = width > canvasWidth || height > canvasHeight,\n            sizeShrinking = (width < canvasWidth * 0.9 || height < canvasHeight * 0.9) &&\n              canvasWidth > minCacheSize && canvasHeight > minCacheSize;\n        shouldResizeCanvas = sizeGrowing || sizeShrinking;\n        if (sizeGrowing && !dims.capped && (width > minCacheSize || height > minCacheSize)) {\n          additionalWidth = width * 0.1;\n          additionalHeight = height * 0.1;\n        }\n      }\n      if (this instanceof fabric.Text && this.path) {\n        shouldRedraw = true;\n        shouldResizeCanvas = true;\n        additionalWidth += this.getHeightOfLine(0) * this.zoomX;\n        additionalHeight += this.getHeightOfLine(0) * this.zoomY;\n      }\n      if (shouldRedraw) {\n        if (shouldResizeCanvas) {\n          canvas.width = Math.ceil(width + additionalWidth);\n          canvas.height = Math.ceil(height + additionalHeight);\n        }\n        else {\n          this._cacheContext.setTransform(1, 0, 0, 1, 0, 0);\n          this._cacheContext.clearRect(0, 0, canvas.width, canvas.height);\n        }\n        drawingWidth = dims.x / 2;\n        drawingHeight = dims.y / 2;\n        this.cacheTranslationX = Math.round(canvas.width / 2 - drawingWidth) + drawingWidth;\n        this.cacheTranslationY = Math.round(canvas.height / 2 - drawingHeight) + drawingHeight;\n        this.cacheWidth = width;\n        this.cacheHeight = height;\n        this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY);\n        this._cacheContext.scale(zoomX, zoomY);\n        this.zoomX = zoomX;\n        this.zoomY = zoomY;\n        return true;\n      }\n      return false;\n    },\n\n    /**\n     * Sets object's properties from options\n     * @param {Object} [options] Options object\n     */\n    setOptions: function(options) {\n      this._setOptions(options);\n      this._initGradient(options.fill, 'fill');\n      this._initGradient(options.stroke, 'stroke');\n      this._initPattern(options.fill, 'fill');\n      this._initPattern(options.stroke, 'stroke');\n    },\n\n    /**\n     * Transforms context when rendering an object\n     * @param {CanvasRenderingContext2D} ctx Context\n     */\n    transform: function(ctx) {\n      var needFullTransform = (this.group && !this.group._transformDone) ||\n         (this.group && this.canvas && ctx === this.canvas.contextTop);\n      var m = this.calcTransformMatrix(!needFullTransform);\n      ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n    },\n\n    /**\n     * Returns an object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} Object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS,\n\n          object = {\n            type:                     this.type,\n            version:                  fabric.version,\n            originX:                  this.originX,\n            originY:                  this.originY,\n            left:                     toFixed(this.left, NUM_FRACTION_DIGITS),\n            top:                      toFixed(this.top, NUM_FRACTION_DIGITS),\n            width:                    toFixed(this.width, NUM_FRACTION_DIGITS),\n            height:                   toFixed(this.height, NUM_FRACTION_DIGITS),\n            fill:                     (this.fill && this.fill.toObject) ? this.fill.toObject() : this.fill,\n            stroke:                   (this.stroke && this.stroke.toObject) ? this.stroke.toObject() : this.stroke,\n            strokeWidth:              toFixed(this.strokeWidth, NUM_FRACTION_DIGITS),\n            strokeDashArray:          this.strokeDashArray ? this.strokeDashArray.concat() : this.strokeDashArray,\n            strokeLineCap:            this.strokeLineCap,\n            strokeDashOffset:         this.strokeDashOffset,\n            strokeLineJoin:           this.strokeLineJoin,\n            strokeUniform:            this.strokeUniform,\n            strokeMiterLimit:         toFixed(this.strokeMiterLimit, NUM_FRACTION_DIGITS),\n            scaleX:                   toFixed(this.scaleX, NUM_FRACTION_DIGITS),\n            scaleY:                   toFixed(this.scaleY, NUM_FRACTION_DIGITS),\n            angle:                    toFixed(this.angle, NUM_FRACTION_DIGITS),\n            flipX:                    this.flipX,\n            flipY:                    this.flipY,\n            opacity:                  toFixed(this.opacity, NUM_FRACTION_DIGITS),\n            shadow:                   (this.shadow && this.shadow.toObject) ? this.shadow.toObject() : this.shadow,\n            visible:                  this.visible,\n            backgroundColor:          this.backgroundColor,\n            fillRule:                 this.fillRule,\n            paintFirst:               this.paintFirst,\n            globalCompositeOperation: this.globalCompositeOperation,\n            skewX:                    toFixed(this.skewX, NUM_FRACTION_DIGITS),\n            skewY:                    toFixed(this.skewY, NUM_FRACTION_DIGITS),\n          };\n\n      if (this.clipPath && !this.clipPath.excludeFromExport) {\n        object.clipPath = this.clipPath.toObject(propertiesToInclude);\n        object.clipPath.inverted = this.clipPath.inverted;\n        object.clipPath.absolutePositioned = this.clipPath.absolutePositioned;\n      }\n\n      fabric.util.populateWithProperties(this, object, propertiesToInclude);\n      if (!this.includeDefaultValues) {\n        object = this._removeDefaultValues(object);\n      }\n\n      return object;\n    },\n\n    /**\n     * Returns (dataless) object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} Object representation of an instance\n     */\n    toDatalessObject: function(propertiesToInclude) {\n      // will be overwritten by subclasses\n      return this.toObject(propertiesToInclude);\n    },\n\n    /**\n     * @private\n     * @param {Object} object\n     */\n    _removeDefaultValues: function(object) {\n      var prototype = fabric.util.getKlass(object.type).prototype,\n          stateProperties = prototype.stateProperties;\n      stateProperties.forEach(function(prop) {\n        if (prop === 'left' || prop === 'top') {\n          return;\n        }\n        if (object[prop] === prototype[prop]) {\n          delete object[prop];\n        }\n        // basically a check for [] === []\n        if (Array.isArray(object[prop]) && Array.isArray(prototype[prop])\n          && object[prop].length === 0 && prototype[prop].length === 0) {\n          delete object[prop];\n        }\n      });\n\n      return object;\n    },\n\n    /**\n     * Returns a string representation of an instance\n     * @return {String}\n     */\n    toString: function() {\n      return '#<fabric.' + capitalize(this.type) + '>';\n    },\n\n    /**\n     * Return the object scale factor counting also the group scaling\n     * @return {Object} object with scaleX and scaleY properties\n     */\n    getObjectScaling: function() {\n      // if the object is a top level one, on the canvas, we go for simple aritmetic\n      // otherwise the complex method with angles will return approximations and decimals\n      // and will likely kill the cache when not needed\n      // https://github.com/fabricjs/fabric.js/issues/7157\n      if (!this.group) {\n        return {\n          scaleX: this.scaleX,\n          scaleY: this.scaleY,\n        };\n      }\n      // if we are inside a group total zoom calculation is complex, we defer to generic matrices\n      var options = fabric.util.qrDecompose(this.calcTransformMatrix());\n      return { scaleX: Math.abs(options.scaleX), scaleY: Math.abs(options.scaleY) };\n    },\n\n    /**\n     * Return the object scale factor counting also the group scaling, zoom and retina\n     * @return {Object} object with scaleX and scaleY properties\n     */\n    getTotalObjectScaling: function() {\n      var scale = this.getObjectScaling(), scaleX = scale.scaleX, scaleY = scale.scaleY;\n      if (this.canvas) {\n        var zoom = this.canvas.getZoom();\n        var retina = this.canvas.getRetinaScaling();\n        scaleX *= zoom * retina;\n        scaleY *= zoom * retina;\n      }\n      return { scaleX: scaleX, scaleY: scaleY };\n    },\n\n    /**\n     * Return the object opacity counting also the group property\n     * @return {Number}\n     */\n    getObjectOpacity: function() {\n      var opacity = this.opacity;\n      if (this.group) {\n        opacity *= this.group.getObjectOpacity();\n      }\n      return opacity;\n    },\n\n    /**\n     * @private\n     * @param {String} key\n     * @param {*} value\n     * @return {fabric.Object} thisArg\n     */\n    _set: function(key, value) {\n      var shouldConstrainValue = (key === 'scaleX' || key === 'scaleY'),\n          isChanged = this[key] !== value, groupNeedsUpdate = false;\n\n      if (shouldConstrainValue) {\n        value = this._constrainScale(value);\n      }\n      if (key === 'scaleX' && value < 0) {\n        this.flipX = !this.flipX;\n        value *= -1;\n      }\n      else if (key === 'scaleY' && value < 0) {\n        this.flipY = !this.flipY;\n        value *= -1;\n      }\n      else if (key === 'shadow' && value && !(value instanceof fabric.Shadow)) {\n        value = new fabric.Shadow(value);\n      }\n      else if (key === 'dirty' && this.group) {\n        this.group.set('dirty', value);\n      }\n\n      this[key] = value;\n\n      if (isChanged) {\n        groupNeedsUpdate = this.group && this.group.isOnACache();\n        if (this.cacheProperties.indexOf(key) > -1) {\n          this.dirty = true;\n          groupNeedsUpdate && this.group.set('dirty', true);\n        }\n        else if (groupNeedsUpdate && this.stateProperties.indexOf(key) > -1) {\n          this.group.set('dirty', true);\n        }\n      }\n      return this;\n    },\n\n    /**\n     * This callback function is called by the parent group of an object every\n     * time a non-delegated property changes on the group. It is passed the key\n     * and value as parameters. Not adding in this function's signature to avoid\n     * Travis build error about unused variables.\n     */\n    setOnGroup: function() {\n      // implemented by sub-classes, as needed.\n    },\n\n    /**\n     * Retrieves viewportTransform from Object's canvas if possible\n     * @method getViewportTransform\n     * @memberOf fabric.Object.prototype\n     * @return {Array}\n     */\n    getViewportTransform: function() {\n      if (this.canvas && this.canvas.viewportTransform) {\n        return this.canvas.viewportTransform;\n      }\n      return fabric.iMatrix.concat();\n    },\n\n    /*\n     * @private\n     * return if the object would be visible in rendering\n     * @memberOf fabric.Object.prototype\n     * @return {Boolean}\n     */\n    isNotVisible: function() {\n      return this.opacity === 0 ||\n        (!this.width && !this.height && this.strokeWidth === 0) ||\n        !this.visible;\n    },\n\n    /**\n     * Renders an object on a specified context\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    render: function(ctx) {\n      // do not render if width/height are zeros or object is not visible\n      if (this.isNotVisible()) {\n        return;\n      }\n      if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n        return;\n      }\n      ctx.save();\n      this._setupCompositeOperation(ctx);\n      this.drawSelectionBackground(ctx);\n      this.transform(ctx);\n      this._setOpacity(ctx);\n      this._setShadow(ctx, this);\n      if (this.shouldCache()) {\n        this.renderCache();\n        this.drawCacheOnCanvas(ctx);\n      }\n      else {\n        this._removeCacheCanvas();\n        this.dirty = false;\n        this.drawObject(ctx);\n        if (this.objectCaching && this.statefullCache) {\n          this.saveState({ propertySet: 'cacheProperties' });\n        }\n      }\n      ctx.restore();\n    },\n\n    renderCache: function(options) {\n      options = options || {};\n      if (!this._cacheCanvas || !this._cacheContext) {\n        this._createCacheCanvas();\n      }\n      if (this.isCacheDirty()) {\n        this.statefullCache && this.saveState({ propertySet: 'cacheProperties' });\n        this.drawObject(this._cacheContext, options.forClipping);\n        this.dirty = false;\n      }\n    },\n\n    /**\n     * Remove cacheCanvas and its dimensions from the objects\n     */\n    _removeCacheCanvas: function() {\n      this._cacheCanvas = null;\n      this._cacheContext = null;\n      this.cacheWidth = 0;\n      this.cacheHeight = 0;\n    },\n\n    /**\n     * return true if the object will draw a stroke\n     * Does not consider text styles. This is just a shortcut used at rendering time\n     * We want it to be an approximation and be fast.\n     * wrote to avoid extra caching, it has to return true when stroke happens,\n     * can guess when it will not happen at 100% chance, does not matter if it misses\n     * some use case where the stroke is invisible.\n     * @since 3.0.0\n     * @returns Boolean\n     */\n    hasStroke: function() {\n      return this.stroke && this.stroke !== 'transparent' && this.strokeWidth !== 0;\n    },\n\n    /**\n     * return true if the object will draw a fill\n     * Does not consider text styles. This is just a shortcut used at rendering time\n     * We want it to be an approximation and be fast.\n     * wrote to avoid extra caching, it has to return true when fill happens,\n     * can guess when it will not happen at 100% chance, does not matter if it misses\n     * some use case where the fill is invisible.\n     * @since 3.0.0\n     * @returns Boolean\n     */\n    hasFill: function() {\n      return this.fill && this.fill !== 'transparent';\n    },\n\n    /**\n     * When set to `true`, force the object to have its own cache, even if it is inside a group\n     * it may be needed when your object behave in a particular way on the cache and always needs\n     * its own isolated canvas to render correctly.\n     * Created to be overridden\n     * since 1.7.12\n     * @returns Boolean\n     */\n    needsItsOwnCache: function() {\n      if (this.paintFirst === 'stroke' &&\n        this.hasFill() && this.hasStroke() && typeof this.shadow === 'object') {\n        return true;\n      }\n      if (this.clipPath) {\n        return true;\n      }\n      return false;\n    },\n\n    /**\n     * Decide if the object should cache or not. Create its own cache level\n     * objectCaching is a global flag, wins over everything\n     * needsItsOwnCache should be used when the object drawing method requires\n     * a cache step. None of the fabric classes requires it.\n     * Generally you do not cache objects in groups because the group outside is cached.\n     * Read as: cache if is needed, or if the feature is enabled but we are not already caching.\n     * @return {Boolean}\n     */\n    shouldCache: function() {\n      this.ownCaching = this.needsItsOwnCache() || (\n        this.objectCaching &&\n        (!this.group || !this.group.isOnACache())\n      );\n      return this.ownCaching;\n    },\n\n    /**\n     * Check if this object or a child object will cast a shadow\n     * used by Group.shouldCache to know if child has a shadow recursively\n     * @return {Boolean}\n     */\n    willDrawShadow: function() {\n      return !!this.shadow && (this.shadow.offsetX !== 0 || this.shadow.offsetY !== 0);\n    },\n\n    /**\n     * Execute the drawing operation for an object clipPath\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {fabric.Object} clipPath\n     */\n    drawClipPathOnCache: function(ctx, clipPath) {\n      ctx.save();\n      // DEBUG: uncomment this line, comment the following\n      // ctx.globalAlpha = 0.4\n      if (clipPath.inverted) {\n        ctx.globalCompositeOperation = 'destination-out';\n      }\n      else {\n        ctx.globalCompositeOperation = 'destination-in';\n      }\n      //ctx.scale(1 / 2, 1 / 2);\n      if (clipPath.absolutePositioned) {\n        var m = fabric.util.invertTransform(this.calcTransformMatrix());\n        ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);\n      }\n      clipPath.transform(ctx);\n      ctx.scale(1 / clipPath.zoomX, 1 / clipPath.zoomY);\n      ctx.drawImage(clipPath._cacheCanvas, -clipPath.cacheTranslationX, -clipPath.cacheTranslationY);\n      ctx.restore();\n    },\n\n    /**\n     * Execute the drawing operation for an object on a specified context\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    drawObject: function(ctx, forClipping) {\n      var originalFill = this.fill, originalStroke = this.stroke;\n      if (forClipping) {\n        this.fill = 'black';\n        this.stroke = '';\n        this._setClippingProperties(ctx);\n      }\n      else {\n        this._renderBackground(ctx);\n      }\n      this._render(ctx);\n      this._drawClipPath(ctx, this.clipPath);\n      this.fill = originalFill;\n      this.stroke = originalStroke;\n    },\n\n    /**\n     * Prepare clipPath state and cache and draw it on instance's cache\n     * @param {CanvasRenderingContext2D} ctx\n     * @param {fabric.Object} clipPath\n     */\n    _drawClipPath: function (ctx, clipPath) {\n      if (!clipPath) { return; }\n      // needed to setup a couple of variables\n      // path canvas gets overridden with this one.\n      // TODO find a better solution?\n      clipPath.canvas = this.canvas;\n      clipPath.shouldCache();\n      clipPath._transformDone = true;\n      clipPath.renderCache({ forClipping: true });\n      this.drawClipPathOnCache(ctx, clipPath);\n    },\n\n    /**\n     * Paint the cached copy of the object on the target context.\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    drawCacheOnCanvas: function(ctx) {\n      ctx.scale(1 / this.zoomX, 1 / this.zoomY);\n      ctx.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY);\n    },\n\n    /**\n     * Check if cache is dirty\n     * @param {Boolean} skipCanvas skip canvas checks because this object is painted\n     * on parent canvas.\n     */\n    isCacheDirty: function(skipCanvas) {\n      if (this.isNotVisible()) {\n        return false;\n      }\n      if (this._cacheCanvas && this._cacheContext && !skipCanvas && this._updateCacheCanvas()) {\n        // in this case the context is already cleared.\n        return true;\n      }\n      else {\n        if (this.dirty ||\n          (this.clipPath && this.clipPath.absolutePositioned) ||\n          (this.statefullCache && this.hasStateChanged('cacheProperties'))\n        ) {\n          if (this._cacheCanvas && this._cacheContext && !skipCanvas) {\n            var width = this.cacheWidth / this.zoomX;\n            var height = this.cacheHeight / this.zoomY;\n            this._cacheContext.clearRect(-width / 2, -height / 2, width, height);\n          }\n          return true;\n        }\n      }\n      return false;\n    },\n\n    /**\n     * Draws a background for the object big as its untransformed dimensions\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderBackground: function(ctx) {\n      if (!this.backgroundColor) {\n        return;\n      }\n      var dim = this._getNonTransformedDimensions();\n      ctx.fillStyle = this.backgroundColor;\n\n      ctx.fillRect(\n        -dim.x / 2,\n        -dim.y / 2,\n        dim.x,\n        dim.y\n      );\n      // if there is background color no other shadows\n      // should be casted\n      this._removeShadow(ctx);\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _setOpacity: function(ctx) {\n      if (this.group && !this.group._transformDone) {\n        ctx.globalAlpha = this.getObjectOpacity();\n      }\n      else {\n        ctx.globalAlpha *= this.opacity;\n      }\n    },\n\n    _setStrokeStyles: function(ctx, decl) {\n      var stroke = decl.stroke;\n      if (stroke) {\n        ctx.lineWidth = decl.strokeWidth;\n        ctx.lineCap = decl.strokeLineCap;\n        ctx.lineDashOffset = decl.strokeDashOffset;\n        ctx.lineJoin = decl.strokeLineJoin;\n        ctx.miterLimit = decl.strokeMiterLimit;\n        if (stroke.toLive) {\n          if (stroke.gradientUnits === 'percentage' || stroke.gradientTransform || stroke.patternTransform) {\n            // need to transform gradient in a pattern.\n            // this is a slow process. If you are hitting this codepath, and the object\n            // is not using caching, you should consider switching it on.\n            // we need a canvas as big as the current object caching canvas.\n            this._applyPatternForTransformedGradient(ctx, stroke);\n          }\n          else {\n            // is a simple gradient or pattern\n            ctx.strokeStyle = stroke.toLive(ctx, this);\n            this._applyPatternGradientTransform(ctx, stroke);\n          }\n        }\n        else {\n          // is a color\n          ctx.strokeStyle = decl.stroke;\n        }\n      }\n    },\n\n    _setFillStyles: function(ctx, decl) {\n      var fill = decl.fill;\n      if (fill) {\n        if (fill.toLive) {\n          ctx.fillStyle = fill.toLive(ctx, this);\n          this._applyPatternGradientTransform(ctx, decl.fill);\n        }\n        else {\n          ctx.fillStyle = fill;\n        }\n      }\n    },\n\n    _setClippingProperties: function(ctx) {\n      ctx.globalAlpha = 1;\n      ctx.strokeStyle = 'transparent';\n      ctx.fillStyle = '#000000';\n    },\n\n    /**\n     * @private\n     * Sets line dash\n     * @param {CanvasRenderingContext2D} ctx Context to set the dash line on\n     * @param {Array} dashArray array representing dashes\n     */\n    _setLineDash: function(ctx, dashArray) {\n      if (!dashArray || dashArray.length === 0) {\n        return;\n      }\n      // Spec requires the concatenation of two copies the dash list when the number of elements is odd\n      if (1 & dashArray.length) {\n        dashArray.push.apply(dashArray, dashArray);\n      }\n      ctx.setLineDash(dashArray);\n    },\n\n    /**\n     * Renders controls and borders for the object\n     * the context here is not transformed\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {Object} [styleOverride] properties to override the object style\n     */\n    _renderControls: function(ctx, styleOverride) {\n      var vpt = this.getViewportTransform(),\n          matrix = this.calcTransformMatrix(),\n          options, drawBorders, drawControls;\n      styleOverride = styleOverride || { };\n      drawBorders = typeof styleOverride.hasBorders !== 'undefined' ? styleOverride.hasBorders : this.hasBorders;\n      drawControls = typeof styleOverride.hasControls !== 'undefined' ? styleOverride.hasControls : this.hasControls;\n      matrix = fabric.util.multiplyTransformMatrices(vpt, matrix);\n      options = fabric.util.qrDecompose(matrix);\n      ctx.save();\n      ctx.translate(options.translateX, options.translateY);\n      ctx.lineWidth = 1 * this.borderScaleFactor;\n      if (!this.group) {\n        ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n      }\n      if (this.flipX) {\n        options.angle -= 180;\n      }\n      ctx.rotate(degreesToRadians(this.group ? options.angle : this.angle));\n      if (styleOverride.forActiveSelection || this.group) {\n        drawBorders && this.drawBordersInGroup(ctx, options, styleOverride);\n      }\n      else {\n        drawBorders && this.drawBorders(ctx, styleOverride);\n      }\n      drawControls && this.drawControls(ctx, styleOverride);\n      ctx.restore();\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _setShadow: function(ctx) {\n      if (!this.shadow) {\n        return;\n      }\n\n      var shadow = this.shadow, canvas = this.canvas, scaling,\n          multX = (canvas && canvas.viewportTransform[0]) || 1,\n          multY = (canvas && canvas.viewportTransform[3]) || 1;\n      if (shadow.nonScaling) {\n        scaling = { scaleX: 1, scaleY: 1 };\n      }\n      else {\n        scaling = this.getObjectScaling();\n      }\n      if (canvas && canvas._isRetinaScaling()) {\n        multX *= fabric.devicePixelRatio;\n        multY *= fabric.devicePixelRatio;\n      }\n      ctx.shadowColor = shadow.color;\n      ctx.shadowBlur = shadow.blur * fabric.browserShadowBlurConstant *\n        (multX + multY) * (scaling.scaleX + scaling.scaleY) / 4;\n      ctx.shadowOffsetX = shadow.offsetX * multX * scaling.scaleX;\n      ctx.shadowOffsetY = shadow.offsetY * multY * scaling.scaleY;\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _removeShadow: function(ctx) {\n      if (!this.shadow) {\n        return;\n      }\n\n      ctx.shadowColor = '';\n      ctx.shadowBlur = ctx.shadowOffsetX = ctx.shadowOffsetY = 0;\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {Object} filler fabric.Pattern or fabric.Gradient\n     * @return {Object} offset.offsetX offset for text rendering\n     * @return {Object} offset.offsetY offset for text rendering\n     */\n    _applyPatternGradientTransform: function(ctx, filler) {\n      if (!filler || !filler.toLive) {\n        return { offsetX: 0, offsetY: 0 };\n      }\n      var t = filler.gradientTransform || filler.patternTransform;\n      var offsetX = -this.width / 2 + filler.offsetX || 0,\n          offsetY = -this.height / 2 + filler.offsetY || 0;\n\n      if (filler.gradientUnits === 'percentage') {\n        ctx.transform(this.width, 0, 0, this.height, offsetX, offsetY);\n      }\n      else {\n        ctx.transform(1, 0, 0, 1, offsetX, offsetY);\n      }\n      if (t) {\n        ctx.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\n      }\n      return { offsetX: offsetX, offsetY: offsetY };\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderPaintInOrder: function(ctx) {\n      if (this.paintFirst === 'stroke') {\n        this._renderStroke(ctx);\n        this._renderFill(ctx);\n      }\n      else {\n        this._renderFill(ctx);\n        this._renderStroke(ctx);\n      }\n    },\n\n    /**\n     * @private\n     * function that actually render something on the context.\n     * empty here to allow Obects to work on tests to benchmark fabric functionalites\n     * not related to rendering\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _render: function(/* ctx */) {\n\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderFill: function(ctx) {\n      if (!this.fill) {\n        return;\n      }\n\n      ctx.save();\n      this._setFillStyles(ctx, this);\n      if (this.fillRule === 'evenodd') {\n        ctx.fill('evenodd');\n      }\n      else {\n        ctx.fill();\n      }\n      ctx.restore();\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderStroke: function(ctx) {\n      if (!this.stroke || this.strokeWidth === 0) {\n        return;\n      }\n\n      if (this.shadow && !this.shadow.affectStroke) {\n        this._removeShadow(ctx);\n      }\n\n      ctx.save();\n      if (this.strokeUniform && this.group) {\n        var scaling = this.getObjectScaling();\n        ctx.scale(1 / scaling.scaleX, 1 / scaling.scaleY);\n      }\n      else if (this.strokeUniform) {\n        ctx.scale(1 / this.scaleX, 1 / this.scaleY);\n      }\n      this._setLineDash(ctx, this.strokeDashArray);\n      this._setStrokeStyles(ctx, this);\n      ctx.stroke();\n      ctx.restore();\n    },\n\n    /**\n     * This function try to patch the missing gradientTransform on canvas gradients.\n     * transforming a context to transform the gradient, is going to transform the stroke too.\n     * we want to transform the gradient but not the stroke operation, so we create\n     * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n     * this method has drwabacks: is slow, is in low resolution, needs a patch for when the size\n     * is limited.\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {fabric.Gradient} filler a fabric gradient instance\n     */\n    _applyPatternForTransformedGradient: function(ctx, filler) {\n      var dims = this._limitCacheSize(this._getCacheCanvasDimensions()),\n          pCanvas = fabric.util.createCanvasElement(), pCtx, retinaScaling = this.canvas.getRetinaScaling(),\n          width = dims.x / this.scaleX / retinaScaling, height = dims.y / this.scaleY / retinaScaling;\n      pCanvas.width = width;\n      pCanvas.height = height;\n      pCtx = pCanvas.getContext('2d');\n      pCtx.beginPath(); pCtx.moveTo(0, 0); pCtx.lineTo(width, 0); pCtx.lineTo(width, height);\n      pCtx.lineTo(0, height); pCtx.closePath();\n      pCtx.translate(width / 2, height / 2);\n      pCtx.scale(\n        dims.zoomX / this.scaleX / retinaScaling,\n        dims.zoomY / this.scaleY / retinaScaling\n      );\n      this._applyPatternGradientTransform(pCtx, filler);\n      pCtx.fillStyle = filler.toLive(ctx);\n      pCtx.fill();\n      ctx.translate(-this.width / 2 - this.strokeWidth / 2, -this.height / 2 - this.strokeWidth / 2);\n      ctx.scale(\n        retinaScaling * this.scaleX / dims.zoomX,\n        retinaScaling * this.scaleY / dims.zoomY\n      );\n      ctx.strokeStyle = pCtx.createPattern(pCanvas, 'no-repeat');\n    },\n\n    /**\n     * This function is an helper for svg import. it returns the center of the object in the svg\n     * untransformed coordinates\n     * @private\n     * @return {Object} center point from element coordinates\n     */\n    _findCenterFromElement: function() {\n      return { x: this.left + this.width / 2, y: this.top + this.height / 2 };\n    },\n\n    /**\n     * This function is an helper for svg import. it decompose the transformMatrix\n     * and assign properties to object.\n     * untransformed coordinates\n     * @private\n     * @chainable\n     */\n    _assignTransformMatrixProps: function() {\n      if (this.transformMatrix) {\n        var options = fabric.util.qrDecompose(this.transformMatrix);\n        this.flipX = false;\n        this.flipY = false;\n        this.set('scaleX', options.scaleX);\n        this.set('scaleY', options.scaleY);\n        this.angle = options.angle;\n        this.skewX = options.skewX;\n        this.skewY = 0;\n      }\n    },\n\n    /**\n     * This function is an helper for svg import. it removes the transform matrix\n     * and set to object properties that fabricjs can handle\n     * @private\n     * @param {Object} preserveAspectRatioOptions\n     * @return {thisArg}\n     */\n    _removeTransformMatrix: function(preserveAspectRatioOptions) {\n      var center = this._findCenterFromElement();\n      if (this.transformMatrix) {\n        this._assignTransformMatrixProps();\n        center = fabric.util.transformPoint(center, this.transformMatrix);\n      }\n      this.transformMatrix = null;\n      if (preserveAspectRatioOptions) {\n        this.scaleX *= preserveAspectRatioOptions.scaleX;\n        this.scaleY *= preserveAspectRatioOptions.scaleY;\n        this.cropX = preserveAspectRatioOptions.cropX;\n        this.cropY = preserveAspectRatioOptions.cropY;\n        center.x += preserveAspectRatioOptions.offsetLeft;\n        center.y += preserveAspectRatioOptions.offsetTop;\n        this.width = preserveAspectRatioOptions.width;\n        this.height = preserveAspectRatioOptions.height;\n      }\n      this.setPositionByOrigin(center, 'center', 'center');\n    },\n\n    /**\n     * Clones an instance, using a callback method will work for every object.\n     * @param {Function} callback Callback is invoked with a clone as a first argument\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     */\n    clone: function(callback, propertiesToInclude) {\n      var objectForm = this.toObject(propertiesToInclude);\n      if (this.constructor.fromObject) {\n        this.constructor.fromObject(objectForm, callback);\n      }\n      else {\n        fabric.Object._fromObject('Object', objectForm, callback);\n      }\n    },\n\n    /**\n     * Creates an instance of fabric.Image out of an object\n     * makes use of toCanvasElement.\n     * Once this method was based on toDataUrl and loadImage, so it also had a quality\n     * and format option. toCanvasElement is faster and produce no loss of quality.\n     * If you need to get a real Jpeg or Png from an object, using toDataURL is the right way to do it.\n     * toCanvasElement and then toBlob from the obtained canvas is also a good option.\n     * This method is sync now, but still support the callback because we did not want to break.\n     * When fabricJS 5.0 will be planned, this will probably be changed to not have a callback.\n     * @param {Function} callback callback, invoked with an instance as a first argument\n     * @param {Object} [options] for clone as image, passed to toDataURL\n     * @param {Number} [options.multiplier=1] Multiplier to scale by\n     * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n     * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n     * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n     * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n     * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n     * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n     * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n     * @return {fabric.Object} thisArg\n     */\n    cloneAsImage: function(callback, options) {\n      var canvasEl = this.toCanvasElement(options);\n      if (callback) {\n        callback(new fabric.Image(canvasEl));\n      }\n      return this;\n    },\n\n    /**\n     * Converts an object into a HTMLCanvas element\n     * @param {Object} options Options object\n     * @param {Number} [options.multiplier=1] Multiplier to scale by\n     * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n     * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n     * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n     * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n     * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n     * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n     * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n     * @return {HTMLCanvasElement} Returns DOM element <canvas> with the fabric.Object\n     */\n    toCanvasElement: function(options) {\n      options || (options = { });\n\n      var utils = fabric.util, origParams = utils.saveObjectTransform(this),\n          originalGroup = this.group,\n          originalShadow = this.shadow, abs = Math.abs,\n          multiplier = (options.multiplier || 1) * (options.enableRetinaScaling ? fabric.devicePixelRatio : 1);\n      delete this.group;\n      if (options.withoutTransform) {\n        utils.resetObjectTransform(this);\n      }\n      if (options.withoutShadow) {\n        this.shadow = null;\n      }\n\n      var el = fabric.util.createCanvasElement(),\n          // skip canvas zoom and calculate with setCoords now.\n          boundingRect = this.getBoundingRect(true, true),\n          shadow = this.shadow, scaling,\n          shadowOffset = { x: 0, y: 0 }, shadowBlur,\n          width, height;\n\n      if (shadow) {\n        shadowBlur = shadow.blur;\n        if (shadow.nonScaling) {\n          scaling = { scaleX: 1, scaleY: 1 };\n        }\n        else {\n          scaling = this.getObjectScaling();\n        }\n        // consider non scaling shadow.\n        shadowOffset.x = 2 * Math.round(abs(shadow.offsetX) + shadowBlur) * (abs(scaling.scaleX));\n        shadowOffset.y = 2 * Math.round(abs(shadow.offsetY) + shadowBlur) * (abs(scaling.scaleY));\n      }\n      width = boundingRect.width + shadowOffset.x;\n      height = boundingRect.height + shadowOffset.y;\n      // if the current width/height is not an integer\n      // we need to make it so.\n      el.width = Math.ceil(width);\n      el.height = Math.ceil(height);\n      var canvas = new fabric.StaticCanvas(el, {\n        enableRetinaScaling: false,\n        renderOnAddRemove: false,\n        skipOffscreen: false,\n      });\n      if (options.format === 'jpeg') {\n        canvas.backgroundColor = '#fff';\n      }\n      this.setPositionByOrigin(new fabric.Point(canvas.width / 2, canvas.height / 2), 'center', 'center');\n\n      var originalCanvas = this.canvas;\n      canvas.add(this);\n      var canvasEl = canvas.toCanvasElement(multiplier || 1, options);\n      this.shadow = originalShadow;\n      this.set('canvas', originalCanvas);\n      if (originalGroup) {\n        this.group = originalGroup;\n      }\n      this.set(origParams).setCoords();\n      // canvas.dispose will call image.dispose that will nullify the elements\n      // since this canvas is a simple element for the process, we remove references\n      // to objects in this way in order to avoid object trashing.\n      canvas._objects = [];\n      canvas.dispose();\n      canvas = null;\n\n      return canvasEl;\n    },\n\n    /**\n     * Converts an object into a data-url-like string\n     * @param {Object} options Options object\n     * @param {String} [options.format=png] The format of the output image. Either \"jpeg\" or \"png\"\n     * @param {Number} [options.quality=1] Quality level (0..1). Only used for jpeg.\n     * @param {Number} [options.multiplier=1] Multiplier to scale by\n     * @param {Number} [options.left] Cropping left offset. Introduced in v1.2.14\n     * @param {Number} [options.top] Cropping top offset. Introduced in v1.2.14\n     * @param {Number} [options.width] Cropping width. Introduced in v1.2.14\n     * @param {Number} [options.height] Cropping height. Introduced in v1.2.14\n     * @param {Boolean} [options.enableRetinaScaling] Enable retina scaling for clone image. Introduce in 1.6.4\n     * @param {Boolean} [options.withoutTransform] Remove current object transform ( no scale , no angle, no flip, no skew ). Introduced in 2.3.4\n     * @param {Boolean} [options.withoutShadow] Remove current object shadow. Introduced in 2.4.2\n     * @return {String} Returns a data: URL containing a representation of the object in the format specified by options.format\n     */\n    toDataURL: function(options) {\n      options || (options = { });\n      return fabric.util.toDataURL(this.toCanvasElement(options), options.format || 'png', options.quality || 1);\n    },\n\n    /**\n     * Returns true if specified type is identical to the type of an instance\n     * @param {String} type Type to check against\n     * @return {Boolean}\n     */\n    isType: function(type) {\n      return arguments.length > 1 ? Array.from(arguments).includes(this.type) : this.type === type;\n    },\n\n    /**\n     * Returns complexity of an instance\n     * @return {Number} complexity of this instance (is 1 unless subclassed)\n     */\n    complexity: function() {\n      return 1;\n    },\n\n    /**\n     * Returns a JSON representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} JSON\n     */\n    toJSON: function(propertiesToInclude) {\n      // delegate, not alias\n      return this.toObject(propertiesToInclude);\n    },\n\n    /**\n     * Sets \"angle\" of an instance with centered rotation\n     * @param {Number} angle Angle value (in degrees)\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    rotate: function(angle) {\n      var shouldCenterOrigin = (this.originX !== 'center' || this.originY !== 'center') && this.centeredRotation;\n\n      if (shouldCenterOrigin) {\n        this._setOriginToCenter();\n      }\n\n      this.set('angle', angle);\n\n      if (shouldCenterOrigin) {\n        this._resetOrigin();\n      }\n\n      return this;\n    },\n\n    /**\n     * Centers object horizontally on canvas to which it was added last.\n     * You might need to call `setCoords` on an object after centering, to update controls area.\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    centerH: function () {\n      this.canvas && this.canvas.centerObjectH(this);\n      return this;\n    },\n\n    /**\n     * Centers object horizontally on current viewport of canvas to which it was added last.\n     * You might need to call `setCoords` on an object after centering, to update controls area.\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    viewportCenterH: function () {\n      this.canvas && this.canvas.viewportCenterObjectH(this);\n      return this;\n    },\n\n    /**\n     * Centers object vertically on canvas to which it was added last.\n     * You might need to call `setCoords` on an object after centering, to update controls area.\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    centerV: function () {\n      this.canvas && this.canvas.centerObjectV(this);\n      return this;\n    },\n\n    /**\n     * Centers object vertically on current viewport of canvas to which it was added last.\n     * You might need to call `setCoords` on an object after centering, to update controls area.\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    viewportCenterV: function () {\n      this.canvas && this.canvas.viewportCenterObjectV(this);\n      return this;\n    },\n\n    /**\n     * Centers object vertically and horizontally on canvas to which is was added last\n     * You might need to call `setCoords` on an object after centering, to update controls area.\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    center: function () {\n      this.canvas && this.canvas.centerObject(this);\n      return this;\n    },\n\n    /**\n     * Centers object on current viewport of canvas to which it was added last.\n     * You might need to call `setCoords` on an object after centering, to update controls area.\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    viewportCenter: function () {\n      this.canvas && this.canvas.viewportCenterObject(this);\n      return this;\n    },\n\n    /**\n     * Returns coordinates of a pointer relative to an object\n     * @param {Event} e Event to operate upon\n     * @param {Object} [pointer] Pointer to operate upon (instead of event)\n     * @return {Object} Coordinates of a pointer (x, y)\n     */\n    getLocalPointer: function(e, pointer) {\n      pointer = pointer || this.canvas.getPointer(e);\n      var pClicked = new fabric.Point(pointer.x, pointer.y),\n          objectLeftTop = this._getLeftTopCoords();\n      if (this.angle) {\n        pClicked = fabric.util.rotatePoint(\n          pClicked, objectLeftTop, degreesToRadians(-this.angle));\n      }\n      return {\n        x: pClicked.x - objectLeftTop.x,\n        y: pClicked.y - objectLeftTop.y\n      };\n    },\n\n    /**\n     * Sets canvas globalCompositeOperation for specific object\n     * custom composition operation for the particular object can be specified using globalCompositeOperation property\n     * @param {CanvasRenderingContext2D} ctx Rendering canvas context\n     */\n    _setupCompositeOperation: function (ctx) {\n      if (this.globalCompositeOperation) {\n        ctx.globalCompositeOperation = this.globalCompositeOperation;\n      }\n    },\n\n    /**\n     * cancel instance's running animations\n     * override if necessary to dispose artifacts such as `clipPath`\n     */\n    dispose: function () {\n      if (fabric.runningAnimations) {\n        fabric.runningAnimations.cancelByTarget(this);\n      }\n    }\n  });\n\n  fabric.util.createAccessors && fabric.util.createAccessors(fabric.Object);\n\n  extend(fabric.Object.prototype, fabric.Observable);\n\n  /**\n   * Defines the number of fraction digits to use when serializing object values.\n   * You can use it to increase/decrease precision of such values like left, top, scaleX, scaleY, etc.\n   * @static\n   * @memberOf fabric.Object\n   * @constant\n   * @type Number\n   */\n  fabric.Object.NUM_FRACTION_DIGITS = 2;\n\n  /**\n   * Defines which properties should be enlivened from the object passed to {@link fabric.Object._fromObject}\n   * @static\n   * @memberOf fabric.Object\n   * @constant\n   * @type string[]\n   */\n  fabric.Object.ENLIVEN_PROPS = ['clipPath'];\n\n  fabric.Object._fromObject = function(className, object, callback, extraParam) {\n    var klass = fabric[className];\n    object = clone(object, true);\n    fabric.util.enlivenPatterns([object.fill, object.stroke], function(patterns) {\n      if (typeof patterns[0] !== 'undefined') {\n        object.fill = patterns[0];\n      }\n      if (typeof patterns[1] !== 'undefined') {\n        object.stroke = patterns[1];\n      }\n      fabric.util.enlivenObjectEnlivables(object, object, function () {\n        var instance = extraParam ? new klass(object[extraParam], object) : new klass(object);\n        callback && callback(instance);\n      });\n    });\n  };\n\n  /**\n   * Unique id used internally when creating SVG elements\n   * @static\n   * @memberOf fabric.Object\n   * @type Number\n   */\n  fabric.Object.__uid = 0;\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n  var degreesToRadians = fabric.util.degreesToRadians,\n      originXOffset = {\n        left: -0.5,\n        center: 0,\n        right: 0.5\n      },\n      originYOffset = {\n        top: -0.5,\n        center: 0,\n        bottom: 0.5\n      };\n\n  fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n    /**\n     * Translates the coordinates from a set of origin to another (based on the object's dimensions)\n     * @param {fabric.Point} point The point which corresponds to the originX and originY params\n     * @param {String} fromOriginX Horizontal origin: 'left', 'center' or 'right'\n     * @param {String} fromOriginY Vertical origin: 'top', 'center' or 'bottom'\n     * @param {String} toOriginX Horizontal origin: 'left', 'center' or 'right'\n     * @param {String} toOriginY Vertical origin: 'top', 'center' or 'bottom'\n     * @return {fabric.Point}\n     */\n    translateToGivenOrigin: function(point, fromOriginX, fromOriginY, toOriginX, toOriginY) {\n      var x = point.x,\n          y = point.y,\n          offsetX, offsetY, dim;\n\n      if (typeof fromOriginX === 'string') {\n        fromOriginX = originXOffset[fromOriginX];\n      }\n      else {\n        fromOriginX -= 0.5;\n      }\n\n      if (typeof toOriginX === 'string') {\n        toOriginX = originXOffset[toOriginX];\n      }\n      else {\n        toOriginX -= 0.5;\n      }\n\n      offsetX = toOriginX - fromOriginX;\n\n      if (typeof fromOriginY === 'string') {\n        fromOriginY = originYOffset[fromOriginY];\n      }\n      else {\n        fromOriginY -= 0.5;\n      }\n\n      if (typeof toOriginY === 'string') {\n        toOriginY = originYOffset[toOriginY];\n      }\n      else {\n        toOriginY -= 0.5;\n      }\n\n      offsetY = toOriginY - fromOriginY;\n\n      if (offsetX || offsetY) {\n        dim = this._getTransformedDimensions();\n        x = point.x + offsetX * dim.x;\n        y = point.y + offsetY * dim.y;\n      }\n\n      return new fabric.Point(x, y);\n    },\n\n    /**\n     * Translates the coordinates from origin to center coordinates (based on the object's dimensions)\n     * @param {fabric.Point} point The point which corresponds to the originX and originY params\n     * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n     * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n     * @return {fabric.Point}\n     */\n    translateToCenterPoint: function(point, originX, originY) {\n      var p = this.translateToGivenOrigin(point, originX, originY, 'center', 'center');\n      if (this.angle) {\n        return fabric.util.rotatePoint(p, point, degreesToRadians(this.angle));\n      }\n      return p;\n    },\n\n    /**\n     * Translates the coordinates from center to origin coordinates (based on the object's dimensions)\n     * @param {fabric.Point} center The point which corresponds to center of the object\n     * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n     * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n     * @return {fabric.Point}\n     */\n    translateToOriginPoint: function(center, originX, originY) {\n      var p = this.translateToGivenOrigin(center, 'center', 'center', originX, originY);\n      if (this.angle) {\n        return fabric.util.rotatePoint(p, center, degreesToRadians(this.angle));\n      }\n      return p;\n    },\n\n    /**\n     * Returns the real center coordinates of the object\n     * @return {fabric.Point}\n     */\n    getCenterPoint: function() {\n      var leftTop = new fabric.Point(this.left, this.top);\n      return this.translateToCenterPoint(leftTop, this.originX, this.originY);\n    },\n\n    /**\n     * Returns the coordinates of the object based on center coordinates\n     * @param {fabric.Point} point The point which corresponds to the originX and originY params\n     * @return {fabric.Point}\n     */\n    // getOriginPoint: function(center) {\n    //   return this.translateToOriginPoint(center, this.originX, this.originY);\n    // },\n\n    /**\n     * Returns the coordinates of the object as if it has a different origin\n     * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n     * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n     * @return {fabric.Point}\n     */\n    getPointByOrigin: function(originX, originY) {\n      var center = this.getCenterPoint();\n      return this.translateToOriginPoint(center, originX, originY);\n    },\n\n    /**\n     * Returns the point in local coordinates\n     * @param {fabric.Point} point The point relative to the global coordinate system\n     * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n     * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n     * @return {fabric.Point}\n     */\n    toLocalPoint: function(point, originX, originY) {\n      var center = this.getCenterPoint(),\n          p, p2;\n\n      if (typeof originX !== 'undefined' && typeof originY !== 'undefined' ) {\n        p = this.translateToGivenOrigin(center, 'center', 'center', originX, originY);\n      }\n      else {\n        p = new fabric.Point(this.left, this.top);\n      }\n\n      p2 = new fabric.Point(point.x, point.y);\n      if (this.angle) {\n        p2 = fabric.util.rotatePoint(p2, center, -degreesToRadians(this.angle));\n      }\n      return p2.subtractEquals(p);\n    },\n\n    /**\n     * Returns the point in global coordinates\n     * @param {fabric.Point} The point relative to the local coordinate system\n     * @return {fabric.Point}\n     */\n    // toGlobalPoint: function(point) {\n    //   return fabric.util.rotatePoint(point, this.getCenterPoint(), degreesToRadians(this.angle)).addEquals(new fabric.Point(this.left, this.top));\n    // },\n\n    /**\n     * Sets the position of the object taking into consideration the object's origin\n     * @param {fabric.Point} pos The new position of the object\n     * @param {String} originX Horizontal origin: 'left', 'center' or 'right'\n     * @param {String} originY Vertical origin: 'top', 'center' or 'bottom'\n     * @return {void}\n     */\n    setPositionByOrigin: function(pos, originX, originY) {\n      var center = this.translateToCenterPoint(pos, originX, originY),\n          position = this.translateToOriginPoint(center, this.originX, this.originY);\n      this.set('left', position.x);\n      this.set('top', position.y);\n    },\n\n    /**\n     * @param {String} to One of 'left', 'center', 'right'\n     */\n    adjustPosition: function(to) {\n      var angle = degreesToRadians(this.angle),\n          hypotFull = this.getScaledWidth(),\n          xFull = fabric.util.cos(angle) * hypotFull,\n          yFull = fabric.util.sin(angle) * hypotFull,\n          offsetFrom, offsetTo;\n\n      //TODO: this function does not consider mixed situation like top, center.\n      if (typeof this.originX === 'string') {\n        offsetFrom = originXOffset[this.originX];\n      }\n      else {\n        offsetFrom = this.originX - 0.5;\n      }\n      if (typeof to === 'string') {\n        offsetTo = originXOffset[to];\n      }\n      else {\n        offsetTo = to - 0.5;\n      }\n      this.left += xFull * (offsetTo - offsetFrom);\n      this.top += yFull * (offsetTo - offsetFrom);\n      this.setCoords();\n      this.originX = to;\n    },\n\n    /**\n     * Sets the origin/position of the object to it's center point\n     * @private\n     * @return {void}\n     */\n    _setOriginToCenter: function() {\n      this._originalOriginX = this.originX;\n      this._originalOriginY = this.originY;\n\n      var center = this.getCenterPoint();\n\n      this.originX = 'center';\n      this.originY = 'center';\n\n      this.left = center.x;\n      this.top = center.y;\n    },\n\n    /**\n     * Resets the origin/position of the object to it's original origin\n     * @private\n     * @return {void}\n     */\n    _resetOrigin: function() {\n      var originPoint = this.translateToOriginPoint(\n        this.getCenterPoint(),\n        this._originalOriginX,\n        this._originalOriginY);\n\n      this.originX = this._originalOriginX;\n      this.originY = this._originalOriginY;\n\n      this.left = originPoint.x;\n      this.top = originPoint.y;\n\n      this._originalOriginX = null;\n      this._originalOriginY = null;\n    },\n\n    /**\n     * @private\n     */\n    _getLeftTopCoords: function() {\n      return this.translateToOriginPoint(this.getCenterPoint(), 'left', 'top');\n    },\n  });\n\n})();\n\n\n(function() {\n\n  function arrayFromCoords(coords) {\n    return [\n      new fabric.Point(coords.tl.x, coords.tl.y),\n      new fabric.Point(coords.tr.x, coords.tr.y),\n      new fabric.Point(coords.br.x, coords.br.y),\n      new fabric.Point(coords.bl.x, coords.bl.y)\n    ];\n  }\n\n  var util = fabric.util,\n      degreesToRadians = util.degreesToRadians,\n      multiplyMatrices = util.multiplyTransformMatrices,\n      transformPoint = util.transformPoint;\n\n  util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n    /**\n     * Describe object's corner position in canvas element coordinates.\n     * properties are depending on control keys and padding the main controls.\n     * each property is an object with x, y and corner.\n     * The `corner` property contains in a similar manner the 4 points of the\n     * interactive area of the corner.\n     * The coordinates depends from the controls positionHandler and are used\n     * to draw and locate controls\n     * @memberOf fabric.Object.prototype\n     */\n    oCoords: null,\n\n    /**\n     * Describe object's corner position in canvas object absolute coordinates\n     * properties are tl,tr,bl,br and describe the four main corner.\n     * each property is an object with x, y, instance of Fabric.Point.\n     * The coordinates depends from this properties: width, height, scaleX, scaleY\n     * skewX, skewY, angle, strokeWidth, top, left.\n     * Those coordinates are useful to understand where an object is. They get updated\n     * with oCoords but they do not need to be updated when zoom or panning change.\n     * The coordinates get updated with @method setCoords.\n     * You can calculate them without updating with @method calcACoords();\n     * @memberOf fabric.Object.prototype\n     */\n    aCoords: null,\n\n    /**\n     * Describe object's corner position in canvas element coordinates.\n     * includes padding. Used of object detection.\n     * set and refreshed with setCoords.\n     * @memberOf fabric.Object.prototype\n     */\n    lineCoords: null,\n\n    /**\n     * storage for object transform matrix\n     */\n    ownMatrixCache: null,\n\n    /**\n     * storage for object full transform matrix\n     */\n    matrixCache: null,\n\n    /**\n     * custom controls interface\n     * controls are added by default_controls.js\n     */\n    controls: { },\n\n    /**\n     * return correct set of coordinates for intersection\n     * this will return either aCoords or lineCoords.\n     * @param {Boolean} absolute will return aCoords if true or lineCoords\n     * @return {Object} {tl, tr, br, bl} points\n     */\n    _getCoords: function(absolute, calculate) {\n      if (calculate) {\n        return (absolute ? this.calcACoords() : this.calcLineCoords());\n      }\n      if (!this.aCoords || !this.lineCoords) {\n        this.setCoords(true);\n      }\n      return (absolute ? this.aCoords : this.lineCoords);\n    },\n\n    /**\n     * return correct set of coordinates for intersection\n     * this will return either aCoords or lineCoords.\n     * The coords are returned in an array.\n     * @return {Array} [tl, tr, br, bl] of points\n     */\n    getCoords: function(absolute, calculate) {\n      return arrayFromCoords(this._getCoords(absolute, calculate));\n    },\n\n    /**\n     * Checks if object intersects with an area formed by 2 points\n     * @param {Object} pointTL top-left point of area\n     * @param {Object} pointBR bottom-right point of area\n     * @param {Boolean} [absolute] use coordinates without viewportTransform\n     * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n     * @return {Boolean} true if object intersects with an area formed by 2 points\n     */\n    intersectsWithRect: function(pointTL, pointBR, absolute, calculate) {\n      var coords = this.getCoords(absolute, calculate),\n          intersection = fabric.Intersection.intersectPolygonRectangle(\n            coords,\n            pointTL,\n            pointBR\n          );\n      return intersection.status === 'Intersection';\n    },\n\n    /**\n     * Checks if object intersects with another object\n     * @param {Object} other Object to test\n     * @param {Boolean} [absolute] use coordinates without viewportTransform\n     * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n     * @return {Boolean} true if object intersects with another object\n     */\n    intersectsWithObject: function(other, absolute, calculate) {\n      var intersection = fabric.Intersection.intersectPolygonPolygon(\n        this.getCoords(absolute, calculate),\n        other.getCoords(absolute, calculate)\n      );\n\n      return intersection.status === 'Intersection'\n        || other.isContainedWithinObject(this, absolute, calculate)\n        || this.isContainedWithinObject(other, absolute, calculate);\n    },\n\n    /**\n     * Checks if object is fully contained within area of another object\n     * @param {Object} other Object to test\n     * @param {Boolean} [absolute] use coordinates without viewportTransform\n     * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n     * @return {Boolean} true if object is fully contained within area of another object\n     */\n    isContainedWithinObject: function(other, absolute, calculate) {\n      var points = this.getCoords(absolute, calculate),\n          otherCoords = absolute ? other.aCoords : other.lineCoords,\n          i = 0, lines = other._getImageLines(otherCoords);\n      for (; i < 4; i++) {\n        if (!other.containsPoint(points[i], lines)) {\n          return false;\n        }\n      }\n      return true;\n    },\n\n    /**\n     * Checks if object is fully contained within area formed by 2 points\n     * @param {Object} pointTL top-left point of area\n     * @param {Object} pointBR bottom-right point of area\n     * @param {Boolean} [absolute] use coordinates without viewportTransform\n     * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n     * @return {Boolean} true if object is fully contained within area formed by 2 points\n     */\n    isContainedWithinRect: function(pointTL, pointBR, absolute, calculate) {\n      var boundingRect = this.getBoundingRect(absolute, calculate);\n\n      return (\n        boundingRect.left >= pointTL.x &&\n        boundingRect.left + boundingRect.width <= pointBR.x &&\n        boundingRect.top >= pointTL.y &&\n        boundingRect.top + boundingRect.height <= pointBR.y\n      );\n    },\n\n    /**\n     * Checks if point is inside the object\n     * @param {fabric.Point} point Point to check against\n     * @param {Object} [lines] object returned from @method _getImageLines\n     * @param {Boolean} [absolute] use coordinates without viewportTransform\n     * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n     * @return {Boolean} true if point is inside the object\n     */\n    containsPoint: function(point, lines, absolute, calculate) {\n      var coords = this._getCoords(absolute, calculate),\n          lines = lines || this._getImageLines(coords),\n          xPoints = this._findCrossPoints(point, lines);\n      // if xPoints is odd then point is inside the object\n      return (xPoints !== 0 && xPoints % 2 === 1);\n    },\n\n    /**\n     * Checks if object is contained within the canvas with current viewportTransform\n     * the check is done stopping at first point that appears on screen\n     * @param {Boolean} [calculate] use coordinates of current position instead of .aCoords\n     * @return {Boolean} true if object is fully or partially contained within canvas\n     */\n    isOnScreen: function(calculate) {\n      if (!this.canvas) {\n        return false;\n      }\n      var pointTL = this.canvas.vptCoords.tl, pointBR = this.canvas.vptCoords.br;\n      var points = this.getCoords(true, calculate);\n      // if some point is on screen, the object is on screen.\n      if (points.some(function(point) {\n        return point.x <= pointBR.x && point.x >= pointTL.x &&\n        point.y <= pointBR.y && point.y >= pointTL.y;\n      })) {\n        return true;\n      }\n      // no points on screen, check intersection with absolute coordinates\n      if (this.intersectsWithRect(pointTL, pointBR, true, calculate)) {\n        return true;\n      }\n      return this._containsCenterOfCanvas(pointTL, pointBR, calculate);\n    },\n\n    /**\n     * Checks if the object contains the midpoint between canvas extremities\n     * Does not make sense outside the context of isOnScreen and isPartiallyOnScreen\n     * @private\n     * @param {Fabric.Point} pointTL Top Left point\n     * @param {Fabric.Point} pointBR Top Right point\n     * @param {Boolean} calculate use coordinates of current position instead of .oCoords\n     * @return {Boolean} true if the object contains the point\n     */\n    _containsCenterOfCanvas: function(pointTL, pointBR, calculate) {\n      // worst case scenario the object is so big that contains the screen\n      var centerPoint = { x: (pointTL.x + pointBR.x) / 2, y: (pointTL.y + pointBR.y) / 2 };\n      if (this.containsPoint(centerPoint, null, true, calculate)) {\n        return true;\n      }\n      return false;\n    },\n\n    /**\n     * Checks if object is partially contained within the canvas with current viewportTransform\n     * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords\n     * @return {Boolean} true if object is partially contained within canvas\n     */\n    isPartiallyOnScreen: function(calculate) {\n      if (!this.canvas) {\n        return false;\n      }\n      var pointTL = this.canvas.vptCoords.tl, pointBR = this.canvas.vptCoords.br;\n      if (this.intersectsWithRect(pointTL, pointBR, true, calculate)) {\n        return true;\n      }\n      var allPointsAreOutside = this.getCoords(true, calculate).every(function(point) {\n        return (point.x >= pointBR.x || point.x <= pointTL.x) &&\n        (point.y >= pointBR.y || point.y <= pointTL.y);\n      });\n      return allPointsAreOutside && this._containsCenterOfCanvas(pointTL, pointBR, calculate);\n    },\n\n    /**\n     * Method that returns an object with the object edges in it, given the coordinates of the corners\n     * @private\n     * @param {Object} oCoords Coordinates of the object corners\n     */\n    _getImageLines: function(oCoords) {\n\n      var lines = {\n        topline: {\n          o: oCoords.tl,\n          d: oCoords.tr\n        },\n        rightline: {\n          o: oCoords.tr,\n          d: oCoords.br\n        },\n        bottomline: {\n          o: oCoords.br,\n          d: oCoords.bl\n        },\n        leftline: {\n          o: oCoords.bl,\n          d: oCoords.tl\n        }\n      };\n\n      // // debugging\n      // if (this.canvas.contextTop) {\n      //   this.canvas.contextTop.fillRect(lines.bottomline.d.x, lines.bottomline.d.y, 2, 2);\n      //   this.canvas.contextTop.fillRect(lines.bottomline.o.x, lines.bottomline.o.y, 2, 2);\n      //\n      //   this.canvas.contextTop.fillRect(lines.leftline.d.x, lines.leftline.d.y, 2, 2);\n      //   this.canvas.contextTop.fillRect(lines.leftline.o.x, lines.leftline.o.y, 2, 2);\n      //\n      //   this.canvas.contextTop.fillRect(lines.topline.d.x, lines.topline.d.y, 2, 2);\n      //   this.canvas.contextTop.fillRect(lines.topline.o.x, lines.topline.o.y, 2, 2);\n      //\n      //   this.canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);\n      //   this.canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);\n      // }\n\n      return lines;\n    },\n\n    /**\n     * Helper method to determine how many cross points are between the 4 object edges\n     * and the horizontal line determined by a point on canvas\n     * @private\n     * @param {fabric.Point} point Point to check\n     * @param {Object} lines Coordinates of the object being evaluated\n     */\n    // remove yi, not used but left code here just in case.\n    _findCrossPoints: function(point, lines) {\n      var b1, b2, a1, a2, xi, // yi,\n          xcount = 0,\n          iLine;\n\n      for (var lineKey in lines) {\n        iLine = lines[lineKey];\n        // optimisation 1: line below point. no cross\n        if ((iLine.o.y < point.y) && (iLine.d.y < point.y)) {\n          continue;\n        }\n        // optimisation 2: line above point. no cross\n        if ((iLine.o.y >= point.y) && (iLine.d.y >= point.y)) {\n          continue;\n        }\n        // optimisation 3: vertical line case\n        if ((iLine.o.x === iLine.d.x) && (iLine.o.x >= point.x)) {\n          xi = iLine.o.x;\n          // yi = point.y;\n        }\n        // calculate the intersection point\n        else {\n          b1 = 0;\n          b2 = (iLine.d.y - iLine.o.y) / (iLine.d.x - iLine.o.x);\n          a1 = point.y - b1 * point.x;\n          a2 = iLine.o.y - b2 * iLine.o.x;\n\n          xi = -(a1 - a2) / (b1 - b2);\n          // yi = a1 + b1 * xi;\n        }\n        // dont count xi < point.x cases\n        if (xi >= point.x) {\n          xcount += 1;\n        }\n        // optimisation 4: specific for square images\n        if (xcount === 2) {\n          break;\n        }\n      }\n      return xcount;\n    },\n\n    /**\n     * Returns coordinates of object's bounding rectangle (left, top, width, height)\n     * the box is intended as aligned to axis of canvas.\n     * @param {Boolean} [absolute] use coordinates without viewportTransform\n     * @param {Boolean} [calculate] use coordinates of current position instead of .oCoords / .aCoords\n     * @return {Object} Object with left, top, width, height properties\n     */\n    getBoundingRect: function(absolute, calculate) {\n      var coords = this.getCoords(absolute, calculate);\n      return util.makeBoundingBoxFromPoints(coords);\n    },\n\n    /**\n     * Returns width of an object's bounding box counting transformations\n     * before 2.0 it was named getWidth();\n     * @return {Number} width value\n     */\n    getScaledWidth: function() {\n      return this._getTransformedDimensions().x;\n    },\n\n    /**\n     * Returns height of an object bounding box counting transformations\n     * before 2.0 it was named getHeight();\n     * @return {Number} height value\n     */\n    getScaledHeight: function() {\n      return this._getTransformedDimensions().y;\n    },\n\n    /**\n     * Makes sure the scale is valid and modifies it if necessary\n     * @private\n     * @param {Number} value\n     * @return {Number}\n     */\n    _constrainScale: function(value) {\n      if (Math.abs(value) < this.minScaleLimit) {\n        if (value < 0) {\n          return -this.minScaleLimit;\n        }\n        else {\n          return this.minScaleLimit;\n        }\n      }\n      else if (value === 0) {\n        return 0.0001;\n      }\n      return value;\n    },\n\n    /**\n     * Scales an object (equally by x and y)\n     * @param {Number} value Scale factor\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    scale: function(value) {\n      this._set('scaleX', value);\n      this._set('scaleY', value);\n      return this.setCoords();\n    },\n\n    /**\n     * Scales an object to a given width, with respect to bounding box (scaling by x/y equally)\n     * @param {Number} value New width value\n     * @param {Boolean} absolute ignore viewport\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    scaleToWidth: function(value, absolute) {\n      // adjust to bounding rect factor so that rotated shapes would fit as well\n      var boundingRectFactor = this.getBoundingRect(absolute).width / this.getScaledWidth();\n      return this.scale(value / this.width / boundingRectFactor);\n    },\n\n    /**\n     * Scales an object to a given height, with respect to bounding box (scaling by x/y equally)\n     * @param {Number} value New height value\n     * @param {Boolean} absolute ignore viewport\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    scaleToHeight: function(value, absolute) {\n      // adjust to bounding rect factor so that rotated shapes would fit as well\n      var boundingRectFactor = this.getBoundingRect(absolute).height / this.getScaledHeight();\n      return this.scale(value / this.height / boundingRectFactor);\n    },\n\n    calcLineCoords: function() {\n      var vpt = this.getViewportTransform(),\n          padding = this.padding, angle = degreesToRadians(this.angle),\n          cos = util.cos(angle), sin = util.sin(angle),\n          cosP = cos * padding, sinP = sin * padding, cosPSinP = cosP + sinP,\n          cosPMinusSinP = cosP - sinP, aCoords = this.calcACoords();\n\n      var lineCoords = {\n        tl: transformPoint(aCoords.tl, vpt),\n        tr: transformPoint(aCoords.tr, vpt),\n        bl: transformPoint(aCoords.bl, vpt),\n        br: transformPoint(aCoords.br, vpt),\n      };\n\n      if (padding) {\n        lineCoords.tl.x -= cosPMinusSinP;\n        lineCoords.tl.y -= cosPSinP;\n        lineCoords.tr.x += cosPSinP;\n        lineCoords.tr.y -= cosPMinusSinP;\n        lineCoords.bl.x -= cosPSinP;\n        lineCoords.bl.y += cosPMinusSinP;\n        lineCoords.br.x += cosPMinusSinP;\n        lineCoords.br.y += cosPSinP;\n      }\n\n      return lineCoords;\n    },\n\n    calcOCoords: function() {\n      var rotateMatrix = this._calcRotateMatrix(),\n          translateMatrix = this._calcTranslateMatrix(),\n          vpt = this.getViewportTransform(),\n          startMatrix = multiplyMatrices(vpt, translateMatrix),\n          finalMatrix = multiplyMatrices(startMatrix, rotateMatrix),\n          finalMatrix = multiplyMatrices(finalMatrix, [1 / vpt[0], 0, 0, 1 / vpt[3], 0, 0]),\n          dim = this._calculateCurrentDimensions(),\n          coords = {};\n      this.forEachControl(function(control, key, fabricObject) {\n        coords[key] = control.positionHandler(dim, finalMatrix, fabricObject);\n      });\n\n      // debug code\n      // var canvas = this.canvas;\n      // setTimeout(function() {\n      //   canvas.contextTop.clearRect(0, 0, 700, 700);\n      //   canvas.contextTop.fillStyle = 'green';\n      //   Object.keys(coords).forEach(function(key) {\n      //     var control = coords[key];\n      //     canvas.contextTop.fillRect(control.x, control.y, 3, 3);\n      //   });\n      // }, 50);\n      return coords;\n    },\n\n    calcACoords: function() {\n      var rotateMatrix = this._calcRotateMatrix(),\n          translateMatrix = this._calcTranslateMatrix(),\n          finalMatrix = multiplyMatrices(translateMatrix, rotateMatrix),\n          dim = this._getTransformedDimensions(),\n          w = dim.x / 2, h = dim.y / 2;\n      return {\n        // corners\n        tl: transformPoint({ x: -w, y: -h }, finalMatrix),\n        tr: transformPoint({ x: w, y: -h }, finalMatrix),\n        bl: transformPoint({ x: -w, y: h }, finalMatrix),\n        br: transformPoint({ x: w, y: h }, finalMatrix)\n      };\n    },\n\n    /**\n     * Sets corner and controls position coordinates based on current angle, width and height, left and top.\n     * oCoords are used to find the corners\n     * aCoords are used to quickly find an object on the canvas\n     * lineCoords are used to quickly find object during pointer events.\n     * See {@link https://github.com/fabricjs/fabric.js/wiki/When-to-call-setCoords} and {@link http://fabricjs.com/fabric-gotchas}\n     *\n     * @param {Boolean} [skipCorners] skip calculation of oCoords.\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    setCoords: function(skipCorners) {\n      this.aCoords = this.calcACoords();\n      // in case we are in a group, for how the inner group target check works,\n      // lineCoords are exactly aCoords. Since the vpt gets absorbed by the normalized pointer.\n      this.lineCoords = this.group ? this.aCoords : this.calcLineCoords();\n      if (skipCorners) {\n        return this;\n      }\n      // set coordinates of the draggable boxes in the corners used to scale/rotate the image\n      this.oCoords = this.calcOCoords();\n      this._setCornerCoords && this._setCornerCoords();\n      return this;\n    },\n\n    /**\n     * calculate rotation matrix of an object\n     * @return {Array} rotation matrix for the object\n     */\n    _calcRotateMatrix: function() {\n      return util.calcRotateMatrix(this);\n    },\n\n    /**\n     * calculate the translation matrix for an object transform\n     * @return {Array} rotation matrix for the object\n     */\n    _calcTranslateMatrix: function() {\n      var center = this.getCenterPoint();\n      return [1, 0, 0, 1, center.x, center.y];\n    },\n\n    transformMatrixKey: function(skipGroup) {\n      var sep = '_', prefix = '';\n      if (!skipGroup && this.group) {\n        prefix = this.group.transformMatrixKey(skipGroup) + sep;\n      };\n      return prefix + this.top + sep + this.left + sep + this.scaleX + sep + this.scaleY +\n        sep + this.skewX + sep + this.skewY + sep + this.angle + sep + this.originX + sep + this.originY +\n        sep + this.width + sep + this.height + sep + this.strokeWidth + this.flipX + this.flipY;\n    },\n\n    /**\n     * calculate transform matrix that represents the current transformations from the\n     * object's properties.\n     * @param {Boolean} [skipGroup] return transform matrix for object not counting parent transformations\n     * There are some situation in which this is useful to avoid the fake rotation.\n     * @return {Array} transform matrix for the object\n     */\n    calcTransformMatrix: function(skipGroup) {\n      var matrix = this.calcOwnMatrix();\n      if (skipGroup || !this.group) {\n        return matrix;\n      }\n      var key = this.transformMatrixKey(skipGroup), cache = this.matrixCache || (this.matrixCache = {});\n      if (cache.key === key) {\n        return cache.value;\n      }\n      if (this.group) {\n        matrix = multiplyMatrices(this.group.calcTransformMatrix(false), matrix);\n      }\n      cache.key = key;\n      cache.value = matrix;\n      return matrix;\n    },\n\n    /**\n     * calculate transform matrix that represents the current transformations from the\n     * object's properties, this matrix does not include the group transformation\n     * @return {Array} transform matrix for the object\n     */\n    calcOwnMatrix: function() {\n      var key = this.transformMatrixKey(true), cache = this.ownMatrixCache || (this.ownMatrixCache = {});\n      if (cache.key === key) {\n        return cache.value;\n      }\n      var tMatrix = this._calcTranslateMatrix(),\n          options = {\n            angle: this.angle,\n            translateX: tMatrix[4],\n            translateY: tMatrix[5],\n            scaleX: this.scaleX,\n            scaleY: this.scaleY,\n            skewX: this.skewX,\n            skewY: this.skewY,\n            flipX: this.flipX,\n            flipY: this.flipY,\n          };\n      cache.key = key;\n      cache.value = util.composeMatrix(options);\n      return cache.value;\n    },\n\n    /*\n     * Calculate object dimensions from its properties\n     * @private\n     * @return {Object} .x width dimension\n     * @return {Object} .y height dimension\n     */\n    _getNonTransformedDimensions: function() {\n      var strokeWidth = this.strokeWidth,\n          w = this.width + strokeWidth,\n          h = this.height + strokeWidth;\n      return { x: w, y: h };\n    },\n\n    /*\n     * Calculate object bounding box dimensions from its properties scale, skew.\n     * @param {Number} skewX, a value to override current skewX\n     * @param {Number} skewY, a value to override current skewY\n     * @private\n     * @return {Object} .x width dimension\n     * @return {Object} .y height dimension\n     */\n    _getTransformedDimensions: function(skewX, skewY) {\n      if (typeof skewX === 'undefined') {\n        skewX = this.skewX;\n      }\n      if (typeof skewY === 'undefined') {\n        skewY = this.skewY;\n      }\n      var dimensions, dimX, dimY,\n          noSkew = skewX === 0 && skewY === 0;\n\n      if (this.strokeUniform) {\n        dimX = this.width;\n        dimY = this.height;\n      }\n      else {\n        dimensions = this._getNonTransformedDimensions();\n        dimX = dimensions.x;\n        dimY = dimensions.y;\n      }\n      if (noSkew) {\n        return this._finalizeDimensions(dimX * this.scaleX, dimY * this.scaleY);\n      }\n      var bbox = util.sizeAfterTransform(dimX, dimY, {\n        scaleX: this.scaleX,\n        scaleY: this.scaleY,\n        skewX: skewX,\n        skewY: skewY,\n      });\n      return this._finalizeDimensions(bbox.x, bbox.y);\n    },\n\n    /*\n     * Calculate object bounding box dimensions from its properties scale, skew.\n     * @param Number width width of the bbox\n     * @param Number height height of the bbox\n     * @private\n     * @return {Object} .x finalized width dimension\n     * @return {Object} .y finalized height dimension\n     */\n    _finalizeDimensions: function(width, height) {\n      return this.strokeUniform ?\n        { x: width + this.strokeWidth, y: height + this.strokeWidth }\n        :\n        { x: width, y: height };\n    },\n\n    /*\n     * Calculate object dimensions for controls box, including padding and canvas zoom.\n     * and active selection\n     * private\n     */\n    _calculateCurrentDimensions: function()  {\n      var vpt = this.getViewportTransform(),\n          dim = this._getTransformedDimensions(),\n          p = transformPoint(dim, vpt, true);\n      return p.scalarAdd(2 * this.padding);\n    },\n  });\n})();\n\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n  /**\n   * Moves an object to the bottom of the stack of drawn objects\n   * @return {fabric.Object} thisArg\n   * @chainable\n   */\n  sendToBack: function() {\n    if (this.group) {\n      fabric.StaticCanvas.prototype.sendToBack.call(this.group, this);\n    }\n    else if (this.canvas) {\n      this.canvas.sendToBack(this);\n    }\n    return this;\n  },\n\n  /**\n   * Moves an object to the top of the stack of drawn objects\n   * @return {fabric.Object} thisArg\n   * @chainable\n   */\n  bringToFront: function() {\n    if (this.group) {\n      fabric.StaticCanvas.prototype.bringToFront.call(this.group, this);\n    }\n    else if (this.canvas) {\n      this.canvas.bringToFront(this);\n    }\n    return this;\n  },\n\n  /**\n   * Moves an object down in stack of drawn objects\n   * @param {Boolean} [intersecting] If `true`, send object behind next lower intersecting object\n   * @return {fabric.Object} thisArg\n   * @chainable\n   */\n  sendBackwards: function(intersecting) {\n    if (this.group) {\n      fabric.StaticCanvas.prototype.sendBackwards.call(this.group, this, intersecting);\n    }\n    else if (this.canvas) {\n      this.canvas.sendBackwards(this, intersecting);\n    }\n    return this;\n  },\n\n  /**\n   * Moves an object up in stack of drawn objects\n   * @param {Boolean} [intersecting] If `true`, send object in front of next upper intersecting object\n   * @return {fabric.Object} thisArg\n   * @chainable\n   */\n  bringForward: function(intersecting) {\n    if (this.group) {\n      fabric.StaticCanvas.prototype.bringForward.call(this.group, this, intersecting);\n    }\n    else if (this.canvas) {\n      this.canvas.bringForward(this, intersecting);\n    }\n    return this;\n  },\n\n  /**\n   * Moves an object to specified level in stack of drawn objects\n   * @param {Number} index New position of object\n   * @return {fabric.Object} thisArg\n   * @chainable\n   */\n  moveTo: function(index) {\n    if (this.group && this.group.type !== 'activeSelection') {\n      fabric.StaticCanvas.prototype.moveTo.call(this.group, this, index);\n    }\n    else if (this.canvas) {\n      this.canvas.moveTo(this, index);\n    }\n    return this;\n  }\n});\n\n\n/* _TO_SVG_START_ */\n(function() {\n  function getSvgColorString(prop, value) {\n    if (!value) {\n      return prop + ': none; ';\n    }\n    else if (value.toLive) {\n      return prop + ': url(#SVGID_' + value.id + '); ';\n    }\n    else {\n      var color = new fabric.Color(value),\n          str = prop + ': ' + color.toRgb() + '; ',\n          opacity = color.getAlpha();\n      if (opacity !== 1) {\n        //change the color in rgb + opacity\n        str += prop + '-opacity: ' + opacity.toString() + '; ';\n      }\n      return str;\n    }\n  }\n\n  var toFixed = fabric.util.toFixed;\n\n  fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n    /**\n     * Returns styles-string for svg-export\n     * @param {Boolean} skipShadow a boolean to skip shadow filter output\n     * @return {String}\n     */\n    getSvgStyles: function(skipShadow) {\n\n      var fillRule = this.fillRule ? this.fillRule : 'nonzero',\n          strokeWidth = this.strokeWidth ? this.strokeWidth : '0',\n          strokeDashArray = this.strokeDashArray ? this.strokeDashArray.join(' ') : 'none',\n          strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',\n          strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',\n          strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',\n          strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',\n          opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',\n          visibility = this.visible ? '' : ' visibility: hidden;',\n          filter = skipShadow ? '' : this.getSvgFilter(),\n          fill = getSvgColorString('fill', this.fill),\n          stroke = getSvgColorString('stroke', this.stroke);\n\n      return [\n        stroke,\n        'stroke-width: ', strokeWidth, '; ',\n        'stroke-dasharray: ', strokeDashArray, '; ',\n        'stroke-linecap: ', strokeLineCap, '; ',\n        'stroke-dashoffset: ', strokeDashOffset, '; ',\n        'stroke-linejoin: ', strokeLineJoin, '; ',\n        'stroke-miterlimit: ', strokeMiterLimit, '; ',\n        fill,\n        'fill-rule: ', fillRule, '; ',\n        'opacity: ', opacity, ';',\n        filter,\n        visibility\n      ].join('');\n    },\n\n    /**\n     * Returns styles-string for svg-export\n     * @param {Object} style the object from which to retrieve style properties\n     * @param {Boolean} useWhiteSpace a boolean to include an additional attribute in the style.\n     * @return {String}\n     */\n    getSvgSpanStyles: function(style, useWhiteSpace) {\n      var term = '; ';\n      var fontFamily = style.fontFamily ?\n        'font-family: ' + (((style.fontFamily.indexOf('\\'') === -1 && style.fontFamily.indexOf('\"') === -1) ?\n          '\\'' + style.fontFamily  + '\\'' : style.fontFamily)) + term : '';\n      var strokeWidth = style.strokeWidth ? 'stroke-width: ' + style.strokeWidth + term : '',\n          fontFamily = fontFamily,\n          fontSize = style.fontSize ? 'font-size: ' + style.fontSize + 'px' + term : '',\n          fontStyle = style.fontStyle ? 'font-style: ' + style.fontStyle + term : '',\n          fontWeight = style.fontWeight ? 'font-weight: ' + style.fontWeight + term : '',\n          fill = style.fill ? getSvgColorString('fill', style.fill) : '',\n          stroke = style.stroke ? getSvgColorString('stroke', style.stroke) : '',\n          textDecoration = this.getSvgTextDecoration(style),\n          deltaY = style.deltaY ? 'baseline-shift: ' + (-style.deltaY) + '; ' : '';\n      if (textDecoration) {\n        textDecoration = 'text-decoration: ' + textDecoration + term;\n      }\n\n      return [\n        stroke,\n        strokeWidth,\n        fontFamily,\n        fontSize,\n        fontStyle,\n        fontWeight,\n        textDecoration,\n        fill,\n        deltaY,\n        useWhiteSpace ? 'white-space: pre; ' : ''\n      ].join('');\n    },\n\n    /**\n     * Returns text-decoration property for svg-export\n     * @param {Object} style the object from which to retrieve style properties\n     * @return {String}\n     */\n    getSvgTextDecoration: function(style) {\n      return ['overline', 'underline', 'line-through'].filter(function(decoration) {\n        return style[decoration.replace('-', '')];\n      }).join(' ');\n    },\n\n    /**\n     * Returns filter for svg shadow\n     * @return {String}\n     */\n    getSvgFilter: function() {\n      return this.shadow ? 'filter: url(#SVGID_' + this.shadow.id + ');' : '';\n    },\n\n    /**\n     * Returns id attribute for svg output\n     * @return {String}\n     */\n    getSvgCommons: function() {\n      return [\n        this.id ? 'id=\"' + this.id + '\" ' : '',\n        this.clipPath ? 'clip-path=\"url(#' + this.clipPath.clipPathId + ')\" ' : '',\n      ].join('');\n    },\n\n    /**\n     * Returns transform-string for svg-export\n     * @param {Boolean} use the full transform or the single object one.\n     * @return {String}\n     */\n    getSvgTransform: function(full, additionalTransform) {\n      var transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),\n          svgTransform = 'transform=\"' + fabric.util.matrixToSVG(transform);\n      return svgTransform +\n        (additionalTransform || '') + '\" ';\n    },\n\n    _setSVGBg: function(textBgRects) {\n      if (this.backgroundColor) {\n        var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n        textBgRects.push(\n          '\\t\\t<rect ',\n          this._getFillAttributes(this.backgroundColor),\n          ' x=\"',\n          toFixed(-this.width / 2, NUM_FRACTION_DIGITS),\n          '\" y=\"',\n          toFixed(-this.height / 2, NUM_FRACTION_DIGITS),\n          '\" width=\"',\n          toFixed(this.width, NUM_FRACTION_DIGITS),\n          '\" height=\"',\n          toFixed(this.height, NUM_FRACTION_DIGITS),\n          '\"></rect>\\n');\n      }\n    },\n\n    /**\n     * Returns svg representation of an instance\n     * @param {Function} [reviver] Method for further parsing of svg representation.\n     * @return {String} svg representation of an instance\n     */\n    toSVG: function(reviver) {\n      return this._createBaseSVGMarkup(this._toSVG(reviver), { reviver: reviver });\n    },\n\n    /**\n     * Returns svg clipPath representation of an instance\n     * @param {Function} [reviver] Method for further parsing of svg representation.\n     * @return {String} svg representation of an instance\n     */\n    toClipPathSVG: function(reviver) {\n      return '\\t' + this._createBaseClipPathSVGMarkup(this._toSVG(reviver), { reviver: reviver });\n    },\n\n    /**\n     * @private\n     */\n    _createBaseClipPathSVGMarkup: function(objectMarkup, options) {\n      options = options || {};\n      var reviver = options.reviver,\n          additionalTransform = options.additionalTransform || '',\n          commonPieces = [\n            this.getSvgTransform(true, additionalTransform),\n            this.getSvgCommons(),\n          ].join(''),\n          // insert commons in the markup, style and svgCommons\n          index = objectMarkup.indexOf('COMMON_PARTS');\n      objectMarkup[index] = commonPieces;\n      return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');\n    },\n\n    /**\n     * @private\n     */\n    _createBaseSVGMarkup: function(objectMarkup, options) {\n      options = options || {};\n      var noStyle = options.noStyle,\n          reviver = options.reviver,\n          styleInfo = noStyle ? '' : 'style=\"' + this.getSvgStyles() + '\" ',\n          shadowInfo = options.withShadow ? 'style=\"' + this.getSvgFilter() + '\" ' : '',\n          clipPath = this.clipPath,\n          vectorEffect = this.strokeUniform ? 'vector-effect=\"non-scaling-stroke\" ' : '',\n          absoluteClipPath = clipPath && clipPath.absolutePositioned,\n          stroke = this.stroke, fill = this.fill, shadow = this.shadow,\n          commonPieces, markup = [], clipPathMarkup,\n          // insert commons in the markup, style and svgCommons\n          index = objectMarkup.indexOf('COMMON_PARTS'),\n          additionalTransform = options.additionalTransform;\n      if (clipPath) {\n        clipPath.clipPathId = 'CLIPPATH_' + fabric.Object.__uid++;\n        clipPathMarkup = '<clipPath id=\"' + clipPath.clipPathId + '\" >\\n' +\n          clipPath.toClipPathSVG(reviver) +\n          '</clipPath>\\n';\n      }\n      if (absoluteClipPath) {\n        markup.push(\n          '<g ', shadowInfo, this.getSvgCommons(), ' >\\n'\n        );\n      }\n      markup.push(\n        '<g ',\n        this.getSvgTransform(false),\n        !absoluteClipPath ? shadowInfo + this.getSvgCommons() : '',\n        ' >\\n'\n      );\n      commonPieces = [\n        styleInfo,\n        vectorEffect,\n        noStyle ? '' : this.addPaintOrder(), ' ',\n        additionalTransform ? 'transform=\"' + additionalTransform + '\" ' : '',\n      ].join('');\n      objectMarkup[index] = commonPieces;\n      if (fill && fill.toLive) {\n        markup.push(fill.toSVG(this));\n      }\n      if (stroke && stroke.toLive) {\n        markup.push(stroke.toSVG(this));\n      }\n      if (shadow) {\n        markup.push(shadow.toSVG(this));\n      }\n      if (clipPath) {\n        markup.push(clipPathMarkup);\n      }\n      markup.push(objectMarkup.join(''));\n      markup.push('</g>\\n');\n      absoluteClipPath && markup.push('</g>\\n');\n      return reviver ? reviver(markup.join('')) : markup.join('');\n    },\n\n    addPaintOrder: function() {\n      return this.paintFirst !== 'fill' ? ' paint-order=\"' + this.paintFirst + '\" ' : '';\n    }\n  });\n})();\n/* _TO_SVG_END_ */\n\n\n(function() {\n\n  var extend = fabric.util.object.extend,\n      originalSet = 'stateProperties';\n\n  /*\n    Depends on `stateProperties`\n  */\n  function saveProps(origin, destination, props) {\n    var tmpObj = { }, deep = true;\n    props.forEach(function(prop) {\n      tmpObj[prop] = origin[prop];\n    });\n\n    extend(origin[destination], tmpObj, deep);\n  }\n\n  function _isEqual(origValue, currentValue, firstPass) {\n    if (origValue === currentValue) {\n      // if the objects are identical, return\n      return true;\n    }\n    else if (Array.isArray(origValue)) {\n      if (!Array.isArray(currentValue) || origValue.length !== currentValue.length) {\n        return false;\n      }\n      for (var i = 0, len = origValue.length; i < len; i++) {\n        if (!_isEqual(origValue[i], currentValue[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    else if (origValue && typeof origValue === 'object') {\n      var keys = Object.keys(origValue), key;\n      if (!currentValue ||\n          typeof currentValue !== 'object' ||\n          (!firstPass && keys.length !== Object.keys(currentValue).length)\n      ) {\n        return false;\n      }\n      for (var i = 0, len = keys.length; i < len; i++) {\n        key = keys[i];\n        // since clipPath is in the statefull cache list and the clipPath objects\n        // would be iterated as an object, this would lead to possible infinite recursion\n        // we do not want to compare those.\n        if (key === 'canvas' || key === 'group') {\n          continue;\n        }\n        if (!_isEqual(origValue[key], currentValue[key])) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n\n\n  fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n    /**\n     * Returns true if object state (one of its state properties) was changed\n     * @param {String} [propertySet] optional name for the set of property we want to save\n     * @return {Boolean} true if instance' state has changed since `{@link fabric.Object#saveState}` was called\n     */\n    hasStateChanged: function(propertySet) {\n      propertySet = propertySet || originalSet;\n      var dashedPropertySet = '_' + propertySet;\n      if (Object.keys(this[dashedPropertySet]).length < this[propertySet].length) {\n        return true;\n      }\n      return !_isEqual(this[dashedPropertySet], this, true);\n    },\n\n    /**\n     * Saves state of an object\n     * @param {Object} [options] Object with additional `stateProperties` array to include when saving state\n     * @return {fabric.Object} thisArg\n     */\n    saveState: function(options) {\n      var propertySet = options && options.propertySet || originalSet,\n          destination = '_' + propertySet;\n      if (!this[destination]) {\n        return this.setupState(options);\n      }\n      saveProps(this, destination, this[propertySet]);\n      if (options && options.stateProperties) {\n        saveProps(this, destination, options.stateProperties);\n      }\n      return this;\n    },\n\n    /**\n     * Setups state of an object\n     * @param {Object} [options] Object with additional `stateProperties` array to include when saving state\n     * @return {fabric.Object} thisArg\n     */\n    setupState: function(options) {\n      options = options || { };\n      var propertySet = options.propertySet || originalSet;\n      options.propertySet = propertySet;\n      this['_' + propertySet] = { };\n      this.saveState(options);\n      return this;\n    }\n  });\n})();\n\n\n(function() {\n\n  var degreesToRadians = fabric.util.degreesToRadians;\n\n  fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n    /**\n     * Determines which corner has been clicked\n     * @private\n     * @param {Object} pointer The pointer indicating the mouse position\n     * @return {String|Boolean} corner code (tl, tr, bl, br, etc.), or false if nothing is found\n     */\n    _findTargetCorner: function(pointer, forTouch) {\n      // objects in group, anykind, are not self modificable,\n      // must not return an hovered corner.\n      if (!this.hasControls || this.group || (!this.canvas || this.canvas._activeObject !== this)) {\n        return false;\n      }\n\n      var ex = pointer.x,\n          ey = pointer.y,\n          xPoints,\n          lines, keys = Object.keys(this.oCoords),\n          j = keys.length - 1, i;\n      this.__corner = 0;\n\n      // cycle in reverse order so we pick first the one on top\n      for (; j >= 0; j--) {\n        i = keys[j];\n        if (!this.isControlVisible(i)) {\n          continue;\n        }\n\n        lines = this._getImageLines(forTouch ? this.oCoords[i].touchCorner : this.oCoords[i].corner);\n        // // debugging\n        //\n        // this.canvas.contextTop.fillRect(lines.bottomline.d.x, lines.bottomline.d.y, 2, 2);\n        // this.canvas.contextTop.fillRect(lines.bottomline.o.x, lines.bottomline.o.y, 2, 2);\n        //\n        // this.canvas.contextTop.fillRect(lines.leftline.d.x, lines.leftline.d.y, 2, 2);\n        // this.canvas.contextTop.fillRect(lines.leftline.o.x, lines.leftline.o.y, 2, 2);\n        //\n        // this.canvas.contextTop.fillRect(lines.topline.d.x, lines.topline.d.y, 2, 2);\n        // this.canvas.contextTop.fillRect(lines.topline.o.x, lines.topline.o.y, 2, 2);\n        //\n        // this.canvas.contextTop.fillRect(lines.rightline.d.x, lines.rightline.d.y, 2, 2);\n        // this.canvas.contextTop.fillRect(lines.rightline.o.x, lines.rightline.o.y, 2, 2);\n\n        xPoints = this._findCrossPoints({ x: ex, y: ey }, lines);\n        if (xPoints !== 0 && xPoints % 2 === 1) {\n          this.__corner = i;\n          return i;\n        }\n      }\n      return false;\n    },\n\n    /**\n     * Calls a function for each control. The function gets called,\n     * with the control, the object that is calling the iterator and the control's key\n     * @param {Function} fn function to iterate over the controls over\n     */\n    forEachControl: function(fn) {\n      for (var i in this.controls) {\n        fn(this.controls[i], i, this);\n      };\n    },\n\n    /**\n     * Sets the coordinates of the draggable boxes in the corners of\n     * the image used to scale/rotate it.\n     * note: if we would switch to ROUND corner area, all of this would disappear.\n     * everything would resolve to a single point and a pythagorean theorem for the distance\n     * @private\n     */\n    _setCornerCoords: function() {\n      var coords = this.oCoords;\n\n      for (var control in coords) {\n        var controlObject = this.controls[control];\n        coords[control].corner = controlObject.calcCornerCoords(\n          this.angle, this.cornerSize, coords[control].x, coords[control].y, false);\n        coords[control].touchCorner = controlObject.calcCornerCoords(\n          this.angle, this.touchCornerSize, coords[control].x, coords[control].y, true);\n      }\n    },\n\n    /**\n     * Draws a colored layer behind the object, inside its selection borders.\n     * Requires public options: padding, selectionBackgroundColor\n     * this function is called when the context is transformed\n     * has checks to be skipped when the object is on a staticCanvas\n     * @param {CanvasRenderingContext2D} ctx Context to draw on\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    drawSelectionBackground: function(ctx) {\n      if (!this.selectionBackgroundColor ||\n        (this.canvas && !this.canvas.interactive) ||\n        (this.canvas && this.canvas._activeObject !== this)\n      ) {\n        return this;\n      }\n      ctx.save();\n      var center = this.getCenterPoint(), wh = this._calculateCurrentDimensions(),\n          vpt = this.canvas.viewportTransform;\n      ctx.translate(center.x, center.y);\n      ctx.scale(1 / vpt[0], 1 / vpt[3]);\n      ctx.rotate(degreesToRadians(this.angle));\n      ctx.fillStyle = this.selectionBackgroundColor;\n      ctx.fillRect(-wh.x / 2, -wh.y / 2, wh.x, wh.y);\n      ctx.restore();\n      return this;\n    },\n\n    /**\n     * Draws borders of an object's bounding box.\n     * Requires public properties: width, height\n     * Requires public options: padding, borderColor\n     * @param {CanvasRenderingContext2D} ctx Context to draw on\n     * @param {Object} styleOverride object to override the object style\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    drawBorders: function(ctx, styleOverride) {\n      styleOverride = styleOverride || {};\n      var wh = this._calculateCurrentDimensions(),\n          strokeWidth = this.borderScaleFactor,\n          width = wh.x + strokeWidth,\n          height = wh.y + strokeWidth,\n          hasControls = typeof styleOverride.hasControls !== 'undefined' ?\n            styleOverride.hasControls : this.hasControls,\n          shouldStroke = false;\n\n      ctx.save();\n      ctx.strokeStyle = styleOverride.borderColor || this.borderColor;\n      this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray);\n\n      ctx.strokeRect(\n        -width / 2,\n        -height / 2,\n        width,\n        height\n      );\n\n      if (hasControls) {\n        ctx.beginPath();\n        this.forEachControl(function(control, key, fabricObject) {\n          // in this moment, the ctx is centered on the object.\n          // width and height of the above function are the size of the bbox.\n          if (control.withConnection && control.getVisibility(fabricObject, key)) {\n            // reset movement for each control\n            shouldStroke = true;\n            ctx.moveTo(control.x * width, control.y * height);\n            ctx.lineTo(\n              control.x * width + control.offsetX,\n              control.y * height + control.offsetY\n            );\n          }\n        });\n        if (shouldStroke) {\n          ctx.stroke();\n        }\n      }\n      ctx.restore();\n      return this;\n    },\n\n    /**\n     * Draws borders of an object's bounding box when it is inside a group.\n     * Requires public properties: width, height\n     * Requires public options: padding, borderColor\n     * @param {CanvasRenderingContext2D} ctx Context to draw on\n     * @param {object} options object representing current object parameters\n     * @param {Object} styleOverride object to override the object style\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    drawBordersInGroup: function(ctx, options, styleOverride) {\n      styleOverride = styleOverride || {};\n      var bbox = fabric.util.sizeAfterTransform(this.width, this.height, options),\n          strokeWidth = this.strokeWidth,\n          strokeUniform = this.strokeUniform,\n          borderScaleFactor = this.borderScaleFactor,\n          width =\n            bbox.x + strokeWidth * (strokeUniform ? this.canvas.getZoom() : options.scaleX) + borderScaleFactor,\n          height =\n            bbox.y + strokeWidth * (strokeUniform ? this.canvas.getZoom() : options.scaleY) + borderScaleFactor;\n      ctx.save();\n      this._setLineDash(ctx, styleOverride.borderDashArray || this.borderDashArray);\n      ctx.strokeStyle = styleOverride.borderColor || this.borderColor;\n      ctx.strokeRect(\n        -width / 2,\n        -height / 2,\n        width,\n        height\n      );\n\n      ctx.restore();\n      return this;\n    },\n\n    /**\n     * Draws corners of an object's bounding box.\n     * Requires public properties: width, height\n     * Requires public options: cornerSize, padding\n     * @param {CanvasRenderingContext2D} ctx Context to draw on\n     * @param {Object} styleOverride object to override the object style\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    drawControls: function(ctx, styleOverride) {\n      styleOverride = styleOverride || {};\n      ctx.save();\n      var retinaScaling = this.canvas.getRetinaScaling(), matrix, p;\n      ctx.setTransform(retinaScaling, 0, 0, retinaScaling, 0, 0);\n      ctx.strokeStyle = ctx.fillStyle = styleOverride.cornerColor || this.cornerColor;\n      if (!this.transparentCorners) {\n        ctx.strokeStyle = styleOverride.cornerStrokeColor || this.cornerStrokeColor;\n      }\n      this._setLineDash(ctx, styleOverride.cornerDashArray || this.cornerDashArray);\n      this.setCoords();\n      if (this.group) {\n        // fabricJS does not really support drawing controls inside groups,\n        // this piece of code here helps having at least the control in places.\n        // If an application needs to show some objects as selected because of some UI state\n        // can still call Object._renderControls() on any object they desire, independently of groups.\n        // using no padding, circular controls and hiding the rotating cursor is higly suggested,\n        matrix = this.group.calcTransformMatrix();\n      }\n      this.forEachControl(function(control, key, fabricObject) {\n        p = fabricObject.oCoords[key];\n        if (control.getVisibility(fabricObject, key)) {\n          if (matrix) {\n            p = fabric.util.transformPoint(p, matrix);\n          }\n          control.render(ctx, p.x, p.y, styleOverride, fabricObject);\n        }\n      });\n      ctx.restore();\n\n      return this;\n    },\n\n    /**\n     * Returns true if the specified control is visible, false otherwise.\n     * @param {String} controlKey The key of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n     * @returns {Boolean} true if the specified control is visible, false otherwise\n     */\n    isControlVisible: function(controlKey) {\n      return this.controls[controlKey] && this.controls[controlKey].getVisibility(this, controlKey);\n    },\n\n    /**\n     * Sets the visibility of the specified control.\n     * @param {String} controlKey The key of the control. Possible values are 'tl', 'tr', 'br', 'bl', 'ml', 'mt', 'mr', 'mb', 'mtr'.\n     * @param {Boolean} visible true to set the specified control visible, false otherwise\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    setControlVisible: function(controlKey, visible) {\n      if (!this._controlsVisibility) {\n        this._controlsVisibility = {};\n      }\n      this._controlsVisibility[controlKey] = visible;\n      return this;\n    },\n\n    /**\n     * Sets the visibility state of object controls.\n     * @param {Object} [options] Options object\n     * @param {Boolean} [options.bl] true to enable the bottom-left control, false to disable it\n     * @param {Boolean} [options.br] true to enable the bottom-right control, false to disable it\n     * @param {Boolean} [options.mb] true to enable the middle-bottom control, false to disable it\n     * @param {Boolean} [options.ml] true to enable the middle-left control, false to disable it\n     * @param {Boolean} [options.mr] true to enable the middle-right control, false to disable it\n     * @param {Boolean} [options.mt] true to enable the middle-top control, false to disable it\n     * @param {Boolean} [options.tl] true to enable the top-left control, false to disable it\n     * @param {Boolean} [options.tr] true to enable the top-right control, false to disable it\n     * @param {Boolean} [options.mtr] true to enable the middle-top-rotate control, false to disable it\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    setControlsVisibility: function(options) {\n      options || (options = { });\n\n      for (var p in options) {\n        this.setControlVisible(p, options[p]);\n      }\n      return this;\n    },\n\n\n    /**\n     * This callback function is called every time _discardActiveObject or _setActiveObject\n     * try to to deselect this object. If the function returns true, the process is cancelled\n     * @param {Object} [options] options sent from the upper functions\n     * @param {Event} [options.e] event if the process is generated by an event\n     */\n    onDeselect: function() {\n      // implemented by sub-classes, as needed.\n    },\n\n\n    /**\n     * This callback function is called every time _discardActiveObject or _setActiveObject\n     * try to to select this object. If the function returns true, the process is cancelled\n     * @param {Object} [options] options sent from the upper functions\n     * @param {Event} [options.e] event if the process is generated by an event\n     */\n    onSelect: function() {\n      // implemented by sub-classes, as needed.\n    }\n  });\n})();\n\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n  /**\n   * Animation duration (in ms) for fx* methods\n   * @type Number\n   * @default\n   */\n  FX_DURATION: 500,\n\n  /**\n   * Centers object horizontally with animation.\n   * @param {fabric.Object} object Object to center\n   * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n   * @param {Function} [callbacks.onComplete] Invoked on completion\n   * @param {Function} [callbacks.onChange] Invoked on every step of animation\n   * @return {fabric.AnimationContext} context\n   */\n  fxCenterObjectH: function (object, callbacks) {\n    callbacks = callbacks || { };\n\n    var empty = function() { },\n        onComplete = callbacks.onComplete || empty,\n        onChange = callbacks.onChange || empty,\n        _this = this;\n\n    return fabric.util.animate({\n      target: this,\n      startValue: object.left,\n      endValue: this.getCenterPoint().x,\n      duration: this.FX_DURATION,\n      onChange: function(value) {\n        object.set('left', value);\n        _this.requestRenderAll();\n        onChange();\n      },\n      onComplete: function() {\n        object.setCoords();\n        onComplete();\n      }\n    });\n  },\n\n  /**\n   * Centers object vertically with animation.\n   * @param {fabric.Object} object Object to center\n   * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n   * @param {Function} [callbacks.onComplete] Invoked on completion\n   * @param {Function} [callbacks.onChange] Invoked on every step of animation\n   * @return {fabric.AnimationContext} context\n   */\n  fxCenterObjectV: function (object, callbacks) {\n    callbacks = callbacks || { };\n\n    var empty = function() { },\n        onComplete = callbacks.onComplete || empty,\n        onChange = callbacks.onChange || empty,\n        _this = this;\n\n    return fabric.util.animate({\n      target: this,\n      startValue: object.top,\n      endValue: this.getCenterPoint().y,\n      duration: this.FX_DURATION,\n      onChange: function(value) {\n        object.set('top', value);\n        _this.requestRenderAll();\n        onChange();\n      },\n      onComplete: function() {\n        object.setCoords();\n        onComplete();\n      }\n    });\n  },\n\n  /**\n   * Same as `fabric.Canvas#remove` but animated\n   * @param {fabric.Object} object Object to remove\n   * @param {Object} [callbacks] Callbacks object with optional \"onComplete\" and/or \"onChange\" properties\n   * @param {Function} [callbacks.onComplete] Invoked on completion\n   * @param {Function} [callbacks.onChange] Invoked on every step of animation\n   * @return {fabric.AnimationContext} context\n   */\n  fxRemove: function (object, callbacks) {\n    callbacks = callbacks || { };\n\n    var empty = function() { },\n        onComplete = callbacks.onComplete || empty,\n        onChange = callbacks.onChange || empty,\n        _this = this;\n\n    return fabric.util.animate({\n      target: this,\n      startValue: object.opacity,\n      endValue: 0,\n      duration: this.FX_DURATION,\n      onChange: function(value) {\n        object.set('opacity', value);\n        _this.requestRenderAll();\n        onChange();\n      },\n      onComplete: function () {\n        _this.remove(object);\n        onComplete();\n      }\n    });\n  }\n});\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n  /**\n   * Animates object's properties\n   * @param {String|Object} property Property to animate (if string) or properties to animate (if object)\n   * @param {Number|Object} value Value to animate property to (if string was given first) or options object\n   * @return {fabric.Object} thisArg\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}\n   * @return {fabric.AnimationContext | fabric.AnimationContext[]} animation context (or an array if passed multiple properties)\n   *\n   * As object — multiple properties\n   *\n   * object.animate({ left: ..., top: ... });\n   * object.animate({ left: ..., top: ... }, { duration: ... });\n   *\n   * As string — one property\n   *\n   * object.animate('left', ...);\n   * object.animate('left', { duration: ... });\n   *\n   */\n  animate: function () {\n    if (arguments[0] && typeof arguments[0] === 'object') {\n      var propsToAnimate = [], prop, skipCallbacks, out = [];\n      for (prop in arguments[0]) {\n        propsToAnimate.push(prop);\n      }\n      for (var i = 0, len = propsToAnimate.length; i < len; i++) {\n        prop = propsToAnimate[i];\n        skipCallbacks = i !== len - 1;\n        out.push(this._animate(prop, arguments[0][prop], arguments[1], skipCallbacks));\n      }\n      return out;\n    }\n    else {\n      return this._animate.apply(this, arguments);\n    }\n  },\n\n  /**\n   * @private\n   * @param {String} property Property to animate\n   * @param {String} to Value to animate to\n   * @param {Object} [options] Options object\n   * @param {Boolean} [skipCallbacks] When true, callbacks like onchange and oncomplete are not invoked\n   */\n  _animate: function(property, to, options, skipCallbacks) {\n    var _this = this, propPair;\n\n    to = to.toString();\n\n    if (!options) {\n      options = { };\n    }\n    else {\n      options = fabric.util.object.clone(options);\n    }\n\n    if (~property.indexOf('.')) {\n      propPair = property.split('.');\n    }\n\n    var propIsColor =\n      _this.colorProperties.indexOf(property) > -1 ||\n      (propPair && _this.colorProperties.indexOf(propPair[1]) > -1);\n\n    var currentValue = propPair\n      ? this.get(propPair[0])[propPair[1]]\n      : this.get(property);\n\n    if (!('from' in options)) {\n      options.from = currentValue;\n    }\n\n    if (!propIsColor) {\n      if (~to.indexOf('=')) {\n        to = currentValue + parseFloat(to.replace('=', ''));\n      }\n      else {\n        to = parseFloat(to);\n      }\n    }\n\n    var _options = {\n      target: this,\n      startValue: options.from,\n      endValue: to,\n      byValue: options.by,\n      easing: options.easing,\n      duration: options.duration,\n      abort: options.abort && function(value, valueProgress, timeProgress) {\n        return options.abort.call(_this, value, valueProgress, timeProgress);\n      },\n      onChange: function (value, valueProgress, timeProgress) {\n        if (propPair) {\n          _this[propPair[0]][propPair[1]] = value;\n        }\n        else {\n          _this.set(property, value);\n        }\n        if (skipCallbacks) {\n          return;\n        }\n        options.onChange && options.onChange(value, valueProgress, timeProgress);\n      },\n      onComplete: function (value, valueProgress, timeProgress) {\n        if (skipCallbacks) {\n          return;\n        }\n\n        _this.setCoords();\n        options.onComplete && options.onComplete(value, valueProgress, timeProgress);\n      }\n    };\n\n    if (propIsColor) {\n      return fabric.util.animateColor(_options.startValue, _options.endValue, _options.duration, _options);\n    }\n    else {\n      return fabric.util.animate(_options);\n    }\n  }\n});\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      extend = fabric.util.object.extend,\n      clone = fabric.util.object.clone,\n      coordProps = { x1: 1, x2: 1, y1: 1, y2: 1 };\n\n  if (fabric.Line) {\n    fabric.warn('fabric.Line is already defined');\n    return;\n  }\n\n  /**\n   * Line class\n   * @class fabric.Line\n   * @extends fabric.Object\n   * @see {@link fabric.Line#initialize} for constructor definition\n   */\n  fabric.Line = fabric.util.createClass(fabric.Object, /** @lends fabric.Line.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'line',\n\n    /**\n     * x value or first line edge\n     * @type Number\n     * @default\n     */\n    x1: 0,\n\n    /**\n     * y value or first line edge\n     * @type Number\n     * @default\n     */\n    y1: 0,\n\n    /**\n     * x value or second line edge\n     * @type Number\n     * @default\n     */\n    x2: 0,\n\n    /**\n     * y value or second line edge\n     * @type Number\n     * @default\n     */\n    y2: 0,\n\n    cacheProperties: fabric.Object.prototype.cacheProperties.concat('x1', 'x2', 'y1', 'y2'),\n\n    /**\n     * Constructor\n     * @param {Array} [points] Array of points\n     * @param {Object} [options] Options object\n     * @return {fabric.Line} thisArg\n     */\n    initialize: function(points, options) {\n      if (!points) {\n        points = [0, 0, 0, 0];\n      }\n\n      this.callSuper('initialize', options);\n\n      this.set('x1', points[0]);\n      this.set('y1', points[1]);\n      this.set('x2', points[2]);\n      this.set('y2', points[3]);\n\n      this._setWidthHeight(options);\n    },\n\n    /**\n     * @private\n     * @param {Object} [options] Options\n     */\n    _setWidthHeight: function(options) {\n      options || (options = { });\n\n      this.width = Math.abs(this.x2 - this.x1);\n      this.height = Math.abs(this.y2 - this.y1);\n\n      this.left = 'left' in options\n        ? options.left\n        : this._getLeftToOriginX();\n\n      this.top = 'top' in options\n        ? options.top\n        : this._getTopToOriginY();\n    },\n\n    /**\n     * @private\n     * @param {String} key\n     * @param {*} value\n     */\n    _set: function(key, value) {\n      this.callSuper('_set', key, value);\n      if (typeof coordProps[key] !== 'undefined') {\n        this._setWidthHeight();\n      }\n      return this;\n    },\n\n    /**\n     * @private\n     * @return {Number} leftToOriginX Distance from left edge of canvas to originX of Line.\n     */\n    _getLeftToOriginX: makeEdgeToOriginGetter(\n      { // property names\n        origin: 'originX',\n        axis1: 'x1',\n        axis2: 'x2',\n        dimension: 'width'\n      },\n      { // possible values of origin\n        nearest: 'left',\n        center: 'center',\n        farthest: 'right'\n      }\n    ),\n\n    /**\n     * @private\n     * @return {Number} topToOriginY Distance from top edge of canvas to originY of Line.\n     */\n    _getTopToOriginY: makeEdgeToOriginGetter(\n      { // property names\n        origin: 'originY',\n        axis1: 'y1',\n        axis2: 'y2',\n        dimension: 'height'\n      },\n      { // possible values of origin\n        nearest: 'top',\n        center: 'center',\n        farthest: 'bottom'\n      }\n    ),\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _render: function(ctx) {\n      ctx.beginPath();\n\n\n      var p = this.calcLinePoints();\n      ctx.moveTo(p.x1, p.y1);\n      ctx.lineTo(p.x2, p.y2);\n\n      ctx.lineWidth = this.strokeWidth;\n\n      // TODO: test this\n      // make sure setting \"fill\" changes color of a line\n      // (by copying fillStyle to strokeStyle, since line is stroked, not filled)\n      var origStrokeStyle = ctx.strokeStyle;\n      ctx.strokeStyle = this.stroke || ctx.fillStyle;\n      this.stroke && this._renderStroke(ctx);\n      ctx.strokeStyle = origStrokeStyle;\n    },\n\n    /**\n     * This function is an helper for svg import. it returns the center of the object in the svg\n     * untransformed coordinates\n     * @private\n     * @return {Object} center point from element coordinates\n     */\n    _findCenterFromElement: function() {\n      return {\n        x: (this.x1 + this.x2) / 2,\n        y: (this.y1 + this.y2) / 2,\n      };\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @method toObject\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      return extend(this.callSuper('toObject', propertiesToInclude), this.calcLinePoints());\n    },\n\n    /*\n     * Calculate object dimensions from its properties\n     * @private\n     */\n    _getNonTransformedDimensions: function() {\n      var dim = this.callSuper('_getNonTransformedDimensions');\n      if (this.strokeLineCap === 'butt') {\n        if (this.width === 0) {\n          dim.y -= this.strokeWidth;\n        }\n        if (this.height === 0) {\n          dim.x -= this.strokeWidth;\n        }\n      }\n      return dim;\n    },\n\n    /**\n     * Recalculates line points given width and height\n     * @private\n     */\n    calcLinePoints: function() {\n      var xMult = this.x1 <= this.x2 ? -1 : 1,\n          yMult = this.y1 <= this.y2 ? -1 : 1,\n          x1 = (xMult * this.width * 0.5),\n          y1 = (yMult * this.height * 0.5),\n          x2 = (xMult * this.width * -0.5),\n          y2 = (yMult * this.height * -0.5);\n\n      return {\n        x1: x1,\n        x2: x2,\n        y1: y1,\n        y2: y2\n      };\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns svg representation of an instance\n     * @return {Array} an array of strings with the specific svg representation\n     * of the instance\n     */\n    _toSVG: function() {\n      var p = this.calcLinePoints();\n      return [\n        '<line ', 'COMMON_PARTS',\n        'x1=\"', p.x1,\n        '\" y1=\"', p.y1,\n        '\" x2=\"', p.x2,\n        '\" y2=\"', p.y2,\n        '\" />\\n'\n      ];\n    },\n    /* _TO_SVG_END_ */\n  });\n\n  /* _FROM_SVG_START_ */\n  /**\n   * List of attribute names to account for when parsing SVG element (used by {@link fabric.Line.fromElement})\n   * @static\n   * @memberOf fabric.Line\n   * @see http://www.w3.org/TR/SVG/shapes.html#LineElement\n   */\n  fabric.Line.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x1 y1 x2 y2'.split(' '));\n\n  /**\n   * Returns fabric.Line instance from an SVG element\n   * @static\n   * @memberOf fabric.Line\n   * @param {SVGElement} element Element to parse\n   * @param {Object} [options] Options object\n   * @param {Function} [callback] callback function invoked after parsing\n   */\n  fabric.Line.fromElement = function(element, callback, options) {\n    options = options || { };\n    var parsedAttributes = fabric.parseAttributes(element, fabric.Line.ATTRIBUTE_NAMES),\n        points = [\n          parsedAttributes.x1 || 0,\n          parsedAttributes.y1 || 0,\n          parsedAttributes.x2 || 0,\n          parsedAttributes.y2 || 0\n        ];\n    callback(new fabric.Line(points, extend(parsedAttributes, options)));\n  };\n  /* _FROM_SVG_END_ */\n\n  /**\n   * Returns fabric.Line instance from an object representation\n   * @static\n   * @memberOf fabric.Line\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] invoked with new instance as first argument\n   */\n  fabric.Line.fromObject = function(object, callback) {\n    function _callback(instance) {\n      delete instance.points;\n      callback && callback(instance);\n    };\n    var options = clone(object, true);\n    options.points = [object.x1, object.y1, object.x2, object.y2];\n    fabric.Object._fromObject('Line', options, _callback, 'points');\n  };\n\n  /**\n   * Produces a function that calculates distance from canvas edge to Line origin.\n   */\n  function makeEdgeToOriginGetter(propertyNames, originValues) {\n    var origin = propertyNames.origin,\n        axis1 = propertyNames.axis1,\n        axis2 = propertyNames.axis2,\n        dimension = propertyNames.dimension,\n        nearest = originValues.nearest,\n        center = originValues.center,\n        farthest = originValues.farthest;\n\n    return function() {\n      switch (this.get(origin)) {\n        case nearest:\n          return Math.min(this.get(axis1), this.get(axis2));\n        case center:\n          return Math.min(this.get(axis1), this.get(axis2)) + (0.5 * this.get(dimension));\n        case farthest:\n          return Math.max(this.get(axis1), this.get(axis2));\n      }\n    };\n\n  }\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      degreesToRadians = fabric.util.degreesToRadians;\n\n  if (fabric.Circle) {\n    fabric.warn('fabric.Circle is already defined.');\n    return;\n  }\n\n  /**\n   * Circle class\n   * @class fabric.Circle\n   * @extends fabric.Object\n   * @see {@link fabric.Circle#initialize} for constructor definition\n   */\n  fabric.Circle = fabric.util.createClass(fabric.Object, /** @lends fabric.Circle.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'circle',\n\n    /**\n     * Radius of this circle\n     * @type Number\n     * @default\n     */\n    radius: 0,\n\n    /**\n     * degrees of start of the circle.\n     * probably will change to degrees in next major version\n     * @type Number 0 - 359\n     * @default 0\n     */\n    startAngle: 0,\n\n    /**\n     * End angle of the circle\n     * probably will change to degrees in next major version\n     * @type Number 1 - 360\n     * @default 360\n     */\n    endAngle: 360,\n\n    cacheProperties: fabric.Object.prototype.cacheProperties.concat('radius', 'startAngle', 'endAngle'),\n\n    /**\n     * @private\n     * @param {String} key\n     * @param {*} value\n     * @return {fabric.Circle} thisArg\n     */\n    _set: function(key, value) {\n      this.callSuper('_set', key, value);\n\n      if (key === 'radius') {\n        this.setRadius(value);\n      }\n\n      return this;\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      return this.callSuper('toObject', ['radius', 'startAngle', 'endAngle'].concat(propertiesToInclude));\n    },\n\n    /* _TO_SVG_START_ */\n\n    /**\n     * Returns svg representation of an instance\n     * @return {Array} an array of strings with the specific svg representation\n     * of the instance\n     */\n    _toSVG: function() {\n      var svgString, x = 0, y = 0,\n          angle = (this.endAngle - this.startAngle) % 360;\n\n      if (angle === 0) {\n        svgString = [\n          '<circle ', 'COMMON_PARTS',\n          'cx=\"' + x + '\" cy=\"' + y + '\" ',\n          'r=\"', this.radius,\n          '\" />\\n'\n        ];\n      }\n      else {\n        var start = degreesToRadians(this.startAngle),\n            end = degreesToRadians(this.endAngle),\n            radius = this.radius,\n            startX = fabric.util.cos(start) * radius,\n            startY = fabric.util.sin(start) * radius,\n            endX = fabric.util.cos(end) * radius,\n            endY = fabric.util.sin(end) * radius,\n            largeFlag = angle > 180 ? '1' : '0';\n        svgString = [\n          '<path d=\"M ' + startX + ' ' + startY,\n          ' A ' + radius + ' ' + radius,\n          ' 0 ', +largeFlag + ' 1', ' ' + endX + ' ' + endY,\n          '\" ', 'COMMON_PARTS', ' />\\n'\n        ];\n      }\n      return svgString;\n    },\n    /* _TO_SVG_END_ */\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx context to render on\n     */\n    _render: function(ctx) {\n      ctx.beginPath();\n      ctx.arc(\n        0,\n        0,\n        this.radius,\n        degreesToRadians(this.startAngle),\n        degreesToRadians(this.endAngle),\n        false\n      );\n      this._renderPaintInOrder(ctx);\n    },\n\n    /**\n     * Returns horizontal radius of an object (according to how an object is scaled)\n     * @return {Number}\n     */\n    getRadiusX: function() {\n      return this.get('radius') * this.get('scaleX');\n    },\n\n    /**\n     * Returns vertical radius of an object (according to how an object is scaled)\n     * @return {Number}\n     */\n    getRadiusY: function() {\n      return this.get('radius') * this.get('scaleY');\n    },\n\n    /**\n     * Sets radius of an object (and updates width accordingly)\n     * @return {fabric.Circle} thisArg\n     */\n    setRadius: function(value) {\n      this.radius = value;\n      return this.set('width', value * 2).set('height', value * 2);\n    },\n  });\n\n  /* _FROM_SVG_START_ */\n  /**\n   * List of attribute names to account for when parsing SVG element (used by {@link fabric.Circle.fromElement})\n   * @static\n   * @memberOf fabric.Circle\n   * @see: http://www.w3.org/TR/SVG/shapes.html#CircleElement\n   */\n  fabric.Circle.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy r'.split(' '));\n\n  /**\n   * Returns {@link fabric.Circle} instance from an SVG element\n   * @static\n   * @memberOf fabric.Circle\n   * @param {SVGElement} element Element to parse\n   * @param {Function} [callback] Options callback invoked after parsing is finished\n   * @param {Object} [options] Options object\n   * @throws {Error} If value of `r` attribute is missing or invalid\n   */\n  fabric.Circle.fromElement = function(element, callback) {\n    var parsedAttributes = fabric.parseAttributes(element, fabric.Circle.ATTRIBUTE_NAMES);\n\n    if (!isValidRadius(parsedAttributes)) {\n      throw new Error('value of `r` attribute is required and can not be negative');\n    }\n\n    parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.radius;\n    parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.radius;\n    callback(new fabric.Circle(parsedAttributes));\n  };\n\n  /**\n   * @private\n   */\n  function isValidRadius(attributes) {\n    return (('radius' in attributes) && (attributes.radius >= 0));\n  }\n  /* _FROM_SVG_END_ */\n\n  /**\n   * Returns {@link fabric.Circle} instance from an object representation\n   * @static\n   * @memberOf fabric.Circle\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] invoked with new instance as first argument\n   * @return {void}\n   */\n  fabric.Circle.fromObject = function(object, callback) {\n    fabric.Object._fromObject('Circle', object, callback);\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { });\n\n  if (fabric.Triangle) {\n    fabric.warn('fabric.Triangle is already defined');\n    return;\n  }\n\n  /**\n   * Triangle class\n   * @class fabric.Triangle\n   * @extends fabric.Object\n   * @return {fabric.Triangle} thisArg\n   * @see {@link fabric.Triangle#initialize} for constructor definition\n   */\n  fabric.Triangle = fabric.util.createClass(fabric.Object, /** @lends fabric.Triangle.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'triangle',\n\n    /**\n     * Width is set to 100 to compensate the old initialize code that was setting it to 100\n     * @type Number\n     * @default\n     */\n    width: 100,\n\n    /**\n     * Height is set to 100 to compensate the old initialize code that was setting it to 100\n     * @type Number\n     * @default\n     */\n    height: 100,\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _render: function(ctx) {\n      var widthBy2 = this.width / 2,\n          heightBy2 = this.height / 2;\n\n      ctx.beginPath();\n      ctx.moveTo(-widthBy2, heightBy2);\n      ctx.lineTo(0, -heightBy2);\n      ctx.lineTo(widthBy2, heightBy2);\n      ctx.closePath();\n\n      this._renderPaintInOrder(ctx);\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns svg representation of an instance\n     * @return {Array} an array of strings with the specific svg representation\n     * of the instance\n     */\n    _toSVG: function() {\n      var widthBy2 = this.width / 2,\n          heightBy2 = this.height / 2,\n          points = [\n            -widthBy2 + ' ' + heightBy2,\n            '0 ' + -heightBy2,\n            widthBy2 + ' ' + heightBy2\n          ].join(',');\n      return [\n        '<polygon ', 'COMMON_PARTS',\n        'points=\"', points,\n        '\" />'\n      ];\n    },\n    /* _TO_SVG_END_ */\n  });\n\n  /**\n   * Returns {@link fabric.Triangle} instance from an object representation\n   * @static\n   * @memberOf fabric.Triangle\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] invoked with new instance as first argument\n   */\n  fabric.Triangle.fromObject = function(object, callback) {\n    return fabric.Object._fromObject('Triangle', object, callback);\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      piBy2   = Math.PI * 2;\n\n  if (fabric.Ellipse) {\n    fabric.warn('fabric.Ellipse is already defined.');\n    return;\n  }\n\n  /**\n   * Ellipse class\n   * @class fabric.Ellipse\n   * @extends fabric.Object\n   * @return {fabric.Ellipse} thisArg\n   * @see {@link fabric.Ellipse#initialize} for constructor definition\n   */\n  fabric.Ellipse = fabric.util.createClass(fabric.Object, /** @lends fabric.Ellipse.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'ellipse',\n\n    /**\n     * Horizontal radius\n     * @type Number\n     * @default\n     */\n    rx:   0,\n\n    /**\n     * Vertical radius\n     * @type Number\n     * @default\n     */\n    ry:   0,\n\n    cacheProperties: fabric.Object.prototype.cacheProperties.concat('rx', 'ry'),\n\n    /**\n     * Constructor\n     * @param {Object} [options] Options object\n     * @return {fabric.Ellipse} thisArg\n     */\n    initialize: function(options) {\n      this.callSuper('initialize', options);\n      this.set('rx', options && options.rx || 0);\n      this.set('ry', options && options.ry || 0);\n    },\n\n    /**\n     * @private\n     * @param {String} key\n     * @param {*} value\n     * @return {fabric.Ellipse} thisArg\n     */\n    _set: function(key, value) {\n      this.callSuper('_set', key, value);\n      switch (key) {\n\n        case 'rx':\n          this.rx = value;\n          this.set('width', value * 2);\n          break;\n\n        case 'ry':\n          this.ry = value;\n          this.set('height', value * 2);\n          break;\n\n      }\n      return this;\n    },\n\n    /**\n     * Returns horizontal radius of an object (according to how an object is scaled)\n     * @return {Number}\n     */\n    getRx: function() {\n      return this.get('rx') * this.get('scaleX');\n    },\n\n    /**\n     * Returns Vertical radius of an object (according to how an object is scaled)\n     * @return {Number}\n     */\n    getRy: function() {\n      return this.get('ry') * this.get('scaleY');\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude));\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns svg representation of an instance\n     * @return {Array} an array of strings with the specific svg representation\n     * of the instance\n     */\n    _toSVG: function() {\n      return [\n        '<ellipse ', 'COMMON_PARTS',\n        'cx=\"0\" cy=\"0\" ',\n        'rx=\"', this.rx,\n        '\" ry=\"', this.ry,\n        '\" />\\n'\n      ];\n    },\n    /* _TO_SVG_END_ */\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx context to render on\n     */\n    _render: function(ctx) {\n      ctx.beginPath();\n      ctx.save();\n      ctx.transform(1, 0, 0, this.ry / this.rx, 0, 0);\n      ctx.arc(\n        0,\n        0,\n        this.rx,\n        0,\n        piBy2,\n        false);\n      ctx.restore();\n      this._renderPaintInOrder(ctx);\n    },\n  });\n\n  /* _FROM_SVG_START_ */\n  /**\n   * List of attribute names to account for when parsing SVG element (used by {@link fabric.Ellipse.fromElement})\n   * @static\n   * @memberOf fabric.Ellipse\n   * @see http://www.w3.org/TR/SVG/shapes.html#EllipseElement\n   */\n  fabric.Ellipse.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('cx cy rx ry'.split(' '));\n\n  /**\n   * Returns {@link fabric.Ellipse} instance from an SVG element\n   * @static\n   * @memberOf fabric.Ellipse\n   * @param {SVGElement} element Element to parse\n   * @param {Function} [callback] Options callback invoked after parsing is finished\n   * @return {fabric.Ellipse}\n   */\n  fabric.Ellipse.fromElement = function(element, callback) {\n\n    var parsedAttributes = fabric.parseAttributes(element, fabric.Ellipse.ATTRIBUTE_NAMES);\n\n    parsedAttributes.left = (parsedAttributes.left || 0) - parsedAttributes.rx;\n    parsedAttributes.top = (parsedAttributes.top || 0) - parsedAttributes.ry;\n    callback(new fabric.Ellipse(parsedAttributes));\n  };\n  /* _FROM_SVG_END_ */\n\n  /**\n   * Returns {@link fabric.Ellipse} instance from an object representation\n   * @static\n   * @memberOf fabric.Ellipse\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] invoked with new instance as first argument\n   * @return {void}\n   */\n  fabric.Ellipse.fromObject = function(object, callback) {\n    fabric.Object._fromObject('Ellipse', object, callback);\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      extend = fabric.util.object.extend;\n\n  if (fabric.Rect) {\n    fabric.warn('fabric.Rect is already defined');\n    return;\n  }\n\n  /**\n   * Rectangle class\n   * @class fabric.Rect\n   * @extends fabric.Object\n   * @return {fabric.Rect} thisArg\n   * @see {@link fabric.Rect#initialize} for constructor definition\n   */\n  fabric.Rect = fabric.util.createClass(fabric.Object, /** @lends fabric.Rect.prototype */ {\n\n    /**\n     * List of properties to consider when checking if state of an object is changed ({@link fabric.Object#hasStateChanged})\n     * as well as for history (undo/redo) purposes\n     * @type Array\n     */\n    stateProperties: fabric.Object.prototype.stateProperties.concat('rx', 'ry'),\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'rect',\n\n    /**\n     * Horizontal border radius\n     * @type Number\n     * @default\n     */\n    rx:   0,\n\n    /**\n     * Vertical border radius\n     * @type Number\n     * @default\n     */\n    ry:   0,\n\n    cacheProperties: fabric.Object.prototype.cacheProperties.concat('rx', 'ry'),\n\n    /**\n     * Constructor\n     * @param {Object} [options] Options object\n     * @return {Object} thisArg\n     */\n    initialize: function(options) {\n      this.callSuper('initialize', options);\n      this._initRxRy();\n    },\n\n    /**\n     * Initializes rx/ry attributes\n     * @private\n     */\n    _initRxRy: function() {\n      if (this.rx && !this.ry) {\n        this.ry = this.rx;\n      }\n      else if (this.ry && !this.rx) {\n        this.rx = this.ry;\n      }\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _render: function(ctx) {\n\n      // 1x1 case (used in spray brush) optimization was removed because\n      // with caching and higher zoom level this makes more damage than help\n\n      var rx = this.rx ? Math.min(this.rx, this.width / 2) : 0,\n          ry = this.ry ? Math.min(this.ry, this.height / 2) : 0,\n          w = this.width,\n          h = this.height,\n          x = -this.width / 2,\n          y = -this.height / 2,\n          isRounded = rx !== 0 || ry !== 0,\n          /* \"magic number\" for bezier approximations of arcs (http://itc.ktu.lt/itc354/Riskus354.pdf) */\n          k = 1 - 0.5522847498;\n      ctx.beginPath();\n\n      ctx.moveTo(x + rx, y);\n\n      ctx.lineTo(x + w - rx, y);\n      isRounded && ctx.bezierCurveTo(x + w - k * rx, y, x + w, y + k * ry, x + w, y + ry);\n\n      ctx.lineTo(x + w, y + h - ry);\n      isRounded && ctx.bezierCurveTo(x + w, y + h - k * ry, x + w - k * rx, y + h, x + w - rx, y + h);\n\n      ctx.lineTo(x + rx, y + h);\n      isRounded && ctx.bezierCurveTo(x + k * rx, y + h, x, y + h - k * ry, x, y + h - ry);\n\n      ctx.lineTo(x, y + ry);\n      isRounded && ctx.bezierCurveTo(x, y + k * ry, x + k * rx, y, x + rx, y);\n\n      ctx.closePath();\n\n      this._renderPaintInOrder(ctx);\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      return this.callSuper('toObject', ['rx', 'ry'].concat(propertiesToInclude));\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns svg representation of an instance\n     * @return {Array} an array of strings with the specific svg representation\n     * of the instance\n     */\n    _toSVG: function() {\n      var x = -this.width / 2, y = -this.height / 2;\n      return [\n        '<rect ', 'COMMON_PARTS',\n        'x=\"', x, '\" y=\"', y,\n        '\" rx=\"', this.rx, '\" ry=\"', this.ry,\n        '\" width=\"', this.width, '\" height=\"', this.height,\n        '\" />\\n'\n      ];\n    },\n    /* _TO_SVG_END_ */\n  });\n\n  /* _FROM_SVG_START_ */\n  /**\n   * List of attribute names to account for when parsing SVG element (used by `fabric.Rect.fromElement`)\n   * @static\n   * @memberOf fabric.Rect\n   * @see: http://www.w3.org/TR/SVG/shapes.html#RectElement\n   */\n  fabric.Rect.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat('x y rx ry width height'.split(' '));\n\n  /**\n   * Returns {@link fabric.Rect} instance from an SVG element\n   * @static\n   * @memberOf fabric.Rect\n   * @param {SVGElement} element Element to parse\n   * @param {Function} callback callback function invoked after parsing\n   * @param {Object} [options] Options object\n   */\n  fabric.Rect.fromElement = function(element, callback, options) {\n    if (!element) {\n      return callback(null);\n    }\n    options = options || { };\n\n    var parsedAttributes = fabric.parseAttributes(element, fabric.Rect.ATTRIBUTE_NAMES);\n    parsedAttributes.left = parsedAttributes.left || 0;\n    parsedAttributes.top  = parsedAttributes.top  || 0;\n    parsedAttributes.height  = parsedAttributes.height || 0;\n    parsedAttributes.width  = parsedAttributes.width || 0;\n    var rect = new fabric.Rect(extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes));\n    rect.visible = rect.visible && rect.width > 0 && rect.height > 0;\n    callback(rect);\n  };\n  /* _FROM_SVG_END_ */\n\n  /**\n   * Returns {@link fabric.Rect} instance from an object representation\n   * @static\n   * @memberOf fabric.Rect\n   * @param {Object} object Object to create an instance from\n   * @param {Function} [callback] Callback to invoke when an fabric.Rect instance is created\n   */\n  fabric.Rect.fromObject = function(object, callback) {\n    return fabric.Object._fromObject('Rect', object, callback);\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      extend = fabric.util.object.extend,\n      min = fabric.util.array.min,\n      max = fabric.util.array.max,\n      toFixed = fabric.util.toFixed,\n      projectStrokeOnPoints = fabric.util.projectStrokeOnPoints;\n\n  if (fabric.Polyline) {\n    fabric.warn('fabric.Polyline is already defined');\n    return;\n  }\n\n  /**\n   * Polyline class\n   * @class fabric.Polyline\n   * @extends fabric.Object\n   * @see {@link fabric.Polyline#initialize} for constructor definition\n   */\n  fabric.Polyline = fabric.util.createClass(fabric.Object, /** @lends fabric.Polyline.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'polyline',\n\n    /**\n     * Points array\n     * @type Array\n     * @default\n     */\n    points: null,\n\n    /**\n     * WARNING: Feature in progress\n     * Calculate the exact bounding box taking in account strokeWidth on acute angles\n     * this will be turned to true by default on fabric 6.0\n     * maybe will be left in as an optimization since calculations may be slow\n     * @deprecated\n     * @type Boolean\n     * @default false\n     */\n    exactBoundingBox: false,\n\n    cacheProperties: fabric.Object.prototype.cacheProperties.concat('points'),\n\n    /**\n     * Constructor\n     * @param {Array} points Array of points (where each point is an object with x and y)\n     * @param {Object} [options] Options object\n     * @return {fabric.Polyline} thisArg\n     * @example\n     * var poly = new fabric.Polyline([\n     *     { x: 10, y: 10 },\n     *     { x: 50, y: 30 },\n     *     { x: 40, y: 70 },\n     *     { x: 60, y: 50 },\n     *     { x: 100, y: 150 },\n     *     { x: 40, y: 100 }\n     *   ], {\n     *   stroke: 'red',\n     *   left: 100,\n     *   top: 100\n     * });\n     */\n    initialize: function(points, options) {\n      options = options || {};\n      this.points = points || [];\n      this.callSuper('initialize', options);\n      this._setPositionDimensions(options);\n    },\n\n    /**\n     * @private\n     */\n    _projectStrokeOnPoints: function () {\n      return projectStrokeOnPoints(this.points, this, true);\n    },\n\n    _setPositionDimensions: function(options) {\n      var calcDim = this._calcDimensions(options), correctLeftTop,\n          correctSize = this.exactBoundingBox ? this.strokeWidth : 0;\n      this.width = calcDim.width - correctSize;\n      this.height = calcDim.height - correctSize;\n      if (!options.fromSVG) {\n        correctLeftTop = this.translateToGivenOrigin(\n          {\n            // this looks bad, but is one way to keep it optional for now.\n            x: calcDim.left - this.strokeWidth / 2 + correctSize / 2,\n            y: calcDim.top - this.strokeWidth / 2 + correctSize / 2\n          },\n          'left',\n          'top',\n          this.originX,\n          this.originY\n        );\n      }\n      if (typeof options.left === 'undefined') {\n        this.left = options.fromSVG ? calcDim.left : correctLeftTop.x;\n      }\n      if (typeof options.top === 'undefined') {\n        this.top = options.fromSVG ? calcDim.top : correctLeftTop.y;\n      }\n      this.pathOffset = {\n        x: calcDim.left + this.width / 2 + correctSize / 2,\n        y: calcDim.top + this.height / 2 + correctSize / 2\n      };\n    },\n\n    /**\n     * Calculate the polygon min and max point from points array,\n     * returning an object with left, top, width, height to measure the\n     * polygon size\n     * @return {Object} object.left X coordinate of the polygon leftmost point\n     * @return {Object} object.top Y coordinate of the polygon topmost point\n     * @return {Object} object.width distance between X coordinates of the polygon leftmost and rightmost point\n     * @return {Object} object.height distance between Y coordinates of the polygon topmost and bottommost point\n     * @private\n     */\n    _calcDimensions: function() {\n\n      var points = this.exactBoundingBox ? this._projectStrokeOnPoints() : this.points,\n          minX = min(points, 'x') || 0,\n          minY = min(points, 'y') || 0,\n          maxX = max(points, 'x') || 0,\n          maxY = max(points, 'y') || 0,\n          width = (maxX - minX),\n          height = (maxY - minY);\n\n      return {\n        left: minX,\n        top: minY,\n        width: width,\n        height: height,\n      };\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} Object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      return extend(this.callSuper('toObject', propertiesToInclude), {\n        points: this.points.concat()\n      });\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns svg representation of an instance\n     * @return {Array} an array of strings with the specific svg representation\n     * of the instance\n     */\n    _toSVG: function() {\n      var points = [], diffX = this.pathOffset.x, diffY = this.pathOffset.y,\n          NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n\n      for (var i = 0, len = this.points.length; i < len; i++) {\n        points.push(\n          toFixed(this.points[i].x - diffX, NUM_FRACTION_DIGITS), ',',\n          toFixed(this.points[i].y - diffY, NUM_FRACTION_DIGITS), ' '\n        );\n      }\n      return [\n        '<' + this.type + ' ', 'COMMON_PARTS',\n        'points=\"', points.join(''),\n        '\" />\\n'\n      ];\n    },\n    /* _TO_SVG_END_ */\n\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    commonRender: function(ctx) {\n      var point, len = this.points.length,\n          x = this.pathOffset.x,\n          y = this.pathOffset.y;\n\n      if (!len || isNaN(this.points[len - 1].y)) {\n        // do not draw if no points or odd points\n        // NaN comes from parseFloat of a empty string in parser\n        return false;\n      }\n      ctx.beginPath();\n      ctx.moveTo(this.points[0].x - x, this.points[0].y - y);\n      for (var i = 0; i < len; i++) {\n        point = this.points[i];\n        ctx.lineTo(point.x - x, point.y - y);\n      }\n      return true;\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _render: function(ctx) {\n      if (!this.commonRender(ctx)) {\n        return;\n      }\n      this._renderPaintInOrder(ctx);\n    },\n\n    /**\n     * Returns complexity of an instance\n     * @return {Number} complexity of this instance\n     */\n    complexity: function() {\n      return this.get('points').length;\n    }\n  });\n\n  /* _FROM_SVG_START_ */\n  /**\n   * List of attribute names to account for when parsing SVG element (used by {@link fabric.Polyline.fromElement})\n   * @static\n   * @memberOf fabric.Polyline\n   * @see: http://www.w3.org/TR/SVG/shapes.html#PolylineElement\n   */\n  fabric.Polyline.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat();\n\n  /**\n   * Returns fabric.Polyline instance from an SVG element\n   * @static\n   * @memberOf fabric.Polyline\n   * @param {SVGElement} element Element to parser\n   * @param {Function} callback callback function invoked after parsing\n   * @param {Object} [options] Options object\n   */\n  fabric.Polyline.fromElementGenerator = function(_class) {\n    return function(element, callback, options) {\n      if (!element) {\n        return callback(null);\n      }\n      options || (options = { });\n\n      var points = fabric.parsePointsAttribute(element.getAttribute('points')),\n          parsedAttributes = fabric.parseAttributes(element, fabric[_class].ATTRIBUTE_NAMES);\n      parsedAttributes.fromSVG = true;\n      callback(new fabric[_class](points, extend(parsedAttributes, options)));\n    };\n  };\n\n  fabric.Polyline.fromElement = fabric.Polyline.fromElementGenerator('Polyline');\n\n  /* _FROM_SVG_END_ */\n\n  /**\n   * Returns fabric.Polyline instance from an object representation\n   * @static\n   * @memberOf fabric.Polyline\n   * @param {Object} object Object to create an instance from\n   * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n   */\n  fabric.Polyline.fromObject = function(object, callback) {\n    return fabric.Object._fromObject('Polyline', object, callback, 'points');\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = {}),\n      projectStrokeOnPoints = fabric.util.projectStrokeOnPoints;\n\n  if (fabric.Polygon) {\n    fabric.warn('fabric.Polygon is already defined');\n    return;\n  }\n\n  /**\n   * Polygon class\n   * @class fabric.Polygon\n   * @extends fabric.Polyline\n   * @see {@link fabric.Polygon#initialize} for constructor definition\n   */\n  fabric.Polygon = fabric.util.createClass(fabric.Polyline, /** @lends fabric.Polygon.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'polygon',\n\n    /**\n     * @private\n     */\n    _projectStrokeOnPoints: function () {\n      return projectStrokeOnPoints(this.points, this);\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _render: function(ctx) {\n      if (!this.commonRender(ctx)) {\n        return;\n      }\n      ctx.closePath();\n      this._renderPaintInOrder(ctx);\n    },\n\n  });\n\n  /* _FROM_SVG_START_ */\n  /**\n   * List of attribute names to account for when parsing SVG element (used by `fabric.Polygon.fromElement`)\n   * @static\n   * @memberOf fabric.Polygon\n   * @see: http://www.w3.org/TR/SVG/shapes.html#PolygonElement\n   */\n  fabric.Polygon.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat();\n\n  /**\n   * Returns {@link fabric.Polygon} instance from an SVG element\n   * @static\n   * @memberOf fabric.Polygon\n   * @param {SVGElement} element Element to parse\n   * @param {Function} callback callback function invoked after parsing\n   * @param {Object} [options] Options object\n   */\n  fabric.Polygon.fromElement = fabric.Polyline.fromElementGenerator('Polygon');\n  /* _FROM_SVG_END_ */\n\n  /**\n   * Returns fabric.Polygon instance from an object representation\n   * @static\n   * @memberOf fabric.Polygon\n   * @param {Object} object Object to create an instance from\n   * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n   * @return {void}\n   */\n  fabric.Polygon.fromObject = function(object, callback) {\n    fabric.Object._fromObject('Polygon', object, callback, 'points');\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      min = fabric.util.array.min,\n      max = fabric.util.array.max,\n      extend = fabric.util.object.extend,\n      clone = fabric.util.object.clone,\n      toFixed = fabric.util.toFixed;\n\n  if (fabric.Path) {\n    fabric.warn('fabric.Path is already defined');\n    return;\n  }\n\n  /**\n   * Path class\n   * @class fabric.Path\n   * @extends fabric.Object\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#path_and_pathgroup}\n   * @see {@link fabric.Path#initialize} for constructor definition\n   */\n  fabric.Path = fabric.util.createClass(fabric.Object, /** @lends fabric.Path.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'path',\n\n    /**\n     * Array of path points\n     * @type Array\n     * @default\n     */\n    path: null,\n\n    cacheProperties: fabric.Object.prototype.cacheProperties.concat('path', 'fillRule'),\n\n    stateProperties: fabric.Object.prototype.stateProperties.concat('path'),\n\n    /**\n     * Constructor\n     * @param {Array|String} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n     * @param {Object} [options] Options object\n     * @return {fabric.Path} thisArg\n     */\n    initialize: function (path, options) {\n      options = clone(options || {});\n      delete options.path;\n      this.callSuper('initialize', options);\n      this._setPath(path || [], options);\n    },\n\n    /**\n    * @private\n    * @param {Array|String} path Path data (sequence of coordinates and corresponding \"command\" tokens)\n    * @param {Object} [options] Options object\n    */\n    _setPath: function (path, options) {\n      this.path = fabric.util.makePathSimpler(\n        Array.isArray(path) ? path : fabric.util.parsePath(path)\n      );\n\n      fabric.Polyline.prototype._setPositionDimensions.call(this, options || {});\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx context to render path on\n     */\n    _renderPathCommands: function(ctx) {\n      var current, // current instruction\n          subpathStartX = 0,\n          subpathStartY = 0,\n          x = 0, // current x\n          y = 0, // current y\n          controlX = 0, // current control point x\n          controlY = 0, // current control point y\n          l = -this.pathOffset.x,\n          t = -this.pathOffset.y;\n\n      ctx.beginPath();\n\n      for (var i = 0, len = this.path.length; i < len; ++i) {\n\n        current = this.path[i];\n\n        switch (current[0]) { // first letter\n\n          case 'L': // lineto, absolute\n            x = current[1];\n            y = current[2];\n            ctx.lineTo(x + l, y + t);\n            break;\n\n          case 'M': // moveTo, absolute\n            x = current[1];\n            y = current[2];\n            subpathStartX = x;\n            subpathStartY = y;\n            ctx.moveTo(x + l, y + t);\n            break;\n\n          case 'C': // bezierCurveTo, absolute\n            x = current[5];\n            y = current[6];\n            controlX = current[3];\n            controlY = current[4];\n            ctx.bezierCurveTo(\n              current[1] + l,\n              current[2] + t,\n              controlX + l,\n              controlY + t,\n              x + l,\n              y + t\n            );\n            break;\n\n          case 'Q': // quadraticCurveTo, absolute\n            ctx.quadraticCurveTo(\n              current[1] + l,\n              current[2] + t,\n              current[3] + l,\n              current[4] + t\n            );\n            x = current[3];\n            y = current[4];\n            controlX = current[1];\n            controlY = current[2];\n            break;\n\n          case 'z':\n          case 'Z':\n            x = subpathStartX;\n            y = subpathStartY;\n            ctx.closePath();\n            break;\n        }\n      }\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx context to render path on\n     */\n    _render: function(ctx) {\n      this._renderPathCommands(ctx);\n      this._renderPaintInOrder(ctx);\n    },\n\n    /**\n     * Returns string representation of an instance\n     * @return {String} string representation of an instance\n     */\n    toString: function() {\n      return '#<fabric.Path (' + this.complexity() +\n        '): { \"top\": ' + this.top + ', \"left\": ' + this.left + ' }>';\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      return extend(this.callSuper('toObject', propertiesToInclude), {\n        path: this.path.map(function(item) { return item.slice(); }),\n      });\n    },\n\n    /**\n     * Returns dataless object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toDatalessObject: function(propertiesToInclude) {\n      var o = this.toObject(['sourcePath'].concat(propertiesToInclude));\n      if (o.sourcePath) {\n        delete o.path;\n      }\n      return o;\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns svg representation of an instance\n     * @return {Array} an array of strings with the specific svg representation\n     * of the instance\n     */\n    _toSVG: function() {\n      var path = fabric.util.joinPath(this.path);\n      return [\n        '<path ', 'COMMON_PARTS',\n        'd=\"', path,\n        '\" stroke-linecap=\"round\" ',\n        '/>\\n'\n      ];\n    },\n\n    _getOffsetTransform: function() {\n      var digits = fabric.Object.NUM_FRACTION_DIGITS;\n      return ' translate(' + toFixed(-this.pathOffset.x, digits) + ', ' +\n          toFixed(-this.pathOffset.y, digits) + ')';\n    },\n\n    /**\n     * Returns svg clipPath representation of an instance\n     * @param {Function} [reviver] Method for further parsing of svg representation.\n     * @return {String} svg representation of an instance\n     */\n    toClipPathSVG: function(reviver) {\n      var additionalTransform = this._getOffsetTransform();\n      return '\\t' + this._createBaseClipPathSVGMarkup(\n        this._toSVG(), { reviver: reviver, additionalTransform: additionalTransform }\n      );\n    },\n\n    /**\n     * Returns svg representation of an instance\n     * @param {Function} [reviver] Method for further parsing of svg representation.\n     * @return {String} svg representation of an instance\n     */\n    toSVG: function(reviver) {\n      var additionalTransform = this._getOffsetTransform();\n      return this._createBaseSVGMarkup(this._toSVG(), { reviver: reviver, additionalTransform: additionalTransform  });\n    },\n    /* _TO_SVG_END_ */\n\n    /**\n     * Returns number representation of an instance complexity\n     * @return {Number} complexity of this instance\n     */\n    complexity: function() {\n      return this.path.length;\n    },\n\n    /**\n     * @private\n     */\n    _calcDimensions: function() {\n\n      var aX = [],\n          aY = [],\n          current, // current instruction\n          subpathStartX = 0,\n          subpathStartY = 0,\n          x = 0, // current x\n          y = 0, // current y\n          bounds;\n\n      for (var i = 0, len = this.path.length; i < len; ++i) {\n\n        current = this.path[i];\n\n        switch (current[0]) { // first letter\n\n          case 'L': // lineto, absolute\n            x = current[1];\n            y = current[2];\n            bounds = [];\n            break;\n\n          case 'M': // moveTo, absolute\n            x = current[1];\n            y = current[2];\n            subpathStartX = x;\n            subpathStartY = y;\n            bounds = [];\n            break;\n\n          case 'C': // bezierCurveTo, absolute\n            bounds = fabric.util.getBoundsOfCurve(x, y,\n              current[1],\n              current[2],\n              current[3],\n              current[4],\n              current[5],\n              current[6]\n            );\n            x = current[5];\n            y = current[6];\n            break;\n\n          case 'Q': // quadraticCurveTo, absolute\n            bounds = fabric.util.getBoundsOfCurve(x, y,\n              current[1],\n              current[2],\n              current[1],\n              current[2],\n              current[3],\n              current[4]\n            );\n            x = current[3];\n            y = current[4];\n            break;\n\n          case 'z':\n          case 'Z':\n            x = subpathStartX;\n            y = subpathStartY;\n            break;\n        }\n        bounds.forEach(function (point) {\n          aX.push(point.x);\n          aY.push(point.y);\n        });\n        aX.push(x);\n        aY.push(y);\n      }\n\n      var minX = min(aX) || 0,\n          minY = min(aY) || 0,\n          maxX = max(aX) || 0,\n          maxY = max(aY) || 0,\n          deltaX = maxX - minX,\n          deltaY = maxY - minY;\n\n      return {\n        left: minX,\n        top: minY,\n        width: deltaX,\n        height: deltaY\n      };\n    }\n  });\n\n  /**\n   * Creates an instance of fabric.Path from an object\n   * @static\n   * @memberOf fabric.Path\n   * @param {Object} object\n   * @param {Function} [callback] Callback to invoke when an fabric.Path instance is created\n   */\n  fabric.Path.fromObject = function(object, callback) {\n    if (typeof object.sourcePath === 'string') {\n      var pathUrl = object.sourcePath;\n      fabric.loadSVGFromURL(pathUrl, function (elements) {\n        var path = elements[0];\n        path.setOptions(object);\n        if (object.clipPath) {\n          fabric.util.enlivenObjects([object.clipPath], function(elivenedObjects) {\n            path.clipPath = elivenedObjects[0];\n            callback && callback(path);\n          });\n        }\n        else {\n          callback && callback(path);\n        }\n      });\n    }\n    else {\n      fabric.Object._fromObject('Path', object, callback, 'path');\n    }\n  };\n\n  /* _FROM_SVG_START_ */\n  /**\n   * List of attribute names to account for when parsing SVG element (used by `fabric.Path.fromElement`)\n   * @static\n   * @memberOf fabric.Path\n   * @see http://www.w3.org/TR/SVG/paths.html#PathElement\n   */\n  fabric.Path.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(['d']);\n\n  /**\n   * Creates an instance of fabric.Path from an SVG <path> element\n   * @static\n   * @memberOf fabric.Path\n   * @param {SVGElement} element to parse\n   * @param {Function} callback Callback to invoke when an fabric.Path instance is created\n   * @param {Object} [options] Options object\n   * @param {Function} [callback] Options callback invoked after parsing is finished\n   */\n  fabric.Path.fromElement = function(element, callback, options) {\n    var parsedAttributes = fabric.parseAttributes(element, fabric.Path.ATTRIBUTE_NAMES);\n    parsedAttributes.fromSVG = true;\n    callback(new fabric.Path(parsedAttributes.d, extend(parsedAttributes, options)));\n  };\n  /* _FROM_SVG_END_ */\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      min = fabric.util.array.min,\n      max = fabric.util.array.max;\n\n  if (fabric.Group) {\n    return;\n  }\n\n  /**\n   * Group class\n   * @class fabric.Group\n   * @extends fabric.Object\n   * @mixes fabric.Collection\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#groups}\n   * @see {@link fabric.Group#initialize} for constructor definition\n   */\n  fabric.Group = fabric.util.createClass(fabric.Object, fabric.Collection, /** @lends fabric.Group.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'group',\n\n    /**\n     * Width of stroke\n     * @type Number\n     * @default\n     */\n    strokeWidth: 0,\n\n    /**\n     * Indicates if click, mouseover, mouseout events & hoverCursor should also check for subtargets\n     * @type Boolean\n     * @default\n     */\n    subTargetCheck: false,\n\n    /**\n     * Groups are container, do not render anything on theyr own, ence no cache properties\n     * @type Array\n     * @default\n     */\n    cacheProperties: [],\n\n    /**\n     * setOnGroup is a method used for TextBox that is no more used since 2.0.0 The behavior is still\n     * available setting this boolean to true.\n     * @type Boolean\n     * @since 2.0.0\n     * @default\n     */\n    useSetOnGroup: false,\n\n    /**\n     * Constructor\n     * @param {Object} objects Group objects\n     * @param {Object} [options] Options object\n     * @param {Boolean} [isAlreadyGrouped] if true, objects have been grouped already.\n     * @return {Object} thisArg\n     */\n    initialize: function(objects, options, isAlreadyGrouped) {\n      options = options || {};\n      this._objects = [];\n      // if objects enclosed in a group have been grouped already,\n      // we cannot change properties of objects.\n      // Thus we need to set options to group without objects,\n      isAlreadyGrouped && this.callSuper('initialize', options);\n      this._objects = objects || [];\n      for (var i = this._objects.length; i--; ) {\n        this._objects[i].group = this;\n      }\n\n      if (!isAlreadyGrouped) {\n        var center = options && options.centerPoint;\n        // we want to set origins before calculating the bounding box.\n        // so that the topleft can be set with that in mind.\n        // if specific top and left are passed, are overwritten later\n        // with the callSuper('initialize', options)\n        if (options.originX !== undefined) {\n          this.originX = options.originX;\n        }\n        if (options.originY !== undefined) {\n          this.originY = options.originY;\n        }\n        // if coming from svg i do not want to calc bounds.\n        // i assume width and height are passed along options\n        center || this._calcBounds();\n        this._updateObjectsCoords(center);\n        delete options.centerPoint;\n        this.callSuper('initialize', options);\n      }\n      else {\n        this._updateObjectsACoords();\n      }\n\n      this.setCoords();\n    },\n\n    /**\n     * @private\n     */\n    _updateObjectsACoords: function() {\n      var skipControls = true;\n      for (var i = this._objects.length; i--; ){\n        this._objects[i].setCoords(skipControls);\n      }\n    },\n\n    /**\n     * @private\n     * @param {Boolean} [skipCoordsChange] if true, coordinates of objects enclosed in a group do not change\n     */\n    _updateObjectsCoords: function(center) {\n      var center = center || this.getCenterPoint();\n      for (var i = this._objects.length; i--; ){\n        this._updateObjectCoords(this._objects[i], center);\n      }\n    },\n\n    /**\n     * @private\n     * @param {Object} object\n     * @param {fabric.Point} center, current center of group.\n     */\n    _updateObjectCoords: function(object, center) {\n      var objectLeft = object.left,\n          objectTop = object.top,\n          skipControls = true;\n\n      object.set({\n        left: objectLeft - center.x,\n        top: objectTop - center.y\n      });\n      object.group = this;\n      object.setCoords(skipControls);\n    },\n\n    /**\n     * Returns string represenation of a group\n     * @return {String}\n     */\n    toString: function() {\n      return '#<fabric.Group: (' + this.complexity() + ')>';\n    },\n\n    /**\n     * Adds an object to a group; Then recalculates group's dimension, position.\n     * @param {Object} object\n     * @return {fabric.Group} thisArg\n     * @chainable\n     */\n    addWithUpdate: function(object) {\n      var nested = !!this.group;\n      this._restoreObjectsState();\n      fabric.util.resetObjectTransform(this);\n      if (object) {\n        if (nested) {\n          // if this group is inside another group, we need to pre transform the object\n          fabric.util.removeTransformFromObject(object, this.group.calcTransformMatrix());\n        }\n        this._objects.push(object);\n        object.group = this;\n        object._set('canvas', this.canvas);\n      }\n      this._calcBounds();\n      this._updateObjectsCoords();\n      this.dirty = true;\n      if (nested) {\n        this.group.addWithUpdate();\n      }\n      else {\n        this.setCoords();\n      }\n      return this;\n    },\n\n    /**\n     * Removes an object from a group; Then recalculates group's dimension, position.\n     * @param {Object} object\n     * @return {fabric.Group} thisArg\n     * @chainable\n     */\n    removeWithUpdate: function(object) {\n      this._restoreObjectsState();\n      fabric.util.resetObjectTransform(this);\n\n      this.remove(object);\n      this._calcBounds();\n      this._updateObjectsCoords();\n      this.setCoords();\n      this.dirty = true;\n      return this;\n    },\n\n    /**\n     * @private\n     */\n    _onObjectAdded: function(object) {\n      this.dirty = true;\n      object.group = this;\n      object._set('canvas', this.canvas);\n    },\n\n    /**\n     * @private\n     */\n    _onObjectRemoved: function(object) {\n      this.dirty = true;\n      delete object.group;\n    },\n\n    /**\n     * @private\n     */\n    _set: function(key, value) {\n      var i = this._objects.length;\n      if (this.useSetOnGroup) {\n        while (i--) {\n          this._objects[i].setOnGroup(key, value);\n        }\n      }\n      if (key === 'canvas') {\n        while (i--) {\n          this._objects[i]._set(key, value);\n        }\n      }\n      fabric.Object.prototype._set.call(this, key, value);\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      var _includeDefaultValues = this.includeDefaultValues;\n      var objsToObject = this._objects\n        .filter(function (obj) {\n          return !obj.excludeFromExport;\n        })\n        .map(function (obj) {\n          var originalDefaults = obj.includeDefaultValues;\n          obj.includeDefaultValues = _includeDefaultValues;\n          var _obj = obj.toObject(propertiesToInclude);\n          obj.includeDefaultValues = originalDefaults;\n          return _obj;\n        });\n      var obj = fabric.Object.prototype.toObject.call(this, propertiesToInclude);\n      obj.objects = objsToObject;\n      return obj;\n    },\n\n    /**\n     * Returns object representation of an instance, in dataless mode.\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toDatalessObject: function(propertiesToInclude) {\n      var objsToObject, sourcePath = this.sourcePath;\n      if (sourcePath) {\n        objsToObject = sourcePath;\n      }\n      else {\n        var _includeDefaultValues = this.includeDefaultValues;\n        objsToObject = this._objects.map(function(obj) {\n          var originalDefaults = obj.includeDefaultValues;\n          obj.includeDefaultValues = _includeDefaultValues;\n          var _obj = obj.toDatalessObject(propertiesToInclude);\n          obj.includeDefaultValues = originalDefaults;\n          return _obj;\n        });\n      }\n      var obj = fabric.Object.prototype.toDatalessObject.call(this, propertiesToInclude);\n      obj.objects = objsToObject;\n      return obj;\n    },\n\n    /**\n     * Renders instance on a given context\n     * @param {CanvasRenderingContext2D} ctx context to render instance on\n     */\n    render: function(ctx) {\n      this._transformDone = true;\n      this.callSuper('render', ctx);\n      this._transformDone = false;\n    },\n\n    /**\n     * Decide if the object should cache or not. Create its own cache level\n     * needsItsOwnCache should be used when the object drawing method requires\n     * a cache step. None of the fabric classes requires it.\n     * Generally you do not cache objects in groups because the group is already cached.\n     * @return {Boolean}\n     */\n    shouldCache: function() {\n      var ownCache = fabric.Object.prototype.shouldCache.call(this);\n      if (ownCache) {\n        for (var i = 0, len = this._objects.length; i < len; i++) {\n          if (this._objects[i].willDrawShadow()) {\n            this.ownCaching = false;\n            return false;\n          }\n        }\n      }\n      return ownCache;\n    },\n\n    /**\n     * Check if this object or a child object will cast a shadow\n     * @return {Boolean}\n     */\n    willDrawShadow: function() {\n      if (fabric.Object.prototype.willDrawShadow.call(this)) {\n        return true;\n      }\n      for (var i = 0, len = this._objects.length; i < len; i++) {\n        if (this._objects[i].willDrawShadow()) {\n          return true;\n        }\n      }\n      return false;\n    },\n\n    /**\n     * Check if this group or its parent group are caching, recursively up\n     * @return {Boolean}\n     */\n    isOnACache: function() {\n      return this.ownCaching || (this.group && this.group.isOnACache());\n    },\n\n    /**\n     * Execute the drawing operation for an object on a specified context\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    drawObject: function(ctx) {\n      for (var i = 0, len = this._objects.length; i < len; i++) {\n        this._objects[i].render(ctx);\n      }\n      this._drawClipPath(ctx, this.clipPath);\n    },\n\n    /**\n     * Check if cache is dirty\n     */\n    isCacheDirty: function(skipCanvas) {\n      if (this.callSuper('isCacheDirty', skipCanvas)) {\n        return true;\n      }\n      if (!this.statefullCache) {\n        return false;\n      }\n      for (var i = 0, len = this._objects.length; i < len; i++) {\n        if (this._objects[i].isCacheDirty(true)) {\n          if (this._cacheCanvas) {\n            // if this group has not a cache canvas there is nothing to clean\n            var x = this.cacheWidth / this.zoomX, y = this.cacheHeight / this.zoomY;\n            this._cacheContext.clearRect(-x / 2, -y / 2, x, y);\n          }\n          return true;\n        }\n      }\n      return false;\n    },\n\n    /**\n     * Restores original state of each of group objects (original state is that which was before group was created).\n     * if the nested boolean is true, the original state will be restored just for the\n     * first group and not for all the group chain\n     * @private\n     * @param {Boolean} nested tell the function to restore object state up to the parent group and not more\n     * @return {fabric.Group} thisArg\n     * @chainable\n     */\n    _restoreObjectsState: function() {\n      var groupMatrix = this.calcOwnMatrix();\n      this._objects.forEach(function(object) {\n        // instead of using _this = this;\n        fabric.util.addTransformToObject(object, groupMatrix);\n        delete object.group;\n        object.setCoords();\n      });\n      return this;\n    },\n\n    /**\n     * Destroys a group (restoring state of its objects)\n     * @return {fabric.Group} thisArg\n     * @chainable\n     */\n    destroy: function() {\n      // when group is destroyed objects needs to get a repaint to be eventually\n      // displayed on canvas.\n      this._objects.forEach(function(object) {\n        object.set('dirty', true);\n      });\n      return this._restoreObjectsState();\n    },\n\n    dispose: function () {\n      this.callSuper('dispose');\n      this.forEachObject(function (object) {\n        object.dispose && object.dispose();\n      });\n      this._objects = [];\n    },\n\n    /**\n     * make a group an active selection, remove the group from canvas\n     * the group has to be on canvas for this to work.\n     * @return {fabric.ActiveSelection} thisArg\n     * @chainable\n     */\n    toActiveSelection: function() {\n      if (!this.canvas) {\n        return;\n      }\n      var objects = this._objects, canvas = this.canvas;\n      this._objects = [];\n      var options = this.toObject();\n      delete options.objects;\n      var activeSelection = new fabric.ActiveSelection([]);\n      activeSelection.set(options);\n      activeSelection.type = 'activeSelection';\n      canvas.remove(this);\n      objects.forEach(function(object) {\n        object.group = activeSelection;\n        object.dirty = true;\n        canvas.add(object);\n      });\n      activeSelection.canvas = canvas;\n      activeSelection._objects = objects;\n      canvas._activeObject = activeSelection;\n      activeSelection.setCoords();\n      return activeSelection;\n    },\n\n    /**\n     * Destroys a group (restoring state of its objects)\n     * @return {fabric.Group} thisArg\n     * @chainable\n     */\n    ungroupOnCanvas: function() {\n      return this._restoreObjectsState();\n    },\n\n    /**\n     * Sets coordinates of all objects inside group\n     * @return {fabric.Group} thisArg\n     * @chainable\n     */\n    setObjectsCoords: function() {\n      var skipControls = true;\n      this.forEachObject(function(object) {\n        object.setCoords(skipControls);\n      });\n      return this;\n    },\n\n    /**\n     * @private\n     */\n    _calcBounds: function(onlyWidthHeight) {\n      var aX = [],\n          aY = [],\n          o, prop, coords,\n          props = ['tr', 'br', 'bl', 'tl'],\n          i = 0, iLen = this._objects.length,\n          j, jLen = props.length;\n\n      for ( ; i < iLen; ++i) {\n        o = this._objects[i];\n        coords = o.calcACoords();\n        for (j = 0; j < jLen; j++) {\n          prop = props[j];\n          aX.push(coords[prop].x);\n          aY.push(coords[prop].y);\n        }\n        o.aCoords = coords;\n      }\n\n      this._getBounds(aX, aY, onlyWidthHeight);\n    },\n\n    /**\n     * @private\n     */\n    _getBounds: function(aX, aY, onlyWidthHeight) {\n      var minXY = new fabric.Point(min(aX), min(aY)),\n          maxXY = new fabric.Point(max(aX), max(aY)),\n          top = minXY.y || 0, left = minXY.x || 0,\n          width = (maxXY.x - minXY.x) || 0,\n          height = (maxXY.y - minXY.y) || 0;\n      this.width = width;\n      this.height = height;\n      if (!onlyWidthHeight) {\n        // the bounding box always finds the topleft most corner.\n        // whatever is the group origin, we set up here the left/top position.\n        this.setPositionByOrigin({ x: left, y: top }, 'left', 'top');\n      }\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns svg representation of an instance\n     * @param {Function} [reviver] Method for further parsing of svg representation.\n     * @return {String} svg representation of an instance\n     */\n    _toSVG: function(reviver) {\n      var svgString = ['<g ', 'COMMON_PARTS', ' >\\n'];\n\n      for (var i = 0, len = this._objects.length; i < len; i++) {\n        svgString.push('\\t\\t', this._objects[i].toSVG(reviver));\n      }\n      svgString.push('</g>\\n');\n      return svgString;\n    },\n\n    /**\n     * Returns styles-string for svg-export, specific version for group\n     * @return {String}\n     */\n    getSvgStyles: function() {\n      var opacity = typeof this.opacity !== 'undefined' && this.opacity !== 1 ?\n            'opacity: ' + this.opacity + ';' : '',\n          visibility = this.visible ? '' : ' visibility: hidden;';\n      return [\n        opacity,\n        this.getSvgFilter(),\n        visibility\n      ].join('');\n    },\n\n    /**\n     * Returns svg clipPath representation of an instance\n     * @param {Function} [reviver] Method for further parsing of svg representation.\n     * @return {String} svg representation of an instance\n     */\n    toClipPathSVG: function(reviver) {\n      var svgString = [];\n\n      for (var i = 0, len = this._objects.length; i < len; i++) {\n        svgString.push('\\t', this._objects[i].toClipPathSVG(reviver));\n      }\n\n      return this._createBaseClipPathSVGMarkup(svgString, { reviver: reviver });\n    },\n    /* _TO_SVG_END_ */\n  });\n\n  /**\n   * Returns {@link fabric.Group} instance from an object representation\n   * @static\n   * @memberOf fabric.Group\n   * @param {Object} object Object to create a group from\n   * @param {Function} [callback] Callback to invoke when an group instance is created\n   */\n  fabric.Group.fromObject = function(object, callback) {\n    var objects = object.objects,\n        options = fabric.util.object.clone(object, true);\n    delete options.objects;\n    if (typeof objects === 'string') {\n      // it has to be an url or something went wrong.\n      fabric.loadSVGFromURL(objects, function (elements) {\n        var group = fabric.util.groupSVGElements(elements, object, objects);\n        var clipPath = options.clipPath;\n        delete options.clipPath;\n        group.set(options);\n        if (clipPath) {\n          fabric.util.enlivenObjects([clipPath], function(elivenedObjects) {\n            group.clipPath = elivenedObjects[0];\n            callback && callback(group);\n          });\n        }\n        else {\n          callback && callback(group);\n        }\n      });\n      return;\n    }\n    fabric.util.enlivenObjects(objects, function (enlivenedObjects) {\n      fabric.util.enlivenObjectEnlivables(object, options, function () {\n        callback && callback(new fabric.Group(enlivenedObjects, options, true));\n      });\n    });\n  };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { });\n\n  if (fabric.ActiveSelection) {\n    return;\n  }\n\n  /**\n   * Group class\n   * @class fabric.ActiveSelection\n   * @extends fabric.Group\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-3#groups}\n   * @see {@link fabric.ActiveSelection#initialize} for constructor definition\n   */\n  fabric.ActiveSelection = fabric.util.createClass(fabric.Group, /** @lends fabric.ActiveSelection.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'activeSelection',\n\n    /**\n     * Constructor\n     * @param {Object} objects ActiveSelection objects\n     * @param {Object} [options] Options object\n     * @return {Object} thisArg\n     */\n    initialize: function(objects, options) {\n      options = options || {};\n      this._objects = objects || [];\n      for (var i = this._objects.length; i--; ) {\n        this._objects[i].group = this;\n      }\n\n      if (options.originX) {\n        this.originX = options.originX;\n      }\n      if (options.originY) {\n        this.originY = options.originY;\n      }\n      this._calcBounds();\n      this._updateObjectsCoords();\n      fabric.Object.prototype.initialize.call(this, options);\n      this.setCoords();\n    },\n\n    /**\n     * Change te activeSelection to a normal group,\n     * High level function that automatically adds it to canvas as\n     * active object. no events fired.\n     * @since 2.0.0\n     * @return {fabric.Group}\n     */\n    toGroup: function() {\n      var objects = this._objects.concat();\n      this._objects = [];\n      var options = fabric.Object.prototype.toObject.call(this);\n      var newGroup = new fabric.Group([]);\n      delete options.type;\n      newGroup.set(options);\n      objects.forEach(function(object) {\n        object.canvas.remove(object);\n        object.group = newGroup;\n      });\n      newGroup._objects = objects;\n      if (!this.canvas) {\n        return newGroup;\n      }\n      var canvas = this.canvas;\n      canvas.add(newGroup);\n      canvas._activeObject = newGroup;\n      newGroup.setCoords();\n      return newGroup;\n    },\n\n    /**\n     * If returns true, deselection is cancelled.\n     * @since 2.0.0\n     * @return {Boolean} [cancel]\n     */\n    onDeselect: function() {\n      this.destroy();\n      return false;\n    },\n\n    /**\n     * Returns string representation of a group\n     * @return {String}\n     */\n    toString: function() {\n      return '#<fabric.ActiveSelection: (' + this.complexity() + ')>';\n    },\n\n    /**\n     * Decide if the object should cache or not. Create its own cache level\n     * objectCaching is a global flag, wins over everything\n     * needsItsOwnCache should be used when the object drawing method requires\n     * a cache step. None of the fabric classes requires it.\n     * Generally you do not cache objects in groups because the group outside is cached.\n     * @return {Boolean}\n     */\n    shouldCache: function() {\n      return false;\n    },\n\n    /**\n     * Check if this group or its parent group are caching, recursively up\n     * @return {Boolean}\n     */\n    isOnACache: function() {\n      return false;\n    },\n\n    /**\n     * Renders controls and borders for the object\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {Object} [styleOverride] properties to override the object style\n     * @param {Object} [childrenOverride] properties to override the children overrides\n     */\n    _renderControls: function(ctx, styleOverride, childrenOverride) {\n      ctx.save();\n      ctx.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1;\n      this.callSuper('_renderControls', ctx, styleOverride);\n      childrenOverride = childrenOverride || { };\n      if (typeof childrenOverride.hasControls === 'undefined') {\n        childrenOverride.hasControls = false;\n      }\n      childrenOverride.forActiveSelection = true;\n      for (var i = 0, len = this._objects.length; i < len; i++) {\n        this._objects[i]._renderControls(ctx, childrenOverride);\n      }\n      ctx.restore();\n    },\n  });\n\n  /**\n   * Returns {@link fabric.ActiveSelection} instance from an object representation\n   * @static\n   * @memberOf fabric.ActiveSelection\n   * @param {Object} object Object to create a group from\n   * @param {Function} [callback] Callback to invoke when an ActiveSelection instance is created\n   */\n  fabric.ActiveSelection.fromObject = function(object, callback) {\n    fabric.util.enlivenObjects(object.objects, function(enlivenedObjects) {\n      delete object.objects;\n      callback && callback(new fabric.ActiveSelection(enlivenedObjects, object, true));\n    });\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var extend = fabric.util.object.extend;\n\n  if (!global.fabric) {\n    global.fabric = { };\n  }\n\n  if (global.fabric.Image) {\n    fabric.warn('fabric.Image is already defined.');\n    return;\n  }\n\n  /**\n   * Image class\n   * @class fabric.Image\n   * @extends fabric.Object\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-1#images}\n   * @see {@link fabric.Image#initialize} for constructor definition\n   */\n  fabric.Image = fabric.util.createClass(fabric.Object, /** @lends fabric.Image.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'image',\n\n    /**\n     * Width of a stroke.\n     * For image quality a stroke multiple of 2 gives better results.\n     * @type Number\n     * @default\n     */\n    strokeWidth: 0,\n\n    /**\n     * When calling {@link fabric.Image.getSrc}, return value from element src with `element.getAttribute('src')`.\n     * This allows for relative urls as image src.\n     * @since 2.7.0\n     * @type Boolean\n     * @default\n     */\n    srcFromAttribute: false,\n\n    /**\n     * private\n     * contains last value of scaleX to detect\n     * if the Image got resized after the last Render\n     * @type Number\n     */\n    _lastScaleX: 1,\n\n    /**\n     * private\n     * contains last value of scaleY to detect\n     * if the Image got resized after the last Render\n     * @type Number\n     */\n    _lastScaleY: 1,\n\n    /**\n     * private\n     * contains last value of scaling applied by the apply filter chain\n     * @type Number\n     */\n    _filterScalingX: 1,\n\n    /**\n     * private\n     * contains last value of scaling applied by the apply filter chain\n     * @type Number\n     */\n    _filterScalingY: 1,\n\n    /**\n     * minimum scale factor under which any resizeFilter is triggered to resize the image\n     * 0 will disable the automatic resize. 1 will trigger automatically always.\n     * number bigger than 1 are not implemented yet.\n     * @type Number\n     */\n    minimumScaleTrigger: 0.5,\n\n    /**\n     * List of properties to consider when checking if\n     * state of an object is changed ({@link fabric.Object#hasStateChanged})\n     * as well as for history (undo/redo) purposes\n     * @type Array\n     */\n    stateProperties: fabric.Object.prototype.stateProperties.concat('cropX', 'cropY'),\n\n    /**\n     * List of properties to consider when checking if cache needs refresh\n     * Those properties are checked by statefullCache ON ( or lazy mode if we want ) or from single\n     * calls to Object.set(key, value). If the key is in this list, the object is marked as dirty\n     * and refreshed at the next render\n     * @type Array\n     */\n    cacheProperties: fabric.Object.prototype.cacheProperties.concat('cropX', 'cropY'),\n\n    /**\n     * key used to retrieve the texture representing this image\n     * @since 2.0.0\n     * @type String\n     * @default\n     */\n    cacheKey: '',\n\n    /**\n     * Image crop in pixels from original image size.\n     * @since 2.0.0\n     * @type Number\n     * @default\n     */\n    cropX: 0,\n\n    /**\n     * Image crop in pixels from original image size.\n     * @since 2.0.0\n     * @type Number\n     * @default\n     */\n    cropY: 0,\n\n    /**\n     * Indicates whether this canvas will use image smoothing when painting this image.\n     * Also influence if the cacheCanvas for this image uses imageSmoothing\n     * @since 4.0.0-beta.11\n     * @type Boolean\n     * @default\n     */\n    imageSmoothing: true,\n\n    /**\n     * Constructor\n     * Image can be initialized with any canvas drawable or a string.\n     * The string should be a url and will be loaded as an image.\n     * Canvas and Image element work out of the box, while videos require extra code to work.\n     * Please check video element events for seeking.\n     * @param {HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | String} element Image element\n     * @param {Object} [options] Options object\n     * @param {function} [callback] callback function to call after eventual filters applied.\n     * @return {fabric.Image} thisArg\n     */\n    initialize: function(element, options) {\n      options || (options = { });\n      this.filters = [];\n      this.cacheKey = 'texture' + fabric.Object.__uid++;\n      this.callSuper('initialize', options);\n      this._initElement(element, options);\n    },\n\n    /**\n     * Returns image element which this instance if based on\n     * @return {HTMLImageElement} Image element\n     */\n    getElement: function() {\n      return this._element || {};\n    },\n\n    /**\n     * Sets image element for this instance to a specified one.\n     * If filters defined they are applied to new image.\n     * You might need to call `canvas.renderAll` and `object.setCoords` after replacing, to render new image and update controls area.\n     * @param {HTMLImageElement} element\n     * @param {Object} [options] Options object\n     * @return {fabric.Image} thisArg\n     * @chainable\n     */\n    setElement: function(element, options) {\n      this.removeTexture(this.cacheKey);\n      this.removeTexture(this.cacheKey + '_filtered');\n      this._element = element;\n      this._originalElement = element;\n      this._initConfig(options);\n      if (this.filters.length !== 0) {\n        this.applyFilters();\n      }\n      // resizeFilters work on the already filtered copy.\n      // we need to apply resizeFilters AFTER normal filters.\n      // applyResizeFilters is run more often than normal filters\n      // and is triggered by user interactions rather than dev code\n      if (this.resizeFilter) {\n        this.applyResizeFilters();\n      }\n      return this;\n    },\n\n    /**\n     * Delete a single texture if in webgl mode\n     */\n    removeTexture: function(key) {\n      var backend = fabric.filterBackend;\n      if (backend && backend.evictCachesForKey) {\n        backend.evictCachesForKey(key);\n      }\n    },\n\n    /**\n     * Delete textures, reference to elements and eventually JSDOM cleanup\n     */\n    dispose: function () {\n      this.callSuper('dispose');\n      this.removeTexture(this.cacheKey);\n      this.removeTexture(this.cacheKey + '_filtered');\n      this._cacheContext = undefined;\n      ['_originalElement', '_element', '_filteredEl', '_cacheCanvas'].forEach((function(element) {\n        fabric.util.cleanUpJsdomNode(this[element]);\n        this[element] = undefined;\n      }).bind(this));\n    },\n\n    /**\n     * Get the crossOrigin value (of the corresponding image element)\n     */\n    getCrossOrigin: function() {\n      return this._originalElement && (this._originalElement.crossOrigin || null);\n    },\n\n    /**\n     * Returns original size of an image\n     * @return {Object} Object with \"width\" and \"height\" properties\n     */\n    getOriginalSize: function() {\n      var element = this.getElement();\n      return {\n        width: element.naturalWidth || element.width,\n        height: element.naturalHeight || element.height\n      };\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _stroke: function(ctx) {\n      if (!this.stroke || this.strokeWidth === 0) {\n        return;\n      }\n      var w = this.width / 2, h = this.height / 2;\n      ctx.beginPath();\n      ctx.moveTo(-w, -h);\n      ctx.lineTo(w, -h);\n      ctx.lineTo(w, h);\n      ctx.lineTo(-w, h);\n      ctx.lineTo(-w, -h);\n      ctx.closePath();\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} Object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      var filters = [];\n\n      this.filters.forEach(function(filterObj) {\n        if (filterObj) {\n          filters.push(filterObj.toObject());\n        }\n      });\n      var object = extend(\n        this.callSuper(\n          'toObject',\n          ['cropX', 'cropY'].concat(propertiesToInclude)\n        ), {\n          src: this.getSrc(),\n          crossOrigin: this.getCrossOrigin(),\n          filters: filters,\n        });\n      if (this.resizeFilter) {\n        object.resizeFilter = this.resizeFilter.toObject();\n      }\n      return object;\n    },\n\n    /**\n     * Returns true if an image has crop applied, inspecting values of cropX,cropY,width,height.\n     * @return {Boolean}\n     */\n    hasCrop: function() {\n      return this.cropX || this.cropY || this.width < this._element.width || this.height < this._element.height;\n    },\n\n    /* _TO_SVG_START_ */\n    /**\n     * Returns svg representation of an instance\n     * @return {Array} an array of strings with the specific svg representation\n     * of the instance\n     */\n    _toSVG: function() {\n      var svgString = [], imageMarkup = [], strokeSvg, element = this._element,\n          x = -this.width / 2, y = -this.height / 2, clipPath = '', imageRendering = '';\n      if (!element) {\n        return [];\n      }\n      if (this.hasCrop()) {\n        var clipPathId = fabric.Object.__uid++;\n        svgString.push(\n          '<clipPath id=\"imageCrop_' + clipPathId + '\">\\n',\n          '\\t<rect x=\"' + x + '\" y=\"' + y + '\" width=\"' + this.width + '\" height=\"' + this.height + '\" />\\n',\n          '</clipPath>\\n'\n        );\n        clipPath = ' clip-path=\"url(#imageCrop_' + clipPathId + ')\" ';\n      }\n      if (!this.imageSmoothing) {\n        imageRendering = '\" image-rendering=\"optimizeSpeed';\n      }\n      imageMarkup.push('\\t<image ', 'COMMON_PARTS', 'xlink:href=\"', this.getSvgSrc(true),\n        '\" x=\"', x - this.cropX, '\" y=\"', y - this.cropY,\n        // we're essentially moving origin of transformation from top/left corner to the center of the shape\n        // by wrapping it in container <g> element with actual transformation, then offsetting object to the top/left\n        // so that object's center aligns with container's left/top\n        '\" width=\"', element.width || element.naturalWidth,\n        '\" height=\"', element.height || element.height,\n        imageRendering,\n        '\"', clipPath,\n        '></image>\\n');\n\n      if (this.stroke || this.strokeDashArray) {\n        var origFill = this.fill;\n        this.fill = null;\n        strokeSvg = [\n          '\\t<rect ',\n          'x=\"', x, '\" y=\"', y,\n          '\" width=\"', this.width, '\" height=\"', this.height,\n          '\" style=\"', this.getSvgStyles(),\n          '\"/>\\n'\n        ];\n        this.fill = origFill;\n      }\n      if (this.paintFirst !== 'fill') {\n        svgString = svgString.concat(strokeSvg, imageMarkup);\n      }\n      else {\n        svgString = svgString.concat(imageMarkup, strokeSvg);\n      }\n      return svgString;\n    },\n    /* _TO_SVG_END_ */\n\n    /**\n     * Returns source of an image\n     * @param {Boolean} filtered indicates if the src is needed for svg\n     * @return {String} Source of an image\n     */\n    getSrc: function(filtered) {\n      var element = filtered ? this._element : this._originalElement;\n      if (element) {\n        if (element.toDataURL) {\n          return element.toDataURL();\n        }\n\n        if (this.srcFromAttribute) {\n          return element.getAttribute('src');\n        }\n        else {\n          return element.src;\n        }\n      }\n      else {\n        return this.src || '';\n      }\n    },\n\n    /**\n     * Sets source of an image\n     * @param {String} src Source string (URL)\n     * @param {Function} [callback] Callback is invoked when image has been loaded (and all filters have been applied)\n     * @param {Object} [options] Options object\n     * @param {String} [options.crossOrigin] crossOrigin value (one of \"\", \"anonymous\", \"use-credentials\")\n     * @see https://developer.mozilla.org/en-US/docs/HTML/CORS_settings_attributes\n     * @return {fabric.Image} thisArg\n     * @chainable\n     */\n    setSrc: function(src, callback, options) {\n      fabric.util.loadImage(src, function(img, isError) {\n        this.setElement(img, options);\n        this._setWidthHeight();\n        callback && callback(this, isError);\n      }, this, options && options.crossOrigin);\n      return this;\n    },\n\n    /**\n     * Returns string representation of an instance\n     * @return {String} String representation of an instance\n     */\n    toString: function() {\n      return '#<fabric.Image: { src: \"' + this.getSrc() + '\" }>';\n    },\n\n    applyResizeFilters: function() {\n      var filter = this.resizeFilter,\n          minimumScale = this.minimumScaleTrigger,\n          objectScale = this.getTotalObjectScaling(),\n          scaleX = objectScale.scaleX,\n          scaleY = objectScale.scaleY,\n          elementToFilter = this._filteredEl || this._originalElement;\n      if (this.group) {\n        this.set('dirty', true);\n      }\n      if (!filter || (scaleX > minimumScale && scaleY > minimumScale)) {\n        this._element = elementToFilter;\n        this._filterScalingX = 1;\n        this._filterScalingY = 1;\n        this._lastScaleX = scaleX;\n        this._lastScaleY = scaleY;\n        return;\n      }\n      if (!fabric.filterBackend) {\n        fabric.filterBackend = fabric.initFilterBackend();\n      }\n      var canvasEl = fabric.util.createCanvasElement(),\n          cacheKey = this._filteredEl ? (this.cacheKey + '_filtered') : this.cacheKey,\n          sourceWidth = elementToFilter.width, sourceHeight = elementToFilter.height;\n      canvasEl.width = sourceWidth;\n      canvasEl.height = sourceHeight;\n      this._element = canvasEl;\n      this._lastScaleX = filter.scaleX = scaleX;\n      this._lastScaleY = filter.scaleY = scaleY;\n      fabric.filterBackend.applyFilters(\n        [filter], elementToFilter, sourceWidth, sourceHeight, this._element, cacheKey);\n      this._filterScalingX = canvasEl.width / this._originalElement.width;\n      this._filterScalingY = canvasEl.height / this._originalElement.height;\n    },\n\n    /**\n     * Applies filters assigned to this image (from \"filters\" array) or from filter param\n     * @method applyFilters\n     * @param {Array} filters to be applied\n     * @param {Boolean} forResizing specify if the filter operation is a resize operation\n     * @return {thisArg} return the fabric.Image object\n     * @chainable\n     */\n    applyFilters: function(filters) {\n\n      filters = filters || this.filters || [];\n      filters = filters.filter(function(filter) { return filter && !filter.isNeutralState(); });\n      this.set('dirty', true);\n\n      // needs to clear out or WEBGL will not resize correctly\n      this.removeTexture(this.cacheKey + '_filtered');\n\n      if (filters.length === 0) {\n        this._element = this._originalElement;\n        this._filteredEl = null;\n        this._filterScalingX = 1;\n        this._filterScalingY = 1;\n        return this;\n      }\n\n      var imgElement = this._originalElement,\n          sourceWidth = imgElement.naturalWidth || imgElement.width,\n          sourceHeight = imgElement.naturalHeight || imgElement.height;\n\n      if (this._element === this._originalElement) {\n        // if the element is the same we need to create a new element\n        var canvasEl = fabric.util.createCanvasElement();\n        canvasEl.width = sourceWidth;\n        canvasEl.height = sourceHeight;\n        this._element = canvasEl;\n        this._filteredEl = canvasEl;\n      }\n      else {\n        // clear the existing element to get new filter data\n        // also dereference the eventual resized _element\n        this._element = this._filteredEl;\n        this._filteredEl.getContext('2d').clearRect(0, 0, sourceWidth, sourceHeight);\n        // we also need to resize again at next renderAll, so remove saved _lastScaleX/Y\n        this._lastScaleX = 1;\n        this._lastScaleY = 1;\n      }\n      if (!fabric.filterBackend) {\n        fabric.filterBackend = fabric.initFilterBackend();\n      }\n      fabric.filterBackend.applyFilters(\n        filters, this._originalElement, sourceWidth, sourceHeight, this._element, this.cacheKey);\n      if (this._originalElement.width !== this._element.width ||\n        this._originalElement.height !== this._element.height) {\n        this._filterScalingX = this._element.width / this._originalElement.width;\n        this._filterScalingY = this._element.height / this._originalElement.height;\n      }\n      return this;\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _render: function(ctx) {\n      fabric.util.setImageSmoothing(ctx, this.imageSmoothing);\n      if (this.isMoving !== true && this.resizeFilter && this._needsResize()) {\n        this.applyResizeFilters();\n      }\n      this._stroke(ctx);\n      this._renderPaintInOrder(ctx);\n    },\n\n    /**\n     * Paint the cached copy of the object on the target context.\n     * it will set the imageSmoothing for the draw operation\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    drawCacheOnCanvas: function(ctx) {\n      fabric.util.setImageSmoothing(ctx, this.imageSmoothing);\n      fabric.Object.prototype.drawCacheOnCanvas.call(this, ctx);\n    },\n\n    /**\n     * Decide if the object should cache or not. Create its own cache level\n     * needsItsOwnCache should be used when the object drawing method requires\n     * a cache step. None of the fabric classes requires it.\n     * Generally you do not cache objects in groups because the group outside is cached.\n     * This is the special image version where we would like to avoid caching where possible.\n     * Essentially images do not benefit from caching. They may require caching, and in that\n     * case we do it. Also caching an image usually ends in a loss of details.\n     * A full performance audit should be done.\n     * @return {Boolean}\n     */\n    shouldCache: function() {\n      return this.needsItsOwnCache();\n    },\n\n    _renderFill: function(ctx) {\n      var elementToDraw = this._element;\n      if (!elementToDraw) {\n        return;\n      }\n      var scaleX = this._filterScalingX, scaleY = this._filterScalingY,\n          w = this.width, h = this.height, min = Math.min, max = Math.max,\n          // crop values cannot be lesser than 0.\n          cropX = max(this.cropX, 0), cropY = max(this.cropY, 0),\n          elWidth = elementToDraw.naturalWidth || elementToDraw.width,\n          elHeight = elementToDraw.naturalHeight || elementToDraw.height,\n          sX = cropX * scaleX,\n          sY = cropY * scaleY,\n          // the width height cannot exceed element width/height, starting from the crop offset.\n          sW = min(w * scaleX, elWidth - sX),\n          sH = min(h * scaleY, elHeight - sY),\n          x = -w / 2, y = -h / 2,\n          maxDestW = min(w, elWidth / scaleX - cropX),\n          maxDestH = min(h, elHeight / scaleY - cropY);\n\n      elementToDraw && ctx.drawImage(elementToDraw, sX, sY, sW, sH, x, y, maxDestW, maxDestH);\n    },\n\n    /**\n     * needed to check if image needs resize\n     * @private\n     */\n    _needsResize: function() {\n      var scale = this.getTotalObjectScaling();\n      return (scale.scaleX !== this._lastScaleX || scale.scaleY !== this._lastScaleY);\n    },\n\n    /**\n     * @private\n     */\n    _resetWidthHeight: function() {\n      this.set(this.getOriginalSize());\n    },\n\n    /**\n     * The Image class's initialization method. This method is automatically\n     * called by the constructor.\n     * @private\n     * @param {HTMLImageElement|String} element The element representing the image\n     * @param {Object} [options] Options object\n     */\n    _initElement: function(element, options) {\n      this.setElement(fabric.util.getById(element), options);\n      fabric.util.addClass(this.getElement(), fabric.Image.CSS_CANVAS);\n    },\n\n    /**\n     * @private\n     * @param {Object} [options] Options object\n     */\n    _initConfig: function(options) {\n      options || (options = { });\n      this.setOptions(options);\n      this._setWidthHeight(options);\n    },\n\n    /**\n     * @private\n     * @param {Array} filters to be initialized\n     * @param {Function} callback Callback to invoke when all fabric.Image.filters instances are created\n     */\n    _initFilters: function(filters, callback) {\n      if (filters && filters.length) {\n        fabric.util.enlivenObjects(filters, function(enlivenedObjects) {\n          callback && callback(enlivenedObjects);\n        }, 'fabric.Image.filters');\n      }\n      else {\n        callback && callback();\n      }\n    },\n\n    /**\n     * @private\n     * Set the width and the height of the image object, using the element or the\n     * options.\n     * @param {Object} [options] Object with width/height properties\n     */\n    _setWidthHeight: function(options) {\n      options || (options = { });\n      var el = this.getElement();\n      this.width = options.width || el.naturalWidth || el.width || 0;\n      this.height = options.height || el.naturalHeight || el.height || 0;\n    },\n\n    /**\n     * Calculate offset for center and scale factor for the image in order to respect\n     * the preserveAspectRatio attribute\n     * @private\n     * @return {Object}\n     */\n    parsePreserveAspectRatioAttribute: function() {\n      var pAR = fabric.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio || ''),\n          rWidth = this._element.width, rHeight = this._element.height,\n          scaleX = 1, scaleY = 1, offsetLeft = 0, offsetTop = 0, cropX = 0, cropY = 0,\n          offset, pWidth = this.width, pHeight = this.height, parsedAttributes = { width: pWidth, height: pHeight };\n      if (pAR && (pAR.alignX !== 'none' || pAR.alignY !== 'none')) {\n        if (pAR.meetOrSlice === 'meet') {\n          scaleX = scaleY = fabric.util.findScaleToFit(this._element, parsedAttributes);\n          offset = (pWidth - rWidth * scaleX) / 2;\n          if (pAR.alignX === 'Min') {\n            offsetLeft = -offset;\n          }\n          if (pAR.alignX === 'Max') {\n            offsetLeft = offset;\n          }\n          offset = (pHeight - rHeight * scaleY) / 2;\n          if (pAR.alignY === 'Min') {\n            offsetTop = -offset;\n          }\n          if (pAR.alignY === 'Max') {\n            offsetTop = offset;\n          }\n        }\n        if (pAR.meetOrSlice === 'slice') {\n          scaleX = scaleY = fabric.util.findScaleToCover(this._element, parsedAttributes);\n          offset = rWidth - pWidth / scaleX;\n          if (pAR.alignX === 'Mid') {\n            cropX = offset / 2;\n          }\n          if (pAR.alignX === 'Max') {\n            cropX = offset;\n          }\n          offset = rHeight - pHeight / scaleY;\n          if (pAR.alignY === 'Mid') {\n            cropY = offset / 2;\n          }\n          if (pAR.alignY === 'Max') {\n            cropY = offset;\n          }\n          rWidth = pWidth / scaleX;\n          rHeight = pHeight / scaleY;\n        }\n      }\n      else {\n        scaleX = pWidth / rWidth;\n        scaleY = pHeight / rHeight;\n      }\n      return {\n        width: rWidth,\n        height: rHeight,\n        scaleX: scaleX,\n        scaleY: scaleY,\n        offsetLeft: offsetLeft,\n        offsetTop: offsetTop,\n        cropX: cropX,\n        cropY: cropY\n      };\n    }\n  });\n\n  /**\n   * Default CSS class name for canvas\n   * @static\n   * @type String\n   * @default\n   */\n  fabric.Image.CSS_CANVAS = 'canvas-img';\n\n  /**\n   * Alias for getSrc\n   * @static\n   */\n  fabric.Image.prototype.getSvgSrc = fabric.Image.prototype.getSrc;\n\n  /**\n   * Creates an instance of fabric.Image from its object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {Function} callback Callback to invoke when an image instance is created\n   */\n  fabric.Image.fromObject = function(_object, callback) {\n    var object = fabric.util.object.clone(_object);\n    fabric.util.loadImage(object.src, function(img, isError) {\n      if (isError) {\n        callback && callback(null, true);\n        return;\n      }\n      fabric.Image.prototype._initFilters.call(object, object.filters, function(filters) {\n        object.filters = filters || [];\n        fabric.Image.prototype._initFilters.call(object, [object.resizeFilter], function(resizeFilters) {\n          object.resizeFilter = resizeFilters[0];\n          fabric.util.enlivenObjectEnlivables(object, object, function () {\n            var image = new fabric.Image(img, object);\n            callback(image, false);\n          });\n        });\n      });\n    }, null, object.crossOrigin);\n  };\n\n  /**\n   * Creates an instance of fabric.Image from an URL string\n   * @static\n   * @param {String} url URL to create an image from\n   * @param {Function} [callback] Callback to invoke when image is created (newly created image is passed as a first argument). Second argument is a boolean indicating if an error occurred or not.\n   * @param {Object} [imgOptions] Options object\n   */\n  fabric.Image.fromURL = function(url, callback, imgOptions) {\n    fabric.util.loadImage(url, function(img, isError) {\n      callback && callback(new fabric.Image(img, imgOptions), isError);\n    }, null, imgOptions && imgOptions.crossOrigin);\n  };\n\n  /* _FROM_SVG_START_ */\n  /**\n   * List of attribute names to account for when parsing SVG element (used by {@link fabric.Image.fromElement})\n   * @static\n   * @see {@link http://www.w3.org/TR/SVG/struct.html#ImageElement}\n   */\n  fabric.Image.ATTRIBUTE_NAMES =\n    fabric.SHARED_ATTRIBUTES.concat(\n      'x y width height preserveAspectRatio xlink:href crossOrigin image-rendering'.split(' ')\n    );\n\n  /**\n   * Returns {@link fabric.Image} instance from an SVG element\n   * @static\n   * @param {SVGElement} element Element to parse\n   * @param {Object} [options] Options object\n   * @param {Function} callback Callback to execute when fabric.Image object is created\n   * @return {fabric.Image} Instance of fabric.Image\n   */\n  fabric.Image.fromElement = function(element, callback, options) {\n    var parsedAttributes = fabric.parseAttributes(element, fabric.Image.ATTRIBUTE_NAMES);\n    fabric.Image.fromURL(parsedAttributes['xlink:href'], callback,\n      extend((options ? fabric.util.object.clone(options) : { }), parsedAttributes));\n  };\n  /* _FROM_SVG_END_ */\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\nfabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prototype */ {\n\n  /**\n   * @private\n   * @return {Number} angle value\n   */\n  _getAngleValueForStraighten: function() {\n    var angle = this.angle % 360;\n    if (angle > 0) {\n      return Math.round((angle - 1) / 90) * 90;\n    }\n    return Math.round(angle / 90) * 90;\n  },\n\n  /**\n   * Straightens an object (rotating it from current angle to one of 0, 90, 180, 270, etc. depending on which is closer)\n   * @return {fabric.Object} thisArg\n   * @chainable\n   */\n  straighten: function() {\n    return this.rotate(this._getAngleValueForStraighten());\n  },\n\n  /**\n   * Same as {@link fabric.Object.prototype.straighten} but with animation\n   * @param {Object} callbacks Object with callback functions\n   * @param {Function} [callbacks.onComplete] Invoked on completion\n   * @param {Function} [callbacks.onChange] Invoked on every step of animation\n   * @return {fabric.Object} thisArg\n   */\n  fxStraighten: function(callbacks) {\n    callbacks = callbacks || { };\n\n    var empty = function() { },\n        onComplete = callbacks.onComplete || empty,\n        onChange = callbacks.onChange || empty,\n        _this = this;\n\n    return fabric.util.animate({\n      target: this,\n      startValue: this.get('angle'),\n      endValue: this._getAngleValueForStraighten(),\n      duration: this.FX_DURATION,\n      onChange: function(value) {\n        _this.rotate(value);\n        onChange();\n      },\n      onComplete: function() {\n        _this.setCoords();\n        onComplete();\n      },\n    });\n  }\n});\n\nfabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.StaticCanvas.prototype */ {\n\n  /**\n   * Straightens object, then rerenders canvas\n   * @param {fabric.Object} object Object to straighten\n   * @return {fabric.Canvas} thisArg\n   * @chainable\n   */\n  straightenObject: function (object) {\n    object.straighten();\n    this.requestRenderAll();\n    return this;\n  },\n\n  /**\n   * Same as {@link fabric.Canvas.prototype.straightenObject}, but animated\n   * @param {fabric.Object} object Object to straighten\n   * @return {fabric.Canvas} thisArg\n   */\n  fxStraightenObject: function (object) {\n    return object.fxStraighten({\n      onChange: this.requestRenderAllBound\n    });\n  }\n});\n\n\n(function() {\n\n  'use strict';\n\n  /**\n   * Tests if webgl supports certain precision\n   * @param {WebGL} Canvas WebGL context to test on\n   * @param {String} Precision to test can be any of following: 'lowp', 'mediump', 'highp'\n   * @returns {Boolean} Whether the user's browser WebGL supports given precision.\n   */\n  function testPrecision(gl, precision){\n    var fragmentSource = 'precision ' + precision + ' float;\\nvoid main(){}';\n    var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n    gl.shaderSource(fragmentShader, fragmentSource);\n    gl.compileShader(fragmentShader);\n    if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n      return false;\n    }\n    return true;\n  }\n\n  /**\n   * Indicate whether this filtering backend is supported by the user's browser.\n   * @param {Number} tileSize check if the tileSize is supported\n   * @returns {Boolean} Whether the user's browser supports WebGL.\n   */\n  fabric.isWebglSupported = function(tileSize) {\n    if (fabric.isLikelyNode) {\n      return false;\n    }\n    tileSize = tileSize || fabric.WebglFilterBackend.prototype.tileSize;\n    var canvas = document.createElement('canvas');\n    var gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n    var isSupported = false;\n    // eslint-disable-next-line\n    if (gl) {\n      fabric.maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n      isSupported = fabric.maxTextureSize >= tileSize;\n      var precisions = ['highp', 'mediump', 'lowp'];\n      for (var i = 0; i < 3; i++){\n        if (testPrecision(gl, precisions[i])){\n          fabric.webGlPrecision = precisions[i];\n          break;\n        };\n      }\n    }\n    this.isSupported = isSupported;\n    return isSupported;\n  };\n\n  fabric.WebglFilterBackend = WebglFilterBackend;\n\n  /**\n   * WebGL filter backend.\n   */\n  function WebglFilterBackend(options) {\n    if (options && options.tileSize) {\n      this.tileSize = options.tileSize;\n    }\n    this.setupGLContext(this.tileSize, this.tileSize);\n    this.captureGPUInfo();\n  };\n\n  WebglFilterBackend.prototype = /** @lends fabric.WebglFilterBackend.prototype */ {\n\n    tileSize: 2048,\n\n    /**\n     * Experimental. This object is a sort of repository of help layers used to avoid\n     * of recreating them during frequent filtering. If you are previewing a filter with\n     * a slider you probably do not want to create help layers every filter step.\n     * in this object there will be appended some canvases, created once, resized sometimes\n     * cleared never. Clearing is left to the developer.\n     **/\n    resources: {\n\n    },\n\n    /**\n     * Setup a WebGL context suitable for filtering, and bind any needed event handlers.\n     */\n    setupGLContext: function(width, height) {\n      this.dispose();\n      this.createWebGLCanvas(width, height);\n      // eslint-disable-next-line\n      this.aPosition = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]);\n      this.chooseFastestCopyGLTo2DMethod(width, height);\n    },\n\n    /**\n     * Pick a method to copy data from GL context to 2d canvas.  In some browsers using\n     * putImageData is faster than drawImage for that specific operation.\n     */\n    chooseFastestCopyGLTo2DMethod: function(width, height) {\n      var canMeasurePerf = typeof window.performance !== 'undefined', canUseImageData;\n      try {\n        new ImageData(1, 1);\n        canUseImageData = true;\n      }\n      catch (e) {\n        canUseImageData = false;\n      }\n      // eslint-disable-next-line no-undef\n      var canUseArrayBuffer = typeof ArrayBuffer !== 'undefined';\n      // eslint-disable-next-line no-undef\n      var canUseUint8Clamped = typeof Uint8ClampedArray !== 'undefined';\n\n      if (!(canMeasurePerf && canUseImageData && canUseArrayBuffer && canUseUint8Clamped)) {\n        return;\n      }\n\n      var targetCanvas = fabric.util.createCanvasElement();\n      // eslint-disable-next-line no-undef\n      var imageBuffer = new ArrayBuffer(width * height * 4);\n      if (fabric.forceGLPutImageData) {\n        this.imageBuffer = imageBuffer;\n        this.copyGLTo2D = copyGLTo2DPutImageData;\n        return;\n      }\n      var testContext = {\n        imageBuffer: imageBuffer,\n        destinationWidth: width,\n        destinationHeight: height,\n        targetCanvas: targetCanvas\n      };\n      var startTime, drawImageTime, putImageDataTime;\n      targetCanvas.width = width;\n      targetCanvas.height = height;\n\n      startTime = window.performance.now();\n      copyGLTo2DDrawImage.call(testContext, this.gl, testContext);\n      drawImageTime = window.performance.now() - startTime;\n\n      startTime = window.performance.now();\n      copyGLTo2DPutImageData.call(testContext, this.gl, testContext);\n      putImageDataTime = window.performance.now() - startTime;\n\n      if (drawImageTime > putImageDataTime) {\n        this.imageBuffer = imageBuffer;\n        this.copyGLTo2D = copyGLTo2DPutImageData;\n      }\n      else {\n        this.copyGLTo2D = copyGLTo2DDrawImage;\n      }\n    },\n\n    /**\n     * Create a canvas element and associated WebGL context and attaches them as\n     * class properties to the GLFilterBackend class.\n     */\n    createWebGLCanvas: function(width, height) {\n      var canvas = fabric.util.createCanvasElement();\n      canvas.width = width;\n      canvas.height = height;\n      var glOptions = {\n            alpha: true,\n            premultipliedAlpha: false,\n            depth: false,\n            stencil: false,\n            antialias: false\n          },\n          gl = canvas.getContext('webgl', glOptions);\n      if (!gl) {\n        gl = canvas.getContext('experimental-webgl', glOptions);\n      }\n      if (!gl) {\n        return;\n      }\n      gl.clearColor(0, 0, 0, 0);\n      // this canvas can fire webglcontextlost and webglcontextrestored\n      this.canvas = canvas;\n      this.gl = gl;\n    },\n\n    /**\n     * Attempts to apply the requested filters to the source provided, drawing the filtered output\n     * to the provided target canvas.\n     *\n     * @param {Array} filters The filters to apply.\n     * @param {HTMLImageElement|HTMLCanvasElement} source The source to be filtered.\n     * @param {Number} width The width of the source input.\n     * @param {Number} height The height of the source input.\n     * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n     * @param {String|undefined} cacheKey A key used to cache resources related to the source. If\n     * omitted, caching will be skipped.\n     */\n    applyFilters: function(filters, source, width, height, targetCanvas, cacheKey) {\n      var gl = this.gl;\n      var cachedTexture;\n      if (cacheKey) {\n        cachedTexture = this.getCachedTexture(cacheKey, source);\n      }\n      var pipelineState = {\n        originalWidth: source.width || source.originalWidth,\n        originalHeight: source.height || source.originalHeight,\n        sourceWidth: width,\n        sourceHeight: height,\n        destinationWidth: width,\n        destinationHeight: height,\n        context: gl,\n        sourceTexture: this.createTexture(gl, width, height, !cachedTexture && source),\n        targetTexture: this.createTexture(gl, width, height),\n        originalTexture: cachedTexture ||\n          this.createTexture(gl, width, height, !cachedTexture && source),\n        passes: filters.length,\n        webgl: true,\n        aPosition: this.aPosition,\n        programCache: this.programCache,\n        pass: 0,\n        filterBackend: this,\n        targetCanvas: targetCanvas\n      };\n      var tempFbo = gl.createFramebuffer();\n      gl.bindFramebuffer(gl.FRAMEBUFFER, tempFbo);\n      filters.forEach(function(filter) { filter && filter.applyTo(pipelineState); });\n      resizeCanvasIfNeeded(pipelineState);\n      this.copyGLTo2D(gl, pipelineState);\n      gl.bindTexture(gl.TEXTURE_2D, null);\n      gl.deleteTexture(pipelineState.sourceTexture);\n      gl.deleteTexture(pipelineState.targetTexture);\n      gl.deleteFramebuffer(tempFbo);\n      targetCanvas.getContext('2d').setTransform(1, 0, 0, 1, 0, 0);\n      return pipelineState;\n    },\n\n    /**\n     * Detach event listeners, remove references, and clean up caches.\n     */\n    dispose: function() {\n      if (this.canvas) {\n        this.canvas = null;\n        this.gl = null;\n      }\n      this.clearWebGLCaches();\n    },\n\n    /**\n     * Wipe out WebGL-related caches.\n     */\n    clearWebGLCaches: function() {\n      this.programCache = {};\n      this.textureCache = {};\n    },\n\n    /**\n     * Create a WebGL texture object.\n     *\n     * Accepts specific dimensions to initialize the texture to or a source image.\n     *\n     * @param {WebGLRenderingContext} gl The GL context to use for creating the texture.\n     * @param {Number} width The width to initialize the texture at.\n     * @param {Number} height The height to initialize the texture.\n     * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source for the texture data.\n     * @returns {WebGLTexture}\n     */\n    createTexture: function(gl, width, height, textureImageSource) {\n      var texture = gl.createTexture();\n      gl.bindTexture(gl.TEXTURE_2D, texture);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n      if (textureImageSource) {\n        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textureImageSource);\n      }\n      else {\n        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n      }\n      return texture;\n    },\n\n    /**\n     * Can be optionally used to get a texture from the cache array\n     *\n     * If an existing texture is not found, a new texture is created and cached.\n     *\n     * @param {String} uniqueId A cache key to use to find an existing texture.\n     * @param {HTMLImageElement|HTMLCanvasElement} textureImageSource A source to use to create the\n     * texture cache entry if one does not already exist.\n     */\n    getCachedTexture: function(uniqueId, textureImageSource) {\n      if (this.textureCache[uniqueId]) {\n        return this.textureCache[uniqueId];\n      }\n      else {\n        var texture = this.createTexture(\n          this.gl, textureImageSource.width, textureImageSource.height, textureImageSource);\n        this.textureCache[uniqueId] = texture;\n        return texture;\n      }\n    },\n\n    /**\n     * Clear out cached resources related to a source image that has been\n     * filtered previously.\n     *\n     * @param {String} cacheKey The cache key provided when the source image was filtered.\n     */\n    evictCachesForKey: function(cacheKey) {\n      if (this.textureCache[cacheKey]) {\n        this.gl.deleteTexture(this.textureCache[cacheKey]);\n        delete this.textureCache[cacheKey];\n      }\n    },\n\n    copyGLTo2D: copyGLTo2DDrawImage,\n\n    /**\n     * Attempt to extract GPU information strings from a WebGL context.\n     *\n     * Useful information when debugging or blacklisting specific GPUs.\n     *\n     * @returns {Object} A GPU info object with renderer and vendor strings.\n     */\n    captureGPUInfo: function() {\n      if (this.gpuInfo) {\n        return this.gpuInfo;\n      }\n      var gl = this.gl, gpuInfo = { renderer: '', vendor: '' };\n      if (!gl) {\n        return gpuInfo;\n      }\n      var ext = gl.getExtension('WEBGL_debug_renderer_info');\n      if (ext) {\n        var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);\n        var vendor = gl.getParameter(ext.UNMASKED_VENDOR_WEBGL);\n        if (renderer) {\n          gpuInfo.renderer = renderer.toLowerCase();\n        }\n        if (vendor) {\n          gpuInfo.vendor = vendor.toLowerCase();\n        }\n      }\n      this.gpuInfo = gpuInfo;\n      return gpuInfo;\n    },\n  };\n})();\n\nfunction resizeCanvasIfNeeded(pipelineState) {\n  var targetCanvas = pipelineState.targetCanvas,\n      width = targetCanvas.width, height = targetCanvas.height,\n      dWidth = pipelineState.destinationWidth,\n      dHeight = pipelineState.destinationHeight;\n\n  if (width !== dWidth || height !== dHeight) {\n    targetCanvas.width = dWidth;\n    targetCanvas.height = dHeight;\n  }\n}\n\n/**\n * Copy an input WebGL canvas on to an output 2D canvas.\n *\n * The WebGL canvas is assumed to be upside down, with the top-left pixel of the\n * desired output image appearing in the bottom-left corner of the WebGL canvas.\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\nfunction copyGLTo2DDrawImage(gl, pipelineState) {\n  var glCanvas = gl.canvas, targetCanvas = pipelineState.targetCanvas,\n      ctx = targetCanvas.getContext('2d');\n  ctx.translate(0, targetCanvas.height); // move it down again\n  ctx.scale(1, -1); // vertical flip\n  // where is my image on the big glcanvas?\n  var sourceY = glCanvas.height - targetCanvas.height;\n  ctx.drawImage(glCanvas, 0, sourceY, targetCanvas.width, targetCanvas.height, 0, 0,\n    targetCanvas.width, targetCanvas.height);\n}\n\n/**\n * Copy an input WebGL canvas on to an output 2D canvas using 2d canvas' putImageData\n * API. Measurably faster than using ctx.drawImage in Firefox (version 54 on OSX Sierra).\n *\n * @param {WebGLRenderingContext} sourceContext The WebGL context to copy from.\n * @param {HTMLCanvasElement} targetCanvas The 2D target canvas to copy on to.\n * @param {Object} pipelineState The 2D target canvas to copy on to.\n */\nfunction copyGLTo2DPutImageData(gl, pipelineState) {\n  var targetCanvas = pipelineState.targetCanvas, ctx = targetCanvas.getContext('2d'),\n      dWidth = pipelineState.destinationWidth,\n      dHeight = pipelineState.destinationHeight,\n      numBytes = dWidth * dHeight * 4;\n\n  // eslint-disable-next-line no-undef\n  var u8 = new Uint8Array(this.imageBuffer, 0, numBytes);\n  // eslint-disable-next-line no-undef\n  var u8Clamped = new Uint8ClampedArray(this.imageBuffer, 0, numBytes);\n\n  gl.readPixels(0, 0, dWidth, dHeight, gl.RGBA, gl.UNSIGNED_BYTE, u8);\n  var imgData = new ImageData(u8Clamped, dWidth, dHeight);\n  ctx.putImageData(imgData, 0, 0);\n}\n\n\n(function() {\n\n  'use strict';\n\n  var noop = function() {};\n\n  fabric.Canvas2dFilterBackend = Canvas2dFilterBackend;\n\n  /**\n   * Canvas 2D filter backend.\n   */\n  function Canvas2dFilterBackend() {};\n\n  Canvas2dFilterBackend.prototype = /** @lends fabric.Canvas2dFilterBackend.prototype */ {\n    evictCachesForKey: noop,\n    dispose: noop,\n    clearWebGLCaches: noop,\n\n    /**\n     * Experimental. This object is a sort of repository of help layers used to avoid\n     * of recreating them during frequent filtering. If you are previewing a filter with\n     * a slider you probably do not want to create help layers every filter step.\n     * in this object there will be appended some canvases, created once, resized sometimes\n     * cleared never. Clearing is left to the developer.\n     **/\n    resources: {\n\n    },\n\n    /**\n     * Apply a set of filters against a source image and draw the filtered output\n     * to the provided destination canvas.\n     *\n     * @param {EnhancedFilter} filters The filter to apply.\n     * @param {HTMLImageElement|HTMLCanvasElement} sourceElement The source to be filtered.\n     * @param {Number} sourceWidth The width of the source input.\n     * @param {Number} sourceHeight The height of the source input.\n     * @param {HTMLCanvasElement} targetCanvas The destination for filtered output to be drawn.\n     */\n    applyFilters: function(filters, sourceElement, sourceWidth, sourceHeight, targetCanvas) {\n      var ctx = targetCanvas.getContext('2d');\n      ctx.drawImage(sourceElement, 0, 0, sourceWidth, sourceHeight);\n      var imageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n      var originalImageData = ctx.getImageData(0, 0, sourceWidth, sourceHeight);\n      var pipelineState = {\n        sourceWidth: sourceWidth,\n        sourceHeight: sourceHeight,\n        imageData: imageData,\n        originalEl: sourceElement,\n        originalImageData: originalImageData,\n        canvasEl: targetCanvas,\n        ctx: ctx,\n        filterBackend: this,\n      };\n      filters.forEach(function(filter) { filter.applyTo(pipelineState); });\n      if (pipelineState.imageData.width !== sourceWidth || pipelineState.imageData.height !== sourceHeight) {\n        targetCanvas.width = pipelineState.imageData.width;\n        targetCanvas.height = pipelineState.imageData.height;\n      }\n      ctx.putImageData(pipelineState.imageData, 0, 0);\n      return pipelineState;\n    },\n\n  };\n})();\n\n\n/**\n * @namespace fabric.Image.filters\n * @memberOf fabric.Image\n * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#image_filters}\n * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n */\nfabric.Image = fabric.Image || { };\nfabric.Image.filters = fabric.Image.filters || { };\n\n/**\n * Root filter class from which all filter classes inherit from\n * @class fabric.Image.filters.BaseFilter\n * @memberOf fabric.Image.filters\n */\nfabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Image.filters.BaseFilter.prototype */ {\n\n  /**\n   * Filter type\n   * @param {String} type\n   * @default\n   */\n  type: 'BaseFilter',\n\n  /**\n   * Array of attributes to send with buffers. do not modify\n   * @private\n   */\n\n  vertexSource: 'attribute vec2 aPosition;\\n' +\n    'varying vec2 vTexCoord;\\n' +\n    'void main() {\\n' +\n      'vTexCoord = aPosition;\\n' +\n      'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\\n' +\n    '}',\n\n  fragmentSource: 'precision highp float;\\n' +\n    'varying vec2 vTexCoord;\\n' +\n    'uniform sampler2D uTexture;\\n' +\n    'void main() {\\n' +\n      'gl_FragColor = texture2D(uTexture, vTexCoord);\\n' +\n    '}',\n\n  /**\n   * Constructor\n   * @param {Object} [options] Options object\n   */\n  initialize: function(options) {\n    if (options) {\n      this.setOptions(options);\n    }\n  },\n\n  /**\n   * Sets filter's properties from options\n   * @param {Object} [options] Options object\n   */\n  setOptions: function(options) {\n    for (var prop in options) {\n      this[prop] = options[prop];\n    }\n  },\n\n  /**\n   * Compile this filter's shader program.\n   *\n   * @param {WebGLRenderingContext} gl The GL canvas context to use for shader compilation.\n   * @param {String} fragmentSource fragmentShader source for compilation\n   * @param {String} vertexSource vertexShader source for compilation\n   */\n  createProgram: function(gl, fragmentSource, vertexSource) {\n    fragmentSource = fragmentSource || this.fragmentSource;\n    vertexSource = vertexSource || this.vertexSource;\n    if (fabric.webGlPrecision !== 'highp'){\n      fragmentSource = fragmentSource.replace(\n        /precision highp float/g,\n        'precision ' + fabric.webGlPrecision + ' float'\n      );\n    }\n    var vertexShader = gl.createShader(gl.VERTEX_SHADER);\n    gl.shaderSource(vertexShader, vertexSource);\n    gl.compileShader(vertexShader);\n    if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n      throw new Error(\n        // eslint-disable-next-line prefer-template\n        'Vertex shader compile error for ' + this.type + ': ' +\n        gl.getShaderInfoLog(vertexShader)\n      );\n    }\n\n    var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n    gl.shaderSource(fragmentShader, fragmentSource);\n    gl.compileShader(fragmentShader);\n    if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n      throw new Error(\n        // eslint-disable-next-line prefer-template\n        'Fragment shader compile error for ' + this.type + ': ' +\n        gl.getShaderInfoLog(fragmentShader)\n      );\n    }\n\n    var program = gl.createProgram();\n    gl.attachShader(program, vertexShader);\n    gl.attachShader(program, fragmentShader);\n    gl.linkProgram(program);\n    if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n      throw new Error(\n        // eslint-disable-next-line prefer-template\n        'Shader link error for \"${this.type}\" ' +\n        gl.getProgramInfoLog(program)\n      );\n    }\n\n    var attributeLocations = this.getAttributeLocations(gl, program);\n    var uniformLocations = this.getUniformLocations(gl, program) || { };\n    uniformLocations.uStepW = gl.getUniformLocation(program, 'uStepW');\n    uniformLocations.uStepH = gl.getUniformLocation(program, 'uStepH');\n    return {\n      program: program,\n      attributeLocations: attributeLocations,\n      uniformLocations: uniformLocations\n    };\n  },\n\n  /**\n   * Return a map of attribute names to WebGLAttributeLocation objects.\n   *\n   * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n   * @param {WebGLShaderProgram} program The shader program from which to take attribute locations.\n   * @returns {Object} A map of attribute names to attribute locations.\n   */\n  getAttributeLocations: function(gl, program) {\n    return {\n      aPosition: gl.getAttribLocation(program, 'aPosition'),\n    };\n  },\n\n  /**\n   * Return a map of uniform names to WebGLUniformLocation objects.\n   *\n   * Intended to be overridden by subclasses.\n   *\n   * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n   * @param {WebGLShaderProgram} program The shader program from which to take uniform locations.\n   * @returns {Object} A map of uniform names to uniform locations.\n   */\n  getUniformLocations: function (/* gl, program */) {\n    // in case i do not need any special uniform i need to return an empty object\n    return { };\n  },\n\n  /**\n   * Send attribute data from this filter to its shader program on the GPU.\n   *\n   * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n   * @param {Object} attributeLocations A map of shader attribute names to their locations.\n   */\n  sendAttributeData: function(gl, attributeLocations, aPositionData) {\n    var attributeLocation = attributeLocations.aPosition;\n    var buffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n    gl.enableVertexAttribArray(attributeLocation);\n    gl.vertexAttribPointer(attributeLocation, 2, gl.FLOAT, false, 0, 0);\n    gl.bufferData(gl.ARRAY_BUFFER, aPositionData, gl.STATIC_DRAW);\n  },\n\n  _setupFrameBuffer: function(options) {\n    var gl = options.context, width, height;\n    if (options.passes > 1) {\n      width = options.destinationWidth;\n      height = options.destinationHeight;\n      if (options.sourceWidth !== width || options.sourceHeight !== height) {\n        gl.deleteTexture(options.targetTexture);\n        options.targetTexture = options.filterBackend.createTexture(gl, width, height);\n      }\n      gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D,\n        options.targetTexture, 0);\n    }\n    else {\n      // draw last filter on canvas and not to framebuffer.\n      gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n      gl.finish();\n    }\n  },\n\n  _swapTextures: function(options) {\n    options.passes--;\n    options.pass++;\n    var temp = options.targetTexture;\n    options.targetTexture = options.sourceTexture;\n    options.sourceTexture = temp;\n  },\n\n  /**\n   * Generic isNeutral implementation for one parameter based filters.\n   * Used only in image applyFilters to discard filters that will not have an effect\n   * on the image\n   * Other filters may need their own version ( ColorMatrix, HueRotation, gamma, ComposedFilter )\n   * @param {Object} options\n   **/\n  isNeutralState: function(/* options */) {\n    var main = this.mainParameter,\n        _class = fabric.Image.filters[this.type].prototype;\n    if (main) {\n      if (Array.isArray(_class[main])) {\n        for (var i = _class[main].length; i--;) {\n          if (this[main][i] !== _class[main][i]) {\n            return false;\n          }\n        }\n        return true;\n      }\n      else {\n        return _class[main] === this[main];\n      }\n    }\n    else {\n      return false;\n    }\n  },\n\n  /**\n   * Apply this filter to the input image data provided.\n   *\n   * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n   *\n   * @param {Object} options\n   * @param {Number} options.passes The number of filters remaining to be executed\n   * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n   * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n   * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n   * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n   * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n   */\n  applyTo: function(options) {\n    if (options.webgl) {\n      this._setupFrameBuffer(options);\n      this.applyToWebGL(options);\n      this._swapTextures(options);\n    }\n    else {\n      this.applyTo2d(options);\n    }\n  },\n\n  /**\n   * Retrieves the cached shader.\n   * @param {Object} options\n   * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n   * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n   */\n  retrieveShader: function(options) {\n    if (!options.programCache.hasOwnProperty(this.type)) {\n      options.programCache[this.type] = this.createProgram(options.context);\n    }\n    return options.programCache[this.type];\n  },\n\n  /**\n   * Apply this filter using webgl.\n   *\n   * @param {Object} options\n   * @param {Number} options.passes The number of filters remaining to be executed\n   * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n   * @param {WebGLTexture} options.originalTexture The texture of the original input image.\n   * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n   * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n   * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n   * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n   */\n  applyToWebGL: function(options) {\n    var gl = options.context;\n    var shader = this.retrieveShader(options);\n    if (options.pass === 0 && options.originalTexture) {\n      gl.bindTexture(gl.TEXTURE_2D, options.originalTexture);\n    }\n    else {\n      gl.bindTexture(gl.TEXTURE_2D, options.sourceTexture);\n    }\n    gl.useProgram(shader.program);\n    this.sendAttributeData(gl, shader.attributeLocations, options.aPosition);\n\n    gl.uniform1f(shader.uniformLocations.uStepW, 1 / options.sourceWidth);\n    gl.uniform1f(shader.uniformLocations.uStepH, 1 / options.sourceHeight);\n\n    this.sendUniformData(gl, shader.uniformLocations);\n    gl.viewport(0, 0, options.destinationWidth, options.destinationHeight);\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n  },\n\n  bindAdditionalTexture: function(gl, texture, textureUnit) {\n    gl.activeTexture(textureUnit);\n    gl.bindTexture(gl.TEXTURE_2D, texture);\n    // reset active texture to 0 as usual\n    gl.activeTexture(gl.TEXTURE0);\n  },\n\n  unbindAdditionalTexture: function(gl, textureUnit) {\n    gl.activeTexture(textureUnit);\n    gl.bindTexture(gl.TEXTURE_2D, null);\n    gl.activeTexture(gl.TEXTURE0);\n  },\n\n  getMainParameter: function() {\n    return this[this.mainParameter];\n  },\n\n  setMainParameter: function(value) {\n    this[this.mainParameter] = value;\n  },\n\n  /**\n   * Send uniform data from this filter to its shader program on the GPU.\n   *\n   * Intended to be overridden by subclasses.\n   *\n   * @param {WebGLRenderingContext} gl The canvas context used to compile the shader program.\n   * @param {Object} uniformLocations A map of shader uniform names to their locations.\n   */\n  sendUniformData: function(/* gl, uniformLocations */) {\n    // Intentionally left blank.  Override me in subclasses.\n  },\n\n  /**\n   * If needed by a 2d filter, this functions can create an helper canvas to be used\n   * remember that options.targetCanvas is available for use till end of chain.\n   */\n  createHelpLayer: function(options) {\n    if (!options.helpLayer) {\n      var helpLayer = document.createElement('canvas');\n      helpLayer.width = options.sourceWidth;\n      helpLayer.height = options.sourceHeight;\n      options.helpLayer = helpLayer;\n    }\n  },\n\n  /**\n   * Returns object representation of an instance\n   * @return {Object} Object representation of an instance\n   */\n  toObject: function() {\n    var object = { type: this.type }, mainP = this.mainParameter;\n    if (mainP) {\n      object[mainP] = this[mainP];\n    }\n    return object;\n  },\n\n  /**\n   * Returns a JSON representation of an instance\n   * @return {Object} JSON\n   */\n  toJSON: function() {\n    // delegate, not alias\n    return this.toObject();\n  }\n});\n\nfabric.Image.filters.BaseFilter.fromObject = function(object, callback) {\n  var filter = new fabric.Image.filters[object.type](object);\n  callback && callback(filter);\n  return filter;\n};\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Color Matrix filter class\n   * @class fabric.Image.filters.ColorMatrix\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.ColorMatrix#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @see {@Link http://www.webwasp.co.uk/tutorials/219/Color_Matrix_Filter.php}\n   * @see {@Link http://phoboslab.org/log/2013/11/fast-image-filters-with-webgl}\n   * @example <caption>Kodachrome filter</caption>\n   * var filter = new fabric.Image.filters.ColorMatrix({\n   *  matrix: [\n       1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n       -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n       -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n       0, 0, 0, 1, 0\n      ]\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   */\n  filters.ColorMatrix = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.ColorMatrix.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'ColorMatrix',\n\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'uniform mat4 uColorMatrix;\\n' +\n      'uniform vec4 uConstants;\\n' +\n      'void main() {\\n' +\n        'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n        'color *= uColorMatrix;\\n' +\n        'color += uConstants;\\n' +\n        'gl_FragColor = color;\\n' +\n      '}',\n\n    /**\n     * Colormatrix for pixels.\n     * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n     * outside the -1, 1 range.\n     * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n     * @param {Array} matrix array of 20 numbers.\n     * @default\n     */\n    matrix: [\n      1, 0, 0, 0, 0,\n      0, 1, 0, 0, 0,\n      0, 0, 1, 0, 0,\n      0, 0, 0, 1, 0\n    ],\n\n    mainParameter: 'matrix',\n\n    /**\n     * Lock the colormatrix on the color part, skipping alpha, mainly for non webgl scenario\n     * to save some calculation\n     * @type Boolean\n     * @default true\n     */\n    colorsOnly: true,\n\n    /**\n     * Constructor\n     * @param {Object} [options] Options object\n     */\n    initialize: function(options) {\n      this.callSuper('initialize', options);\n      // create a new array instead mutating the prototype with push\n      this.matrix = this.matrix.slice(0);\n    },\n\n    /**\n     * Apply the ColorMatrix operation to a Uint8Array representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8Array to be filtered.\n     */\n    applyTo2d: function(options) {\n      var imageData = options.imageData,\n          data = imageData.data,\n          iLen = data.length,\n          m = this.matrix,\n          r, g, b, a, i, colorsOnly = this.colorsOnly;\n\n      for (i = 0; i < iLen; i += 4) {\n        r = data[i];\n        g = data[i + 1];\n        b = data[i + 2];\n        if (colorsOnly) {\n          data[i] = r * m[0] + g * m[1] + b * m[2] + m[4] * 255;\n          data[i + 1] = r * m[5] + g * m[6] + b * m[7] + m[9] * 255;\n          data[i + 2] = r * m[10] + g * m[11] + b * m[12] + m[14] * 255;\n        }\n        else {\n          a = data[i + 3];\n          data[i] = r * m[0] + g * m[1] + b * m[2] + a * m[3] + m[4] * 255;\n          data[i + 1] = r * m[5] + g * m[6] + b * m[7] + a * m[8] + m[9] * 255;\n          data[i + 2] = r * m[10] + g * m[11] + b * m[12] + a * m[13] + m[14] * 255;\n          data[i + 3] = r * m[15] + g * m[16] + b * m[17] + a * m[18] + m[19] * 255;\n        }\n      }\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uColorMatrix: gl.getUniformLocation(program, 'uColorMatrix'),\n        uConstants: gl.getUniformLocation(program, 'uConstants'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      var m = this.matrix,\n          matrix = [\n            m[0], m[1], m[2], m[3],\n            m[5], m[6], m[7], m[8],\n            m[10], m[11], m[12], m[13],\n            m[15], m[16], m[17], m[18]\n          ],\n          constants = [m[4], m[9], m[14], m[19]];\n      gl.uniformMatrix4fv(uniformLocations.uColorMatrix, false, matrix);\n      gl.uniform4fv(uniformLocations.uConstants, constants);\n    },\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] function to invoke after filter creation\n   * @return {fabric.Image.filters.ColorMatrix} Instance of fabric.Image.filters.ColorMatrix\n   */\n  fabric.Image.filters.ColorMatrix.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Brightness filter class\n   * @class fabric.Image.filters.Brightness\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.Brightness#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Brightness({\n   *   brightness: 0.05\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   */\n  filters.Brightness = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Brightness.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Brightness',\n\n    /**\n     * Fragment source for the brightness program\n     */\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform float uBrightness;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'void main() {\\n' +\n        'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n        'color.rgb += uBrightness;\\n' +\n        'gl_FragColor = color;\\n' +\n      '}',\n\n    /**\n     * Brightness value, from -1 to 1.\n     * translated to -255 to 255 for 2d\n     * 0.0039215686 is the part of 1 that get translated to 1 in 2d\n     * @param {Number} brightness\n     * @default\n     */\n    brightness: 0,\n\n    /**\n     * Describe the property that is the filter parameter\n     * @param {String} m\n     * @default\n     */\n    mainParameter: 'brightness',\n\n    /**\n    * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n    *\n    * @param {Object} options\n    * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n    */\n    applyTo2d: function(options) {\n      if (this.brightness === 0) {\n        return;\n      }\n      var imageData = options.imageData,\n          data = imageData.data, i, len = data.length,\n          brightness = Math.round(this.brightness * 255);\n      for (i = 0; i < len; i += 4) {\n        data[i] = data[i] + brightness;\n        data[i + 1] = data[i + 1] + brightness;\n        data[i + 2] = data[i + 2] + brightness;\n      }\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uBrightness: gl.getUniformLocation(program, 'uBrightness'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      gl.uniform1f(uniformLocations.uBrightness, this.brightness);\n    },\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Brightness} Instance of fabric.Image.filters.Brightness\n   */\n  fabric.Image.filters.Brightness.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      extend = fabric.util.object.extend,\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Adapted from <a href=\"http://www.html5rocks.com/en/tutorials/canvas/imagefilters/\">html5rocks article</a>\n   * @class fabric.Image.filters.Convolute\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.Convolute#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example <caption>Sharpen filter</caption>\n   * var filter = new fabric.Image.filters.Convolute({\n   *   matrix: [ 0, -1,  0,\n   *            -1,  5, -1,\n   *             0, -1,  0 ]\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   * canvas.renderAll();\n   * @example <caption>Blur filter</caption>\n   * var filter = new fabric.Image.filters.Convolute({\n   *   matrix: [ 1/9, 1/9, 1/9,\n   *             1/9, 1/9, 1/9,\n   *             1/9, 1/9, 1/9 ]\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   * canvas.renderAll();\n   * @example <caption>Emboss filter</caption>\n   * var filter = new fabric.Image.filters.Convolute({\n   *   matrix: [ 1,   1,  1,\n   *             1, 0.7, -1,\n   *            -1,  -1, -1 ]\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   * canvas.renderAll();\n   * @example <caption>Emboss filter with opaqueness</caption>\n   * var filter = new fabric.Image.filters.Convolute({\n   *   opaque: true,\n   *   matrix: [ 1,   1,  1,\n   *             1, 0.7, -1,\n   *            -1,  -1, -1 ]\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   * canvas.renderAll();\n   */\n  filters.Convolute = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Convolute.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Convolute',\n\n    /*\n     * Opaque value (true/false)\n     */\n    opaque: false,\n\n    /*\n     * matrix for the filter, max 9x9\n     */\n    matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],\n\n    /**\n     * Fragment source for the brightness program\n     */\n    fragmentSource: {\n      Convolute_3_1: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform float uMatrix[9];\\n' +\n        'uniform float uStepW;\\n' +\n        'uniform float uStepH;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 color = vec4(0, 0, 0, 0);\\n' +\n          'for (float h = 0.0; h < 3.0; h+=1.0) {\\n' +\n            'for (float w = 0.0; w < 3.0; w+=1.0) {\\n' +\n              'vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\\n' +\n              'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\\n' +\n            '}\\n' +\n          '}\\n' +\n          'gl_FragColor = color;\\n' +\n        '}',\n      Convolute_3_0: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform float uMatrix[9];\\n' +\n        'uniform float uStepW;\\n' +\n        'uniform float uStepH;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 color = vec4(0, 0, 0, 1);\\n' +\n          'for (float h = 0.0; h < 3.0; h+=1.0) {\\n' +\n            'for (float w = 0.0; w < 3.0; w+=1.0) {\\n' +\n              'vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\\n' +\n              'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\\n' +\n            '}\\n' +\n          '}\\n' +\n          'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n          'gl_FragColor = color;\\n' +\n          'gl_FragColor.a = alpha;\\n' +\n        '}',\n      Convolute_5_1: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform float uMatrix[25];\\n' +\n        'uniform float uStepW;\\n' +\n        'uniform float uStepH;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 color = vec4(0, 0, 0, 0);\\n' +\n          'for (float h = 0.0; h < 5.0; h+=1.0) {\\n' +\n            'for (float w = 0.0; w < 5.0; w+=1.0) {\\n' +\n              'vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\\n' +\n              'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\\n' +\n            '}\\n' +\n          '}\\n' +\n          'gl_FragColor = color;\\n' +\n        '}',\n      Convolute_5_0: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform float uMatrix[25];\\n' +\n        'uniform float uStepW;\\n' +\n        'uniform float uStepH;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 color = vec4(0, 0, 0, 1);\\n' +\n          'for (float h = 0.0; h < 5.0; h+=1.0) {\\n' +\n            'for (float w = 0.0; w < 5.0; w+=1.0) {\\n' +\n              'vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\\n' +\n              'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\\n' +\n            '}\\n' +\n          '}\\n' +\n          'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n          'gl_FragColor = color;\\n' +\n          'gl_FragColor.a = alpha;\\n' +\n        '}',\n      Convolute_7_1: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform float uMatrix[49];\\n' +\n        'uniform float uStepW;\\n' +\n        'uniform float uStepH;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 color = vec4(0, 0, 0, 0);\\n' +\n          'for (float h = 0.0; h < 7.0; h+=1.0) {\\n' +\n            'for (float w = 0.0; w < 7.0; w+=1.0) {\\n' +\n              'vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\\n' +\n              'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\\n' +\n            '}\\n' +\n          '}\\n' +\n          'gl_FragColor = color;\\n' +\n        '}',\n      Convolute_7_0: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform float uMatrix[49];\\n' +\n        'uniform float uStepW;\\n' +\n        'uniform float uStepH;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 color = vec4(0, 0, 0, 1);\\n' +\n          'for (float h = 0.0; h < 7.0; h+=1.0) {\\n' +\n            'for (float w = 0.0; w < 7.0; w+=1.0) {\\n' +\n              'vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\\n' +\n              'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\\n' +\n            '}\\n' +\n          '}\\n' +\n          'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n          'gl_FragColor = color;\\n' +\n          'gl_FragColor.a = alpha;\\n' +\n        '}',\n      Convolute_9_1: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform float uMatrix[81];\\n' +\n        'uniform float uStepW;\\n' +\n        'uniform float uStepH;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 color = vec4(0, 0, 0, 0);\\n' +\n          'for (float h = 0.0; h < 9.0; h+=1.0) {\\n' +\n            'for (float w = 0.0; w < 9.0; w+=1.0) {\\n' +\n              'vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\\n' +\n              'color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\\n' +\n            '}\\n' +\n          '}\\n' +\n          'gl_FragColor = color;\\n' +\n        '}',\n      Convolute_9_0: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform float uMatrix[81];\\n' +\n        'uniform float uStepW;\\n' +\n        'uniform float uStepH;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 color = vec4(0, 0, 0, 1);\\n' +\n          'for (float h = 0.0; h < 9.0; h+=1.0) {\\n' +\n            'for (float w = 0.0; w < 9.0; w+=1.0) {\\n' +\n              'vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\\n' +\n              'color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\\n' +\n            '}\\n' +\n          '}\\n' +\n          'float alpha = texture2D(uTexture, vTexCoord).a;\\n' +\n          'gl_FragColor = color;\\n' +\n          'gl_FragColor.a = alpha;\\n' +\n        '}',\n    },\n\n    /**\n     * Constructor\n     * @memberOf fabric.Image.filters.Convolute.prototype\n     * @param {Object} [options] Options object\n     * @param {Boolean} [options.opaque=false] Opaque value (true/false)\n     * @param {Array} [options.matrix] Filter matrix\n     */\n\n\n    /**\n    * Retrieves the cached shader.\n    * @param {Object} options\n    * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n    * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n    */\n    retrieveShader: function(options) {\n      var size = Math.sqrt(this.matrix.length);\n      var cacheKey = this.type + '_' + size + '_' + (this.opaque ? 1 : 0);\n      var shaderSource = this.fragmentSource[cacheKey];\n      if (!options.programCache.hasOwnProperty(cacheKey)) {\n        options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n      }\n      return options.programCache[cacheKey];\n    },\n\n    /**\n     * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n     */\n    applyTo2d: function(options) {\n      var imageData = options.imageData,\n          data = imageData.data,\n          weights = this.matrix,\n          side = Math.round(Math.sqrt(weights.length)),\n          halfSide = Math.floor(side / 2),\n          sw = imageData.width,\n          sh = imageData.height,\n          output = options.ctx.createImageData(sw, sh),\n          dst = output.data,\n          // go through the destination image pixels\n          alphaFac = this.opaque ? 1 : 0,\n          r, g, b, a, dstOff,\n          scx, scy, srcOff, wt,\n          x, y, cx, cy;\n\n      for (y = 0; y < sh; y++) {\n        for (x = 0; x < sw; x++) {\n          dstOff = (y * sw + x) * 4;\n          // calculate the weighed sum of the source image pixels that\n          // fall under the convolution matrix\n          r = 0; g = 0; b = 0; a = 0;\n\n          for (cy = 0; cy < side; cy++) {\n            for (cx = 0; cx < side; cx++) {\n              scy = y + cy - halfSide;\n              scx = x + cx - halfSide;\n\n              // eslint-disable-next-line max-depth\n              if (scy < 0 || scy >= sh || scx < 0 || scx >= sw) {\n                continue;\n              }\n\n              srcOff = (scy * sw + scx) * 4;\n              wt = weights[cy * side + cx];\n\n              r += data[srcOff] * wt;\n              g += data[srcOff + 1] * wt;\n              b += data[srcOff + 2] * wt;\n              // eslint-disable-next-line max-depth\n              if (!alphaFac) {\n                a += data[srcOff + 3] * wt;\n              }\n            }\n          }\n          dst[dstOff] = r;\n          dst[dstOff + 1] = g;\n          dst[dstOff + 2] = b;\n          if (!alphaFac) {\n            dst[dstOff + 3] = a;\n          }\n          else {\n            dst[dstOff + 3] = data[dstOff + 3];\n          }\n        }\n      }\n      options.imageData = output;\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uMatrix: gl.getUniformLocation(program, 'uMatrix'),\n        uOpaque: gl.getUniformLocation(program, 'uOpaque'),\n        uHalfSize: gl.getUniformLocation(program, 'uHalfSize'),\n        uSize: gl.getUniformLocation(program, 'uSize'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      gl.uniform1fv(uniformLocations.uMatrix, this.matrix);\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @return {Object} Object representation of an instance\n     */\n    toObject: function() {\n      return extend(this.callSuper('toObject'), {\n        opaque: this.opaque,\n        matrix: this.matrix\n      });\n    }\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Convolute} Instance of fabric.Image.filters.Convolute\n   */\n  fabric.Image.filters.Convolute.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Grayscale image filter class\n   * @class fabric.Image.filters.Grayscale\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Grayscale();\n   * object.filters.push(filter);\n   * object.applyFilters();\n   */\n  filters.Grayscale = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Grayscale.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Grayscale',\n\n    fragmentSource: {\n      average: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n          'float average = (color.r + color.b + color.g) / 3.0;\\n' +\n          'gl_FragColor = vec4(average, average, average, color.a);\\n' +\n        '}',\n      lightness: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform int uMode;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 col = texture2D(uTexture, vTexCoord);\\n' +\n          'float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\\n' +\n          'gl_FragColor = vec4(average, average, average, col.a);\\n' +\n        '}',\n      luminosity: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform int uMode;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 col = texture2D(uTexture, vTexCoord);\\n' +\n          'float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\\n' +\n          'gl_FragColor = vec4(average, average, average, col.a);\\n' +\n        '}',\n    },\n\n\n    /**\n     * Grayscale mode, between 'average', 'lightness', 'luminosity'\n     * @param {String} type\n     * @default\n     */\n    mode: 'average',\n\n    mainParameter: 'mode',\n\n    /**\n     * Apply the Grayscale operation to a Uint8Array representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8Array to be filtered.\n     */\n    applyTo2d: function(options) {\n      var imageData = options.imageData,\n          data = imageData.data, i,\n          len = data.length, value,\n          mode = this.mode;\n      for (i = 0; i < len; i += 4) {\n        if (mode === 'average') {\n          value = (data[i] + data[i + 1] + data[i + 2]) / 3;\n        }\n        else if (mode === 'lightness') {\n          value = (Math.min(data[i], data[i + 1], data[i + 2]) +\n            Math.max(data[i], data[i + 1], data[i + 2])) / 2;\n        }\n        else if (mode === 'luminosity') {\n          value = 0.21 * data[i] + 0.72 * data[i + 1] + 0.07 * data[i + 2];\n        }\n        data[i] = value;\n        data[i + 1] = value;\n        data[i + 2] = value;\n      }\n    },\n\n    /**\n     * Retrieves the cached shader.\n     * @param {Object} options\n     * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n     * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n     */\n    retrieveShader: function(options) {\n      var cacheKey = this.type + '_' + this.mode;\n      if (!options.programCache.hasOwnProperty(cacheKey)) {\n        var shaderSource = this.fragmentSource[this.mode];\n        options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n      }\n      return options.programCache[cacheKey];\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uMode: gl.getUniformLocation(program, 'uMode'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      // default average mode.\n      var mode = 1;\n      gl.uniform1i(uniformLocations.uMode, mode);\n    },\n\n    /**\n     * Grayscale filter isNeutralState implementation\n     * The filter is never neutral\n     * on the image\n     **/\n    isNeutralState: function() {\n      return false;\n    },\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Grayscale} Instance of fabric.Image.filters.Grayscale\n   */\n  fabric.Image.filters.Grayscale.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Invert filter class\n   * @class fabric.Image.filters.Invert\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Invert();\n   * object.filters.push(filter);\n   * object.applyFilters(canvas.renderAll.bind(canvas));\n   */\n  filters.Invert = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Invert.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Invert',\n\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform int uInvert;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'void main() {\\n' +\n        'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n        'if (uInvert == 1) {\\n' +\n          'gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\\n' +\n        '} else {\\n' +\n          'gl_FragColor = color;\\n' +\n        '}\\n' +\n      '}',\n\n    /**\n     * Filter invert. if false, does nothing\n     * @param {Boolean} invert\n     * @default\n     */\n    invert: true,\n\n    mainParameter: 'invert',\n\n    /**\n     * Apply the Invert operation to a Uint8Array representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8Array to be filtered.\n     */\n    applyTo2d: function(options) {\n      var imageData = options.imageData,\n          data = imageData.data, i,\n          len = data.length;\n      for (i = 0; i < len; i += 4) {\n        data[i] = 255 - data[i];\n        data[i + 1] = 255 - data[i + 1];\n        data[i + 2] = 255 - data[i + 2];\n      }\n    },\n\n    /**\n     * Invert filter isNeutralState implementation\n     * Used only in image applyFilters to discard filters that will not have an effect\n     * on the image\n     * @param {Object} options\n     **/\n    isNeutralState: function() {\n      return !this.invert;\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uInvert: gl.getUniformLocation(program, 'uInvert'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      gl.uniform1i(uniformLocations.uInvert, this.invert);\n    },\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Invert} Instance of fabric.Image.filters.Invert\n   */\n  fabric.Image.filters.Invert.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      extend = fabric.util.object.extend,\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Noise filter class\n   * @class fabric.Image.filters.Noise\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.Noise#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Noise({\n   *   noise: 700\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   * canvas.renderAll();\n   */\n  filters.Noise = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Noise.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Noise',\n\n    /**\n     * Fragment source for the noise program\n     */\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform float uStepH;\\n' +\n      'uniform float uNoise;\\n' +\n      'uniform float uSeed;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'float rand(vec2 co, float seed, float vScale) {\\n' +\n        'return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\\n' +\n      '}\\n' +\n      'void main() {\\n' +\n        'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n        'color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\\n' +\n        'gl_FragColor = color;\\n' +\n      '}',\n\n    /**\n     * Describe the property that is the filter parameter\n     * @param {String} m\n     * @default\n     */\n    mainParameter: 'noise',\n\n    /**\n     * Noise value, from\n     * @param {Number} noise\n     * @default\n     */\n    noise: 0,\n\n    /**\n     * Apply the Brightness operation to a Uint8ClampedArray representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n     */\n    applyTo2d: function(options) {\n      if (this.noise === 0) {\n        return;\n      }\n      var imageData = options.imageData,\n          data = imageData.data, i, len = data.length,\n          noise = this.noise, rand;\n\n      for (i = 0, len = data.length; i < len; i += 4) {\n\n        rand = (0.5 - Math.random()) * noise;\n\n        data[i] += rand;\n        data[i + 1] += rand;\n        data[i + 2] += rand;\n      }\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uNoise: gl.getUniformLocation(program, 'uNoise'),\n        uSeed: gl.getUniformLocation(program, 'uSeed'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      gl.uniform1f(uniformLocations.uNoise, this.noise / 255);\n      gl.uniform1f(uniformLocations.uSeed, Math.random());\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @return {Object} Object representation of an instance\n     */\n    toObject: function() {\n      return extend(this.callSuper('toObject'), {\n        noise: this.noise\n      });\n    }\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {Function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Noise} Instance of fabric.Image.filters.Noise\n   */\n  fabric.Image.filters.Noise.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Pixelate filter class\n   * @class fabric.Image.filters.Pixelate\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.Pixelate#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Pixelate({\n   *   blocksize: 8\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   */\n  filters.Pixelate = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Pixelate.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Pixelate',\n\n    blocksize: 4,\n\n    mainParameter: 'blocksize',\n\n    /**\n     * Fragment source for the Pixelate program\n     */\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform float uBlocksize;\\n' +\n      'uniform float uStepW;\\n' +\n      'uniform float uStepH;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'void main() {\\n' +\n        'float blockW = uBlocksize * uStepW;\\n' +\n        'float blockH = uBlocksize * uStepW;\\n' +\n        'int posX = int(vTexCoord.x / blockW);\\n' +\n        'int posY = int(vTexCoord.y / blockH);\\n' +\n        'float fposX = float(posX);\\n' +\n        'float fposY = float(posY);\\n' +\n        'vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\\n' +\n        'vec4 color = texture2D(uTexture, squareCoords);\\n' +\n        'gl_FragColor = color;\\n' +\n      '}',\n\n    /**\n     * Apply the Pixelate operation to a Uint8ClampedArray representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n     */\n    applyTo2d: function(options) {\n      var imageData = options.imageData,\n          data = imageData.data,\n          iLen = imageData.height,\n          jLen = imageData.width,\n          index, i, j, r, g, b, a,\n          _i, _j, _iLen, _jLen;\n\n      for (i = 0; i < iLen; i += this.blocksize) {\n        for (j = 0; j < jLen; j += this.blocksize) {\n\n          index = (i * 4) * jLen + (j * 4);\n\n          r = data[index];\n          g = data[index + 1];\n          b = data[index + 2];\n          a = data[index + 3];\n\n          _iLen = Math.min(i + this.blocksize, iLen);\n          _jLen = Math.min(j + this.blocksize, jLen);\n          for (_i = i; _i < _iLen; _i++) {\n            for (_j = j; _j < _jLen; _j++) {\n              index = (_i * 4) * jLen + (_j * 4);\n              data[index] = r;\n              data[index + 1] = g;\n              data[index + 2] = b;\n              data[index + 3] = a;\n            }\n          }\n        }\n      }\n    },\n\n    /**\n     * Indicate when the filter is not gonna apply changes to the image\n     **/\n    isNeutralState: function() {\n      return this.blocksize === 1;\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uBlocksize: gl.getUniformLocation(program, 'uBlocksize'),\n        uStepW: gl.getUniformLocation(program, 'uStepW'),\n        uStepH: gl.getUniformLocation(program, 'uStepH'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      gl.uniform1f(uniformLocations.uBlocksize, this.blocksize);\n    },\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {Function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Pixelate} Instance of fabric.Image.filters.Pixelate\n   */\n  fabric.Image.filters.Pixelate.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      extend = fabric.util.object.extend,\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Remove white filter class\n   * @class fabric.Image.filters.RemoveColor\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.RemoveColor#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.RemoveColor({\n   *   threshold: 0.2,\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   * canvas.renderAll();\n   */\n  filters.RemoveColor = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.RemoveColor.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'RemoveColor',\n\n    /**\n     * Color to remove, in any format understood by fabric.Color.\n     * @param {String} type\n     * @default\n     */\n    color: '#FFFFFF',\n\n    /**\n     * Fragment source for the brightness program\n     */\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform vec4 uLow;\\n' +\n      'uniform vec4 uHigh;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'void main() {\\n' +\n        'gl_FragColor = texture2D(uTexture, vTexCoord);\\n' +\n        'if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\\n' +\n          'gl_FragColor.a = 0.0;\\n' +\n        '}\\n' +\n      '}',\n\n    /**\n     * distance to actual color, as value up or down from each r,g,b\n     * between 0 and 1\n     **/\n    distance: 0.02,\n\n    /**\n     * For color to remove inside distance, use alpha channel for a smoother deletion\n     * NOT IMPLEMENTED YET\n     **/\n    useAlpha: false,\n\n    /**\n     * Constructor\n     * @memberOf fabric.Image.filters.RemoveWhite.prototype\n     * @param {Object} [options] Options object\n     * @param {Number} [options.color=#RRGGBB] Threshold value\n     * @param {Number} [options.distance=10] Distance value\n     */\n\n    /**\n     * Applies filter to canvas element\n     * @param {Object} canvasEl Canvas element to apply filter to\n     */\n    applyTo2d: function(options) {\n      var imageData = options.imageData,\n          data = imageData.data, i,\n          distance = this.distance * 255,\n          r, g, b,\n          source = new fabric.Color(this.color).getSource(),\n          lowC = [\n            source[0] - distance,\n            source[1] - distance,\n            source[2] - distance,\n          ],\n          highC = [\n            source[0] + distance,\n            source[1] + distance,\n            source[2] + distance,\n          ];\n\n\n      for (i = 0; i < data.length; i += 4) {\n        r = data[i];\n        g = data[i + 1];\n        b = data[i + 2];\n\n        if (r > lowC[0] &&\n            g > lowC[1] &&\n            b > lowC[2] &&\n            r < highC[0] &&\n            g < highC[1] &&\n            b < highC[2]) {\n          data[i + 3] = 0;\n        }\n      }\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uLow: gl.getUniformLocation(program, 'uLow'),\n        uHigh: gl.getUniformLocation(program, 'uHigh'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      var source = new fabric.Color(this.color).getSource(),\n          distance = parseFloat(this.distance),\n          lowC = [\n            0 + source[0] / 255 - distance,\n            0 + source[1] / 255 - distance,\n            0 + source[2] / 255 - distance,\n            1\n          ],\n          highC = [\n            source[0] / 255 + distance,\n            source[1] / 255 + distance,\n            source[2] / 255 + distance,\n            1\n          ];\n      gl.uniform4fv(uniformLocations.uLow, lowC);\n      gl.uniform4fv(uniformLocations.uHigh, highC);\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @return {Object} Object representation of an instance\n     */\n    toObject: function() {\n      return extend(this.callSuper('toObject'), {\n        color: this.color,\n        distance: this.distance\n      });\n    }\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {Function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.RemoveColor} Instance of fabric.Image.filters.RemoveWhite\n   */\n  fabric.Image.filters.RemoveColor.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  var matrices = {\n    Brownie: [\n      0.59970,0.34553,-0.27082,0,0.186,\n      -0.03770,0.86095,0.15059,0,-0.1449,\n      0.24113,-0.07441,0.44972,0,-0.02965,\n      0,0,0,1,0\n    ],\n    Vintage: [\n      0.62793,0.32021,-0.03965,0,0.03784,\n      0.02578,0.64411,0.03259,0,0.02926,\n      0.04660,-0.08512,0.52416,0,0.02023,\n      0,0,0,1,0\n    ],\n    Kodachrome: [\n      1.12855,-0.39673,-0.03992,0,0.24991,\n      -0.16404,1.08352,-0.05498,0,0.09698,\n      -0.16786,-0.56034,1.60148,0,0.13972,\n      0,0,0,1,0\n    ],\n    Technicolor: [\n      1.91252,-0.85453,-0.09155,0,0.04624,\n      -0.30878,1.76589,-0.10601,0,-0.27589,\n      -0.23110,-0.75018,1.84759,0,0.12137,\n      0,0,0,1,0\n    ],\n    Polaroid: [\n      1.438,-0.062,-0.062,0,0,\n      -0.122,1.378,-0.122,0,0,\n      -0.016,-0.016,1.483,0,0,\n      0,0,0,1,0\n    ],\n    Sepia: [\n      0.393, 0.769, 0.189, 0, 0,\n      0.349, 0.686, 0.168, 0, 0,\n      0.272, 0.534, 0.131, 0, 0,\n      0, 0, 0, 1, 0\n    ],\n    BlackWhite: [\n      1.5, 1.5, 1.5, 0, -1,\n      1.5, 1.5, 1.5, 0, -1,\n      1.5, 1.5, 1.5, 0, -1,\n      0, 0, 0, 1, 0,\n    ]\n  };\n\n  for (var key in matrices) {\n    filters[key] = createClass(filters.ColorMatrix, /** @lends fabric.Image.filters.Sepia.prototype */ {\n\n      /**\n       * Filter type\n       * @param {String} type\n       * @default\n       */\n      type: key,\n\n      /**\n       * Colormatrix for the effect\n       * array of 20 floats. Numbers in positions 4, 9, 14, 19 loose meaning\n       * outside the -1, 1 range.\n       * @param {Array} matrix array of 20 numbers.\n       * @default\n       */\n      matrix: matrices[key],\n\n      /**\n       * Lock the matrix export for this kind of static, parameter less filters.\n       */\n      mainParameter: false,\n      /**\n       * Lock the colormatrix on the color part, skipping alpha\n       */\n      colorsOnly: true,\n\n    });\n    fabric.Image.filters[key].fromObject = fabric.Image.filters.BaseFilter.fromObject;\n  }\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n  'use strict';\n\n  var fabric = global.fabric,\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Color Blend filter class\n   * @class fabric.Image.filter.BlendColor\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @example\n   * var filter = new fabric.Image.filters.BlendColor({\n   *  color: '#000',\n   *  mode: 'multiply'\n   * });\n   *\n   * var filter = new fabric.Image.filters.BlendImage({\n   *  image: fabricImageObject,\n   *  mode: 'multiply',\n   *  alpha: 0.5\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   * canvas.renderAll();\n   */\n\n  filters.BlendColor = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Blend.prototype */ {\n    type: 'BlendColor',\n\n    /**\n     * Color to make the blend operation with. default to a reddish color since black or white\n     * gives always strong result.\n     * @type String\n     * @default\n     **/\n    color: '#F95C63',\n\n    /**\n     * Blend mode for the filter: one of multiply, add, diff, screen, subtract,\n     * darken, lighten, overlay, exclusion, tint.\n     * @type String\n     * @default\n     **/\n    mode: 'multiply',\n\n    /**\n     * alpha value. represent the strength of the blend color operation.\n     * @type Number\n     * @default\n     **/\n    alpha: 1,\n\n    /**\n     * Fragment source for the Multiply program\n     */\n    fragmentSource: {\n      multiply: 'gl_FragColor.rgb *= uColor.rgb;\\n',\n      screen: 'gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\\n',\n      add: 'gl_FragColor.rgb += uColor.rgb;\\n',\n      diff: 'gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\\n',\n      subtract: 'gl_FragColor.rgb -= uColor.rgb;\\n',\n      lighten: 'gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\\n',\n      darken: 'gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\\n',\n      exclusion: 'gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\\n',\n      overlay: 'if (uColor.r < 0.5) {\\n' +\n          'gl_FragColor.r *= 2.0 * uColor.r;\\n' +\n        '} else {\\n' +\n          'gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\\n' +\n        '}\\n' +\n        'if (uColor.g < 0.5) {\\n' +\n          'gl_FragColor.g *= 2.0 * uColor.g;\\n' +\n        '} else {\\n' +\n          'gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\\n' +\n        '}\\n' +\n        'if (uColor.b < 0.5) {\\n' +\n          'gl_FragColor.b *= 2.0 * uColor.b;\\n' +\n        '} else {\\n' +\n          'gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\\n' +\n        '}\\n',\n      tint: 'gl_FragColor.rgb *= (1.0 - uColor.a);\\n' +\n        'gl_FragColor.rgb += uColor.rgb;\\n',\n    },\n\n    /**\n     * build the fragment source for the filters, joining the common part with\n     * the specific one.\n     * @param {String} mode the mode of the filter, a key of this.fragmentSource\n     * @return {String} the source to be compiled\n     * @private\n     */\n    buildSource: function(mode) {\n      return 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform vec4 uColor;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'void main() {\\n' +\n          'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n          'gl_FragColor = color;\\n' +\n          'if (color.a > 0.0) {\\n' +\n            this.fragmentSource[mode] +\n          '}\\n' +\n        '}';\n    },\n\n    /**\n     * Retrieves the cached shader.\n     * @param {Object} options\n     * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n     * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n     */\n    retrieveShader: function(options) {\n      var cacheKey = this.type + '_' + this.mode, shaderSource;\n      if (!options.programCache.hasOwnProperty(cacheKey)) {\n        shaderSource = this.buildSource(this.mode);\n        options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n      }\n      return options.programCache[cacheKey];\n    },\n\n    /**\n     * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n     */\n    applyTo2d: function(options) {\n      var imageData = options.imageData,\n          data = imageData.data, iLen = data.length,\n          tr, tg, tb,\n          r, g, b,\n          source, alpha1 = 1 - this.alpha;\n\n      source = new fabric.Color(this.color).getSource();\n      tr = source[0] * this.alpha;\n      tg = source[1] * this.alpha;\n      tb = source[2] * this.alpha;\n\n      for (var i = 0; i < iLen; i += 4) {\n\n        r = data[i];\n        g = data[i + 1];\n        b = data[i + 2];\n\n        switch (this.mode) {\n          case 'multiply':\n            data[i] = r * tr / 255;\n            data[i + 1] = g * tg / 255;\n            data[i + 2] = b * tb / 255;\n            break;\n          case 'screen':\n            data[i] = 255 - (255 - r) * (255 - tr) / 255;\n            data[i + 1] = 255 - (255 - g) * (255 - tg) / 255;\n            data[i + 2] = 255 - (255 - b) * (255 - tb) / 255;\n            break;\n          case 'add':\n            data[i] = r + tr;\n            data[i + 1] = g + tg;\n            data[i + 2] = b + tb;\n            break;\n          case 'diff':\n          case 'difference':\n            data[i] = Math.abs(r - tr);\n            data[i + 1] = Math.abs(g - tg);\n            data[i + 2] = Math.abs(b - tb);\n            break;\n          case 'subtract':\n            data[i] = r - tr;\n            data[i + 1] = g - tg;\n            data[i + 2] = b - tb;\n            break;\n          case 'darken':\n            data[i] = Math.min(r, tr);\n            data[i + 1] = Math.min(g, tg);\n            data[i + 2] = Math.min(b, tb);\n            break;\n          case 'lighten':\n            data[i] = Math.max(r, tr);\n            data[i + 1] = Math.max(g, tg);\n            data[i + 2] = Math.max(b, tb);\n            break;\n          case 'overlay':\n            data[i] = tr < 128 ? (2 * r * tr / 255) : (255 - 2 * (255 - r) * (255 - tr) / 255);\n            data[i + 1] = tg < 128 ? (2 * g * tg / 255) : (255 - 2 * (255 - g) * (255 - tg) / 255);\n            data[i + 2] = tb < 128 ? (2 * b * tb / 255) : (255 - 2 * (255 - b) * (255 - tb) / 255);\n            break;\n          case 'exclusion':\n            data[i] = tr + r - ((2 * tr * r) / 255);\n            data[i + 1] = tg + g - ((2 * tg * g) / 255);\n            data[i + 2] = tb + b - ((2 * tb * b) / 255);\n            break;\n          case 'tint':\n            data[i] = tr + r * alpha1;\n            data[i + 1] = tg + g * alpha1;\n            data[i + 2] = tb + b * alpha1;\n        }\n      }\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uColor: gl.getUniformLocation(program, 'uColor'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      var source = new fabric.Color(this.color).getSource();\n      source[0] = this.alpha * source[0] / 255;\n      source[1] = this.alpha * source[1] / 255;\n      source[2] = this.alpha * source[2] / 255;\n      source[3] = this.alpha;\n      gl.uniform4fv(uniformLocations.uColor, source);\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @return {Object} Object representation of an instance\n     */\n    toObject: function() {\n      return {\n        type: this.type,\n        color: this.color,\n        mode: this.mode,\n        alpha: this.alpha\n      };\n    }\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.BlendColor} Instance of fabric.Image.filters.BlendColor\n   */\n  fabric.Image.filters.BlendColor.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n  'use strict';\n\n  var fabric = global.fabric,\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Image Blend filter class\n   * @class fabric.Image.filter.BlendImage\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @example\n   * var filter = new fabric.Image.filters.BlendColor({\n   *  color: '#000',\n   *  mode: 'multiply'\n   * });\n   *\n   * var filter = new fabric.Image.filters.BlendImage({\n   *  image: fabricImageObject,\n   *  mode: 'multiply',\n   *  alpha: 0.5\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   * canvas.renderAll();\n   */\n\n  filters.BlendImage = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.BlendImage.prototype */ {\n    type: 'BlendImage',\n\n    /**\n     * Color to make the blend operation with. default to a reddish color since black or white\n     * gives always strong result.\n     **/\n    image: null,\n\n    /**\n     * Blend mode for the filter (one of \"multiply\", \"mask\")\n     * @type String\n     * @default\n     **/\n    mode: 'multiply',\n\n    /**\n     * alpha value. represent the strength of the blend image operation.\n     * not implemented.\n     **/\n    alpha: 1,\n\n    vertexSource: 'attribute vec2 aPosition;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'varying vec2 vTexCoord2;\\n' +\n      'uniform mat3 uTransformMatrix;\\n' +\n      'void main() {\\n' +\n        'vTexCoord = aPosition;\\n' +\n        'vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\\n' +\n        'gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\\n' +\n      '}',\n\n    /**\n     * Fragment source for the Multiply program\n     */\n    fragmentSource: {\n      multiply: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform sampler2D uImage;\\n' +\n        'uniform vec4 uColor;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'varying vec2 vTexCoord2;\\n' +\n        'void main() {\\n' +\n          'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n          'vec4 color2 = texture2D(uImage, vTexCoord2);\\n' +\n          'color.rgba *= color2.rgba;\\n' +\n          'gl_FragColor = color;\\n' +\n        '}',\n      mask: 'precision highp float;\\n' +\n        'uniform sampler2D uTexture;\\n' +\n        'uniform sampler2D uImage;\\n' +\n        'uniform vec4 uColor;\\n' +\n        'varying vec2 vTexCoord;\\n' +\n        'varying vec2 vTexCoord2;\\n' +\n        'void main() {\\n' +\n          'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n          'vec4 color2 = texture2D(uImage, vTexCoord2);\\n' +\n          'color.a = color2.a;\\n' +\n          'gl_FragColor = color;\\n' +\n        '}',\n    },\n\n    /**\n     * Retrieves the cached shader.\n     * @param {Object} options\n     * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n     * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n     */\n    retrieveShader: function(options) {\n      var cacheKey = this.type + '_' + this.mode;\n      var shaderSource = this.fragmentSource[this.mode];\n      if (!options.programCache.hasOwnProperty(cacheKey)) {\n        options.programCache[cacheKey] = this.createProgram(options.context, shaderSource);\n      }\n      return options.programCache[cacheKey];\n    },\n\n    applyToWebGL: function(options) {\n      // load texture to blend.\n      var gl = options.context,\n          texture = this.createTexture(options.filterBackend, this.image);\n      this.bindAdditionalTexture(gl, texture, gl.TEXTURE1);\n      this.callSuper('applyToWebGL', options);\n      this.unbindAdditionalTexture(gl, gl.TEXTURE1);\n    },\n\n    createTexture: function(backend, image) {\n      return backend.getCachedTexture(image.cacheKey, image._element);\n    },\n\n    /**\n     * Calculate a transformMatrix to adapt the image to blend over\n     * @param {Object} options\n     * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n     * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n     */\n    calculateMatrix: function() {\n      var image = this.image,\n          width = image._element.width,\n          height = image._element.height;\n      return [\n        1 / image.scaleX, 0, 0,\n        0, 1 / image.scaleY, 0,\n        -image.left / width, -image.top / height, 1\n      ];\n    },\n\n    /**\n     * Apply the Blend operation to a Uint8ClampedArray representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n     */\n    applyTo2d: function(options) {\n      var imageData = options.imageData,\n          resources = options.filterBackend.resources,\n          data = imageData.data, iLen = data.length,\n          width = imageData.width,\n          height = imageData.height,\n          tr, tg, tb, ta,\n          r, g, b, a,\n          canvas1, context, image = this.image, blendData;\n\n      if (!resources.blendImage) {\n        resources.blendImage = fabric.util.createCanvasElement();\n      }\n      canvas1 = resources.blendImage;\n      context = canvas1.getContext('2d');\n      if (canvas1.width !== width || canvas1.height !== height) {\n        canvas1.width = width;\n        canvas1.height = height;\n      }\n      else {\n        context.clearRect(0, 0, width, height);\n      }\n      context.setTransform(image.scaleX, 0, 0, image.scaleY, image.left, image.top);\n      context.drawImage(image._element, 0, 0, width, height);\n      blendData = context.getImageData(0, 0, width, height).data;\n      for (var i = 0; i < iLen; i += 4) {\n\n        r = data[i];\n        g = data[i + 1];\n        b = data[i + 2];\n        a = data[i + 3];\n\n        tr = blendData[i];\n        tg = blendData[i + 1];\n        tb = blendData[i + 2];\n        ta = blendData[i + 3];\n\n        switch (this.mode) {\n          case 'multiply':\n            data[i] = r * tr / 255;\n            data[i + 1] = g * tg / 255;\n            data[i + 2] = b * tb / 255;\n            data[i + 3] = a * ta / 255;\n            break;\n          case 'mask':\n            data[i + 3] = ta;\n            break;\n        }\n      }\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uTransformMatrix: gl.getUniformLocation(program, 'uTransformMatrix'),\n        uImage: gl.getUniformLocation(program, 'uImage'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      var matrix = this.calculateMatrix();\n      gl.uniform1i(uniformLocations.uImage, 1); // texture unit 1.\n      gl.uniformMatrix3fv(uniformLocations.uTransformMatrix, false, matrix);\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @return {Object} Object representation of an instance\n     */\n    toObject: function() {\n      return {\n        type: this.type,\n        image: this.image && this.image.toObject(),\n        mode: this.mode,\n        alpha: this.alpha\n      };\n    }\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {function} callback to be invoked after filter creation\n   * @return {fabric.Image.filters.BlendImage} Instance of fabric.Image.filters.BlendImage\n   */\n  fabric.Image.filters.BlendImage.fromObject = function(object, callback) {\n    fabric.Image.fromObject(object.image, function(image) {\n      var options = fabric.util.object.clone(object);\n      options.image = image;\n      callback(new fabric.Image.filters.BlendImage(options));\n    });\n  };\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }), pow = Math.pow, floor = Math.floor,\n      sqrt = Math.sqrt, abs = Math.abs, round = Math.round, sin = Math.sin,\n      ceil = Math.ceil,\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Resize image filter class\n   * @class fabric.Image.filters.Resize\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Resize();\n   * object.filters.push(filter);\n   * object.applyFilters(canvas.renderAll.bind(canvas));\n   */\n  filters.Resize = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Resize.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Resize',\n\n    /**\n     * Resize type\n     * for webgl resizeType is just lanczos, for canvas2d can be:\n     * bilinear, hermite, sliceHack, lanczos.\n     * @param {String} resizeType\n     * @default\n     */\n    resizeType: 'hermite',\n\n    /**\n     * Scale factor for resizing, x axis\n     * @param {Number} scaleX\n     * @default\n     */\n    scaleX: 1,\n\n    /**\n     * Scale factor for resizing, y axis\n     * @param {Number} scaleY\n     * @default\n     */\n    scaleY: 1,\n\n    /**\n     * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n     * @param {Number} lanczosLobes\n     * @default\n     */\n    lanczosLobes: 3,\n\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uDelta: gl.getUniformLocation(program, 'uDelta'),\n        uTaps: gl.getUniformLocation(program, 'uTaps'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      gl.uniform2fv(uniformLocations.uDelta, this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height]);\n      gl.uniform1fv(uniformLocations.uTaps, this.taps);\n    },\n\n    /**\n     * Retrieves the cached shader.\n     * @param {Object} options\n     * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n     * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n     */\n    retrieveShader: function(options) {\n      var filterWindow = this.getFilterWindow(), cacheKey = this.type + '_' + filterWindow;\n      if (!options.programCache.hasOwnProperty(cacheKey)) {\n        var fragmentShader = this.generateShader(filterWindow);\n        options.programCache[cacheKey] = this.createProgram(options.context, fragmentShader);\n      }\n      return options.programCache[cacheKey];\n    },\n\n    getFilterWindow: function() {\n      var scale = this.tempScale;\n      return Math.ceil(this.lanczosLobes / scale);\n    },\n\n    getTaps: function() {\n      var lobeFunction = this.lanczosCreate(this.lanczosLobes), scale = this.tempScale,\n          filterWindow = this.getFilterWindow(), taps = new Array(filterWindow);\n      for (var i = 1; i <= filterWindow; i++) {\n        taps[i - 1] = lobeFunction(i * scale);\n      }\n      return taps;\n    },\n\n    /**\n     * Generate vertex and shader sources from the necessary steps numbers\n     * @param {Number} filterWindow\n     */\n    generateShader: function(filterWindow) {\n      var offsets = new Array(filterWindow),\n          fragmentShader = this.fragmentSourceTOP, filterWindow;\n\n      for (var i = 1; i <= filterWindow; i++) {\n        offsets[i - 1] = i + '.0 * uDelta';\n      }\n\n      fragmentShader += 'uniform float uTaps[' + filterWindow + '];\\n';\n      fragmentShader += 'void main() {\\n';\n      fragmentShader += '  vec4 color = texture2D(uTexture, vTexCoord);\\n';\n      fragmentShader += '  float sum = 1.0;\\n';\n\n      offsets.forEach(function(offset, i) {\n        fragmentShader += '  color += texture2D(uTexture, vTexCoord + ' + offset + ') * uTaps[' + i + '];\\n';\n        fragmentShader += '  color += texture2D(uTexture, vTexCoord - ' + offset + ') * uTaps[' + i + '];\\n';\n        fragmentShader += '  sum += 2.0 * uTaps[' + i + '];\\n';\n      });\n      fragmentShader += '  gl_FragColor = color / sum;\\n';\n      fragmentShader += '}';\n      return fragmentShader;\n    },\n\n    fragmentSourceTOP: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform vec2 uDelta;\\n' +\n      'varying vec2 vTexCoord;\\n',\n\n    /**\n     * Apply the resize filter to the image\n     * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n     *\n     * @param {Object} options\n     * @param {Number} options.passes The number of filters remaining to be executed\n     * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n     * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n     * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n     * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n     * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n     */\n    applyTo: function(options) {\n      if (options.webgl) {\n        options.passes++;\n        this.width = options.sourceWidth;\n        this.horizontal = true;\n        this.dW = Math.round(this.width * this.scaleX);\n        this.dH = options.sourceHeight;\n        this.tempScale = this.dW / this.width;\n        this.taps = this.getTaps();\n        options.destinationWidth = this.dW;\n        this._setupFrameBuffer(options);\n        this.applyToWebGL(options);\n        this._swapTextures(options);\n        options.sourceWidth = options.destinationWidth;\n\n        this.height = options.sourceHeight;\n        this.horizontal = false;\n        this.dH = Math.round(this.height * this.scaleY);\n        this.tempScale = this.dH / this.height;\n        this.taps = this.getTaps();\n        options.destinationHeight = this.dH;\n        this._setupFrameBuffer(options);\n        this.applyToWebGL(options);\n        this._swapTextures(options);\n        options.sourceHeight = options.destinationHeight;\n      }\n      else {\n        this.applyTo2d(options);\n      }\n    },\n\n    isNeutralState: function() {\n      return this.scaleX === 1 && this.scaleY === 1;\n    },\n\n    lanczosCreate: function(lobes) {\n      return function(x) {\n        if (x >= lobes || x <= -lobes) {\n          return 0.0;\n        }\n        if (x < 1.19209290E-07 && x > -1.19209290E-07) {\n          return 1.0;\n        }\n        x *= Math.PI;\n        var xx = x / lobes;\n        return (sin(x) / x) * sin(xx) / xx;\n      };\n    },\n\n    /**\n     * Applies filter to canvas element\n     * @memberOf fabric.Image.filters.Resize.prototype\n     * @param {Object} canvasEl Canvas element to apply filter to\n     * @param {Number} scaleX\n     * @param {Number} scaleY\n     */\n    applyTo2d: function(options) {\n      var imageData = options.imageData,\n          scaleX = this.scaleX,\n          scaleY = this.scaleY;\n\n      this.rcpScaleX = 1 / scaleX;\n      this.rcpScaleY = 1 / scaleY;\n\n      var oW = imageData.width, oH = imageData.height,\n          dW = round(oW * scaleX), dH = round(oH * scaleY),\n          newData;\n\n      if (this.resizeType === 'sliceHack') {\n        newData = this.sliceByTwo(options, oW, oH, dW, dH);\n      }\n      else if (this.resizeType === 'hermite') {\n        newData = this.hermiteFastResize(options, oW, oH, dW, dH);\n      }\n      else if (this.resizeType === 'bilinear') {\n        newData = this.bilinearFiltering(options, oW, oH, dW, dH);\n      }\n      else if (this.resizeType === 'lanczos') {\n        newData = this.lanczosResize(options, oW, oH, dW, dH);\n      }\n      options.imageData = newData;\n    },\n\n    /**\n     * Filter sliceByTwo\n     * @param {Object} canvasEl Canvas element to apply filter to\n     * @param {Number} oW Original Width\n     * @param {Number} oH Original Height\n     * @param {Number} dW Destination Width\n     * @param {Number} dH Destination Height\n     * @returns {ImageData}\n     */\n    sliceByTwo: function(options, oW, oH, dW, dH) {\n      var imageData = options.imageData,\n          mult = 0.5, doneW = false, doneH = false, stepW = oW * mult,\n          stepH = oH * mult, resources = fabric.filterBackend.resources,\n          tmpCanvas, ctx, sX = 0, sY = 0, dX = oW, dY = 0;\n      if (!resources.sliceByTwo) {\n        resources.sliceByTwo = document.createElement('canvas');\n      }\n      tmpCanvas = resources.sliceByTwo;\n      if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {\n        tmpCanvas.width = oW * 1.5;\n        tmpCanvas.height = oH;\n      }\n      ctx = tmpCanvas.getContext('2d');\n      ctx.clearRect(0, 0, oW * 1.5, oH);\n      ctx.putImageData(imageData, 0, 0);\n\n      dW = floor(dW);\n      dH = floor(dH);\n\n      while (!doneW || !doneH) {\n        oW = stepW;\n        oH = stepH;\n        if (dW < floor(stepW * mult)) {\n          stepW = floor(stepW * mult);\n        }\n        else {\n          stepW = dW;\n          doneW = true;\n        }\n        if (dH < floor(stepH * mult)) {\n          stepH = floor(stepH * mult);\n        }\n        else {\n          stepH = dH;\n          doneH = true;\n        }\n        ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);\n        sX = dX;\n        sY = dY;\n        dY += stepH;\n      }\n      return ctx.getImageData(sX, sY, dW, dH);\n    },\n\n    /**\n     * Filter lanczosResize\n     * @param {Object} canvasEl Canvas element to apply filter to\n     * @param {Number} oW Original Width\n     * @param {Number} oH Original Height\n     * @param {Number} dW Destination Width\n     * @param {Number} dH Destination Height\n     * @returns {ImageData}\n     */\n    lanczosResize: function(options, oW, oH, dW, dH) {\n\n      function process(u) {\n        var v, i, weight, idx, a, red, green,\n            blue, alpha, fX, fY;\n        center.x = (u + 0.5) * ratioX;\n        icenter.x = floor(center.x);\n        for (v = 0; v < dH; v++) {\n          center.y = (v + 0.5) * ratioY;\n          icenter.y = floor(center.y);\n          a = 0; red = 0; green = 0; blue = 0; alpha = 0;\n          for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {\n            if (i < 0 || i >= oW) {\n              continue;\n            }\n            fX = floor(1000 * abs(i - center.x));\n            if (!cacheLanc[fX]) {\n              cacheLanc[fX] = { };\n            }\n            for (var j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {\n              if (j < 0 || j >= oH) {\n                continue;\n              }\n              fY = floor(1000 * abs(j - center.y));\n              if (!cacheLanc[fX][fY]) {\n                cacheLanc[fX][fY] = lanczos(sqrt(pow(fX * rcpRatioX, 2) + pow(fY * rcpRatioY, 2)) / 1000);\n              }\n              weight = cacheLanc[fX][fY];\n              if (weight > 0) {\n                idx = (j * oW + i) * 4;\n                a += weight;\n                red += weight * srcData[idx];\n                green += weight * srcData[idx + 1];\n                blue += weight * srcData[idx + 2];\n                alpha += weight * srcData[idx + 3];\n              }\n            }\n          }\n          idx = (v * dW + u) * 4;\n          destData[idx] = red / a;\n          destData[idx + 1] = green / a;\n          destData[idx + 2] = blue / a;\n          destData[idx + 3] = alpha / a;\n        }\n\n        if (++u < dW) {\n          return process(u);\n        }\n        else {\n          return destImg;\n        }\n      }\n\n      var srcData = options.imageData.data,\n          destImg = options.ctx.createImageData(dW, dH),\n          destData = destImg.data,\n          lanczos = this.lanczosCreate(this.lanczosLobes),\n          ratioX = this.rcpScaleX, ratioY = this.rcpScaleY,\n          rcpRatioX = 2 / this.rcpScaleX, rcpRatioY = 2 / this.rcpScaleY,\n          range2X = ceil(ratioX * this.lanczosLobes / 2),\n          range2Y = ceil(ratioY * this.lanczosLobes / 2),\n          cacheLanc = { }, center = { }, icenter = { };\n\n      return process(0);\n    },\n\n    /**\n     * bilinearFiltering\n     * @param {Object} canvasEl Canvas element to apply filter to\n     * @param {Number} oW Original Width\n     * @param {Number} oH Original Height\n     * @param {Number} dW Destination Width\n     * @param {Number} dH Destination Height\n     * @returns {ImageData}\n     */\n    bilinearFiltering: function(options, oW, oH, dW, dH) {\n      var a, b, c, d, x, y, i, j, xDiff, yDiff, chnl,\n          color, offset = 0, origPix, ratioX = this.rcpScaleX,\n          ratioY = this.rcpScaleY,\n          w4 = 4 * (oW - 1), img = options.imageData,\n          pixels = img.data, destImage = options.ctx.createImageData(dW, dH),\n          destPixels = destImage.data;\n      for (i = 0; i < dH; i++) {\n        for (j = 0; j < dW; j++) {\n          x = floor(ratioX * j);\n          y = floor(ratioY * i);\n          xDiff = ratioX * j - x;\n          yDiff = ratioY * i - y;\n          origPix = 4 * (y * oW + x);\n\n          for (chnl = 0; chnl < 4; chnl++) {\n            a = pixels[origPix + chnl];\n            b = pixels[origPix + 4 + chnl];\n            c = pixels[origPix + w4 + chnl];\n            d = pixels[origPix + w4 + 4 + chnl];\n            color = a * (1 - xDiff) * (1 - yDiff) + b * xDiff * (1 - yDiff) +\n                    c * yDiff * (1 - xDiff) + d * xDiff * yDiff;\n            destPixels[offset++] = color;\n          }\n        }\n      }\n      return destImage;\n    },\n\n    /**\n     * hermiteFastResize\n     * @param {Object} canvasEl Canvas element to apply filter to\n     * @param {Number} oW Original Width\n     * @param {Number} oH Original Height\n     * @param {Number} dW Destination Width\n     * @param {Number} dH Destination Height\n     * @returns {ImageData}\n     */\n    hermiteFastResize: function(options, oW, oH, dW, dH) {\n      var ratioW = this.rcpScaleX, ratioH = this.rcpScaleY,\n          ratioWHalf = ceil(ratioW / 2),\n          ratioHHalf = ceil(ratioH / 2),\n          img = options.imageData, data = img.data,\n          img2 = options.ctx.createImageData(dW, dH), data2 = img2.data;\n      for (var j = 0; j < dH; j++) {\n        for (var i = 0; i < dW; i++) {\n          var x2 = (i + j * dW) * 4, weight = 0, weights = 0, weightsAlpha = 0,\n              gxR = 0, gxG = 0, gxB = 0, gxA = 0, centerY = (j + 0.5) * ratioH;\n          for (var yy = floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {\n            var dy = abs(centerY - (yy + 0.5)) / ratioHHalf,\n                centerX = (i + 0.5) * ratioW, w0 = dy * dy;\n            for (var xx = floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {\n              var dx = abs(centerX - (xx + 0.5)) / ratioWHalf,\n                  w = sqrt(w0 + dx * dx);\n              /* eslint-disable max-depth */\n              if (w > 1 && w < -1) {\n                continue;\n              }\n              //hermite filter\n              weight = 2 * w * w * w - 3 * w * w + 1;\n              if (weight > 0) {\n                dx = 4 * (xx + yy * oW);\n                //alpha\n                gxA += weight * data[dx + 3];\n                weightsAlpha += weight;\n                //colors\n                if (data[dx + 3] < 255) {\n                  weight = weight * data[dx + 3] / 250;\n                }\n                gxR += weight * data[dx];\n                gxG += weight * data[dx + 1];\n                gxB += weight * data[dx + 2];\n                weights += weight;\n              }\n              /* eslint-enable max-depth */\n            }\n          }\n          data2[x2] = gxR / weights;\n          data2[x2 + 1] = gxG / weights;\n          data2[x2 + 2] = gxB / weights;\n          data2[x2 + 3] = gxA / weightsAlpha;\n        }\n      }\n      return img2;\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @return {Object} Object representation of an instance\n     */\n    toObject: function() {\n      return {\n        type: this.type,\n        scaleX: this.scaleX,\n        scaleY: this.scaleY,\n        resizeType: this.resizeType,\n        lanczosLobes: this.lanczosLobes\n      };\n    }\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {Function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Resize} Instance of fabric.Image.filters.Resize\n   */\n  fabric.Image.filters.Resize.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Contrast filter class\n   * @class fabric.Image.filters.Contrast\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.Contrast#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Contrast({\n   *   contrast: 0.25\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   */\n  filters.Contrast = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Contrast.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Contrast',\n\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform float uContrast;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'void main() {\\n' +\n        'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n        'float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\\n' +\n        'color.rgb = contrastF * (color.rgb - 0.5) + 0.5;\\n' +\n        'gl_FragColor = color;\\n' +\n      '}',\n\n    /**\n     * contrast value, range from -1 to 1.\n     * @param {Number} contrast\n     * @default 0\n     */\n    contrast: 0,\n\n    mainParameter: 'contrast',\n\n    /**\n     * Constructor\n     * @memberOf fabric.Image.filters.Contrast.prototype\n     * @param {Object} [options] Options object\n     * @param {Number} [options.contrast=0] Value to contrast the image up (-1...1)\n     */\n\n    /**\n      * Apply the Contrast operation to a Uint8Array representing the pixels of an image.\n      *\n      * @param {Object} options\n      * @param {ImageData} options.imageData The Uint8Array to be filtered.\n      */\n    applyTo2d: function(options) {\n      if (this.contrast === 0) {\n        return;\n      }\n      var imageData = options.imageData, i, len,\n          data = imageData.data, len = data.length,\n          contrast = Math.floor(this.contrast * 255),\n          contrastF = 259 * (contrast + 255) / (255 * (259 - contrast));\n\n      for (i = 0; i < len; i += 4) {\n        data[i] = contrastF * (data[i] - 128) + 128;\n        data[i + 1] = contrastF * (data[i + 1] - 128) + 128;\n        data[i + 2] = contrastF * (data[i + 2] - 128) + 128;\n      }\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uContrast: gl.getUniformLocation(program, 'uContrast'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      gl.uniform1f(uniformLocations.uContrast, this.contrast);\n    },\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Contrast} Instance of fabric.Image.filters.Contrast\n   */\n  fabric.Image.filters.Contrast.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Saturate filter class\n   * @class fabric.Image.filters.Saturation\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.Saturation#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Saturation({\n   *   saturation: 1\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   */\n  filters.Saturation = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Saturation.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Saturation',\n\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform float uSaturation;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'void main() {\\n' +\n        'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n        'float rgMax = max(color.r, color.g);\\n' +\n        'float rgbMax = max(rgMax, color.b);\\n' +\n        'color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\\n' +\n        'color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\\n' +\n        'color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\\n' +\n        'gl_FragColor = color;\\n' +\n      '}',\n\n    /**\n     * Saturation value, from -1 to 1.\n     * Increases/decreases the color saturation.\n     * A value of 0 has no effect.\n     * \n     * @param {Number} saturation\n     * @default\n     */\n    saturation: 0,\n\n    mainParameter: 'saturation',\n\n    /**\n     * Constructor\n     * @memberOf fabric.Image.filters.Saturate.prototype\n     * @param {Object} [options] Options object\n     * @param {Number} [options.saturate=0] Value to saturate the image (-1...1)\n     */\n\n    /**\n     * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n     */\n    applyTo2d: function(options) {\n      if (this.saturation === 0) {\n        return;\n      }\n      var imageData = options.imageData,\n          data = imageData.data, len = data.length,\n          adjust = -this.saturation, i, max;\n\n      for (i = 0; i < len; i += 4) {\n        max = Math.max(data[i], data[i + 1], data[i + 2]);\n        data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n        data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n        data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n      }\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uSaturation: gl.getUniformLocation(program, 'uSaturation'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n    },\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {Function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Saturation} Instance of fabric.Image.filters.Saturate\n   */\n  fabric.Image.filters.Saturation.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Vibrance filter class\n   * @class fabric.Image.filters.Vibrance\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.Vibrance#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Vibrance({\n   *   vibrance: 1\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   */\n  filters.Vibrance = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Vibrance.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Vibrance',\n\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform float uVibrance;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'void main() {\\n' +\n        'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n        'float max = max(color.r, max(color.g, color.b));\\n' +\n        'float avg = (color.r + color.g + color.b) / 3.0;\\n' +\n        'float amt = (abs(max - avg) * 2.0) * uVibrance;\\n' +\n        'color.r += max != color.r ? (max - color.r) * amt : 0.00;\\n' +\n        'color.g += max != color.g ? (max - color.g) * amt : 0.00;\\n' +\n        'color.b += max != color.b ? (max - color.b) * amt : 0.00;\\n' +\n        'gl_FragColor = color;\\n' +\n      '}',\n\n    /**\n     * Vibrance value, from -1 to 1.\n     * Increases/decreases the saturation of more muted colors with less effect on saturated colors.\n     * A value of 0 has no effect.\n     * \n     * @param {Number} vibrance\n     * @default\n     */\n    vibrance: 0,\n\n    mainParameter: 'vibrance',\n\n    /**\n     * Constructor\n     * @memberOf fabric.Image.filters.Vibrance.prototype\n     * @param {Object} [options] Options object\n     * @param {Number} [options.vibrance=0] Vibrance value for the image (between -1 and 1)\n     */\n\n    /**\n     * Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n     */\n    applyTo2d: function(options) {\n      if (this.vibrance === 0) {\n        return;\n      }\n      var imageData = options.imageData,\n          data = imageData.data, len = data.length,\n          adjust = -this.vibrance, i, max, avg, amt;\n\n      for (i = 0; i < len; i += 4) {\n        max = Math.max(data[i], data[i + 1], data[i + 2]);\n        avg = (data[i] + data[i + 1] + data[i + 2]) / 3;\n        amt = ((Math.abs(max - avg) * 2 / 255) * adjust);\n        data[i] += max !== data[i] ? (max - data[i]) * amt : 0;\n        data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;\n        data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;\n      }\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uVibrance: gl.getUniformLocation(program, 'uVibrance'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);\n    },\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {Function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Vibrance} Instance of fabric.Image.filters.Vibrance\n   */\n  fabric.Image.filters.Vibrance.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Blur filter class\n   * @class fabric.Image.filters.Blur\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.Blur#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Blur({\n   *   blur: 0.5\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   * canvas.renderAll();\n   */\n  filters.Blur = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Blur.prototype */ {\n\n    type: 'Blur',\n\n    /*\n'gl_FragColor = vec4(0.0);',\n'gl_FragColor += texture2D(texture, vTexCoord + -7 * uDelta)*0.0044299121055113265;',\n'gl_FragColor += texture2D(texture, vTexCoord + -6 * uDelta)*0.00895781211794;',\n'gl_FragColor += texture2D(texture, vTexCoord + -5 * uDelta)*0.0215963866053;',\n'gl_FragColor += texture2D(texture, vTexCoord + -4 * uDelta)*0.0443683338718;',\n'gl_FragColor += texture2D(texture, vTexCoord + -3 * uDelta)*0.0776744219933;',\n'gl_FragColor += texture2D(texture, vTexCoord + -2 * uDelta)*0.115876621105;',\n'gl_FragColor += texture2D(texture, vTexCoord + -1 * uDelta)*0.147308056121;',\n'gl_FragColor += texture2D(texture, vTexCoord              )*0.159576912161;',\n'gl_FragColor += texture2D(texture, vTexCoord + 1 * uDelta)*0.147308056121;',\n'gl_FragColor += texture2D(texture, vTexCoord + 2 * uDelta)*0.115876621105;',\n'gl_FragColor += texture2D(texture, vTexCoord + 3 * uDelta)*0.0776744219933;',\n'gl_FragColor += texture2D(texture, vTexCoord + 4 * uDelta)*0.0443683338718;',\n'gl_FragColor += texture2D(texture, vTexCoord + 5 * uDelta)*0.0215963866053;',\n'gl_FragColor += texture2D(texture, vTexCoord + 6 * uDelta)*0.00895781211794;',\n'gl_FragColor += texture2D(texture, vTexCoord + 7 * uDelta)*0.0044299121055113265;',\n*/\n\n    /* eslint-disable max-len */\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform vec2 uDelta;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'const float nSamples = 15.0;\\n' +\n      'vec3 v3offset = vec3(12.9898, 78.233, 151.7182);\\n' +\n      'float random(vec3 scale) {\\n' +\n        /* use the fragment position for a different seed per-pixel */\n        'return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\\n' +\n      '}\\n' +\n      'void main() {\\n' +\n        'vec4 color = vec4(0.0);\\n' +\n        'float total = 0.0;\\n' +\n        'float offset = random(v3offset);\\n' +\n        'for (float t = -nSamples; t <= nSamples; t++) {\\n' +\n          'float percent = (t + offset - 0.5) / nSamples;\\n' +\n          'float weight = 1.0 - abs(percent);\\n' +\n          'color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\\n' +\n          'total += weight;\\n' +\n        '}\\n' +\n        'gl_FragColor = color / total;\\n' +\n      '}',\n    /* eslint-enable max-len */\n\n    /**\n     * blur value, in percentage of image dimensions.\n     * specific to keep the image blur constant at different resolutions\n     * range between 0 and 1.\n     * @type Number\n     * @default\n     */\n    blur: 0,\n\n    mainParameter: 'blur',\n\n    applyTo: function(options) {\n      if (options.webgl) {\n        // this aspectRatio is used to give the same blur to vertical and horizontal\n        this.aspectRatio = options.sourceWidth / options.sourceHeight;\n        options.passes++;\n        this._setupFrameBuffer(options);\n        this.horizontal = true;\n        this.applyToWebGL(options);\n        this._swapTextures(options);\n        this._setupFrameBuffer(options);\n        this.horizontal = false;\n        this.applyToWebGL(options);\n        this._swapTextures(options);\n      }\n      else {\n        this.applyTo2d(options);\n      }\n    },\n\n    applyTo2d: function(options) {\n      // paint canvasEl with current image data.\n      //options.ctx.putImageData(options.imageData, 0, 0);\n      options.imageData = this.simpleBlur(options);\n    },\n\n    simpleBlur: function(options) {\n      var resources = options.filterBackend.resources, canvas1, canvas2,\n          width = options.imageData.width,\n          height = options.imageData.height;\n\n      if (!resources.blurLayer1) {\n        resources.blurLayer1 = fabric.util.createCanvasElement();\n        resources.blurLayer2 = fabric.util.createCanvasElement();\n      }\n      canvas1 = resources.blurLayer1;\n      canvas2 = resources.blurLayer2;\n      if (canvas1.width !== width || canvas1.height !== height) {\n        canvas2.width = canvas1.width = width;\n        canvas2.height = canvas1.height = height;\n      }\n      var ctx1 = canvas1.getContext('2d'),\n          ctx2 = canvas2.getContext('2d'),\n          nSamples = 15,\n          random, percent, j, i,\n          blur = this.blur * 0.06 * 0.5;\n\n      // load first canvas\n      ctx1.putImageData(options.imageData, 0, 0);\n      ctx2.clearRect(0, 0, width, height);\n\n      for (i = -nSamples; i <= nSamples; i++) {\n        random = (Math.random() - 0.5) / 4;\n        percent = i / nSamples;\n        j = blur * percent * width + random;\n        ctx2.globalAlpha = 1 - Math.abs(percent);\n        ctx2.drawImage(canvas1, j, random);\n        ctx1.drawImage(canvas2, 0, 0);\n        ctx2.globalAlpha = 1;\n        ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n      }\n      for (i = -nSamples; i <= nSamples; i++) {\n        random = (Math.random() - 0.5) / 4;\n        percent = i / nSamples;\n        j = blur * percent * height + random;\n        ctx2.globalAlpha = 1 - Math.abs(percent);\n        ctx2.drawImage(canvas1, random, j);\n        ctx1.drawImage(canvas2, 0, 0);\n        ctx2.globalAlpha = 1;\n        ctx2.clearRect(0, 0, canvas2.width, canvas2.height);\n      }\n      options.ctx.drawImage(canvas1, 0, 0);\n      var newImageData = options.ctx.getImageData(0, 0, canvas1.width, canvas1.height);\n      ctx1.globalAlpha = 1;\n      ctx1.clearRect(0, 0, canvas1.width, canvas1.height);\n      return newImageData;\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        delta: gl.getUniformLocation(program, 'uDelta'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      var delta = this.chooseRightDelta();\n      gl.uniform2fv(uniformLocations.delta, delta);\n    },\n\n    /**\n     * choose right value of image percentage to blur with\n     * @returns {Array} a numeric array with delta values\n     */\n    chooseRightDelta: function() {\n      var blurScale = 1, delta = [0, 0], blur;\n      if (this.horizontal) {\n        if (this.aspectRatio > 1) {\n          // image is wide, i want to shrink radius horizontal\n          blurScale = 1 / this.aspectRatio;\n        }\n      }\n      else {\n        if (this.aspectRatio < 1) {\n          // image is tall, i want to shrink radius vertical\n          blurScale = this.aspectRatio;\n        }\n      }\n      blur = blurScale * this.blur * 0.12;\n      if (this.horizontal) {\n        delta[0] = blur;\n      }\n      else {\n        delta[1] = blur;\n      }\n      return delta;\n    },\n  });\n\n  /**\n   * Deserialize a JSON definition of a BlurFilter into a concrete instance.\n   */\n  filters.Blur.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * Gamma filter class\n   * @class fabric.Image.filters.Gamma\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.Gamma#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.Gamma({\n   *   gamma: [1, 0.5, 2.1]\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   */\n  filters.Gamma = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Gamma.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'Gamma',\n\n    fragmentSource: 'precision highp float;\\n' +\n      'uniform sampler2D uTexture;\\n' +\n      'uniform vec3 uGamma;\\n' +\n      'varying vec2 vTexCoord;\\n' +\n      'void main() {\\n' +\n        'vec4 color = texture2D(uTexture, vTexCoord);\\n' +\n        'vec3 correction = (1.0 / uGamma);\\n' +\n        'color.r = pow(color.r, correction.r);\\n' +\n        'color.g = pow(color.g, correction.g);\\n' +\n        'color.b = pow(color.b, correction.b);\\n' +\n        'gl_FragColor = color;\\n' +\n        'gl_FragColor.rgb *= color.a;\\n' +\n      '}',\n\n    /**\n     * Gamma array value, from 0.01 to 2.2.\n     * @param {Array} gamma\n     * @default\n     */\n    gamma: [1, 1, 1],\n\n    /**\n     * Describe the property that is the filter parameter\n     * @param {String} m\n     * @default\n     */\n    mainParameter: 'gamma',\n\n    /**\n     * Constructor\n     * @param {Object} [options] Options object\n     */\n    initialize: function(options) {\n      this.gamma = [1, 1, 1];\n      filters.BaseFilter.prototype.initialize.call(this, options);\n    },\n\n    /**\n     * Apply the Gamma operation to a Uint8Array representing the pixels of an image.\n     *\n     * @param {Object} options\n     * @param {ImageData} options.imageData The Uint8Array to be filtered.\n     */\n    applyTo2d: function(options) {\n      var imageData = options.imageData, data = imageData.data,\n          gamma = this.gamma, len = data.length,\n          rInv = 1 / gamma[0], gInv = 1 / gamma[1],\n          bInv = 1 / gamma[2], i;\n\n      if (!this.rVals) {\n        // eslint-disable-next-line\n        this.rVals = new Uint8Array(256);\n        // eslint-disable-next-line\n        this.gVals = new Uint8Array(256);\n        // eslint-disable-next-line\n        this.bVals = new Uint8Array(256);\n      }\n\n      // This is an optimization - pre-compute a look-up table for each color channel\n      // instead of performing these pow calls for each pixel in the image.\n      for (i = 0, len = 256; i < len; i++) {\n        this.rVals[i] = Math.pow(i / 255, rInv) * 255;\n        this.gVals[i] = Math.pow(i / 255, gInv) * 255;\n        this.bVals[i] = Math.pow(i / 255, bInv) * 255;\n      }\n      for (i = 0, len = data.length; i < len; i += 4) {\n        data[i] = this.rVals[data[i]];\n        data[i + 1] = this.gVals[data[i + 1]];\n        data[i + 2] = this.bVals[data[i + 2]];\n      }\n    },\n\n    /**\n     * Return WebGL uniform locations for this filter's shader.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {WebGLShaderProgram} program This filter's compiled shader program.\n     */\n    getUniformLocations: function(gl, program) {\n      return {\n        uGamma: gl.getUniformLocation(program, 'uGamma'),\n      };\n    },\n\n    /**\n     * Send data from this filter to its shader program's uniforms.\n     *\n     * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n     * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n     */\n    sendUniformData: function(gl, uniformLocations) {\n      gl.uniform3fv(uniformLocations.uGamma, this.gamma);\n    },\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.Gamma} Instance of fabric.Image.filters.Gamma\n   */\n  fabric.Image.filters.Gamma.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * A container class that knows how to apply a sequence of filters to an input image.\n   */\n  filters.Composed = createClass(filters.BaseFilter, /** @lends fabric.Image.filters.Composed.prototype */ {\n\n    type: 'Composed',\n\n    /**\n     * A non sparse array of filters to apply\n     */\n    subFilters: [],\n\n    /**\n     * Constructor\n     * @param {Object} [options] Options object\n     */\n    initialize: function(options) {\n      this.callSuper('initialize', options);\n      // create a new array instead mutating the prototype with push\n      this.subFilters = this.subFilters.slice(0);\n    },\n\n    /**\n     * Apply this container's filters to the input image provided.\n     *\n     * @param {Object} options\n     * @param {Number} options.passes The number of filters remaining to be applied.\n     */\n    applyTo: function(options) {\n      options.passes += this.subFilters.length - 1;\n      this.subFilters.forEach(function(filter) {\n        filter.applyTo(options);\n      });\n    },\n\n    /**\n     * Serialize this filter into JSON.\n     *\n     * @returns {Object} A JSON representation of this filter.\n     */\n    toObject: function() {\n      return fabric.util.object.extend(this.callSuper('toObject'), {\n        subFilters: this.subFilters.map(function(filter) { return filter.toObject(); }),\n      });\n    },\n\n    isNeutralState: function() {\n      return !this.subFilters.some(function(filter) { return !filter.isNeutralState(); });\n    }\n  });\n\n  /**\n   * Deserialize a JSON definition of a ComposedFilter into a concrete instance.\n   */\n  fabric.Image.filters.Composed.fromObject = function(object, callback) {\n    var filters = object.subFilters || [],\n        subFilters = filters.map(function(filter) {\n          return new fabric.Image.filters[filter.type](filter);\n        }),\n        instance = new fabric.Image.filters.Composed({ subFilters: subFilters });\n    callback && callback(instance);\n    return instance;\n  };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric  = global.fabric || (global.fabric = { }),\n      filters = fabric.Image.filters,\n      createClass = fabric.util.createClass;\n\n  /**\n   * HueRotation filter class\n   * @class fabric.Image.filters.HueRotation\n   * @memberOf fabric.Image.filters\n   * @extends fabric.Image.filters.BaseFilter\n   * @see {@link fabric.Image.filters.HueRotation#initialize} for constructor definition\n   * @see {@link http://fabricjs.com/image-filters|ImageFilters demo}\n   * @example\n   * var filter = new fabric.Image.filters.HueRotation({\n   *   rotation: -0.5\n   * });\n   * object.filters.push(filter);\n   * object.applyFilters();\n   */\n  filters.HueRotation = createClass(filters.ColorMatrix, /** @lends fabric.Image.filters.HueRotation.prototype */ {\n\n    /**\n     * Filter type\n     * @param {String} type\n     * @default\n     */\n    type: 'HueRotation',\n\n    /**\n     * HueRotation value, from -1 to 1.\n     * the unit is radians\n     * @param {Number} myParameter\n     * @default\n     */\n    rotation: 0,\n\n    /**\n     * Describe the property that is the filter parameter\n     * @param {String} m\n     * @default\n     */\n    mainParameter: 'rotation',\n\n    calculateMatrix: function() {\n      var rad = this.rotation * Math.PI, cos = fabric.util.cos(rad), sin = fabric.util.sin(rad),\n          aThird = 1 / 3, aThirdSqtSin = Math.sqrt(aThird) * sin, OneMinusCos = 1 - cos;\n      this.matrix = [\n        1, 0, 0, 0, 0,\n        0, 1, 0, 0, 0,\n        0, 0, 1, 0, 0,\n        0, 0, 0, 1, 0\n      ];\n      this.matrix[0] = cos + OneMinusCos / 3;\n      this.matrix[1] = aThird * OneMinusCos - aThirdSqtSin;\n      this.matrix[2] = aThird * OneMinusCos + aThirdSqtSin;\n      this.matrix[5] = aThird * OneMinusCos + aThirdSqtSin;\n      this.matrix[6] = cos + aThird * OneMinusCos;\n      this.matrix[7] = aThird * OneMinusCos - aThirdSqtSin;\n      this.matrix[10] = aThird * OneMinusCos - aThirdSqtSin;\n      this.matrix[11] = aThird * OneMinusCos + aThirdSqtSin;\n      this.matrix[12] = cos + aThird * OneMinusCos;\n    },\n\n    /**\n     * HueRotation isNeutralState implementation\n     * Used only in image applyFilters to discard filters that will not have an effect\n     * on the image\n     * @param {Object} options\n     **/\n    isNeutralState: function(options) {\n      this.calculateMatrix();\n      return filters.BaseFilter.prototype.isNeutralState.call(this, options);\n    },\n\n    /**\n     * Apply this filter to the input image data provided.\n     *\n     * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n     *\n     * @param {Object} options\n     * @param {Number} options.passes The number of filters remaining to be executed\n     * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n     * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n     * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n     * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n     * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n     */\n    applyTo: function(options) {\n      this.calculateMatrix();\n      filters.BaseFilter.prototype.applyTo.call(this, options);\n    },\n\n  });\n\n  /**\n   * Returns filter instance from an object representation\n   * @static\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] to be invoked after filter creation\n   * @return {fabric.Image.filters.HueRotation} Instance of fabric.Image.filters.HueRotation\n   */\n  fabric.Image.filters.HueRotation.fromObject = fabric.Image.filters.BaseFilter.fromObject;\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = { }),\n      clone = fabric.util.object.clone;\n\n  if (fabric.Text) {\n    fabric.warn('fabric.Text is already defined');\n    return;\n  }\n\n  var additionalProps =\n    ('fontFamily fontWeight fontSize text underline overline linethrough' +\n    ' textAlign fontStyle lineHeight textBackgroundColor charSpacing styles' +\n    ' direction path pathStartOffset pathSide pathAlign').split(' ');\n\n  /**\n   * Text class\n   * @class fabric.Text\n   * @extends fabric.Object\n   * @return {fabric.Text} thisArg\n   * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#text}\n   * @see {@link fabric.Text#initialize} for constructor definition\n   */\n  fabric.Text = fabric.util.createClass(fabric.Object, /** @lends fabric.Text.prototype */ {\n\n    /**\n     * Properties which when set cause object to change dimensions\n     * @type Array\n     * @private\n     */\n    _dimensionAffectingProps: [\n      'fontSize',\n      'fontWeight',\n      'fontFamily',\n      'fontStyle',\n      'lineHeight',\n      'text',\n      'charSpacing',\n      'textAlign',\n      'styles',\n      'path',\n      'pathStartOffset',\n      'pathSide',\n      'pathAlign'\n    ],\n\n    /**\n     * @private\n     */\n    _reNewline: /\\r?\\n/,\n\n    /**\n     * Use this regular expression to filter for whitespaces that is not a new line.\n     * Mostly used when text is 'justify' aligned.\n     * @private\n     */\n    _reSpacesAndTabs: /[ \\t\\r]/g,\n\n    /**\n     * Use this regular expression to filter for whitespace that is not a new line.\n     * Mostly used when text is 'justify' aligned.\n     * @private\n     */\n    _reSpaceAndTab: /[ \\t\\r]/,\n\n    /**\n     * Use this regular expression to filter consecutive groups of non spaces.\n     * Mostly used when text is 'justify' aligned.\n     * @private\n     */\n    _reWords: /\\S+/g,\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type:                 'text',\n\n    /**\n     * Font size (in pixels)\n     * @type Number\n     * @default\n     */\n    fontSize:             40,\n\n    /**\n     * Font weight (e.g. bold, normal, 400, 600, 800)\n     * @type {(Number|String)}\n     * @default\n     */\n    fontWeight:           'normal',\n\n    /**\n     * Font family\n     * @type String\n     * @default\n     */\n    fontFamily:           'Times New Roman',\n\n    /**\n     * Text decoration underline.\n     * @type Boolean\n     * @default\n     */\n    underline:       false,\n\n    /**\n     * Text decoration overline.\n     * @type Boolean\n     * @default\n     */\n    overline:       false,\n\n    /**\n     * Text decoration linethrough.\n     * @type Boolean\n     * @default\n     */\n    linethrough:       false,\n\n    /**\n     * Text alignment. Possible values: \"left\", \"center\", \"right\", \"justify\",\n     * \"justify-left\", \"justify-center\" or \"justify-right\".\n     * @type String\n     * @default\n     */\n    textAlign:            'left',\n\n    /**\n     * Font style . Possible values: \"\", \"normal\", \"italic\" or \"oblique\".\n     * @type String\n     * @default\n     */\n    fontStyle:            'normal',\n\n    /**\n     * Line height\n     * @type Number\n     * @default\n     */\n    lineHeight:           1.16,\n\n    /**\n     * Superscript schema object (minimum overlap)\n     * @type {Object}\n     * @default\n     */\n    superscript: {\n      size:      0.60, // fontSize factor\n      baseline: -0.35  // baseline-shift factor (upwards)\n    },\n\n    /**\n     * Subscript schema object (minimum overlap)\n     * @type {Object}\n     * @default\n     */\n    subscript: {\n      size:      0.60, // fontSize factor\n      baseline:  0.11  // baseline-shift factor (downwards)\n    },\n\n    /**\n     * Background color of text lines\n     * @type String\n     * @default\n     */\n    textBackgroundColor:  '',\n\n    /**\n     * List of properties to consider when checking if\n     * state of an object is changed ({@link fabric.Object#hasStateChanged})\n     * as well as for history (undo/redo) purposes\n     * @type Array\n     */\n    stateProperties: fabric.Object.prototype.stateProperties.concat(additionalProps),\n\n    /**\n     * List of properties to consider when checking if cache needs refresh\n     * @type Array\n     */\n    cacheProperties: fabric.Object.prototype.cacheProperties.concat(additionalProps),\n\n    /**\n     * When defined, an object is rendered via stroke and this property specifies its color.\n     * <b>Backwards incompatibility note:</b> This property was named \"strokeStyle\" until v1.1.6\n     * @type String\n     * @default\n     */\n    stroke:               null,\n\n    /**\n     * Shadow object representing shadow of this shape.\n     * <b>Backwards incompatibility note:</b> This property was named \"textShadow\" (String) until v1.2.11\n     * @type fabric.Shadow\n     * @default\n     */\n    shadow:               null,\n\n    /**\n     * fabric.Path that the text should follow.\n     * since 4.6.0 the path will be drawn automatically.\n     * if you want to make the path visible, give it a stroke and strokeWidth or fill value\n     * if you want it to be hidden, assign visible = false to the path.\n     * This feature is in BETA, and SVG import/export is not yet supported.\n     * @type fabric.Path\n     * @example\n     * var textPath = new fabric.Text('Text on a path', {\n     *     top: 150,\n     *     left: 150,\n     *     textAlign: 'center',\n     *     charSpacing: -50,\n     *     path: new fabric.Path('M 0 0 C 50 -100 150 -100 200 0', {\n     *         strokeWidth: 1,\n     *         visible: false\n     *     }),\n     *     pathSide: 'left',\n     *     pathStartOffset: 0\n     * });\n     * @default\n     */\n    path:               null,\n\n    /**\n     * Offset amount for text path starting position\n     * Only used when text has a path\n     * @type Number\n     * @default\n     */\n    pathStartOffset:               0,\n\n    /**\n     * Which side of the path the text should be drawn on.\n     * Only used when text has a path\n     * @type {String} 'left|right'\n     * @default\n     */\n    pathSide:               'left',\n\n    /**\n     * How text is aligned to the path. This property determines\n     * the perpendicular position of each character relative to the path.\n     * (one of \"baseline\", \"center\", \"ascender\", \"descender\")\n     * This feature is in BETA, and its behavior may change\n     * @type String\n     * @default\n     */\n    pathAlign:               'baseline',\n\n    /**\n     * @private\n     */\n    _fontSizeFraction: 0.222,\n\n    /**\n     * @private\n     */\n    offsets: {\n      underline: 0.10,\n      linethrough: -0.315,\n      overline: -0.88\n    },\n\n    /**\n     * Text Line proportion to font Size (in pixels)\n     * @type Number\n     * @default\n     */\n    _fontSizeMult:             1.13,\n\n    /**\n     * additional space between characters\n     * expressed in thousands of em unit\n     * @type Number\n     * @default\n     */\n    charSpacing:             0,\n\n    /**\n     * Object containing character styles - top-level properties -> line numbers,\n     * 2nd-level properties - character numbers\n     * @type Object\n     * @default\n     */\n    styles: null,\n\n    /**\n     * Reference to a context to measure text char or couple of chars\n     * the cacheContext of the canvas will be used or a freshly created one if the object is not on canvas\n     * once created it will be referenced on fabric._measuringContext to avoid creating a canvas for every\n     * text object created.\n     * @type {CanvasRenderingContext2D}\n     * @default\n     */\n    _measuringContext: null,\n\n    /**\n     * Baseline shift, styles only, keep at 0 for the main text object\n     * @type {Number}\n     * @default\n     */\n    deltaY: 0,\n\n    /**\n     * WARNING: EXPERIMENTAL. NOT SUPPORTED YET\n     * determine the direction of the text.\n     * This has to be set manually together with textAlign and originX for proper\n     * experience.\n     * some interesting link for the future\n     * https://www.w3.org/International/questions/qa-bidi-unicode-controls\n     * @since 4.5.0\n     * @type {String} 'ltr|rtl'\n     * @default\n     */\n    direction: 'ltr',\n\n    /**\n     * Array of properties that define a style unit (of 'styles').\n     * @type {Array}\n     * @default\n     */\n    _styleProperties: [\n      'stroke',\n      'strokeWidth',\n      'fill',\n      'fontFamily',\n      'fontSize',\n      'fontWeight',\n      'fontStyle',\n      'underline',\n      'overline',\n      'linethrough',\n      'deltaY',\n      'textBackgroundColor',\n    ],\n\n    /**\n     * contains characters bounding boxes\n     */\n    __charBounds: [],\n\n    /**\n     * use this size when measuring text. To avoid IE11 rounding errors\n     * @type {Number}\n     * @default\n     * @readonly\n     * @private\n     */\n    CACHE_FONT_SIZE: 400,\n\n    /**\n     * contains the min text width to avoid getting 0\n     * @type {Number}\n     * @default\n     */\n    MIN_TEXT_WIDTH: 2,\n\n    /**\n     * Constructor\n     * @param {String} text Text string\n     * @param {Object} [options] Options object\n     * @return {fabric.Text} thisArg\n     */\n    initialize: function(text, options) {\n      this.styles = options ? (options.styles || { }) : { };\n      this.text = text;\n      this.__skipDimension = true;\n      this.callSuper('initialize', options);\n      if (this.path) {\n        this.setPathInfo();\n      }\n      this.__skipDimension = false;\n      this.initDimensions();\n      this.setCoords();\n      this.setupState({ propertySet: '_dimensionAffectingProps' });\n    },\n\n    /**\n     * If text has a path, it will add the extra information needed\n     * for path and text calculations\n     * @return {fabric.Text} thisArg\n     */\n    setPathInfo: function() {\n      var path = this.path;\n      if (path) {\n        path.segmentsInfo = fabric.util.getPathSegmentsInfo(path.path);\n      }\n    },\n\n    /**\n     * Return a context for measurement of text string.\n     * if created it gets stored for reuse\n     * this is for internal use, please do not use it\n     * @private\n     * @param {String} text Text string\n     * @param {Object} [options] Options object\n     * @return {fabric.Text} thisArg\n     */\n    getMeasuringContext: function() {\n      // if we did not return we have to measure something.\n      if (!fabric._measuringContext) {\n        fabric._measuringContext = this.canvas && this.canvas.contextCache ||\n          fabric.util.createCanvasElement().getContext('2d');\n      }\n      return fabric._measuringContext;\n    },\n\n    /**\n     * @private\n     * Divides text into lines of text and lines of graphemes.\n     */\n    _splitText: function() {\n      var newLines = this._splitTextIntoLines(this.text);\n      this.textLines = newLines.lines;\n      this._textLines = newLines.graphemeLines;\n      this._unwrappedTextLines = newLines._unwrappedLines;\n      this._text = newLines.graphemeText;\n      return newLines;\n    },\n\n    /**\n     * Initialize or update text dimensions.\n     * Updates this.width and this.height with the proper values.\n     * Does not return dimensions.\n     */\n    initDimensions: function() {\n      if (this.__skipDimension) {\n        return;\n      }\n      this._splitText();\n      this._clearCache();\n      if (this.path) {\n        this.width = this.path.width;\n        this.height = this.path.height;\n      }\n      else {\n        this.width = this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH;\n        this.height = this.calcTextHeight();\n      }\n      if (this.textAlign.indexOf('justify') !== -1) {\n        // once text is measured we need to make space fatter to make justified text.\n        this.enlargeSpaces();\n      }\n      this.saveState({ propertySet: '_dimensionAffectingProps' });\n    },\n\n    /**\n     * Enlarge space boxes and shift the others\n     */\n    enlargeSpaces: function() {\n      var diffSpace, currentLineWidth, numberOfSpaces, accumulatedSpace, line, charBound, spaces;\n      for (var i = 0, len = this._textLines.length; i < len; i++) {\n        if (this.textAlign !== 'justify' && (i === len - 1 || this.isEndOfWrapping(i))) {\n          continue;\n        }\n        accumulatedSpace = 0;\n        line = this._textLines[i];\n        currentLineWidth = this.getLineWidth(i);\n        if (currentLineWidth < this.width && (spaces = this.textLines[i].match(this._reSpacesAndTabs))) {\n          numberOfSpaces = spaces.length;\n          diffSpace = (this.width - currentLineWidth) / numberOfSpaces;\n          for (var j = 0, jlen = line.length; j <= jlen; j++) {\n            charBound = this.__charBounds[i][j];\n            if (this._reSpaceAndTab.test(line[j])) {\n              charBound.width += diffSpace;\n              charBound.kernedWidth += diffSpace;\n              charBound.left += accumulatedSpace;\n              accumulatedSpace += diffSpace;\n            }\n            else {\n              charBound.left += accumulatedSpace;\n            }\n          }\n        }\n      }\n    },\n\n    /**\n     * Detect if the text line is ended with an hard break\n     * text and itext do not have wrapping, return false\n     * @return {Boolean}\n     */\n    isEndOfWrapping: function(lineIndex) {\n      return lineIndex === this._textLines.length - 1;\n    },\n\n    /**\n     * Detect if a line has a linebreak and so we need to account for it when moving\n     * and counting style.\n     * It return always for text and Itext.\n     * @return Number\n     */\n    missingNewlineOffset: function() {\n      return 1;\n    },\n\n    /**\n     * Returns string representation of an instance\n     * @return {String} String representation of text object\n     */\n    toString: function() {\n      return '#<fabric.Text (' + this.complexity() +\n        '): { \"text\": \"' + this.text + '\", \"fontFamily\": \"' + this.fontFamily + '\" }>';\n    },\n\n    /**\n     * Return the dimension and the zoom level needed to create a cache canvas\n     * big enough to host the object to be cached.\n     * @private\n     * @param {Object} dim.x width of object to be cached\n     * @param {Object} dim.y height of object to be cached\n     * @return {Object}.width width of canvas\n     * @return {Object}.height height of canvas\n     * @return {Object}.zoomX zoomX zoom value to unscale the canvas before drawing cache\n     * @return {Object}.zoomY zoomY zoom value to unscale the canvas before drawing cache\n     */\n    _getCacheCanvasDimensions: function() {\n      var dims = this.callSuper('_getCacheCanvasDimensions');\n      var fontSize = this.fontSize;\n      dims.width += fontSize * dims.zoomX;\n      dims.height += fontSize * dims.zoomY;\n      return dims;\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _render: function(ctx) {\n      var path = this.path;\n      path && !path.isNotVisible() && path._render(ctx);\n      this._setTextStyles(ctx);\n      this._renderTextLinesBackground(ctx);\n      this._renderTextDecoration(ctx, 'underline');\n      this._renderText(ctx);\n      this._renderTextDecoration(ctx, 'overline');\n      this._renderTextDecoration(ctx, 'linethrough');\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderText: function(ctx) {\n      if (this.paintFirst === 'stroke') {\n        this._renderTextStroke(ctx);\n        this._renderTextFill(ctx);\n      }\n      else {\n        this._renderTextFill(ctx);\n        this._renderTextStroke(ctx);\n      }\n    },\n\n    /**\n     * Set the font parameter of the context with the object properties or with charStyle\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {Object} [charStyle] object with font style properties\n     * @param {String} [charStyle.fontFamily] Font Family\n     * @param {Number} [charStyle.fontSize] Font size in pixels. ( without px suffix )\n     * @param {String} [charStyle.fontWeight] Font weight\n     * @param {String} [charStyle.fontStyle] Font style (italic|normal)\n     */\n    _setTextStyles: function(ctx, charStyle, forMeasuring) {\n      ctx.textBaseline = 'alphabetical';\n      if (this.path) {\n        switch (this.pathAlign) {\n          case 'center':\n            ctx.textBaseline = 'middle';\n            break;\n          case 'ascender':\n            ctx.textBaseline = 'top';\n            break;\n          case 'descender':\n            ctx.textBaseline = 'bottom';\n            break;\n        }\n      }\n      ctx.font = this._getFontDeclaration(charStyle, forMeasuring);\n    },\n\n    /**\n     * calculate and return the text Width measuring each line.\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @return {Number} Maximum width of fabric.Text object\n     */\n    calcTextWidth: function() {\n      var maxWidth = this.getLineWidth(0);\n\n      for (var i = 1, len = this._textLines.length; i < len; i++) {\n        var currentLineWidth = this.getLineWidth(i);\n        if (currentLineWidth > maxWidth) {\n          maxWidth = currentLineWidth;\n        }\n      }\n      return maxWidth;\n    },\n\n    /**\n     * @private\n     * @param {String} method Method name (\"fillText\" or \"strokeText\")\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {String} line Text to render\n     * @param {Number} left Left position of text\n     * @param {Number} top Top position of text\n     * @param {Number} lineIndex Index of a line in a text\n     */\n    _renderTextLine: function(method, ctx, line, left, top, lineIndex) {\n      this._renderChars(method, ctx, line, left, top, lineIndex);\n    },\n\n    /**\n     * Renders the text background for lines, taking care of style\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderTextLinesBackground: function(ctx) {\n      if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor')) {\n        return;\n      }\n      var heightOfLine,\n          lineLeftOffset, originalFill = ctx.fillStyle,\n          line, lastColor,\n          leftOffset = this._getLeftOffset(),\n          lineTopOffset = this._getTopOffset(),\n          boxStart = 0, boxWidth = 0, charBox, currentColor, path = this.path,\n          drawStart;\n\n      for (var i = 0, len = this._textLines.length; i < len; i++) {\n        heightOfLine = this.getHeightOfLine(i);\n        if (!this.textBackgroundColor && !this.styleHas('textBackgroundColor', i)) {\n          lineTopOffset += heightOfLine;\n          continue;\n        }\n        line = this._textLines[i];\n        lineLeftOffset = this._getLineLeftOffset(i);\n        boxWidth = 0;\n        boxStart = 0;\n        lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n        for (var j = 0, jlen = line.length; j < jlen; j++) {\n          charBox = this.__charBounds[i][j];\n          currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n          if (path) {\n            ctx.save();\n            ctx.translate(charBox.renderLeft, charBox.renderTop);\n            ctx.rotate(charBox.angle);\n            ctx.fillStyle = currentColor;\n            currentColor && ctx.fillRect(\n              -charBox.width / 2,\n              -heightOfLine / this.lineHeight * (1 - this._fontSizeFraction),\n              charBox.width,\n              heightOfLine / this.lineHeight\n            );\n            ctx.restore();\n          }\n          else if (currentColor !== lastColor) {\n            drawStart = leftOffset + lineLeftOffset + boxStart;\n            if (this.direction === 'rtl') {\n              drawStart = this.width - drawStart - boxWidth;\n            }\n            ctx.fillStyle = lastColor;\n            lastColor && ctx.fillRect(\n              drawStart,\n              lineTopOffset,\n              boxWidth,\n              heightOfLine / this.lineHeight\n            );\n            boxStart = charBox.left;\n            boxWidth = charBox.width;\n            lastColor = currentColor;\n          }\n          else {\n            boxWidth += charBox.kernedWidth;\n          }\n        }\n        if (currentColor && !path) {\n          drawStart = leftOffset + lineLeftOffset + boxStart;\n          if (this.direction === 'rtl') {\n            drawStart = this.width - drawStart - boxWidth;\n          }\n          ctx.fillStyle = currentColor;\n          ctx.fillRect(\n            drawStart,\n            lineTopOffset,\n            boxWidth,\n            heightOfLine / this.lineHeight\n          );\n        }\n        lineTopOffset += heightOfLine;\n      }\n      ctx.fillStyle = originalFill;\n      // if there is text background color no\n      // other shadows should be casted\n      this._removeShadow(ctx);\n    },\n\n    /**\n     * @private\n     * @param {Object} decl style declaration for cache\n     * @param {String} decl.fontFamily fontFamily\n     * @param {String} decl.fontStyle fontStyle\n     * @param {String} decl.fontWeight fontWeight\n     * @return {Object} reference to cache\n     */\n    getFontCache: function(decl) {\n      var fontFamily = decl.fontFamily.toLowerCase();\n      if (!fabric.charWidthsCache[fontFamily]) {\n        fabric.charWidthsCache[fontFamily] = { };\n      }\n      var cache = fabric.charWidthsCache[fontFamily],\n          cacheProp = decl.fontStyle.toLowerCase() + '_' + (decl.fontWeight + '').toLowerCase();\n      if (!cache[cacheProp]) {\n        cache[cacheProp] = { };\n      }\n      return cache[cacheProp];\n    },\n\n    /**\n     * measure and return the width of a single character.\n     * possibly overridden to accommodate different measure logic or\n     * to hook some external lib for character measurement\n     * @private\n     * @param {String} _char, char to be measured\n     * @param {Object} charStyle style of char to be measured\n     * @param {String} [previousChar] previous char\n     * @param {Object} [prevCharStyle] style of previous char\n     */\n    _measureChar: function(_char, charStyle, previousChar, prevCharStyle) {\n      // first i try to return from cache\n      var fontCache = this.getFontCache(charStyle), fontDeclaration = this._getFontDeclaration(charStyle),\n          previousFontDeclaration = this._getFontDeclaration(prevCharStyle), couple = previousChar + _char,\n          stylesAreEqual = fontDeclaration === previousFontDeclaration, width, coupleWidth, previousWidth,\n          fontMultiplier = charStyle.fontSize / this.CACHE_FONT_SIZE, kernedWidth;\n\n      if (previousChar && fontCache[previousChar] !== undefined) {\n        previousWidth = fontCache[previousChar];\n      }\n      if (fontCache[_char] !== undefined) {\n        kernedWidth = width = fontCache[_char];\n      }\n      if (stylesAreEqual && fontCache[couple] !== undefined) {\n        coupleWidth = fontCache[couple];\n        kernedWidth = coupleWidth - previousWidth;\n      }\n      if (width === undefined || previousWidth === undefined || coupleWidth === undefined) {\n        var ctx = this.getMeasuringContext();\n        // send a TRUE to specify measuring font size CACHE_FONT_SIZE\n        this._setTextStyles(ctx, charStyle, true);\n      }\n      if (width === undefined) {\n        kernedWidth = width = ctx.measureText(_char).width;\n        fontCache[_char] = width;\n      }\n      if (previousWidth === undefined && stylesAreEqual && previousChar) {\n        previousWidth = ctx.measureText(previousChar).width;\n        fontCache[previousChar] = previousWidth;\n      }\n      if (stylesAreEqual && coupleWidth === undefined) {\n        // we can measure the kerning couple and subtract the width of the previous character\n        coupleWidth = ctx.measureText(couple).width;\n        fontCache[couple] = coupleWidth;\n        kernedWidth = coupleWidth - previousWidth;\n      }\n      return { width: width * fontMultiplier, kernedWidth: kernedWidth * fontMultiplier };\n    },\n\n    /**\n     * Computes height of character at given position\n     * @param {Number} line the line index number\n     * @param {Number} _char the character index number\n     * @return {Number} fontSize of the character\n     */\n    getHeightOfChar: function(line, _char) {\n      return this.getValueOfPropertyAt(line, _char, 'fontSize');\n    },\n\n    /**\n     * measure a text line measuring all characters.\n     * @param {Number} lineIndex line number\n     * @return {Number} Line width\n     */\n    measureLine: function(lineIndex) {\n      var lineInfo = this._measureLine(lineIndex);\n      if (this.charSpacing !== 0) {\n        lineInfo.width -= this._getWidthOfCharSpacing();\n      }\n      if (lineInfo.width < 0) {\n        lineInfo.width = 0;\n      }\n      return lineInfo;\n    },\n\n    /**\n     * measure every grapheme of a line, populating __charBounds\n     * @param {Number} lineIndex\n     * @return {Object} object.width total width of characters\n     * @return {Object} object.widthOfSpaces length of chars that match this._reSpacesAndTabs\n     */\n    _measureLine: function(lineIndex) {\n      var width = 0, i, grapheme, line = this._textLines[lineIndex], prevGrapheme,\n          graphemeInfo, numOfSpaces = 0, lineBounds = new Array(line.length),\n          positionInPath = 0, startingPoint, totalPathLength, path = this.path,\n          reverse = this.pathSide === 'right';\n\n      this.__charBounds[lineIndex] = lineBounds;\n      for (i = 0; i < line.length; i++) {\n        grapheme = line[i];\n        graphemeInfo = this._getGraphemeBox(grapheme, lineIndex, i, prevGrapheme);\n        lineBounds[i] = graphemeInfo;\n        width += graphemeInfo.kernedWidth;\n        prevGrapheme = grapheme;\n      }\n      // this latest bound box represent the last character of the line\n      // to simplify cursor handling in interactive mode.\n      lineBounds[i] = {\n        left: graphemeInfo ? graphemeInfo.left + graphemeInfo.width : 0,\n        width: 0,\n        kernedWidth: 0,\n        height: this.fontSize\n      };\n      if (path) {\n        totalPathLength = path.segmentsInfo[path.segmentsInfo.length - 1].length;\n        startingPoint = fabric.util.getPointOnPath(path.path, 0, path.segmentsInfo);\n        startingPoint.x += path.pathOffset.x;\n        startingPoint.y += path.pathOffset.y;\n        switch (this.textAlign) {\n          case 'left':\n            positionInPath = reverse ? (totalPathLength - width) : 0;\n            break;\n          case 'center':\n            positionInPath = (totalPathLength - width) / 2;\n            break;\n          case 'right':\n            positionInPath = reverse ? 0 : (totalPathLength - width);\n            break;\n          //todo - add support for justify\n        }\n        positionInPath += this.pathStartOffset * (reverse ? -1 : 1);\n        for (i = reverse ? line.length - 1 : 0;\n          reverse ? i >= 0 : i < line.length;\n          reverse ? i-- : i++) {\n          graphemeInfo = lineBounds[i];\n          if (positionInPath > totalPathLength) {\n            positionInPath %= totalPathLength;\n          }\n          else if (positionInPath < 0) {\n            positionInPath += totalPathLength;\n          }\n          // it would probably much faster to send all the grapheme position for a line\n          // and calculate path position/angle at once.\n          this._setGraphemeOnPath(positionInPath, graphemeInfo, startingPoint);\n          positionInPath += graphemeInfo.kernedWidth;\n        }\n      }\n      return { width: width, numOfSpaces: numOfSpaces };\n    },\n\n    /**\n     * Calculate the angle  and the left,top position of the char that follow a path.\n     * It appends it to graphemeInfo to be reused later at rendering\n     * @private\n     * @param {Number} positionInPath to be measured\n     * @param {Object} graphemeInfo current grapheme box information\n     * @param {Object} startingPoint position of the point\n     */\n    _setGraphemeOnPath: function(positionInPath, graphemeInfo, startingPoint) {\n      var centerPosition = positionInPath + graphemeInfo.kernedWidth / 2,\n          path = this.path;\n\n      // we are at currentPositionOnPath. we want to know what point on the path is.\n      var info = fabric.util.getPointOnPath(path.path, centerPosition, path.segmentsInfo);\n      graphemeInfo.renderLeft = info.x - startingPoint.x;\n      graphemeInfo.renderTop = info.y - startingPoint.y;\n      graphemeInfo.angle = info.angle + (this.pathSide ===  'right' ? Math.PI : 0);\n    },\n\n    /**\n     * Measure and return the info of a single grapheme.\n     * needs the the info of previous graphemes already filled\n     * @private\n     * @param {String} grapheme to be measured\n     * @param {Number} lineIndex index of the line where the char is\n     * @param {Number} charIndex position in the line\n     * @param {String} [prevGrapheme] character preceding the one to be measured\n     */\n    _getGraphemeBox: function(grapheme, lineIndex, charIndex, prevGrapheme, skipLeft) {\n      var style = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n          prevStyle = prevGrapheme ? this.getCompleteStyleDeclaration(lineIndex, charIndex - 1) : { },\n          info = this._measureChar(grapheme, style, prevGrapheme, prevStyle),\n          kernedWidth = info.kernedWidth,\n          width = info.width, charSpacing;\n\n      if (this.charSpacing !== 0) {\n        charSpacing = this._getWidthOfCharSpacing();\n        width += charSpacing;\n        kernedWidth += charSpacing;\n      }\n\n      var box = {\n        width: width,\n        left: 0,\n        height: style.fontSize,\n        kernedWidth: kernedWidth,\n        deltaY: style.deltaY,\n      };\n      if (charIndex > 0 && !skipLeft) {\n        var previousBox = this.__charBounds[lineIndex][charIndex - 1];\n        box.left = previousBox.left + previousBox.width + info.kernedWidth - info.width;\n      }\n      return box;\n    },\n\n    /**\n     * Calculate height of line at 'lineIndex'\n     * @param {Number} lineIndex index of line to calculate\n     * @return {Number}\n     */\n    getHeightOfLine: function(lineIndex) {\n      if (this.__lineHeights[lineIndex]) {\n        return this.__lineHeights[lineIndex];\n      }\n\n      var line = this._textLines[lineIndex],\n          // char 0 is measured before the line cycle because it nneds to char\n          // emptylines\n          maxHeight = this.getHeightOfChar(lineIndex, 0);\n      for (var i = 1, len = line.length; i < len; i++) {\n        maxHeight = Math.max(this.getHeightOfChar(lineIndex, i), maxHeight);\n      }\n\n      return this.__lineHeights[lineIndex] = maxHeight * this.lineHeight * this._fontSizeMult;\n    },\n\n    /**\n     * Calculate text box height\n     */\n    calcTextHeight: function() {\n      var lineHeight, height = 0;\n      for (var i = 0, len = this._textLines.length; i < len; i++) {\n        lineHeight = this.getHeightOfLine(i);\n        height += (i === len - 1 ? lineHeight / this.lineHeight : lineHeight);\n      }\n      return height;\n    },\n\n    /**\n     * @private\n     * @return {Number} Left offset\n     */\n    _getLeftOffset: function() {\n      return this.direction === 'ltr' ? -this.width / 2 : this.width / 2;\n    },\n\n    /**\n     * @private\n     * @return {Number} Top offset\n     */\n    _getTopOffset: function() {\n      return -this.height / 2;\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {String} method Method name (\"fillText\" or \"strokeText\")\n     */\n    _renderTextCommon: function(ctx, method) {\n      ctx.save();\n      var lineHeights = 0, left = this._getLeftOffset(), top = this._getTopOffset();\n      for (var i = 0, len = this._textLines.length; i < len; i++) {\n        var heightOfLine = this.getHeightOfLine(i),\n            maxHeight = heightOfLine / this.lineHeight,\n            leftOffset = this._getLineLeftOffset(i);\n        this._renderTextLine(\n          method,\n          ctx,\n          this._textLines[i],\n          left + leftOffset,\n          top + lineHeights + maxHeight,\n          i\n        );\n        lineHeights += heightOfLine;\n      }\n      ctx.restore();\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderTextFill: function(ctx) {\n      if (!this.fill && !this.styleHas('fill')) {\n        return;\n      }\n\n      this._renderTextCommon(ctx, 'fillText');\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderTextStroke: function(ctx) {\n      if ((!this.stroke || this.strokeWidth === 0) && this.isEmptyStyles()) {\n        return;\n      }\n\n      if (this.shadow && !this.shadow.affectStroke) {\n        this._removeShadow(ctx);\n      }\n\n      ctx.save();\n      this._setLineDash(ctx, this.strokeDashArray);\n      ctx.beginPath();\n      this._renderTextCommon(ctx, 'strokeText');\n      ctx.closePath();\n      ctx.restore();\n    },\n\n    /**\n     * @private\n     * @param {String} method fillText or strokeText.\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {Array} line Content of the line, splitted in an array by grapheme\n     * @param {Number} left\n     * @param {Number} top\n     * @param {Number} lineIndex\n     */\n    _renderChars: function(method, ctx, line, left, top, lineIndex) {\n      // set proper line offset\n      var lineHeight = this.getHeightOfLine(lineIndex),\n          isJustify = this.textAlign.indexOf('justify') !== -1,\n          actualStyle,\n          nextStyle,\n          charsToRender = '',\n          charBox,\n          boxWidth = 0,\n          timeToRender,\n          path = this.path,\n          shortCut = !isJustify && this.charSpacing === 0 && this.isEmptyStyles(lineIndex) && !path,\n          isLtr = this.direction === 'ltr', sign = this.direction === 'ltr' ? 1 : -1,\n          drawingLeft, currentDirection = ctx.canvas.getAttribute('dir');\n      ctx.save();\n      if (currentDirection !== this.direction) {\n        ctx.canvas.setAttribute('dir', isLtr ? 'ltr' : 'rtl');\n        ctx.direction = isLtr ? 'ltr' : 'rtl';\n        ctx.textAlign = isLtr ? 'left' : 'right';\n      }\n      top -= lineHeight * this._fontSizeFraction / this.lineHeight;\n      if (shortCut) {\n        // render all the line in one pass without checking\n        // drawingLeft = isLtr ? left : left - this.getLineWidth(lineIndex);\n        this._renderChar(method, ctx, lineIndex, 0, line.join(''), left, top, lineHeight);\n        ctx.restore();\n        return;\n      }\n      for (var i = 0, len = line.length - 1; i <= len; i++) {\n        timeToRender = i === len || this.charSpacing || path;\n        charsToRender += line[i];\n        charBox = this.__charBounds[lineIndex][i];\n        if (boxWidth === 0) {\n          left += sign * (charBox.kernedWidth - charBox.width);\n          boxWidth += charBox.width;\n        }\n        else {\n          boxWidth += charBox.kernedWidth;\n        }\n        if (isJustify && !timeToRender) {\n          if (this._reSpaceAndTab.test(line[i])) {\n            timeToRender = true;\n          }\n        }\n        if (!timeToRender) {\n          // if we have charSpacing, we render char by char\n          actualStyle = actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n          nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n          timeToRender = fabric.util.hasStyleChanged(actualStyle, nextStyle, false);\n        }\n        if (timeToRender) {\n          if (path) {\n            ctx.save();\n            ctx.translate(charBox.renderLeft, charBox.renderTop);\n            ctx.rotate(charBox.angle);\n            this._renderChar(method, ctx, lineIndex, i, charsToRender, -boxWidth / 2, 0, lineHeight);\n            ctx.restore();\n          }\n          else {\n            drawingLeft = left;\n            this._renderChar(method, ctx, lineIndex, i, charsToRender, drawingLeft, top, lineHeight);\n          }\n          charsToRender = '';\n          actualStyle = nextStyle;\n          left += sign * boxWidth;\n          boxWidth = 0;\n        }\n      }\n      ctx.restore();\n    },\n\n    /**\n     * This function try to patch the missing gradientTransform on canvas gradients.\n     * transforming a context to transform the gradient, is going to transform the stroke too.\n     * we want to transform the gradient but not the stroke operation, so we create\n     * a transformed gradient on a pattern and then we use the pattern instead of the gradient.\n     * this method has drawbacks: is slow, is in low resolution, needs a patch for when the size\n     * is limited.\n     * @private\n     * @param {fabric.Gradient} filler a fabric gradient instance\n     * @return {CanvasPattern} a pattern to use as fill/stroke style\n     */\n    _applyPatternGradientTransformText: function(filler) {\n      var pCanvas = fabric.util.createCanvasElement(), pCtx,\n          // TODO: verify compatibility with strokeUniform\n          width = this.width + this.strokeWidth, height = this.height + this.strokeWidth;\n      pCanvas.width = width;\n      pCanvas.height = height;\n      pCtx = pCanvas.getContext('2d');\n      pCtx.beginPath(); pCtx.moveTo(0, 0); pCtx.lineTo(width, 0); pCtx.lineTo(width, height);\n      pCtx.lineTo(0, height); pCtx.closePath();\n      pCtx.translate(width / 2, height / 2);\n      pCtx.fillStyle = filler.toLive(pCtx);\n      this._applyPatternGradientTransform(pCtx, filler);\n      pCtx.fill();\n      return pCtx.createPattern(pCanvas, 'no-repeat');\n    },\n\n    handleFiller: function(ctx, property, filler) {\n      var offsetX, offsetY;\n      if (filler.toLive) {\n        if (filler.gradientUnits === 'percentage' || filler.gradientTransform || filler.patternTransform) {\n          // need to transform gradient in a pattern.\n          // this is a slow process. If you are hitting this codepath, and the object\n          // is not using caching, you should consider switching it on.\n          // we need a canvas as big as the current object caching canvas.\n          offsetX = -this.width / 2;\n          offsetY = -this.height / 2;\n          ctx.translate(offsetX, offsetY);\n          ctx[property] = this._applyPatternGradientTransformText(filler);\n          return { offsetX: offsetX, offsetY: offsetY };\n        }\n        else {\n          // is a simple gradient or pattern\n          ctx[property] = filler.toLive(ctx, this);\n          return this._applyPatternGradientTransform(ctx, filler);\n        }\n      }\n      else {\n        // is a color\n        ctx[property] = filler;\n      }\n      return { offsetX: 0, offsetY: 0 };\n    },\n\n    _setStrokeStyles: function(ctx, decl) {\n      ctx.lineWidth = decl.strokeWidth;\n      ctx.lineCap = this.strokeLineCap;\n      ctx.lineDashOffset = this.strokeDashOffset;\n      ctx.lineJoin = this.strokeLineJoin;\n      ctx.miterLimit = this.strokeMiterLimit;\n      return this.handleFiller(ctx, 'strokeStyle', decl.stroke);\n    },\n\n    _setFillStyles: function(ctx, decl) {\n      return this.handleFiller(ctx, 'fillStyle', decl.fill);\n    },\n\n    /**\n     * @private\n     * @param {String} method\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     * @param {Number} lineIndex\n     * @param {Number} charIndex\n     * @param {String} _char\n     * @param {Number} left Left coordinate\n     * @param {Number} top Top coordinate\n     * @param {Number} lineHeight Height of the line\n     */\n    _renderChar: function(method, ctx, lineIndex, charIndex, _char, left, top) {\n      var decl = this._getStyleDeclaration(lineIndex, charIndex),\n          fullDecl = this.getCompleteStyleDeclaration(lineIndex, charIndex),\n          shouldFill = method === 'fillText' && fullDecl.fill,\n          shouldStroke = method === 'strokeText' && fullDecl.stroke && fullDecl.strokeWidth,\n          fillOffsets, strokeOffsets;\n\n      if (!shouldStroke && !shouldFill) {\n        return;\n      }\n      ctx.save();\n\n      shouldFill && (fillOffsets = this._setFillStyles(ctx, fullDecl));\n      shouldStroke && (strokeOffsets = this._setStrokeStyles(ctx, fullDecl));\n\n      ctx.font = this._getFontDeclaration(fullDecl);\n\n\n      if (decl && decl.textBackgroundColor) {\n        this._removeShadow(ctx);\n      }\n      if (decl && decl.deltaY) {\n        top += decl.deltaY;\n      }\n      shouldFill && ctx.fillText(_char, left - fillOffsets.offsetX, top - fillOffsets.offsetY);\n      shouldStroke && ctx.strokeText(_char, left - strokeOffsets.offsetX, top - strokeOffsets.offsetY);\n      ctx.restore();\n    },\n\n    /**\n     * Turns the character into a 'superior figure' (i.e. 'superscript')\n     * @param {Number} start selection start\n     * @param {Number} end selection end\n     * @returns {fabric.Text} thisArg\n     * @chainable\n     */\n    setSuperscript: function(start, end) {\n      return this._setScript(start, end, this.superscript);\n    },\n\n    /**\n     * Turns the character into an 'inferior figure' (i.e. 'subscript')\n     * @param {Number} start selection start\n     * @param {Number} end selection end\n     * @returns {fabric.Text} thisArg\n     * @chainable\n     */\n    setSubscript: function(start, end) {\n      return this._setScript(start, end, this.subscript);\n    },\n\n    /**\n     * Applies 'schema' at given position\n     * @private\n     * @param {Number} start selection start\n     * @param {Number} end selection end\n     * @param {Number} schema\n     * @returns {fabric.Text} thisArg\n     * @chainable\n     */\n    _setScript: function(start, end, schema) {\n      var loc = this.get2DCursorLocation(start, true),\n          fontSize = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'fontSize'),\n          dy = this.getValueOfPropertyAt(loc.lineIndex, loc.charIndex, 'deltaY'),\n          style = { fontSize: fontSize * schema.size, deltaY: dy + fontSize * schema.baseline };\n      this.setSelectionStyles(style, start, end);\n      return this;\n    },\n\n    /**\n     * @private\n     * @param {Number} lineIndex index text line\n     * @return {Number} Line left offset\n     */\n    _getLineLeftOffset: function(lineIndex) {\n      var lineWidth = this.getLineWidth(lineIndex),\n          lineDiff = this.width - lineWidth, textAlign = this.textAlign, direction = this.direction,\n          isEndOfWrapping, leftOffset = 0, isEndOfWrapping = this.isEndOfWrapping(lineIndex);\n      if (textAlign === 'justify'\n        || (textAlign === 'justify-center' && !isEndOfWrapping)\n        || (textAlign === 'justify-right' && !isEndOfWrapping)\n        || (textAlign === 'justify-left' && !isEndOfWrapping)\n      ) {\n        return 0;\n      }\n      if (textAlign === 'center') {\n        leftOffset = lineDiff / 2;\n      }\n      if (textAlign === 'right') {\n        leftOffset = lineDiff;\n      }\n      if (textAlign === 'justify-center') {\n        leftOffset = lineDiff / 2;\n      }\n      if (textAlign === 'justify-right') {\n        leftOffset = lineDiff;\n      }\n      if (direction === 'rtl') {\n        leftOffset -= lineDiff;\n      }\n      return leftOffset;\n    },\n\n    /**\n     * @private\n     */\n    _clearCache: function() {\n      this.__lineWidths = [];\n      this.__lineHeights = [];\n      this.__charBounds = [];\n    },\n\n    /**\n     * @private\n     */\n    _shouldClearDimensionCache: function() {\n      var shouldClear = this._forceClearCache;\n      shouldClear || (shouldClear = this.hasStateChanged('_dimensionAffectingProps'));\n      if (shouldClear) {\n        this.dirty = true;\n        this._forceClearCache = false;\n      }\n      return shouldClear;\n    },\n\n    /**\n     * Measure a single line given its index. Used to calculate the initial\n     * text bounding box. The values are calculated and stored in __lineWidths cache.\n     * @private\n     * @param {Number} lineIndex line number\n     * @return {Number} Line width\n     */\n    getLineWidth: function(lineIndex) {\n      if (this.__lineWidths[lineIndex] !== undefined) {\n        return this.__lineWidths[lineIndex];\n      }\n\n      var lineInfo = this.measureLine(lineIndex);\n      var width = lineInfo.width;\n      this.__lineWidths[lineIndex] = width;\n      return width;\n    },\n\n    _getWidthOfCharSpacing: function() {\n      if (this.charSpacing !== 0) {\n        return this.fontSize * this.charSpacing / 1000;\n      }\n      return 0;\n    },\n\n    /**\n     * Retrieves the value of property at given character position\n     * @param {Number} lineIndex the line number\n     * @param {Number} charIndex the character number\n     * @param {String} property the property name\n     * @returns the value of 'property'\n     */\n    getValueOfPropertyAt: function(lineIndex, charIndex, property) {\n      var charStyle = this._getStyleDeclaration(lineIndex, charIndex);\n      if (charStyle && typeof charStyle[property] !== 'undefined') {\n        return charStyle[property];\n      }\n      return this[property];\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _renderTextDecoration: function(ctx, type) {\n      if (!this[type] && !this.styleHas(type)) {\n        return;\n      }\n      var heightOfLine, size, _size,\n          lineLeftOffset, dy, _dy,\n          line, lastDecoration,\n          leftOffset = this._getLeftOffset(),\n          topOffset = this._getTopOffset(), top,\n          boxStart, boxWidth, charBox, currentDecoration,\n          maxHeight, currentFill, lastFill, path = this.path,\n          charSpacing = this._getWidthOfCharSpacing(),\n          offsetY = this.offsets[type];\n\n      for (var i = 0, len = this._textLines.length; i < len; i++) {\n        heightOfLine = this.getHeightOfLine(i);\n        if (!this[type] && !this.styleHas(type, i)) {\n          topOffset += heightOfLine;\n          continue;\n        }\n        line = this._textLines[i];\n        maxHeight = heightOfLine / this.lineHeight;\n        lineLeftOffset = this._getLineLeftOffset(i);\n        boxStart = 0;\n        boxWidth = 0;\n        lastDecoration = this.getValueOfPropertyAt(i, 0, type);\n        lastFill = this.getValueOfPropertyAt(i, 0, 'fill');\n        top = topOffset + maxHeight * (1 - this._fontSizeFraction);\n        size = this.getHeightOfChar(i, 0);\n        dy = this.getValueOfPropertyAt(i, 0, 'deltaY');\n        for (var j = 0, jlen = line.length; j < jlen; j++) {\n          charBox = this.__charBounds[i][j];\n          currentDecoration = this.getValueOfPropertyAt(i, j, type);\n          currentFill = this.getValueOfPropertyAt(i, j, 'fill');\n          _size = this.getHeightOfChar(i, j);\n          _dy = this.getValueOfPropertyAt(i, j, 'deltaY');\n          if (path && currentDecoration && currentFill) {\n            ctx.save();\n            ctx.fillStyle = lastFill;\n            ctx.translate(charBox.renderLeft, charBox.renderTop);\n            ctx.rotate(charBox.angle);\n            ctx.fillRect(\n              -charBox.kernedWidth / 2,\n              offsetY * _size + _dy,\n              charBox.kernedWidth,\n              this.fontSize / 15\n            );\n            ctx.restore();\n          }\n          else if (\n            (currentDecoration !== lastDecoration || currentFill !== lastFill || _size !== size || _dy !== dy)\n            && boxWidth > 0\n          ) {\n            var drawStart = leftOffset + lineLeftOffset + boxStart;\n            if (this.direction === 'rtl') {\n              drawStart = this.width - drawStart - boxWidth;\n            }\n            if (lastDecoration && lastFill) {\n              ctx.fillStyle = lastFill;\n              ctx.fillRect(\n                drawStart,\n                top + offsetY * size + dy,\n                boxWidth,\n                this.fontSize / 15\n              );\n            }\n            boxStart = charBox.left;\n            boxWidth = charBox.width;\n            lastDecoration = currentDecoration;\n            lastFill = currentFill;\n            size = _size;\n            dy = _dy;\n          }\n          else {\n            boxWidth += charBox.kernedWidth;\n          }\n        }\n        var drawStart = leftOffset + lineLeftOffset + boxStart;\n        if (this.direction === 'rtl') {\n          drawStart = this.width - drawStart - boxWidth;\n        }\n        ctx.fillStyle = currentFill;\n        currentDecoration && currentFill && ctx.fillRect(\n          drawStart,\n          top + offsetY * size + dy,\n          boxWidth - charSpacing,\n          this.fontSize / 15\n        );\n        topOffset += heightOfLine;\n      }\n      // if there is text background color no\n      // other shadows should be casted\n      this._removeShadow(ctx);\n    },\n\n    /**\n     * return font declaration string for canvas context\n     * @param {Object} [styleObject] object\n     * @returns {String} font declaration formatted for canvas context.\n     */\n    _getFontDeclaration: function(styleObject, forMeasuring) {\n      var style = styleObject || this, family = this.fontFamily,\n          fontIsGeneric = fabric.Text.genericFonts.indexOf(family.toLowerCase()) > -1;\n      var fontFamily = family === undefined ||\n      family.indexOf('\\'') > -1 || family.indexOf(',') > -1 ||\n      family.indexOf('\"') > -1 || fontIsGeneric\n        ? style.fontFamily : '\"' + style.fontFamily + '\"';\n      return [\n        // node-canvas needs \"weight style\", while browsers need \"style weight\"\n        // verify if this can be fixed in JSDOM\n        (fabric.isLikelyNode ? style.fontWeight : style.fontStyle),\n        (fabric.isLikelyNode ? style.fontStyle : style.fontWeight),\n        forMeasuring ? this.CACHE_FONT_SIZE + 'px' : style.fontSize + 'px',\n        fontFamily\n      ].join(' ');\n    },\n\n    /**\n     * Renders text instance on a specified context\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    render: function(ctx) {\n      // do not render if object is not visible\n      if (!this.visible) {\n        return;\n      }\n      if (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen()) {\n        return;\n      }\n      if (this._shouldClearDimensionCache()) {\n        this.initDimensions();\n      }\n      this.callSuper('render', ctx);\n    },\n\n    /**\n     * Returns the text as an array of lines.\n     * @param {String} text text to split\n     * @returns {Array} Lines in the text\n     */\n    _splitTextIntoLines: function(text) {\n      var lines = text.split(this._reNewline),\n          newLines = new Array(lines.length),\n          newLine = ['\\n'],\n          newText = [];\n      for (var i = 0; i < lines.length; i++) {\n        newLines[i] = fabric.util.string.graphemeSplit(lines[i]);\n        newText = newText.concat(newLines[i], newLine);\n      }\n      newText.pop();\n      return { _unwrappedLines: newLines, lines: lines, graphemeText: newText, graphemeLines: newLines };\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} Object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      var allProperties = additionalProps.concat(propertiesToInclude);\n      var obj = this.callSuper('toObject', allProperties);\n      obj.styles = fabric.util.stylesToArray(this.styles, this.text);\n      if (obj.path) {\n        obj.path = this.path.toObject();\n      }\n      return obj;\n    },\n\n    /**\n     * Sets property to a given value. When changing position/dimension -related properties (left, top, scale, angle, etc.) `set` does not update position of object's borders/controls. If you need to update those, call `setCoords()`.\n     * @param {String|Object} key Property name or object (if object, iterate over the object properties)\n     * @param {Object|Function} value Property value (if function, the value is passed into it and its return value is used as a new one)\n     * @return {fabric.Object} thisArg\n     * @chainable\n     */\n    set: function(key, value) {\n      this.callSuper('set', key, value);\n      var needsDims = false;\n      var isAddingPath = false;\n      if (typeof key === 'object') {\n        for (var _key in key) {\n          if (_key === 'path') {\n            this.setPathInfo();\n          }\n          needsDims = needsDims || this._dimensionAffectingProps.indexOf(_key) !== -1;\n          isAddingPath = isAddingPath || _key === 'path';\n        }\n      }\n      else {\n        needsDims = this._dimensionAffectingProps.indexOf(key) !== -1;\n        isAddingPath = key === 'path';\n      }\n      if (isAddingPath) {\n        this.setPathInfo();\n      }\n      if (needsDims) {\n        this.initDimensions();\n        this.setCoords();\n      }\n      return this;\n    },\n\n    /**\n     * Returns complexity of an instance\n     * @return {Number} complexity\n     */\n    complexity: function() {\n      return 1;\n    }\n  });\n\n  /* _FROM_SVG_START_ */\n  /**\n   * List of attribute names to account for when parsing SVG element (used by {@link fabric.Text.fromElement})\n   * @static\n   * @memberOf fabric.Text\n   * @see: http://www.w3.org/TR/SVG/text.html#TextElement\n   */\n  fabric.Text.ATTRIBUTE_NAMES = fabric.SHARED_ATTRIBUTES.concat(\n    'x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor'.split(' '));\n\n  /**\n   * Default SVG font size\n   * @static\n   * @memberOf fabric.Text\n   */\n  fabric.Text.DEFAULT_SVG_FONT_SIZE = 16;\n\n  /**\n   * Returns fabric.Text instance from an SVG element (<b>not yet implemented</b>)\n   * @static\n   * @memberOf fabric.Text\n   * @param {SVGElement} element Element to parse\n   * @param {Function} callback callback function invoked after parsing\n   * @param {Object} [options] Options object\n   */\n  fabric.Text.fromElement = function(element, callback, options) {\n    if (!element) {\n      return callback(null);\n    }\n\n    var parsedAttributes = fabric.parseAttributes(element, fabric.Text.ATTRIBUTE_NAMES),\n        parsedAnchor = parsedAttributes.textAnchor || 'left';\n    options = fabric.util.object.extend((options ? clone(options) : { }), parsedAttributes);\n\n    options.top = options.top || 0;\n    options.left = options.left || 0;\n    if (parsedAttributes.textDecoration) {\n      var textDecoration = parsedAttributes.textDecoration;\n      if (textDecoration.indexOf('underline') !== -1) {\n        options.underline = true;\n      }\n      if (textDecoration.indexOf('overline') !== -1) {\n        options.overline = true;\n      }\n      if (textDecoration.indexOf('line-through') !== -1) {\n        options.linethrough = true;\n      }\n      delete options.textDecoration;\n    }\n    if ('dx' in parsedAttributes) {\n      options.left += parsedAttributes.dx;\n    }\n    if ('dy' in parsedAttributes) {\n      options.top += parsedAttributes.dy;\n    }\n    if (!('fontSize' in options)) {\n      options.fontSize = fabric.Text.DEFAULT_SVG_FONT_SIZE;\n    }\n\n    var textContent = '';\n\n    // The XML is not properly parsed in IE9 so a workaround to get\n    // textContent is through firstChild.data. Another workaround would be\n    // to convert XML loaded from a file to be converted using DOMParser (same way loadSVGFromString() does)\n    if (!('textContent' in element)) {\n      if ('firstChild' in element && element.firstChild !== null) {\n        if ('data' in element.firstChild && element.firstChild.data !== null) {\n          textContent = element.firstChild.data;\n        }\n      }\n    }\n    else {\n      textContent = element.textContent;\n    }\n\n    textContent = textContent.replace(/^\\s+|\\s+$|\\n+/g, '').replace(/\\s+/g, ' ');\n    var originalStrokeWidth = options.strokeWidth;\n    options.strokeWidth = 0;\n\n    var text = new fabric.Text(textContent, options),\n        textHeightScaleFactor = text.getScaledHeight() / text.height,\n        lineHeightDiff = (text.height + text.strokeWidth) * text.lineHeight - text.height,\n        scaledDiff = lineHeightDiff * textHeightScaleFactor,\n        textHeight = text.getScaledHeight() + scaledDiff,\n        offX = 0;\n    /*\n      Adjust positioning:\n        x/y attributes in SVG correspond to the bottom-left corner of text bounding box\n        fabric output by default at top, left.\n    */\n    if (parsedAnchor === 'center') {\n      offX = text.getScaledWidth() / 2;\n    }\n    if (parsedAnchor === 'right') {\n      offX = text.getScaledWidth();\n    }\n    text.set({\n      left: text.left - offX,\n      top: text.top - (textHeight - text.fontSize * (0.07 + text._fontSizeFraction)) / text.lineHeight,\n      strokeWidth: typeof originalStrokeWidth !== 'undefined' ? originalStrokeWidth : 1,\n    });\n    callback(text);\n  };\n  /* _FROM_SVG_END_ */\n\n  /**\n   * Returns fabric.Text instance from an object representation\n   * @static\n   * @memberOf fabric.Text\n   * @param {Object} object plain js Object to create an instance from\n   * @param {Function} [callback] Callback to invoke when an fabric.Text instance is created\n   */\n  fabric.Text.fromObject = function(object, callback) {\n    var objectCopy = clone(object), path = object.path;\n    delete objectCopy.path;\n    return fabric.Object._fromObject('Text', objectCopy, function(textInstance) {\n      textInstance.styles = fabric.util.stylesFromArray(object.styles, object.text);\n      if (path) {\n        fabric.Object._fromObject('Path', path, function(pathInstance) {\n          textInstance.set('path', pathInstance);\n          callback(textInstance);\n        }, 'path');\n      }\n      else {\n        callback(textInstance);\n      }\n    }, 'text');\n  };\n\n  fabric.Text.genericFonts = ['sans-serif', 'serif', 'cursive', 'fantasy', 'monospace'];\n\n  fabric.util.createAccessors && fabric.util.createAccessors(fabric.Text);\n\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n  fabric.util.object.extend(fabric.Text.prototype, /** @lends fabric.Text.prototype */ {\n    /**\n     * Returns true if object has no styling or no styling in a line\n     * @param {Number} lineIndex , lineIndex is on wrapped lines.\n     * @return {Boolean}\n     */\n    isEmptyStyles: function(lineIndex) {\n      if (!this.styles) {\n        return true;\n      }\n      if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n        return true;\n      }\n      var obj = typeof lineIndex === 'undefined' ? this.styles : { line: this.styles[lineIndex] };\n      for (var p1 in obj) {\n        for (var p2 in obj[p1]) {\n          // eslint-disable-next-line no-unused-vars\n          for (var p3 in obj[p1][p2]) {\n            return false;\n          }\n        }\n      }\n      return true;\n    },\n\n    /**\n     * Returns true if object has a style property or has it ina specified line\n     * This function is used to detect if a text will use a particular property or not.\n     * @param {String} property to check for\n     * @param {Number} lineIndex to check the style on\n     * @return {Boolean}\n     */\n    styleHas: function(property, lineIndex) {\n      if (!this.styles || !property || property === '') {\n        return false;\n      }\n      if (typeof lineIndex !== 'undefined' && !this.styles[lineIndex]) {\n        return false;\n      }\n      var obj = typeof lineIndex === 'undefined' ? this.styles : { 0: this.styles[lineIndex] };\n      // eslint-disable-next-line\n      for (var p1 in obj) {\n        // eslint-disable-next-line\n        for (var p2 in obj[p1]) {\n          if (typeof obj[p1][p2][property] !== 'undefined') {\n            return true;\n          }\n        }\n      }\n      return false;\n    },\n\n    /**\n     * Check if characters in a text have a value for a property\n     * whose value matches the textbox's value for that property.  If so,\n     * the character-level property is deleted.  If the character\n     * has no other properties, then it is also deleted.  Finally,\n     * if the line containing that character has no other characters\n     * then it also is deleted.\n     *\n     * @param {string} property The property to compare between characters and text.\n     */\n    cleanStyle: function(property) {\n      if (!this.styles || !property || property === '') {\n        return false;\n      }\n      var obj = this.styles, stylesCount = 0, letterCount, stylePropertyValue,\n          allStyleObjectPropertiesMatch = true, graphemeCount = 0, styleObject;\n      // eslint-disable-next-line\n      for (var p1 in obj) {\n        letterCount = 0;\n        // eslint-disable-next-line\n        for (var p2 in obj[p1]) {\n          var styleObject = obj[p1][p2],\n              stylePropertyHasBeenSet = styleObject.hasOwnProperty(property);\n\n          stylesCount++;\n\n          if (stylePropertyHasBeenSet) {\n            if (!stylePropertyValue) {\n              stylePropertyValue = styleObject[property];\n            }\n            else if (styleObject[property] !== stylePropertyValue) {\n              allStyleObjectPropertiesMatch = false;\n            }\n\n            if (styleObject[property] === this[property]) {\n              delete styleObject[property];\n            }\n          }\n          else {\n            allStyleObjectPropertiesMatch = false;\n          }\n\n          if (Object.keys(styleObject).length !== 0) {\n            letterCount++;\n          }\n          else {\n            delete obj[p1][p2];\n          }\n        }\n\n        if (letterCount === 0) {\n          delete obj[p1];\n        }\n      }\n      // if every grapheme has the same style set then\n      // delete those styles and set it on the parent\n      for (var i = 0; i < this._textLines.length; i++) {\n        graphemeCount += this._textLines[i].length;\n      }\n      if (allStyleObjectPropertiesMatch && stylesCount === graphemeCount) {\n        this[property] = stylePropertyValue;\n        this.removeStyle(property);\n      }\n    },\n\n    /**\n     * Remove a style property or properties from all individual character styles\n     * in a text object.  Deletes the character style object if it contains no other style\n     * props.  Deletes a line style object if it contains no other character styles.\n     *\n     * @param {String} props The property to remove from character styles.\n     */\n    removeStyle: function(property) {\n      if (!this.styles || !property || property === '') {\n        return;\n      }\n      var obj = this.styles, line, lineNum, charNum;\n      for (lineNum in obj) {\n        line = obj[lineNum];\n        for (charNum in line) {\n          delete line[charNum][property];\n          if (Object.keys(line[charNum]).length === 0) {\n            delete line[charNum];\n          }\n        }\n        if (Object.keys(line).length === 0) {\n          delete obj[lineNum];\n        }\n      }\n    },\n\n    /**\n     * @private\n     */\n    _extendStyles: function(index, styles) {\n      var loc = this.get2DCursorLocation(index);\n\n      if (!this._getLineStyle(loc.lineIndex)) {\n        this._setLineStyle(loc.lineIndex);\n      }\n\n      if (!this._getStyleDeclaration(loc.lineIndex, loc.charIndex)) {\n        this._setStyleDeclaration(loc.lineIndex, loc.charIndex, {});\n      }\n\n      fabric.util.object.extend(this._getStyleDeclaration(loc.lineIndex, loc.charIndex), styles);\n    },\n\n    /**\n     * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)\n     * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.\n     * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.\n     */\n    get2DCursorLocation: function(selectionStart, skipWrapping) {\n      if (typeof selectionStart === 'undefined') {\n        selectionStart = this.selectionStart;\n      }\n      var lines = skipWrapping ? this._unwrappedTextLines : this._textLines,\n          len = lines.length;\n      for (var i = 0; i < len; i++) {\n        if (selectionStart <= lines[i].length) {\n          return {\n            lineIndex: i,\n            charIndex: selectionStart\n          };\n        }\n        selectionStart -= lines[i].length + this.missingNewlineOffset(i);\n      }\n      return {\n        lineIndex: i - 1,\n        charIndex: lines[i - 1].length < selectionStart ? lines[i - 1].length : selectionStart\n      };\n    },\n\n    /**\n     * Gets style of a current selection/cursor (at the start position)\n     * if startIndex or endIndex are not provided, selectionStart or selectionEnd will be used.\n     * @param {Number} [startIndex] Start index to get styles at\n     * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n     * @param {Boolean} [complete] get full style or not\n     * @return {Array} styles an array with one, zero or more Style objects\n     */\n    getSelectionStyles: function(startIndex, endIndex, complete) {\n      if (typeof startIndex === 'undefined') {\n        startIndex = this.selectionStart || 0;\n      }\n      if (typeof endIndex === 'undefined') {\n        endIndex = this.selectionEnd || startIndex;\n      }\n      var styles = [];\n      for (var i = startIndex; i < endIndex; i++) {\n        styles.push(this.getStyleAtPosition(i, complete));\n      }\n      return styles;\n    },\n\n    /**\n     * Gets style of a current selection/cursor position\n     * @param {Number} position  to get styles at\n     * @param {Boolean} [complete] full style if true\n     * @return {Object} style Style object at a specified index\n     * @private\n     */\n    getStyleAtPosition: function(position, complete) {\n      var loc = this.get2DCursorLocation(position),\n          style = complete ? this.getCompleteStyleDeclaration(loc.lineIndex, loc.charIndex) :\n            this._getStyleDeclaration(loc.lineIndex, loc.charIndex);\n      return style || {};\n    },\n\n    /**\n     * Sets style of a current selection, if no selection exist, do not set anything.\n     * @param {Object} [styles] Styles object\n     * @param {Number} [startIndex] Start index to get styles at\n     * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1\n     * @return {fabric.IText} thisArg\n     * @chainable\n     */\n    setSelectionStyles: function(styles, startIndex, endIndex) {\n      if (typeof startIndex === 'undefined') {\n        startIndex = this.selectionStart || 0;\n      }\n      if (typeof endIndex === 'undefined') {\n        endIndex = this.selectionEnd || startIndex;\n      }\n      for (var i = startIndex; i < endIndex; i++) {\n        this._extendStyles(i, styles);\n      }\n      /* not included in _extendStyles to avoid clearing cache more than once */\n      this._forceClearCache = true;\n      return this;\n    },\n\n    /**\n     * get the reference, not a clone, of the style object for a given character\n     * @param {Number} lineIndex\n     * @param {Number} charIndex\n     * @return {Object} style object\n     */\n    _getStyleDeclaration: function(lineIndex, charIndex) {\n      var lineStyle = this.styles && this.styles[lineIndex];\n      if (!lineStyle) {\n        return null;\n      }\n      return lineStyle[charIndex];\n    },\n\n    /**\n     * return a new object that contains all the style property for a character\n     * the object returned is newly created\n     * @param {Number} lineIndex of the line where the character is\n     * @param {Number} charIndex position of the character on the line\n     * @return {Object} style object\n     */\n    getCompleteStyleDeclaration: function(lineIndex, charIndex) {\n      var style = this._getStyleDeclaration(lineIndex, charIndex) || { },\n          styleObject = { }, prop;\n      for (var i = 0; i < this._styleProperties.length; i++) {\n        prop = this._styleProperties[i];\n        styleObject[prop] = typeof style[prop] === 'undefined' ? this[prop] : style[prop];\n      }\n      return styleObject;\n    },\n\n    /**\n     * @param {Number} lineIndex\n     * @param {Number} charIndex\n     * @param {Object} style\n     * @private\n     */\n    _setStyleDeclaration: function(lineIndex, charIndex, style) {\n      this.styles[lineIndex][charIndex] = style;\n    },\n\n    /**\n     *\n     * @param {Number} lineIndex\n     * @param {Number} charIndex\n     * @private\n     */\n    _deleteStyleDeclaration: function(lineIndex, charIndex) {\n      delete this.styles[lineIndex][charIndex];\n    },\n\n    /**\n     * @param {Number} lineIndex\n     * @return {Boolean} if the line exists or not\n     * @private\n     */\n    _getLineStyle: function(lineIndex) {\n      return !!this.styles[lineIndex];\n    },\n\n    /**\n     * Set the line style to an empty object so that is initialized\n     * @param {Number} lineIndex\n     * @private\n     */\n    _setLineStyle: function(lineIndex) {\n      this.styles[lineIndex] = {};\n    },\n\n    /**\n     * @param {Number} lineIndex\n     * @private\n     */\n    _deleteLineStyle: function(lineIndex) {\n      delete this.styles[lineIndex];\n    }\n  });\n})();\n\n\n(function() {\n\n  function parseDecoration(object) {\n    if (object.textDecoration) {\n      object.textDecoration.indexOf('underline') > -1 && (object.underline = true);\n      object.textDecoration.indexOf('line-through') > -1 && (object.linethrough = true);\n      object.textDecoration.indexOf('overline') > -1 && (object.overline = true);\n      delete object.textDecoration;\n    }\n  }\n\n  /**\n   * IText class (introduced in <b>v1.4</b>) Events are also fired with \"text:\"\n   * prefix when observing canvas.\n   * @class fabric.IText\n   * @extends fabric.Text\n   * @mixes fabric.Observable\n   *\n   * @fires changed\n   * @fires selection:changed\n   * @fires editing:entered\n   * @fires editing:exited\n   *\n   * @return {fabric.IText} thisArg\n   * @see {@link fabric.IText#initialize} for constructor definition\n   *\n   * <p>Supported key combinations:</p>\n   * <pre>\n   *   Move cursor:                    left, right, up, down\n   *   Select character:               shift + left, shift + right\n   *   Select text vertically:         shift + up, shift + down\n   *   Move cursor by word:            alt + left, alt + right\n   *   Select words:                   shift + alt + left, shift + alt + right\n   *   Move cursor to line start/end:  cmd + left, cmd + right or home, end\n   *   Select till start/end of line:  cmd + shift + left, cmd + shift + right or shift + home, shift + end\n   *   Jump to start/end of text:      cmd + up, cmd + down\n   *   Select till start/end of text:  cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown\n   *   Delete character:               backspace\n   *   Delete word:                    alt + backspace\n   *   Delete line:                    cmd + backspace\n   *   Forward delete:                 delete\n   *   Copy text:                      ctrl/cmd + c\n   *   Paste text:                     ctrl/cmd + v\n   *   Cut text:                       ctrl/cmd + x\n   *   Select entire text:             ctrl/cmd + a\n   *   Quit editing                    tab or esc\n   * </pre>\n   *\n   * <p>Supported mouse/touch combination</p>\n   * <pre>\n   *   Position cursor:                click/touch\n   *   Create selection:               click/touch & drag\n   *   Create selection:               click & shift + click\n   *   Select word:                    double click\n   *   Select line:                    triple click\n   * </pre>\n   */\n  fabric.IText = fabric.util.createClass(fabric.Text, fabric.Observable, /** @lends fabric.IText.prototype */ {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'i-text',\n\n    /**\n     * Index where text selection starts (or where cursor is when there is no selection)\n     * @type Number\n     * @default\n     */\n    selectionStart: 0,\n\n    /**\n     * Index where text selection ends\n     * @type Number\n     * @default\n     */\n    selectionEnd: 0,\n\n    /**\n     * Color of text selection\n     * @type String\n     * @default\n     */\n    selectionColor: 'rgba(17,119,255,0.3)',\n\n    /**\n     * Indicates whether text is in editing mode\n     * @type Boolean\n     * @default\n     */\n    isEditing: false,\n\n    /**\n     * Indicates whether a text can be edited\n     * @type Boolean\n     * @default\n     */\n    editable: true,\n\n    /**\n     * Border color of text object while it's in editing mode\n     * @type String\n     * @default\n     */\n    editingBorderColor: 'rgba(102,153,255,0.25)',\n\n    /**\n     * Width of cursor (in px)\n     * @type Number\n     * @default\n     */\n    cursorWidth: 2,\n\n    /**\n     * Color of text cursor color in editing mode.\n     * if not set (default) will take color from the text.\n     * if set to a color value that fabric can understand, it will\n     * be used instead of the color of the text at the current position.\n     * @type String\n     * @default\n     */\n    cursorColor: '',\n\n    /**\n     * Delay between cursor blink (in ms)\n     * @type Number\n     * @default\n     */\n    cursorDelay: 1000,\n\n    /**\n     * Duration of cursor fadein (in ms)\n     * @type Number\n     * @default\n     */\n    cursorDuration: 600,\n\n    /**\n     * Indicates whether internal text char widths can be cached\n     * @type Boolean\n     * @default\n     */\n    caching: true,\n\n    /**\n     * DOM container to append the hiddenTextarea.\n     * An alternative to attaching to the document.body.\n     * Useful to reduce laggish redraw of the full document.body tree and\n     * also with modals event capturing that won't let the textarea take focus.\n     * @type HTMLElement\n     * @default\n     */\n    hiddenTextareaContainer: null,\n\n    /**\n     * @private\n     */\n    _reSpace: /\\s|\\n/,\n\n    /**\n     * @private\n     */\n    _currentCursorOpacity: 0,\n\n    /**\n     * @private\n     */\n    _selectionDirection: null,\n\n    /**\n     * @private\n     */\n    _abortCursorAnimation: false,\n\n    /**\n     * @private\n     */\n    __widthOfSpace: [],\n\n    /**\n     * Helps determining when the text is in composition, so that the cursor\n     * rendering is altered.\n     */\n    inCompositionMode: false,\n\n    /**\n     * Constructor\n     * @param {String} text Text string\n     * @param {Object} [options] Options object\n     * @return {fabric.IText} thisArg\n     */\n    initialize: function(text, options) {\n      this.callSuper('initialize', text, options);\n      this.initBehavior();\n    },\n\n    /**\n     * Sets selection start (left boundary of a selection)\n     * @param {Number} index Index to set selection start to\n     */\n    setSelectionStart: function(index) {\n      index = Math.max(index, 0);\n      this._updateAndFire('selectionStart', index);\n    },\n\n    /**\n     * Sets selection end (right boundary of a selection)\n     * @param {Number} index Index to set selection end to\n     */\n    setSelectionEnd: function(index) {\n      index = Math.min(index, this.text.length);\n      this._updateAndFire('selectionEnd', index);\n    },\n\n    /**\n     * @private\n     * @param {String} property 'selectionStart' or 'selectionEnd'\n     * @param {Number} index new position of property\n     */\n    _updateAndFire: function(property, index) {\n      if (this[property] !== index) {\n        this._fireSelectionChanged();\n        this[property] = index;\n      }\n      this._updateTextarea();\n    },\n\n    /**\n     * Fires the even of selection changed\n     * @private\n     */\n    _fireSelectionChanged: function() {\n      this.fire('selection:changed');\n      this.canvas && this.canvas.fire('text:selection:changed', { target: this });\n    },\n\n    /**\n     * Initialize text dimensions. Render all text on given context\n     * or on a offscreen canvas to get the text width with measureText.\n     * Updates this.width and this.height with the proper values.\n     * Does not return dimensions.\n     * @private\n     */\n    initDimensions: function() {\n      this.isEditing && this.initDelayedCursor();\n      this.clearContextTop();\n      this.callSuper('initDimensions');\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    render: function(ctx) {\n      this.clearContextTop();\n      this.callSuper('render', ctx);\n      // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor\n      // the correct position but not at every cursor animation.\n      this.cursorOffsetCache = { };\n      this.renderCursorOrSelection();\n    },\n\n    /**\n     * @private\n     * @param {CanvasRenderingContext2D} ctx Context to render on\n     */\n    _render: function(ctx) {\n      this.callSuper('_render', ctx);\n    },\n\n    /**\n     * Prepare and clean the contextTop\n     */\n    clearContextTop: function(skipRestore) {\n      if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {\n        return;\n      }\n      var ctx = this.canvas.contextTop, v = this.canvas.viewportTransform;\n      ctx.save();\n      ctx.transform(v[0], v[1], v[2], v[3], v[4], v[5]);\n      this.transform(ctx);\n      this._clearTextArea(ctx);\n      skipRestore || ctx.restore();\n    },\n    /**\n     * Renders cursor or selection (depending on what exists)\n     * it does on the contextTop. If contextTop is not available, do nothing.\n     */\n    renderCursorOrSelection: function() {\n      if (!this.isEditing || !this.canvas || !this.canvas.contextTop) {\n        return;\n      }\n      var boundaries = this._getCursorBoundaries(),\n          ctx = this.canvas.contextTop;\n      this.clearContextTop(true);\n      if (this.selectionStart === this.selectionEnd) {\n        this.renderCursor(boundaries, ctx);\n      }\n      else {\n        this.renderSelection(boundaries, ctx);\n      }\n      ctx.restore();\n    },\n\n    _clearTextArea: function(ctx) {\n      // we add 4 pixel, to be sure to do not leave any pixel out\n      var width = this.width + 4, height = this.height + 4;\n      ctx.clearRect(-width / 2, -height / 2, width, height);\n    },\n\n    /**\n     * Returns cursor boundaries (left, top, leftOffset, topOffset)\n     * @private\n     * @param {Array} chars Array of characters\n     * @param {String} typeOfBoundaries\n     */\n    _getCursorBoundaries: function(position) {\n\n      // left/top are left/top of entire text box\n      // leftOffset/topOffset are offset from that left/top point of a text box\n\n      if (typeof position === 'undefined') {\n        position = this.selectionStart;\n      }\n\n      var left = this._getLeftOffset(),\n          top = this._getTopOffset(),\n          offsets = this._getCursorBoundariesOffsets(position);\n      return {\n        left: left,\n        top: top,\n        leftOffset: offsets.left,\n        topOffset: offsets.top\n      };\n    },\n\n    /**\n     * @private\n     */\n    _getCursorBoundariesOffsets: function(position) {\n      if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {\n        return this.cursorOffsetCache;\n      }\n      var lineLeftOffset,\n          lineIndex,\n          charIndex,\n          topOffset = 0,\n          leftOffset = 0,\n          boundaries,\n          cursorPosition = this.get2DCursorLocation(position);\n      charIndex = cursorPosition.charIndex;\n      lineIndex = cursorPosition.lineIndex;\n      for (var i = 0; i < lineIndex; i++) {\n        topOffset += this.getHeightOfLine(i);\n      }\n      lineLeftOffset = this._getLineLeftOffset(lineIndex);\n      var bound = this.__charBounds[lineIndex][charIndex];\n      bound && (leftOffset = bound.left);\n      if (this.charSpacing !== 0 && charIndex === this._textLines[lineIndex].length) {\n        leftOffset -= this._getWidthOfCharSpacing();\n      }\n      boundaries = {\n        top: topOffset,\n        left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0),\n      };\n      if (this.direction === 'rtl') {\n        boundaries.left *= -1;\n      }\n      this.cursorOffsetCache = boundaries;\n      return this.cursorOffsetCache;\n    },\n\n    /**\n     * Renders cursor\n     * @param {Object} boundaries\n     * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n     */\n    renderCursor: function(boundaries, ctx) {\n      var cursorLocation = this.get2DCursorLocation(),\n          lineIndex = cursorLocation.lineIndex,\n          charIndex = cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,\n          charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),\n          multiplier = this.scaleX * this.canvas.getZoom(),\n          cursorWidth = this.cursorWidth / multiplier,\n          topOffset = boundaries.topOffset,\n          dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY');\n      topOffset += (1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex) / this.lineHeight\n        - charHeight * (1 - this._fontSizeFraction);\n\n      if (this.inCompositionMode) {\n        this.renderSelection(boundaries, ctx);\n      }\n      ctx.fillStyle = this.cursorColor || this.getValueOfPropertyAt(lineIndex, charIndex, 'fill');\n      ctx.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity;\n      ctx.fillRect(\n        boundaries.left + boundaries.leftOffset - cursorWidth / 2,\n        topOffset + boundaries.top + dy,\n        cursorWidth,\n        charHeight);\n    },\n\n    /**\n     * Renders text selection\n     * @param {Object} boundaries Object with left/top/leftOffset/topOffset\n     * @param {CanvasRenderingContext2D} ctx transformed context to draw on\n     */\n    renderSelection: function(boundaries, ctx) {\n\n      var selectionStart = this.inCompositionMode ? this.hiddenTextarea.selectionStart : this.selectionStart,\n          selectionEnd = this.inCompositionMode ? this.hiddenTextarea.selectionEnd : this.selectionEnd,\n          isJustify = this.textAlign.indexOf('justify') !== -1,\n          start = this.get2DCursorLocation(selectionStart),\n          end = this.get2DCursorLocation(selectionEnd),\n          startLine = start.lineIndex,\n          endLine = end.lineIndex,\n          startChar = start.charIndex < 0 ? 0 : start.charIndex,\n          endChar = end.charIndex < 0 ? 0 : end.charIndex;\n\n      for (var i = startLine; i <= endLine; i++) {\n        var lineOffset = this._getLineLeftOffset(i) || 0,\n            lineHeight = this.getHeightOfLine(i),\n            realLineHeight = 0, boxStart = 0, boxEnd = 0;\n\n        if (i === startLine) {\n          boxStart = this.__charBounds[startLine][startChar].left;\n        }\n        if (i >= startLine && i < endLine) {\n          boxEnd = isJustify && !this.isEndOfWrapping(i) ? this.width : this.getLineWidth(i) || 5; // WTF is this 5?\n        }\n        else if (i === endLine) {\n          if (endChar === 0) {\n            boxEnd = this.__charBounds[endLine][endChar].left;\n          }\n          else {\n            var charSpacing = this._getWidthOfCharSpacing();\n            boxEnd = this.__charBounds[endLine][endChar - 1].left\n              + this.__charBounds[endLine][endChar - 1].width - charSpacing;\n          }\n        }\n        realLineHeight = lineHeight;\n        if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {\n          lineHeight /= this.lineHeight;\n        }\n        var drawStart = boundaries.left + lineOffset + boxStart,\n            drawWidth = boxEnd - boxStart,\n            drawHeight = lineHeight, extraTop = 0;\n        if (this.inCompositionMode) {\n          ctx.fillStyle = this.compositionColor || 'black';\n          drawHeight = 1;\n          extraTop = lineHeight;\n        }\n        else {\n          ctx.fillStyle = this.selectionColor;\n        }\n        if (this.direction === 'rtl') {\n          drawStart = this.width - drawStart - drawWidth;\n        }\n        ctx.fillRect(\n          drawStart,\n          boundaries.top + boundaries.topOffset + extraTop,\n          drawWidth,\n          drawHeight);\n        boundaries.topOffset += realLineHeight;\n      }\n    },\n\n    /**\n     * High level function to know the height of the cursor.\n     * the currentChar is the one that precedes the cursor\n     * Returns fontSize of char at the current cursor\n     * Unused from the library, is for the end user\n     * @return {Number} Character font size\n     */\n    getCurrentCharFontSize: function() {\n      var cp = this._getCurrentCharIndex();\n      return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');\n    },\n\n    /**\n     * High level function to know the color of the cursor.\n     * the currentChar is the one that precedes the cursor\n     * Returns color (fill) of char at the current cursor\n     * if the text object has a pattern or gradient for filler, it will return that.\n     * Unused by the library, is for the end user\n     * @return {String | fabric.Gradient | fabric.Pattern} Character color (fill)\n     */\n    getCurrentCharColor: function() {\n      var cp = this._getCurrentCharIndex();\n      return this.getValueOfPropertyAt(cp.l, cp.c, 'fill');\n    },\n\n    /**\n     * Returns the cursor position for the getCurrent.. functions\n     * @private\n     */\n    _getCurrentCharIndex: function() {\n      var cursorPosition = this.get2DCursorLocation(this.selectionStart, true),\n          charIndex = cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;\n      return { l: cursorPosition.lineIndex, c: charIndex };\n    }\n  });\n\n  /**\n   * Returns fabric.IText instance from an object representation\n   * @static\n   * @memberOf fabric.IText\n   * @param {Object} object Object to create an instance from\n   * @param {function} [callback] invoked with new instance as argument\n   */\n  fabric.IText.fromObject = function(object, callback) {\n    var styles = fabric.util.stylesFromArray(object.styles, object.text);\n    //copy object to prevent mutation\n    var objCopy = Object.assign({}, object, { styles: styles });\n    parseDecoration(objCopy);\n    if (objCopy.styles) {\n      for (var i in objCopy.styles) {\n        for (var j in objCopy.styles[i]) {\n          parseDecoration(objCopy.styles[i][j]);\n        }\n      }\n    }\n    fabric.Object._fromObject('IText', objCopy, callback, 'text');\n  };\n})();\n\n\n(function() {\n\n  var clone = fabric.util.object.clone;\n\n  fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n\n    /**\n     * Initializes all the interactive behavior of IText\n     */\n    initBehavior: function() {\n      this.initAddedHandler();\n      this.initRemovedHandler();\n      this.initCursorSelectionHandlers();\n      this.initDoubleClickSimulation();\n      this.mouseMoveHandler = this.mouseMoveHandler.bind(this);\n    },\n\n    onDeselect: function() {\n      this.isEditing && this.exitEditing();\n      this.selected = false;\n    },\n\n    /**\n     * Initializes \"added\" event handler\n     */\n    initAddedHandler: function() {\n      var _this = this;\n      this.on('added', function() {\n        var canvas = _this.canvas;\n        if (canvas) {\n          if (!canvas._hasITextHandlers) {\n            canvas._hasITextHandlers = true;\n            _this._initCanvasHandlers(canvas);\n          }\n          canvas._iTextInstances = canvas._iTextInstances || [];\n          canvas._iTextInstances.push(_this);\n        }\n      });\n    },\n\n    initRemovedHandler: function() {\n      var _this = this;\n      this.on('removed', function() {\n        var canvas = _this.canvas;\n        if (canvas) {\n          canvas._iTextInstances = canvas._iTextInstances || [];\n          fabric.util.removeFromArray(canvas._iTextInstances, _this);\n          if (canvas._iTextInstances.length === 0) {\n            canvas._hasITextHandlers = false;\n            _this._removeCanvasHandlers(canvas);\n          }\n        }\n      });\n    },\n\n    /**\n     * register canvas event to manage exiting on other instances\n     * @private\n     */\n    _initCanvasHandlers: function(canvas) {\n      canvas._mouseUpITextHandler = function() {\n        if (canvas._iTextInstances) {\n          canvas._iTextInstances.forEach(function(obj) {\n            obj.__isMousedown = false;\n          });\n        }\n      };\n      canvas.on('mouse:up', canvas._mouseUpITextHandler);\n    },\n\n    /**\n     * remove canvas event to manage exiting on other instances\n     * @private\n     */\n    _removeCanvasHandlers: function(canvas) {\n      canvas.off('mouse:up', canvas._mouseUpITextHandler);\n    },\n\n    /**\n     * @private\n     */\n    _tick: function() {\n      this._currentTickState = this._animateCursor(this, 1, this.cursorDuration, '_onTickComplete');\n    },\n\n    /**\n     * @private\n     */\n    _animateCursor: function(obj, targetOpacity, duration, completeMethod) {\n\n      var tickState;\n\n      tickState = {\n        isAborted: false,\n        abort: function() {\n          this.isAborted = true;\n        },\n      };\n\n      obj.animate('_currentCursorOpacity', targetOpacity, {\n        duration: duration,\n        onComplete: function() {\n          if (!tickState.isAborted) {\n            obj[completeMethod]();\n          }\n        },\n        onChange: function() {\n          // we do not want to animate a selection, only cursor\n          if (obj.canvas && obj.selectionStart === obj.selectionEnd) {\n            obj.renderCursorOrSelection();\n          }\n        },\n        abort: function() {\n          return tickState.isAborted;\n        }\n      });\n      return tickState;\n    },\n\n    /**\n     * @private\n     */\n    _onTickComplete: function() {\n\n      var _this = this;\n\n      if (this._cursorTimeout1) {\n        clearTimeout(this._cursorTimeout1);\n      }\n      this._cursorTimeout1 = setTimeout(function() {\n        _this._currentTickCompleteState = _this._animateCursor(_this, 0, this.cursorDuration / 2, '_tick');\n      }, 100);\n    },\n\n    /**\n     * Initializes delayed cursor\n     */\n    initDelayedCursor: function(restart) {\n      var _this = this,\n          delay = restart ? 0 : this.cursorDelay;\n\n      this.abortCursorAnimation();\n      this._currentCursorOpacity = 1;\n      this._cursorTimeout2 = setTimeout(function() {\n        _this._tick();\n      }, delay);\n    },\n\n    /**\n     * Aborts cursor animation and clears all timeouts\n     */\n    abortCursorAnimation: function() {\n      var shouldClear = this._currentTickState || this._currentTickCompleteState,\n          canvas = this.canvas;\n      this._currentTickState && this._currentTickState.abort();\n      this._currentTickCompleteState && this._currentTickCompleteState.abort();\n\n      clearTimeout(this._cursorTimeout1);\n      clearTimeout(this._cursorTimeout2);\n\n      this._currentCursorOpacity = 0;\n      // to clear just itext area we need to transform the context\n      // it may not be worth it\n      if (shouldClear && canvas) {\n        canvas.clearContext(canvas.contextTop || canvas.contextContainer);\n      }\n\n    },\n\n    /**\n     * Selects entire text\n     * @return {fabric.IText} thisArg\n     * @chainable\n     */\n    selectAll: function() {\n      this.selectionStart = 0;\n      this.selectionEnd = this._text.length;\n      this._fireSelectionChanged();\n      this._updateTextarea();\n      return this;\n    },\n\n    /**\n     * Returns selected text\n     * @return {String}\n     */\n    getSelectedText: function() {\n      return this._text.slice(this.selectionStart, this.selectionEnd).join('');\n    },\n\n    /**\n     * Find new selection index representing start of current word according to current selection index\n     * @param {Number} startFrom Current selection index\n     * @return {Number} New selection index\n     */\n    findWordBoundaryLeft: function(startFrom) {\n      var offset = 0, index = startFrom - 1;\n\n      // remove space before cursor first\n      if (this._reSpace.test(this._text[index])) {\n        while (this._reSpace.test(this._text[index])) {\n          offset++;\n          index--;\n        }\n      }\n      while (/\\S/.test(this._text[index]) && index > -1) {\n        offset++;\n        index--;\n      }\n\n      return startFrom - offset;\n    },\n\n    /**\n     * Find new selection index representing end of current word according to current selection index\n     * @param {Number} startFrom Current selection index\n     * @return {Number} New selection index\n     */\n    findWordBoundaryRight: function(startFrom) {\n      var offset = 0, index = startFrom;\n\n      // remove space after cursor first\n      if (this._reSpace.test(this._text[index])) {\n        while (this._reSpace.test(this._text[index])) {\n          offset++;\n          index++;\n        }\n      }\n      while (/\\S/.test(this._text[index]) && index < this._text.length) {\n        offset++;\n        index++;\n      }\n\n      return startFrom + offset;\n    },\n\n    /**\n     * Find new selection index representing start of current line according to current selection index\n     * @param {Number} startFrom Current selection index\n     * @return {Number} New selection index\n     */\n    findLineBoundaryLeft: function(startFrom) {\n      var offset = 0, index = startFrom - 1;\n\n      while (!/\\n/.test(this._text[index]) && index > -1) {\n        offset++;\n        index--;\n      }\n\n      return startFrom - offset;\n    },\n\n    /**\n     * Find new selection index representing end of current line according to current selection index\n     * @param {Number} startFrom Current selection index\n     * @return {Number} New selection index\n     */\n    findLineBoundaryRight: function(startFrom) {\n      var offset = 0, index = startFrom;\n\n      while (!/\\n/.test(this._text[index]) && index < this._text.length) {\n        offset++;\n        index++;\n      }\n\n      return startFrom + offset;\n    },\n\n    /**\n     * Finds index corresponding to beginning or end of a word\n     * @param {Number} selectionStart Index of a character\n     * @param {Number} direction 1 or -1\n     * @return {Number} Index of the beginning or end of a word\n     */\n    searchWordBoundary: function(selectionStart, direction) {\n      var text = this._text,\n          index     = this._reSpace.test(text[selectionStart]) ? selectionStart - 1 : selectionStart,\n          _char     = text[index],\n          // wrong\n          reNonWord = fabric.reNonWord;\n\n      while (!reNonWord.test(_char) && index > 0 && index < text.length) {\n        index += direction;\n        _char = text[index];\n      }\n      if (reNonWord.test(_char)) {\n        index += direction === 1 ? 0 : 1;\n      }\n      return index;\n    },\n\n    /**\n     * Selects a word based on the index\n     * @param {Number} selectionStart Index of a character\n     */\n    selectWord: function(selectionStart) {\n      selectionStart = selectionStart || this.selectionStart;\n      var newSelectionStart = this.searchWordBoundary(selectionStart, -1), /* search backwards */\n          newSelectionEnd = this.searchWordBoundary(selectionStart, 1); /* search forward */\n\n      this.selectionStart = newSelectionStart;\n      this.selectionEnd = newSelectionEnd;\n      this._fireSelectionChanged();\n      this._updateTextarea();\n      this.renderCursorOrSelection();\n    },\n\n    /**\n     * Selects a line based on the index\n     * @param {Number} selectionStart Index of a character\n     * @return {fabric.IText} thisArg\n     * @chainable\n     */\n    selectLine: function(selectionStart) {\n      selectionStart = selectionStart || this.selectionStart;\n      var newSelectionStart = this.findLineBoundaryLeft(selectionStart),\n          newSelectionEnd = this.findLineBoundaryRight(selectionStart);\n\n      this.selectionStart = newSelectionStart;\n      this.selectionEnd = newSelectionEnd;\n      this._fireSelectionChanged();\n      this._updateTextarea();\n      return this;\n    },\n\n    /**\n     * Enters editing state\n     * @return {fabric.IText} thisArg\n     * @chainable\n     */\n    enterEditing: function(e) {\n      if (this.isEditing || !this.editable) {\n        return;\n      }\n\n      if (this.canvas) {\n        this.canvas.calcOffset();\n        this.exitEditingOnOthers(this.canvas);\n      }\n\n      this.isEditing = true;\n\n      this.initHiddenTextarea(e);\n      this.hiddenTextarea.focus();\n      this.hiddenTextarea.value = this.text;\n      this._updateTextarea();\n      this._saveEditingProps();\n      this._setEditingProps();\n      this._textBeforeEdit = this.text;\n\n      this._tick();\n      this.fire('editing:entered');\n      this._fireSelectionChanged();\n      if (!this.canvas) {\n        return this;\n      }\n      this.canvas.fire('text:editing:entered', { target: this });\n      this.initMouseMoveHandler();\n      this.canvas.requestRenderAll();\n      return this;\n    },\n\n    exitEditingOnOthers: function(canvas) {\n      if (canvas._iTextInstances) {\n        canvas._iTextInstances.forEach(function(obj) {\n          obj.selected = false;\n          if (obj.isEditing) {\n            obj.exitEditing();\n          }\n        });\n      }\n    },\n\n    /**\n     * Initializes \"mousemove\" event handler\n     */\n    initMouseMoveHandler: function() {\n      this.canvas.on('mouse:move', this.mouseMoveHandler);\n    },\n\n    /**\n     * @private\n     */\n    mouseMoveHandler: function(options) {\n      if (!this.__isMousedown || !this.isEditing) {\n        return;\n      }\n\n      // regain focus\n      document.activeElement !== this.hiddenTextarea && this.hiddenTextarea.focus();\n\n      var newSelectionStart = this.getSelectionStartFromPointer(options.e),\n          currentStart = this.selectionStart,\n          currentEnd = this.selectionEnd;\n      if (\n        (newSelectionStart !== this.__selectionStartOnMouseDown || currentStart === currentEnd)\n        &&\n        (currentStart === newSelectionStart || currentEnd === newSelectionStart)\n      ) {\n        return;\n      }\n      if (newSelectionStart > this.__selectionStartOnMouseDown) {\n        this.selectionStart = this.__selectionStartOnMouseDown;\n        this.selectionEnd = newSelectionStart;\n      }\n      else {\n        this.selectionStart = newSelectionStart;\n        this.selectionEnd = this.__selectionStartOnMouseDown;\n      }\n      if (this.selectionStart !== currentStart || this.selectionEnd !== currentEnd) {\n        this.restartCursorIfNeeded();\n        this._fireSelectionChanged();\n        this._updateTextarea();\n        this.renderCursorOrSelection();\n      }\n    },\n\n    /**\n     * @private\n     */\n    _setEditingProps: function() {\n      this.hoverCursor = 'text';\n\n      if (this.canvas) {\n        this.canvas.defaultCursor = this.canvas.moveCursor = 'text';\n      }\n\n      this.borderColor = this.editingBorderColor;\n      this.hasControls = this.selectable = false;\n      this.lockMovementX = this.lockMovementY = true;\n    },\n\n    /**\n     * convert from textarea to grapheme indexes\n     */\n    fromStringToGraphemeSelection: function(start, end, text) {\n      var smallerTextStart = text.slice(0, start),\n          graphemeStart = fabric.util.string.graphemeSplit(smallerTextStart).length;\n      if (start === end) {\n        return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n      }\n      var smallerTextEnd = text.slice(start, end),\n          graphemeEnd = fabric.util.string.graphemeSplit(smallerTextEnd).length;\n      return { selectionStart: graphemeStart, selectionEnd: graphemeStart + graphemeEnd };\n    },\n\n    /**\n     * convert from fabric to textarea values\n     */\n    fromGraphemeToStringSelection: function(start, end, _text) {\n      var smallerTextStart = _text.slice(0, start),\n          graphemeStart = smallerTextStart.join('').length;\n      if (start === end) {\n        return { selectionStart: graphemeStart, selectionEnd: graphemeStart };\n      }\n      var smallerTextEnd = _text.slice(start, end),\n          graphemeEnd = smallerTextEnd.join('').length;\n      return { selectionStart: graphemeStart, selectionEnd: graphemeStart + graphemeEnd };\n    },\n\n    /**\n     * @private\n     */\n    _updateTextarea: function() {\n      this.cursorOffsetCache = { };\n      if (!this.hiddenTextarea) {\n        return;\n      }\n      if (!this.inCompositionMode) {\n        var newSelection = this.fromGraphemeToStringSelection(this.selectionStart, this.selectionEnd, this._text);\n        this.hiddenTextarea.selectionStart = newSelection.selectionStart;\n        this.hiddenTextarea.selectionEnd = newSelection.selectionEnd;\n      }\n      this.updateTextareaPosition();\n    },\n\n    /**\n     * @private\n     */\n    updateFromTextArea: function() {\n      if (!this.hiddenTextarea) {\n        return;\n      }\n      this.cursorOffsetCache = { };\n      this.text = this.hiddenTextarea.value;\n      if (this._shouldClearDimensionCache()) {\n        this.initDimensions();\n        this.setCoords();\n      }\n      var newSelection = this.fromStringToGraphemeSelection(\n        this.hiddenTextarea.selectionStart, this.hiddenTextarea.selectionEnd, this.hiddenTextarea.value);\n      this.selectionEnd = this.selectionStart = newSelection.selectionEnd;\n      if (!this.inCompositionMode) {\n        this.selectionStart = newSelection.selectionStart;\n      }\n      this.updateTextareaPosition();\n    },\n\n    /**\n     * @private\n     */\n    updateTextareaPosition: function() {\n      if (this.selectionStart === this.selectionEnd) {\n        var style = this._calcTextareaPosition();\n        this.hiddenTextarea.style.left = style.left;\n        this.hiddenTextarea.style.top = style.top;\n      }\n    },\n\n    /**\n     * @private\n     * @return {Object} style contains style for hiddenTextarea\n     */\n    _calcTextareaPosition: function() {\n      if (!this.canvas) {\n        return { x: 1, y: 1 };\n      }\n      var desiredPosition = this.inCompositionMode ? this.compositionStart : this.selectionStart,\n          boundaries = this._getCursorBoundaries(desiredPosition),\n          cursorLocation = this.get2DCursorLocation(desiredPosition),\n          lineIndex = cursorLocation.lineIndex,\n          charIndex = cursorLocation.charIndex,\n          charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize') * this.lineHeight,\n          leftOffset = boundaries.leftOffset,\n          m = this.calcTransformMatrix(),\n          p = {\n            x: boundaries.left + leftOffset,\n            y: boundaries.top + boundaries.topOffset + charHeight\n          },\n          retinaScaling = this.canvas.getRetinaScaling(),\n          upperCanvas = this.canvas.upperCanvasEl,\n          upperCanvasWidth = upperCanvas.width / retinaScaling,\n          upperCanvasHeight = upperCanvas.height / retinaScaling,\n          maxWidth = upperCanvasWidth - charHeight,\n          maxHeight = upperCanvasHeight - charHeight,\n          scaleX = upperCanvas.clientWidth / upperCanvasWidth,\n          scaleY = upperCanvas.clientHeight / upperCanvasHeight;\n\n      p = fabric.util.transformPoint(p, m);\n      p = fabric.util.transformPoint(p, this.canvas.viewportTransform);\n      p.x *= scaleX;\n      p.y *= scaleY;\n      if (p.x < 0) {\n        p.x = 0;\n      }\n      if (p.x > maxWidth) {\n        p.x = maxWidth;\n      }\n      if (p.y < 0) {\n        p.y = 0;\n      }\n      if (p.y > maxHeight) {\n        p.y = maxHeight;\n      }\n\n      // add canvas offset on document\n      p.x += this.canvas._offset.left;\n      p.y += this.canvas._offset.top;\n\n      return { left: p.x + 'px', top: p.y + 'px', fontSize: charHeight + 'px', charHeight: charHeight };\n    },\n\n    /**\n     * @private\n     */\n    _saveEditingProps: function() {\n      this._savedProps = {\n        hasControls: this.hasControls,\n        borderColor: this.borderColor,\n        lockMovementX: this.lockMovementX,\n        lockMovementY: this.lockMovementY,\n        hoverCursor: this.hoverCursor,\n        selectable: this.selectable,\n        defaultCursor: this.canvas && this.canvas.defaultCursor,\n        moveCursor: this.canvas && this.canvas.moveCursor\n      };\n    },\n\n    /**\n     * @private\n     */\n    _restoreEditingProps: function() {\n      if (!this._savedProps) {\n        return;\n      }\n\n      this.hoverCursor = this._savedProps.hoverCursor;\n      this.hasControls = this._savedProps.hasControls;\n      this.borderColor = this._savedProps.borderColor;\n      this.selectable = this._savedProps.selectable;\n      this.lockMovementX = this._savedProps.lockMovementX;\n      this.lockMovementY = this._savedProps.lockMovementY;\n\n      if (this.canvas) {\n        this.canvas.defaultCursor = this._savedProps.defaultCursor;\n        this.canvas.moveCursor = this._savedProps.moveCursor;\n      }\n    },\n\n    /**\n     * Exits from editing state\n     * @return {fabric.IText} thisArg\n     * @chainable\n     */\n    exitEditing: function() {\n      var isTextChanged = (this._textBeforeEdit !== this.text);\n      var hiddenTextarea = this.hiddenTextarea;\n      this.selected = false;\n      this.isEditing = false;\n\n      this.selectionEnd = this.selectionStart;\n\n      if (hiddenTextarea) {\n        hiddenTextarea.blur && hiddenTextarea.blur();\n        hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n      }\n      this.hiddenTextarea = null;\n      this.abortCursorAnimation();\n      this._restoreEditingProps();\n      this._currentCursorOpacity = 0;\n      if (this._shouldClearDimensionCache()) {\n        this.initDimensions();\n        this.setCoords();\n      }\n      this.fire('editing:exited');\n      isTextChanged && this.fire('modified');\n      if (this.canvas) {\n        this.canvas.off('mouse:move', this.mouseMoveHandler);\n        this.canvas.fire('text:editing:exited', { target: this });\n        isTextChanged && this.canvas.fire('object:modified', { target: this });\n      }\n      return this;\n    },\n\n    /**\n     * @private\n     */\n    _removeExtraneousStyles: function() {\n      for (var prop in this.styles) {\n        if (!this._textLines[prop]) {\n          delete this.styles[prop];\n        }\n      }\n    },\n\n    /**\n     * remove and reflow a style block from start to end.\n     * @param {Number} start linear start position for removal (included in removal)\n     * @param {Number} end linear end position for removal ( excluded from removal )\n     */\n    removeStyleFromTo: function(start, end) {\n      var cursorStart = this.get2DCursorLocation(start, true),\n          cursorEnd = this.get2DCursorLocation(end, true),\n          lineStart = cursorStart.lineIndex,\n          charStart = cursorStart.charIndex,\n          lineEnd = cursorEnd.lineIndex,\n          charEnd = cursorEnd.charIndex,\n          i, styleObj;\n      if (lineStart !== lineEnd) {\n        // step1 remove the trailing of lineStart\n        if (this.styles[lineStart]) {\n          for (i = charStart; i < this._unwrappedTextLines[lineStart].length; i++) {\n            delete this.styles[lineStart][i];\n          }\n        }\n        // step2 move the trailing of lineEnd to lineStart if needed\n        if (this.styles[lineEnd]) {\n          for (i = charEnd; i < this._unwrappedTextLines[lineEnd].length; i++) {\n            styleObj = this.styles[lineEnd][i];\n            if (styleObj) {\n              this.styles[lineStart] || (this.styles[lineStart] = { });\n              this.styles[lineStart][charStart + i - charEnd] = styleObj;\n            }\n          }\n        }\n        // step3 detects lines will be completely removed.\n        for (i = lineStart + 1; i <= lineEnd; i++) {\n          delete this.styles[i];\n        }\n        // step4 shift remaining lines.\n        this.shiftLineStyles(lineEnd, lineStart - lineEnd);\n      }\n      else {\n        // remove and shift left on the same line\n        if (this.styles[lineStart]) {\n          styleObj = this.styles[lineStart];\n          var diff = charEnd - charStart, numericChar, _char;\n          for (i = charStart; i < charEnd; i++) {\n            delete styleObj[i];\n          }\n          for (_char in this.styles[lineStart]) {\n            numericChar = parseInt(_char, 10);\n            if (numericChar >= charEnd) {\n              styleObj[numericChar - diff] = styleObj[_char];\n              delete styleObj[_char];\n            }\n          }\n        }\n      }\n    },\n\n    /**\n     * Shifts line styles up or down\n     * @param {Number} lineIndex Index of a line\n     * @param {Number} offset Can any number?\n     */\n    shiftLineStyles: function(lineIndex, offset) {\n      // shift all line styles by offset upward or downward\n      // do not clone deep. we need new array, not new style objects\n      var clonedStyles = clone(this.styles);\n      for (var line in this.styles) {\n        var numericLine = parseInt(line, 10);\n        if (numericLine > lineIndex) {\n          this.styles[numericLine + offset] = clonedStyles[numericLine];\n          if (!clonedStyles[numericLine - offset]) {\n            delete this.styles[numericLine];\n          }\n        }\n      }\n    },\n\n    restartCursorIfNeeded: function() {\n      if (!this._currentTickState || this._currentTickState.isAborted\n        || !this._currentTickCompleteState || this._currentTickCompleteState.isAborted\n      ) {\n        this.initDelayedCursor();\n      }\n    },\n\n    /**\n     * Handle insertion of more consecutive style lines for when one or more\n     * newlines gets added to the text. Since current style needs to be shifted\n     * first we shift the current style of the number lines needed, then we add\n     * new lines from the last to the first.\n     * @param {Number} lineIndex Index of a line\n     * @param {Number} charIndex Index of a char\n     * @param {Number} qty number of lines to add\n     * @param {Array} copiedStyle Array of objects styles\n     */\n    insertNewlineStyleObject: function(lineIndex, charIndex, qty, copiedStyle) {\n      var currentCharStyle,\n          newLineStyles = {},\n          somethingAdded = false,\n          isEndOfLine = this._unwrappedTextLines[lineIndex].length === charIndex;\n\n      qty || (qty = 1);\n      this.shiftLineStyles(lineIndex, qty);\n      if (this.styles[lineIndex]) {\n        currentCharStyle = this.styles[lineIndex][charIndex === 0 ? charIndex : charIndex - 1];\n      }\n      // we clone styles of all chars\n      // after cursor onto the current line\n      for (var index in this.styles[lineIndex]) {\n        var numIndex = parseInt(index, 10);\n        if (numIndex >= charIndex) {\n          somethingAdded = true;\n          newLineStyles[numIndex - charIndex] = this.styles[lineIndex][index];\n          // remove lines from the previous line since they're on a new line now\n          if (!(isEndOfLine && charIndex === 0)) {\n            delete this.styles[lineIndex][index];\n          }\n        }\n      }\n      var styleCarriedOver = false;\n      if (somethingAdded && !isEndOfLine) {\n        // if is end of line, the extra style we copied\n        // is probably not something we want\n        this.styles[lineIndex + qty] = newLineStyles;\n        styleCarriedOver = true;\n      }\n      if (styleCarriedOver) {\n        // skip the last line of since we already prepared it.\n        qty--;\n      }\n      // for the all the lines or all the other lines\n      // we clone current char style onto the next (otherwise empty) line\n      while (qty > 0) {\n        if (copiedStyle && copiedStyle[qty - 1]) {\n          this.styles[lineIndex + qty] = { 0: clone(copiedStyle[qty - 1]) };\n        }\n        else if (currentCharStyle) {\n          this.styles[lineIndex + qty] = { 0: clone(currentCharStyle) };\n        }\n        else {\n          delete this.styles[lineIndex + qty];\n        }\n        qty--;\n      }\n      this._forceClearCache = true;\n    },\n\n    /**\n     * Inserts style object for a given line/char index\n     * @param {Number} lineIndex Index of a line\n     * @param {Number} charIndex Index of a char\n     * @param {Number} quantity number Style object to insert, if given\n     * @param {Array} copiedStyle array of style objects\n     */\n    insertCharStyleObject: function(lineIndex, charIndex, quantity, copiedStyle) {\n      if (!this.styles) {\n        this.styles = {};\n      }\n      var currentLineStyles       = this.styles[lineIndex],\n          currentLineStylesCloned = currentLineStyles ? clone(currentLineStyles) : {};\n\n      quantity || (quantity = 1);\n      // shift all char styles by quantity forward\n      // 0,1,2,3 -> (charIndex=2) -> 0,1,3,4 -> (insert 2) -> 0,1,2,3,4\n      for (var index in currentLineStylesCloned) {\n        var numericIndex = parseInt(index, 10);\n        if (numericIndex >= charIndex) {\n          currentLineStyles[numericIndex + quantity] = currentLineStylesCloned[numericIndex];\n          // only delete the style if there was nothing moved there\n          if (!currentLineStylesCloned[numericIndex - quantity]) {\n            delete currentLineStyles[numericIndex];\n          }\n        }\n      }\n      this._forceClearCache = true;\n      if (copiedStyle) {\n        while (quantity--) {\n          if (!Object.keys(copiedStyle[quantity]).length) {\n            continue;\n          }\n          if (!this.styles[lineIndex]) {\n            this.styles[lineIndex] = {};\n          }\n          this.styles[lineIndex][charIndex + quantity] = clone(copiedStyle[quantity]);\n        }\n        return;\n      }\n      if (!currentLineStyles) {\n        return;\n      }\n      var newStyle = currentLineStyles[charIndex ? charIndex - 1 : 1];\n      while (newStyle && quantity--) {\n        this.styles[lineIndex][charIndex + quantity] = clone(newStyle);\n      }\n    },\n\n    /**\n     * Inserts style object(s)\n     * @param {Array} insertedText Characters at the location where style is inserted\n     * @param {Number} start cursor index for inserting style\n     * @param {Array} [copiedStyle] array of style objects to insert.\n     */\n    insertNewStyleBlock: function(insertedText, start, copiedStyle) {\n      var cursorLoc = this.get2DCursorLocation(start, true),\n          addedLines = [0], linesLength = 0;\n      // get an array of how many char per lines are being added.\n      for (var i = 0; i < insertedText.length; i++) {\n        if (insertedText[i] === '\\n') {\n          linesLength++;\n          addedLines[linesLength] = 0;\n        }\n        else {\n          addedLines[linesLength]++;\n        }\n      }\n      // for the first line copy the style from the current char position.\n      if (addedLines[0] > 0) {\n        this.insertCharStyleObject(cursorLoc.lineIndex, cursorLoc.charIndex, addedLines[0], copiedStyle);\n        copiedStyle = copiedStyle && copiedStyle.slice(addedLines[0] + 1);\n      }\n      linesLength && this.insertNewlineStyleObject(\n        cursorLoc.lineIndex, cursorLoc.charIndex + addedLines[0], linesLength);\n      for (var i = 1; i < linesLength; i++) {\n        if (addedLines[i] > 0) {\n          this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle);\n        }\n        else if (copiedStyle) {\n          // this test is required in order to close #6841\n          // when a pasted buffer begins with a newline then\n          // this.styles[cursorLoc.lineIndex + i] and copiedStyle[0]\n          // may be undefined for some reason\n          if (this.styles[cursorLoc.lineIndex + i] && copiedStyle[0]) {\n            this.styles[cursorLoc.lineIndex + i][0] = copiedStyle[0];\n          }\n        }\n        copiedStyle = copiedStyle && copiedStyle.slice(addedLines[i] + 1);\n      }\n      // we use i outside the loop to get it like linesLength\n      if (addedLines[i] > 0) {\n        this.insertCharStyleObject(cursorLoc.lineIndex + i, 0, addedLines[i], copiedStyle);\n      }\n    },\n\n    /**\n     * Set the selectionStart and selectionEnd according to the new position of cursor\n     * mimic the key - mouse navigation when shift is pressed.\n     */\n    setSelectionStartEndWithShift: function(start, end, newSelection) {\n      if (newSelection <= start) {\n        if (end === start) {\n          this._selectionDirection = 'left';\n        }\n        else if (this._selectionDirection === 'right') {\n          this._selectionDirection = 'left';\n          this.selectionEnd = start;\n        }\n        this.selectionStart = newSelection;\n      }\n      else if (newSelection > start && newSelection < end) {\n        if (this._selectionDirection === 'right') {\n          this.selectionEnd = newSelection;\n        }\n        else {\n          this.selectionStart = newSelection;\n        }\n      }\n      else {\n        // newSelection is > selection start and end\n        if (end === start) {\n          this._selectionDirection = 'right';\n        }\n        else if (this._selectionDirection === 'left') {\n          this._selectionDirection = 'right';\n          this.selectionStart = end;\n        }\n        this.selectionEnd = newSelection;\n      }\n    },\n\n    setSelectionInBoundaries: function() {\n      var length = this.text.length;\n      if (this.selectionStart > length) {\n        this.selectionStart = length;\n      }\n      else if (this.selectionStart < 0) {\n        this.selectionStart = 0;\n      }\n      if (this.selectionEnd > length) {\n        this.selectionEnd = length;\n      }\n      else if (this.selectionEnd < 0) {\n        this.selectionEnd = 0;\n      }\n    }\n  });\n})();\n\n\nfabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n  /**\n   * Initializes \"dbclick\" event handler\n   */\n  initDoubleClickSimulation: function() {\n\n    // for double click\n    this.__lastClickTime = +new Date();\n\n    // for triple click\n    this.__lastLastClickTime = +new Date();\n\n    this.__lastPointer = { };\n\n    this.on('mousedown', this.onMouseDown);\n  },\n\n  /**\n   * Default event handler to simulate triple click\n   * @private\n   */\n  onMouseDown: function(options) {\n    if (!this.canvas) {\n      return;\n    }\n    this.__newClickTime = +new Date();\n    var newPointer = options.pointer;\n    if (this.isTripleClick(newPointer)) {\n      this.fire('tripleclick', options);\n      this._stopEvent(options.e);\n    }\n    this.__lastLastClickTime = this.__lastClickTime;\n    this.__lastClickTime = this.__newClickTime;\n    this.__lastPointer = newPointer;\n    this.__lastIsEditing = this.isEditing;\n    this.__lastSelected = this.selected;\n  },\n\n  isTripleClick: function(newPointer) {\n    return this.__newClickTime - this.__lastClickTime < 500 &&\n        this.__lastClickTime - this.__lastLastClickTime < 500 &&\n        this.__lastPointer.x === newPointer.x &&\n        this.__lastPointer.y === newPointer.y;\n  },\n\n  /**\n   * @private\n   */\n  _stopEvent: function(e) {\n    e.preventDefault && e.preventDefault();\n    e.stopPropagation && e.stopPropagation();\n  },\n\n  /**\n   * Initializes event handlers related to cursor or selection\n   */\n  initCursorSelectionHandlers: function() {\n    this.initMousedownHandler();\n    this.initMouseupHandler();\n    this.initClicks();\n  },\n\n  /**\n   * Default handler for double click, select a word\n   */\n  doubleClickHandler: function(options) {\n    if (!this.isEditing) {\n      return;\n    }\n    this.selectWord(this.getSelectionStartFromPointer(options.e));\n  },\n\n  /**\n   * Default handler for triple click, select a line\n   */\n  tripleClickHandler: function(options) {\n    if (!this.isEditing) {\n      return;\n    }\n    this.selectLine(this.getSelectionStartFromPointer(options.e));\n  },\n\n  /**\n   * Initializes double and triple click event handlers\n   */\n  initClicks: function() {\n    this.on('mousedblclick', this.doubleClickHandler);\n    this.on('tripleclick', this.tripleClickHandler);\n  },\n\n  /**\n   * Default event handler for the basic functionalities needed on _mouseDown\n   * can be overridden to do something different.\n   * Scope of this implementation is: find the click position, set selectionStart\n   * find selectionEnd, initialize the drawing of either cursor or selection area\n   * initializing a mousedDown on a text area will cancel fabricjs knowledge of\n   * current compositionMode. It will be set to false.\n   */\n  _mouseDownHandler: function(options) {\n    if (!this.canvas || !this.editable || (options.e.button && options.e.button !== 1)) {\n      return;\n    }\n\n    this.__isMousedown = true;\n\n    if (this.selected) {\n      this.inCompositionMode = false;\n      this.setCursorByClick(options.e);\n    }\n\n    if (this.isEditing) {\n      this.__selectionStartOnMouseDown = this.selectionStart;\n      if (this.selectionStart === this.selectionEnd) {\n        this.abortCursorAnimation();\n      }\n      this.renderCursorOrSelection();\n    }\n  },\n\n  /**\n   * Default event handler for the basic functionalities needed on mousedown:before\n   * can be overridden to do something different.\n   * Scope of this implementation is: verify the object is already selected when mousing down\n   */\n  _mouseDownHandlerBefore: function(options) {\n    if (!this.canvas || !this.editable || (options.e.button && options.e.button !== 1)) {\n      return;\n    }\n    // we want to avoid that an object that was selected and then becomes unselectable,\n    // may trigger editing mode in some way.\n    this.selected = this === this.canvas._activeObject;\n  },\n\n  /**\n   * Initializes \"mousedown\" event handler\n   */\n  initMousedownHandler: function() {\n    this.on('mousedown', this._mouseDownHandler);\n    this.on('mousedown:before', this._mouseDownHandlerBefore);\n  },\n\n  /**\n   * Initializes \"mouseup\" event handler\n   */\n  initMouseupHandler: function() {\n    this.on('mouseup', this.mouseUpHandler);\n  },\n\n  /**\n   * standard handler for mouse up, overridable\n   * @private\n   */\n  mouseUpHandler: function(options) {\n    this.__isMousedown = false;\n    if (!this.editable || this.group ||\n      (options.transform && options.transform.actionPerformed) ||\n      (options.e.button && options.e.button !== 1)) {\n      return;\n    }\n\n    if (this.canvas) {\n      var currentActive = this.canvas._activeObject;\n      if (currentActive && currentActive !== this) {\n        // avoid running this logic when there is an active object\n        // this because is possible with shift click and fast clicks,\n        // to rapidly deselect and reselect this object and trigger an enterEdit\n        return;\n      }\n    }\n\n    if (this.__lastSelected && !this.__corner) {\n      this.selected = false;\n      this.__lastSelected = false;\n      this.enterEditing(options.e);\n      if (this.selectionStart === this.selectionEnd) {\n        this.initDelayedCursor(true);\n      }\n      else {\n        this.renderCursorOrSelection();\n      }\n    }\n    else {\n      this.selected = true;\n    }\n  },\n\n  /**\n   * Changes cursor location in a text depending on passed pointer (x/y) object\n   * @param {Event} e Event object\n   */\n  setCursorByClick: function(e) {\n    var newSelection = this.getSelectionStartFromPointer(e),\n        start = this.selectionStart, end = this.selectionEnd;\n    if (e.shiftKey) {\n      this.setSelectionStartEndWithShift(start, end, newSelection);\n    }\n    else {\n      this.selectionStart = newSelection;\n      this.selectionEnd = newSelection;\n    }\n    if (this.isEditing) {\n      this._fireSelectionChanged();\n      this._updateTextarea();\n    }\n  },\n\n  /**\n   * Returns index of a character corresponding to where an object was clicked\n   * @param {Event} e Event object\n   * @return {Number} Index of a character\n   */\n  getSelectionStartFromPointer: function(e) {\n    var mouseOffset = this.getLocalPointer(e),\n        prevWidth = 0,\n        width = 0,\n        height = 0,\n        charIndex = 0,\n        lineIndex = 0,\n        lineLeftOffset,\n        line;\n    for (var i = 0, len = this._textLines.length; i < len; i++) {\n      if (height <= mouseOffset.y) {\n        height += this.getHeightOfLine(i) * this.scaleY;\n        lineIndex = i;\n        if (i > 0) {\n          charIndex += this._textLines[i - 1].length + this.missingNewlineOffset(i - 1);\n        }\n      }\n      else {\n        break;\n      }\n    }\n    lineLeftOffset = this._getLineLeftOffset(lineIndex);\n    width = lineLeftOffset * this.scaleX;\n    line = this._textLines[lineIndex];\n    // handling of RTL: in order to get things work correctly,\n    // we assume RTL writing is mirrored compared to LTR writing.\n    // so in position detection we mirror the X offset, and when is time\n    // of rendering it, we mirror it again.\n    if (this.direction === 'rtl') {\n      mouseOffset.x = this.width * this.scaleX - mouseOffset.x + width;\n    }\n    for (var j = 0, jlen = line.length; j < jlen; j++) {\n      prevWidth = width;\n      // i removed something about flipX here, check.\n      width += this.__charBounds[lineIndex][j].kernedWidth * this.scaleX;\n      if (width <= mouseOffset.x) {\n        charIndex++;\n      }\n      else {\n        break;\n      }\n    }\n    return this._getNewSelectionStartFromOffset(mouseOffset, prevWidth, width, charIndex, jlen);\n  },\n\n  /**\n   * @private\n   */\n  _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen) {\n    // we need Math.abs because when width is after the last char, the offset is given as 1, while is 0\n    var distanceBtwLastCharAndCursor = mouseOffset.x - prevWidth,\n        distanceBtwNextCharAndCursor = width - mouseOffset.x,\n        offset = distanceBtwNextCharAndCursor > distanceBtwLastCharAndCursor ||\n          distanceBtwNextCharAndCursor < 0 ? 0 : 1,\n        newSelectionStart = index + offset;\n    // if object is horizontally flipped, mirror cursor location from the end\n    if (this.flipX) {\n      newSelectionStart = jlen - newSelectionStart;\n    }\n\n    if (newSelectionStart > this._text.length) {\n      newSelectionStart = this._text.length;\n    }\n\n    return newSelectionStart;\n  }\n});\n\n\nfabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.prototype */ {\n\n  /**\n   * Initializes hidden textarea (needed to bring up keyboard in iOS)\n   */\n  initHiddenTextarea: function() {\n    this.hiddenTextarea = fabric.document.createElement('textarea');\n    this.hiddenTextarea.setAttribute('autocapitalize', 'off');\n    this.hiddenTextarea.setAttribute('autocorrect', 'off');\n    this.hiddenTextarea.setAttribute('autocomplete', 'off');\n    this.hiddenTextarea.setAttribute('spellcheck', 'false');\n    this.hiddenTextarea.setAttribute('data-fabric-hiddentextarea', '');\n    this.hiddenTextarea.setAttribute('wrap', 'off');\n    var style = this._calcTextareaPosition();\n    // line-height: 1px; was removed from the style to fix this:\n    // https://bugs.chromium.org/p/chromium/issues/detail?id=870966\n    this.hiddenTextarea.style.cssText = 'position: absolute; top: ' + style.top +\n    '; left: ' + style.left + '; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px;' +\n    ' paddingｰtop: ' + style.fontSize + ';';\n\n    if (this.hiddenTextareaContainer) {\n      this.hiddenTextareaContainer.appendChild(this.hiddenTextarea);\n    }\n    else {\n      fabric.document.body.appendChild(this.hiddenTextarea);\n    }\n\n    fabric.util.addListener(this.hiddenTextarea, 'keydown', this.onKeyDown.bind(this));\n    fabric.util.addListener(this.hiddenTextarea, 'keyup', this.onKeyUp.bind(this));\n    fabric.util.addListener(this.hiddenTextarea, 'input', this.onInput.bind(this));\n    fabric.util.addListener(this.hiddenTextarea, 'copy', this.copy.bind(this));\n    fabric.util.addListener(this.hiddenTextarea, 'cut', this.copy.bind(this));\n    fabric.util.addListener(this.hiddenTextarea, 'paste', this.paste.bind(this));\n    fabric.util.addListener(this.hiddenTextarea, 'compositionstart', this.onCompositionStart.bind(this));\n    fabric.util.addListener(this.hiddenTextarea, 'compositionupdate', this.onCompositionUpdate.bind(this));\n    fabric.util.addListener(this.hiddenTextarea, 'compositionend', this.onCompositionEnd.bind(this));\n\n    if (!this._clickHandlerInitialized && this.canvas) {\n      fabric.util.addListener(this.canvas.upperCanvasEl, 'click', this.onClick.bind(this));\n      this._clickHandlerInitialized = true;\n    }\n  },\n\n  /**\n   * For functionalities on keyDown\n   * Map a special key to a function of the instance/prototype\n   * If you need different behaviour for ESC or TAB or arrows, you have to change\n   * this map setting the name of a function that you build on the fabric.Itext or\n   * your prototype.\n   * the map change will affect all Instances unless you need for only some text Instances\n   * in that case you have to clone this object and assign your Instance.\n   * this.keysMap = fabric.util.object.clone(this.keysMap);\n   * The function must be in fabric.Itext.prototype.myFunction And will receive event as args[0]\n   */\n  keysMap: {\n    9:  'exitEditing',\n    27: 'exitEditing',\n    33: 'moveCursorUp',\n    34: 'moveCursorDown',\n    35: 'moveCursorRight',\n    36: 'moveCursorLeft',\n    37: 'moveCursorLeft',\n    38: 'moveCursorUp',\n    39: 'moveCursorRight',\n    40: 'moveCursorDown',\n  },\n\n  keysMapRtl: {\n    9:  'exitEditing',\n    27: 'exitEditing',\n    33: 'moveCursorUp',\n    34: 'moveCursorDown',\n    35: 'moveCursorLeft',\n    36: 'moveCursorRight',\n    37: 'moveCursorRight',\n    38: 'moveCursorUp',\n    39: 'moveCursorLeft',\n    40: 'moveCursorDown',\n  },\n\n  /**\n   * For functionalities on keyUp + ctrl || cmd\n   */\n  ctrlKeysMapUp: {\n    67: 'copy',\n    88: 'cut'\n  },\n\n  /**\n   * For functionalities on keyDown + ctrl || cmd\n   */\n  ctrlKeysMapDown: {\n    65: 'selectAll'\n  },\n\n  onClick: function() {\n    // No need to trigger click event here, focus is enough to have the keyboard appear on Android\n    this.hiddenTextarea && this.hiddenTextarea.focus();\n  },\n\n  /**\n   * Handles keydown event\n   * only used for arrows and combination of modifier keys.\n   * @param {Event} e Event object\n   */\n  onKeyDown: function(e) {\n    if (!this.isEditing) {\n      return;\n    }\n    var keyMap = this.direction === 'rtl' ? this.keysMapRtl : this.keysMap;\n    if (e.keyCode in keyMap) {\n      this[keyMap[e.keyCode]](e);\n    }\n    else if ((e.keyCode in this.ctrlKeysMapDown) && (e.ctrlKey || e.metaKey)) {\n      this[this.ctrlKeysMapDown[e.keyCode]](e);\n    }\n    else {\n      return;\n    }\n    e.stopImmediatePropagation();\n    e.preventDefault();\n    if (e.keyCode >= 33 && e.keyCode <= 40) {\n      // if i press an arrow key just update selection\n      this.inCompositionMode = false;\n      this.clearContextTop();\n      this.renderCursorOrSelection();\n    }\n    else {\n      this.canvas && this.canvas.requestRenderAll();\n    }\n  },\n\n  /**\n   * Handles keyup event\n   * We handle KeyUp because ie11 and edge have difficulties copy/pasting\n   * if a copy/cut event fired, keyup is dismissed\n   * @param {Event} e Event object\n   */\n  onKeyUp: function(e) {\n    if (!this.isEditing || this._copyDone || this.inCompositionMode) {\n      this._copyDone = false;\n      return;\n    }\n    if ((e.keyCode in this.ctrlKeysMapUp) && (e.ctrlKey || e.metaKey)) {\n      this[this.ctrlKeysMapUp[e.keyCode]](e);\n    }\n    else {\n      return;\n    }\n    e.stopImmediatePropagation();\n    e.preventDefault();\n    this.canvas && this.canvas.requestRenderAll();\n  },\n\n  /**\n   * Handles onInput event\n   * @param {Event} e Event object\n   */\n  onInput: function(e) {\n    var fromPaste = this.fromPaste;\n    this.fromPaste = false;\n    e && e.stopPropagation();\n    if (!this.isEditing) {\n      return;\n    }\n    // decisions about style changes.\n    var nextText = this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,\n        charCount = this._text.length,\n        nextCharCount = nextText.length,\n        removedText, insertedText,\n        charDiff = nextCharCount - charCount,\n        selectionStart = this.selectionStart, selectionEnd = this.selectionEnd,\n        selection = selectionStart !== selectionEnd,\n        copiedStyle, removeFrom, removeTo;\n    if (this.hiddenTextarea.value === '') {\n      this.styles = { };\n      this.updateFromTextArea();\n      this.fire('changed');\n      if (this.canvas) {\n        this.canvas.fire('text:changed', { target: this });\n        this.canvas.requestRenderAll();\n      }\n      return;\n    }\n\n    var textareaSelection = this.fromStringToGraphemeSelection(\n      this.hiddenTextarea.selectionStart,\n      this.hiddenTextarea.selectionEnd,\n      this.hiddenTextarea.value\n    );\n    var backDelete = selectionStart > textareaSelection.selectionStart;\n\n    if (selection) {\n      removedText = this._text.slice(selectionStart, selectionEnd);\n      charDiff += selectionEnd - selectionStart;\n    }\n    else if (nextCharCount < charCount) {\n      if (backDelete) {\n        removedText = this._text.slice(selectionEnd + charDiff, selectionEnd);\n      }\n      else {\n        removedText = this._text.slice(selectionStart, selectionStart - charDiff);\n      }\n    }\n    insertedText = nextText.slice(textareaSelection.selectionEnd - charDiff, textareaSelection.selectionEnd);\n    if (removedText && removedText.length) {\n      if (insertedText.length) {\n        // let's copy some style before deleting.\n        // we want to copy the style before the cursor OR the style at the cursor if selection\n        // is bigger than 0.\n        copiedStyle = this.getSelectionStyles(selectionStart, selectionStart + 1, false);\n        // now duplicate the style one for each inserted text.\n        copiedStyle = insertedText.map(function() {\n          // this return an array of references, but that is fine since we are\n          // copying the style later.\n          return copiedStyle[0];\n        });\n      }\n      if (selection) {\n        removeFrom = selectionStart;\n        removeTo = selectionEnd;\n      }\n      else if (backDelete) {\n        // detect differences between forwardDelete and backDelete\n        removeFrom = selectionEnd - removedText.length;\n        removeTo = selectionEnd;\n      }\n      else {\n        removeFrom = selectionEnd;\n        removeTo = selectionEnd + removedText.length;\n      }\n      this.removeStyleFromTo(removeFrom, removeTo);\n    }\n    if (insertedText.length) {\n      if (fromPaste && insertedText.join('') === fabric.copiedText && !fabric.disableStyleCopyPaste) {\n        copiedStyle = fabric.copiedTextStyle;\n      }\n      this.insertNewStyleBlock(insertedText, selectionStart, copiedStyle);\n    }\n    this.updateFromTextArea();\n    this.fire('changed');\n    if (this.canvas) {\n      this.canvas.fire('text:changed', { target: this });\n      this.canvas.requestRenderAll();\n    }\n  },\n  /**\n   * Composition start\n   */\n  onCompositionStart: function() {\n    this.inCompositionMode = true;\n  },\n\n  /**\n   * Composition end\n   */\n  onCompositionEnd: function() {\n    this.inCompositionMode = false;\n  },\n\n  // /**\n  //  * Composition update\n  //  */\n  onCompositionUpdate: function(e) {\n    this.compositionStart = e.target.selectionStart;\n    this.compositionEnd = e.target.selectionEnd;\n    this.updateTextareaPosition();\n  },\n\n  /**\n   * Copies selected text\n   * @param {Event} e Event object\n   */\n  copy: function() {\n    if (this.selectionStart === this.selectionEnd) {\n      //do not cut-copy if no selection\n      return;\n    }\n\n    fabric.copiedText = this.getSelectedText();\n    if (!fabric.disableStyleCopyPaste) {\n      fabric.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd, true);\n    }\n    else {\n      fabric.copiedTextStyle = null;\n    }\n    this._copyDone = true;\n  },\n\n  /**\n   * Pastes text\n   * @param {Event} e Event object\n   */\n  paste: function() {\n    this.fromPaste = true;\n  },\n\n  /**\n   * @private\n   * @param {Event} e Event object\n   * @return {Object} Clipboard data object\n   */\n  _getClipboardData: function(e) {\n    return (e && e.clipboardData) || fabric.window.clipboardData;\n  },\n\n  /**\n   * Finds the width in pixels before the cursor on the same line\n   * @private\n   * @param {Number} lineIndex\n   * @param {Number} charIndex\n   * @return {Number} widthBeforeCursor width before cursor\n   */\n  _getWidthBeforeCursor: function(lineIndex, charIndex) {\n    var widthBeforeCursor = this._getLineLeftOffset(lineIndex), bound;\n\n    if (charIndex > 0) {\n      bound = this.__charBounds[lineIndex][charIndex - 1];\n      widthBeforeCursor += bound.left + bound.width;\n    }\n    return widthBeforeCursor;\n  },\n\n  /**\n   * Gets start offset of a selection\n   * @param {Event} e Event object\n   * @param {Boolean} isRight\n   * @return {Number}\n   */\n  getDownCursorOffset: function(e, isRight) {\n    var selectionProp = this._getSelectionForOffset(e, isRight),\n        cursorLocation = this.get2DCursorLocation(selectionProp),\n        lineIndex = cursorLocation.lineIndex;\n    // if on last line, down cursor goes to end of line\n    if (lineIndex === this._textLines.length - 1 || e.metaKey || e.keyCode === 34) {\n      // move to the end of a text\n      return this._text.length - selectionProp;\n    }\n    var charIndex = cursorLocation.charIndex,\n        widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n        indexOnOtherLine = this._getIndexOnLine(lineIndex + 1, widthBeforeCursor),\n        textAfterCursor = this._textLines[lineIndex].slice(charIndex);\n    return textAfterCursor.length + indexOnOtherLine + 1 + this.missingNewlineOffset(lineIndex);\n  },\n\n  /**\n   * private\n   * Helps finding if the offset should be counted from Start or End\n   * @param {Event} e Event object\n   * @param {Boolean} isRight\n   * @return {Number}\n   */\n  _getSelectionForOffset: function(e, isRight) {\n    if (e.shiftKey && this.selectionStart !== this.selectionEnd && isRight) {\n      return this.selectionEnd;\n    }\n    else {\n      return this.selectionStart;\n    }\n  },\n\n  /**\n   * @param {Event} e Event object\n   * @param {Boolean} isRight\n   * @return {Number}\n   */\n  getUpCursorOffset: function(e, isRight) {\n    var selectionProp = this._getSelectionForOffset(e, isRight),\n        cursorLocation = this.get2DCursorLocation(selectionProp),\n        lineIndex = cursorLocation.lineIndex;\n    if (lineIndex === 0 || e.metaKey || e.keyCode === 33) {\n      // if on first line, up cursor goes to start of line\n      return -selectionProp;\n    }\n    var charIndex = cursorLocation.charIndex,\n        widthBeforeCursor = this._getWidthBeforeCursor(lineIndex, charIndex),\n        indexOnOtherLine = this._getIndexOnLine(lineIndex - 1, widthBeforeCursor),\n        textBeforeCursor = this._textLines[lineIndex].slice(0, charIndex),\n        missingNewlineOffset = this.missingNewlineOffset(lineIndex - 1);\n    // return a negative offset\n    return -this._textLines[lineIndex - 1].length\n     + indexOnOtherLine - textBeforeCursor.length + (1 - missingNewlineOffset);\n  },\n\n  /**\n   * for a given width it founds the matching character.\n   * @private\n   */\n  _getIndexOnLine: function(lineIndex, width) {\n\n    var line = this._textLines[lineIndex],\n        lineLeftOffset = this._getLineLeftOffset(lineIndex),\n        widthOfCharsOnLine = lineLeftOffset,\n        indexOnLine = 0, charWidth, foundMatch;\n\n    for (var j = 0, jlen = line.length; j < jlen; j++) {\n      charWidth = this.__charBounds[lineIndex][j].width;\n      widthOfCharsOnLine += charWidth;\n      if (widthOfCharsOnLine > width) {\n        foundMatch = true;\n        var leftEdge = widthOfCharsOnLine - charWidth,\n            rightEdge = widthOfCharsOnLine,\n            offsetFromLeftEdge = Math.abs(leftEdge - width),\n            offsetFromRightEdge = Math.abs(rightEdge - width);\n\n        indexOnLine = offsetFromRightEdge < offsetFromLeftEdge ? j : (j - 1);\n        break;\n      }\n    }\n\n    // reached end\n    if (!foundMatch) {\n      indexOnLine = line.length - 1;\n    }\n\n    return indexOnLine;\n  },\n\n\n  /**\n   * Moves cursor down\n   * @param {Event} e Event object\n   */\n  moveCursorDown: function(e) {\n    if (this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length) {\n      return;\n    }\n    this._moveCursorUpOrDown('Down', e);\n  },\n\n  /**\n   * Moves cursor up\n   * @param {Event} e Event object\n   */\n  moveCursorUp: function(e) {\n    if (this.selectionStart === 0 && this.selectionEnd === 0) {\n      return;\n    }\n    this._moveCursorUpOrDown('Up', e);\n  },\n\n  /**\n   * Moves cursor up or down, fires the events\n   * @param {String} direction 'Up' or 'Down'\n   * @param {Event} e Event object\n   */\n  _moveCursorUpOrDown: function(direction, e) {\n    // getUpCursorOffset\n    // getDownCursorOffset\n    var action = 'get' + direction + 'CursorOffset',\n        offset = this[action](e, this._selectionDirection === 'right');\n    if (e.shiftKey) {\n      this.moveCursorWithShift(offset);\n    }\n    else {\n      this.moveCursorWithoutShift(offset);\n    }\n    if (offset !== 0) {\n      this.setSelectionInBoundaries();\n      this.abortCursorAnimation();\n      this._currentCursorOpacity = 1;\n      this.initDelayedCursor();\n      this._fireSelectionChanged();\n      this._updateTextarea();\n    }\n  },\n\n  /**\n   * Moves cursor with shift\n   * @param {Number} offset\n   */\n  moveCursorWithShift: function(offset) {\n    var newSelection = this._selectionDirection === 'left'\n      ? this.selectionStart + offset\n      : this.selectionEnd + offset;\n    this.setSelectionStartEndWithShift(this.selectionStart, this.selectionEnd, newSelection);\n    return offset !== 0;\n  },\n\n  /**\n   * Moves cursor up without shift\n   * @param {Number} offset\n   */\n  moveCursorWithoutShift: function(offset) {\n    if (offset < 0) {\n      this.selectionStart += offset;\n      this.selectionEnd = this.selectionStart;\n    }\n    else {\n      this.selectionEnd += offset;\n      this.selectionStart = this.selectionEnd;\n    }\n    return offset !== 0;\n  },\n\n  /**\n   * Moves cursor left\n   * @param {Event} e Event object\n   */\n  moveCursorLeft: function(e) {\n    if (this.selectionStart === 0 && this.selectionEnd === 0) {\n      return;\n    }\n    this._moveCursorLeftOrRight('Left', e);\n  },\n\n  /**\n   * @private\n   * @return {Boolean} true if a change happened\n   */\n  _move: function(e, prop, direction) {\n    var newValue;\n    if (e.altKey) {\n      newValue = this['findWordBoundary' + direction](this[prop]);\n    }\n    else if (e.metaKey || e.keyCode === 35 ||  e.keyCode === 36 ) {\n      newValue = this['findLineBoundary' + direction](this[prop]);\n    }\n    else {\n      this[prop] += direction === 'Left' ? -1 : 1;\n      return true;\n    }\n    if (typeof newValue !== 'undefined' && this[prop] !== newValue) {\n      this[prop] = newValue;\n      return true;\n    }\n  },\n\n  /**\n   * @private\n   */\n  _moveLeft: function(e, prop) {\n    return this._move(e, prop, 'Left');\n  },\n\n  /**\n   * @private\n   */\n  _moveRight: function(e, prop) {\n    return this._move(e, prop, 'Right');\n  },\n\n  /**\n   * Moves cursor left without keeping selection\n   * @param {Event} e\n   */\n  moveCursorLeftWithoutShift: function(e) {\n    var change = true;\n    this._selectionDirection = 'left';\n\n    // only move cursor when there is no selection,\n    // otherwise we discard it, and leave cursor on same place\n    if (this.selectionEnd === this.selectionStart && this.selectionStart !== 0) {\n      change = this._moveLeft(e, 'selectionStart');\n\n    }\n    this.selectionEnd = this.selectionStart;\n    return change;\n  },\n\n  /**\n   * Moves cursor left while keeping selection\n   * @param {Event} e\n   */\n  moveCursorLeftWithShift: function(e) {\n    if (this._selectionDirection === 'right' && this.selectionStart !== this.selectionEnd) {\n      return this._moveLeft(e, 'selectionEnd');\n    }\n    else if (this.selectionStart !== 0){\n      this._selectionDirection = 'left';\n      return this._moveLeft(e, 'selectionStart');\n    }\n  },\n\n  /**\n   * Moves cursor right\n   * @param {Event} e Event object\n   */\n  moveCursorRight: function(e) {\n    if (this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length) {\n      return;\n    }\n    this._moveCursorLeftOrRight('Right', e);\n  },\n\n  /**\n   * Moves cursor right or Left, fires event\n   * @param {String} direction 'Left', 'Right'\n   * @param {Event} e Event object\n   */\n  _moveCursorLeftOrRight: function(direction, e) {\n    var actionName = 'moveCursor' + direction + 'With';\n    this._currentCursorOpacity = 1;\n\n    if (e.shiftKey) {\n      actionName += 'Shift';\n    }\n    else {\n      actionName += 'outShift';\n    }\n    if (this[actionName](e)) {\n      this.abortCursorAnimation();\n      this.initDelayedCursor();\n      this._fireSelectionChanged();\n      this._updateTextarea();\n    }\n  },\n\n  /**\n   * Moves cursor right while keeping selection\n   * @param {Event} e\n   */\n  moveCursorRightWithShift: function(e) {\n    if (this._selectionDirection === 'left' && this.selectionStart !== this.selectionEnd) {\n      return this._moveRight(e, 'selectionStart');\n    }\n    else if (this.selectionEnd !== this._text.length) {\n      this._selectionDirection = 'right';\n      return this._moveRight(e, 'selectionEnd');\n    }\n  },\n\n  /**\n   * Moves cursor right without keeping selection\n   * @param {Event} e Event object\n   */\n  moveCursorRightWithoutShift: function(e) {\n    var changed = true;\n    this._selectionDirection = 'right';\n\n    if (this.selectionStart === this.selectionEnd) {\n      changed = this._moveRight(e, 'selectionStart');\n      this.selectionEnd = this.selectionStart;\n    }\n    else {\n      this.selectionStart = this.selectionEnd;\n    }\n    return changed;\n  },\n\n  /**\n   * Removes characters from start/end\n   * start/end ar per grapheme position in _text array.\n   *\n   * @param {Number} start\n   * @param {Number} end default to start + 1\n   */\n  removeChars: function(start, end) {\n    if (typeof end === 'undefined') {\n      end = start + 1;\n    }\n    this.removeStyleFromTo(start, end);\n    this._text.splice(start, end - start);\n    this.text = this._text.join('');\n    this.set('dirty', true);\n    if (this._shouldClearDimensionCache()) {\n      this.initDimensions();\n      this.setCoords();\n    }\n    this._removeExtraneousStyles();\n  },\n\n  /**\n   * insert characters at start position, before start position.\n   * start  equal 1 it means the text get inserted between actual grapheme 0 and 1\n   * if style array is provided, it must be as the same length of text in graphemes\n   * if end is provided and is bigger than start, old text is replaced.\n   * start/end ar per grapheme position in _text array.\n   *\n   * @param {String} text text to insert\n   * @param {Array} style array of style objects\n   * @param {Number} start\n   * @param {Number} end default to start + 1\n   */\n  insertChars: function(text, style, start, end) {\n    if (typeof end === 'undefined') {\n      end = start;\n    }\n    if (end > start) {\n      this.removeStyleFromTo(start, end);\n    }\n    var graphemes = fabric.util.string.graphemeSplit(text);\n    this.insertNewStyleBlock(graphemes, start, style);\n    this._text = [].concat(this._text.slice(0, start), graphemes, this._text.slice(end));\n    this.text = this._text.join('');\n    this.set('dirty', true);\n    if (this._shouldClearDimensionCache()) {\n      this.initDimensions();\n      this.setCoords();\n    }\n    this._removeExtraneousStyles();\n  },\n\n});\n\n\n/* _TO_SVG_START_ */\n(function() {\n  var toFixed = fabric.util.toFixed,\n      multipleSpacesRegex = /  +/g;\n\n  fabric.util.object.extend(fabric.Text.prototype, /** @lends fabric.Text.prototype */ {\n\n    /**\n     * Returns SVG representation of an instance\n     * @param {Function} [reviver] Method for further parsing of svg representation.\n     * @return {String} svg representation of an instance\n     */\n    _toSVG: function() {\n      var offsets = this._getSVGLeftTopOffsets(),\n          textAndBg = this._getSVGTextAndBg(offsets.textTop, offsets.textLeft);\n      return this._wrapSVGTextAndBg(textAndBg);\n    },\n\n    /**\n     * Returns svg representation of an instance\n     * @param {Function} [reviver] Method for further parsing of svg representation.\n     * @return {String} svg representation of an instance\n     */\n    toSVG: function(reviver) {\n      return this._createBaseSVGMarkup(\n        this._toSVG(),\n        { reviver: reviver, noStyle: true, withShadow: true }\n      );\n    },\n\n    /**\n     * @private\n     */\n    _getSVGLeftTopOffsets: function() {\n      return {\n        textLeft: -this.width / 2,\n        textTop: -this.height / 2,\n        lineTop: this.getHeightOfLine(0)\n      };\n    },\n\n    /**\n     * @private\n     */\n    _wrapSVGTextAndBg: function(textAndBg) {\n      var noShadow = true,\n          textDecoration = this.getSvgTextDecoration(this);\n      return [\n        textAndBg.textBgRects.join(''),\n        '\\t\\t<text xml:space=\"preserve\" ',\n        (this.fontFamily ? 'font-family=\"' + this.fontFamily.replace(/\"/g, '\\'') + '\" ' : ''),\n        (this.fontSize ? 'font-size=\"' + this.fontSize + '\" ' : ''),\n        (this.fontStyle ? 'font-style=\"' + this.fontStyle + '\" ' : ''),\n        (this.fontWeight ? 'font-weight=\"' + this.fontWeight + '\" ' : ''),\n        (textDecoration ? 'text-decoration=\"' + textDecoration + '\" ' : ''),\n        'style=\"', this.getSvgStyles(noShadow), '\"', this.addPaintOrder(), ' >',\n        textAndBg.textSpans.join(''),\n        '</text>\\n'\n      ];\n    },\n\n    /**\n     * @private\n     * @param {Number} textTopOffset Text top offset\n     * @param {Number} textLeftOffset Text left offset\n     * @return {Object}\n     */\n    _getSVGTextAndBg: function(textTopOffset, textLeftOffset) {\n      var textSpans = [],\n          textBgRects = [],\n          height = textTopOffset, lineOffset;\n      // bounding-box background\n      this._setSVGBg(textBgRects);\n\n      // text and text-background\n      for (var i = 0, len = this._textLines.length; i < len; i++) {\n        lineOffset = this._getLineLeftOffset(i);\n        if (this.textBackgroundColor || this.styleHas('textBackgroundColor', i)) {\n          this._setSVGTextLineBg(textBgRects, i, textLeftOffset + lineOffset, height);\n        }\n        this._setSVGTextLineText(textSpans, i, textLeftOffset + lineOffset, height);\n        height += this.getHeightOfLine(i);\n      }\n\n      return {\n        textSpans: textSpans,\n        textBgRects: textBgRects\n      };\n    },\n\n    /**\n     * @private\n     */\n    _createTextCharSpan: function(_char, styleDecl, left, top) {\n      var shouldUseWhitespace = _char !== _char.trim() || _char.match(multipleSpacesRegex),\n          styleProps = this.getSvgSpanStyles(styleDecl, shouldUseWhitespace),\n          fillStyles = styleProps ? 'style=\"' + styleProps + '\"' : '',\n          dy = styleDecl.deltaY, dySpan = '',\n          NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n      if (dy) {\n        dySpan = ' dy=\"' + toFixed(dy, NUM_FRACTION_DIGITS) + '\" ';\n      }\n      return [\n        '<tspan x=\"', toFixed(left, NUM_FRACTION_DIGITS), '\" y=\"',\n        toFixed(top, NUM_FRACTION_DIGITS), '\" ', dySpan,\n        fillStyles, '>',\n        fabric.util.string.escapeXml(_char),\n        '</tspan>'\n      ].join('');\n    },\n\n    _setSVGTextLineText: function(textSpans, lineIndex, textLeftOffset, textTopOffset) {\n      // set proper line offset\n      var lineHeight = this.getHeightOfLine(lineIndex),\n          isJustify = this.textAlign.indexOf('justify') !== -1,\n          actualStyle,\n          nextStyle,\n          charsToRender = '',\n          charBox, style,\n          boxWidth = 0,\n          line = this._textLines[lineIndex],\n          timeToRender;\n\n      textTopOffset += lineHeight * (1 - this._fontSizeFraction) / this.lineHeight;\n      for (var i = 0, len = line.length - 1; i <= len; i++) {\n        timeToRender = i === len || this.charSpacing;\n        charsToRender += line[i];\n        charBox = this.__charBounds[lineIndex][i];\n        if (boxWidth === 0) {\n          textLeftOffset += charBox.kernedWidth - charBox.width;\n          boxWidth += charBox.width;\n        }\n        else {\n          boxWidth += charBox.kernedWidth;\n        }\n        if (isJustify && !timeToRender) {\n          if (this._reSpaceAndTab.test(line[i])) {\n            timeToRender = true;\n          }\n        }\n        if (!timeToRender) {\n          // if we have charSpacing, we render char by char\n          actualStyle = actualStyle || this.getCompleteStyleDeclaration(lineIndex, i);\n          nextStyle = this.getCompleteStyleDeclaration(lineIndex, i + 1);\n          timeToRender = fabric.util.hasStyleChanged(actualStyle, nextStyle, true);\n        }\n        if (timeToRender) {\n          style = this._getStyleDeclaration(lineIndex, i) || { };\n          textSpans.push(this._createTextCharSpan(charsToRender, style, textLeftOffset, textTopOffset));\n          charsToRender = '';\n          actualStyle = nextStyle;\n          textLeftOffset += boxWidth;\n          boxWidth = 0;\n        }\n      }\n    },\n\n    _pushTextBgRect: function(textBgRects, color, left, top, width, height) {\n      var NUM_FRACTION_DIGITS = fabric.Object.NUM_FRACTION_DIGITS;\n      textBgRects.push(\n        '\\t\\t<rect ',\n        this._getFillAttributes(color),\n        ' x=\"',\n        toFixed(left, NUM_FRACTION_DIGITS),\n        '\" y=\"',\n        toFixed(top, NUM_FRACTION_DIGITS),\n        '\" width=\"',\n        toFixed(width, NUM_FRACTION_DIGITS),\n        '\" height=\"',\n        toFixed(height, NUM_FRACTION_DIGITS),\n        '\"></rect>\\n');\n    },\n\n    _setSVGTextLineBg: function(textBgRects, i, leftOffset, textTopOffset) {\n      var line = this._textLines[i],\n          heightOfLine = this.getHeightOfLine(i) / this.lineHeight,\n          boxWidth = 0,\n          boxStart = 0,\n          charBox, currentColor,\n          lastColor = this.getValueOfPropertyAt(i, 0, 'textBackgroundColor');\n      for (var j = 0, jlen = line.length; j < jlen; j++) {\n        charBox = this.__charBounds[i][j];\n        currentColor = this.getValueOfPropertyAt(i, j, 'textBackgroundColor');\n        if (currentColor !== lastColor) {\n          lastColor && this._pushTextBgRect(textBgRects, lastColor, leftOffset + boxStart,\n            textTopOffset, boxWidth, heightOfLine);\n          boxStart = charBox.left;\n          boxWidth = charBox.width;\n          lastColor = currentColor;\n        }\n        else {\n          boxWidth += charBox.kernedWidth;\n        }\n      }\n      currentColor && this._pushTextBgRect(textBgRects, currentColor, leftOffset + boxStart,\n        textTopOffset, boxWidth, heightOfLine);\n    },\n\n    /**\n     * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values\n     * we work around it by \"moving\" alpha channel into opacity attribute and setting fill's alpha to 1\n     *\n     * @private\n     * @param {*} value\n     * @return {String}\n     */\n    _getFillAttributes: function(value) {\n      var fillColor = (value && typeof value === 'string') ? new fabric.Color(value) : '';\n      if (!fillColor || !fillColor.getSource() || fillColor.getAlpha() === 1) {\n        return 'fill=\"' + value + '\"';\n      }\n      return 'opacity=\"' + fillColor.getAlpha() + '\" fill=\"' + fillColor.setAlpha(1).toRgb() + '\"';\n    },\n\n    /**\n     * @private\n     */\n    _getSVGLineTopOffset: function(lineIndex) {\n      var lineTopOffset = 0, lastHeight = 0;\n      for (var j = 0; j < lineIndex; j++) {\n        lineTopOffset += this.getHeightOfLine(j);\n      }\n      lastHeight = this.getHeightOfLine(j);\n      return {\n        lineTop: lineTopOffset,\n        offset: (this._fontSizeMult - this._fontSizeFraction) * lastHeight / (this.lineHeight * this._fontSizeMult)\n      };\n    },\n\n    /**\n     * Returns styles-string for svg-export\n     * @param {Boolean} skipShadow a boolean to skip shadow filter output\n     * @return {String}\n     */\n    getSvgStyles: function(skipShadow) {\n      var svgStyle = fabric.Object.prototype.getSvgStyles.call(this, skipShadow);\n      return svgStyle + ' white-space: pre;';\n    },\n  });\n})();\n/* _TO_SVG_END_ */\n\n\n(function(global) {\n\n  'use strict';\n\n  var fabric = global.fabric || (global.fabric = {});\n\n  /**\n   * Textbox class, based on IText, allows the user to resize the text rectangle\n   * and wraps lines automatically. Textboxes have their Y scaling locked, the\n   * user can only change width. Height is adjusted automatically based on the\n   * wrapping of lines.\n   * @class fabric.Textbox\n   * @extends fabric.IText\n   * @mixes fabric.Observable\n   * @return {fabric.Textbox} thisArg\n   * @see {@link fabric.Textbox#initialize} for constructor definition\n   */\n  fabric.Textbox = fabric.util.createClass(fabric.IText, fabric.Observable, {\n\n    /**\n     * Type of an object\n     * @type String\n     * @default\n     */\n    type: 'textbox',\n\n    /**\n     * Minimum width of textbox, in pixels.\n     * @type Number\n     * @default\n     */\n    minWidth: 20,\n\n    /**\n     * Minimum calculated width of a textbox, in pixels.\n     * fixed to 2 so that an empty textbox cannot go to 0\n     * and is still selectable without text.\n     * @type Number\n     * @default\n     */\n    dynamicMinWidth: 2,\n\n    /**\n     * Cached array of text wrapping.\n     * @type Array\n     */\n    __cachedLines: null,\n\n    /**\n     * Override standard Object class values\n     */\n    lockScalingFlip: true,\n\n    /**\n     * Override standard Object class values\n     * Textbox needs this on false\n     */\n    noScaleCache: false,\n\n    /**\n     * Properties which when set cause object to change dimensions\n     * @type Object\n     * @private\n     */\n    _dimensionAffectingProps: fabric.Text.prototype._dimensionAffectingProps.concat('width'),\n\n    /**\n     * Use this regular expression to split strings in breakable lines\n     * @private\n     */\n    _wordJoiners: /[ \\t\\r]/,\n\n    /**\n     * Use this boolean property in order to split strings that have no white space concept.\n     * this is a cheap way to help with chinese/japanese\n     * @type Boolean\n     * @since 2.6.0\n     */\n    splitByGrapheme: false,\n\n    /**\n     * Unlike superclass's version of this function, Textbox does not update\n     * its width.\n     * @private\n     * @override\n     */\n    initDimensions: function() {\n      if (this.__skipDimension) {\n        return;\n      }\n      this.isEditing && this.initDelayedCursor();\n      this.clearContextTop();\n      this._clearCache();\n      // clear dynamicMinWidth as it will be different after we re-wrap line\n      this.dynamicMinWidth = 0;\n      // wrap lines\n      this._styleMap = this._generateStyleMap(this._splitText());\n      // if after wrapping, the width is smaller than dynamicMinWidth, change the width and re-wrap\n      if (this.dynamicMinWidth > this.width) {\n        this._set('width', this.dynamicMinWidth);\n      }\n      if (this.textAlign.indexOf('justify') !== -1) {\n        // once text is measured we need to make space fatter to make justified text.\n        this.enlargeSpaces();\n      }\n      // clear cache and re-calculate height\n      this.height = this.calcTextHeight();\n      this.saveState({ propertySet: '_dimensionAffectingProps' });\n    },\n\n    /**\n     * Generate an object that translates the style object so that it is\n     * broken up by visual lines (new lines and automatic wrapping).\n     * The original text styles object is broken up by actual lines (new lines only),\n     * which is only sufficient for Text / IText\n     * @private\n     */\n    _generateStyleMap: function(textInfo) {\n      var realLineCount     = 0,\n          realLineCharCount = 0,\n          charCount         = 0,\n          map               = {};\n\n      for (var i = 0; i < textInfo.graphemeLines.length; i++) {\n        if (textInfo.graphemeText[charCount] === '\\n' && i > 0) {\n          realLineCharCount = 0;\n          charCount++;\n          realLineCount++;\n        }\n        else if (!this.splitByGrapheme && this._reSpaceAndTab.test(textInfo.graphemeText[charCount]) && i > 0) {\n          // this case deals with space's that are removed from end of lines when wrapping\n          realLineCharCount++;\n          charCount++;\n        }\n\n        map[i] = { line: realLineCount, offset: realLineCharCount };\n\n        charCount += textInfo.graphemeLines[i].length;\n        realLineCharCount += textInfo.graphemeLines[i].length;\n      }\n\n      return map;\n    },\n\n    /**\n     * Returns true if object has a style property or has it on a specified line\n     * @param {Number} lineIndex\n     * @return {Boolean}\n     */\n    styleHas: function(property, lineIndex) {\n      if (this._styleMap && !this.isWrapping) {\n        var map = this._styleMap[lineIndex];\n        if (map) {\n          lineIndex = map.line;\n        }\n      }\n      return fabric.Text.prototype.styleHas.call(this, property, lineIndex);\n    },\n\n    /**\n     * Returns true if object has no styling or no styling in a line\n     * @param {Number} lineIndex , lineIndex is on wrapped lines.\n     * @return {Boolean}\n     */\n    isEmptyStyles: function(lineIndex) {\n      if (!this.styles) {\n        return true;\n      }\n      var offset = 0, nextLineIndex = lineIndex + 1, nextOffset, obj, shouldLimit = false,\n          map = this._styleMap[lineIndex], mapNextLine = this._styleMap[lineIndex + 1];\n      if (map) {\n        lineIndex = map.line;\n        offset = map.offset;\n      }\n      if (mapNextLine) {\n        nextLineIndex = mapNextLine.line;\n        shouldLimit = nextLineIndex === lineIndex;\n        nextOffset = mapNextLine.offset;\n      }\n      obj = typeof lineIndex === 'undefined' ? this.styles : { line: this.styles[lineIndex] };\n      for (var p1 in obj) {\n        for (var p2 in obj[p1]) {\n          if (p2 >= offset && (!shouldLimit || p2 < nextOffset)) {\n            // eslint-disable-next-line no-unused-vars\n            for (var p3 in obj[p1][p2]) {\n              return false;\n            }\n          }\n        }\n      }\n      return true;\n    },\n\n    /**\n     * @param {Number} lineIndex\n     * @param {Number} charIndex\n     * @private\n     */\n    _getStyleDeclaration: function(lineIndex, charIndex) {\n      if (this._styleMap && !this.isWrapping) {\n        var map = this._styleMap[lineIndex];\n        if (!map) {\n          return null;\n        }\n        lineIndex = map.line;\n        charIndex = map.offset + charIndex;\n      }\n      return this.callSuper('_getStyleDeclaration', lineIndex, charIndex);\n    },\n\n    /**\n     * @param {Number} lineIndex\n     * @param {Number} charIndex\n     * @param {Object} style\n     * @private\n     */\n    _setStyleDeclaration: function(lineIndex, charIndex, style) {\n      var map = this._styleMap[lineIndex];\n      lineIndex = map.line;\n      charIndex = map.offset + charIndex;\n\n      this.styles[lineIndex][charIndex] = style;\n    },\n\n    /**\n     * @param {Number} lineIndex\n     * @param {Number} charIndex\n     * @private\n     */\n    _deleteStyleDeclaration: function(lineIndex, charIndex) {\n      var map = this._styleMap[lineIndex];\n      lineIndex = map.line;\n      charIndex = map.offset + charIndex;\n      delete this.styles[lineIndex][charIndex];\n    },\n\n    /**\n     * probably broken need a fix\n     * Returns the real style line that correspond to the wrapped lineIndex line\n     * Used just to verify if the line does exist or not.\n     * @param {Number} lineIndex\n     * @returns {Boolean} if the line exists or not\n     * @private\n     */\n    _getLineStyle: function(lineIndex) {\n      var map = this._styleMap[lineIndex];\n      return !!this.styles[map.line];\n    },\n\n    /**\n     * Set the line style to an empty object so that is initialized\n     * @param {Number} lineIndex\n     * @param {Object} style\n     * @private\n     */\n    _setLineStyle: function(lineIndex) {\n      var map = this._styleMap[lineIndex];\n      this.styles[map.line] = {};\n    },\n\n    /**\n     * Wraps text using the 'width' property of Textbox. First this function\n     * splits text on newlines, so we preserve newlines entered by the user.\n     * Then it wraps each line using the width of the Textbox by calling\n     * _wrapLine().\n     * @param {Array} lines The string array of text that is split into lines\n     * @param {Number} desiredWidth width you want to wrap to\n     * @returns {Array} Array of lines\n     */\n    _wrapText: function(lines, desiredWidth) {\n      var wrapped = [], i;\n      this.isWrapping = true;\n      for (i = 0; i < lines.length; i++) {\n        wrapped = wrapped.concat(this._wrapLine(lines[i], i, desiredWidth));\n      }\n      this.isWrapping = false;\n      return wrapped;\n    },\n\n    /**\n     * Helper function to measure a string of text, given its lineIndex and charIndex offset\n     * it gets called when charBounds are not available yet.\n     * @param {CanvasRenderingContext2D} ctx\n     * @param {String} text\n     * @param {number} lineIndex\n     * @param {number} charOffset\n     * @returns {number}\n     * @private\n     */\n    _measureWord: function(word, lineIndex, charOffset) {\n      var width = 0, prevGrapheme, skipLeft = true;\n      charOffset = charOffset || 0;\n      for (var i = 0, len = word.length; i < len; i++) {\n        var box = this._getGraphemeBox(word[i], lineIndex, i + charOffset, prevGrapheme, skipLeft);\n        width += box.kernedWidth;\n        prevGrapheme = word[i];\n      }\n      return width;\n    },\n\n    /**\n     * Wraps a line of text using the width of the Textbox and a context.\n     * @param {Array} line The grapheme array that represent the line\n     * @param {Number} lineIndex\n     * @param {Number} desiredWidth width you want to wrap the line to\n     * @param {Number} reservedSpace space to remove from wrapping for custom functionalities\n     * @returns {Array} Array of line(s) into which the given text is wrapped\n     * to.\n     */\n    _wrapLine: function(_line, lineIndex, desiredWidth, reservedSpace) {\n      var lineWidth = 0,\n          splitByGrapheme = this.splitByGrapheme,\n          graphemeLines = [],\n          line = [],\n          // spaces in different languages?\n          words = splitByGrapheme ? fabric.util.string.graphemeSplit(_line) : _line.split(this._wordJoiners),\n          word = '',\n          offset = 0,\n          infix = splitByGrapheme ? '' : ' ',\n          wordWidth = 0,\n          infixWidth = 0,\n          largestWordWidth = 0,\n          lineJustStarted = true,\n          additionalSpace = this._getWidthOfCharSpacing(),\n          reservedSpace = reservedSpace || 0;\n      // fix a difference between split and graphemeSplit\n      if (words.length === 0) {\n        words.push([]);\n      }\n      desiredWidth -= reservedSpace;\n      for (var i = 0; i < words.length; i++) {\n        // if using splitByGrapheme words are already in graphemes.\n        word = splitByGrapheme ? words[i] : fabric.util.string.graphemeSplit(words[i]);\n        wordWidth = this._measureWord(word, lineIndex, offset);\n        offset += word.length;\n\n        lineWidth += infixWidth + wordWidth - additionalSpace;\n        if (lineWidth > desiredWidth && !lineJustStarted) {\n          graphemeLines.push(line);\n          line = [];\n          lineWidth = wordWidth;\n          lineJustStarted = true;\n        }\n        else {\n          lineWidth += additionalSpace;\n        }\n\n        if (!lineJustStarted && !splitByGrapheme) {\n          line.push(infix);\n        }\n        line = line.concat(word);\n\n        infixWidth = splitByGrapheme ? 0 : this._measureWord([infix], lineIndex, offset);\n        offset++;\n        lineJustStarted = false;\n        // keep track of largest word\n        if (wordWidth > largestWordWidth) {\n          largestWordWidth = wordWidth;\n        }\n      }\n\n      i && graphemeLines.push(line);\n\n      if (largestWordWidth + reservedSpace > this.dynamicMinWidth) {\n        this.dynamicMinWidth = largestWordWidth - additionalSpace + reservedSpace;\n      }\n      return graphemeLines;\n    },\n\n    /**\n     * Detect if the text line is ended with an hard break\n     * text and itext do not have wrapping, return false\n     * @param {Number} lineIndex text to split\n     * @return {Boolean}\n     */\n    isEndOfWrapping: function(lineIndex) {\n      if (!this._styleMap[lineIndex + 1]) {\n        // is last line, return true;\n        return true;\n      }\n      if (this._styleMap[lineIndex + 1].line !== this._styleMap[lineIndex].line) {\n        // this is last line before a line break, return true;\n        return true;\n      }\n      return false;\n    },\n\n    /**\n     * Detect if a line has a linebreak and so we need to account for it when moving\n     * and counting style.\n     * @return Number\n     */\n    missingNewlineOffset: function(lineIndex) {\n      if (this.splitByGrapheme) {\n        return this.isEndOfWrapping(lineIndex) ? 1 : 0;\n      }\n      return 1;\n    },\n\n    /**\n    * Gets lines of text to render in the Textbox. This function calculates\n    * text wrapping on the fly every time it is called.\n    * @param {String} text text to split\n    * @returns {Array} Array of lines in the Textbox.\n    * @override\n    */\n    _splitTextIntoLines: function(text) {\n      var newText = fabric.Text.prototype._splitTextIntoLines.call(this, text),\n          graphemeLines = this._wrapText(newText.lines, this.width),\n          lines = new Array(graphemeLines.length);\n      for (var i = 0; i < graphemeLines.length; i++) {\n        lines[i] = graphemeLines[i].join('');\n      }\n      newText.lines = lines;\n      newText.graphemeLines = graphemeLines;\n      return newText;\n    },\n\n    getMinWidth: function() {\n      return Math.max(this.minWidth, this.dynamicMinWidth);\n    },\n\n    _removeExtraneousStyles: function() {\n      var linesToKeep = {};\n      for (var prop in this._styleMap) {\n        if (this._textLines[prop]) {\n          linesToKeep[this._styleMap[prop].line] = 1;\n        }\n      }\n      for (var prop in this.styles) {\n        if (!linesToKeep[prop]) {\n          delete this.styles[prop];\n        }\n      }\n    },\n\n    /**\n     * Returns object representation of an instance\n     * @method toObject\n     * @param {Array} [propertiesToInclude] Any properties that you might want to additionally include in the output\n     * @return {Object} object representation of an instance\n     */\n    toObject: function(propertiesToInclude) {\n      return this.callSuper('toObject', ['minWidth', 'splitByGrapheme'].concat(propertiesToInclude));\n    }\n  });\n\n  /**\n   * Returns fabric.Textbox instance from an object representation\n   * @static\n   * @memberOf fabric.Textbox\n   * @param {Object} object Object to create an instance from\n   * @param {Function} [callback] Callback to invoke when an fabric.Textbox instance is created\n   */\n  fabric.Textbox.fromObject = function(object, callback) {\n    var styles = fabric.util.stylesFromArray(object.styles, object.text);\n    //copy object to prevent mutation\n    var objCopy = Object.assign({}, object, { styles: styles });\n    return fabric.Object._fromObject('Textbox', objCopy, callback, 'text');\n  };\n})(typeof exports !== 'undefined' ? exports : this);\n\n\n(function() {\n\n  var controlsUtils = fabric.controlsUtils,\n      scaleSkewStyleHandler = controlsUtils.scaleSkewCursorStyleHandler,\n      scaleStyleHandler = controlsUtils.scaleCursorStyleHandler,\n      scalingEqually = controlsUtils.scalingEqually,\n      scalingYOrSkewingX = controlsUtils.scalingYOrSkewingX,\n      scalingXOrSkewingY = controlsUtils.scalingXOrSkewingY,\n      scaleOrSkewActionName = controlsUtils.scaleOrSkewActionName,\n      objectControls = fabric.Object.prototype.controls;\n\n  objectControls.ml = new fabric.Control({\n    x: -0.5,\n    y: 0,\n    cursorStyleHandler: scaleSkewStyleHandler,\n    actionHandler: scalingXOrSkewingY,\n    getActionName: scaleOrSkewActionName,\n  });\n\n  objectControls.mr = new fabric.Control({\n    x: 0.5,\n    y: 0,\n    cursorStyleHandler: scaleSkewStyleHandler,\n    actionHandler: scalingXOrSkewingY,\n    getActionName: scaleOrSkewActionName,\n  });\n\n  objectControls.mb = new fabric.Control({\n    x: 0,\n    y: 0.5,\n    cursorStyleHandler: scaleSkewStyleHandler,\n    actionHandler: scalingYOrSkewingX,\n    getActionName: scaleOrSkewActionName,\n  });\n\n  objectControls.mt = new fabric.Control({\n    x: 0,\n    y: -0.5,\n    cursorStyleHandler: scaleSkewStyleHandler,\n    actionHandler: scalingYOrSkewingX,\n    getActionName: scaleOrSkewActionName,\n  });\n\n  objectControls.tl = new fabric.Control({\n    x: -0.5,\n    y: -0.5,\n    cursorStyleHandler: scaleStyleHandler,\n    actionHandler: scalingEqually\n  });\n\n  objectControls.tr = new fabric.Control({\n    x: 0.5,\n    y: -0.5,\n    cursorStyleHandler: scaleStyleHandler,\n    actionHandler: scalingEqually\n  });\n\n  objectControls.bl = new fabric.Control({\n    x: -0.5,\n    y: 0.5,\n    cursorStyleHandler: scaleStyleHandler,\n    actionHandler: scalingEqually\n  });\n\n  objectControls.br = new fabric.Control({\n    x: 0.5,\n    y: 0.5,\n    cursorStyleHandler: scaleStyleHandler,\n    actionHandler: scalingEqually\n  });\n\n  objectControls.mtr = new fabric.Control({\n    x: 0,\n    y: -0.5,\n    actionHandler: controlsUtils.rotationWithSnapping,\n    cursorStyleHandler: controlsUtils.rotationStyleHandler,\n    offsetY: -40,\n    withConnection: true,\n    actionName: 'rotate',\n  });\n\n  if (fabric.Textbox) {\n    // this is breaking the prototype inheritance, no time / ideas to fix it.\n    // is important to document that if you want to have all objects to have a\n    // specific custom control, you have to add it to Object prototype and to Textbox\n    // prototype. The controls are shared as references. So changes to control `tr`\n    // can still apply to all objects if needed.\n    var textBoxControls = fabric.Textbox.prototype.controls = { };\n\n    textBoxControls.mtr = objectControls.mtr;\n    textBoxControls.tr = objectControls.tr;\n    textBoxControls.br = objectControls.br;\n    textBoxControls.tl = objectControls.tl;\n    textBoxControls.bl = objectControls.bl;\n    textBoxControls.mt = objectControls.mt;\n    textBoxControls.mb = objectControls.mb;\n\n    textBoxControls.mr = new fabric.Control({\n      x: 0.5,\n      y: 0,\n      actionHandler: controlsUtils.changeWidth,\n      cursorStyleHandler: scaleSkewStyleHandler,\n      actionName: 'resizing',\n    });\n\n    textBoxControls.ml = new fabric.Control({\n      x: -0.5,\n      y: 0,\n      actionHandler: controlsUtils.changeWidth,\n      cursorStyleHandler: scaleSkewStyleHandler,\n      actionName: 'resizing',\n    });\n  }\n})();\n\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants.  Some of these (@defines) can be overridden at compile-time.\r\n */\r\nconst CONSTANTS = {\r\n    /**\r\n     * @define {boolean} Whether this is the client Node.js SDK.\r\n     */\r\n    NODE_CLIENT: false,\r\n    /**\r\n     * @define {boolean} Whether this is the Admin Node.js SDK.\r\n     */\r\n    NODE_ADMIN: false,\r\n    /**\r\n     * Firebase SDK Version\r\n     */\r\n    SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n */\r\nconst assert = function (assertion, message) {\r\n    if (!assertion) {\r\n        throw assertionError(message);\r\n    }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n */\r\nconst assertionError = function (message) {\r\n    return new Error('Firebase Database (' +\r\n        CONSTANTS.SDK_VERSION +\r\n        ') INTERNAL ASSERT FAILED: ' +\r\n        message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst stringToByteArray$1 = function (str) {\r\n    // TODO(user): Use native implementations if/when available\r\n    const out = [];\r\n    let p = 0;\r\n    for (let i = 0; i < str.length; i++) {\r\n        let c = str.charCodeAt(i);\r\n        if (c < 128) {\r\n            out[p++] = c;\r\n        }\r\n        else if (c < 2048) {\r\n            out[p++] = (c >> 6) | 192;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else if ((c & 0xfc00) === 0xd800 &&\r\n            i + 1 < str.length &&\r\n            (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\r\n            // Surrogate Pair\r\n            c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n            out[p++] = (c >> 18) | 240;\r\n            out[p++] = ((c >> 12) & 63) | 128;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else {\r\n            out[p++] = (c >> 12) | 224;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n    }\r\n    return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param bytes Array of numbers representing characters.\r\n * @return Stringification of the array.\r\n */\r\nconst byteArrayToString = function (bytes) {\r\n    // TODO(user): Use native implementations if/when available\r\n    const out = [];\r\n    let pos = 0, c = 0;\r\n    while (pos < bytes.length) {\r\n        const c1 = bytes[pos++];\r\n        if (c1 < 128) {\r\n            out[c++] = String.fromCharCode(c1);\r\n        }\r\n        else if (c1 > 191 && c1 < 224) {\r\n            const c2 = bytes[pos++];\r\n            out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n        }\r\n        else if (c1 > 239 && c1 < 365) {\r\n            // Surrogate Pair\r\n            const c2 = bytes[pos++];\r\n            const c3 = bytes[pos++];\r\n            const c4 = bytes[pos++];\r\n            const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n                0x10000;\r\n            out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n            out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n        }\r\n        else {\r\n            const c2 = bytes[pos++];\r\n            const c3 = bytes[pos++];\r\n            out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n        }\r\n    }\r\n    return out.join('');\r\n};\r\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\r\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\r\n// Static lookup maps, lazily populated by init_()\r\nconst base64 = {\r\n    /**\r\n     * Maps bytes to characters.\r\n     */\r\n    byteToCharMap_: null,\r\n    /**\r\n     * Maps characters to bytes.\r\n     */\r\n    charToByteMap_: null,\r\n    /**\r\n     * Maps bytes to websafe characters.\r\n     * @private\r\n     */\r\n    byteToCharMapWebSafe_: null,\r\n    /**\r\n     * Maps websafe characters to bytes.\r\n     * @private\r\n     */\r\n    charToByteMapWebSafe_: null,\r\n    /**\r\n     * Our default alphabet, shared between\r\n     * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n     */\r\n    ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n    /**\r\n     * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n     */\r\n    get ENCODED_VALS() {\r\n        return this.ENCODED_VALS_BASE + '+/=';\r\n    },\r\n    /**\r\n     * Our websafe alphabet.\r\n     */\r\n    get ENCODED_VALS_WEBSAFE() {\r\n        return this.ENCODED_VALS_BASE + '-_.';\r\n    },\r\n    /**\r\n     * Whether this browser supports the atob and btoa functions. This extension\r\n     * started at Mozilla but is now implemented by many browsers. We use the\r\n     * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n     * but still allowing the standard per-browser compilations.\r\n     *\r\n     */\r\n    HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n    /**\r\n     * Base64-encode an array of bytes.\r\n     *\r\n     * @param input An array of bytes (numbers with\r\n     *     value in [0, 255]) to encode.\r\n     * @param webSafe Boolean indicating we should use the\r\n     *     alternative alphabet.\r\n     * @return The base64 encoded string.\r\n     */\r\n    encodeByteArray(input, webSafe) {\r\n        if (!Array.isArray(input)) {\r\n            throw Error('encodeByteArray takes an array as a parameter');\r\n        }\r\n        this.init_();\r\n        const byteToCharMap = webSafe\r\n            ? this.byteToCharMapWebSafe_\r\n            : this.byteToCharMap_;\r\n        const output = [];\r\n        for (let i = 0; i < input.length; i += 3) {\r\n            const byte1 = input[i];\r\n            const haveByte2 = i + 1 < input.length;\r\n            const byte2 = haveByte2 ? input[i + 1] : 0;\r\n            const haveByte3 = i + 2 < input.length;\r\n            const byte3 = haveByte3 ? input[i + 2] : 0;\r\n            const outByte1 = byte1 >> 2;\r\n            const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n            let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n            let outByte4 = byte3 & 0x3f;\r\n            if (!haveByte3) {\r\n                outByte4 = 64;\r\n                if (!haveByte2) {\r\n                    outByte3 = 64;\r\n                }\r\n            }\r\n            output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n        }\r\n        return output.join('');\r\n    },\r\n    /**\r\n     * Base64-encode a string.\r\n     *\r\n     * @param input A string to encode.\r\n     * @param webSafe If true, we should use the\r\n     *     alternative alphabet.\r\n     * @return The base64 encoded string.\r\n     */\r\n    encodeString(input, webSafe) {\r\n        // Shortcut for Mozilla browsers that implement\r\n        // a native base64 encoder in the form of \"btoa/atob\"\r\n        if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n            return btoa(input);\r\n        }\r\n        return this.encodeByteArray(stringToByteArray$1(input), webSafe);\r\n    },\r\n    /**\r\n     * Base64-decode a string.\r\n     *\r\n     * @param input to decode.\r\n     * @param webSafe True if we should use the\r\n     *     alternative alphabet.\r\n     * @return string representing the decoded value.\r\n     */\r\n    decodeString(input, webSafe) {\r\n        // Shortcut for Mozilla browsers that implement\r\n        // a native base64 encoder in the form of \"btoa/atob\"\r\n        if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n            return atob(input);\r\n        }\r\n        return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\r\n    },\r\n    /**\r\n     * Base64-decode a string.\r\n     *\r\n     * In base-64 decoding, groups of four characters are converted into three\r\n     * bytes.  If the encoder did not apply padding, the input length may not\r\n     * be a multiple of 4.\r\n     *\r\n     * In this case, the last group will have fewer than 4 characters, and\r\n     * padding will be inferred.  If the group has one or two characters, it decodes\r\n     * to one byte.  If the group has three characters, it decodes to two bytes.\r\n     *\r\n     * @param input Input to decode.\r\n     * @param webSafe True if we should use the web-safe alphabet.\r\n     * @return bytes representing the decoded value.\r\n     */\r\n    decodeStringToByteArray(input, webSafe) {\r\n        this.init_();\r\n        const charToByteMap = webSafe\r\n            ? this.charToByteMapWebSafe_\r\n            : this.charToByteMap_;\r\n        const output = [];\r\n        for (let i = 0; i < input.length;) {\r\n            const byte1 = charToByteMap[input.charAt(i++)];\r\n            const haveByte2 = i < input.length;\r\n            const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n            ++i;\r\n            const haveByte3 = i < input.length;\r\n            const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n            ++i;\r\n            const haveByte4 = i < input.length;\r\n            const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n            ++i;\r\n            if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n                throw Error();\r\n            }\r\n            const outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n            output.push(outByte1);\r\n            if (byte3 !== 64) {\r\n                const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n                output.push(outByte2);\r\n                if (byte4 !== 64) {\r\n                    const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n                    output.push(outByte3);\r\n                }\r\n            }\r\n        }\r\n        return output;\r\n    },\r\n    /**\r\n     * Lazy static initialization function. Called before\r\n     * accessing any of the static map variables.\r\n     * @private\r\n     */\r\n    init_() {\r\n        if (!this.byteToCharMap_) {\r\n            this.byteToCharMap_ = {};\r\n            this.charToByteMap_ = {};\r\n            this.byteToCharMapWebSafe_ = {};\r\n            this.charToByteMapWebSafe_ = {};\r\n            // We want quick mappings back and forth, so we precompute two maps.\r\n            for (let i = 0; i < this.ENCODED_VALS.length; i++) {\r\n                this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n                this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n                this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n                this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n                // Be forgiving when decoding and correctly decode both encodings.\r\n                if (i >= this.ENCODED_VALS_BASE.length) {\r\n                    this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n                    this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n/**\r\n * URL-safe base64 encoding\r\n */\r\nconst base64Encode = function (str) {\r\n    const utf8Bytes = stringToByteArray$1(str);\r\n    return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 encoding (without \".\" padding in the end).\r\n * e.g. Used in JSON Web Token (JWT) parts.\r\n */\r\nconst base64urlEncodeWithoutPadding = function (str) {\r\n    // Use base64url encoding and remove padding in the end (dot characters).\r\n    return base64Encode(str).replace(/\\./g, '');\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param str To be decoded\r\n * @return Decoded result, if possible\r\n */\r\nconst base64Decode = function (str) {\r\n    try {\r\n        return base64.decodeString(str, true);\r\n    }\r\n    catch (e) {\r\n        console.error('base64Decode failed: ', e);\r\n    }\r\n    return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n    return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays).  Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n *\r\n * Note: we don't merge __proto__ to prevent prototype pollution\r\n */\r\nfunction deepExtend(target, source) {\r\n    if (!(source instanceof Object)) {\r\n        return source;\r\n    }\r\n    switch (source.constructor) {\r\n        case Date:\r\n            // Treat Dates like scalars; if the target date object had any child\r\n            // properties - they will be lost!\r\n            const dateValue = source;\r\n            return new Date(dateValue.getTime());\r\n        case Object:\r\n            if (target === undefined) {\r\n                target = {};\r\n            }\r\n            break;\r\n        case Array:\r\n            // Always copy the array source and overwrite the target.\r\n            target = [];\r\n            break;\r\n        default:\r\n            // Not a plain Object - treat it as a scalar.\r\n            return source;\r\n    }\r\n    for (const prop in source) {\r\n        // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\r\n        if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\r\n            continue;\r\n        }\r\n        target[prop] = deepExtend(target[prop], source[prop]);\r\n    }\r\n    return target;\r\n}\r\nfunction isValidKey(key) {\r\n    return key !== '__proto__';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Deferred {\r\n    constructor() {\r\n        this.reject = () => { };\r\n        this.resolve = () => { };\r\n        this.promise = new Promise((resolve, reject) => {\r\n            this.resolve = resolve;\r\n            this.reject = reject;\r\n        });\r\n    }\r\n    /**\r\n     * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n     * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n     * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n     */\r\n    wrapCallback(callback) {\r\n        return (error, value) => {\r\n            if (error) {\r\n                this.reject(error);\r\n            }\r\n            else {\r\n                this.resolve(value);\r\n            }\r\n            if (typeof callback === 'function') {\r\n                // Attaching noop handler just in case developer wasn't expecting\r\n                // promises\r\n                this.promise.catch(() => { });\r\n                // Some of our callbacks don't expect a value and our own tests\r\n                // assert that the parameter length is 1\r\n                if (callback.length === 1) {\r\n                    callback(error);\r\n                }\r\n                else {\r\n                    callback(error, value);\r\n                }\r\n            }\r\n        };\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction createMockUserToken(token, projectId) {\r\n    if (token.uid) {\r\n        throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\r\n    }\r\n    // Unsecured JWTs use \"none\" as the algorithm.\r\n    const header = {\r\n        alg: 'none',\r\n        type: 'JWT'\r\n    };\r\n    const project = projectId || 'demo-project';\r\n    const iat = token.iat || 0;\r\n    const sub = token.sub || token.user_id;\r\n    if (!sub) {\r\n        throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\r\n    }\r\n    const payload = Object.assign({ \r\n        // Set all required fields to decent defaults\r\n        iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\r\n            sign_in_provider: 'custom',\r\n            identities: {}\r\n        } }, token);\r\n    // Unsecured JWTs use the empty string as a signature.\r\n    const signature = '';\r\n    return [\r\n        base64urlEncodeWithoutPadding(JSON.stringify(header)),\r\n        base64urlEncodeWithoutPadding(JSON.stringify(payload)),\r\n        signature\r\n    ].join('.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return user agent string\r\n */\r\nfunction getUA() {\r\n    if (typeof navigator !== 'undefined' &&\r\n        typeof navigator['userAgent'] === 'string') {\r\n        return navigator['userAgent'];\r\n    }\r\n    else {\r\n        return '';\r\n    }\r\n}\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\r\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\r\n * wait for a callback.\r\n */\r\nfunction isMobileCordova() {\r\n    return (typeof window !== 'undefined' &&\r\n        // @ts-ignore Setting up an broadly applicable index signature for Window\r\n        // just to deal with this case would probably be a bad idea.\r\n        !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n        /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n}\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return true if Node.js environment is detected.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nfunction isNode() {\r\n    try {\r\n        return (Object.prototype.toString.call(global.process) === '[object process]');\r\n    }\r\n    catch (e) {\r\n        return false;\r\n    }\r\n}\r\n/**\r\n * Detect Browser Environment\r\n */\r\nfunction isBrowser() {\r\n    return typeof self === 'object' && self.self === self;\r\n}\r\nfunction isBrowserExtension() {\r\n    const runtime = typeof chrome === 'object'\r\n        ? chrome.runtime\r\n        : typeof browser === 'object'\r\n            ? browser.runtime\r\n            : undefined;\r\n    return typeof runtime === 'object' && runtime.id !== undefined;\r\n}\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return true if ReactNative environment is detected.\r\n */\r\nfunction isReactNative() {\r\n    return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n}\r\n/** Detects Electron apps. */\r\nfunction isElectron() {\r\n    return getUA().indexOf('Electron/') >= 0;\r\n}\r\n/** Detects Internet Explorer. */\r\nfunction isIE() {\r\n    const ua = getUA();\r\n    return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\r\n}\r\n/** Detects Universal Windows Platform apps. */\r\nfunction isUWP() {\r\n    return getUA().indexOf('MSAppHost/') >= 0;\r\n}\r\n/**\r\n * Detect whether the current SDK build is the Node version.\r\n *\r\n * @return true if it's the Node SDK build.\r\n */\r\nfunction isNodeSdk() {\r\n    return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n}\r\n/** Returns true if we are running in Safari. */\r\nfunction isSafari() {\r\n    return (!isNode() &&\r\n        navigator.userAgent.includes('Safari') &&\r\n        !navigator.userAgent.includes('Chrome'));\r\n}\r\n/**\r\n * This method checks if indexedDB is supported by current browser/service worker context\r\n * @return true if indexedDB is supported by current browser/service worker context\r\n */\r\nfunction isIndexedDBAvailable() {\r\n    return typeof indexedDB === 'object';\r\n}\r\n/**\r\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\r\n * if errors occur during the database open operation.\r\n *\r\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\r\n * private browsing)\r\n */\r\nfunction validateIndexedDBOpenable() {\r\n    return new Promise((resolve, reject) => {\r\n        try {\r\n            let preExist = true;\r\n            const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\r\n            const request = self.indexedDB.open(DB_CHECK_NAME);\r\n            request.onsuccess = () => {\r\n                request.result.close();\r\n                // delete database only when it doesn't pre-exist\r\n                if (!preExist) {\r\n                    self.indexedDB.deleteDatabase(DB_CHECK_NAME);\r\n                }\r\n                resolve(true);\r\n            };\r\n            request.onupgradeneeded = () => {\r\n                preExist = false;\r\n            };\r\n            request.onerror = () => {\r\n                var _a;\r\n                reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\r\n            };\r\n        }\r\n        catch (error) {\r\n            reject(error);\r\n        }\r\n    });\r\n}\r\n/**\r\n *\r\n * This method checks whether cookie is enabled within current browser\r\n * @return true if cookie is enabled within current browser\r\n */\r\nfunction areCookiesEnabled() {\r\n    if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n/**\r\n * Polyfill for `globalThis` object.\r\n * @returns the `globalThis` object for the given environment.\r\n */\r\nfunction getGlobal() {\r\n    if (typeof self !== 'undefined') {\r\n        return self;\r\n    }\r\n    if (typeof window !== 'undefined') {\r\n        return window;\r\n    }\r\n    if (typeof global !== 'undefined') {\r\n        return global;\r\n    }\r\n    throw new Error('Unable to locate global object.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Standardized Firebase Error.\r\n *\r\n * Usage:\r\n *\r\n *   // Typescript string literals for type-safe codes\r\n *   type Err =\r\n *     'unknown' |\r\n *     'object-not-found'\r\n *     ;\r\n *\r\n *   // Closure enum for type-safe error codes\r\n *   // at-enum {string}\r\n *   var Err = {\r\n *     UNKNOWN: 'unknown',\r\n *     OBJECT_NOT_FOUND: 'object-not-found',\r\n *   }\r\n *\r\n *   let errors: Map<Err, string> = {\r\n *     'generic-error': \"Unknown error\",\r\n *     'file-not-found': \"Could not find file: {$file}\",\r\n *   };\r\n *\r\n *   // Type-safe function - must pass a valid error code as param.\r\n *   let error = new ErrorFactory<Err>('service', 'Service', errors);\r\n *\r\n *   ...\r\n *   throw error.create(Err.GENERIC);\r\n *   ...\r\n *   throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\r\n *   ...\r\n *   // Service: Could not file file: foo.txt (service/file-not-found).\r\n *\r\n *   catch (e) {\r\n *     assert(e.message === \"Could not find file: foo.txt.\");\r\n *     if ((e as FirebaseError)?.code === 'service/file-not-found') {\r\n *       console.log(\"Could not read file: \" + e['file']);\r\n *     }\r\n *   }\r\n */\r\nconst ERROR_NAME = 'FirebaseError';\r\n// Based on code from:\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\r\nclass FirebaseError extends Error {\r\n    constructor(\r\n    /** The error code for this error. */\r\n    code, message, \r\n    /** Custom data for this error. */\r\n    customData) {\r\n        super(message);\r\n        this.code = code;\r\n        this.customData = customData;\r\n        /** The custom name for all FirebaseErrors. */\r\n        this.name = ERROR_NAME;\r\n        // Fix For ES5\r\n        // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n        Object.setPrototypeOf(this, FirebaseError.prototype);\r\n        // Maintains proper stack trace for where our error was thrown.\r\n        // Only available on V8.\r\n        if (Error.captureStackTrace) {\r\n            Error.captureStackTrace(this, ErrorFactory.prototype.create);\r\n        }\r\n    }\r\n}\r\nclass ErrorFactory {\r\n    constructor(service, serviceName, errors) {\r\n        this.service = service;\r\n        this.serviceName = serviceName;\r\n        this.errors = errors;\r\n    }\r\n    create(code, ...data) {\r\n        const customData = data[0] || {};\r\n        const fullCode = `${this.service}/${code}`;\r\n        const template = this.errors[code];\r\n        const message = template ? replaceTemplate(template, customData) : 'Error';\r\n        // Service Name: Error message (service/code).\r\n        const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\r\n        const error = new FirebaseError(fullCode, fullMessage, customData);\r\n        return error;\r\n    }\r\n}\r\nfunction replaceTemplate(template, data) {\r\n    return template.replace(PATTERN, (_, key) => {\r\n        const value = data[key];\r\n        return value != null ? String(value) : `<${key}?>`;\r\n    });\r\n}\r\nconst PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n    return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n    return JSON.stringify(data);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst decode = function (token) {\r\n    let header = {}, claims = {}, data = {}, signature = '';\r\n    try {\r\n        const parts = token.split('.');\r\n        header = jsonEval(base64Decode(parts[0]) || '');\r\n        claims = jsonEval(base64Decode(parts[1]) || '');\r\n        signature = parts[2];\r\n        data = claims['d'] || {};\r\n        delete claims['d'];\r\n    }\r\n    catch (e) { }\r\n    return {\r\n        header,\r\n        claims,\r\n        data,\r\n        signature\r\n    };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidTimestamp = function (token) {\r\n    const claims = decode(token).claims;\r\n    const now = Math.floor(new Date().getTime() / 1000);\r\n    let validSince = 0, validUntil = 0;\r\n    if (typeof claims === 'object') {\r\n        if (claims.hasOwnProperty('nbf')) {\r\n            validSince = claims['nbf'];\r\n        }\r\n        else if (claims.hasOwnProperty('iat')) {\r\n            validSince = claims['iat'];\r\n        }\r\n        if (claims.hasOwnProperty('exp')) {\r\n            validUntil = claims['exp'];\r\n        }\r\n        else {\r\n            // token will expire after 24h by default\r\n            validUntil = validSince + 86400;\r\n        }\r\n    }\r\n    return (!!now &&\r\n        !!validSince &&\r\n        !!validUntil &&\r\n        now >= validSince &&\r\n        now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst issuedAtTime = function (token) {\r\n    const claims = decode(token).claims;\r\n    if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n        return claims['iat'];\r\n    }\r\n    return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isValidFormat = function (token) {\r\n    const decoded = decode(token), claims = decoded.claims;\r\n    return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nconst isAdmin = function (token) {\r\n    const claims = decode(token).claims;\r\n    return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction contains(obj, key) {\r\n    return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\nfunction safeGet(obj, key) {\r\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n        return obj[key];\r\n    }\r\n    else {\r\n        return undefined;\r\n    }\r\n}\r\nfunction isEmpty(obj) {\r\n    for (const key in obj) {\r\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction map(obj, fn, contextObj) {\r\n    const res = {};\r\n    for (const key in obj) {\r\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n            res[key] = fn.call(contextObj, obj[key], key, obj);\r\n        }\r\n    }\r\n    return res;\r\n}\r\n/**\r\n * Deep equal two objects. Support Arrays and Objects.\r\n */\r\nfunction deepEqual(a, b) {\r\n    if (a === b) {\r\n        return true;\r\n    }\r\n    const aKeys = Object.keys(a);\r\n    const bKeys = Object.keys(b);\r\n    for (const k of aKeys) {\r\n        if (!bKeys.includes(k)) {\r\n            return false;\r\n        }\r\n        const aProp = a[k];\r\n        const bProp = b[k];\r\n        if (isObject(aProp) && isObject(bProp)) {\r\n            if (!deepEqual(aProp, bProp)) {\r\n                return false;\r\n            }\r\n        }\r\n        else if (aProp !== bProp) {\r\n            return false;\r\n        }\r\n    }\r\n    for (const k of bKeys) {\r\n        if (!aKeys.includes(k)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isObject(thing) {\r\n    return thing !== null && typeof thing === 'object';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Rejects if the given promise doesn't resolve in timeInMS milliseconds.\r\n * @internal\r\n */\r\nfunction promiseWithTimeout(promise, timeInMS = 2000) {\r\n    const deferredPromise = new Deferred();\r\n    setTimeout(() => deferredPromise.reject('timeout!'), timeInMS);\r\n    promise.then(deferredPromise.resolve, deferredPromise.reject);\r\n    return deferredPromise.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a\r\n * params object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n */\r\nfunction querystring(querystringParams) {\r\n    const params = [];\r\n    for (const [key, value] of Object.entries(querystringParams)) {\r\n        if (Array.isArray(value)) {\r\n            value.forEach(arrayVal => {\r\n                params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n            });\r\n        }\r\n        else {\r\n            params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n        }\r\n    }\r\n    return params.length ? '&' + params.join('&') : '';\r\n}\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\r\n * (e.g. {arg: 'val', arg2: 'val2'})\r\n */\r\nfunction querystringDecode(querystring) {\r\n    const obj = {};\r\n    const tokens = querystring.replace(/^\\?/, '').split('&');\r\n    tokens.forEach(token => {\r\n        if (token) {\r\n            const [key, value] = token.split('=');\r\n            obj[decodeURIComponent(key)] = decodeURIComponent(value);\r\n        }\r\n    });\r\n    return obj;\r\n}\r\n/**\r\n * Extract the query string part of a URL, including the leading question mark (if present).\r\n */\r\nfunction extractQuerystring(url) {\r\n    const queryStart = url.indexOf('?');\r\n    if (!queryStart) {\r\n        return '';\r\n    }\r\n    const fragmentStart = url.indexOf('#', queryStart);\r\n    return url.substring(queryStart, fragmentStart > 0 ? fragmentStart : undefined);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n *   var sha1 = new sha1();\r\n *   sha1.update(bytes);\r\n *   var hash = sha1.digest();\r\n *\r\n * Performance:\r\n *   Chrome 23:   ~400 Mbit/s\r\n *   Firefox 16:  ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @final\r\n * @struct\r\n */\r\nclass Sha1 {\r\n    constructor() {\r\n        /**\r\n         * Holds the previous values of accumulated variables a-e in the compress_\r\n         * function.\r\n         * @private\r\n         */\r\n        this.chain_ = [];\r\n        /**\r\n         * A buffer holding the partially computed hash result.\r\n         * @private\r\n         */\r\n        this.buf_ = [];\r\n        /**\r\n         * An array of 80 bytes, each a part of the message to be hashed.  Referred to\r\n         * as the message schedule in the docs.\r\n         * @private\r\n         */\r\n        this.W_ = [];\r\n        /**\r\n         * Contains data needed to pad messages less than 64 bytes.\r\n         * @private\r\n         */\r\n        this.pad_ = [];\r\n        /**\r\n         * @private {number}\r\n         */\r\n        this.inbuf_ = 0;\r\n        /**\r\n         * @private {number}\r\n         */\r\n        this.total_ = 0;\r\n        this.blockSize = 512 / 8;\r\n        this.pad_[0] = 128;\r\n        for (let i = 1; i < this.blockSize; ++i) {\r\n            this.pad_[i] = 0;\r\n        }\r\n        this.reset();\r\n    }\r\n    reset() {\r\n        this.chain_[0] = 0x67452301;\r\n        this.chain_[1] = 0xefcdab89;\r\n        this.chain_[2] = 0x98badcfe;\r\n        this.chain_[3] = 0x10325476;\r\n        this.chain_[4] = 0xc3d2e1f0;\r\n        this.inbuf_ = 0;\r\n        this.total_ = 0;\r\n    }\r\n    /**\r\n     * Internal compress helper function.\r\n     * @param buf Block to compress.\r\n     * @param offset Offset of the block in the buffer.\r\n     * @private\r\n     */\r\n    compress_(buf, offset) {\r\n        if (!offset) {\r\n            offset = 0;\r\n        }\r\n        const W = this.W_;\r\n        // get 16 big endian words\r\n        if (typeof buf === 'string') {\r\n            for (let i = 0; i < 16; i++) {\r\n                // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n                // have a bug that turns the post-increment ++ operator into pre-increment\r\n                // during JIT compilation.  We have code that depends heavily on SHA-1 for\r\n                // correctness and which is affected by this bug, so I've removed all uses\r\n                // of post-increment ++ in which the result value is used.  We can revert\r\n                // this change once the Safari bug\r\n                // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n                // most clients have been updated.\r\n                W[i] =\r\n                    (buf.charCodeAt(offset) << 24) |\r\n                        (buf.charCodeAt(offset + 1) << 16) |\r\n                        (buf.charCodeAt(offset + 2) << 8) |\r\n                        buf.charCodeAt(offset + 3);\r\n                offset += 4;\r\n            }\r\n        }\r\n        else {\r\n            for (let i = 0; i < 16; i++) {\r\n                W[i] =\r\n                    (buf[offset] << 24) |\r\n                        (buf[offset + 1] << 16) |\r\n                        (buf[offset + 2] << 8) |\r\n                        buf[offset + 3];\r\n                offset += 4;\r\n            }\r\n        }\r\n        // expand to 80 words\r\n        for (let i = 16; i < 80; i++) {\r\n            const t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n            W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n        }\r\n        let a = this.chain_[0];\r\n        let b = this.chain_[1];\r\n        let c = this.chain_[2];\r\n        let d = this.chain_[3];\r\n        let e = this.chain_[4];\r\n        let f, k;\r\n        // TODO(user): Try to unroll this loop to speed up the computation.\r\n        for (let i = 0; i < 80; i++) {\r\n            if (i < 40) {\r\n                if (i < 20) {\r\n                    f = d ^ (b & (c ^ d));\r\n                    k = 0x5a827999;\r\n                }\r\n                else {\r\n                    f = b ^ c ^ d;\r\n                    k = 0x6ed9eba1;\r\n                }\r\n            }\r\n            else {\r\n                if (i < 60) {\r\n                    f = (b & c) | (d & (b | c));\r\n                    k = 0x8f1bbcdc;\r\n                }\r\n                else {\r\n                    f = b ^ c ^ d;\r\n                    k = 0xca62c1d6;\r\n                }\r\n            }\r\n            const t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n            e = d;\r\n            d = c;\r\n            c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n            b = a;\r\n            a = t;\r\n        }\r\n        this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n        this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n        this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n        this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n        this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n    }\r\n    update(bytes, length) {\r\n        // TODO(johnlenz): tighten the function signature and remove this check\r\n        if (bytes == null) {\r\n            return;\r\n        }\r\n        if (length === undefined) {\r\n            length = bytes.length;\r\n        }\r\n        const lengthMinusBlock = length - this.blockSize;\r\n        let n = 0;\r\n        // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n        const buf = this.buf_;\r\n        let inbuf = this.inbuf_;\r\n        // The outer while loop should execute at most twice.\r\n        while (n < length) {\r\n            // When we have no data in the block to top up, we can directly process the\r\n            // input buffer (assuming it contains sufficient data). This gives ~25%\r\n            // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n            // the data is provided in large chunks (or in multiples of 64 bytes).\r\n            if (inbuf === 0) {\r\n                while (n <= lengthMinusBlock) {\r\n                    this.compress_(bytes, n);\r\n                    n += this.blockSize;\r\n                }\r\n            }\r\n            if (typeof bytes === 'string') {\r\n                while (n < length) {\r\n                    buf[inbuf] = bytes.charCodeAt(n);\r\n                    ++inbuf;\r\n                    ++n;\r\n                    if (inbuf === this.blockSize) {\r\n                        this.compress_(buf);\r\n                        inbuf = 0;\r\n                        // Jump to the outer loop so we use the full-block optimization.\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                while (n < length) {\r\n                    buf[inbuf] = bytes[n];\r\n                    ++inbuf;\r\n                    ++n;\r\n                    if (inbuf === this.blockSize) {\r\n                        this.compress_(buf);\r\n                        inbuf = 0;\r\n                        // Jump to the outer loop so we use the full-block optimization.\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        this.inbuf_ = inbuf;\r\n        this.total_ += length;\r\n    }\r\n    /** @override */\r\n    digest() {\r\n        const digest = [];\r\n        let totalBits = this.total_ * 8;\r\n        // Add pad 0x80 0x00*.\r\n        if (this.inbuf_ < 56) {\r\n            this.update(this.pad_, 56 - this.inbuf_);\r\n        }\r\n        else {\r\n            this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n        }\r\n        // Add # bits.\r\n        for (let i = this.blockSize - 1; i >= 56; i--) {\r\n            this.buf_[i] = totalBits & 255;\r\n            totalBits /= 256; // Don't use bit-shifting here!\r\n        }\r\n        this.compress_(this.buf_);\r\n        let n = 0;\r\n        for (let i = 0; i < 5; i++) {\r\n            for (let j = 24; j >= 0; j -= 8) {\r\n                digest[n] = (this.chain_[i] >> j) & 255;\r\n                ++n;\r\n            }\r\n        }\r\n        return digest;\r\n    }\r\n}\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n *     as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n    const proxy = new ObserverProxy(executor, onNoObservers);\r\n    return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nclass ObserverProxy {\r\n    /**\r\n     * @param executor Function which can make calls to a single Observer\r\n     *     as a proxy.\r\n     * @param onNoObservers Callback when count of Observers goes to zero.\r\n     */\r\n    constructor(executor, onNoObservers) {\r\n        this.observers = [];\r\n        this.unsubscribes = [];\r\n        this.observerCount = 0;\r\n        // Micro-task scheduling by calling task.then().\r\n        this.task = Promise.resolve();\r\n        this.finalized = false;\r\n        this.onNoObservers = onNoObservers;\r\n        // Call the executor asynchronously so subscribers that are called\r\n        // synchronously after the creation of the subscribe function\r\n        // can still receive the very first value generated in the executor.\r\n        this.task\r\n            .then(() => {\r\n            executor(this);\r\n        })\r\n            .catch(e => {\r\n            this.error(e);\r\n        });\r\n    }\r\n    next(value) {\r\n        this.forEachObserver((observer) => {\r\n            observer.next(value);\r\n        });\r\n    }\r\n    error(error) {\r\n        this.forEachObserver((observer) => {\r\n            observer.error(error);\r\n        });\r\n        this.close(error);\r\n    }\r\n    complete() {\r\n        this.forEachObserver((observer) => {\r\n            observer.complete();\r\n        });\r\n        this.close();\r\n    }\r\n    /**\r\n     * Subscribe function that can be used to add an Observer to the fan-out list.\r\n     *\r\n     * - We require that no event is sent to a subscriber sychronously to their\r\n     *   call to subscribe().\r\n     */\r\n    subscribe(nextOrObserver, error, complete) {\r\n        let observer;\r\n        if (nextOrObserver === undefined &&\r\n            error === undefined &&\r\n            complete === undefined) {\r\n            throw new Error('Missing Observer.');\r\n        }\r\n        // Assemble an Observer object when passed as callback functions.\r\n        if (implementsAnyMethods(nextOrObserver, [\r\n            'next',\r\n            'error',\r\n            'complete'\r\n        ])) {\r\n            observer = nextOrObserver;\r\n        }\r\n        else {\r\n            observer = {\r\n                next: nextOrObserver,\r\n                error,\r\n                complete\r\n            };\r\n        }\r\n        if (observer.next === undefined) {\r\n            observer.next = noop;\r\n        }\r\n        if (observer.error === undefined) {\r\n            observer.error = noop;\r\n        }\r\n        if (observer.complete === undefined) {\r\n            observer.complete = noop;\r\n        }\r\n        const unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n        // Attempt to subscribe to a terminated Observable - we\r\n        // just respond to the Observer with the final error or complete\r\n        // event.\r\n        if (this.finalized) {\r\n            // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n            this.task.then(() => {\r\n                try {\r\n                    if (this.finalError) {\r\n                        observer.error(this.finalError);\r\n                    }\r\n                    else {\r\n                        observer.complete();\r\n                    }\r\n                }\r\n                catch (e) {\r\n                    // nothing\r\n                }\r\n                return;\r\n            });\r\n        }\r\n        this.observers.push(observer);\r\n        return unsub;\r\n    }\r\n    // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n    // any unsubscribed Observer.\r\n    unsubscribeOne(i) {\r\n        if (this.observers === undefined || this.observers[i] === undefined) {\r\n            return;\r\n        }\r\n        delete this.observers[i];\r\n        this.observerCount -= 1;\r\n        if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n            this.onNoObservers(this);\r\n        }\r\n    }\r\n    forEachObserver(fn) {\r\n        if (this.finalized) {\r\n            // Already closed by previous event....just eat the additional values.\r\n            return;\r\n        }\r\n        // Since sendOne calls asynchronously - there is no chance that\r\n        // this.observers will become undefined.\r\n        for (let i = 0; i < this.observers.length; i++) {\r\n            this.sendOne(i, fn);\r\n        }\r\n    }\r\n    // Call the Observer via one of it's callback function. We are careful to\r\n    // confirm that the observe has not been unsubscribed since this asynchronous\r\n    // function had been queued.\r\n    sendOne(i, fn) {\r\n        // Execute the callback asynchronously\r\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n        this.task.then(() => {\r\n            if (this.observers !== undefined && this.observers[i] !== undefined) {\r\n                try {\r\n                    fn(this.observers[i]);\r\n                }\r\n                catch (e) {\r\n                    // Ignore exceptions raised in Observers or missing methods of an\r\n                    // Observer.\r\n                    // Log error to console. b/31404806\r\n                    if (typeof console !== 'undefined' && console.error) {\r\n                        console.error(e);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    }\r\n    close(err) {\r\n        if (this.finalized) {\r\n            return;\r\n        }\r\n        this.finalized = true;\r\n        if (err !== undefined) {\r\n            this.finalError = err;\r\n        }\r\n        // Proxy is no longer needed - garbage collect references\r\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n        this.task.then(() => {\r\n            this.observers = undefined;\r\n            this.onNoObservers = undefined;\r\n        });\r\n    }\r\n}\r\n/** Turn synchronous function into one called asynchronously. */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction async(fn, onError) {\r\n    return (...args) => {\r\n        Promise.resolve(true)\r\n            .then(() => {\r\n            fn(...args);\r\n        })\r\n            .catch((error) => {\r\n            if (onError) {\r\n                onError(error);\r\n            }\r\n        });\r\n    };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n    if (typeof obj !== 'object' || obj === null) {\r\n        return false;\r\n    }\r\n    for (const method of methods) {\r\n        if (method in obj && typeof obj[method] === 'function') {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction noop() {\r\n    // do nothing\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param fnName The function name\r\n * @param minCount The minimum number of arguments to allow for the function call\r\n * @param maxCount The maximum number of argument to allow for the function call\r\n * @param argCount The actual number of arguments provided.\r\n */\r\nconst validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n    let argError;\r\n    if (argCount < minCount) {\r\n        argError = 'at least ' + minCount;\r\n    }\r\n    else if (argCount > maxCount) {\r\n        argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n    }\r\n    if (argError) {\r\n        const error = fnName +\r\n            ' failed: Was called with ' +\r\n            argCount +\r\n            (argCount === 1 ? ' argument.' : ' arguments.') +\r\n            ' Expects ' +\r\n            argError +\r\n            '.';\r\n        throw new Error(error);\r\n    }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param fnName The function name\r\n * @param argName The name of the argument\r\n * @return The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argName) {\r\n    return `${fnName} failed: ${argName} argument `;\r\n}\r\n/**\r\n * @param fnName\r\n * @param argumentNumber\r\n * @param namespace\r\n * @param optional\r\n */\r\nfunction validateNamespace(fnName, namespace, optional) {\r\n    if (optional && !namespace) {\r\n        return;\r\n    }\r\n    if (typeof namespace !== 'string') {\r\n        //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n        throw new Error(errorPrefix(fnName, 'namespace') + 'must be a valid firebase namespace.');\r\n    }\r\n}\r\nfunction validateCallback(fnName, argumentName, \r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\ncallback, optional) {\r\n    if (optional && !callback) {\r\n        return;\r\n    }\r\n    if (typeof callback !== 'function') {\r\n        throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid function.');\r\n    }\r\n}\r\nfunction validateContextObject(fnName, argumentName, context, optional) {\r\n    if (optional && !context) {\r\n        return;\r\n    }\r\n    if (typeof context !== 'object' || context === null) {\r\n        throw new Error(errorPrefix(fnName, argumentName) + 'must be a valid context object.');\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript.  All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nconst stringToByteArray = function (str) {\r\n    const out = [];\r\n    let p = 0;\r\n    for (let i = 0; i < str.length; i++) {\r\n        let c = str.charCodeAt(i);\r\n        // Is this the lead surrogate in a surrogate pair?\r\n        if (c >= 0xd800 && c <= 0xdbff) {\r\n            const high = c - 0xd800; // the high 10 bits.\r\n            i++;\r\n            assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n            const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n            c = 0x10000 + (high << 10) + low;\r\n        }\r\n        if (c < 128) {\r\n            out[p++] = c;\r\n        }\r\n        else if (c < 2048) {\r\n            out[p++] = (c >> 6) | 192;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else if (c < 65536) {\r\n            out[p++] = (c >> 12) | 224;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else {\r\n            out[p++] = (c >> 18) | 240;\r\n            out[p++] = ((c >> 12) & 63) | 128;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n    }\r\n    return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nconst stringLength = function (str) {\r\n    let p = 0;\r\n    for (let i = 0; i < str.length; i++) {\r\n        const c = str.charCodeAt(i);\r\n        if (c < 128) {\r\n            p++;\r\n        }\r\n        else if (c < 2048) {\r\n            p += 2;\r\n        }\r\n        else if (c >= 0xd800 && c <= 0xdbff) {\r\n            // Lead surrogate of a surrogate pair.  The pair together will take 4 bytes to represent.\r\n            p += 4;\r\n            i++; // skip trail surrogate.\r\n        }\r\n        else {\r\n            p += 3;\r\n        }\r\n    }\r\n    return p;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Copied from https://stackoverflow.com/a/2117523\r\n * Generates a new uuid.\r\n * @public\r\n */\r\nconst uuidv4 = function () {\r\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\r\n        const r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n        return v.toString(16);\r\n    });\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The amount of milliseconds to exponentially increase.\r\n */\r\nconst DEFAULT_INTERVAL_MILLIS = 1000;\r\n/**\r\n * The factor to backoff by.\r\n * Should be a number greater than 1.\r\n */\r\nconst DEFAULT_BACKOFF_FACTOR = 2;\r\n/**\r\n * The maximum milliseconds to increase to.\r\n *\r\n * <p>Visible for testing\r\n */\r\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\r\n/**\r\n * The percentage of backoff time to randomize by.\r\n * See\r\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\r\n * for context.\r\n *\r\n * <p>Visible for testing\r\n */\r\nconst RANDOM_FACTOR = 0.5;\r\n/**\r\n * Based on the backoff method from\r\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\r\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\r\n */\r\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\r\n    // Calculates an exponentially increasing value.\r\n    // Deviation: calculates value from count and a constant interval, so we only need to save value\r\n    // and count to restore state.\r\n    const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\r\n    // A random \"fuzz\" to avoid waves of retries.\r\n    // Deviation: randomFactor is required.\r\n    const randomWait = Math.round(\r\n    // A fraction of the backoff value to add/subtract.\r\n    // Deviation: changes multiplication order to improve readability.\r\n    RANDOM_FACTOR *\r\n        currBaseValue *\r\n        // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\r\n        // if we add or subtract.\r\n        (Math.random() - 0.5) *\r\n        2);\r\n    // Limits backoff to max to avoid effectively permanent backoff.\r\n    return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provide English ordinal letters after a number\r\n */\r\nfunction ordinal(i) {\r\n    if (!Number.isFinite(i)) {\r\n        return `${i}`;\r\n    }\r\n    return i + indicator(i);\r\n}\r\nfunction indicator(i) {\r\n    i = Math.abs(i);\r\n    const cent = i % 100;\r\n    if (cent >= 10 && cent <= 20) {\r\n        return 'th';\r\n    }\r\n    const dec = i % 10;\r\n    if (dec === 1) {\r\n        return 'st';\r\n    }\r\n    if (dec === 2) {\r\n        return 'nd';\r\n    }\r\n    if (dec === 3) {\r\n        return 'rd';\r\n    }\r\n    return 'th';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getModularInstance(service) {\r\n    if (service && service._delegate) {\r\n        return service._delegate;\r\n    }\r\n    else {\r\n        return service;\r\n    }\r\n}\n\nexport { CONSTANTS, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n//# sourceMappingURL=index.esm2017.js.map\n","import { Deferred } from '@firebase/util';\n\n/**\r\n * Component for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass Component {\r\n    /**\r\n     *\r\n     * @param name The public service name, e.g. app, auth, firestore, database\r\n     * @param instanceFactory Service factory responsible for creating the public interface\r\n     * @param type whether the service provided by the component is public or private\r\n     */\r\n    constructor(name, instanceFactory, type) {\r\n        this.name = name;\r\n        this.instanceFactory = instanceFactory;\r\n        this.type = type;\r\n        this.multipleInstances = false;\r\n        /**\r\n         * Properties to be added to the service namespace\r\n         */\r\n        this.serviceProps = {};\r\n        this.instantiationMode = \"LAZY\" /* LAZY */;\r\n        this.onInstanceCreated = null;\r\n    }\r\n    setInstantiationMode(mode) {\r\n        this.instantiationMode = mode;\r\n        return this;\r\n    }\r\n    setMultipleInstances(multipleInstances) {\r\n        this.multipleInstances = multipleInstances;\r\n        return this;\r\n    }\r\n    setServiceProps(props) {\r\n        this.serviceProps = props;\r\n        return this;\r\n    }\r\n    setInstanceCreatedCallback(callback) {\r\n        this.onInstanceCreated = callback;\r\n        return this;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\r\n * NameServiceMapping[T] is an alias for the type of the instance\r\n */\r\nclass Provider {\r\n    constructor(name, container) {\r\n        this.name = name;\r\n        this.container = container;\r\n        this.component = null;\r\n        this.instances = new Map();\r\n        this.instancesDeferred = new Map();\r\n        this.instancesOptions = new Map();\r\n        this.onInitCallbacks = new Map();\r\n    }\r\n    /**\r\n     * @param identifier A provider can provide mulitple instances of a service\r\n     * if this.component.multipleInstances is true.\r\n     */\r\n    get(identifier) {\r\n        // if multipleInstances is not supported, use the default name\r\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n        if (!this.instancesDeferred.has(normalizedIdentifier)) {\r\n            const deferred = new Deferred();\r\n            this.instancesDeferred.set(normalizedIdentifier, deferred);\r\n            if (this.isInitialized(normalizedIdentifier) ||\r\n                this.shouldAutoInitialize()) {\r\n                // initialize the service if it can be auto-initialized\r\n                try {\r\n                    const instance = this.getOrInitializeService({\r\n                        instanceIdentifier: normalizedIdentifier\r\n                    });\r\n                    if (instance) {\r\n                        deferred.resolve(instance);\r\n                    }\r\n                }\r\n                catch (e) {\r\n                    // when the instance factory throws an exception during get(), it should not cause\r\n                    // a fatal error. We just return the unresolved promise in this case.\r\n                }\r\n            }\r\n        }\r\n        return this.instancesDeferred.get(normalizedIdentifier).promise;\r\n    }\r\n    getImmediate(options) {\r\n        var _a;\r\n        // if multipleInstances is not supported, use the default name\r\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\r\n        const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\r\n        if (this.isInitialized(normalizedIdentifier) ||\r\n            this.shouldAutoInitialize()) {\r\n            try {\r\n                return this.getOrInitializeService({\r\n                    instanceIdentifier: normalizedIdentifier\r\n                });\r\n            }\r\n            catch (e) {\r\n                if (optional) {\r\n                    return null;\r\n                }\r\n                else {\r\n                    throw e;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            // In case a component is not initialized and should/can not be auto-initialized at the moment, return null if the optional flag is set, or throw\r\n            if (optional) {\r\n                return null;\r\n            }\r\n            else {\r\n                throw Error(`Service ${this.name} is not available`);\r\n            }\r\n        }\r\n    }\r\n    getComponent() {\r\n        return this.component;\r\n    }\r\n    setComponent(component) {\r\n        if (component.name !== this.name) {\r\n            throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\r\n        }\r\n        if (this.component) {\r\n            throw Error(`Component for ${this.name} has already been provided`);\r\n        }\r\n        this.component = component;\r\n        // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\r\n        if (!this.shouldAutoInitialize()) {\r\n            return;\r\n        }\r\n        // if the service is eager, initialize the default instance\r\n        if (isComponentEager(component)) {\r\n            try {\r\n                this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\r\n            }\r\n            catch (e) {\r\n                // when the instance factory for an eager Component throws an exception during the eager\r\n                // initialization, it should not cause a fatal error.\r\n                // TODO: Investigate if we need to make it configurable, because some component may want to cause\r\n                // a fatal error in this case?\r\n            }\r\n        }\r\n        // Create service instances for the pending promises and resolve them\r\n        // NOTE: if this.multipleInstances is false, only the default instance will be created\r\n        // and all promises with resolve with it regardless of the identifier.\r\n        for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n            const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n            try {\r\n                // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\r\n                const instance = this.getOrInitializeService({\r\n                    instanceIdentifier: normalizedIdentifier\r\n                });\r\n                instanceDeferred.resolve(instance);\r\n            }\r\n            catch (e) {\r\n                // when the instance factory throws an exception, it should not cause\r\n                // a fatal error. We just leave the promise unresolved.\r\n            }\r\n        }\r\n    }\r\n    clearInstance(identifier = DEFAULT_ENTRY_NAME) {\r\n        this.instancesDeferred.delete(identifier);\r\n        this.instancesOptions.delete(identifier);\r\n        this.instances.delete(identifier);\r\n    }\r\n    // app.delete() will call this method on every provider to delete the services\r\n    // TODO: should we mark the provider as deleted?\r\n    async delete() {\r\n        const services = Array.from(this.instances.values());\r\n        await Promise.all([\r\n            ...services\r\n                .filter(service => 'INTERNAL' in service) // legacy services\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                .map(service => service.INTERNAL.delete()),\r\n            ...services\r\n                .filter(service => '_delete' in service) // modularized services\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                .map(service => service._delete())\r\n        ]);\r\n    }\r\n    isComponentSet() {\r\n        return this.component != null;\r\n    }\r\n    isInitialized(identifier = DEFAULT_ENTRY_NAME) {\r\n        return this.instances.has(identifier);\r\n    }\r\n    getOptions(identifier = DEFAULT_ENTRY_NAME) {\r\n        return this.instancesOptions.get(identifier) || {};\r\n    }\r\n    initialize(opts = {}) {\r\n        const { options = {} } = opts;\r\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\r\n        if (this.isInitialized(normalizedIdentifier)) {\r\n            throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\r\n        }\r\n        if (!this.isComponentSet()) {\r\n            throw Error(`Component ${this.name} has not been registered yet`);\r\n        }\r\n        const instance = this.getOrInitializeService({\r\n            instanceIdentifier: normalizedIdentifier,\r\n            options\r\n        });\r\n        // resolve any pending promise waiting for the service instance\r\n        for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n            const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n            if (normalizedIdentifier === normalizedDeferredIdentifier) {\r\n                instanceDeferred.resolve(instance);\r\n            }\r\n        }\r\n        return instance;\r\n    }\r\n    /**\r\n     *\r\n     * @param callback - a function that will be invoked  after the provider has been initialized by calling provider.initialize().\r\n     * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\r\n     *\r\n     * @param identifier An optional instance identifier\r\n     * @returns a function to unregister the callback\r\n     */\r\n    onInit(callback, identifier) {\r\n        var _a;\r\n        const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n        const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\r\n        existingCallbacks.add(callback);\r\n        this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\r\n        const existingInstance = this.instances.get(normalizedIdentifier);\r\n        if (existingInstance) {\r\n            callback(existingInstance, normalizedIdentifier);\r\n        }\r\n        return () => {\r\n            existingCallbacks.delete(callback);\r\n        };\r\n    }\r\n    /**\r\n     * Invoke onInit callbacks synchronously\r\n     * @param instance the service instance`\r\n     */\r\n    invokeOnInitCallbacks(instance, identifier) {\r\n        const callbacks = this.onInitCallbacks.get(identifier);\r\n        if (!callbacks) {\r\n            return;\r\n        }\r\n        for (const callback of callbacks) {\r\n            try {\r\n                callback(instance, identifier);\r\n            }\r\n            catch (_a) {\r\n                // ignore errors in the onInit callback\r\n            }\r\n        }\r\n    }\r\n    getOrInitializeService({ instanceIdentifier, options = {} }) {\r\n        let instance = this.instances.get(instanceIdentifier);\r\n        if (!instance && this.component) {\r\n            instance = this.component.instanceFactory(this.container, {\r\n                instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\r\n                options\r\n            });\r\n            this.instances.set(instanceIdentifier, instance);\r\n            this.instancesOptions.set(instanceIdentifier, options);\r\n            /**\r\n             * Invoke onInit listeners.\r\n             * Note this.component.onInstanceCreated is different, which is used by the component creator,\r\n             * while onInit listeners are registered by consumers of the provider.\r\n             */\r\n            this.invokeOnInitCallbacks(instance, instanceIdentifier);\r\n            /**\r\n             * Order is important\r\n             * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\r\n             * makes `isInitialized()` return true.\r\n             */\r\n            if (this.component.onInstanceCreated) {\r\n                try {\r\n                    this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\r\n                }\r\n                catch (_a) {\r\n                    // ignore errors in the onInstanceCreatedCallback\r\n                }\r\n            }\r\n        }\r\n        return instance || null;\r\n    }\r\n    normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\r\n        if (this.component) {\r\n            return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\r\n        }\r\n        else {\r\n            return identifier; // assume multiple instances are supported before the component is provided.\r\n        }\r\n    }\r\n    shouldAutoInitialize() {\r\n        return (!!this.component &&\r\n            this.component.instantiationMode !== \"EXPLICIT\" /* EXPLICIT */);\r\n    }\r\n}\r\n// undefined should be passed to the service factory for the default instance\r\nfunction normalizeIdentifierForFactory(identifier) {\r\n    return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\r\n}\r\nfunction isComponentEager(component) {\r\n    return component.instantiationMode === \"EAGER\" /* EAGER */;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass ComponentContainer {\r\n    constructor(name) {\r\n        this.name = name;\r\n        this.providers = new Map();\r\n    }\r\n    /**\r\n     *\r\n     * @param component Component being added\r\n     * @param overwrite When a component with the same name has already been registered,\r\n     * if overwrite is true: overwrite the existing component with the new component and create a new\r\n     * provider with the new component. It can be useful in tests where you want to use different mocks\r\n     * for different tests.\r\n     * if overwrite is false: throw an exception\r\n     */\r\n    addComponent(component) {\r\n        const provider = this.getProvider(component.name);\r\n        if (provider.isComponentSet()) {\r\n            throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\r\n        }\r\n        provider.setComponent(component);\r\n    }\r\n    addOrOverwriteComponent(component) {\r\n        const provider = this.getProvider(component.name);\r\n        if (provider.isComponentSet()) {\r\n            // delete the existing provider from the container, so we can register the new component\r\n            this.providers.delete(component.name);\r\n        }\r\n        this.addComponent(component);\r\n    }\r\n    /**\r\n     * getProvider provides a type safe interface where it can only be called with a field name\r\n     * present in NameServiceMapping interface.\r\n     *\r\n     * Firebase SDKs providing services should extend NameServiceMapping interface to register\r\n     * themselves.\r\n     */\r\n    getProvider(name) {\r\n        if (this.providers.has(name)) {\r\n            return this.providers.get(name);\r\n        }\r\n        // create a Provider for a service that hasn't registered with Firebase\r\n        const provider = new Provider(name, this);\r\n        this.providers.set(name, provider);\r\n        return provider;\r\n    }\r\n    getProviders() {\r\n        return Array.from(this.providers.values());\r\n    }\r\n}\n\nexport { Component, ComponentContainer, Provider };\n//# sourceMappingURL=index.esm2017.js.map\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A container for all of the Logger instances\r\n */\r\nconst instances = [];\r\n/**\r\n * The JS SDK supports 5 log levels and also allows a user the ability to\r\n * silence the logs altogether.\r\n *\r\n * The order is a follows:\r\n * DEBUG < VERBOSE < INFO < WARN < ERROR\r\n *\r\n * All of the log types above the current log level will be captured (i.e. if\r\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\r\n * `VERBOSE` logs will not)\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n    LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n    LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n    LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n    LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n    LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n    LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n})(LogLevel || (LogLevel = {}));\r\nconst levelStringToEnum = {\r\n    'debug': LogLevel.DEBUG,\r\n    'verbose': LogLevel.VERBOSE,\r\n    'info': LogLevel.INFO,\r\n    'warn': LogLevel.WARN,\r\n    'error': LogLevel.ERROR,\r\n    'silent': LogLevel.SILENT\r\n};\r\n/**\r\n * The default log level\r\n */\r\nconst defaultLogLevel = LogLevel.INFO;\r\n/**\r\n * By default, `console.debug` is not displayed in the developer console (in\r\n * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n * logs to the `console.log` function.\r\n */\r\nconst ConsoleMethod = {\r\n    [LogLevel.DEBUG]: 'log',\r\n    [LogLevel.VERBOSE]: 'log',\r\n    [LogLevel.INFO]: 'info',\r\n    [LogLevel.WARN]: 'warn',\r\n    [LogLevel.ERROR]: 'error'\r\n};\r\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\r\nconst defaultLogHandler = (instance, logType, ...args) => {\r\n    if (logType < instance.logLevel) {\r\n        return;\r\n    }\r\n    const now = new Date().toISOString();\r\n    const method = ConsoleMethod[logType];\r\n    if (method) {\r\n        console[method](`[${now}]  ${instance.name}:`, ...args);\r\n    }\r\n    else {\r\n        throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\r\n    }\r\n};\r\nclass Logger {\r\n    /**\r\n     * Gives you an instance of a Logger to capture messages according to\r\n     * Firebase's logging scheme.\r\n     *\r\n     * @param name The name that the logs will be associated with\r\n     */\r\n    constructor(name) {\r\n        this.name = name;\r\n        /**\r\n         * The log level of the given Logger instance.\r\n         */\r\n        this._logLevel = defaultLogLevel;\r\n        /**\r\n         * The main (internal) log handler for the Logger instance.\r\n         * Can be set to a new function in internal package code but not by user.\r\n         */\r\n        this._logHandler = defaultLogHandler;\r\n        /**\r\n         * The optional, additional, user-defined log handler for the Logger instance.\r\n         */\r\n        this._userLogHandler = null;\r\n        /**\r\n         * Capture the current instance for later use\r\n         */\r\n        instances.push(this);\r\n    }\r\n    get logLevel() {\r\n        return this._logLevel;\r\n    }\r\n    set logLevel(val) {\r\n        if (!(val in LogLevel)) {\r\n            throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\r\n        }\r\n        this._logLevel = val;\r\n    }\r\n    // Workaround for setter/getter having to be the same type.\r\n    setLogLevel(val) {\r\n        this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\r\n    }\r\n    get logHandler() {\r\n        return this._logHandler;\r\n    }\r\n    set logHandler(val) {\r\n        if (typeof val !== 'function') {\r\n            throw new TypeError('Value assigned to `logHandler` must be a function');\r\n        }\r\n        this._logHandler = val;\r\n    }\r\n    get userLogHandler() {\r\n        return this._userLogHandler;\r\n    }\r\n    set userLogHandler(val) {\r\n        this._userLogHandler = val;\r\n    }\r\n    /**\r\n     * The functions below are all based on the `console` interface\r\n     */\r\n    debug(...args) {\r\n        this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\r\n        this._logHandler(this, LogLevel.DEBUG, ...args);\r\n    }\r\n    log(...args) {\r\n        this._userLogHandler &&\r\n            this._userLogHandler(this, LogLevel.VERBOSE, ...args);\r\n        this._logHandler(this, LogLevel.VERBOSE, ...args);\r\n    }\r\n    info(...args) {\r\n        this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\r\n        this._logHandler(this, LogLevel.INFO, ...args);\r\n    }\r\n    warn(...args) {\r\n        this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\r\n        this._logHandler(this, LogLevel.WARN, ...args);\r\n    }\r\n    error(...args) {\r\n        this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\r\n        this._logHandler(this, LogLevel.ERROR, ...args);\r\n    }\r\n}\r\nfunction setLogLevel(level) {\r\n    instances.forEach(inst => {\r\n        inst.setLogLevel(level);\r\n    });\r\n}\r\nfunction setUserLogHandler(logCallback, options) {\r\n    for (const instance of instances) {\r\n        let customLogLevel = null;\r\n        if (options && options.level) {\r\n            customLogLevel = levelStringToEnum[options.level];\r\n        }\r\n        if (logCallback === null) {\r\n            instance.userLogHandler = null;\r\n        }\r\n        else {\r\n            instance.userLogHandler = (instance, level, ...args) => {\r\n                const message = args\r\n                    .map(arg => {\r\n                    if (arg == null) {\r\n                        return null;\r\n                    }\r\n                    else if (typeof arg === 'string') {\r\n                        return arg;\r\n                    }\r\n                    else if (typeof arg === 'number' || typeof arg === 'boolean') {\r\n                        return arg.toString();\r\n                    }\r\n                    else if (arg instanceof Error) {\r\n                        return arg.message;\r\n                    }\r\n                    else {\r\n                        try {\r\n                            return JSON.stringify(arg);\r\n                        }\r\n                        catch (ignored) {\r\n                            return null;\r\n                        }\r\n                    }\r\n                })\r\n                    .filter(arg => arg)\r\n                    .join(' ');\r\n                if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\r\n                    logCallback({\r\n                        level: LogLevel[level].toLowerCase(),\r\n                        message,\r\n                        args,\r\n                        type: instance.name\r\n                    });\r\n                }\r\n            };\r\n        }\r\n    }\r\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n//# sourceMappingURL=index.esm2017.js.map\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n    return (idbProxyableTypes ||\n        (idbProxyableTypes = [\n            IDBDatabase,\n            IDBObjectStore,\n            IDBIndex,\n            IDBCursor,\n            IDBTransaction,\n        ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n    return (cursorAdvanceMethods ||\n        (cursorAdvanceMethods = [\n            IDBCursor.prototype.advance,\n            IDBCursor.prototype.continue,\n            IDBCursor.prototype.continuePrimaryKey,\n        ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n    const promise = new Promise((resolve, reject) => {\n        const unlisten = () => {\n            request.removeEventListener('success', success);\n            request.removeEventListener('error', error);\n        };\n        const success = () => {\n            resolve(wrap(request.result));\n            unlisten();\n        };\n        const error = () => {\n            reject(request.error);\n            unlisten();\n        };\n        request.addEventListener('success', success);\n        request.addEventListener('error', error);\n    });\n    promise\n        .then((value) => {\n        // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n        // (see wrapFunction).\n        if (value instanceof IDBCursor) {\n            cursorRequestMap.set(value, request);\n        }\n        // Catching to avoid \"Uncaught Promise exceptions\"\n    })\n        .catch(() => { });\n    // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n    // is because we create many promises from a single IDBRequest.\n    reverseTransformCache.set(promise, request);\n    return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n    // Early bail if we've already created a done promise for this transaction.\n    if (transactionDoneMap.has(tx))\n        return;\n    const done = new Promise((resolve, reject) => {\n        const unlisten = () => {\n            tx.removeEventListener('complete', complete);\n            tx.removeEventListener('error', error);\n            tx.removeEventListener('abort', error);\n        };\n        const complete = () => {\n            resolve();\n            unlisten();\n        };\n        const error = () => {\n            reject(tx.error || new DOMException('AbortError', 'AbortError'));\n            unlisten();\n        };\n        tx.addEventListener('complete', complete);\n        tx.addEventListener('error', error);\n        tx.addEventListener('abort', error);\n    });\n    // Cache it for later retrieval.\n    transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n    get(target, prop, receiver) {\n        if (target instanceof IDBTransaction) {\n            // Special handling for transaction.done.\n            if (prop === 'done')\n                return transactionDoneMap.get(target);\n            // Polyfill for objectStoreNames because of Edge.\n            if (prop === 'objectStoreNames') {\n                return target.objectStoreNames || transactionStoreNamesMap.get(target);\n            }\n            // Make tx.store return the only store in the transaction, or undefined if there are many.\n            if (prop === 'store') {\n                return receiver.objectStoreNames[1]\n                    ? undefined\n                    : receiver.objectStore(receiver.objectStoreNames[0]);\n            }\n        }\n        // Else transform whatever we get back.\n        return wrap(target[prop]);\n    },\n    set(target, prop, value) {\n        target[prop] = value;\n        return true;\n    },\n    has(target, prop) {\n        if (target instanceof IDBTransaction &&\n            (prop === 'done' || prop === 'store')) {\n            return true;\n        }\n        return prop in target;\n    },\n};\nfunction replaceTraps(callback) {\n    idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n    // Due to expected object equality (which is enforced by the caching in `wrap`), we\n    // only create one new func per func.\n    // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n    if (func === IDBDatabase.prototype.transaction &&\n        !('objectStoreNames' in IDBTransaction.prototype)) {\n        return function (storeNames, ...args) {\n            const tx = func.call(unwrap(this), storeNames, ...args);\n            transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n            return wrap(tx);\n        };\n    }\n    // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n    // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n    // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n    // with real promises, so each advance methods returns a new promise for the cursor object, or\n    // undefined if the end of the cursor has been reached.\n    if (getCursorAdvanceMethods().includes(func)) {\n        return function (...args) {\n            // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n            // the original object.\n            func.apply(unwrap(this), args);\n            return wrap(cursorRequestMap.get(this));\n        };\n    }\n    return function (...args) {\n        // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n        // the original object.\n        return wrap(func.apply(unwrap(this), args));\n    };\n}\nfunction transformCachableValue(value) {\n    if (typeof value === 'function')\n        return wrapFunction(value);\n    // This doesn't return, it just creates a 'done' promise for the transaction,\n    // which is later returned for transaction.done (see idbObjectHandler).\n    if (value instanceof IDBTransaction)\n        cacheDonePromiseForTransaction(value);\n    if (instanceOfAny(value, getIdbProxyableTypes()))\n        return new Proxy(value, idbProxyTraps);\n    // Return the same value back if we're not going to transform it.\n    return value;\n}\nfunction wrap(value) {\n    // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n    // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n    if (value instanceof IDBRequest)\n        return promisifyRequest(value);\n    // If we've already transformed this value before, reuse the transformed value.\n    // This is faster, but it also provides object equality.\n    if (transformCache.has(value))\n        return transformCache.get(value);\n    const newValue = transformCachableValue(value);\n    // Not all types are transformed.\n    // These may be primitive types, so they can't be WeakMap keys.\n    if (newValue !== value) {\n        transformCache.set(value, newValue);\n        reverseTransformCache.set(newValue, value);\n    }\n    return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n    const request = indexedDB.open(name, version);\n    const openPromise = wrap(request);\n    if (upgrade) {\n        request.addEventListener('upgradeneeded', (event) => {\n            upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n        });\n    }\n    if (blocked)\n        request.addEventListener('blocked', () => blocked());\n    openPromise\n        .then((db) => {\n        if (terminated)\n            db.addEventListener('close', () => terminated());\n        if (blocking)\n            db.addEventListener('versionchange', () => blocking());\n    })\n        .catch(() => { });\n    return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n    const request = indexedDB.deleteDatabase(name);\n    if (blocked)\n        request.addEventListener('blocked', () => blocked());\n    return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n    if (!(target instanceof IDBDatabase &&\n        !(prop in target) &&\n        typeof prop === 'string')) {\n        return;\n    }\n    if (cachedMethods.get(prop))\n        return cachedMethods.get(prop);\n    const targetFuncName = prop.replace(/FromIndex$/, '');\n    const useIndex = prop !== targetFuncName;\n    const isWrite = writeMethods.includes(targetFuncName);\n    if (\n    // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n    !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n        !(isWrite || readMethods.includes(targetFuncName))) {\n        return;\n    }\n    const method = async function (storeName, ...args) {\n        // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n        const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n        let target = tx.store;\n        if (useIndex)\n            target = target.index(args.shift());\n        // Must reject if op rejects.\n        // If it's a write operation, must reject if tx.done rejects.\n        // Must reject with op rejection first.\n        // Must resolve with op value.\n        // Must handle both promises (no unhandled rejections)\n        return (await Promise.all([\n            target[targetFuncName](...args),\n            isWrite && tx.done,\n        ]))[0];\n    };\n    cachedMethods.set(prop, method);\n    return method;\n}\nreplaceTraps((oldTraps) => ({\n    ...oldTraps,\n    get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n    has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","import { Component, ComponentContainer } from '@firebase/component';\nimport { Logger, setUserLogHandler, setLogLevel as setLogLevel$1 } from '@firebase/logger';\nimport { ErrorFactory, deepEqual, FirebaseError, base64urlEncodeWithoutPadding, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nexport { FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PlatformLoggerServiceImpl {\r\n    constructor(container) {\r\n        this.container = container;\r\n    }\r\n    // In initial implementation, this will be called by installations on\r\n    // auth token refresh, and installations will send this string.\r\n    getPlatformInfoString() {\r\n        const providers = this.container.getProviders();\r\n        // Loop through providers and get library/version pairs from any that are\r\n        // version components.\r\n        return providers\r\n            .map(provider => {\r\n            if (isVersionServiceProvider(provider)) {\r\n                const service = provider.getImmediate();\r\n                return `${service.library}/${service.version}`;\r\n            }\r\n            else {\r\n                return null;\r\n            }\r\n        })\r\n            .filter(logString => logString)\r\n            .join(' ');\r\n    }\r\n}\r\n/**\r\n *\r\n * @param provider check if this provider provides a VersionService\r\n *\r\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\r\n * provides VersionService. The provider is not necessarily a 'app-version'\r\n * provider.\r\n */\r\nfunction isVersionServiceProvider(provider) {\r\n    const component = provider.getComponent();\r\n    return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* VERSION */;\r\n}\n\nconst name$o = \"@firebase/app\";\nconst version$1 = \"0.7.30\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logger = new Logger('@firebase/app');\n\nconst name$n = \"@firebase/app-compat\";\n\nconst name$m = \"@firebase/analytics-compat\";\n\nconst name$l = \"@firebase/analytics\";\n\nconst name$k = \"@firebase/app-check-compat\";\n\nconst name$j = \"@firebase/app-check\";\n\nconst name$i = \"@firebase/auth\";\n\nconst name$h = \"@firebase/auth-compat\";\n\nconst name$g = \"@firebase/database\";\n\nconst name$f = \"@firebase/database-compat\";\n\nconst name$e = \"@firebase/functions\";\n\nconst name$d = \"@firebase/functions-compat\";\n\nconst name$c = \"@firebase/installations\";\n\nconst name$b = \"@firebase/installations-compat\";\n\nconst name$a = \"@firebase/messaging\";\n\nconst name$9 = \"@firebase/messaging-compat\";\n\nconst name$8 = \"@firebase/performance\";\n\nconst name$7 = \"@firebase/performance-compat\";\n\nconst name$6 = \"@firebase/remote-config\";\n\nconst name$5 = \"@firebase/remote-config-compat\";\n\nconst name$4 = \"@firebase/storage\";\n\nconst name$3 = \"@firebase/storage-compat\";\n\nconst name$2 = \"@firebase/firestore\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"9.9.2\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The default app name\r\n *\r\n * @internal\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\r\nconst PLATFORM_LOG_STRING = {\r\n    [name$o]: 'fire-core',\r\n    [name$n]: 'fire-core-compat',\r\n    [name$l]: 'fire-analytics',\r\n    [name$m]: 'fire-analytics-compat',\r\n    [name$j]: 'fire-app-check',\r\n    [name$k]: 'fire-app-check-compat',\r\n    [name$i]: 'fire-auth',\r\n    [name$h]: 'fire-auth-compat',\r\n    [name$g]: 'fire-rtdb',\r\n    [name$f]: 'fire-rtdb-compat',\r\n    [name$e]: 'fire-fn',\r\n    [name$d]: 'fire-fn-compat',\r\n    [name$c]: 'fire-iid',\r\n    [name$b]: 'fire-iid-compat',\r\n    [name$a]: 'fire-fcm',\r\n    [name$9]: 'fire-fcm-compat',\r\n    [name$8]: 'fire-perf',\r\n    [name$7]: 'fire-perf-compat',\r\n    [name$6]: 'fire-rc',\r\n    [name$5]: 'fire-rc-compat',\r\n    [name$4]: 'fire-gcs',\r\n    [name$3]: 'fire-gcs-compat',\r\n    [name$2]: 'fire-fst',\r\n    [name$1]: 'fire-fst-compat',\r\n    'fire-js': 'fire-js',\r\n    [name]: 'fire-js-all'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nconst _apps = new Map();\r\n/**\r\n * Registered components.\r\n *\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst _components = new Map();\r\n/**\r\n * @param component - the component being added to this app's container\r\n *\r\n * @internal\r\n */\r\nfunction _addComponent(app, component) {\r\n    try {\r\n        app.container.addComponent(component);\r\n    }\r\n    catch (e) {\r\n        logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\r\n    }\r\n}\r\n/**\r\n *\r\n * @internal\r\n */\r\nfunction _addOrOverwriteComponent(app, component) {\r\n    app.container.addOrOverwriteComponent(component);\r\n}\r\n/**\r\n *\r\n * @param component - the component to register\r\n * @returns whether or not the component is registered successfully\r\n *\r\n * @internal\r\n */\r\nfunction _registerComponent(component) {\r\n    const componentName = component.name;\r\n    if (_components.has(componentName)) {\r\n        logger.debug(`There were multiple attempts to register component ${componentName}.`);\r\n        return false;\r\n    }\r\n    _components.set(componentName, component);\r\n    // add the component to existing app instances\r\n    for (const app of _apps.values()) {\r\n        _addComponent(app, component);\r\n    }\r\n    return true;\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n *\r\n * @returns the provider for the service with the matching name\r\n *\r\n * @internal\r\n */\r\nfunction _getProvider(app, name) {\r\n    const heartbeatController = app.container\r\n        .getProvider('heartbeat')\r\n        .getImmediate({ optional: true });\r\n    if (heartbeatController) {\r\n        void heartbeatController.triggerHeartbeat();\r\n    }\r\n    return app.container.getProvider(name);\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\r\n *\r\n * @internal\r\n */\r\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\r\n    _getProvider(app, name).clearInstance(instanceIdentifier);\r\n}\r\n/**\r\n * Test only\r\n *\r\n * @internal\r\n */\r\nfunction _clearComponents() {\r\n    _components.clear();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERRORS = {\r\n    [\"no-app\" /* NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\r\n        'call Firebase App.initializeApp()',\r\n    [\"bad-app-name\" /* BAD_APP_NAME */]: \"Illegal App name: '{$appName}\",\r\n    [\"duplicate-app\" /* DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\r\n    [\"app-deleted\" /* APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\r\n    [\"invalid-app-argument\" /* INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\r\n        'Firebase App instance.',\r\n    [\"invalid-log-argument\" /* INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\r\n    [\"idb-open\" /* IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\r\n    [\"idb-get\" /* IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\r\n    [\"idb-set\" /* IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\r\n    [\"idb-delete\" /* IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FirebaseAppImpl {\r\n    constructor(options, config, container) {\r\n        this._isDeleted = false;\r\n        this._options = Object.assign({}, options);\r\n        this._config = Object.assign({}, config);\r\n        this._name = config.name;\r\n        this._automaticDataCollectionEnabled =\r\n            config.automaticDataCollectionEnabled;\r\n        this._container = container;\r\n        this.container.addComponent(new Component('app', () => this, \"PUBLIC\" /* PUBLIC */));\r\n    }\r\n    get automaticDataCollectionEnabled() {\r\n        this.checkDestroyed();\r\n        return this._automaticDataCollectionEnabled;\r\n    }\r\n    set automaticDataCollectionEnabled(val) {\r\n        this.checkDestroyed();\r\n        this._automaticDataCollectionEnabled = val;\r\n    }\r\n    get name() {\r\n        this.checkDestroyed();\r\n        return this._name;\r\n    }\r\n    get options() {\r\n        this.checkDestroyed();\r\n        return this._options;\r\n    }\r\n    get config() {\r\n        this.checkDestroyed();\r\n        return this._config;\r\n    }\r\n    get container() {\r\n        return this._container;\r\n    }\r\n    get isDeleted() {\r\n        return this._isDeleted;\r\n    }\r\n    set isDeleted(val) {\r\n        this._isDeleted = val;\r\n    }\r\n    /**\r\n     * This function will throw an Error if the App has already been deleted -\r\n     * use before performing API actions on the App.\r\n     */\r\n    checkDestroyed() {\r\n        if (this.isDeleted) {\r\n            throw ERROR_FACTORY.create(\"app-deleted\" /* APP_DELETED */, { appName: this._name });\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The current SDK version.\r\n *\r\n * @public\r\n */\r\nconst SDK_VERSION = version;\r\nfunction initializeApp(options, rawConfig = {}) {\r\n    if (typeof rawConfig !== 'object') {\r\n        const name = rawConfig;\r\n        rawConfig = { name };\r\n    }\r\n    const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: false }, rawConfig);\r\n    const name = config.name;\r\n    if (typeof name !== 'string' || !name) {\r\n        throw ERROR_FACTORY.create(\"bad-app-name\" /* BAD_APP_NAME */, {\r\n            appName: String(name)\r\n        });\r\n    }\r\n    const existingApp = _apps.get(name);\r\n    if (existingApp) {\r\n        // return the existing app if options and config deep equal the ones in the existing app.\r\n        if (deepEqual(options, existingApp.options) &&\r\n            deepEqual(config, existingApp.config)) {\r\n            return existingApp;\r\n        }\r\n        else {\r\n            throw ERROR_FACTORY.create(\"duplicate-app\" /* DUPLICATE_APP */, { appName: name });\r\n        }\r\n    }\r\n    const container = new ComponentContainer(name);\r\n    for (const component of _components.values()) {\r\n        container.addComponent(component);\r\n    }\r\n    const newApp = new FirebaseAppImpl(options, config, container);\r\n    _apps.set(name, newApp);\r\n    return newApp;\r\n}\r\n/**\r\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\r\n *\r\n * When called with no arguments, the default app is returned. When an app name\r\n * is provided, the app corresponding to that name is returned.\r\n *\r\n * An exception is thrown if the app being retrieved has not yet been\r\n * initialized.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return the default app\r\n * const app = getApp();\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return a named app\r\n * const otherApp = getApp(\"otherApp\");\r\n * ```\r\n *\r\n * @param name - Optional name of the app to return. If no name is\r\n *   provided, the default is `\"[DEFAULT]\"`.\r\n *\r\n * @returns The app corresponding to the provided app name.\r\n *   If no app name is provided, the default app is returned.\r\n *\r\n * @public\r\n */\r\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\r\n    const app = _apps.get(name);\r\n    if (!app) {\r\n        throw ERROR_FACTORY.create(\"no-app\" /* NO_APP */, { appName: name });\r\n    }\r\n    return app;\r\n}\r\n/**\r\n * A (read-only) array of all initialized apps.\r\n * @public\r\n */\r\nfunction getApps() {\r\n    return Array.from(_apps.values());\r\n}\r\n/**\r\n * Renders this app unusable and frees the resources of all associated\r\n * services.\r\n *\r\n * @example\r\n * ```javascript\r\n * deleteApp(app)\r\n *   .then(function() {\r\n *     console.log(\"App deleted successfully\");\r\n *   })\r\n *   .catch(function(error) {\r\n *     console.log(\"Error deleting app:\", error);\r\n *   });\r\n * ```\r\n *\r\n * @public\r\n */\r\nasync function deleteApp(app) {\r\n    const name = app.name;\r\n    if (_apps.has(name)) {\r\n        _apps.delete(name);\r\n        await Promise.all(app.container\r\n            .getProviders()\r\n            .map(provider => provider.delete()));\r\n        app.isDeleted = true;\r\n    }\r\n}\r\n/**\r\n * Registers a library's name and version for platform logging purposes.\r\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\r\n * @param version - Current version of that library.\r\n * @param variant - Bundle variant, e.g., node, rn, etc.\r\n *\r\n * @public\r\n */\r\nfunction registerVersion(libraryKeyOrName, version, variant) {\r\n    var _a;\r\n    // TODO: We can use this check to whitelist strings when/if we set up\r\n    // a good whitelist system.\r\n    let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\r\n    if (variant) {\r\n        library += `-${variant}`;\r\n    }\r\n    const libraryMismatch = library.match(/\\s|\\//);\r\n    const versionMismatch = version.match(/\\s|\\//);\r\n    if (libraryMismatch || versionMismatch) {\r\n        const warning = [\r\n            `Unable to register library \"${library}\" with version \"${version}\":`\r\n        ];\r\n        if (libraryMismatch) {\r\n            warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\r\n        }\r\n        if (libraryMismatch && versionMismatch) {\r\n            warning.push('and');\r\n        }\r\n        if (versionMismatch) {\r\n            warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\r\n        }\r\n        logger.warn(warning.join(' '));\r\n        return;\r\n    }\r\n    _registerComponent(new Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* VERSION */));\r\n}\r\n/**\r\n * Sets log handler for all Firebase SDKs.\r\n * @param logCallback - An optional custom log handler that executes user code whenever\r\n * the Firebase SDK makes a logging call.\r\n *\r\n * @public\r\n */\r\nfunction onLog(logCallback, options) {\r\n    if (logCallback !== null && typeof logCallback !== 'function') {\r\n        throw ERROR_FACTORY.create(\"invalid-log-argument\" /* INVALID_LOG_ARGUMENT */);\r\n    }\r\n    setUserLogHandler(logCallback, options);\r\n}\r\n/**\r\n * Sets log level for all Firebase SDKs.\r\n *\r\n * All of the log types above the current log level are captured (i.e. if\r\n * you set the log level to `info`, errors are logged, but `debug` and\r\n * `verbose` logs are not).\r\n *\r\n * @public\r\n */\r\nfunction setLogLevel(logLevel) {\r\n    setLogLevel$1(logLevel);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebase-heartbeat-database';\r\nconst DB_VERSION = 1;\r\nconst STORE_NAME = 'firebase-heartbeat-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n    if (!dbPromise) {\r\n        dbPromise = openDB(DB_NAME, DB_VERSION, {\r\n            upgrade: (db, oldVersion) => {\r\n                // We don't use 'break' in this switch statement, the fall-through\r\n                // behavior is what we want, because if there are multiple versions between\r\n                // the old version and the current version, we want ALL the migrations\r\n                // that correspond to those versions to run, not only the last one.\r\n                // eslint-disable-next-line default-case\r\n                switch (oldVersion) {\r\n                    case 0:\r\n                        db.createObjectStore(STORE_NAME);\r\n                }\r\n            }\r\n        }).catch(e => {\r\n            throw ERROR_FACTORY.create(\"idb-open\" /* IDB_OPEN */, {\r\n                originalErrorMessage: e.message\r\n            });\r\n        });\r\n    }\r\n    return dbPromise;\r\n}\r\nasync function readHeartbeatsFromIndexedDB(app) {\r\n    var _a;\r\n    try {\r\n        const db = await getDbPromise();\r\n        return db\r\n            .transaction(STORE_NAME)\r\n            .objectStore(STORE_NAME)\r\n            .get(computeKey(app));\r\n    }\r\n    catch (e) {\r\n        if (e instanceof FirebaseError) {\r\n            logger.warn(e.message);\r\n        }\r\n        else {\r\n            const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* IDB_GET */, {\r\n                originalErrorMessage: (_a = e) === null || _a === void 0 ? void 0 : _a.message\r\n            });\r\n            logger.warn(idbGetError.message);\r\n        }\r\n    }\r\n}\r\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\r\n    var _a;\r\n    try {\r\n        const db = await getDbPromise();\r\n        const tx = db.transaction(STORE_NAME, 'readwrite');\r\n        const objectStore = tx.objectStore(STORE_NAME);\r\n        await objectStore.put(heartbeatObject, computeKey(app));\r\n        return tx.done;\r\n    }\r\n    catch (e) {\r\n        if (e instanceof FirebaseError) {\r\n            logger.warn(e.message);\r\n        }\r\n        else {\r\n            const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* IDB_WRITE */, {\r\n                originalErrorMessage: (_a = e) === null || _a === void 0 ? void 0 : _a.message\r\n            });\r\n            logger.warn(idbGetError.message);\r\n        }\r\n    }\r\n}\r\nfunction computeKey(app) {\r\n    return `${app.name}!${app.options.appId}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst MAX_HEADER_BYTES = 1024;\r\n// 30 days\r\nconst STORED_HEARTBEAT_RETENTION_MAX_MILLIS = 30 * 24 * 60 * 60 * 1000;\r\nclass HeartbeatServiceImpl {\r\n    constructor(container) {\r\n        this.container = container;\r\n        /**\r\n         * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\r\n         * the header string.\r\n         * Stores one record per date. This will be consolidated into the standard\r\n         * format of one record per user agent string before being sent as a header.\r\n         * Populated from indexedDB when the controller is instantiated and should\r\n         * be kept in sync with indexedDB.\r\n         * Leave public for easier testing.\r\n         */\r\n        this._heartbeatsCache = null;\r\n        const app = this.container.getProvider('app').getImmediate();\r\n        this._storage = new HeartbeatStorageImpl(app);\r\n        this._heartbeatsCachePromise = this._storage.read().then(result => {\r\n            this._heartbeatsCache = result;\r\n            return result;\r\n        });\r\n    }\r\n    /**\r\n     * Called to report a heartbeat. The function will generate\r\n     * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\r\n     * to IndexedDB.\r\n     * Note that we only store one heartbeat per day. So if a heartbeat for today is\r\n     * already logged, subsequent calls to this function in the same day will be ignored.\r\n     */\r\n    async triggerHeartbeat() {\r\n        const platformLogger = this.container\r\n            .getProvider('platform-logger')\r\n            .getImmediate();\r\n        // This is the \"Firebase user agent\" string from the platform logger\r\n        // service, not the browser user agent.\r\n        const agent = platformLogger.getPlatformInfoString();\r\n        const date = getUTCDateString();\r\n        if (this._heartbeatsCache === null) {\r\n            this._heartbeatsCache = await this._heartbeatsCachePromise;\r\n        }\r\n        // Do not store a heartbeat if one is already stored for this day\r\n        // or if a header has already been sent today.\r\n        if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\r\n            this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\r\n            return;\r\n        }\r\n        else {\r\n            // There is no entry for this date. Create one.\r\n            this._heartbeatsCache.heartbeats.push({ date, agent });\r\n        }\r\n        // Remove entries older than 30 days.\r\n        this._heartbeatsCache.heartbeats = this._heartbeatsCache.heartbeats.filter(singleDateHeartbeat => {\r\n            const hbTimestamp = new Date(singleDateHeartbeat.date).valueOf();\r\n            const now = Date.now();\r\n            return now - hbTimestamp <= STORED_HEARTBEAT_RETENTION_MAX_MILLIS;\r\n        });\r\n        return this._storage.overwrite(this._heartbeatsCache);\r\n    }\r\n    /**\r\n     * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\r\n     * It also clears all heartbeats from memory as well as in IndexedDB.\r\n     *\r\n     * NOTE: Consuming product SDKs should not send the header if this method\r\n     * returns an empty string.\r\n     */\r\n    async getHeartbeatsHeader() {\r\n        if (this._heartbeatsCache === null) {\r\n            await this._heartbeatsCachePromise;\r\n        }\r\n        // If it's still null or the array is empty, there is no data to send.\r\n        if (this._heartbeatsCache === null ||\r\n            this._heartbeatsCache.heartbeats.length === 0) {\r\n            return '';\r\n        }\r\n        const date = getUTCDateString();\r\n        // Extract as many heartbeats from the cache as will fit under the size limit.\r\n        const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\r\n        const headerString = base64urlEncodeWithoutPadding(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\r\n        // Store last sent date to prevent another being logged/sent for the same day.\r\n        this._heartbeatsCache.lastSentHeartbeatDate = date;\r\n        if (unsentEntries.length > 0) {\r\n            // Store any unsent entries if they exist.\r\n            this._heartbeatsCache.heartbeats = unsentEntries;\r\n            // This seems more likely than emptying the array (below) to lead to some odd state\r\n            // since the cache isn't empty and this will be called again on the next request,\r\n            // and is probably safest if we await it.\r\n            await this._storage.overwrite(this._heartbeatsCache);\r\n        }\r\n        else {\r\n            this._heartbeatsCache.heartbeats = [];\r\n            // Do not wait for this, to reduce latency.\r\n            void this._storage.overwrite(this._heartbeatsCache);\r\n        }\r\n        return headerString;\r\n    }\r\n}\r\nfunction getUTCDateString() {\r\n    const today = new Date();\r\n    // Returns date format 'YYYY-MM-DD'\r\n    return today.toISOString().substring(0, 10);\r\n}\r\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\r\n    // Heartbeats grouped by user agent in the standard format to be sent in\r\n    // the header.\r\n    const heartbeatsToSend = [];\r\n    // Single date format heartbeats that are not sent.\r\n    let unsentEntries = heartbeatsCache.slice();\r\n    for (const singleDateHeartbeat of heartbeatsCache) {\r\n        // Look for an existing entry with the same user agent.\r\n        const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\r\n        if (!heartbeatEntry) {\r\n            // If no entry for this user agent exists, create one.\r\n            heartbeatsToSend.push({\r\n                agent: singleDateHeartbeat.agent,\r\n                dates: [singleDateHeartbeat.date]\r\n            });\r\n            if (countBytes(heartbeatsToSend) > maxSize) {\r\n                // If the header would exceed max size, remove the added heartbeat\r\n                // entry and stop adding to the header.\r\n                heartbeatsToSend.pop();\r\n                break;\r\n            }\r\n        }\r\n        else {\r\n            heartbeatEntry.dates.push(singleDateHeartbeat.date);\r\n            // If the header would exceed max size, remove the added date\r\n            // and stop adding to the header.\r\n            if (countBytes(heartbeatsToSend) > maxSize) {\r\n                heartbeatEntry.dates.pop();\r\n                break;\r\n            }\r\n        }\r\n        // Pop unsent entry from queue. (Skipped if adding the entry exceeded\r\n        // quota and the loop breaks early.)\r\n        unsentEntries = unsentEntries.slice(1);\r\n    }\r\n    return {\r\n        heartbeatsToSend,\r\n        unsentEntries\r\n    };\r\n}\r\nclass HeartbeatStorageImpl {\r\n    constructor(app) {\r\n        this.app = app;\r\n        this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\r\n    }\r\n    async runIndexedDBEnvironmentCheck() {\r\n        if (!isIndexedDBAvailable()) {\r\n            return false;\r\n        }\r\n        else {\r\n            return validateIndexedDBOpenable()\r\n                .then(() => true)\r\n                .catch(() => false);\r\n        }\r\n    }\r\n    /**\r\n     * Read all heartbeats.\r\n     */\r\n    async read() {\r\n        const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n        if (!canUseIndexedDB) {\r\n            return { heartbeats: [] };\r\n        }\r\n        else {\r\n            const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\r\n            return idbHeartbeatObject || { heartbeats: [] };\r\n        }\r\n    }\r\n    // overwrite the storage with the provided heartbeats\r\n    async overwrite(heartbeatsObject) {\r\n        var _a;\r\n        const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n        if (!canUseIndexedDB) {\r\n            return;\r\n        }\r\n        else {\r\n            const existingHeartbeatsObject = await this.read();\r\n            return writeHeartbeatsToIndexedDB(this.app, {\r\n                lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n                heartbeats: heartbeatsObject.heartbeats\r\n            });\r\n        }\r\n    }\r\n    // add heartbeats\r\n    async add(heartbeatsObject) {\r\n        var _a;\r\n        const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n        if (!canUseIndexedDB) {\r\n            return;\r\n        }\r\n        else {\r\n            const existingHeartbeatsObject = await this.read();\r\n            return writeHeartbeatsToIndexedDB(this.app, {\r\n                lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n                heartbeats: [\r\n                    ...existingHeartbeatsObject.heartbeats,\r\n                    ...heartbeatsObject.heartbeats\r\n                ]\r\n            });\r\n        }\r\n    }\r\n}\r\n/**\r\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\r\n * in a platform logging header JSON object, stringified, and converted\r\n * to base 64.\r\n */\r\nfunction countBytes(heartbeatsCache) {\r\n    // base64 has a restricted set of characters, all of which should be 1 byte.\r\n    return base64urlEncodeWithoutPadding(\r\n    // heartbeatsCache wrapper properties\r\n    JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerCoreComponents(variant) {\r\n    _registerComponent(new Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* PRIVATE */));\r\n    _registerComponent(new Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* PRIVATE */));\r\n    // Register `app` package.\r\n    registerVersion(name$o, version$1, variant);\r\n    // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n    registerVersion(name$o, version$1, 'esm2017');\r\n    // Register platform SDK identifier (no version).\r\n    registerVersion('fire-js', '');\r\n}\n\n/**\r\n * Firebase App\r\n *\r\n * @remarks This package coordinates the communication between the different Firebase components\r\n * @packageDocumentation\r\n */\r\nregisterCoreComponents('');\n\nexport { SDK_VERSION, DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _registerComponent, _removeServiceInstance, deleteApp, getApp, getApps, initializeApp, onLog, registerVersion, setLogLevel };\n//# sourceMappingURL=index.esm2017.js.map\n","import { ErrorFactory, contains, deepExtend, createSubscribe, isBrowser } from '@firebase/util';\nimport { Component } from '@firebase/component';\nimport * as modularAPIs from '@firebase/app';\nimport { _addComponent, deleteApp, _DEFAULT_ENTRY_NAME, _addOrOverwriteComponent, registerVersion } from '@firebase/app';\nimport { Logger } from '@firebase/logger';\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Global context object for a collection of services using\r\n * a shared authentication state.\r\n *\r\n * marked as internal because it references internal types exported from @firebase/app\r\n * @internal\r\n */\r\nclass FirebaseAppImpl {\r\n    constructor(_delegate, firebase) {\r\n        this._delegate = _delegate;\r\n        this.firebase = firebase;\r\n        // add itself to container\r\n        _addComponent(_delegate, new Component('app-compat', () => this, \"PUBLIC\" /* PUBLIC */));\r\n        this.container = _delegate.container;\r\n    }\r\n    get automaticDataCollectionEnabled() {\r\n        return this._delegate.automaticDataCollectionEnabled;\r\n    }\r\n    set automaticDataCollectionEnabled(val) {\r\n        this._delegate.automaticDataCollectionEnabled = val;\r\n    }\r\n    get name() {\r\n        return this._delegate.name;\r\n    }\r\n    get options() {\r\n        return this._delegate.options;\r\n    }\r\n    delete() {\r\n        return new Promise(resolve => {\r\n            this._delegate.checkDestroyed();\r\n            resolve();\r\n        }).then(() => {\r\n            this.firebase.INTERNAL.removeApp(this.name);\r\n            return deleteApp(this._delegate);\r\n        });\r\n    }\r\n    /**\r\n     * Return a service instance associated with this app (creating it\r\n     * on demand), identified by the passed instanceIdentifier.\r\n     *\r\n     * NOTE: Currently storage and functions are the only ones that are leveraging this\r\n     * functionality. They invoke it by calling:\r\n     *\r\n     * ```javascript\r\n     * firebase.app().storage('STORAGE BUCKET ID')\r\n     * ```\r\n     *\r\n     * The service name is passed to this already\r\n     * @internal\r\n     */\r\n    _getService(name, instanceIdentifier = _DEFAULT_ENTRY_NAME) {\r\n        var _a;\r\n        this._delegate.checkDestroyed();\r\n        // Initialize instance if InstatiationMode is `EXPLICIT`.\r\n        const provider = this._delegate.container.getProvider(name);\r\n        if (!provider.isInitialized() &&\r\n            ((_a = provider.getComponent()) === null || _a === void 0 ? void 0 : _a.instantiationMode) === \"EXPLICIT\" /* EXPLICIT */) {\r\n            provider.initialize();\r\n        }\r\n        // getImmediate will always succeed because _getService is only called for registered components.\r\n        return provider.getImmediate({\r\n            identifier: instanceIdentifier\r\n        });\r\n    }\r\n    /**\r\n     * Remove a service instance from the cache, so we will create a new instance for this service\r\n     * when people try to get it again.\r\n     *\r\n     * NOTE: currently only firestore uses this functionality to support firestore shutdown.\r\n     *\r\n     * @param name The service name\r\n     * @param instanceIdentifier instance identifier in case multiple instances are allowed\r\n     * @internal\r\n     */\r\n    _removeServiceInstance(name, instanceIdentifier = _DEFAULT_ENTRY_NAME) {\r\n        this._delegate.container\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            .getProvider(name)\r\n            .clearInstance(instanceIdentifier);\r\n    }\r\n    /**\r\n     * @param component the component being added to this app's container\r\n     * @internal\r\n     */\r\n    _addComponent(component) {\r\n        _addComponent(this._delegate, component);\r\n    }\r\n    _addOrOverwriteComponent(component) {\r\n        _addOrOverwriteComponent(this._delegate, component);\r\n    }\r\n    toJSON() {\r\n        return {\r\n            name: this.name,\r\n            automaticDataCollectionEnabled: this.automaticDataCollectionEnabled,\r\n            options: this.options\r\n        };\r\n    }\r\n}\r\n// TODO: investigate why the following needs to be commented out\r\n// Prevent dead-code elimination of these methods w/o invalid property\r\n// copying.\r\n// (FirebaseAppImpl.prototype.name && FirebaseAppImpl.prototype.options) ||\r\n//   FirebaseAppImpl.prototype.delete ||\r\n//   console.log('dc');\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERRORS = {\r\n    [\"no-app\" /* NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\r\n        'call Firebase App.initializeApp()',\r\n    [\"invalid-app-argument\" /* INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\r\n        'Firebase App instance.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('app-compat', 'Firebase', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Because auth can't share code with other components, we attach the utility functions\r\n * in an internal namespace to share code.\r\n * This function return a firebase namespace object without\r\n * any utility functions, so it can be shared between the regular firebaseNamespace and\r\n * the lite version.\r\n */\r\nfunction createFirebaseNamespaceCore(firebaseAppImpl) {\r\n    const apps = {};\r\n    // // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    // const components = new Map<string, Component<any>>();\r\n    // A namespace is a plain JavaScript Object.\r\n    const namespace = {\r\n        // Hack to prevent Babel from modifying the object returned\r\n        // as the firebase namespace.\r\n        // @ts-ignore\r\n        __esModule: true,\r\n        initializeApp: initializeAppCompat,\r\n        // @ts-ignore\r\n        app,\r\n        registerVersion: modularAPIs.registerVersion,\r\n        setLogLevel: modularAPIs.setLogLevel,\r\n        onLog: modularAPIs.onLog,\r\n        // @ts-ignore\r\n        apps: null,\r\n        SDK_VERSION: modularAPIs.SDK_VERSION,\r\n        INTERNAL: {\r\n            registerComponent: registerComponentCompat,\r\n            removeApp,\r\n            useAsService,\r\n            modularAPIs\r\n        }\r\n    };\r\n    // Inject a circular default export to allow Babel users who were previously\r\n    // using:\r\n    //\r\n    //   import firebase from 'firebase';\r\n    //   which becomes: var firebase = require('firebase').default;\r\n    //\r\n    // instead of\r\n    //\r\n    //   import * as firebase from 'firebase';\r\n    //   which becomes: var firebase = require('firebase');\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    namespace['default'] = namespace;\r\n    // firebase.apps is a read-only getter.\r\n    Object.defineProperty(namespace, 'apps', {\r\n        get: getApps\r\n    });\r\n    /**\r\n     * Called by App.delete() - but before any services associated with the App\r\n     * are deleted.\r\n     */\r\n    function removeApp(name) {\r\n        delete apps[name];\r\n    }\r\n    /**\r\n     * Get the App object for a given name (or DEFAULT).\r\n     */\r\n    function app(name) {\r\n        name = name || modularAPIs._DEFAULT_ENTRY_NAME;\r\n        if (!contains(apps, name)) {\r\n            throw ERROR_FACTORY.create(\"no-app\" /* NO_APP */, { appName: name });\r\n        }\r\n        return apps[name];\r\n    }\r\n    // @ts-ignore\r\n    app['App'] = firebaseAppImpl;\r\n    /**\r\n     * Create a new App instance (name must be unique).\r\n     *\r\n     * This function is idempotent. It can be called more than once and return the same instance using the same options and config.\r\n     */\r\n    function initializeAppCompat(options, rawConfig = {}) {\r\n        const app = modularAPIs.initializeApp(options, rawConfig);\r\n        if (contains(apps, app.name)) {\r\n            return apps[app.name];\r\n        }\r\n        const appCompat = new firebaseAppImpl(app, namespace);\r\n        apps[app.name] = appCompat;\r\n        return appCompat;\r\n    }\r\n    /*\r\n     * Return an array of all the non-deleted FirebaseApps.\r\n     */\r\n    function getApps() {\r\n        // Make a copy so caller cannot mutate the apps list.\r\n        return Object.keys(apps).map(name => apps[name]);\r\n    }\r\n    function registerComponentCompat(component) {\r\n        const componentName = component.name;\r\n        const componentNameWithoutCompat = componentName.replace('-compat', '');\r\n        if (modularAPIs._registerComponent(component) &&\r\n            component.type === \"PUBLIC\" /* PUBLIC */) {\r\n            // create service namespace for public components\r\n            // The Service namespace is an accessor function ...\r\n            const serviceNamespace = (appArg = app()) => {\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                if (typeof appArg[componentNameWithoutCompat] !== 'function') {\r\n                    // Invalid argument.\r\n                    // This happens in the following case: firebase.storage('gs:/')\r\n                    throw ERROR_FACTORY.create(\"invalid-app-argument\" /* INVALID_APP_ARGUMENT */, {\r\n                        appName: componentName\r\n                    });\r\n                }\r\n                // Forward service instance lookup to the FirebaseApp.\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                return appArg[componentNameWithoutCompat]();\r\n            };\r\n            // ... and a container for service-level properties.\r\n            if (component.serviceProps !== undefined) {\r\n                deepExtend(serviceNamespace, component.serviceProps);\r\n            }\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            namespace[componentNameWithoutCompat] = serviceNamespace;\r\n            // Patch the FirebaseAppImpl prototype\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            firebaseAppImpl.prototype[componentNameWithoutCompat] =\r\n                // TODO: The eslint disable can be removed and the 'ignoreRestArgs'\r\n                // option added to the no-explicit-any rule when ESlint releases it.\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                function (...args) {\r\n                    const serviceFxn = this._getService.bind(this, componentName);\r\n                    return serviceFxn.apply(this, component.multipleInstances ? args : []);\r\n                };\r\n        }\r\n        return component.type === \"PUBLIC\" /* PUBLIC */\r\n            ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                namespace[componentNameWithoutCompat]\r\n            : null;\r\n    }\r\n    // Map the requested service to a registered service name\r\n    // (used to map auth to serverAuth service when needed).\r\n    function useAsService(app, name) {\r\n        if (name === 'serverAuth') {\r\n            return null;\r\n        }\r\n        const useService = name;\r\n        return useService;\r\n    }\r\n    return namespace;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Return a firebase namespace object.\r\n *\r\n * In production, this will be called exactly once and the result\r\n * assigned to the 'firebase' global.  It may be called multiple times\r\n * in unit tests.\r\n */\r\nfunction createFirebaseNamespace() {\r\n    const namespace = createFirebaseNamespaceCore(FirebaseAppImpl);\r\n    namespace.INTERNAL = Object.assign(Object.assign({}, namespace.INTERNAL), { createFirebaseNamespace,\r\n        extendNamespace,\r\n        createSubscribe,\r\n        ErrorFactory,\r\n        deepExtend });\r\n    /**\r\n     * Patch the top-level firebase namespace with additional properties.\r\n     *\r\n     * firebase.INTERNAL.extendNamespace()\r\n     */\r\n    function extendNamespace(props) {\r\n        deepExtend(namespace, props);\r\n    }\r\n    return namespace;\r\n}\r\nconst firebase$1 = createFirebaseNamespace();\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logger = new Logger('@firebase/app-compat');\n\nconst name = \"@firebase/app-compat\";\nconst version = \"0.1.31\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerCoreComponents(variant) {\r\n    // Register `app` package.\r\n    registerVersion(name, version, variant);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Firebase Lite detection\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nif (isBrowser() && self.firebase !== undefined) {\r\n    logger.warn(`\n    Warning: Firebase is already defined in the global scope. Please make sure\n    Firebase library is only loaded once.\n  `);\r\n    // eslint-disable-next-line\r\n    const sdkVersion = self.firebase.SDK_VERSION;\r\n    if (sdkVersion && sdkVersion.indexOf('LITE') >= 0) {\r\n        logger.warn(`\n    Warning: You are trying to load Firebase while using Firebase Performance standalone script.\n    You should load Firebase Performance with this instance of Firebase to avoid loading duplicate code.\n    `);\r\n    }\r\n}\r\nconst firebase = firebase$1;\r\nregisterCoreComponents();\n\nexport { firebase as default };\n//# sourceMappingURL=index.esm2017.js.map\n","import firebase from '@firebase/app-compat';\nexport { default } from '@firebase/app-compat';\n\nvar name = \"firebase\";\nvar version = \"9.9.2\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfirebase.registerVersion(name, version, 'app-compat');\n//# sourceMappingURL=index.esm.js.map\n","import { ErrorFactory, deepEqual, isBrowserExtension, isMobileCordova, isReactNative, FirebaseError, querystring, getModularInstance, base64Decode, getUA, isIE, createSubscribe, querystringDecode, extractQuerystring, isEmpty } from '@firebase/util';\nimport { SDK_VERSION, _getProvider, _registerComponent, registerVersion, getApp } from '@firebase/app';\nimport { __rest } from 'tslib';\nimport { Logger, LogLevel } from '@firebase/logger';\nimport { Component } from '@firebase/component';\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An enum of factors that may be used for multifactor authentication.\r\n *\r\n * @public\r\n */\r\nconst FactorId = {\r\n    /** Phone as second factor */\r\n    PHONE: 'phone'\r\n};\r\n/**\r\n * Enumeration of supported providers.\r\n *\r\n * @public\r\n */\r\nconst ProviderId = {\r\n    /** Facebook provider ID */\r\n    FACEBOOK: 'facebook.com',\r\n    /** GitHub provider ID */\r\n    GITHUB: 'github.com',\r\n    /** Google provider ID */\r\n    GOOGLE: 'google.com',\r\n    /** Password provider */\r\n    PASSWORD: 'password',\r\n    /** Phone provider */\r\n    PHONE: 'phone',\r\n    /** Twitter provider ID */\r\n    TWITTER: 'twitter.com'\r\n};\r\n/**\r\n * Enumeration of supported sign-in methods.\r\n *\r\n * @public\r\n */\r\nconst SignInMethod = {\r\n    /** Email link sign in method */\r\n    EMAIL_LINK: 'emailLink',\r\n    /** Email/password sign in method */\r\n    EMAIL_PASSWORD: 'password',\r\n    /** Facebook sign in method */\r\n    FACEBOOK: 'facebook.com',\r\n    /** GitHub sign in method */\r\n    GITHUB: 'github.com',\r\n    /** Google sign in method */\r\n    GOOGLE: 'google.com',\r\n    /** Phone sign in method */\r\n    PHONE: 'phone',\r\n    /** Twitter sign in method */\r\n    TWITTER: 'twitter.com'\r\n};\r\n/**\r\n * Enumeration of supported operation types.\r\n *\r\n * @public\r\n */\r\nconst OperationType = {\r\n    /** Operation involving linking an additional provider to an already signed-in user. */\r\n    LINK: 'link',\r\n    /** Operation involving using a provider to reauthenticate an already signed-in user. */\r\n    REAUTHENTICATE: 'reauthenticate',\r\n    /** Operation involving signing in a user. */\r\n    SIGN_IN: 'signIn'\r\n};\r\n/**\r\n * An enumeration of the possible email action types.\r\n *\r\n * @public\r\n */\r\nconst ActionCodeOperation = {\r\n    /** The email link sign-in action. */\r\n    EMAIL_SIGNIN: 'EMAIL_SIGNIN',\r\n    /** The password reset action. */\r\n    PASSWORD_RESET: 'PASSWORD_RESET',\r\n    /** The email revocation action. */\r\n    RECOVER_EMAIL: 'RECOVER_EMAIL',\r\n    /** The revert second factor addition email action. */\r\n    REVERT_SECOND_FACTOR_ADDITION: 'REVERT_SECOND_FACTOR_ADDITION',\r\n    /** The revert second factor addition email action. */\r\n    VERIFY_AND_CHANGE_EMAIL: 'VERIFY_AND_CHANGE_EMAIL',\r\n    /** The email verification action. */\r\n    VERIFY_EMAIL: 'VERIFY_EMAIL'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _debugErrorMap() {\r\n    return {\r\n        [\"admin-restricted-operation\" /* ADMIN_ONLY_OPERATION */]: 'This operation is restricted to administrators only.',\r\n        [\"argument-error\" /* ARGUMENT_ERROR */]: '',\r\n        [\"app-not-authorized\" /* APP_NOT_AUTHORIZED */]: \"This app, identified by the domain where it's hosted, is not \" +\r\n            'authorized to use Firebase Authentication with the provided API key. ' +\r\n            'Review your key configuration in the Google API console.',\r\n        [\"app-not-installed\" /* APP_NOT_INSTALLED */]: 'The requested mobile application corresponding to the identifier (' +\r\n            'Android package name or iOS bundle ID) provided is not installed on ' +\r\n            'this device.',\r\n        [\"captcha-check-failed\" /* CAPTCHA_CHECK_FAILED */]: 'The reCAPTCHA response token provided is either invalid, expired, ' +\r\n            'already used or the domain associated with it does not match the list ' +\r\n            'of whitelisted domains.',\r\n        [\"code-expired\" /* CODE_EXPIRED */]: 'The SMS code has expired. Please re-send the verification code to try ' +\r\n            'again.',\r\n        [\"cordova-not-ready\" /* CORDOVA_NOT_READY */]: 'Cordova framework is not ready.',\r\n        [\"cors-unsupported\" /* CORS_UNSUPPORTED */]: 'This browser is not supported.',\r\n        [\"credential-already-in-use\" /* CREDENTIAL_ALREADY_IN_USE */]: 'This credential is already associated with a different user account.',\r\n        [\"custom-token-mismatch\" /* CREDENTIAL_MISMATCH */]: 'The custom token corresponds to a different audience.',\r\n        [\"requires-recent-login\" /* CREDENTIAL_TOO_OLD_LOGIN_AGAIN */]: 'This operation is sensitive and requires recent authentication. Log in ' +\r\n            'again before retrying this request.',\r\n        [\"dependent-sdk-initialized-before-auth\" /* DEPENDENT_SDK_INIT_BEFORE_AUTH */]: 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\r\n            'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\r\n            'starting any other Firebase SDK.',\r\n        [\"dynamic-link-not-activated\" /* DYNAMIC_LINK_NOT_ACTIVATED */]: 'Please activate Dynamic Links in the Firebase Console and agree to the terms and ' +\r\n            'conditions.',\r\n        [\"email-change-needs-verification\" /* EMAIL_CHANGE_NEEDS_VERIFICATION */]: 'Multi-factor users must always have a verified email.',\r\n        [\"email-already-in-use\" /* EMAIL_EXISTS */]: 'The email address is already in use by another account.',\r\n        [\"emulator-config-failed\" /* EMULATOR_CONFIG_FAILED */]: 'Auth instance has already been used to make a network call. Auth can ' +\r\n            'no longer be configured to use the emulator. Try calling ' +\r\n            '\"connectAuthEmulator()\" sooner.',\r\n        [\"expired-action-code\" /* EXPIRED_OOB_CODE */]: 'The action code has expired.',\r\n        [\"cancelled-popup-request\" /* EXPIRED_POPUP_REQUEST */]: 'This operation has been cancelled due to another conflicting popup being opened.',\r\n        [\"internal-error\" /* INTERNAL_ERROR */]: 'An internal AuthError has occurred.',\r\n        [\"invalid-app-credential\" /* INVALID_APP_CREDENTIAL */]: 'The phone verification request contains an invalid application verifier.' +\r\n            ' The reCAPTCHA token response is either invalid or expired.',\r\n        [\"invalid-app-id\" /* INVALID_APP_ID */]: 'The mobile app identifier is not registed for the current project.',\r\n        [\"invalid-user-token\" /* INVALID_AUTH */]: \"This user's credential isn't valid for this project. This can happen \" +\r\n            \"if the user's token has been tampered with, or if the user isn't for \" +\r\n            'the project associated with this API key.',\r\n        [\"invalid-auth-event\" /* INVALID_AUTH_EVENT */]: 'An internal AuthError has occurred.',\r\n        [\"invalid-verification-code\" /* INVALID_CODE */]: 'The SMS verification code used to create the phone auth credential is ' +\r\n            'invalid. Please resend the verification code sms and be sure to use the ' +\r\n            'verification code provided by the user.',\r\n        [\"invalid-continue-uri\" /* INVALID_CONTINUE_URI */]: 'The continue URL provided in the request is invalid.',\r\n        [\"invalid-cordova-configuration\" /* INVALID_CORDOVA_CONFIGURATION */]: 'The following Cordova plugins must be installed to enable OAuth sign-in: ' +\r\n            'cordova-plugin-buildinfo, cordova-universal-links-plugin, ' +\r\n            'cordova-plugin-browsertab, cordova-plugin-inappbrowser and ' +\r\n            'cordova-plugin-customurlscheme.',\r\n        [\"invalid-custom-token\" /* INVALID_CUSTOM_TOKEN */]: 'The custom token format is incorrect. Please check the documentation.',\r\n        [\"invalid-dynamic-link-domain\" /* INVALID_DYNAMIC_LINK_DOMAIN */]: 'The provided dynamic link domain is not configured or authorized for the current project.',\r\n        [\"invalid-email\" /* INVALID_EMAIL */]: 'The email address is badly formatted.',\r\n        [\"invalid-emulator-scheme\" /* INVALID_EMULATOR_SCHEME */]: 'Emulator URL must start with a valid scheme (http:// or https://).',\r\n        [\"invalid-api-key\" /* INVALID_API_KEY */]: 'Your API key is invalid, please check you have copied it correctly.',\r\n        [\"invalid-cert-hash\" /* INVALID_CERT_HASH */]: 'The SHA-1 certificate hash provided is invalid.',\r\n        [\"invalid-credential\" /* INVALID_IDP_RESPONSE */]: 'The supplied auth credential is malformed or has expired.',\r\n        [\"invalid-message-payload\" /* INVALID_MESSAGE_PAYLOAD */]: 'The email template corresponding to this action contains invalid characters in its message. ' +\r\n            'Please fix by going to the Auth email templates section in the Firebase Console.',\r\n        [\"invalid-multi-factor-session\" /* INVALID_MFA_SESSION */]: 'The request does not contain a valid proof of first factor successful sign-in.',\r\n        [\"invalid-oauth-provider\" /* INVALID_OAUTH_PROVIDER */]: 'EmailAuthProvider is not supported for this operation. This operation ' +\r\n            'only supports OAuth providers.',\r\n        [\"invalid-oauth-client-id\" /* INVALID_OAUTH_CLIENT_ID */]: 'The OAuth client ID provided is either invalid or does not match the ' +\r\n            'specified API key.',\r\n        [\"unauthorized-domain\" /* INVALID_ORIGIN */]: 'This domain is not authorized for OAuth operations for your Firebase ' +\r\n            'project. Edit the list of authorized domains from the Firebase console.',\r\n        [\"invalid-action-code\" /* INVALID_OOB_CODE */]: 'The action code is invalid. This can happen if the code is malformed, ' +\r\n            'expired, or has already been used.',\r\n        [\"wrong-password\" /* INVALID_PASSWORD */]: 'The password is invalid or the user does not have a password.',\r\n        [\"invalid-persistence-type\" /* INVALID_PERSISTENCE */]: 'The specified persistence type is invalid. It can only be local, session or none.',\r\n        [\"invalid-phone-number\" /* INVALID_PHONE_NUMBER */]: 'The format of the phone number provided is incorrect. Please enter the ' +\r\n            'phone number in a format that can be parsed into E.164 format. E.164 ' +\r\n            'phone numbers are written in the format [+][country code][subscriber ' +\r\n            'number including area code].',\r\n        [\"invalid-provider-id\" /* INVALID_PROVIDER_ID */]: 'The specified provider ID is invalid.',\r\n        [\"invalid-recipient-email\" /* INVALID_RECIPIENT_EMAIL */]: 'The email corresponding to this action failed to send as the provided ' +\r\n            'recipient email address is invalid.',\r\n        [\"invalid-sender\" /* INVALID_SENDER */]: 'The email template corresponding to this action contains an invalid sender email or name. ' +\r\n            'Please fix by going to the Auth email templates section in the Firebase Console.',\r\n        [\"invalid-verification-id\" /* INVALID_SESSION_INFO */]: 'The verification ID used to create the phone auth credential is invalid.',\r\n        [\"invalid-tenant-id\" /* INVALID_TENANT_ID */]: \"The Auth instance's tenant ID is invalid.\",\r\n        [\"login-blocked\" /* LOGIN_BLOCKED */]: \"Login blocked by user-provided method: {$originalMessage}\",\r\n        [\"missing-android-pkg-name\" /* MISSING_ANDROID_PACKAGE_NAME */]: 'An Android Package Name must be provided if the Android App is required to be installed.',\r\n        [\"auth-domain-config-required\" /* MISSING_AUTH_DOMAIN */]: 'Be sure to include authDomain when calling firebase.initializeApp(), ' +\r\n            'by following the instructions in the Firebase console.',\r\n        [\"missing-app-credential\" /* MISSING_APP_CREDENTIAL */]: 'The phone verification request is missing an application verifier ' +\r\n            'assertion. A reCAPTCHA response token needs to be provided.',\r\n        [\"missing-verification-code\" /* MISSING_CODE */]: 'The phone auth credential was created with an empty SMS verification code.',\r\n        [\"missing-continue-uri\" /* MISSING_CONTINUE_URI */]: 'A continue URL must be provided in the request.',\r\n        [\"missing-iframe-start\" /* MISSING_IFRAME_START */]: 'An internal AuthError has occurred.',\r\n        [\"missing-ios-bundle-id\" /* MISSING_IOS_BUNDLE_ID */]: 'An iOS Bundle ID must be provided if an App Store ID is provided.',\r\n        [\"missing-or-invalid-nonce\" /* MISSING_OR_INVALID_NONCE */]: 'The request does not contain a valid nonce. This can occur if the ' +\r\n            'SHA-256 hash of the provided raw nonce does not match the hashed nonce ' +\r\n            'in the ID token payload.',\r\n        [\"missing-multi-factor-info\" /* MISSING_MFA_INFO */]: 'No second factor identifier is provided.',\r\n        [\"missing-multi-factor-session\" /* MISSING_MFA_SESSION */]: 'The request is missing proof of first factor successful sign-in.',\r\n        [\"missing-phone-number\" /* MISSING_PHONE_NUMBER */]: 'To send verification codes, provide a phone number for the recipient.',\r\n        [\"missing-verification-id\" /* MISSING_SESSION_INFO */]: 'The phone auth credential was created with an empty verification ID.',\r\n        [\"app-deleted\" /* MODULE_DESTROYED */]: 'This instance of FirebaseApp has been deleted.',\r\n        [\"multi-factor-info-not-found\" /* MFA_INFO_NOT_FOUND */]: 'The user does not have a second factor matching the identifier provided.',\r\n        [\"multi-factor-auth-required\" /* MFA_REQUIRED */]: 'Proof of ownership of a second factor is required to complete sign-in.',\r\n        [\"account-exists-with-different-credential\" /* NEED_CONFIRMATION */]: 'An account already exists with the same email address but different ' +\r\n            'sign-in credentials. Sign in using a provider associated with this ' +\r\n            'email address.',\r\n        [\"network-request-failed\" /* NETWORK_REQUEST_FAILED */]: 'A network AuthError (such as timeout, interrupted connection or unreachable host) has occurred.',\r\n        [\"no-auth-event\" /* NO_AUTH_EVENT */]: 'An internal AuthError has occurred.',\r\n        [\"no-such-provider\" /* NO_SUCH_PROVIDER */]: 'User was not linked to an account with the given provider.',\r\n        [\"null-user\" /* NULL_USER */]: 'A null user object was provided as the argument for an operation which ' +\r\n            'requires a non-null user object.',\r\n        [\"operation-not-allowed\" /* OPERATION_NOT_ALLOWED */]: 'The given sign-in provider is disabled for this Firebase project. ' +\r\n            'Enable it in the Firebase console, under the sign-in method tab of the ' +\r\n            'Auth section.',\r\n        [\"operation-not-supported-in-this-environment\" /* OPERATION_NOT_SUPPORTED */]: 'This operation is not supported in the environment this application is ' +\r\n            'running on. \"location.protocol\" must be http, https or chrome-extension' +\r\n            ' and web storage must be enabled.',\r\n        [\"popup-blocked\" /* POPUP_BLOCKED */]: 'Unable to establish a connection with the popup. It may have been blocked by the browser.',\r\n        [\"popup-closed-by-user\" /* POPUP_CLOSED_BY_USER */]: 'The popup has been closed by the user before finalizing the operation.',\r\n        [\"provider-already-linked\" /* PROVIDER_ALREADY_LINKED */]: 'User can only be linked to one identity for the given provider.',\r\n        [\"quota-exceeded\" /* QUOTA_EXCEEDED */]: \"The project's quota for this operation has been exceeded.\",\r\n        [\"redirect-cancelled-by-user\" /* REDIRECT_CANCELLED_BY_USER */]: 'The redirect operation has been cancelled by the user before finalizing.',\r\n        [\"redirect-operation-pending\" /* REDIRECT_OPERATION_PENDING */]: 'A redirect sign-in operation is already pending.',\r\n        [\"rejected-credential\" /* REJECTED_CREDENTIAL */]: 'The request contains malformed or mismatching credentials.',\r\n        [\"second-factor-already-in-use\" /* SECOND_FACTOR_ALREADY_ENROLLED */]: 'The second factor is already enrolled on this account.',\r\n        [\"maximum-second-factor-count-exceeded\" /* SECOND_FACTOR_LIMIT_EXCEEDED */]: 'The maximum allowed number of second factors on a user has been exceeded.',\r\n        [\"tenant-id-mismatch\" /* TENANT_ID_MISMATCH */]: \"The provided tenant ID does not match the Auth instance's tenant ID\",\r\n        [\"timeout\" /* TIMEOUT */]: 'The operation has timed out.',\r\n        [\"user-token-expired\" /* TOKEN_EXPIRED */]: \"The user's credential is no longer valid. The user must sign in again.\",\r\n        [\"too-many-requests\" /* TOO_MANY_ATTEMPTS_TRY_LATER */]: 'We have blocked all requests from this device due to unusual activity. ' +\r\n            'Try again later.',\r\n        [\"unauthorized-continue-uri\" /* UNAUTHORIZED_DOMAIN */]: 'The domain of the continue URL is not whitelisted.  Please whitelist ' +\r\n            'the domain in the Firebase console.',\r\n        [\"unsupported-first-factor\" /* UNSUPPORTED_FIRST_FACTOR */]: 'Enrolling a second factor or signing in with a multi-factor account requires sign-in with a supported first factor.',\r\n        [\"unsupported-persistence-type\" /* UNSUPPORTED_PERSISTENCE */]: 'The current environment does not support the specified persistence type.',\r\n        [\"unsupported-tenant-operation\" /* UNSUPPORTED_TENANT_OPERATION */]: 'This operation is not supported in a multi-tenant context.',\r\n        [\"unverified-email\" /* UNVERIFIED_EMAIL */]: 'The operation requires a verified email.',\r\n        [\"user-cancelled\" /* USER_CANCELLED */]: 'The user did not grant your application the permissions it requested.',\r\n        [\"user-not-found\" /* USER_DELETED */]: 'There is no user record corresponding to this identifier. The user may ' +\r\n            'have been deleted.',\r\n        [\"user-disabled\" /* USER_DISABLED */]: 'The user account has been disabled by an administrator.',\r\n        [\"user-mismatch\" /* USER_MISMATCH */]: 'The supplied credentials do not correspond to the previously signed in user.',\r\n        [\"user-signed-out\" /* USER_SIGNED_OUT */]: '',\r\n        [\"weak-password\" /* WEAK_PASSWORD */]: 'The password must be 6 characters long or more.',\r\n        [\"web-storage-unsupported\" /* WEB_STORAGE_UNSUPPORTED */]: 'This browser is not supported or 3rd party cookies and data may be disabled.',\r\n        [\"already-initialized\" /* ALREADY_INITIALIZED */]: 'initializeAuth() has already been called with ' +\r\n            'different options. To avoid this error, call initializeAuth() with the ' +\r\n            'same options as when it was originally called, or call getAuth() to return the' +\r\n            ' already initialized instance.'\r\n    };\r\n}\r\nfunction _prodErrorMap() {\r\n    // We will include this one message in the prod error map since by the very\r\n    // nature of this error, developers will never be able to see the message\r\n    // using the debugErrorMap (which is installed during auth initialization).\r\n    return {\r\n        [\"dependent-sdk-initialized-before-auth\" /* DEPENDENT_SDK_INIT_BEFORE_AUTH */]: 'Another Firebase SDK was initialized and is trying to use Auth before Auth is ' +\r\n            'initialized. Please be sure to call `initializeAuth` or `getAuth` before ' +\r\n            'starting any other Firebase SDK.'\r\n    };\r\n}\r\n/**\r\n * A verbose error map with detailed descriptions for most error codes.\r\n *\r\n * See discussion at {@link AuthErrorMap}\r\n *\r\n * @public\r\n */\r\nconst debugErrorMap = _debugErrorMap;\r\n/**\r\n * A minimal error map with all verbose error messages stripped.\r\n *\r\n * See discussion at {@link AuthErrorMap}\r\n *\r\n * @public\r\n */\r\nconst prodErrorMap = _prodErrorMap;\r\nconst _DEFAULT_AUTH_ERROR_FACTORY = new ErrorFactory('auth', 'Firebase', _prodErrorMap());\r\n/**\r\n * A map of potential `Auth` error codes, for easier comparison with errors\r\n * thrown by the SDK.\r\n *\r\n * @remarks\r\n * Note that you can't tree-shake individual keys\r\n * in the map, so by using the map you might substantially increase your\r\n * bundle size.\r\n *\r\n * @public\r\n */\r\nconst AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY = {\r\n    ADMIN_ONLY_OPERATION: 'auth/admin-restricted-operation',\r\n    ARGUMENT_ERROR: 'auth/argument-error',\r\n    APP_NOT_AUTHORIZED: 'auth/app-not-authorized',\r\n    APP_NOT_INSTALLED: 'auth/app-not-installed',\r\n    CAPTCHA_CHECK_FAILED: 'auth/captcha-check-failed',\r\n    CODE_EXPIRED: 'auth/code-expired',\r\n    CORDOVA_NOT_READY: 'auth/cordova-not-ready',\r\n    CORS_UNSUPPORTED: 'auth/cors-unsupported',\r\n    CREDENTIAL_ALREADY_IN_USE: 'auth/credential-already-in-use',\r\n    CREDENTIAL_MISMATCH: 'auth/custom-token-mismatch',\r\n    CREDENTIAL_TOO_OLD_LOGIN_AGAIN: 'auth/requires-recent-login',\r\n    DEPENDENT_SDK_INIT_BEFORE_AUTH: 'auth/dependent-sdk-initialized-before-auth',\r\n    DYNAMIC_LINK_NOT_ACTIVATED: 'auth/dynamic-link-not-activated',\r\n    EMAIL_CHANGE_NEEDS_VERIFICATION: 'auth/email-change-needs-verification',\r\n    EMAIL_EXISTS: 'auth/email-already-in-use',\r\n    EMULATOR_CONFIG_FAILED: 'auth/emulator-config-failed',\r\n    EXPIRED_OOB_CODE: 'auth/expired-action-code',\r\n    EXPIRED_POPUP_REQUEST: 'auth/cancelled-popup-request',\r\n    INTERNAL_ERROR: 'auth/internal-error',\r\n    INVALID_API_KEY: 'auth/invalid-api-key',\r\n    INVALID_APP_CREDENTIAL: 'auth/invalid-app-credential',\r\n    INVALID_APP_ID: 'auth/invalid-app-id',\r\n    INVALID_AUTH: 'auth/invalid-user-token',\r\n    INVALID_AUTH_EVENT: 'auth/invalid-auth-event',\r\n    INVALID_CERT_HASH: 'auth/invalid-cert-hash',\r\n    INVALID_CODE: 'auth/invalid-verification-code',\r\n    INVALID_CONTINUE_URI: 'auth/invalid-continue-uri',\r\n    INVALID_CORDOVA_CONFIGURATION: 'auth/invalid-cordova-configuration',\r\n    INVALID_CUSTOM_TOKEN: 'auth/invalid-custom-token',\r\n    INVALID_DYNAMIC_LINK_DOMAIN: 'auth/invalid-dynamic-link-domain',\r\n    INVALID_EMAIL: 'auth/invalid-email',\r\n    INVALID_EMULATOR_SCHEME: 'auth/invalid-emulator-scheme',\r\n    INVALID_IDP_RESPONSE: 'auth/invalid-credential',\r\n    INVALID_MESSAGE_PAYLOAD: 'auth/invalid-message-payload',\r\n    INVALID_MFA_SESSION: 'auth/invalid-multi-factor-session',\r\n    INVALID_OAUTH_CLIENT_ID: 'auth/invalid-oauth-client-id',\r\n    INVALID_OAUTH_PROVIDER: 'auth/invalid-oauth-provider',\r\n    INVALID_OOB_CODE: 'auth/invalid-action-code',\r\n    INVALID_ORIGIN: 'auth/unauthorized-domain',\r\n    INVALID_PASSWORD: 'auth/wrong-password',\r\n    INVALID_PERSISTENCE: 'auth/invalid-persistence-type',\r\n    INVALID_PHONE_NUMBER: 'auth/invalid-phone-number',\r\n    INVALID_PROVIDER_ID: 'auth/invalid-provider-id',\r\n    INVALID_RECIPIENT_EMAIL: 'auth/invalid-recipient-email',\r\n    INVALID_SENDER: 'auth/invalid-sender',\r\n    INVALID_SESSION_INFO: 'auth/invalid-verification-id',\r\n    INVALID_TENANT_ID: 'auth/invalid-tenant-id',\r\n    MFA_INFO_NOT_FOUND: 'auth/multi-factor-info-not-found',\r\n    MFA_REQUIRED: 'auth/multi-factor-auth-required',\r\n    MISSING_ANDROID_PACKAGE_NAME: 'auth/missing-android-pkg-name',\r\n    MISSING_APP_CREDENTIAL: 'auth/missing-app-credential',\r\n    MISSING_AUTH_DOMAIN: 'auth/auth-domain-config-required',\r\n    MISSING_CODE: 'auth/missing-verification-code',\r\n    MISSING_CONTINUE_URI: 'auth/missing-continue-uri',\r\n    MISSING_IFRAME_START: 'auth/missing-iframe-start',\r\n    MISSING_IOS_BUNDLE_ID: 'auth/missing-ios-bundle-id',\r\n    MISSING_OR_INVALID_NONCE: 'auth/missing-or-invalid-nonce',\r\n    MISSING_MFA_INFO: 'auth/missing-multi-factor-info',\r\n    MISSING_MFA_SESSION: 'auth/missing-multi-factor-session',\r\n    MISSING_PHONE_NUMBER: 'auth/missing-phone-number',\r\n    MISSING_SESSION_INFO: 'auth/missing-verification-id',\r\n    MODULE_DESTROYED: 'auth/app-deleted',\r\n    NEED_CONFIRMATION: 'auth/account-exists-with-different-credential',\r\n    NETWORK_REQUEST_FAILED: 'auth/network-request-failed',\r\n    NULL_USER: 'auth/null-user',\r\n    NO_AUTH_EVENT: 'auth/no-auth-event',\r\n    NO_SUCH_PROVIDER: 'auth/no-such-provider',\r\n    OPERATION_NOT_ALLOWED: 'auth/operation-not-allowed',\r\n    OPERATION_NOT_SUPPORTED: 'auth/operation-not-supported-in-this-environment',\r\n    POPUP_BLOCKED: 'auth/popup-blocked',\r\n    POPUP_CLOSED_BY_USER: 'auth/popup-closed-by-user',\r\n    PROVIDER_ALREADY_LINKED: 'auth/provider-already-linked',\r\n    QUOTA_EXCEEDED: 'auth/quota-exceeded',\r\n    REDIRECT_CANCELLED_BY_USER: 'auth/redirect-cancelled-by-user',\r\n    REDIRECT_OPERATION_PENDING: 'auth/redirect-operation-pending',\r\n    REJECTED_CREDENTIAL: 'auth/rejected-credential',\r\n    SECOND_FACTOR_ALREADY_ENROLLED: 'auth/second-factor-already-in-use',\r\n    SECOND_FACTOR_LIMIT_EXCEEDED: 'auth/maximum-second-factor-count-exceeded',\r\n    TENANT_ID_MISMATCH: 'auth/tenant-id-mismatch',\r\n    TIMEOUT: 'auth/timeout',\r\n    TOKEN_EXPIRED: 'auth/user-token-expired',\r\n    TOO_MANY_ATTEMPTS_TRY_LATER: 'auth/too-many-requests',\r\n    UNAUTHORIZED_DOMAIN: 'auth/unauthorized-continue-uri',\r\n    UNSUPPORTED_FIRST_FACTOR: 'auth/unsupported-first-factor',\r\n    UNSUPPORTED_PERSISTENCE: 'auth/unsupported-persistence-type',\r\n    UNSUPPORTED_TENANT_OPERATION: 'auth/unsupported-tenant-operation',\r\n    UNVERIFIED_EMAIL: 'auth/unverified-email',\r\n    USER_CANCELLED: 'auth/user-cancelled',\r\n    USER_DELETED: 'auth/user-not-found',\r\n    USER_DISABLED: 'auth/user-disabled',\r\n    USER_MISMATCH: 'auth/user-mismatch',\r\n    USER_SIGNED_OUT: 'auth/user-signed-out',\r\n    WEAK_PASSWORD: 'auth/weak-password',\r\n    WEB_STORAGE_UNSUPPORTED: 'auth/web-storage-unsupported',\r\n    ALREADY_INITIALIZED: 'auth/already-initialized'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/auth');\r\nfunction _logError(msg, ...args) {\r\n    if (logClient.logLevel <= LogLevel.ERROR) {\r\n        logClient.error(`Auth (${SDK_VERSION}): ${msg}`, ...args);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _fail(authOrCode, ...rest) {\r\n    throw createErrorInternal(authOrCode, ...rest);\r\n}\r\nfunction _createError(authOrCode, ...rest) {\r\n    return createErrorInternal(authOrCode, ...rest);\r\n}\r\nfunction _errorWithCustomMessage(auth, code, message) {\r\n    const errorMap = Object.assign(Object.assign({}, prodErrorMap()), { [code]: message });\r\n    const factory = new ErrorFactory('auth', 'Firebase', errorMap);\r\n    return factory.create(code, {\r\n        appName: auth.name,\r\n    });\r\n}\r\nfunction _assertInstanceOf(auth, object, instance) {\r\n    const constructorInstance = instance;\r\n    if (!(object instanceof constructorInstance)) {\r\n        if (constructorInstance.name !== object.constructor.name) {\r\n            _fail(auth, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        }\r\n        throw _errorWithCustomMessage(auth, \"argument-error\" /* ARGUMENT_ERROR */, `Type of ${object.constructor.name} does not match expected instance.` +\r\n            `Did you pass a reference from a different Auth SDK?`);\r\n    }\r\n}\r\nfunction createErrorInternal(authOrCode, ...rest) {\r\n    if (typeof authOrCode !== 'string') {\r\n        const code = rest[0];\r\n        const fullParams = [...rest.slice(1)];\r\n        if (fullParams[0]) {\r\n            fullParams[0].appName = authOrCode.name;\r\n        }\r\n        return authOrCode._errorFactory.create(code, ...fullParams);\r\n    }\r\n    return _DEFAULT_AUTH_ERROR_FACTORY.create(authOrCode, ...rest);\r\n}\r\nfunction _assert(assertion, authOrCode, ...rest) {\r\n    if (!assertion) {\r\n        throw createErrorInternal(authOrCode, ...rest);\r\n    }\r\n}\r\n/**\r\n * Unconditionally fails, throwing an internal error with the given message.\r\n *\r\n * @param failure type of failure encountered\r\n * @throws Error\r\n */\r\nfunction debugFail(failure) {\r\n    // Log the failure in addition to throw an exception, just in case the\r\n    // exception is swallowed.\r\n    const message = `INTERNAL ASSERTION FAILED: ` + failure;\r\n    _logError(message);\r\n    // NOTE: We don't use FirebaseError here because these are internal failures\r\n    // that cannot be handled by the user. (Also it would create a circular\r\n    // dependency between the error and assert modules which doesn't work.)\r\n    throw new Error(message);\r\n}\r\n/**\r\n * Fails if the given assertion condition is false, throwing an Error with the\r\n * given message if it did.\r\n *\r\n * @param assertion\r\n * @param message\r\n */\r\nfunction debugAssert(assertion, message) {\r\n    if (!assertion) {\r\n        debugFail(message);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst instanceCache = new Map();\r\nfunction _getInstance(cls) {\r\n    debugAssert(cls instanceof Function, 'Expected a class definition');\r\n    let instance = instanceCache.get(cls);\r\n    if (instance) {\r\n        debugAssert(instance instanceof cls, 'Instance stored in cache mismatched with class');\r\n        return instance;\r\n    }\r\n    instance = new cls();\r\n    instanceCache.set(cls, instance);\r\n    return instance;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Initializes an {@link Auth} instance with fine-grained control over\r\n * {@link Dependencies}.\r\n *\r\n * @remarks\r\n *\r\n * This function allows more control over the {@link Auth} instance than\r\n * {@link getAuth}. `getAuth` uses platform-specific defaults to supply\r\n * the {@link Dependencies}. In general, `getAuth` is the easiest way to\r\n * initialize Auth and works for most use cases. Use `initializeAuth` if you\r\n * need control over which persistence layer is used, or to minimize bundle\r\n * size if you're not using either `signInWithPopup` or `signInWithRedirect`.\r\n *\r\n * For example, if your app only uses anonymous accounts and you only want\r\n * accounts saved for the current session, initialize `Auth` with:\r\n *\r\n * ```js\r\n * const auth = initializeAuth(app, {\r\n *   persistence: browserSessionPersistence,\r\n *   popupRedirectResolver: undefined,\r\n * });\r\n * ```\r\n *\r\n * @public\r\n */\r\nfunction initializeAuth(app, deps) {\r\n    const provider = _getProvider(app, 'auth');\r\n    if (provider.isInitialized()) {\r\n        const auth = provider.getImmediate();\r\n        const initialOptions = provider.getOptions();\r\n        if (deepEqual(initialOptions, deps !== null && deps !== void 0 ? deps : {})) {\r\n            return auth;\r\n        }\r\n        else {\r\n            _fail(auth, \"already-initialized\" /* ALREADY_INITIALIZED */);\r\n        }\r\n    }\r\n    const auth = provider.initialize({ options: deps });\r\n    return auth;\r\n}\r\nfunction _initializeAuthInstance(auth, deps) {\r\n    const persistence = (deps === null || deps === void 0 ? void 0 : deps.persistence) || [];\r\n    const hierarchy = (Array.isArray(persistence) ? persistence : [persistence]).map(_getInstance);\r\n    if (deps === null || deps === void 0 ? void 0 : deps.errorMap) {\r\n        auth._updateErrorMap(deps.errorMap);\r\n    }\r\n    // This promise is intended to float; auth initialization happens in the\r\n    // background, meanwhile the auth object may be used by the app.\r\n    // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n    auth._initializeWithPersistence(hierarchy, deps === null || deps === void 0 ? void 0 : deps.popupRedirectResolver);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _getCurrentUrl() {\r\n    var _a;\r\n    return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.href)) || '';\r\n}\r\nfunction _isHttpOrHttps() {\r\n    return _getCurrentScheme() === 'http:' || _getCurrentScheme() === 'https:';\r\n}\r\nfunction _getCurrentScheme() {\r\n    var _a;\r\n    return (typeof self !== 'undefined' && ((_a = self.location) === null || _a === void 0 ? void 0 : _a.protocol)) || null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Determine whether the browser is working online\r\n */\r\nfunction _isOnline() {\r\n    if (typeof navigator !== 'undefined' &&\r\n        navigator &&\r\n        'onLine' in navigator &&\r\n        typeof navigator.onLine === 'boolean' &&\r\n        // Apply only for traditional web apps and Chrome extensions.\r\n        // This is especially true for Cordova apps which have unreliable\r\n        // navigator.onLine behavior unless cordova-plugin-network-information is\r\n        // installed which overwrites the native navigator.onLine value and\r\n        // defines navigator.connection.\r\n        (_isHttpOrHttps() || isBrowserExtension() || 'connection' in navigator)) {\r\n        return navigator.onLine;\r\n    }\r\n    // If we can't determine the state, assume it is online.\r\n    return true;\r\n}\r\nfunction _getUserLanguage() {\r\n    if (typeof navigator === 'undefined') {\r\n        return null;\r\n    }\r\n    const navigatorLanguage = navigator;\r\n    return (\r\n    // Most reliable, but only supported in Chrome/Firefox.\r\n    (navigatorLanguage.languages && navigatorLanguage.languages[0]) ||\r\n        // Supported in most browsers, but returns the language of the browser\r\n        // UI, not the language set in browser settings.\r\n        navigatorLanguage.language ||\r\n        // Couldn't determine language.\r\n        null);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A structure to help pick between a range of long and short delay durations\r\n * depending on the current environment. In general, the long delay is used for\r\n * mobile environments whereas short delays are used for desktop environments.\r\n */\r\nclass Delay {\r\n    constructor(shortDelay, longDelay) {\r\n        this.shortDelay = shortDelay;\r\n        this.longDelay = longDelay;\r\n        // Internal error when improperly initialized.\r\n        debugAssert(longDelay > shortDelay, 'Short delay should be less than long delay!');\r\n        this.isMobile = isMobileCordova() || isReactNative();\r\n    }\r\n    get() {\r\n        if (!_isOnline()) {\r\n            // Pick the shorter timeout.\r\n            return Math.min(5000 /* OFFLINE */, this.shortDelay);\r\n        }\r\n        // If running in a mobile environment, return the long delay, otherwise\r\n        // return the short delay.\r\n        // This could be improved in the future to dynamically change based on other\r\n        // variables instead of just reading the current environment.\r\n        return this.isMobile ? this.longDelay : this.shortDelay;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _emulatorUrl(config, path) {\r\n    debugAssert(config.emulator, 'Emulator should always be set here');\r\n    const { url } = config.emulator;\r\n    if (!path) {\r\n        return url;\r\n    }\r\n    return `${url}${path.startsWith('/') ? path.slice(1) : path}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FetchProvider {\r\n    static initialize(fetchImpl, headersImpl, responseImpl) {\r\n        this.fetchImpl = fetchImpl;\r\n        if (headersImpl) {\r\n            this.headersImpl = headersImpl;\r\n        }\r\n        if (responseImpl) {\r\n            this.responseImpl = responseImpl;\r\n        }\r\n    }\r\n    static fetch() {\r\n        if (this.fetchImpl) {\r\n            return this.fetchImpl;\r\n        }\r\n        if (typeof self !== 'undefined' && 'fetch' in self) {\r\n            return self.fetch;\r\n        }\r\n        debugFail('Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n    }\r\n    static headers() {\r\n        if (this.headersImpl) {\r\n            return this.headersImpl;\r\n        }\r\n        if (typeof self !== 'undefined' && 'Headers' in self) {\r\n            return self.Headers;\r\n        }\r\n        debugFail('Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n    }\r\n    static response() {\r\n        if (this.responseImpl) {\r\n            return this.responseImpl;\r\n        }\r\n        if (typeof self !== 'undefined' && 'Response' in self) {\r\n            return self.Response;\r\n        }\r\n        debugFail('Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill');\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Map from errors returned by the server to errors to developer visible errors\r\n */\r\nconst SERVER_ERROR_MAP = {\r\n    // Custom token errors.\r\n    [\"CREDENTIAL_MISMATCH\" /* CREDENTIAL_MISMATCH */]: \"custom-token-mismatch\" /* CREDENTIAL_MISMATCH */,\r\n    // This can only happen if the SDK sends a bad request.\r\n    [\"MISSING_CUSTOM_TOKEN\" /* MISSING_CUSTOM_TOKEN */]: \"internal-error\" /* INTERNAL_ERROR */,\r\n    // Create Auth URI errors.\r\n    [\"INVALID_IDENTIFIER\" /* INVALID_IDENTIFIER */]: \"invalid-email\" /* INVALID_EMAIL */,\r\n    // This can only happen if the SDK sends a bad request.\r\n    [\"MISSING_CONTINUE_URI\" /* MISSING_CONTINUE_URI */]: \"internal-error\" /* INTERNAL_ERROR */,\r\n    // Sign in with email and password errors (some apply to sign up too).\r\n    [\"INVALID_PASSWORD\" /* INVALID_PASSWORD */]: \"wrong-password\" /* INVALID_PASSWORD */,\r\n    // This can only happen if the SDK sends a bad request.\r\n    [\"MISSING_PASSWORD\" /* MISSING_PASSWORD */]: \"internal-error\" /* INTERNAL_ERROR */,\r\n    // Sign up with email and password errors.\r\n    [\"EMAIL_EXISTS\" /* EMAIL_EXISTS */]: \"email-already-in-use\" /* EMAIL_EXISTS */,\r\n    [\"PASSWORD_LOGIN_DISABLED\" /* PASSWORD_LOGIN_DISABLED */]: \"operation-not-allowed\" /* OPERATION_NOT_ALLOWED */,\r\n    // Verify assertion for sign in with credential errors:\r\n    [\"INVALID_IDP_RESPONSE\" /* INVALID_IDP_RESPONSE */]: \"invalid-credential\" /* INVALID_IDP_RESPONSE */,\r\n    [\"INVALID_PENDING_TOKEN\" /* INVALID_PENDING_TOKEN */]: \"invalid-credential\" /* INVALID_IDP_RESPONSE */,\r\n    [\"FEDERATED_USER_ID_ALREADY_LINKED\" /* FEDERATED_USER_ID_ALREADY_LINKED */]: \"credential-already-in-use\" /* CREDENTIAL_ALREADY_IN_USE */,\r\n    // This can only happen if the SDK sends a bad request.\r\n    [\"MISSING_REQ_TYPE\" /* MISSING_REQ_TYPE */]: \"internal-error\" /* INTERNAL_ERROR */,\r\n    // Send Password reset email errors:\r\n    [\"EMAIL_NOT_FOUND\" /* EMAIL_NOT_FOUND */]: \"user-not-found\" /* USER_DELETED */,\r\n    [\"RESET_PASSWORD_EXCEED_LIMIT\" /* RESET_PASSWORD_EXCEED_LIMIT */]: \"too-many-requests\" /* TOO_MANY_ATTEMPTS_TRY_LATER */,\r\n    [\"EXPIRED_OOB_CODE\" /* EXPIRED_OOB_CODE */]: \"expired-action-code\" /* EXPIRED_OOB_CODE */,\r\n    [\"INVALID_OOB_CODE\" /* INVALID_OOB_CODE */]: \"invalid-action-code\" /* INVALID_OOB_CODE */,\r\n    // This can only happen if the SDK sends a bad request.\r\n    [\"MISSING_OOB_CODE\" /* MISSING_OOB_CODE */]: \"internal-error\" /* INTERNAL_ERROR */,\r\n    // Operations that require ID token in request:\r\n    [\"CREDENTIAL_TOO_OLD_LOGIN_AGAIN\" /* CREDENTIAL_TOO_OLD_LOGIN_AGAIN */]: \"requires-recent-login\" /* CREDENTIAL_TOO_OLD_LOGIN_AGAIN */,\r\n    [\"INVALID_ID_TOKEN\" /* INVALID_ID_TOKEN */]: \"invalid-user-token\" /* INVALID_AUTH */,\r\n    [\"TOKEN_EXPIRED\" /* TOKEN_EXPIRED */]: \"user-token-expired\" /* TOKEN_EXPIRED */,\r\n    [\"USER_NOT_FOUND\" /* USER_NOT_FOUND */]: \"user-token-expired\" /* TOKEN_EXPIRED */,\r\n    // Other errors.\r\n    [\"TOO_MANY_ATTEMPTS_TRY_LATER\" /* TOO_MANY_ATTEMPTS_TRY_LATER */]: \"too-many-requests\" /* TOO_MANY_ATTEMPTS_TRY_LATER */,\r\n    // Phone Auth related errors.\r\n    [\"INVALID_CODE\" /* INVALID_CODE */]: \"invalid-verification-code\" /* INVALID_CODE */,\r\n    [\"INVALID_SESSION_INFO\" /* INVALID_SESSION_INFO */]: \"invalid-verification-id\" /* INVALID_SESSION_INFO */,\r\n    [\"INVALID_TEMPORARY_PROOF\" /* INVALID_TEMPORARY_PROOF */]: \"invalid-credential\" /* INVALID_IDP_RESPONSE */,\r\n    [\"MISSING_SESSION_INFO\" /* MISSING_SESSION_INFO */]: \"missing-verification-id\" /* MISSING_SESSION_INFO */,\r\n    [\"SESSION_EXPIRED\" /* SESSION_EXPIRED */]: \"code-expired\" /* CODE_EXPIRED */,\r\n    // Other action code errors when additional settings passed.\r\n    // MISSING_CONTINUE_URI is getting mapped to INTERNAL_ERROR above.\r\n    // This is OK as this error will be caught by client side validation.\r\n    [\"MISSING_ANDROID_PACKAGE_NAME\" /* MISSING_ANDROID_PACKAGE_NAME */]: \"missing-android-pkg-name\" /* MISSING_ANDROID_PACKAGE_NAME */,\r\n    [\"UNAUTHORIZED_DOMAIN\" /* UNAUTHORIZED_DOMAIN */]: \"unauthorized-continue-uri\" /* UNAUTHORIZED_DOMAIN */,\r\n    // getProjectConfig errors when clientId is passed.\r\n    [\"INVALID_OAUTH_CLIENT_ID\" /* INVALID_OAUTH_CLIENT_ID */]: \"invalid-oauth-client-id\" /* INVALID_OAUTH_CLIENT_ID */,\r\n    // User actions (sign-up or deletion) disabled errors.\r\n    [\"ADMIN_ONLY_OPERATION\" /* ADMIN_ONLY_OPERATION */]: \"admin-restricted-operation\" /* ADMIN_ONLY_OPERATION */,\r\n    // Multi factor related errors.\r\n    [\"INVALID_MFA_PENDING_CREDENTIAL\" /* INVALID_MFA_PENDING_CREDENTIAL */]: \"invalid-multi-factor-session\" /* INVALID_MFA_SESSION */,\r\n    [\"MFA_ENROLLMENT_NOT_FOUND\" /* MFA_ENROLLMENT_NOT_FOUND */]: \"multi-factor-info-not-found\" /* MFA_INFO_NOT_FOUND */,\r\n    [\"MISSING_MFA_ENROLLMENT_ID\" /* MISSING_MFA_ENROLLMENT_ID */]: \"missing-multi-factor-info\" /* MISSING_MFA_INFO */,\r\n    [\"MISSING_MFA_PENDING_CREDENTIAL\" /* MISSING_MFA_PENDING_CREDENTIAL */]: \"missing-multi-factor-session\" /* MISSING_MFA_SESSION */,\r\n    [\"SECOND_FACTOR_EXISTS\" /* SECOND_FACTOR_EXISTS */]: \"second-factor-already-in-use\" /* SECOND_FACTOR_ALREADY_ENROLLED */,\r\n    [\"SECOND_FACTOR_LIMIT_EXCEEDED\" /* SECOND_FACTOR_LIMIT_EXCEEDED */]: \"maximum-second-factor-count-exceeded\" /* SECOND_FACTOR_LIMIT_EXCEEDED */,\r\n    // Blocking functions related errors.\r\n    [\"BLOCKING_FUNCTION_ERROR_RESPONSE\" /* BLOCKING_FUNCTION_ERROR_RESPONSE */]: \"internal-error\" /* INTERNAL_ERROR */,\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_API_TIMEOUT_MS = new Delay(30000, 60000);\r\nfunction _addTidIfNecessary(auth, request) {\r\n    if (auth.tenantId && !request.tenantId) {\r\n        return Object.assign(Object.assign({}, request), { tenantId: auth.tenantId });\r\n    }\r\n    return request;\r\n}\r\nasync function _performApiRequest(auth, method, path, request, customErrorMap = {}) {\r\n    return _performFetchWithErrorHandling(auth, customErrorMap, async () => {\r\n        let body = {};\r\n        let params = {};\r\n        if (request) {\r\n            if (method === \"GET\" /* GET */) {\r\n                params = request;\r\n            }\r\n            else {\r\n                body = {\r\n                    body: JSON.stringify(request)\r\n                };\r\n            }\r\n        }\r\n        const query = querystring(Object.assign({ key: auth.config.apiKey }, params)).slice(1);\r\n        const headers = await auth._getAdditionalHeaders();\r\n        headers[\"Content-Type\" /* CONTENT_TYPE */] = 'application/json';\r\n        if (auth.languageCode) {\r\n            headers[\"X-Firebase-Locale\" /* X_FIREBASE_LOCALE */] = auth.languageCode;\r\n        }\r\n        return FetchProvider.fetch()(_getFinalTarget(auth, auth.config.apiHost, path, query), Object.assign({ method,\r\n            headers, referrerPolicy: 'no-referrer' }, body));\r\n    });\r\n}\r\nasync function _performFetchWithErrorHandling(auth, customErrorMap, fetchFn) {\r\n    auth._canInitEmulator = false;\r\n    const errorMap = Object.assign(Object.assign({}, SERVER_ERROR_MAP), customErrorMap);\r\n    try {\r\n        const networkTimeout = new NetworkTimeout(auth);\r\n        const response = await Promise.race([\r\n            fetchFn(),\r\n            networkTimeout.promise\r\n        ]);\r\n        // If we've reached this point, the fetch succeeded and the networkTimeout\r\n        // didn't throw; clear the network timeout delay so that Node won't hang\r\n        networkTimeout.clearNetworkTimeout();\r\n        const json = await response.json();\r\n        if ('needConfirmation' in json) {\r\n            throw _makeTaggedError(auth, \"account-exists-with-different-credential\" /* NEED_CONFIRMATION */, json);\r\n        }\r\n        if (response.ok && !('errorMessage' in json)) {\r\n            return json;\r\n        }\r\n        else {\r\n            const errorMessage = response.ok ? json.errorMessage : json.error.message;\r\n            const [serverErrorCode, serverErrorMessage] = errorMessage.split(' : ');\r\n            if (serverErrorCode === \"FEDERATED_USER_ID_ALREADY_LINKED\" /* FEDERATED_USER_ID_ALREADY_LINKED */) {\r\n                throw _makeTaggedError(auth, \"credential-already-in-use\" /* CREDENTIAL_ALREADY_IN_USE */, json);\r\n            }\r\n            else if (serverErrorCode === \"EMAIL_EXISTS\" /* EMAIL_EXISTS */) {\r\n                throw _makeTaggedError(auth, \"email-already-in-use\" /* EMAIL_EXISTS */, json);\r\n            }\r\n            else if (serverErrorCode === \"USER_DISABLED\" /* USER_DISABLED */) {\r\n                throw _makeTaggedError(auth, \"user-disabled\" /* USER_DISABLED */, json);\r\n            }\r\n            const authError = errorMap[serverErrorCode] ||\r\n                serverErrorCode\r\n                    .toLowerCase()\r\n                    .replace(/[_\\s]+/g, '-');\r\n            if (serverErrorMessage) {\r\n                throw _errorWithCustomMessage(auth, authError, serverErrorMessage);\r\n            }\r\n            else {\r\n                _fail(auth, authError);\r\n            }\r\n        }\r\n    }\r\n    catch (e) {\r\n        if (e instanceof FirebaseError) {\r\n            throw e;\r\n        }\r\n        _fail(auth, \"network-request-failed\" /* NETWORK_REQUEST_FAILED */);\r\n    }\r\n}\r\nasync function _performSignInRequest(auth, method, path, request, customErrorMap = {}) {\r\n    const serverResponse = (await _performApiRequest(auth, method, path, request, customErrorMap));\r\n    if ('mfaPendingCredential' in serverResponse) {\r\n        _fail(auth, \"multi-factor-auth-required\" /* MFA_REQUIRED */, {\r\n            _serverResponse: serverResponse\r\n        });\r\n    }\r\n    return serverResponse;\r\n}\r\nfunction _getFinalTarget(auth, host, path, query) {\r\n    const base = `${host}${path}?${query}`;\r\n    if (!auth.config.emulator) {\r\n        return `${auth.config.apiScheme}://${base}`;\r\n    }\r\n    return _emulatorUrl(auth.config, base);\r\n}\r\nclass NetworkTimeout {\r\n    constructor(auth) {\r\n        this.auth = auth;\r\n        // Node timers and browser timers are fundamentally incompatible, but we\r\n        // don't care about the value here\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        this.timer = null;\r\n        this.promise = new Promise((_, reject) => {\r\n            this.timer = setTimeout(() => {\r\n                return reject(_createError(this.auth, \"network-request-failed\" /* NETWORK_REQUEST_FAILED */));\r\n            }, DEFAULT_API_TIMEOUT_MS.get());\r\n        });\r\n    }\r\n    clearNetworkTimeout() {\r\n        clearTimeout(this.timer);\r\n    }\r\n}\r\nfunction _makeTaggedError(auth, code, response) {\r\n    const errorParams = {\r\n        appName: auth.name\r\n    };\r\n    if (response.email) {\r\n        errorParams.email = response.email;\r\n    }\r\n    if (response.phoneNumber) {\r\n        errorParams.phoneNumber = response.phoneNumber;\r\n    }\r\n    const error = _createError(auth, code, errorParams);\r\n    // We know customData is defined on error because errorParams is defined\r\n    error.customData._tokenResponse = response;\r\n    return error;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function deleteAccount(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v1/accounts:delete\" /* DELETE_ACCOUNT */, request);\r\n}\r\nasync function deleteLinkedAccounts(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v1/accounts:update\" /* SET_ACCOUNT_INFO */, request);\r\n}\r\nasync function getAccountInfo(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v1/accounts:lookup\" /* GET_ACCOUNT_INFO */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction utcTimestampToDateString(utcTimestamp) {\r\n    if (!utcTimestamp) {\r\n        return undefined;\r\n    }\r\n    try {\r\n        // Convert to date object.\r\n        const date = new Date(Number(utcTimestamp));\r\n        // Test date is valid.\r\n        if (!isNaN(date.getTime())) {\r\n            // Convert to UTC date string.\r\n            return date.toUTCString();\r\n        }\r\n    }\r\n    catch (e) {\r\n        // Do nothing. undefined will be returned.\r\n    }\r\n    return undefined;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a JSON Web Token (JWT) used to identify the user to a Firebase service.\r\n *\r\n * @remarks\r\n * Returns the current token if it has not expired or if it will not expire in the next five\r\n * minutes. Otherwise, this will refresh the token and return a new one.\r\n *\r\n * @param user - The user.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nfunction getIdToken(user, forceRefresh = false) {\r\n    return getModularInstance(user).getIdToken(forceRefresh);\r\n}\r\n/**\r\n * Returns a deserialized JSON Web Token (JWT) used to identitfy the user to a Firebase service.\r\n *\r\n * @remarks\r\n * Returns the current token if it has not expired or if it will not expire in the next five\r\n * minutes. Otherwise, this will refresh the token and return a new one.\r\n *\r\n * @param user - The user.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nasync function getIdTokenResult(user, forceRefresh = false) {\r\n    const userInternal = getModularInstance(user);\r\n    const token = await userInternal.getIdToken(forceRefresh);\r\n    const claims = _parseToken(token);\r\n    _assert(claims && claims.exp && claims.auth_time && claims.iat, userInternal.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n    const firebase = typeof claims.firebase === 'object' ? claims.firebase : undefined;\r\n    const signInProvider = firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_provider'];\r\n    return {\r\n        claims,\r\n        token,\r\n        authTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.auth_time)),\r\n        issuedAtTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.iat)),\r\n        expirationTime: utcTimestampToDateString(secondsStringToMilliseconds(claims.exp)),\r\n        signInProvider: signInProvider || null,\r\n        signInSecondFactor: (firebase === null || firebase === void 0 ? void 0 : firebase['sign_in_second_factor']) || null\r\n    };\r\n}\r\nfunction secondsStringToMilliseconds(seconds) {\r\n    return Number(seconds) * 1000;\r\n}\r\nfunction _parseToken(token) {\r\n    var _a;\r\n    const [algorithm, payload, signature] = token.split('.');\r\n    if (algorithm === undefined ||\r\n        payload === undefined ||\r\n        signature === undefined) {\r\n        _logError('JWT malformed, contained fewer than 3 sections');\r\n        return null;\r\n    }\r\n    try {\r\n        const decoded = base64Decode(payload);\r\n        if (!decoded) {\r\n            _logError('Failed to decode base64 JWT payload');\r\n            return null;\r\n        }\r\n        return JSON.parse(decoded);\r\n    }\r\n    catch (e) {\r\n        _logError('Caught error parsing JWT payload as JSON', (_a = e) === null || _a === void 0 ? void 0 : _a.toString());\r\n        return null;\r\n    }\r\n}\r\n/**\r\n * Extract expiresIn TTL from a token by subtracting the expiration from the issuance.\r\n */\r\nfunction _tokenExpiresIn(token) {\r\n    const parsedToken = _parseToken(token);\r\n    _assert(parsedToken, \"internal-error\" /* INTERNAL_ERROR */);\r\n    _assert(typeof parsedToken.exp !== 'undefined', \"internal-error\" /* INTERNAL_ERROR */);\r\n    _assert(typeof parsedToken.iat !== 'undefined', \"internal-error\" /* INTERNAL_ERROR */);\r\n    return Number(parsedToken.exp) - Number(parsedToken.iat);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _logoutIfInvalidated(user, promise, bypassAuthState = false) {\r\n    if (bypassAuthState) {\r\n        return promise;\r\n    }\r\n    try {\r\n        return await promise;\r\n    }\r\n    catch (e) {\r\n        if (e instanceof FirebaseError && isUserInvalidated(e)) {\r\n            if (user.auth.currentUser === user) {\r\n                await user.auth.signOut();\r\n            }\r\n        }\r\n        throw e;\r\n    }\r\n}\r\nfunction isUserInvalidated({ code }) {\r\n    return (code === `auth/${\"user-disabled\" /* USER_DISABLED */}` ||\r\n        code === `auth/${\"user-token-expired\" /* TOKEN_EXPIRED */}`);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ProactiveRefresh {\r\n    constructor(user) {\r\n        this.user = user;\r\n        this.isRunning = false;\r\n        // Node timers and browser timers return fundamentally different types.\r\n        // We don't actually care what the value is but TS won't accept unknown and\r\n        // we can't cast properly in both environments.\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        this.timerId = null;\r\n        this.errorBackoff = 30000 /* RETRY_BACKOFF_MIN */;\r\n    }\r\n    _start() {\r\n        if (this.isRunning) {\r\n            return;\r\n        }\r\n        this.isRunning = true;\r\n        this.schedule();\r\n    }\r\n    _stop() {\r\n        if (!this.isRunning) {\r\n            return;\r\n        }\r\n        this.isRunning = false;\r\n        if (this.timerId !== null) {\r\n            clearTimeout(this.timerId);\r\n        }\r\n    }\r\n    getInterval(wasError) {\r\n        var _a;\r\n        if (wasError) {\r\n            const interval = this.errorBackoff;\r\n            this.errorBackoff = Math.min(this.errorBackoff * 2, 960000 /* RETRY_BACKOFF_MAX */);\r\n            return interval;\r\n        }\r\n        else {\r\n            // Reset the error backoff\r\n            this.errorBackoff = 30000 /* RETRY_BACKOFF_MIN */;\r\n            const expTime = (_a = this.user.stsTokenManager.expirationTime) !== null && _a !== void 0 ? _a : 0;\r\n            const interval = expTime - Date.now() - 300000 /* OFFSET */;\r\n            return Math.max(0, interval);\r\n        }\r\n    }\r\n    schedule(wasError = false) {\r\n        if (!this.isRunning) {\r\n            // Just in case...\r\n            return;\r\n        }\r\n        const interval = this.getInterval(wasError);\r\n        this.timerId = setTimeout(async () => {\r\n            await this.iteration();\r\n        }, interval);\r\n    }\r\n    async iteration() {\r\n        var _a;\r\n        try {\r\n            await this.user.getIdToken(true);\r\n        }\r\n        catch (e) {\r\n            // Only retry on network errors\r\n            if (((_a = e) === null || _a === void 0 ? void 0 : _a.code) === `auth/${\"network-request-failed\" /* NETWORK_REQUEST_FAILED */}`) {\r\n                this.schedule(/* wasError */ true);\r\n            }\r\n            return;\r\n        }\r\n        this.schedule();\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass UserMetadata {\r\n    constructor(createdAt, lastLoginAt) {\r\n        this.createdAt = createdAt;\r\n        this.lastLoginAt = lastLoginAt;\r\n        this._initializeTime();\r\n    }\r\n    _initializeTime() {\r\n        this.lastSignInTime = utcTimestampToDateString(this.lastLoginAt);\r\n        this.creationTime = utcTimestampToDateString(this.createdAt);\r\n    }\r\n    _copy(metadata) {\r\n        this.createdAt = metadata.createdAt;\r\n        this.lastLoginAt = metadata.lastLoginAt;\r\n        this._initializeTime();\r\n    }\r\n    toJSON() {\r\n        return {\r\n            createdAt: this.createdAt,\r\n            lastLoginAt: this.lastLoginAt\r\n        };\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _reloadWithoutSaving(user) {\r\n    var _a;\r\n    const auth = user.auth;\r\n    const idToken = await user.getIdToken();\r\n    const response = await _logoutIfInvalidated(user, getAccountInfo(auth, { idToken }));\r\n    _assert(response === null || response === void 0 ? void 0 : response.users.length, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n    const coreAccount = response.users[0];\r\n    user._notifyReloadListener(coreAccount);\r\n    const newProviderData = ((_a = coreAccount.providerUserInfo) === null || _a === void 0 ? void 0 : _a.length)\r\n        ? extractProviderData(coreAccount.providerUserInfo)\r\n        : [];\r\n    const providerData = mergeProviderData(user.providerData, newProviderData);\r\n    // Preserves the non-nonymous status of the stored user, even if no more\r\n    // credentials (federated or email/password) are linked to the user. If\r\n    // the user was previously anonymous, then use provider data to update.\r\n    // On the other hand, if it was not anonymous before, it should never be\r\n    // considered anonymous now.\r\n    const oldIsAnonymous = user.isAnonymous;\r\n    const newIsAnonymous = !(user.email && coreAccount.passwordHash) && !(providerData === null || providerData === void 0 ? void 0 : providerData.length);\r\n    const isAnonymous = !oldIsAnonymous ? false : newIsAnonymous;\r\n    const updates = {\r\n        uid: coreAccount.localId,\r\n        displayName: coreAccount.displayName || null,\r\n        photoURL: coreAccount.photoUrl || null,\r\n        email: coreAccount.email || null,\r\n        emailVerified: coreAccount.emailVerified || false,\r\n        phoneNumber: coreAccount.phoneNumber || null,\r\n        tenantId: coreAccount.tenantId || null,\r\n        providerData,\r\n        metadata: new UserMetadata(coreAccount.createdAt, coreAccount.lastLoginAt),\r\n        isAnonymous\r\n    };\r\n    Object.assign(user, updates);\r\n}\r\n/**\r\n * Reloads user account data, if signed in.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nasync function reload(user) {\r\n    const userInternal = getModularInstance(user);\r\n    await _reloadWithoutSaving(userInternal);\r\n    // Even though the current user hasn't changed, update\r\n    // current user will trigger a persistence update w/ the\r\n    // new info.\r\n    await userInternal.auth._persistUserIfCurrent(userInternal);\r\n    userInternal.auth._notifyListenersIfCurrent(userInternal);\r\n}\r\nfunction mergeProviderData(original, newData) {\r\n    const deduped = original.filter(o => !newData.some(n => n.providerId === o.providerId));\r\n    return [...deduped, ...newData];\r\n}\r\nfunction extractProviderData(providers) {\r\n    return providers.map((_a) => {\r\n        var { providerId } = _a, provider = __rest(_a, [\"providerId\"]);\r\n        return {\r\n            providerId,\r\n            uid: provider.rawId || '',\r\n            displayName: provider.displayName || null,\r\n            email: provider.email || null,\r\n            phoneNumber: provider.phoneNumber || null,\r\n            photoURL: provider.photoUrl || null\r\n        };\r\n    });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function requestStsToken(auth, refreshToken) {\r\n    const response = await _performFetchWithErrorHandling(auth, {}, async () => {\r\n        const body = querystring({\r\n            'grant_type': 'refresh_token',\r\n            'refresh_token': refreshToken\r\n        }).slice(1);\r\n        const { tokenApiHost, apiKey } = auth.config;\r\n        const url = _getFinalTarget(auth, tokenApiHost, \"/v1/token\" /* TOKEN */, `key=${apiKey}`);\r\n        const headers = await auth._getAdditionalHeaders();\r\n        headers[\"Content-Type\" /* CONTENT_TYPE */] = 'application/x-www-form-urlencoded';\r\n        return FetchProvider.fetch()(url, {\r\n            method: \"POST\" /* POST */,\r\n            headers,\r\n            body\r\n        });\r\n    });\r\n    // The response comes back in snake_case. Convert to camel:\r\n    return {\r\n        accessToken: response.access_token,\r\n        expiresIn: response.expires_in,\r\n        refreshToken: response.refresh_token\r\n    };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * We need to mark this class as internal explicitly to exclude it in the public typings, because\r\n * it references AuthInternal which has a circular dependency with UserInternal.\r\n *\r\n * @internal\r\n */\r\nclass StsTokenManager {\r\n    constructor() {\r\n        this.refreshToken = null;\r\n        this.accessToken = null;\r\n        this.expirationTime = null;\r\n    }\r\n    get isExpired() {\r\n        return (!this.expirationTime ||\r\n            Date.now() > this.expirationTime - 30000 /* TOKEN_REFRESH */);\r\n    }\r\n    updateFromServerResponse(response) {\r\n        _assert(response.idToken, \"internal-error\" /* INTERNAL_ERROR */);\r\n        _assert(typeof response.idToken !== 'undefined', \"internal-error\" /* INTERNAL_ERROR */);\r\n        _assert(typeof response.refreshToken !== 'undefined', \"internal-error\" /* INTERNAL_ERROR */);\r\n        const expiresIn = 'expiresIn' in response && typeof response.expiresIn !== 'undefined'\r\n            ? Number(response.expiresIn)\r\n            : _tokenExpiresIn(response.idToken);\r\n        this.updateTokensAndExpiration(response.idToken, response.refreshToken, expiresIn);\r\n    }\r\n    async getToken(auth, forceRefresh = false) {\r\n        _assert(!this.accessToken || this.refreshToken, auth, \"user-token-expired\" /* TOKEN_EXPIRED */);\r\n        if (!forceRefresh && this.accessToken && !this.isExpired) {\r\n            return this.accessToken;\r\n        }\r\n        if (this.refreshToken) {\r\n            await this.refresh(auth, this.refreshToken);\r\n            return this.accessToken;\r\n        }\r\n        return null;\r\n    }\r\n    clearRefreshToken() {\r\n        this.refreshToken = null;\r\n    }\r\n    async refresh(auth, oldToken) {\r\n        const { accessToken, refreshToken, expiresIn } = await requestStsToken(auth, oldToken);\r\n        this.updateTokensAndExpiration(accessToken, refreshToken, Number(expiresIn));\r\n    }\r\n    updateTokensAndExpiration(accessToken, refreshToken, expiresInSec) {\r\n        this.refreshToken = refreshToken || null;\r\n        this.accessToken = accessToken || null;\r\n        this.expirationTime = Date.now() + expiresInSec * 1000;\r\n    }\r\n    static fromJSON(appName, object) {\r\n        const { refreshToken, accessToken, expirationTime } = object;\r\n        const manager = new StsTokenManager();\r\n        if (refreshToken) {\r\n            _assert(typeof refreshToken === 'string', \"internal-error\" /* INTERNAL_ERROR */, {\r\n                appName\r\n            });\r\n            manager.refreshToken = refreshToken;\r\n        }\r\n        if (accessToken) {\r\n            _assert(typeof accessToken === 'string', \"internal-error\" /* INTERNAL_ERROR */, {\r\n                appName\r\n            });\r\n            manager.accessToken = accessToken;\r\n        }\r\n        if (expirationTime) {\r\n            _assert(typeof expirationTime === 'number', \"internal-error\" /* INTERNAL_ERROR */, {\r\n                appName\r\n            });\r\n            manager.expirationTime = expirationTime;\r\n        }\r\n        return manager;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            refreshToken: this.refreshToken,\r\n            accessToken: this.accessToken,\r\n            expirationTime: this.expirationTime\r\n        };\r\n    }\r\n    _assign(stsTokenManager) {\r\n        this.accessToken = stsTokenManager.accessToken;\r\n        this.refreshToken = stsTokenManager.refreshToken;\r\n        this.expirationTime = stsTokenManager.expirationTime;\r\n    }\r\n    _clone() {\r\n        return Object.assign(new StsTokenManager(), this.toJSON());\r\n    }\r\n    _performRefresh() {\r\n        return debugFail('not implemented');\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction assertStringOrUndefined(assertion, appName) {\r\n    _assert(typeof assertion === 'string' || typeof assertion === 'undefined', \"internal-error\" /* INTERNAL_ERROR */, { appName });\r\n}\r\nclass UserImpl {\r\n    constructor(_a) {\r\n        var { uid, auth, stsTokenManager } = _a, opt = __rest(_a, [\"uid\", \"auth\", \"stsTokenManager\"]);\r\n        // For the user object, provider is always Firebase.\r\n        this.providerId = \"firebase\" /* FIREBASE */;\r\n        this.proactiveRefresh = new ProactiveRefresh(this);\r\n        this.reloadUserInfo = null;\r\n        this.reloadListener = null;\r\n        this.uid = uid;\r\n        this.auth = auth;\r\n        this.stsTokenManager = stsTokenManager;\r\n        this.accessToken = stsTokenManager.accessToken;\r\n        this.displayName = opt.displayName || null;\r\n        this.email = opt.email || null;\r\n        this.emailVerified = opt.emailVerified || false;\r\n        this.phoneNumber = opt.phoneNumber || null;\r\n        this.photoURL = opt.photoURL || null;\r\n        this.isAnonymous = opt.isAnonymous || false;\r\n        this.tenantId = opt.tenantId || null;\r\n        this.providerData = opt.providerData ? [...opt.providerData] : [];\r\n        this.metadata = new UserMetadata(opt.createdAt || undefined, opt.lastLoginAt || undefined);\r\n    }\r\n    async getIdToken(forceRefresh) {\r\n        const accessToken = await _logoutIfInvalidated(this, this.stsTokenManager.getToken(this.auth, forceRefresh));\r\n        _assert(accessToken, this.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        if (this.accessToken !== accessToken) {\r\n            this.accessToken = accessToken;\r\n            await this.auth._persistUserIfCurrent(this);\r\n            this.auth._notifyListenersIfCurrent(this);\r\n        }\r\n        return accessToken;\r\n    }\r\n    getIdTokenResult(forceRefresh) {\r\n        return getIdTokenResult(this, forceRefresh);\r\n    }\r\n    reload() {\r\n        return reload(this);\r\n    }\r\n    _assign(user) {\r\n        if (this === user) {\r\n            return;\r\n        }\r\n        _assert(this.uid === user.uid, this.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        this.displayName = user.displayName;\r\n        this.photoURL = user.photoURL;\r\n        this.email = user.email;\r\n        this.emailVerified = user.emailVerified;\r\n        this.phoneNumber = user.phoneNumber;\r\n        this.isAnonymous = user.isAnonymous;\r\n        this.tenantId = user.tenantId;\r\n        this.providerData = user.providerData.map(userInfo => (Object.assign({}, userInfo)));\r\n        this.metadata._copy(user.metadata);\r\n        this.stsTokenManager._assign(user.stsTokenManager);\r\n    }\r\n    _clone(auth) {\r\n        return new UserImpl(Object.assign(Object.assign({}, this), { auth, stsTokenManager: this.stsTokenManager._clone() }));\r\n    }\r\n    _onReload(callback) {\r\n        // There should only ever be one listener, and that is a single instance of MultiFactorUser\r\n        _assert(!this.reloadListener, this.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        this.reloadListener = callback;\r\n        if (this.reloadUserInfo) {\r\n            this._notifyReloadListener(this.reloadUserInfo);\r\n            this.reloadUserInfo = null;\r\n        }\r\n    }\r\n    _notifyReloadListener(userInfo) {\r\n        if (this.reloadListener) {\r\n            this.reloadListener(userInfo);\r\n        }\r\n        else {\r\n            // If no listener is subscribed yet, save the result so it's available when they do subscribe\r\n            this.reloadUserInfo = userInfo;\r\n        }\r\n    }\r\n    _startProactiveRefresh() {\r\n        this.proactiveRefresh._start();\r\n    }\r\n    _stopProactiveRefresh() {\r\n        this.proactiveRefresh._stop();\r\n    }\r\n    async _updateTokensIfNecessary(response, reload = false) {\r\n        let tokensRefreshed = false;\r\n        if (response.idToken &&\r\n            response.idToken !== this.stsTokenManager.accessToken) {\r\n            this.stsTokenManager.updateFromServerResponse(response);\r\n            tokensRefreshed = true;\r\n        }\r\n        if (reload) {\r\n            await _reloadWithoutSaving(this);\r\n        }\r\n        await this.auth._persistUserIfCurrent(this);\r\n        if (tokensRefreshed) {\r\n            this.auth._notifyListenersIfCurrent(this);\r\n        }\r\n    }\r\n    async delete() {\r\n        const idToken = await this.getIdToken();\r\n        await _logoutIfInvalidated(this, deleteAccount(this.auth, { idToken }));\r\n        this.stsTokenManager.clearRefreshToken();\r\n        // TODO: Determine if cancellable-promises are necessary to use in this class so that delete()\r\n        //       cancels pending actions...\r\n        return this.auth.signOut();\r\n    }\r\n    toJSON() {\r\n        return Object.assign(Object.assign({ uid: this.uid, email: this.email || undefined, emailVerified: this.emailVerified, displayName: this.displayName || undefined, isAnonymous: this.isAnonymous, photoURL: this.photoURL || undefined, phoneNumber: this.phoneNumber || undefined, tenantId: this.tenantId || undefined, providerData: this.providerData.map(userInfo => (Object.assign({}, userInfo))), stsTokenManager: this.stsTokenManager.toJSON(), \r\n            // Redirect event ID must be maintained in case there is a pending\r\n            // redirect event.\r\n            _redirectEventId: this._redirectEventId }, this.metadata.toJSON()), { \r\n            // Required for compatibility with the legacy SDK (go/firebase-auth-sdk-persistence-parsing):\r\n            apiKey: this.auth.config.apiKey, appName: this.auth.name });\r\n    }\r\n    get refreshToken() {\r\n        return this.stsTokenManager.refreshToken || '';\r\n    }\r\n    static _fromJSON(auth, object) {\r\n        var _a, _b, _c, _d, _e, _f, _g, _h;\r\n        const displayName = (_a = object.displayName) !== null && _a !== void 0 ? _a : undefined;\r\n        const email = (_b = object.email) !== null && _b !== void 0 ? _b : undefined;\r\n        const phoneNumber = (_c = object.phoneNumber) !== null && _c !== void 0 ? _c : undefined;\r\n        const photoURL = (_d = object.photoURL) !== null && _d !== void 0 ? _d : undefined;\r\n        const tenantId = (_e = object.tenantId) !== null && _e !== void 0 ? _e : undefined;\r\n        const _redirectEventId = (_f = object._redirectEventId) !== null && _f !== void 0 ? _f : undefined;\r\n        const createdAt = (_g = object.createdAt) !== null && _g !== void 0 ? _g : undefined;\r\n        const lastLoginAt = (_h = object.lastLoginAt) !== null && _h !== void 0 ? _h : undefined;\r\n        const { uid, emailVerified, isAnonymous, providerData, stsTokenManager: plainObjectTokenManager } = object;\r\n        _assert(uid && plainObjectTokenManager, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        const stsTokenManager = StsTokenManager.fromJSON(this.name, plainObjectTokenManager);\r\n        _assert(typeof uid === 'string', auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        assertStringOrUndefined(displayName, auth.name);\r\n        assertStringOrUndefined(email, auth.name);\r\n        _assert(typeof emailVerified === 'boolean', auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        _assert(typeof isAnonymous === 'boolean', auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        assertStringOrUndefined(phoneNumber, auth.name);\r\n        assertStringOrUndefined(photoURL, auth.name);\r\n        assertStringOrUndefined(tenantId, auth.name);\r\n        assertStringOrUndefined(_redirectEventId, auth.name);\r\n        assertStringOrUndefined(createdAt, auth.name);\r\n        assertStringOrUndefined(lastLoginAt, auth.name);\r\n        const user = new UserImpl({\r\n            uid,\r\n            auth,\r\n            email,\r\n            emailVerified,\r\n            displayName,\r\n            isAnonymous,\r\n            photoURL,\r\n            phoneNumber,\r\n            tenantId,\r\n            stsTokenManager,\r\n            createdAt,\r\n            lastLoginAt\r\n        });\r\n        if (providerData && Array.isArray(providerData)) {\r\n            user.providerData = providerData.map(userInfo => (Object.assign({}, userInfo)));\r\n        }\r\n        if (_redirectEventId) {\r\n            user._redirectEventId = _redirectEventId;\r\n        }\r\n        return user;\r\n    }\r\n    /**\r\n     * Initialize a User from an idToken server response\r\n     * @param auth\r\n     * @param idTokenResponse\r\n     */\r\n    static async _fromIdTokenResponse(auth, idTokenResponse, isAnonymous = false) {\r\n        const stsTokenManager = new StsTokenManager();\r\n        stsTokenManager.updateFromServerResponse(idTokenResponse);\r\n        // Initialize the Firebase Auth user.\r\n        const user = new UserImpl({\r\n            uid: idTokenResponse.localId,\r\n            auth,\r\n            stsTokenManager,\r\n            isAnonymous\r\n        });\r\n        // Updates the user info and data and resolves with a user instance.\r\n        await _reloadWithoutSaving(user);\r\n        return user;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass InMemoryPersistence {\r\n    constructor() {\r\n        this.type = \"NONE\" /* NONE */;\r\n        this.storage = {};\r\n    }\r\n    async _isAvailable() {\r\n        return true;\r\n    }\r\n    async _set(key, value) {\r\n        this.storage[key] = value;\r\n    }\r\n    async _get(key) {\r\n        const value = this.storage[key];\r\n        return value === undefined ? null : value;\r\n    }\r\n    async _remove(key) {\r\n        delete this.storage[key];\r\n    }\r\n    _addListener(_key, _listener) {\r\n        // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\r\n        return;\r\n    }\r\n    _removeListener(_key, _listener) {\r\n        // Listeners are not supported for in-memory storage since it cannot be shared across windows/workers\r\n        return;\r\n    }\r\n}\r\nInMemoryPersistence.type = 'NONE';\r\n/**\r\n * An implementation of {@link Persistence} of type 'NONE'.\r\n *\r\n * @public\r\n */\r\nconst inMemoryPersistence = InMemoryPersistence;\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _persistenceKeyName(key, apiKey, appName) {\r\n    return `${\"firebase\" /* PERSISTENCE */}:${key}:${apiKey}:${appName}`;\r\n}\r\nclass PersistenceUserManager {\r\n    constructor(persistence, auth, userKey) {\r\n        this.persistence = persistence;\r\n        this.auth = auth;\r\n        this.userKey = userKey;\r\n        const { config, name } = this.auth;\r\n        this.fullUserKey = _persistenceKeyName(this.userKey, config.apiKey, name);\r\n        this.fullPersistenceKey = _persistenceKeyName(\"persistence\" /* PERSISTENCE_USER */, config.apiKey, name);\r\n        this.boundEventHandler = auth._onStorageEvent.bind(auth);\r\n        this.persistence._addListener(this.fullUserKey, this.boundEventHandler);\r\n    }\r\n    setCurrentUser(user) {\r\n        return this.persistence._set(this.fullUserKey, user.toJSON());\r\n    }\r\n    async getCurrentUser() {\r\n        const blob = await this.persistence._get(this.fullUserKey);\r\n        return blob ? UserImpl._fromJSON(this.auth, blob) : null;\r\n    }\r\n    removeCurrentUser() {\r\n        return this.persistence._remove(this.fullUserKey);\r\n    }\r\n    savePersistenceForRedirect() {\r\n        return this.persistence._set(this.fullPersistenceKey, this.persistence.type);\r\n    }\r\n    async setPersistence(newPersistence) {\r\n        if (this.persistence === newPersistence) {\r\n            return;\r\n        }\r\n        const currentUser = await this.getCurrentUser();\r\n        await this.removeCurrentUser();\r\n        this.persistence = newPersistence;\r\n        if (currentUser) {\r\n            return this.setCurrentUser(currentUser);\r\n        }\r\n    }\r\n    delete() {\r\n        this.persistence._removeListener(this.fullUserKey, this.boundEventHandler);\r\n    }\r\n    static async create(auth, persistenceHierarchy, userKey = \"authUser\" /* AUTH_USER */) {\r\n        if (!persistenceHierarchy.length) {\r\n            return new PersistenceUserManager(_getInstance(inMemoryPersistence), auth, userKey);\r\n        }\r\n        // Eliminate any persistences that are not available\r\n        const availablePersistences = (await Promise.all(persistenceHierarchy.map(async (persistence) => {\r\n            if (await persistence._isAvailable()) {\r\n                return persistence;\r\n            }\r\n            return undefined;\r\n        }))).filter(persistence => persistence);\r\n        // Fall back to the first persistence listed, or in memory if none available\r\n        let selectedPersistence = availablePersistences[0] ||\r\n            _getInstance(inMemoryPersistence);\r\n        const key = _persistenceKeyName(userKey, auth.config.apiKey, auth.name);\r\n        // Pull out the existing user, setting the chosen persistence to that\r\n        // persistence if the user exists.\r\n        let userToMigrate = null;\r\n        // Note, here we check for a user in _all_ persistences, not just the\r\n        // ones deemed available. If we can migrate a user out of a broken\r\n        // persistence, we will (but only if that persistence supports migration).\r\n        for (const persistence of persistenceHierarchy) {\r\n            try {\r\n                const blob = await persistence._get(key);\r\n                if (blob) {\r\n                    const user = UserImpl._fromJSON(auth, blob); // throws for unparsable blob (wrong format)\r\n                    if (persistence !== selectedPersistence) {\r\n                        userToMigrate = user;\r\n                    }\r\n                    selectedPersistence = persistence;\r\n                    break;\r\n                }\r\n            }\r\n            catch (_a) { }\r\n        }\r\n        // If we find the user in a persistence that does support migration, use\r\n        // that migration path (of only persistences that support migration)\r\n        const migrationHierarchy = availablePersistences.filter(p => p._shouldAllowMigration);\r\n        // If the persistence does _not_ allow migration, just finish off here\r\n        if (!selectedPersistence._shouldAllowMigration ||\r\n            !migrationHierarchy.length) {\r\n            return new PersistenceUserManager(selectedPersistence, auth, userKey);\r\n        }\r\n        selectedPersistence = migrationHierarchy[0];\r\n        if (userToMigrate) {\r\n            // This normally shouldn't throw since chosenPersistence.isAvailable() is true, but if it does\r\n            // we'll just let it bubble to surface the error.\r\n            await selectedPersistence._set(key, userToMigrate.toJSON());\r\n        }\r\n        // Attempt to clear the key in other persistences but ignore errors. This helps prevent issues\r\n        // such as users getting stuck with a previous account after signing out and refreshing the tab.\r\n        await Promise.all(persistenceHierarchy.map(async (persistence) => {\r\n            if (persistence !== selectedPersistence) {\r\n                try {\r\n                    await persistence._remove(key);\r\n                }\r\n                catch (_a) { }\r\n            }\r\n        }));\r\n        return new PersistenceUserManager(selectedPersistence, auth, userKey);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Determine the browser for the purposes of reporting usage to the API\r\n */\r\nfunction _getBrowserName(userAgent) {\r\n    const ua = userAgent.toLowerCase();\r\n    if (ua.includes('opera/') || ua.includes('opr/') || ua.includes('opios/')) {\r\n        return \"Opera\" /* OPERA */;\r\n    }\r\n    else if (_isIEMobile(ua)) {\r\n        // Windows phone IEMobile browser.\r\n        return \"IEMobile\" /* IEMOBILE */;\r\n    }\r\n    else if (ua.includes('msie') || ua.includes('trident/')) {\r\n        return \"IE\" /* IE */;\r\n    }\r\n    else if (ua.includes('edge/')) {\r\n        return \"Edge\" /* EDGE */;\r\n    }\r\n    else if (_isFirefox(ua)) {\r\n        return \"Firefox\" /* FIREFOX */;\r\n    }\r\n    else if (ua.includes('silk/')) {\r\n        return \"Silk\" /* SILK */;\r\n    }\r\n    else if (_isBlackBerry(ua)) {\r\n        // Blackberry browser.\r\n        return \"Blackberry\" /* BLACKBERRY */;\r\n    }\r\n    else if (_isWebOS(ua)) {\r\n        // WebOS default browser.\r\n        return \"Webos\" /* WEBOS */;\r\n    }\r\n    else if (_isSafari(ua)) {\r\n        return \"Safari\" /* SAFARI */;\r\n    }\r\n    else if ((ua.includes('chrome/') || _isChromeIOS(ua)) &&\r\n        !ua.includes('edge/')) {\r\n        return \"Chrome\" /* CHROME */;\r\n    }\r\n    else if (_isAndroid(ua)) {\r\n        // Android stock browser.\r\n        return \"Android\" /* ANDROID */;\r\n    }\r\n    else {\r\n        // Most modern browsers have name/version at end of user agent string.\r\n        const re = /([a-zA-Z\\d\\.]+)\\/[a-zA-Z\\d\\.]*$/;\r\n        const matches = userAgent.match(re);\r\n        if ((matches === null || matches === void 0 ? void 0 : matches.length) === 2) {\r\n            return matches[1];\r\n        }\r\n    }\r\n    return \"Other\" /* OTHER */;\r\n}\r\nfunction _isFirefox(ua = getUA()) {\r\n    return /firefox\\//i.test(ua);\r\n}\r\nfunction _isSafari(userAgent = getUA()) {\r\n    const ua = userAgent.toLowerCase();\r\n    return (ua.includes('safari/') &&\r\n        !ua.includes('chrome/') &&\r\n        !ua.includes('crios/') &&\r\n        !ua.includes('android'));\r\n}\r\nfunction _isChromeIOS(ua = getUA()) {\r\n    return /crios\\//i.test(ua);\r\n}\r\nfunction _isIEMobile(ua = getUA()) {\r\n    return /iemobile/i.test(ua);\r\n}\r\nfunction _isAndroid(ua = getUA()) {\r\n    return /android/i.test(ua);\r\n}\r\nfunction _isBlackBerry(ua = getUA()) {\r\n    return /blackberry/i.test(ua);\r\n}\r\nfunction _isWebOS(ua = getUA()) {\r\n    return /webos/i.test(ua);\r\n}\r\nfunction _isIOS(ua = getUA()) {\r\n    return /iphone|ipad|ipod/i.test(ua) ||\r\n        (/macintosh/i.test(ua) && /mobile/i.test(ua));\r\n}\r\nfunction _isIOS7Or8(ua = getUA()) {\r\n    return (/(iPad|iPhone|iPod).*OS 7_\\d/i.test(ua) ||\r\n        /(iPad|iPhone|iPod).*OS 8_\\d/i.test(ua));\r\n}\r\nfunction _isIOSStandalone(ua = getUA()) {\r\n    var _a;\r\n    return _isIOS(ua) && !!((_a = window.navigator) === null || _a === void 0 ? void 0 : _a.standalone);\r\n}\r\nfunction _isIE10() {\r\n    return isIE() && document.documentMode === 10;\r\n}\r\nfunction _isMobileBrowser(ua = getUA()) {\r\n    // TODO: implement getBrowserName equivalent for OS.\r\n    return (_isIOS(ua) ||\r\n        _isAndroid(ua) ||\r\n        _isWebOS(ua) ||\r\n        _isBlackBerry(ua) ||\r\n        /windows phone/i.test(ua) ||\r\n        _isIEMobile(ua));\r\n}\r\nfunction _isIframe() {\r\n    try {\r\n        // Check that the current window is not the top window.\r\n        // If so, return true.\r\n        return !!(window && window !== window.top);\r\n    }\r\n    catch (e) {\r\n        return false;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/*\r\n * Determine the SDK version string\r\n */\r\nfunction _getClientVersion(clientPlatform, frameworks = []) {\r\n    let reportedPlatform;\r\n    switch (clientPlatform) {\r\n        case \"Browser\" /* BROWSER */:\r\n            // In a browser environment, report the browser name.\r\n            reportedPlatform = _getBrowserName(getUA());\r\n            break;\r\n        case \"Worker\" /* WORKER */:\r\n            // Technically a worker runs from a browser but we need to differentiate a\r\n            // worker from a browser.\r\n            // For example: Chrome-Worker/JsCore/4.9.1/FirebaseCore-web.\r\n            reportedPlatform = `${_getBrowserName(getUA())}-${clientPlatform}`;\r\n            break;\r\n        default:\r\n            reportedPlatform = clientPlatform;\r\n    }\r\n    const reportedFrameworks = frameworks.length\r\n        ? frameworks.join(',')\r\n        : 'FirebaseCore-web'; /* default value if no other framework is used */\r\n    return `${reportedPlatform}/${\"JsCore\" /* CORE */}/${SDK_VERSION}/${reportedFrameworks}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthMiddlewareQueue {\r\n    constructor(auth) {\r\n        this.auth = auth;\r\n        this.queue = [];\r\n    }\r\n    pushCallback(callback, onAbort) {\r\n        // The callback could be sync or async. Wrap it into a\r\n        // function that is always async.\r\n        const wrappedCallback = (user) => new Promise((resolve, reject) => {\r\n            try {\r\n                const result = callback(user);\r\n                // Either resolve with existing promise or wrap a non-promise\r\n                // return value into a promise.\r\n                resolve(result);\r\n            }\r\n            catch (e) {\r\n                // Sync callback throws.\r\n                reject(e);\r\n            }\r\n        });\r\n        // Attach the onAbort if present\r\n        wrappedCallback.onAbort = onAbort;\r\n        this.queue.push(wrappedCallback);\r\n        const index = this.queue.length - 1;\r\n        return () => {\r\n            // Unsubscribe. Replace with no-op. Do not remove from array, or it will disturb\r\n            // indexing of other elements.\r\n            this.queue[index] = () => Promise.resolve();\r\n        };\r\n    }\r\n    async runMiddleware(nextUser) {\r\n        var _a;\r\n        if (this.auth.currentUser === nextUser) {\r\n            return;\r\n        }\r\n        // While running the middleware, build a temporary stack of onAbort\r\n        // callbacks to call if one middleware callback rejects.\r\n        const onAbortStack = [];\r\n        try {\r\n            for (const beforeStateCallback of this.queue) {\r\n                await beforeStateCallback(nextUser);\r\n                // Only push the onAbort if the callback succeeds\r\n                if (beforeStateCallback.onAbort) {\r\n                    onAbortStack.push(beforeStateCallback.onAbort);\r\n                }\r\n            }\r\n        }\r\n        catch (e) {\r\n            // Run all onAbort, with separate try/catch to ignore any errors and\r\n            // continue\r\n            onAbortStack.reverse();\r\n            for (const onAbort of onAbortStack) {\r\n                try {\r\n                    onAbort();\r\n                }\r\n                catch (_) { /* swallow error */ }\r\n            }\r\n            throw this.auth._errorFactory.create(\"login-blocked\" /* LOGIN_BLOCKED */, { originalMessage: (_a = e) === null || _a === void 0 ? void 0 : _a.message });\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthImpl {\r\n    constructor(app, heartbeatServiceProvider, config) {\r\n        this.app = app;\r\n        this.heartbeatServiceProvider = heartbeatServiceProvider;\r\n        this.config = config;\r\n        this.currentUser = null;\r\n        this.emulatorConfig = null;\r\n        this.operations = Promise.resolve();\r\n        this.authStateSubscription = new Subscription(this);\r\n        this.idTokenSubscription = new Subscription(this);\r\n        this.beforeStateQueue = new AuthMiddlewareQueue(this);\r\n        this.redirectUser = null;\r\n        this.isProactiveRefreshEnabled = false;\r\n        // Any network calls will set this to true and prevent subsequent emulator\r\n        // initialization\r\n        this._canInitEmulator = true;\r\n        this._isInitialized = false;\r\n        this._deleted = false;\r\n        this._initializationPromise = null;\r\n        this._popupRedirectResolver = null;\r\n        this._errorFactory = _DEFAULT_AUTH_ERROR_FACTORY;\r\n        // Tracks the last notified UID for state change listeners to prevent\r\n        // repeated calls to the callbacks. Undefined means it's never been\r\n        // called, whereas null means it's been called with a signed out user\r\n        this.lastNotifiedUid = undefined;\r\n        this.languageCode = null;\r\n        this.tenantId = null;\r\n        this.settings = { appVerificationDisabledForTesting: false };\r\n        this.frameworks = [];\r\n        this.name = app.name;\r\n        this.clientVersion = config.sdkClientVersion;\r\n    }\r\n    _initializeWithPersistence(persistenceHierarchy, popupRedirectResolver) {\r\n        if (popupRedirectResolver) {\r\n            this._popupRedirectResolver = _getInstance(popupRedirectResolver);\r\n        }\r\n        // Have to check for app deletion throughout initialization (after each\r\n        // promise resolution)\r\n        this._initializationPromise = this.queue(async () => {\r\n            var _a, _b;\r\n            if (this._deleted) {\r\n                return;\r\n            }\r\n            this.persistenceManager = await PersistenceUserManager.create(this, persistenceHierarchy);\r\n            if (this._deleted) {\r\n                return;\r\n            }\r\n            // Initialize the resolver early if necessary (only applicable to web:\r\n            // this will cause the iframe to load immediately in certain cases)\r\n            if ((_a = this._popupRedirectResolver) === null || _a === void 0 ? void 0 : _a._shouldInitProactively) {\r\n                // If this fails, don't halt auth loading\r\n                try {\r\n                    await this._popupRedirectResolver._initialize(this);\r\n                }\r\n                catch (e) { /* Ignore the error */ }\r\n            }\r\n            await this.initializeCurrentUser(popupRedirectResolver);\r\n            this.lastNotifiedUid = ((_b = this.currentUser) === null || _b === void 0 ? void 0 : _b.uid) || null;\r\n            if (this._deleted) {\r\n                return;\r\n            }\r\n            this._isInitialized = true;\r\n        });\r\n        return this._initializationPromise;\r\n    }\r\n    /**\r\n     * If the persistence is changed in another window, the user manager will let us know\r\n     */\r\n    async _onStorageEvent() {\r\n        if (this._deleted) {\r\n            return;\r\n        }\r\n        const user = await this.assertedPersistence.getCurrentUser();\r\n        if (!this.currentUser && !user) {\r\n            // No change, do nothing (was signed out and remained signed out).\r\n            return;\r\n        }\r\n        // If the same user is to be synchronized.\r\n        if (this.currentUser && user && this.currentUser.uid === user.uid) {\r\n            // Data update, simply copy data changes.\r\n            this._currentUser._assign(user);\r\n            // If tokens changed from previous user tokens, this will trigger\r\n            // notifyAuthListeners_.\r\n            await this.currentUser.getIdToken();\r\n            return;\r\n        }\r\n        // Update current Auth state. Either a new login or logout.\r\n        // Skip blocking callbacks, they should not apply to a change in another tab.\r\n        await this._updateCurrentUser(user, /* skipBeforeStateCallbacks */ true);\r\n    }\r\n    async initializeCurrentUser(popupRedirectResolver) {\r\n        var _a;\r\n        // First check to see if we have a pending redirect event.\r\n        const previouslyStoredUser = (await this.assertedPersistence.getCurrentUser());\r\n        let futureCurrentUser = previouslyStoredUser;\r\n        let needsTocheckMiddleware = false;\r\n        if (popupRedirectResolver && this.config.authDomain) {\r\n            await this.getOrInitRedirectPersistenceManager();\r\n            const redirectUserEventId = (_a = this.redirectUser) === null || _a === void 0 ? void 0 : _a._redirectEventId;\r\n            const storedUserEventId = futureCurrentUser === null || futureCurrentUser === void 0 ? void 0 : futureCurrentUser._redirectEventId;\r\n            const result = await this.tryRedirectSignIn(popupRedirectResolver);\r\n            // If the stored user (i.e. the old \"currentUser\") has a redirectId that\r\n            // matches the redirect user, then we want to initially sign in with the\r\n            // new user object from result.\r\n            // TODO(samgho): More thoroughly test all of this\r\n            if ((!redirectUserEventId || redirectUserEventId === storedUserEventId) &&\r\n                (result === null || result === void 0 ? void 0 : result.user)) {\r\n                futureCurrentUser = result.user;\r\n                needsTocheckMiddleware = true;\r\n            }\r\n        }\r\n        // If no user in persistence, there is no current user. Set to null.\r\n        if (!futureCurrentUser) {\r\n            return this.directlySetCurrentUser(null);\r\n        }\r\n        if (!futureCurrentUser._redirectEventId) {\r\n            // This isn't a redirect link operation, we can reload and bail.\r\n            // First though, ensure that we check the middleware is happy.\r\n            if (needsTocheckMiddleware) {\r\n                try {\r\n                    await this.beforeStateQueue.runMiddleware(futureCurrentUser);\r\n                }\r\n                catch (e) {\r\n                    futureCurrentUser = previouslyStoredUser;\r\n                    // We know this is available since the bit is only set when the\r\n                    // resolver is available\r\n                    this._popupRedirectResolver._overrideRedirectResult(this, () => Promise.reject(e));\r\n                }\r\n            }\r\n            if (futureCurrentUser) {\r\n                return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\r\n            }\r\n            else {\r\n                return this.directlySetCurrentUser(null);\r\n            }\r\n        }\r\n        _assert(this._popupRedirectResolver, this, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        await this.getOrInitRedirectPersistenceManager();\r\n        // If the redirect user's event ID matches the current user's event ID,\r\n        // DO NOT reload the current user, otherwise they'll be cleared from storage.\r\n        // This is important for the reauthenticateWithRedirect() flow.\r\n        if (this.redirectUser &&\r\n            this.redirectUser._redirectEventId === futureCurrentUser._redirectEventId) {\r\n            return this.directlySetCurrentUser(futureCurrentUser);\r\n        }\r\n        return this.reloadAndSetCurrentUserOrClear(futureCurrentUser);\r\n    }\r\n    async tryRedirectSignIn(redirectResolver) {\r\n        // The redirect user needs to be checked (and signed in if available)\r\n        // during auth initialization. All of the normal sign in and link/reauth\r\n        // flows call back into auth and push things onto the promise queue. We\r\n        // need to await the result of the redirect sign in *inside the promise\r\n        // queue*. This presents a problem: we run into deadlock. See:\r\n        //    ┌> [Initialization] ─────┐\r\n        //    ┌> [<other queue tasks>] │\r\n        //    └─ [getRedirectResult] <─┘\r\n        //    where [] are tasks on the queue and arrows denote awaits\r\n        // Initialization will never complete because it's waiting on something\r\n        // that's waiting for initialization to complete!\r\n        //\r\n        // Instead, this method calls getRedirectResult() (stored in\r\n        // _completeRedirectFn) with an optional parameter that instructs all of\r\n        // the underlying auth operations to skip anything that mutates auth state.\r\n        let result = null;\r\n        try {\r\n            // We know this._popupRedirectResolver is set since redirectResolver\r\n            // is passed in. The _completeRedirectFn expects the unwrapped extern.\r\n            result = await this._popupRedirectResolver._completeRedirectFn(this, redirectResolver, true);\r\n        }\r\n        catch (e) {\r\n            // Swallow any errors here; the code can retrieve them in\r\n            // getRedirectResult().\r\n            await this._setRedirectUser(null);\r\n        }\r\n        return result;\r\n    }\r\n    async reloadAndSetCurrentUserOrClear(user) {\r\n        var _a;\r\n        try {\r\n            await _reloadWithoutSaving(user);\r\n        }\r\n        catch (e) {\r\n            if (((_a = e) === null || _a === void 0 ? void 0 : _a.code) !== `auth/${\"network-request-failed\" /* NETWORK_REQUEST_FAILED */}`) {\r\n                // Something's wrong with the user's token. Log them out and remove\r\n                // them from storage\r\n                return this.directlySetCurrentUser(null);\r\n            }\r\n        }\r\n        return this.directlySetCurrentUser(user);\r\n    }\r\n    useDeviceLanguage() {\r\n        this.languageCode = _getUserLanguage();\r\n    }\r\n    async _delete() {\r\n        this._deleted = true;\r\n    }\r\n    async updateCurrentUser(userExtern) {\r\n        // The public updateCurrentUser method needs to make a copy of the user,\r\n        // and also check that the project matches\r\n        const user = userExtern\r\n            ? getModularInstance(userExtern)\r\n            : null;\r\n        if (user) {\r\n            _assert(user.auth.config.apiKey === this.config.apiKey, this, \"invalid-user-token\" /* INVALID_AUTH */);\r\n        }\r\n        return this._updateCurrentUser(user && user._clone(this));\r\n    }\r\n    async _updateCurrentUser(user, skipBeforeStateCallbacks = false) {\r\n        if (this._deleted) {\r\n            return;\r\n        }\r\n        if (user) {\r\n            _assert(this.tenantId === user.tenantId, this, \"tenant-id-mismatch\" /* TENANT_ID_MISMATCH */);\r\n        }\r\n        if (!skipBeforeStateCallbacks) {\r\n            await this.beforeStateQueue.runMiddleware(user);\r\n        }\r\n        return this.queue(async () => {\r\n            await this.directlySetCurrentUser(user);\r\n            this.notifyAuthListeners();\r\n        });\r\n    }\r\n    async signOut() {\r\n        // Run first, to block _setRedirectUser() if any callbacks fail.\r\n        await this.beforeStateQueue.runMiddleware(null);\r\n        // Clear the redirect user when signOut is called\r\n        if (this.redirectPersistenceManager || this._popupRedirectResolver) {\r\n            await this._setRedirectUser(null);\r\n        }\r\n        // Prevent callbacks from being called again in _updateCurrentUser, as\r\n        // they were already called in the first line.\r\n        return this._updateCurrentUser(null, /* skipBeforeStateCallbacks */ true);\r\n    }\r\n    setPersistence(persistence) {\r\n        return this.queue(async () => {\r\n            await this.assertedPersistence.setPersistence(_getInstance(persistence));\r\n        });\r\n    }\r\n    _getPersistence() {\r\n        return this.assertedPersistence.persistence.type;\r\n    }\r\n    _updateErrorMap(errorMap) {\r\n        this._errorFactory = new ErrorFactory('auth', 'Firebase', errorMap());\r\n    }\r\n    onAuthStateChanged(nextOrObserver, error, completed) {\r\n        return this.registerStateListener(this.authStateSubscription, nextOrObserver, error, completed);\r\n    }\r\n    beforeAuthStateChanged(callback, onAbort) {\r\n        return this.beforeStateQueue.pushCallback(callback, onAbort);\r\n    }\r\n    onIdTokenChanged(nextOrObserver, error, completed) {\r\n        return this.registerStateListener(this.idTokenSubscription, nextOrObserver, error, completed);\r\n    }\r\n    toJSON() {\r\n        var _a;\r\n        return {\r\n            apiKey: this.config.apiKey,\r\n            authDomain: this.config.authDomain,\r\n            appName: this.name,\r\n            currentUser: (_a = this._currentUser) === null || _a === void 0 ? void 0 : _a.toJSON()\r\n        };\r\n    }\r\n    async _setRedirectUser(user, popupRedirectResolver) {\r\n        const redirectManager = await this.getOrInitRedirectPersistenceManager(popupRedirectResolver);\r\n        return user === null\r\n            ? redirectManager.removeCurrentUser()\r\n            : redirectManager.setCurrentUser(user);\r\n    }\r\n    async getOrInitRedirectPersistenceManager(popupRedirectResolver) {\r\n        if (!this.redirectPersistenceManager) {\r\n            const resolver = (popupRedirectResolver && _getInstance(popupRedirectResolver)) ||\r\n                this._popupRedirectResolver;\r\n            _assert(resolver, this, \"argument-error\" /* ARGUMENT_ERROR */);\r\n            this.redirectPersistenceManager = await PersistenceUserManager.create(this, [_getInstance(resolver._redirectPersistence)], \"redirectUser\" /* REDIRECT_USER */);\r\n            this.redirectUser =\r\n                await this.redirectPersistenceManager.getCurrentUser();\r\n        }\r\n        return this.redirectPersistenceManager;\r\n    }\r\n    async _redirectUserForId(id) {\r\n        var _a, _b;\r\n        // Make sure we've cleared any pending persistence actions if we're not in\r\n        // the initializer\r\n        if (this._isInitialized) {\r\n            await this.queue(async () => { });\r\n        }\r\n        if (((_a = this._currentUser) === null || _a === void 0 ? void 0 : _a._redirectEventId) === id) {\r\n            return this._currentUser;\r\n        }\r\n        if (((_b = this.redirectUser) === null || _b === void 0 ? void 0 : _b._redirectEventId) === id) {\r\n            return this.redirectUser;\r\n        }\r\n        return null;\r\n    }\r\n    async _persistUserIfCurrent(user) {\r\n        if (user === this.currentUser) {\r\n            return this.queue(async () => this.directlySetCurrentUser(user));\r\n        }\r\n    }\r\n    /** Notifies listeners only if the user is current */\r\n    _notifyListenersIfCurrent(user) {\r\n        if (user === this.currentUser) {\r\n            this.notifyAuthListeners();\r\n        }\r\n    }\r\n    _key() {\r\n        return `${this.config.authDomain}:${this.config.apiKey}:${this.name}`;\r\n    }\r\n    _startProactiveRefresh() {\r\n        this.isProactiveRefreshEnabled = true;\r\n        if (this.currentUser) {\r\n            this._currentUser._startProactiveRefresh();\r\n        }\r\n    }\r\n    _stopProactiveRefresh() {\r\n        this.isProactiveRefreshEnabled = false;\r\n        if (this.currentUser) {\r\n            this._currentUser._stopProactiveRefresh();\r\n        }\r\n    }\r\n    /** Returns the current user cast as the internal type */\r\n    get _currentUser() {\r\n        return this.currentUser;\r\n    }\r\n    notifyAuthListeners() {\r\n        var _a, _b;\r\n        if (!this._isInitialized) {\r\n            return;\r\n        }\r\n        this.idTokenSubscription.next(this.currentUser);\r\n        const currentUid = (_b = (_a = this.currentUser) === null || _a === void 0 ? void 0 : _a.uid) !== null && _b !== void 0 ? _b : null;\r\n        if (this.lastNotifiedUid !== currentUid) {\r\n            this.lastNotifiedUid = currentUid;\r\n            this.authStateSubscription.next(this.currentUser);\r\n        }\r\n    }\r\n    registerStateListener(subscription, nextOrObserver, error, completed) {\r\n        if (this._deleted) {\r\n            return () => { };\r\n        }\r\n        const cb = typeof nextOrObserver === 'function'\r\n            ? nextOrObserver\r\n            : nextOrObserver.next.bind(nextOrObserver);\r\n        const promise = this._isInitialized\r\n            ? Promise.resolve()\r\n            : this._initializationPromise;\r\n        _assert(promise, this, \"internal-error\" /* INTERNAL_ERROR */);\r\n        // The callback needs to be called asynchronously per the spec.\r\n        // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n        promise.then(() => cb(this.currentUser));\r\n        if (typeof nextOrObserver === 'function') {\r\n            return subscription.addObserver(nextOrObserver, error, completed);\r\n        }\r\n        else {\r\n            return subscription.addObserver(nextOrObserver);\r\n        }\r\n    }\r\n    /**\r\n     * Unprotected (from race conditions) method to set the current user. This\r\n     * should only be called from within a queued callback. This is necessary\r\n     * because the queue shouldn't rely on another queued callback.\r\n     */\r\n    async directlySetCurrentUser(user) {\r\n        if (this.currentUser && this.currentUser !== user) {\r\n            this._currentUser._stopProactiveRefresh();\r\n            if (user && this.isProactiveRefreshEnabled) {\r\n                user._startProactiveRefresh();\r\n            }\r\n        }\r\n        this.currentUser = user;\r\n        if (user) {\r\n            await this.assertedPersistence.setCurrentUser(user);\r\n        }\r\n        else {\r\n            await this.assertedPersistence.removeCurrentUser();\r\n        }\r\n    }\r\n    queue(action) {\r\n        // In case something errors, the callback still should be called in order\r\n        // to keep the promise chain alive\r\n        this.operations = this.operations.then(action, action);\r\n        return this.operations;\r\n    }\r\n    get assertedPersistence() {\r\n        _assert(this.persistenceManager, this, \"internal-error\" /* INTERNAL_ERROR */);\r\n        return this.persistenceManager;\r\n    }\r\n    _logFramework(framework) {\r\n        if (!framework || this.frameworks.includes(framework)) {\r\n            return;\r\n        }\r\n        this.frameworks.push(framework);\r\n        // Sort alphabetically so that \"FirebaseCore-web,FirebaseUI-web\" and\r\n        // \"FirebaseUI-web,FirebaseCore-web\" aren't viewed as different.\r\n        this.frameworks.sort();\r\n        this.clientVersion = _getClientVersion(this.config.clientPlatform, this._getFrameworks());\r\n    }\r\n    _getFrameworks() {\r\n        return this.frameworks;\r\n    }\r\n    async _getAdditionalHeaders() {\r\n        var _a;\r\n        // Additional headers on every request\r\n        const headers = {\r\n            [\"X-Client-Version\" /* X_CLIENT_VERSION */]: this.clientVersion,\r\n        };\r\n        if (this.app.options.appId) {\r\n            headers[\"X-Firebase-gmpid\" /* X_FIREBASE_GMPID */] = this.app.options.appId;\r\n        }\r\n        // If the heartbeat service exists, add the heartbeat string\r\n        const heartbeatsHeader = await ((_a = this.heartbeatServiceProvider.getImmediate({\r\n            optional: true,\r\n        })) === null || _a === void 0 ? void 0 : _a.getHeartbeatsHeader());\r\n        if (heartbeatsHeader) {\r\n            headers[\"X-Firebase-Client\" /* X_FIREBASE_CLIENT */] = heartbeatsHeader;\r\n        }\r\n        return headers;\r\n    }\r\n}\r\n/**\r\n * Method to be used to cast down to our private implmentation of Auth.\r\n * It will also handle unwrapping from the compat type if necessary\r\n *\r\n * @param auth Auth object passed in from developer\r\n */\r\nfunction _castAuth(auth) {\r\n    return getModularInstance(auth);\r\n}\r\n/** Helper class to wrap subscriber logic */\r\nclass Subscription {\r\n    constructor(auth) {\r\n        this.auth = auth;\r\n        this.observer = null;\r\n        this.addObserver = createSubscribe(observer => (this.observer = observer));\r\n    }\r\n    get next() {\r\n        _assert(this.observer, this.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        return this.observer.next.bind(this.observer);\r\n    }\r\n}\n\n/**\r\n * Changes the {@link Auth} instance to communicate with the Firebase Auth Emulator, instead of production\r\n * Firebase Auth services.\r\n *\r\n * @remarks\r\n * This must be called synchronously immediately following the first call to\r\n * {@link initializeAuth}.  Do not use with production credentials as emulator\r\n * traffic is not encrypted.\r\n *\r\n *\r\n * @example\r\n * ```javascript\r\n * connectAuthEmulator(auth, 'http://127.0.0.1:9099', { disableWarnings: true });\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param url - The URL at which the emulator is running (eg, 'http://localhost:9099').\r\n * @param options - Optional. `options.disableWarnings` defaults to `false`. Set it to\r\n * `true` to disable the warning banner attached to the DOM.\r\n *\r\n * @public\r\n */\r\nfunction connectAuthEmulator(auth, url, options) {\r\n    const authInternal = _castAuth(auth);\r\n    _assert(authInternal._canInitEmulator, authInternal, \"emulator-config-failed\" /* EMULATOR_CONFIG_FAILED */);\r\n    _assert(/^https?:\\/\\//.test(url), authInternal, \"invalid-emulator-scheme\" /* INVALID_EMULATOR_SCHEME */);\r\n    const disableWarnings = !!(options === null || options === void 0 ? void 0 : options.disableWarnings);\r\n    const protocol = extractProtocol(url);\r\n    const { host, port } = extractHostAndPort(url);\r\n    const portStr = port === null ? '' : `:${port}`;\r\n    // Always replace path with \"/\" (even if input url had no path at all, or had a different one).\r\n    authInternal.config.emulator = { url: `${protocol}//${host}${portStr}/` };\r\n    authInternal.settings.appVerificationDisabledForTesting = true;\r\n    authInternal.emulatorConfig = Object.freeze({\r\n        host,\r\n        port,\r\n        protocol: protocol.replace(':', ''),\r\n        options: Object.freeze({ disableWarnings })\r\n    });\r\n    if (!disableWarnings) {\r\n        emitEmulatorWarning();\r\n    }\r\n}\r\nfunction extractProtocol(url) {\r\n    const protocolEnd = url.indexOf(':');\r\n    return protocolEnd < 0 ? '' : url.substr(0, protocolEnd + 1);\r\n}\r\nfunction extractHostAndPort(url) {\r\n    const protocol = extractProtocol(url);\r\n    const authority = /(\\/\\/)?([^?#/]+)/.exec(url.substr(protocol.length)); // Between // and /, ? or #.\r\n    if (!authority) {\r\n        return { host: '', port: null };\r\n    }\r\n    const hostAndPort = authority[2].split('@').pop() || ''; // Strip out \"username:password@\".\r\n    const bracketedIPv6 = /^(\\[[^\\]]+\\])(:|$)/.exec(hostAndPort);\r\n    if (bracketedIPv6) {\r\n        const host = bracketedIPv6[1];\r\n        return { host, port: parsePort(hostAndPort.substr(host.length + 1)) };\r\n    }\r\n    else {\r\n        const [host, port] = hostAndPort.split(':');\r\n        return { host, port: parsePort(port) };\r\n    }\r\n}\r\nfunction parsePort(portStr) {\r\n    if (!portStr) {\r\n        return null;\r\n    }\r\n    const port = Number(portStr);\r\n    if (isNaN(port)) {\r\n        return null;\r\n    }\r\n    return port;\r\n}\r\nfunction emitEmulatorWarning() {\r\n    function attachBanner() {\r\n        const el = document.createElement('p');\r\n        const sty = el.style;\r\n        el.innerText =\r\n            'Running in emulator mode. Do not use with production credentials.';\r\n        sty.position = 'fixed';\r\n        sty.width = '100%';\r\n        sty.backgroundColor = '#ffffff';\r\n        sty.border = '.1em solid #000000';\r\n        sty.color = '#b50000';\r\n        sty.bottom = '0px';\r\n        sty.left = '0px';\r\n        sty.margin = '0px';\r\n        sty.zIndex = '10000';\r\n        sty.textAlign = 'center';\r\n        el.classList.add('firebase-emulator-warning');\r\n        document.body.appendChild(el);\r\n    }\r\n    if (typeof console !== 'undefined' && typeof console.info === 'function') {\r\n        console.info('WARNING: You are using the Auth Emulator,' +\r\n            ' which is intended for local testing only.  Do not use with' +\r\n            ' production credentials.');\r\n    }\r\n    if (typeof window !== 'undefined' &&\r\n        typeof document !== 'undefined') {\r\n        if (document.readyState === 'loading') {\r\n            window.addEventListener('DOMContentLoaded', attachBanner);\r\n        }\r\n        else {\r\n            attachBanner();\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface that represents the credentials returned by an {@link AuthProvider}.\r\n *\r\n * @remarks\r\n * Implementations specify the details about each auth provider's credential requirements.\r\n *\r\n * @public\r\n */\r\nclass AuthCredential {\r\n    /** @internal */\r\n    constructor(\r\n    /**\r\n     * The authentication provider ID for the credential.\r\n     *\r\n     * @remarks\r\n     * For example, 'facebook.com', or 'google.com'.\r\n     */\r\n    providerId, \r\n    /**\r\n     * The authentication sign in method for the credential.\r\n     *\r\n     * @remarks\r\n     * For example, {@link SignInMethod}.EMAIL_PASSWORD, or\r\n     * {@link SignInMethod}.EMAIL_LINK. This corresponds to the sign-in method\r\n     * identifier as returned in {@link fetchSignInMethodsForEmail}.\r\n     */\r\n    signInMethod) {\r\n        this.providerId = providerId;\r\n        this.signInMethod = signInMethod;\r\n    }\r\n    /**\r\n     * Returns a JSON-serializable representation of this object.\r\n     *\r\n     * @returns a JSON-serializable representation of this object.\r\n     */\r\n    toJSON() {\r\n        return debugFail('not implemented');\r\n    }\r\n    /** @internal */\r\n    _getIdTokenResponse(_auth) {\r\n        return debugFail('not implemented');\r\n    }\r\n    /** @internal */\r\n    _linkToIdToken(_auth, _idToken) {\r\n        return debugFail('not implemented');\r\n    }\r\n    /** @internal */\r\n    _getReauthenticationResolver(_auth) {\r\n        return debugFail('not implemented');\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function resetPassword(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v1/accounts:resetPassword\" /* RESET_PASSWORD */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function updateEmailPassword(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v1/accounts:update\" /* SET_ACCOUNT_INFO */, request);\r\n}\r\nasync function applyActionCode$1(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v1/accounts:update\" /* SET_ACCOUNT_INFO */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithPassword(auth, request) {\r\n    return _performSignInRequest(auth, \"POST\" /* POST */, \"/v1/accounts:signInWithPassword\" /* SIGN_IN_WITH_PASSWORD */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function sendOobCode(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v1/accounts:sendOobCode\" /* SEND_OOB_CODE */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function sendEmailVerification$1(auth, request) {\r\n    return sendOobCode(auth, request);\r\n}\r\nasync function sendPasswordResetEmail$1(auth, request) {\r\n    return sendOobCode(auth, request);\r\n}\r\nasync function sendSignInLinkToEmail$1(auth, request) {\r\n    return sendOobCode(auth, request);\r\n}\r\nasync function verifyAndChangeEmail(auth, request) {\r\n    return sendOobCode(auth, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithEmailLink$1(auth, request) {\r\n    return _performSignInRequest(auth, \"POST\" /* POST */, \"/v1/accounts:signInWithEmailLink\" /* SIGN_IN_WITH_EMAIL_LINK */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function signInWithEmailLinkForLinking(auth, request) {\r\n    return _performSignInRequest(auth, \"POST\" /* POST */, \"/v1/accounts:signInWithEmailLink\" /* SIGN_IN_WITH_EMAIL_LINK */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface that represents the credentials returned by {@link EmailAuthProvider} for\r\n * {@link ProviderId}.PASSWORD\r\n *\r\n * @remarks\r\n * Covers both {@link SignInMethod}.EMAIL_PASSWORD and\r\n * {@link SignInMethod}.EMAIL_LINK.\r\n *\r\n * @public\r\n */\r\nclass EmailAuthCredential extends AuthCredential {\r\n    /** @internal */\r\n    constructor(\r\n    /** @internal */\r\n    _email, \r\n    /** @internal */\r\n    _password, signInMethod, \r\n    /** @internal */\r\n    _tenantId = null) {\r\n        super(\"password\" /* PASSWORD */, signInMethod);\r\n        this._email = _email;\r\n        this._password = _password;\r\n        this._tenantId = _tenantId;\r\n    }\r\n    /** @internal */\r\n    static _fromEmailAndPassword(email, password) {\r\n        return new EmailAuthCredential(email, password, \"password\" /* EMAIL_PASSWORD */);\r\n    }\r\n    /** @internal */\r\n    static _fromEmailAndCode(email, oobCode, tenantId = null) {\r\n        return new EmailAuthCredential(email, oobCode, \"emailLink\" /* EMAIL_LINK */, tenantId);\r\n    }\r\n    /** {@inheritdoc AuthCredential.toJSON} */\r\n    toJSON() {\r\n        return {\r\n            email: this._email,\r\n            password: this._password,\r\n            signInMethod: this.signInMethod,\r\n            tenantId: this._tenantId\r\n        };\r\n    }\r\n    /**\r\n     * Static method to deserialize a JSON representation of an object into an {@link  AuthCredential}.\r\n     *\r\n     * @param json - Either `object` or the stringified representation of the object. When string is\r\n     * provided, `JSON.parse` would be called first.\r\n     *\r\n     * @returns If the JSON input does not represent an {@link AuthCredential}, null is returned.\r\n     */\r\n    static fromJSON(json) {\r\n        const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n        if ((obj === null || obj === void 0 ? void 0 : obj.email) && (obj === null || obj === void 0 ? void 0 : obj.password)) {\r\n            if (obj.signInMethod === \"password\" /* EMAIL_PASSWORD */) {\r\n                return this._fromEmailAndPassword(obj.email, obj.password);\r\n            }\r\n            else if (obj.signInMethod === \"emailLink\" /* EMAIL_LINK */) {\r\n                return this._fromEmailAndCode(obj.email, obj.password, obj.tenantId);\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n    /** @internal */\r\n    async _getIdTokenResponse(auth) {\r\n        switch (this.signInMethod) {\r\n            case \"password\" /* EMAIL_PASSWORD */:\r\n                return signInWithPassword(auth, {\r\n                    returnSecureToken: true,\r\n                    email: this._email,\r\n                    password: this._password\r\n                });\r\n            case \"emailLink\" /* EMAIL_LINK */:\r\n                return signInWithEmailLink$1(auth, {\r\n                    email: this._email,\r\n                    oobCode: this._password\r\n                });\r\n            default:\r\n                _fail(auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        }\r\n    }\r\n    /** @internal */\r\n    async _linkToIdToken(auth, idToken) {\r\n        switch (this.signInMethod) {\r\n            case \"password\" /* EMAIL_PASSWORD */:\r\n                return updateEmailPassword(auth, {\r\n                    idToken,\r\n                    returnSecureToken: true,\r\n                    email: this._email,\r\n                    password: this._password\r\n                });\r\n            case \"emailLink\" /* EMAIL_LINK */:\r\n                return signInWithEmailLinkForLinking(auth, {\r\n                    idToken,\r\n                    email: this._email,\r\n                    oobCode: this._password\r\n                });\r\n            default:\r\n                _fail(auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        }\r\n    }\r\n    /** @internal */\r\n    _getReauthenticationResolver(auth) {\r\n        return this._getIdTokenResponse(auth);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithIdp(auth, request) {\r\n    return _performSignInRequest(auth, \"POST\" /* POST */, \"/v1/accounts:signInWithIdp\" /* SIGN_IN_WITH_IDP */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IDP_REQUEST_URI$1 = 'http://localhost';\r\n/**\r\n * Represents the OAuth credentials returned by an {@link OAuthProvider}.\r\n *\r\n * @remarks\r\n * Implementations specify the details about each auth provider's credential requirements.\r\n *\r\n * @public\r\n */\r\nclass OAuthCredential extends AuthCredential {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.pendingToken = null;\r\n    }\r\n    /** @internal */\r\n    static _fromParams(params) {\r\n        const cred = new OAuthCredential(params.providerId, params.signInMethod);\r\n        if (params.idToken || params.accessToken) {\r\n            // OAuth 2 and either ID token or access token.\r\n            if (params.idToken) {\r\n                cred.idToken = params.idToken;\r\n            }\r\n            if (params.accessToken) {\r\n                cred.accessToken = params.accessToken;\r\n            }\r\n            // Add nonce if available and no pendingToken is present.\r\n            if (params.nonce && !params.pendingToken) {\r\n                cred.nonce = params.nonce;\r\n            }\r\n            if (params.pendingToken) {\r\n                cred.pendingToken = params.pendingToken;\r\n            }\r\n        }\r\n        else if (params.oauthToken && params.oauthTokenSecret) {\r\n            // OAuth 1 and OAuth token with token secret\r\n            cred.accessToken = params.oauthToken;\r\n            cred.secret = params.oauthTokenSecret;\r\n        }\r\n        else {\r\n            _fail(\"argument-error\" /* ARGUMENT_ERROR */);\r\n        }\r\n        return cred;\r\n    }\r\n    /** {@inheritdoc AuthCredential.toJSON}  */\r\n    toJSON() {\r\n        return {\r\n            idToken: this.idToken,\r\n            accessToken: this.accessToken,\r\n            secret: this.secret,\r\n            nonce: this.nonce,\r\n            pendingToken: this.pendingToken,\r\n            providerId: this.providerId,\r\n            signInMethod: this.signInMethod\r\n        };\r\n    }\r\n    /**\r\n     * Static method to deserialize a JSON representation of an object into an\r\n     * {@link  AuthCredential}.\r\n     *\r\n     * @param json - Input can be either Object or the stringified representation of the object.\r\n     * When string is provided, JSON.parse would be called first.\r\n     *\r\n     * @returns If the JSON input does not represent an {@link  AuthCredential}, null is returned.\r\n     */\r\n    static fromJSON(json) {\r\n        const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n        const { providerId, signInMethod } = obj, rest = __rest(obj, [\"providerId\", \"signInMethod\"]);\r\n        if (!providerId || !signInMethod) {\r\n            return null;\r\n        }\r\n        const cred = new OAuthCredential(providerId, signInMethod);\r\n        cred.idToken = rest.idToken || undefined;\r\n        cred.accessToken = rest.accessToken || undefined;\r\n        cred.secret = rest.secret;\r\n        cred.nonce = rest.nonce;\r\n        cred.pendingToken = rest.pendingToken || null;\r\n        return cred;\r\n    }\r\n    /** @internal */\r\n    _getIdTokenResponse(auth) {\r\n        const request = this.buildRequest();\r\n        return signInWithIdp(auth, request);\r\n    }\r\n    /** @internal */\r\n    _linkToIdToken(auth, idToken) {\r\n        const request = this.buildRequest();\r\n        request.idToken = idToken;\r\n        return signInWithIdp(auth, request);\r\n    }\r\n    /** @internal */\r\n    _getReauthenticationResolver(auth) {\r\n        const request = this.buildRequest();\r\n        request.autoCreate = false;\r\n        return signInWithIdp(auth, request);\r\n    }\r\n    buildRequest() {\r\n        const request = {\r\n            requestUri: IDP_REQUEST_URI$1,\r\n            returnSecureToken: true\r\n        };\r\n        if (this.pendingToken) {\r\n            request.pendingToken = this.pendingToken;\r\n        }\r\n        else {\r\n            const postBody = {};\r\n            if (this.idToken) {\r\n                postBody['id_token'] = this.idToken;\r\n            }\r\n            if (this.accessToken) {\r\n                postBody['access_token'] = this.accessToken;\r\n            }\r\n            if (this.secret) {\r\n                postBody['oauth_token_secret'] = this.secret;\r\n            }\r\n            postBody['providerId'] = this.providerId;\r\n            if (this.nonce && !this.pendingToken) {\r\n                postBody['nonce'] = this.nonce;\r\n            }\r\n            request.postBody = querystring(postBody);\r\n        }\r\n        return request;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function sendPhoneVerificationCode(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v1/accounts:sendVerificationCode\" /* SEND_VERIFICATION_CODE */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function signInWithPhoneNumber$1(auth, request) {\r\n    return _performSignInRequest(auth, \"POST\" /* POST */, \"/v1/accounts:signInWithPhoneNumber\" /* SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, request));\r\n}\r\nasync function linkWithPhoneNumber$1(auth, request) {\r\n    const response = await _performSignInRequest(auth, \"POST\" /* POST */, \"/v1/accounts:signInWithPhoneNumber\" /* SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, request));\r\n    if (response.temporaryProof) {\r\n        throw _makeTaggedError(auth, \"account-exists-with-different-credential\" /* NEED_CONFIRMATION */, response);\r\n    }\r\n    return response;\r\n}\r\nconst VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_ = {\r\n    [\"USER_NOT_FOUND\" /* USER_NOT_FOUND */]: \"user-not-found\" /* USER_DELETED */\r\n};\r\nasync function verifyPhoneNumberForExisting(auth, request) {\r\n    const apiRequest = Object.assign(Object.assign({}, request), { operation: 'REAUTH' });\r\n    return _performSignInRequest(auth, \"POST\" /* POST */, \"/v1/accounts:signInWithPhoneNumber\" /* SIGN_IN_WITH_PHONE_NUMBER */, _addTidIfNecessary(auth, apiRequest), VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Represents the credentials returned by {@link PhoneAuthProvider}.\r\n *\r\n * @public\r\n */\r\nclass PhoneAuthCredential extends AuthCredential {\r\n    constructor(params) {\r\n        super(\"phone\" /* PHONE */, \"phone\" /* PHONE */);\r\n        this.params = params;\r\n    }\r\n    /** @internal */\r\n    static _fromVerification(verificationId, verificationCode) {\r\n        return new PhoneAuthCredential({ verificationId, verificationCode });\r\n    }\r\n    /** @internal */\r\n    static _fromTokenResponse(phoneNumber, temporaryProof) {\r\n        return new PhoneAuthCredential({ phoneNumber, temporaryProof });\r\n    }\r\n    /** @internal */\r\n    _getIdTokenResponse(auth) {\r\n        return signInWithPhoneNumber$1(auth, this._makeVerificationRequest());\r\n    }\r\n    /** @internal */\r\n    _linkToIdToken(auth, idToken) {\r\n        return linkWithPhoneNumber$1(auth, Object.assign({ idToken }, this._makeVerificationRequest()));\r\n    }\r\n    /** @internal */\r\n    _getReauthenticationResolver(auth) {\r\n        return verifyPhoneNumberForExisting(auth, this._makeVerificationRequest());\r\n    }\r\n    /** @internal */\r\n    _makeVerificationRequest() {\r\n        const { temporaryProof, phoneNumber, verificationId, verificationCode } = this.params;\r\n        if (temporaryProof && phoneNumber) {\r\n            return { temporaryProof, phoneNumber };\r\n        }\r\n        return {\r\n            sessionInfo: verificationId,\r\n            code: verificationCode\r\n        };\r\n    }\r\n    /** {@inheritdoc AuthCredential.toJSON} */\r\n    toJSON() {\r\n        const obj = {\r\n            providerId: this.providerId\r\n        };\r\n        if (this.params.phoneNumber) {\r\n            obj.phoneNumber = this.params.phoneNumber;\r\n        }\r\n        if (this.params.temporaryProof) {\r\n            obj.temporaryProof = this.params.temporaryProof;\r\n        }\r\n        if (this.params.verificationCode) {\r\n            obj.verificationCode = this.params.verificationCode;\r\n        }\r\n        if (this.params.verificationId) {\r\n            obj.verificationId = this.params.verificationId;\r\n        }\r\n        return obj;\r\n    }\r\n    /** Generates a phone credential based on a plain object or a JSON string. */\r\n    static fromJSON(json) {\r\n        if (typeof json === 'string') {\r\n            json = JSON.parse(json);\r\n        }\r\n        const { verificationId, verificationCode, phoneNumber, temporaryProof } = json;\r\n        if (!verificationCode &&\r\n            !verificationId &&\r\n            !phoneNumber &&\r\n            !temporaryProof) {\r\n            return null;\r\n        }\r\n        return new PhoneAuthCredential({\r\n            verificationId,\r\n            verificationCode,\r\n            phoneNumber,\r\n            temporaryProof\r\n        });\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Maps the mode string in action code URL to Action Code Info operation.\r\n *\r\n * @param mode\r\n */\r\nfunction parseMode(mode) {\r\n    switch (mode) {\r\n        case 'recoverEmail':\r\n            return \"RECOVER_EMAIL\" /* RECOVER_EMAIL */;\r\n        case 'resetPassword':\r\n            return \"PASSWORD_RESET\" /* PASSWORD_RESET */;\r\n        case 'signIn':\r\n            return \"EMAIL_SIGNIN\" /* EMAIL_SIGNIN */;\r\n        case 'verifyEmail':\r\n            return \"VERIFY_EMAIL\" /* VERIFY_EMAIL */;\r\n        case 'verifyAndChangeEmail':\r\n            return \"VERIFY_AND_CHANGE_EMAIL\" /* VERIFY_AND_CHANGE_EMAIL */;\r\n        case 'revertSecondFactorAddition':\r\n            return \"REVERT_SECOND_FACTOR_ADDITION\" /* REVERT_SECOND_FACTOR_ADDITION */;\r\n        default:\r\n            return null;\r\n    }\r\n}\r\n/**\r\n * Helper to parse FDL links\r\n *\r\n * @param url\r\n */\r\nfunction parseDeepLink(url) {\r\n    const link = querystringDecode(extractQuerystring(url))['link'];\r\n    // Double link case (automatic redirect).\r\n    const doubleDeepLink = link\r\n        ? querystringDecode(extractQuerystring(link))['deep_link_id']\r\n        : null;\r\n    // iOS custom scheme links.\r\n    const iOSDeepLink = querystringDecode(extractQuerystring(url))['deep_link_id'];\r\n    const iOSDoubleDeepLink = iOSDeepLink\r\n        ? querystringDecode(extractQuerystring(iOSDeepLink))['link']\r\n        : null;\r\n    return iOSDoubleDeepLink || iOSDeepLink || doubleDeepLink || link || url;\r\n}\r\n/**\r\n * A utility class to parse email action URLs such as password reset, email verification,\r\n * email link sign in, etc.\r\n *\r\n * @public\r\n */\r\nclass ActionCodeURL {\r\n    /**\r\n     * @param actionLink - The link from which to extract the URL.\r\n     * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\r\n     *\r\n     * @internal\r\n     */\r\n    constructor(actionLink) {\r\n        var _a, _b, _c, _d, _e, _f;\r\n        const searchParams = querystringDecode(extractQuerystring(actionLink));\r\n        const apiKey = (_a = searchParams[\"apiKey\" /* API_KEY */]) !== null && _a !== void 0 ? _a : null;\r\n        const code = (_b = searchParams[\"oobCode\" /* CODE */]) !== null && _b !== void 0 ? _b : null;\r\n        const operation = parseMode((_c = searchParams[\"mode\" /* MODE */]) !== null && _c !== void 0 ? _c : null);\r\n        // Validate API key, code and mode.\r\n        _assert(apiKey && code && operation, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        this.apiKey = apiKey;\r\n        this.operation = operation;\r\n        this.code = code;\r\n        this.continueUrl = (_d = searchParams[\"continueUrl\" /* CONTINUE_URL */]) !== null && _d !== void 0 ? _d : null;\r\n        this.languageCode = (_e = searchParams[\"languageCode\" /* LANGUAGE_CODE */]) !== null && _e !== void 0 ? _e : null;\r\n        this.tenantId = (_f = searchParams[\"tenantId\" /* TENANT_ID */]) !== null && _f !== void 0 ? _f : null;\r\n    }\r\n    /**\r\n     * Parses the email action link string and returns an {@link ActionCodeURL} if the link is valid,\r\n     * otherwise returns null.\r\n     *\r\n     * @param link  - The email action link string.\r\n     * @returns The {@link ActionCodeURL} object, or null if the link is invalid.\r\n     *\r\n     * @public\r\n     */\r\n    static parseLink(link) {\r\n        const actionLink = parseDeepLink(link);\r\n        try {\r\n            return new ActionCodeURL(actionLink);\r\n        }\r\n        catch (_a) {\r\n            return null;\r\n        }\r\n    }\r\n}\r\n/**\r\n * Parses the email action link string and returns an {@link ActionCodeURL} if\r\n * the link is valid, otherwise returns null.\r\n *\r\n * @public\r\n */\r\nfunction parseActionCodeURL(link) {\r\n    return ActionCodeURL.parseLink(link);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating {@link EmailAuthCredential}.\r\n *\r\n * @public\r\n */\r\nclass EmailAuthProvider {\r\n    constructor() {\r\n        /**\r\n         * Always set to {@link ProviderId}.PASSWORD, even for email link.\r\n         */\r\n        this.providerId = EmailAuthProvider.PROVIDER_ID;\r\n    }\r\n    /**\r\n     * Initialize an {@link AuthCredential} using an email and password.\r\n     *\r\n     * @example\r\n     * ```javascript\r\n     * const authCredential = EmailAuthProvider.credential(email, password);\r\n     * const userCredential = await signInWithCredential(auth, authCredential);\r\n     * ```\r\n     *\r\n     * @example\r\n     * ```javascript\r\n     * const userCredential = await signInWithEmailAndPassword(auth, email, password);\r\n     * ```\r\n     *\r\n     * @param email - Email address.\r\n     * @param password - User account password.\r\n     * @returns The auth provider credential.\r\n     */\r\n    static credential(email, password) {\r\n        return EmailAuthCredential._fromEmailAndPassword(email, password);\r\n    }\r\n    /**\r\n     * Initialize an {@link AuthCredential} using an email and an email link after a sign in with\r\n     * email link operation.\r\n     *\r\n     * @example\r\n     * ```javascript\r\n     * const authCredential = EmailAuthProvider.credentialWithLink(auth, email, emailLink);\r\n     * const userCredential = await signInWithCredential(auth, authCredential);\r\n     * ```\r\n     *\r\n     * @example\r\n     * ```javascript\r\n     * await sendSignInLinkToEmail(auth, email);\r\n     * // Obtain emailLink from user.\r\n     * const userCredential = await signInWithEmailLink(auth, email, emailLink);\r\n     * ```\r\n     *\r\n     * @param auth - The {@link Auth} instance used to verify the link.\r\n     * @param email - Email address.\r\n     * @param emailLink - Sign-in email link.\r\n     * @returns - The auth provider credential.\r\n     */\r\n    static credentialWithLink(email, emailLink) {\r\n        const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\r\n        _assert(actionCodeUrl, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        return EmailAuthCredential._fromEmailAndCode(email, actionCodeUrl.code, actionCodeUrl.tenantId);\r\n    }\r\n}\r\n/**\r\n * Always set to {@link ProviderId}.PASSWORD, even for email link.\r\n */\r\nEmailAuthProvider.PROVIDER_ID = \"password\" /* PASSWORD */;\r\n/**\r\n * Always set to {@link SignInMethod}.EMAIL_PASSWORD.\r\n */\r\nEmailAuthProvider.EMAIL_PASSWORD_SIGN_IN_METHOD = \"password\" /* EMAIL_PASSWORD */;\r\n/**\r\n * Always set to {@link SignInMethod}.EMAIL_LINK.\r\n */\r\nEmailAuthProvider.EMAIL_LINK_SIGN_IN_METHOD = \"emailLink\" /* EMAIL_LINK */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The base class for all Federated providers (OAuth (including OIDC), SAML).\r\n *\r\n * This class is not meant to be instantiated directly.\r\n *\r\n * @public\r\n */\r\nclass FederatedAuthProvider {\r\n    /**\r\n     * Constructor for generic OAuth providers.\r\n     *\r\n     * @param providerId - Provider for which credentials should be generated.\r\n     */\r\n    constructor(providerId) {\r\n        this.providerId = providerId;\r\n        /** @internal */\r\n        this.defaultLanguageCode = null;\r\n        /** @internal */\r\n        this.customParameters = {};\r\n    }\r\n    /**\r\n     * Set the language gode.\r\n     *\r\n     * @param languageCode - language code\r\n     */\r\n    setDefaultLanguage(languageCode) {\r\n        this.defaultLanguageCode = languageCode;\r\n    }\r\n    /**\r\n     * Sets the OAuth custom parameters to pass in an OAuth request for popup and redirect sign-in\r\n     * operations.\r\n     *\r\n     * @remarks\r\n     * For a detailed list, check the reserved required OAuth 2.0 parameters such as `client_id`,\r\n     * `redirect_uri`, `scope`, `response_type`, and `state` are not allowed and will be ignored.\r\n     *\r\n     * @param customOAuthParameters - The custom OAuth parameters to pass in the OAuth request.\r\n     */\r\n    setCustomParameters(customOAuthParameters) {\r\n        this.customParameters = customOAuthParameters;\r\n        return this;\r\n    }\r\n    /**\r\n     * Retrieve the current list of {@link CustomParameters}.\r\n     */\r\n    getCustomParameters() {\r\n        return this.customParameters;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Common code to all OAuth providers. This is separate from the\r\n * {@link OAuthProvider} so that child providers (like\r\n * {@link GoogleAuthProvider}) don't inherit the `credential` instance method.\r\n * Instead, they rely on a static `credential` method.\r\n */\r\nclass BaseOAuthProvider extends FederatedAuthProvider {\r\n    constructor() {\r\n        super(...arguments);\r\n        /** @internal */\r\n        this.scopes = [];\r\n    }\r\n    /**\r\n     * Add an OAuth scope to the credential.\r\n     *\r\n     * @param scope - Provider OAuth scope to add.\r\n     */\r\n    addScope(scope) {\r\n        // If not already added, add scope to list.\r\n        if (!this.scopes.includes(scope)) {\r\n            this.scopes.push(scope);\r\n        }\r\n        return this;\r\n    }\r\n    /**\r\n     * Retrieve the current list of OAuth scopes.\r\n     */\r\n    getScopes() {\r\n        return [...this.scopes];\r\n    }\r\n}\r\n/**\r\n * Provider for generating generic {@link OAuthCredential}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new OAuthProvider('google.com');\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n *   // This is the signed-in user\r\n *   const user = result.user;\r\n *   // This gives you a OAuth Access Token for the provider.\r\n *   const credential = provider.credentialFromResult(auth, result);\r\n *   const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new OAuthProvider('google.com');\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a OAuth Access Token for the provider.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * ```\r\n * @public\r\n */\r\nclass OAuthProvider extends BaseOAuthProvider {\r\n    /**\r\n     * Creates an {@link OAuthCredential} from a JSON string or a plain object.\r\n     * @param json - A plain object or a JSON string\r\n     */\r\n    static credentialFromJSON(json) {\r\n        const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n        _assert('providerId' in obj && 'signInMethod' in obj, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        return OAuthCredential._fromParams(obj);\r\n    }\r\n    /**\r\n     * Creates a {@link OAuthCredential} from a generic OAuth provider's access token or ID token.\r\n     *\r\n     * @remarks\r\n     * The raw nonce is required when an ID token with a nonce field is provided. The SHA-256 hash of\r\n     * the raw nonce must match the nonce field in the ID token.\r\n     *\r\n     * @example\r\n     * ```javascript\r\n     * // `googleUser` from the onsuccess Google Sign In callback.\r\n     * // Initialize a generate OAuth provider with a `google.com` providerId.\r\n     * const provider = new OAuthProvider('google.com');\r\n     * const credential = provider.credential({\r\n     *   idToken: googleUser.getAuthResponse().id_token,\r\n     * });\r\n     * const result = await signInWithCredential(credential);\r\n     * ```\r\n     *\r\n     * @param params - Either the options object containing the ID token, access token and raw nonce\r\n     * or the ID token string.\r\n     */\r\n    credential(params) {\r\n        return this._credential(Object.assign(Object.assign({}, params), { nonce: params.rawNonce }));\r\n    }\r\n    /** An internal credential method that accepts more permissive options */\r\n    _credential(params) {\r\n        _assert(params.idToken || params.accessToken, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        // For OAuthCredential, sign in method is same as providerId.\r\n        return OAuthCredential._fromParams(Object.assign(Object.assign({}, params), { providerId: this.providerId, signInMethod: this.providerId }));\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromResult(userCredential) {\r\n        return OAuthProvider.oauthCredentialFromTaggedObject(userCredential);\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n     * thrown during a sign-in, link, or reauthenticate operation.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromError(error) {\r\n        return OAuthProvider.oauthCredentialFromTaggedObject((error.customData || {}));\r\n    }\r\n    static oauthCredentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n        if (!tokenResponse) {\r\n            return null;\r\n        }\r\n        const { oauthIdToken, oauthAccessToken, oauthTokenSecret, pendingToken, nonce, providerId } = tokenResponse;\r\n        if (!oauthAccessToken &&\r\n            !oauthTokenSecret &&\r\n            !oauthIdToken &&\r\n            !pendingToken) {\r\n            return null;\r\n        }\r\n        if (!providerId) {\r\n            return null;\r\n        }\r\n        try {\r\n            return new OAuthProvider(providerId)._credential({\r\n                idToken: oauthIdToken,\r\n                accessToken: oauthAccessToken,\r\n                nonce,\r\n                pendingToken\r\n            });\r\n        }\r\n        catch (e) {\r\n            return null;\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.FACEBOOK.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('user_birthday');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n *   // This is the signed-in user\r\n *   const user = result.user;\r\n *   // This gives you a Facebook Access Token.\r\n *   const credential = FacebookAuthProvider.credentialFromResult(result);\r\n *   const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * provider.addScope('user_birthday');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = FacebookAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass FacebookAuthProvider extends BaseOAuthProvider {\r\n    constructor() {\r\n        super(\"facebook.com\" /* FACEBOOK */);\r\n    }\r\n    /**\r\n     * Creates a credential for Facebook.\r\n     *\r\n     * @example\r\n     * ```javascript\r\n     * // `event` from the Facebook auth.authResponseChange callback.\r\n     * const credential = FacebookAuthProvider.credential(event.authResponse.accessToken);\r\n     * const result = await signInWithCredential(credential);\r\n     * ```\r\n     *\r\n     * @param accessToken - Facebook access token.\r\n     */\r\n    static credential(accessToken) {\r\n        return OAuthCredential._fromParams({\r\n            providerId: FacebookAuthProvider.PROVIDER_ID,\r\n            signInMethod: FacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD,\r\n            accessToken\r\n        });\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromResult(userCredential) {\r\n        return FacebookAuthProvider.credentialFromTaggedObject(userCredential);\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n     * thrown during a sign-in, link, or reauthenticate operation.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromError(error) {\r\n        return FacebookAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n    }\r\n    static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n        if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\r\n            return null;\r\n        }\r\n        if (!tokenResponse.oauthAccessToken) {\r\n            return null;\r\n        }\r\n        try {\r\n            return FacebookAuthProvider.credential(tokenResponse.oauthAccessToken);\r\n        }\r\n        catch (_a) {\r\n            return null;\r\n        }\r\n    }\r\n}\r\n/** Always set to {@link SignInMethod}.FACEBOOK. */\r\nFacebookAuthProvider.FACEBOOK_SIGN_IN_METHOD = \"facebook.com\" /* FACEBOOK */;\r\n/** Always set to {@link ProviderId}.FACEBOOK. */\r\nFacebookAuthProvider.PROVIDER_ID = \"facebook.com\" /* FACEBOOK */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an an {@link OAuthCredential} for {@link ProviderId}.GOOGLE.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new GoogleAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n *   // This is the signed-in user\r\n *   const user = result.user;\r\n *   // This gives you a Google Access Token.\r\n *   const credential = GoogleAuthProvider.credentialFromResult(result);\r\n *   const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new GoogleAuthProvider();\r\n * provider.addScope('profile');\r\n * provider.addScope('email');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Google Access Token.\r\n * const credential = GoogleAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass GoogleAuthProvider extends BaseOAuthProvider {\r\n    constructor() {\r\n        super(\"google.com\" /* GOOGLE */);\r\n        this.addScope('profile');\r\n    }\r\n    /**\r\n     * Creates a credential for Google. At least one of ID token and access token is required.\r\n     *\r\n     * @example\r\n     * ```javascript\r\n     * // \\`googleUser\\` from the onsuccess Google Sign In callback.\r\n     * const credential = GoogleAuthProvider.credential(googleUser.getAuthResponse().id_token);\r\n     * const result = await signInWithCredential(credential);\r\n     * ```\r\n     *\r\n     * @param idToken - Google ID token.\r\n     * @param accessToken - Google access token.\r\n     */\r\n    static credential(idToken, accessToken) {\r\n        return OAuthCredential._fromParams({\r\n            providerId: GoogleAuthProvider.PROVIDER_ID,\r\n            signInMethod: GoogleAuthProvider.GOOGLE_SIGN_IN_METHOD,\r\n            idToken,\r\n            accessToken\r\n        });\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromResult(userCredential) {\r\n        return GoogleAuthProvider.credentialFromTaggedObject(userCredential);\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n     * thrown during a sign-in, link, or reauthenticate operation.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromError(error) {\r\n        return GoogleAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n    }\r\n    static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n        if (!tokenResponse) {\r\n            return null;\r\n        }\r\n        const { oauthIdToken, oauthAccessToken } = tokenResponse;\r\n        if (!oauthIdToken && !oauthAccessToken) {\r\n            // This could be an oauth 1 credential or a phone credential\r\n            return null;\r\n        }\r\n        try {\r\n            return GoogleAuthProvider.credential(oauthIdToken, oauthAccessToken);\r\n        }\r\n        catch (_a) {\r\n            return null;\r\n        }\r\n    }\r\n}\r\n/** Always set to {@link SignInMethod}.GOOGLE. */\r\nGoogleAuthProvider.GOOGLE_SIGN_IN_METHOD = \"google.com\" /* GOOGLE */;\r\n/** Always set to {@link ProviderId}.GOOGLE. */\r\nGoogleAuthProvider.PROVIDER_ID = \"google.com\" /* GOOGLE */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.GITHUB.\r\n *\r\n * @remarks\r\n * GitHub requires an OAuth 2.0 redirect, so you can either handle the redirect directly, or use\r\n * the {@link signInWithPopup} handler:\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new GithubAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * provider.addScope('repo');\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n *   // This is the signed-in user\r\n *   const user = result.user;\r\n *   // This gives you a Github Access Token.\r\n *   const credential = GithubAuthProvider.credentialFromResult(result);\r\n *   const token = credential.accessToken;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new GithubAuthProvider();\r\n * provider.addScope('repo');\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Github Access Token.\r\n * const credential = GithubAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * ```\r\n * @public\r\n */\r\nclass GithubAuthProvider extends BaseOAuthProvider {\r\n    constructor() {\r\n        super(\"github.com\" /* GITHUB */);\r\n    }\r\n    /**\r\n     * Creates a credential for Github.\r\n     *\r\n     * @param accessToken - Github access token.\r\n     */\r\n    static credential(accessToken) {\r\n        return OAuthCredential._fromParams({\r\n            providerId: GithubAuthProvider.PROVIDER_ID,\r\n            signInMethod: GithubAuthProvider.GITHUB_SIGN_IN_METHOD,\r\n            accessToken\r\n        });\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromResult(userCredential) {\r\n        return GithubAuthProvider.credentialFromTaggedObject(userCredential);\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n     * thrown during a sign-in, link, or reauthenticate operation.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromError(error) {\r\n        return GithubAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n    }\r\n    static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n        if (!tokenResponse || !('oauthAccessToken' in tokenResponse)) {\r\n            return null;\r\n        }\r\n        if (!tokenResponse.oauthAccessToken) {\r\n            return null;\r\n        }\r\n        try {\r\n            return GithubAuthProvider.credential(tokenResponse.oauthAccessToken);\r\n        }\r\n        catch (_a) {\r\n            return null;\r\n        }\r\n    }\r\n}\r\n/** Always set to {@link SignInMethod}.GITHUB. */\r\nGithubAuthProvider.GITHUB_SIGN_IN_METHOD = \"github.com\" /* GITHUB */;\r\n/** Always set to {@link ProviderId}.GITHUB. */\r\nGithubAuthProvider.PROVIDER_ID = \"github.com\" /* GITHUB */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IDP_REQUEST_URI = 'http://localhost';\r\n/**\r\n * @public\r\n */\r\nclass SAMLAuthCredential extends AuthCredential {\r\n    /** @internal */\r\n    constructor(providerId, pendingToken) {\r\n        super(providerId, providerId);\r\n        this.pendingToken = pendingToken;\r\n    }\r\n    /** @internal */\r\n    _getIdTokenResponse(auth) {\r\n        const request = this.buildRequest();\r\n        return signInWithIdp(auth, request);\r\n    }\r\n    /** @internal */\r\n    _linkToIdToken(auth, idToken) {\r\n        const request = this.buildRequest();\r\n        request.idToken = idToken;\r\n        return signInWithIdp(auth, request);\r\n    }\r\n    /** @internal */\r\n    _getReauthenticationResolver(auth) {\r\n        const request = this.buildRequest();\r\n        request.autoCreate = false;\r\n        return signInWithIdp(auth, request);\r\n    }\r\n    /** {@inheritdoc AuthCredential.toJSON}  */\r\n    toJSON() {\r\n        return {\r\n            signInMethod: this.signInMethod,\r\n            providerId: this.providerId,\r\n            pendingToken: this.pendingToken\r\n        };\r\n    }\r\n    /**\r\n     * Static method to deserialize a JSON representation of an object into an\r\n     * {@link  AuthCredential}.\r\n     *\r\n     * @param json - Input can be either Object or the stringified representation of the object.\r\n     * When string is provided, JSON.parse would be called first.\r\n     *\r\n     * @returns If the JSON input does not represent an {@link  AuthCredential}, null is returned.\r\n     */\r\n    static fromJSON(json) {\r\n        const obj = typeof json === 'string' ? JSON.parse(json) : json;\r\n        const { providerId, signInMethod, pendingToken } = obj;\r\n        if (!providerId ||\r\n            !signInMethod ||\r\n            !pendingToken ||\r\n            providerId !== signInMethod) {\r\n            return null;\r\n        }\r\n        return new SAMLAuthCredential(providerId, pendingToken);\r\n    }\r\n    /**\r\n     * Helper static method to avoid exposing the constructor to end users.\r\n     *\r\n     * @internal\r\n     */\r\n    static _create(providerId, pendingToken) {\r\n        return new SAMLAuthCredential(providerId, pendingToken);\r\n    }\r\n    buildRequest() {\r\n        return {\r\n            requestUri: IDP_REQUEST_URI,\r\n            returnSecureToken: true,\r\n            pendingToken: this.pendingToken\r\n        };\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SAML_PROVIDER_PREFIX = 'saml.';\r\n/**\r\n * An {@link AuthProvider} for SAML.\r\n *\r\n * @public\r\n */\r\nclass SAMLAuthProvider extends FederatedAuthProvider {\r\n    /**\r\n     * Constructor. The providerId must start with \"saml.\"\r\n     * @param providerId - SAML provider ID.\r\n     */\r\n    constructor(providerId) {\r\n        _assert(providerId.startsWith(SAML_PROVIDER_PREFIX), \"argument-error\" /* ARGUMENT_ERROR */);\r\n        super(providerId);\r\n    }\r\n    /**\r\n     * Generates an {@link AuthCredential} from a {@link UserCredential} after a\r\n     * successful SAML flow completes.\r\n     *\r\n     * @remarks\r\n     *\r\n     * For example, to get an {@link AuthCredential}, you could write the\r\n     * following code:\r\n     *\r\n     * ```js\r\n     * const userCredential = await signInWithPopup(auth, samlProvider);\r\n     * const credential = SAMLAuthProvider.credentialFromResult(userCredential);\r\n     * ```\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromResult(userCredential) {\r\n        return SAMLAuthProvider.samlCredentialFromTaggedObject(userCredential);\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n     * thrown during a sign-in, link, or reauthenticate operation.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromError(error) {\r\n        return SAMLAuthProvider.samlCredentialFromTaggedObject((error.customData || {}));\r\n    }\r\n    /**\r\n     * Creates an {@link AuthCredential} from a JSON string or a plain object.\r\n     * @param json - A plain object or a JSON string\r\n     */\r\n    static credentialFromJSON(json) {\r\n        const credential = SAMLAuthCredential.fromJSON(json);\r\n        _assert(credential, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        return credential;\r\n    }\r\n    static samlCredentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n        if (!tokenResponse) {\r\n            return null;\r\n        }\r\n        const { pendingToken, providerId } = tokenResponse;\r\n        if (!pendingToken || !providerId) {\r\n            return null;\r\n        }\r\n        try {\r\n            return SAMLAuthCredential._create(providerId, pendingToken);\r\n        }\r\n        catch (e) {\r\n            return null;\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link OAuthCredential} for {@link ProviderId}.TWITTER.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new TwitterAuthProvider();\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n *   // This is the signed-in user\r\n *   const user = result.user;\r\n *   // This gives you a Twitter Access Token and Secret.\r\n *   const credential = TwitterAuthProvider.credentialFromResult(result);\r\n *   const token = credential.accessToken;\r\n *   const secret = credential.secret;\r\n * }\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new TwitterAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Twitter Access Token and Secret.\r\n * const credential = TwitterAuthProvider.credentialFromResult(result);\r\n * const token = credential.accessToken;\r\n * const secret = credential.secret;\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass TwitterAuthProvider extends BaseOAuthProvider {\r\n    constructor() {\r\n        super(\"twitter.com\" /* TWITTER */);\r\n    }\r\n    /**\r\n     * Creates a credential for Twitter.\r\n     *\r\n     * @param token - Twitter access token.\r\n     * @param secret - Twitter secret.\r\n     */\r\n    static credential(token, secret) {\r\n        return OAuthCredential._fromParams({\r\n            providerId: TwitterAuthProvider.PROVIDER_ID,\r\n            signInMethod: TwitterAuthProvider.TWITTER_SIGN_IN_METHOD,\r\n            oauthToken: token,\r\n            oauthTokenSecret: secret\r\n        });\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link UserCredential}.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromResult(userCredential) {\r\n        return TwitterAuthProvider.credentialFromTaggedObject(userCredential);\r\n    }\r\n    /**\r\n     * Used to extract the underlying {@link OAuthCredential} from a {@link AuthError} which was\r\n     * thrown during a sign-in, link, or reauthenticate operation.\r\n     *\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromError(error) {\r\n        return TwitterAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n    }\r\n    static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n        if (!tokenResponse) {\r\n            return null;\r\n        }\r\n        const { oauthAccessToken, oauthTokenSecret } = tokenResponse;\r\n        if (!oauthAccessToken || !oauthTokenSecret) {\r\n            return null;\r\n        }\r\n        try {\r\n            return TwitterAuthProvider.credential(oauthAccessToken, oauthTokenSecret);\r\n        }\r\n        catch (_a) {\r\n            return null;\r\n        }\r\n    }\r\n}\r\n/** Always set to {@link SignInMethod}.TWITTER. */\r\nTwitterAuthProvider.TWITTER_SIGN_IN_METHOD = \"twitter.com\" /* TWITTER */;\r\n/** Always set to {@link ProviderId}.TWITTER. */\r\nTwitterAuthProvider.PROVIDER_ID = \"twitter.com\" /* TWITTER */;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signUp(auth, request) {\r\n    return _performSignInRequest(auth, \"POST\" /* POST */, \"/v1/accounts:signUp\" /* SIGN_UP */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass UserCredentialImpl {\r\n    constructor(params) {\r\n        this.user = params.user;\r\n        this.providerId = params.providerId;\r\n        this._tokenResponse = params._tokenResponse;\r\n        this.operationType = params.operationType;\r\n    }\r\n    static async _fromIdTokenResponse(auth, operationType, idTokenResponse, isAnonymous = false) {\r\n        const user = await UserImpl._fromIdTokenResponse(auth, idTokenResponse, isAnonymous);\r\n        const providerId = providerIdForResponse(idTokenResponse);\r\n        const userCred = new UserCredentialImpl({\r\n            user,\r\n            providerId,\r\n            _tokenResponse: idTokenResponse,\r\n            operationType\r\n        });\r\n        return userCred;\r\n    }\r\n    static async _forOperation(user, operationType, response) {\r\n        await user._updateTokensIfNecessary(response, /* reload */ true);\r\n        const providerId = providerIdForResponse(response);\r\n        return new UserCredentialImpl({\r\n            user,\r\n            providerId,\r\n            _tokenResponse: response,\r\n            operationType\r\n        });\r\n    }\r\n}\r\nfunction providerIdForResponse(response) {\r\n    if (response.providerId) {\r\n        return response.providerId;\r\n    }\r\n    if ('phoneNumber' in response) {\r\n        return \"phone\" /* PHONE */;\r\n    }\r\n    return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Asynchronously signs in as an anonymous user.\r\n *\r\n * @remarks\r\n * If there is already an anonymous user signed in, that user will be returned; otherwise, a\r\n * new anonymous user identity will be created and returned.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nasync function signInAnonymously(auth) {\r\n    var _a;\r\n    const authInternal = _castAuth(auth);\r\n    await authInternal._initializationPromise;\r\n    if ((_a = authInternal.currentUser) === null || _a === void 0 ? void 0 : _a.isAnonymous) {\r\n        // If an anonymous user is already signed in, no need to sign them in again.\r\n        return new UserCredentialImpl({\r\n            user: authInternal.currentUser,\r\n            providerId: null,\r\n            operationType: \"signIn\" /* SIGN_IN */\r\n        });\r\n    }\r\n    const response = await signUp(authInternal, {\r\n        returnSecureToken: true\r\n    });\r\n    const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* SIGN_IN */, response, true);\r\n    await authInternal._updateCurrentUser(userCredential.user);\r\n    return userCredential;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorError extends FirebaseError {\r\n    constructor(auth, error, operationType, user) {\r\n        var _a;\r\n        super(error.code, error.message);\r\n        this.operationType = operationType;\r\n        this.user = user;\r\n        // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n        Object.setPrototypeOf(this, MultiFactorError.prototype);\r\n        this.customData = {\r\n            appName: auth.name,\r\n            tenantId: (_a = auth.tenantId) !== null && _a !== void 0 ? _a : undefined,\r\n            _serverResponse: error.customData._serverResponse,\r\n            operationType,\r\n        };\r\n    }\r\n    static _fromErrorAndOperation(auth, error, operationType, user) {\r\n        return new MultiFactorError(auth, error, operationType, user);\r\n    }\r\n}\r\nfunction _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user) {\r\n    const idTokenProvider = operationType === \"reauthenticate\" /* REAUTHENTICATE */\r\n        ? credential._getReauthenticationResolver(auth)\r\n        : credential._getIdTokenResponse(auth);\r\n    return idTokenProvider.catch(error => {\r\n        if (error.code === `auth/${\"multi-factor-auth-required\" /* MFA_REQUIRED */}`) {\r\n            throw MultiFactorError._fromErrorAndOperation(auth, error, operationType, user);\r\n        }\r\n        throw error;\r\n    });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Takes a set of UserInfo provider data and converts it to a set of names\r\n */\r\nfunction providerDataAsNames(providerData) {\r\n    return new Set(providerData\r\n        .map(({ providerId }) => providerId)\r\n        .filter(pid => !!pid));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Unlinks a provider from a user account.\r\n *\r\n * @param user - The user.\r\n * @param providerId - The provider to unlink.\r\n *\r\n * @public\r\n */\r\nasync function unlink(user, providerId) {\r\n    const userInternal = getModularInstance(user);\r\n    await _assertLinkedStatus(true, userInternal, providerId);\r\n    const { providerUserInfo } = await deleteLinkedAccounts(userInternal.auth, {\r\n        idToken: await userInternal.getIdToken(),\r\n        deleteProvider: [providerId]\r\n    });\r\n    const providersLeft = providerDataAsNames(providerUserInfo || []);\r\n    userInternal.providerData = userInternal.providerData.filter(pd => providersLeft.has(pd.providerId));\r\n    if (!providersLeft.has(\"phone\" /* PHONE */)) {\r\n        userInternal.phoneNumber = null;\r\n    }\r\n    await userInternal.auth._persistUserIfCurrent(userInternal);\r\n    return userInternal;\r\n}\r\nasync function _link$1(user, credential, bypassAuthState = false) {\r\n    const response = await _logoutIfInvalidated(user, credential._linkToIdToken(user.auth, await user.getIdToken()), bypassAuthState);\r\n    return UserCredentialImpl._forOperation(user, \"link\" /* LINK */, response);\r\n}\r\nasync function _assertLinkedStatus(expected, user, provider) {\r\n    await _reloadWithoutSaving(user);\r\n    const providerIds = providerDataAsNames(user.providerData);\r\n    const code = expected === false\r\n        ? \"provider-already-linked\" /* PROVIDER_ALREADY_LINKED */\r\n        : \"no-such-provider\" /* NO_SUCH_PROVIDER */;\r\n    _assert(providerIds.has(provider) === expected, user.auth, code);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _reauthenticate(user, credential, bypassAuthState = false) {\r\n    var _a;\r\n    const { auth } = user;\r\n    const operationType = \"reauthenticate\" /* REAUTHENTICATE */;\r\n    try {\r\n        const response = await _logoutIfInvalidated(user, _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential, user), bypassAuthState);\r\n        _assert(response.idToken, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        const parsed = _parseToken(response.idToken);\r\n        _assert(parsed, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        const { sub: localId } = parsed;\r\n        _assert(user.uid === localId, auth, \"user-mismatch\" /* USER_MISMATCH */);\r\n        return UserCredentialImpl._forOperation(user, operationType, response);\r\n    }\r\n    catch (e) {\r\n        // Convert user deleted error into user mismatch\r\n        if (((_a = e) === null || _a === void 0 ? void 0 : _a.code) === `auth/${\"user-not-found\" /* USER_DELETED */}`) {\r\n            _fail(auth, \"user-mismatch\" /* USER_MISMATCH */);\r\n        }\r\n        throw e;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _signInWithCredential(auth, credential, bypassAuthState = false) {\r\n    const operationType = \"signIn\" /* SIGN_IN */;\r\n    const response = await _processCredentialSavingMfaContextIfNecessary(auth, operationType, credential);\r\n    const userCredential = await UserCredentialImpl._fromIdTokenResponse(auth, operationType, response);\r\n    if (!bypassAuthState) {\r\n        await auth._updateCurrentUser(userCredential.user);\r\n    }\r\n    return userCredential;\r\n}\r\n/**\r\n * Asynchronously signs in with the given credentials.\r\n *\r\n * @remarks\r\n * An {@link AuthProvider} can be used to generate the credential.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function signInWithCredential(auth, credential) {\r\n    return _signInWithCredential(_castAuth(auth), credential);\r\n}\r\n/**\r\n * Links the user account with the given credentials.\r\n *\r\n * @remarks\r\n * An {@link AuthProvider} can be used to generate the credential.\r\n *\r\n * @param user - The user.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function linkWithCredential(user, credential) {\r\n    const userInternal = getModularInstance(user);\r\n    await _assertLinkedStatus(false, userInternal, credential.providerId);\r\n    return _link$1(userInternal, credential);\r\n}\r\n/**\r\n * Re-authenticates a user using a fresh credential.\r\n *\r\n * @remarks\r\n * Use before operations such as {@link updatePassword} that require tokens from recent sign-in\r\n * attempts. This method can be used to recover from a `CREDENTIAL_TOO_OLD_LOGIN_AGAIN` error.\r\n *\r\n * @param user - The user.\r\n * @param credential - The auth credential.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithCredential(user, credential) {\r\n    return _reauthenticate(getModularInstance(user), credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function signInWithCustomToken$1(auth, request) {\r\n    return _performSignInRequest(auth, \"POST\" /* POST */, \"/v1/accounts:signInWithCustomToken\" /* SIGN_IN_WITH_CUSTOM_TOKEN */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Asynchronously signs in using a custom token.\r\n *\r\n * @remarks\r\n * Custom tokens are used to integrate Firebase Auth with existing auth systems, and must\r\n * be generated by an auth backend using the\r\n * {@link https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth#createcustomtoken | createCustomToken}\r\n * method in the {@link https://firebase.google.com/docs/auth/admin | Admin SDK} .\r\n *\r\n * Fails with an error if the token is invalid, expired, or not accepted by the Firebase Auth service.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param customToken - The custom token to sign in with.\r\n *\r\n * @public\r\n */\r\nasync function signInWithCustomToken(auth, customToken) {\r\n    const authInternal = _castAuth(auth);\r\n    const response = await signInWithCustomToken$1(authInternal, {\r\n        token: customToken,\r\n        returnSecureToken: true\r\n    });\r\n    const cred = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* SIGN_IN */, response);\r\n    await authInternal._updateCurrentUser(cred.user);\r\n    return cred;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorInfoImpl {\r\n    constructor(factorId, response) {\r\n        this.factorId = factorId;\r\n        this.uid = response.mfaEnrollmentId;\r\n        this.enrollmentTime = new Date(response.enrolledAt).toUTCString();\r\n        this.displayName = response.displayName;\r\n    }\r\n    static _fromServerResponse(auth, enrollment) {\r\n        if ('phoneInfo' in enrollment) {\r\n            return PhoneMultiFactorInfoImpl._fromServerResponse(auth, enrollment);\r\n        }\r\n        return _fail(auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n    }\r\n}\r\nclass PhoneMultiFactorInfoImpl extends MultiFactorInfoImpl {\r\n    constructor(response) {\r\n        super(\"phone\" /* PHONE */, response);\r\n        this.phoneNumber = response.phoneInfo;\r\n    }\r\n    static _fromServerResponse(_auth, enrollment) {\r\n        return new PhoneMultiFactorInfoImpl(enrollment);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _setActionCodeSettingsOnRequest(auth, request, actionCodeSettings) {\r\n    var _a;\r\n    _assert(((_a = actionCodeSettings.url) === null || _a === void 0 ? void 0 : _a.length) > 0, auth, \"invalid-continue-uri\" /* INVALID_CONTINUE_URI */);\r\n    _assert(typeof actionCodeSettings.dynamicLinkDomain === 'undefined' ||\r\n        actionCodeSettings.dynamicLinkDomain.length > 0, auth, \"invalid-dynamic-link-domain\" /* INVALID_DYNAMIC_LINK_DOMAIN */);\r\n    request.continueUrl = actionCodeSettings.url;\r\n    request.dynamicLinkDomain = actionCodeSettings.dynamicLinkDomain;\r\n    request.canHandleCodeInApp = actionCodeSettings.handleCodeInApp;\r\n    if (actionCodeSettings.iOS) {\r\n        _assert(actionCodeSettings.iOS.bundleId.length > 0, auth, \"missing-ios-bundle-id\" /* MISSING_IOS_BUNDLE_ID */);\r\n        request.iOSBundleId = actionCodeSettings.iOS.bundleId;\r\n    }\r\n    if (actionCodeSettings.android) {\r\n        _assert(actionCodeSettings.android.packageName.length > 0, auth, \"missing-android-pkg-name\" /* MISSING_ANDROID_PACKAGE_NAME */);\r\n        request.androidInstallApp = actionCodeSettings.android.installApp;\r\n        request.androidMinimumVersionCode =\r\n            actionCodeSettings.android.minimumVersion;\r\n        request.androidPackageName = actionCodeSettings.android.packageName;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sends a password reset email to the given email address.\r\n *\r\n * @remarks\r\n * To complete the password reset, call {@link confirmPasswordReset} with the code supplied in\r\n * the email sent to the user, along with the new password specified by the user.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n *   url: 'https://www.example.com/?email=user@example.com',\r\n *   iOS: {\r\n *      bundleId: 'com.example.ios'\r\n *   },\r\n *   android: {\r\n *     packageName: 'com.example.android',\r\n *     installApp: true,\r\n *     minimumVersion: '12'\r\n *   },\r\n *   handleCodeInApp: true\r\n * };\r\n * await sendPasswordResetEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain code from user.\r\n * await confirmPasswordReset('user@example.com', code);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendPasswordResetEmail(auth, email, actionCodeSettings) {\r\n    const authModular = getModularInstance(auth);\r\n    const request = {\r\n        requestType: \"PASSWORD_RESET\" /* PASSWORD_RESET */,\r\n        email\r\n    };\r\n    if (actionCodeSettings) {\r\n        _setActionCodeSettingsOnRequest(authModular, request, actionCodeSettings);\r\n    }\r\n    await sendPasswordResetEmail$1(authModular, request);\r\n}\r\n/**\r\n * Completes the password reset process, given a confirmation code and new password.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A confirmation code sent to the user.\r\n * @param newPassword - The new password.\r\n *\r\n * @public\r\n */\r\nasync function confirmPasswordReset(auth, oobCode, newPassword) {\r\n    await resetPassword(getModularInstance(auth), {\r\n        oobCode,\r\n        newPassword\r\n    });\r\n    // Do not return the email.\r\n}\r\n/**\r\n * Applies a verification code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function applyActionCode(auth, oobCode) {\r\n    await applyActionCode$1(getModularInstance(auth), { oobCode });\r\n}\r\n/**\r\n * Checks a verification code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @returns metadata about the code.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param oobCode - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function checkActionCode(auth, oobCode) {\r\n    const authModular = getModularInstance(auth);\r\n    const response = await resetPassword(authModular, { oobCode });\r\n    // Email could be empty only if the request type is EMAIL_SIGNIN or\r\n    // VERIFY_AND_CHANGE_EMAIL.\r\n    // New email should not be empty if the request type is\r\n    // VERIFY_AND_CHANGE_EMAIL.\r\n    // Multi-factor info could not be empty if the request type is\r\n    // REVERT_SECOND_FACTOR_ADDITION.\r\n    const operation = response.requestType;\r\n    _assert(operation, authModular, \"internal-error\" /* INTERNAL_ERROR */);\r\n    switch (operation) {\r\n        case \"EMAIL_SIGNIN\" /* EMAIL_SIGNIN */:\r\n            break;\r\n        case \"VERIFY_AND_CHANGE_EMAIL\" /* VERIFY_AND_CHANGE_EMAIL */:\r\n            _assert(response.newEmail, authModular, \"internal-error\" /* INTERNAL_ERROR */);\r\n            break;\r\n        case \"REVERT_SECOND_FACTOR_ADDITION\" /* REVERT_SECOND_FACTOR_ADDITION */:\r\n            _assert(response.mfaInfo, authModular, \"internal-error\" /* INTERNAL_ERROR */);\r\n        // fall through\r\n        default:\r\n            _assert(response.email, authModular, \"internal-error\" /* INTERNAL_ERROR */);\r\n    }\r\n    // The multi-factor info for revert second factor addition\r\n    let multiFactorInfo = null;\r\n    if (response.mfaInfo) {\r\n        multiFactorInfo = MultiFactorInfoImpl._fromServerResponse(_castAuth(authModular), response.mfaInfo);\r\n    }\r\n    return {\r\n        data: {\r\n            email: (response.requestType === \"VERIFY_AND_CHANGE_EMAIL\" /* VERIFY_AND_CHANGE_EMAIL */\r\n                ? response.newEmail\r\n                : response.email) || null,\r\n            previousEmail: (response.requestType === \"VERIFY_AND_CHANGE_EMAIL\" /* VERIFY_AND_CHANGE_EMAIL */\r\n                ? response.email\r\n                : response.newEmail) || null,\r\n            multiFactorInfo\r\n        },\r\n        operation\r\n    };\r\n}\r\n/**\r\n * Checks a password reset code sent to the user by email or other out-of-band mechanism.\r\n *\r\n * @returns the user's email address if valid.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param code - A verification code sent to the user.\r\n *\r\n * @public\r\n */\r\nasync function verifyPasswordResetCode(auth, code) {\r\n    const { data } = await checkActionCode(getModularInstance(auth), code);\r\n    // Email should always be present since a code was sent to it\r\n    return data.email;\r\n}\r\n/**\r\n * Creates a new user account associated with the specified email address and password.\r\n *\r\n * @remarks\r\n * On successful creation of the user account, this user will also be signed in to your application.\r\n *\r\n * User account creation can fail if the account already exists or the password is invalid.\r\n *\r\n * Note: The email address acts as a unique identifier for the user and enables an email-based\r\n * password reset. This function will create a new user account and set the initial user password.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param password - The user's chosen password.\r\n *\r\n * @public\r\n */\r\nasync function createUserWithEmailAndPassword(auth, email, password) {\r\n    const authInternal = _castAuth(auth);\r\n    const response = await signUp(authInternal, {\r\n        returnSecureToken: true,\r\n        email,\r\n        password\r\n    });\r\n    const userCredential = await UserCredentialImpl._fromIdTokenResponse(authInternal, \"signIn\" /* SIGN_IN */, response);\r\n    await authInternal._updateCurrentUser(userCredential.user);\r\n    return userCredential;\r\n}\r\n/**\r\n * Asynchronously signs in using an email and password.\r\n *\r\n * @remarks\r\n * Fails with an error if the email address and password do not match.\r\n *\r\n * Note: The user's password is NOT the password used to access the user's email account. The\r\n * email address serves as a unique identifier for the user, and the password is used to access\r\n * the user's account in your Firebase project. See also: {@link createUserWithEmailAndPassword}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The users email address.\r\n * @param password - The users password.\r\n *\r\n * @public\r\n */\r\nfunction signInWithEmailAndPassword(auth, email, password) {\r\n    return signInWithCredential(getModularInstance(auth), EmailAuthProvider.credential(email, password));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sends a sign-in email link to the user with the specified email.\r\n *\r\n * @remarks\r\n * The sign-in operation has to always be completed in the app unlike other out of band email\r\n * actions (password reset and email verifications). This is because, at the end of the flow,\r\n * the user is expected to be signed in and their Auth state persisted within the app.\r\n *\r\n * To complete sign in with the email link, call {@link signInWithEmailLink} with the email\r\n * address and the email link supplied in the email sent to the user.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n *   url: 'https://www.example.com/?email=user@example.com',\r\n *   iOS: {\r\n *      bundleId: 'com.example.ios'\r\n *   },\r\n *   android: {\r\n *     packageName: 'com.example.android',\r\n *     installApp: true,\r\n *     minimumVersion: '12'\r\n *   },\r\n *   handleCodeInApp: true\r\n * };\r\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain emailLink from the user.\r\n * if(isSignInWithEmailLink(auth, emailLink)) {\r\n *   await signInWithEmailLink(auth, 'user@example.com', emailLink);\r\n * }\r\n * ```\r\n *\r\n * @param authInternal - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendSignInLinkToEmail(auth, email, actionCodeSettings) {\r\n    const authModular = getModularInstance(auth);\r\n    const request = {\r\n        requestType: \"EMAIL_SIGNIN\" /* EMAIL_SIGNIN */,\r\n        email\r\n    };\r\n    _assert(actionCodeSettings.handleCodeInApp, authModular, \"argument-error\" /* ARGUMENT_ERROR */);\r\n    if (actionCodeSettings) {\r\n        _setActionCodeSettingsOnRequest(authModular, request, actionCodeSettings);\r\n    }\r\n    await sendSignInLinkToEmail$1(authModular, request);\r\n}\r\n/**\r\n * Checks if an incoming link is a sign-in with email link suitable for {@link signInWithEmailLink}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param emailLink - The link sent to the user's email address.\r\n *\r\n * @public\r\n */\r\nfunction isSignInWithEmailLink(auth, emailLink) {\r\n    const actionCodeUrl = ActionCodeURL.parseLink(emailLink);\r\n    return (actionCodeUrl === null || actionCodeUrl === void 0 ? void 0 : actionCodeUrl.operation) === \"EMAIL_SIGNIN\" /* EMAIL_SIGNIN */;\r\n}\r\n/**\r\n * Asynchronously signs in using an email and sign-in email link.\r\n *\r\n * @remarks\r\n * If no link is passed, the link is inferred from the current URL.\r\n *\r\n * Fails with an error if the email address is invalid or OTP in email link expires.\r\n *\r\n * Note: Confirm the link is a sign-in email link before calling this method firebase.auth.Auth.isSignInWithEmailLink.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n *   url: 'https://www.example.com/?email=user@example.com',\r\n *   iOS: {\r\n *      bundleId: 'com.example.ios'\r\n *   },\r\n *   android: {\r\n *     packageName: 'com.example.android',\r\n *     installApp: true,\r\n *     minimumVersion: '12'\r\n *   },\r\n *   handleCodeInApp: true\r\n * };\r\n * await sendSignInLinkToEmail(auth, 'user@example.com', actionCodeSettings);\r\n * // Obtain emailLink from the user.\r\n * if(isSignInWithEmailLink(auth, emailLink)) {\r\n *   await signInWithEmailLink(auth, 'user@example.com', emailLink);\r\n * }\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n * @param emailLink - The link sent to the user's email address.\r\n *\r\n * @public\r\n */\r\nasync function signInWithEmailLink(auth, email, emailLink) {\r\n    const authModular = getModularInstance(auth);\r\n    const credential = EmailAuthProvider.credentialWithLink(email, emailLink || _getCurrentUrl());\r\n    // Check if the tenant ID in the email link matches the tenant ID on Auth\r\n    // instance.\r\n    _assert(credential._tenantId === (authModular.tenantId || null), authModular, \"tenant-id-mismatch\" /* TENANT_ID_MISMATCH */);\r\n    return signInWithCredential(authModular, credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function createAuthUri(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v1/accounts:createAuthUri\" /* CREATE_AUTH_URI */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Gets the list of possible sign in methods for the given email address.\r\n *\r\n * @remarks\r\n * This is useful to differentiate methods of sign-in for the same provider, eg.\r\n * {@link EmailAuthProvider} which has 2 methods of sign-in,\r\n * {@link SignInMethod}.EMAIL_PASSWORD and\r\n * {@link SignInMethod}.EMAIL_LINK.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param email - The user's email address.\r\n *\r\n * @public\r\n */\r\nasync function fetchSignInMethodsForEmail(auth, email) {\r\n    // createAuthUri returns an error if continue URI is not http or https.\r\n    // For environments like Cordova, Chrome extensions, native frameworks, file\r\n    // systems, etc, use http://localhost as continue URL.\r\n    const continueUri = _isHttpOrHttps() ? _getCurrentUrl() : 'http://localhost';\r\n    const request = {\r\n        identifier: email,\r\n        continueUri\r\n    };\r\n    const { signinMethods } = await createAuthUri(getModularInstance(auth), request);\r\n    return signinMethods || [];\r\n}\r\n/**\r\n * Sends a verification email to a user.\r\n *\r\n * @remarks\r\n * The verification process is completed by calling {@link applyActionCode}.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n *   url: 'https://www.example.com/?email=user@example.com',\r\n *   iOS: {\r\n *      bundleId: 'com.example.ios'\r\n *   },\r\n *   android: {\r\n *     packageName: 'com.example.android',\r\n *     installApp: true,\r\n *     minimumVersion: '12'\r\n *   },\r\n *   handleCodeInApp: true\r\n * };\r\n * await sendEmailVerification(user, actionCodeSettings);\r\n * // Obtain code from the user.\r\n * await applyActionCode(auth, code);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function sendEmailVerification(user, actionCodeSettings) {\r\n    const userInternal = getModularInstance(user);\r\n    const idToken = await user.getIdToken();\r\n    const request = {\r\n        requestType: \"VERIFY_EMAIL\" /* VERIFY_EMAIL */,\r\n        idToken\r\n    };\r\n    if (actionCodeSettings) {\r\n        _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);\r\n    }\r\n    const { email } = await sendEmailVerification$1(userInternal.auth, request);\r\n    if (email !== user.email) {\r\n        await user.reload();\r\n    }\r\n}\r\n/**\r\n * Sends a verification email to a new email address.\r\n *\r\n * @remarks\r\n * The user's email will be updated to the new one after being verified.\r\n *\r\n * If you have a custom email action handler, you can complete the verification process by calling\r\n * {@link applyActionCode}.\r\n *\r\n * @example\r\n * ```javascript\r\n * const actionCodeSettings = {\r\n *   url: 'https://www.example.com/?email=user@example.com',\r\n *   iOS: {\r\n *      bundleId: 'com.example.ios'\r\n *   },\r\n *   android: {\r\n *     packageName: 'com.example.android',\r\n *     installApp: true,\r\n *     minimumVersion: '12'\r\n *   },\r\n *   handleCodeInApp: true\r\n * };\r\n * await verifyBeforeUpdateEmail(user, 'newemail@example.com', actionCodeSettings);\r\n * // Obtain code from the user.\r\n * await applyActionCode(auth, code);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param newEmail - The new email address to be verified before update.\r\n * @param actionCodeSettings - The {@link ActionCodeSettings}.\r\n *\r\n * @public\r\n */\r\nasync function verifyBeforeUpdateEmail(user, newEmail, actionCodeSettings) {\r\n    const userInternal = getModularInstance(user);\r\n    const idToken = await user.getIdToken();\r\n    const request = {\r\n        requestType: \"VERIFY_AND_CHANGE_EMAIL\" /* VERIFY_AND_CHANGE_EMAIL */,\r\n        idToken,\r\n        newEmail\r\n    };\r\n    if (actionCodeSettings) {\r\n        _setActionCodeSettingsOnRequest(userInternal.auth, request, actionCodeSettings);\r\n    }\r\n    const { email } = await verifyAndChangeEmail(userInternal.auth, request);\r\n    if (email !== user.email) {\r\n        // If the local copy of the email on user is outdated, reload the\r\n        // user.\r\n        await user.reload();\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function updateProfile$1(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v1/accounts:update\" /* SET_ACCOUNT_INFO */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Updates a user's profile data.\r\n *\r\n * @param user - The user.\r\n * @param profile - The profile's `displayName` and `photoURL` to update.\r\n *\r\n * @public\r\n */\r\nasync function updateProfile(user, { displayName, photoURL: photoUrl }) {\r\n    if (displayName === undefined && photoUrl === undefined) {\r\n        return;\r\n    }\r\n    const userInternal = getModularInstance(user);\r\n    const idToken = await userInternal.getIdToken();\r\n    const profileRequest = {\r\n        idToken,\r\n        displayName,\r\n        photoUrl,\r\n        returnSecureToken: true\r\n    };\r\n    const response = await _logoutIfInvalidated(userInternal, updateProfile$1(userInternal.auth, profileRequest));\r\n    userInternal.displayName = response.displayName || null;\r\n    userInternal.photoURL = response.photoUrl || null;\r\n    // Update the password provider as well\r\n    const passwordProvider = userInternal.providerData.find(({ providerId }) => providerId === \"password\" /* PASSWORD */);\r\n    if (passwordProvider) {\r\n        passwordProvider.displayName = userInternal.displayName;\r\n        passwordProvider.photoURL = userInternal.photoURL;\r\n    }\r\n    await userInternal._updateTokensIfNecessary(response);\r\n}\r\n/**\r\n * Updates the user's email address.\r\n *\r\n * @remarks\r\n * An email will be sent to the original email address (if it was set) that allows to revoke the\r\n * email address change, in order to protect them from account hijacking.\r\n *\r\n * Important: this is a security sensitive operation that requires the user to have recently signed\r\n * in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n * @param newEmail - The new email address.\r\n *\r\n * @public\r\n */\r\nfunction updateEmail(user, newEmail) {\r\n    return updateEmailOrPassword(getModularInstance(user), newEmail, null);\r\n}\r\n/**\r\n * Updates the user's password.\r\n *\r\n * @remarks\r\n * Important: this is a security sensitive operation that requires the user to have recently signed\r\n * in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n * @param newPassword - The new password.\r\n *\r\n * @public\r\n */\r\nfunction updatePassword(user, newPassword) {\r\n    return updateEmailOrPassword(getModularInstance(user), null, newPassword);\r\n}\r\nasync function updateEmailOrPassword(user, email, password) {\r\n    const { auth } = user;\r\n    const idToken = await user.getIdToken();\r\n    const request = {\r\n        idToken,\r\n        returnSecureToken: true\r\n    };\r\n    if (email) {\r\n        request.email = email;\r\n    }\r\n    if (password) {\r\n        request.password = password;\r\n    }\r\n    const response = await _logoutIfInvalidated(user, updateEmailPassword(auth, request));\r\n    await user._updateTokensIfNecessary(response, /* reload */ true);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Parse the `AdditionalUserInfo` from the ID token response.\r\n *\r\n */\r\nfunction _fromIdTokenResponse(idTokenResponse) {\r\n    var _a, _b;\r\n    if (!idTokenResponse) {\r\n        return null;\r\n    }\r\n    const { providerId } = idTokenResponse;\r\n    const profile = idTokenResponse.rawUserInfo\r\n        ? JSON.parse(idTokenResponse.rawUserInfo)\r\n        : {};\r\n    const isNewUser = idTokenResponse.isNewUser ||\r\n        idTokenResponse.kind === \"identitytoolkit#SignupNewUserResponse\" /* SignupNewUser */;\r\n    if (!providerId && (idTokenResponse === null || idTokenResponse === void 0 ? void 0 : idTokenResponse.idToken)) {\r\n        const signInProvider = (_b = (_a = _parseToken(idTokenResponse.idToken)) === null || _a === void 0 ? void 0 : _a.firebase) === null || _b === void 0 ? void 0 : _b['sign_in_provider'];\r\n        if (signInProvider) {\r\n            const filteredProviderId = signInProvider !== \"anonymous\" /* ANONYMOUS */ &&\r\n                signInProvider !== \"custom\" /* CUSTOM */\r\n                ? signInProvider\r\n                : null;\r\n            // Uses generic class in accordance with the legacy SDK.\r\n            return new GenericAdditionalUserInfo(isNewUser, filteredProviderId);\r\n        }\r\n    }\r\n    if (!providerId) {\r\n        return null;\r\n    }\r\n    switch (providerId) {\r\n        case \"facebook.com\" /* FACEBOOK */:\r\n            return new FacebookAdditionalUserInfo(isNewUser, profile);\r\n        case \"github.com\" /* GITHUB */:\r\n            return new GithubAdditionalUserInfo(isNewUser, profile);\r\n        case \"google.com\" /* GOOGLE */:\r\n            return new GoogleAdditionalUserInfo(isNewUser, profile);\r\n        case \"twitter.com\" /* TWITTER */:\r\n            return new TwitterAdditionalUserInfo(isNewUser, profile, idTokenResponse.screenName || null);\r\n        case \"custom\" /* CUSTOM */:\r\n        case \"anonymous\" /* ANONYMOUS */:\r\n            return new GenericAdditionalUserInfo(isNewUser, null);\r\n        default:\r\n            return new GenericAdditionalUserInfo(isNewUser, providerId, profile);\r\n    }\r\n}\r\nclass GenericAdditionalUserInfo {\r\n    constructor(isNewUser, providerId, profile = {}) {\r\n        this.isNewUser = isNewUser;\r\n        this.providerId = providerId;\r\n        this.profile = profile;\r\n    }\r\n}\r\nclass FederatedAdditionalUserInfoWithUsername extends GenericAdditionalUserInfo {\r\n    constructor(isNewUser, providerId, profile, username) {\r\n        super(isNewUser, providerId, profile);\r\n        this.username = username;\r\n    }\r\n}\r\nclass FacebookAdditionalUserInfo extends GenericAdditionalUserInfo {\r\n    constructor(isNewUser, profile) {\r\n        super(isNewUser, \"facebook.com\" /* FACEBOOK */, profile);\r\n    }\r\n}\r\nclass GithubAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\r\n    constructor(isNewUser, profile) {\r\n        super(isNewUser, \"github.com\" /* GITHUB */, profile, typeof (profile === null || profile === void 0 ? void 0 : profile.login) === 'string' ? profile === null || profile === void 0 ? void 0 : profile.login : null);\r\n    }\r\n}\r\nclass GoogleAdditionalUserInfo extends GenericAdditionalUserInfo {\r\n    constructor(isNewUser, profile) {\r\n        super(isNewUser, \"google.com\" /* GOOGLE */, profile);\r\n    }\r\n}\r\nclass TwitterAdditionalUserInfo extends FederatedAdditionalUserInfoWithUsername {\r\n    constructor(isNewUser, profile, screenName) {\r\n        super(isNewUser, \"twitter.com\" /* TWITTER */, profile, screenName);\r\n    }\r\n}\r\n/**\r\n * Extracts provider specific {@link AdditionalUserInfo} for the given credential.\r\n *\r\n * @param userCredential - The user credential.\r\n *\r\n * @public\r\n */\r\nfunction getAdditionalUserInfo(userCredential) {\r\n    const { user, _tokenResponse } = userCredential;\r\n    if (user.isAnonymous && !_tokenResponse) {\r\n        // Handle the special case where signInAnonymously() gets called twice.\r\n        // No network call is made so there's nothing to actually fill this in\r\n        return {\r\n            providerId: null,\r\n            isNewUser: false,\r\n            profile: null\r\n        };\r\n    }\r\n    return _fromIdTokenResponse(_tokenResponse);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Non-optional auth methods.\r\n/**\r\n * Changes the type of persistence on the {@link Auth} instance for the currently saved\r\n * `Auth` session and applies this type of persistence for future sign-in requests, including\r\n * sign-in with redirect requests.\r\n *\r\n * @remarks\r\n * This makes it easy for a user signing in to specify whether their session should be\r\n * remembered or not. It also makes it easier to never persist the `Auth` state for applications\r\n * that are shared by other users or have sensitive data.\r\n *\r\n * @example\r\n * ```javascript\r\n * setPersistence(auth, browserSessionPersistence);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param persistence - The {@link Persistence} to use.\r\n * @returns A `Promise` that resolves once the persistence change has completed\r\n *\r\n * @public\r\n */\r\nfunction setPersistence(auth, persistence) {\r\n    return getModularInstance(auth).setPersistence(persistence);\r\n}\r\n/**\r\n * Adds an observer for changes to the signed-in user's ID token.\r\n *\r\n * @remarks\r\n * This includes sign-in, sign-out, and token refresh events.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param nextOrObserver - callback triggered on change.\r\n * @param error - Deprecated. This callback is never triggered. Errors\r\n * on signing in/out can be caught in promises returned from\r\n * sign-in/sign-out functions.\r\n * @param completed - Deprecated. This callback is never triggered.\r\n *\r\n * @public\r\n */\r\nfunction onIdTokenChanged(auth, nextOrObserver, error, completed) {\r\n    return getModularInstance(auth).onIdTokenChanged(nextOrObserver, error, completed);\r\n}\r\n/**\r\n * Adds a blocking callback that runs before an auth state change\r\n * sets a new user.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param callback - callback triggered before new user value is set.\r\n *   If this throws, it blocks the user from being set.\r\n * @param onAbort - callback triggered if a later `beforeAuthStateChanged()`\r\n *   callback throws, allowing you to undo any side effects.\r\n */\r\nfunction beforeAuthStateChanged(auth, callback, onAbort) {\r\n    return getModularInstance(auth).beforeAuthStateChanged(callback, onAbort);\r\n}\r\n/**\r\n * Adds an observer for changes to the user's sign-in state.\r\n *\r\n * @remarks\r\n * To keep the old behavior, see {@link onIdTokenChanged}.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param nextOrObserver - callback triggered on change.\r\n * @param error - Deprecated. This callback is never triggered. Errors\r\n * on signing in/out can be caught in promises returned from\r\n * sign-in/sign-out functions.\r\n * @param completed - Deprecated. This callback is never triggered.\r\n *\r\n * @public\r\n */\r\nfunction onAuthStateChanged(auth, nextOrObserver, error, completed) {\r\n    return getModularInstance(auth).onAuthStateChanged(nextOrObserver, error, completed);\r\n}\r\n/**\r\n * Sets the current language to the default device/browser preference.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nfunction useDeviceLanguage(auth) {\r\n    getModularInstance(auth).useDeviceLanguage();\r\n}\r\n/**\r\n * Asynchronously sets the provided user as {@link Auth.currentUser} on the\r\n * {@link Auth} instance.\r\n *\r\n * @remarks\r\n * A new instance copy of the user provided will be made and set as currentUser.\r\n *\r\n * This will trigger {@link onAuthStateChanged} and {@link onIdTokenChanged} listeners\r\n * like other sign in methods.\r\n *\r\n * The operation fails with an error if the user to be updated belongs to a different Firebase\r\n * project.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param user - The new {@link User}.\r\n *\r\n * @public\r\n */\r\nfunction updateCurrentUser(auth, user) {\r\n    return getModularInstance(auth).updateCurrentUser(user);\r\n}\r\n/**\r\n * Signs out the current user.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n *\r\n * @public\r\n */\r\nfunction signOut(auth) {\r\n    return getModularInstance(auth).signOut();\r\n}\r\n/**\r\n * Deletes and signs out the user.\r\n *\r\n * @remarks\r\n * Important: this is a security-sensitive operation that requires the user to have recently\r\n * signed in. If this requirement isn't met, ask the user to authenticate again and then call\r\n * {@link reauthenticateWithCredential}.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nasync function deleteUser(user) {\r\n    return getModularInstance(user).delete();\r\n}\n\nclass MultiFactorSessionImpl {\r\n    constructor(type, credential) {\r\n        this.type = type;\r\n        this.credential = credential;\r\n    }\r\n    static _fromIdtoken(idToken) {\r\n        return new MultiFactorSessionImpl(\"enroll\" /* ENROLL */, idToken);\r\n    }\r\n    static _fromMfaPendingCredential(mfaPendingCredential) {\r\n        return new MultiFactorSessionImpl(\"signin\" /* SIGN_IN */, mfaPendingCredential);\r\n    }\r\n    toJSON() {\r\n        const key = this.type === \"enroll\" /* ENROLL */\r\n            ? 'idToken'\r\n            : 'pendingCredential';\r\n        return {\r\n            multiFactorSession: {\r\n                [key]: this.credential\r\n            }\r\n        };\r\n    }\r\n    static fromJSON(obj) {\r\n        var _a, _b;\r\n        if (obj === null || obj === void 0 ? void 0 : obj.multiFactorSession) {\r\n            if ((_a = obj.multiFactorSession) === null || _a === void 0 ? void 0 : _a.pendingCredential) {\r\n                return MultiFactorSessionImpl._fromMfaPendingCredential(obj.multiFactorSession.pendingCredential);\r\n            }\r\n            else if ((_b = obj.multiFactorSession) === null || _b === void 0 ? void 0 : _b.idToken) {\r\n                return MultiFactorSessionImpl._fromIdtoken(obj.multiFactorSession.idToken);\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MultiFactorResolverImpl {\r\n    constructor(session, hints, signInResolver) {\r\n        this.session = session;\r\n        this.hints = hints;\r\n        this.signInResolver = signInResolver;\r\n    }\r\n    /** @internal */\r\n    static _fromError(authExtern, error) {\r\n        const auth = _castAuth(authExtern);\r\n        const serverResponse = error.customData._serverResponse;\r\n        const hints = (serverResponse.mfaInfo || []).map(enrollment => MultiFactorInfoImpl._fromServerResponse(auth, enrollment));\r\n        _assert(serverResponse.mfaPendingCredential, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        const session = MultiFactorSessionImpl._fromMfaPendingCredential(serverResponse.mfaPendingCredential);\r\n        return new MultiFactorResolverImpl(session, hints, async (assertion) => {\r\n            const mfaResponse = await assertion._process(auth, session);\r\n            // Clear out the unneeded fields from the old login response\r\n            delete serverResponse.mfaInfo;\r\n            delete serverResponse.mfaPendingCredential;\r\n            // Use in the new token & refresh token in the old response\r\n            const idTokenResponse = Object.assign(Object.assign({}, serverResponse), { idToken: mfaResponse.idToken, refreshToken: mfaResponse.refreshToken });\r\n            // TODO: we should collapse this switch statement into UserCredentialImpl._forOperation and have it support the SIGN_IN case\r\n            switch (error.operationType) {\r\n                case \"signIn\" /* SIGN_IN */:\r\n                    const userCredential = await UserCredentialImpl._fromIdTokenResponse(auth, error.operationType, idTokenResponse);\r\n                    await auth._updateCurrentUser(userCredential.user);\r\n                    return userCredential;\r\n                case \"reauthenticate\" /* REAUTHENTICATE */:\r\n                    _assert(error.user, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n                    return UserCredentialImpl._forOperation(error.user, error.operationType, idTokenResponse);\r\n                default:\r\n                    _fail(auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n            }\r\n        });\r\n    }\r\n    async resolveSignIn(assertionExtern) {\r\n        const assertion = assertionExtern;\r\n        return this.signInResolver(assertion);\r\n    }\r\n}\r\n/**\r\n * Provides a {@link MultiFactorResolver} suitable for completion of a\r\n * multi-factor flow.\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param error - The {@link MultiFactorError} raised during a sign-in, or\r\n * reauthentication operation.\r\n *\r\n * @public\r\n */\r\nfunction getMultiFactorResolver(auth, error) {\r\n    var _a;\r\n    const authModular = getModularInstance(auth);\r\n    const errorInternal = error;\r\n    _assert(error.customData.operationType, authModular, \"argument-error\" /* ARGUMENT_ERROR */);\r\n    _assert((_a = errorInternal.customData._serverResponse) === null || _a === void 0 ? void 0 : _a.mfaPendingCredential, authModular, \"argument-error\" /* ARGUMENT_ERROR */);\r\n    return MultiFactorResolverImpl._fromError(authModular, errorInternal);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction startEnrollPhoneMfa(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v2/accounts/mfaEnrollment:start\" /* START_PHONE_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeEnrollPhoneMfa(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v2/accounts/mfaEnrollment:finalize\" /* FINALIZE_PHONE_MFA_ENROLLMENT */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction withdrawMfa(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v2/accounts/mfaEnrollment:withdraw\" /* WITHDRAW_MFA */, _addTidIfNecessary(auth, request));\r\n}\n\nclass MultiFactorUserImpl {\r\n    constructor(user) {\r\n        this.user = user;\r\n        this.enrolledFactors = [];\r\n        user._onReload(userInfo => {\r\n            if (userInfo.mfaInfo) {\r\n                this.enrolledFactors = userInfo.mfaInfo.map(enrollment => MultiFactorInfoImpl._fromServerResponse(user.auth, enrollment));\r\n            }\r\n        });\r\n    }\r\n    static _fromUser(user) {\r\n        return new MultiFactorUserImpl(user);\r\n    }\r\n    async getSession() {\r\n        return MultiFactorSessionImpl._fromIdtoken(await this.user.getIdToken());\r\n    }\r\n    async enroll(assertionExtern, displayName) {\r\n        const assertion = assertionExtern;\r\n        const session = (await this.getSession());\r\n        const finalizeMfaResponse = await _logoutIfInvalidated(this.user, assertion._process(this.user.auth, session, displayName));\r\n        // New tokens will be issued after enrollment of the new second factors.\r\n        // They need to be updated on the user.\r\n        await this.user._updateTokensIfNecessary(finalizeMfaResponse);\r\n        // The user needs to be reloaded to get the new multi-factor information\r\n        // from server. USER_RELOADED event will be triggered and `enrolledFactors`\r\n        // will be updated.\r\n        return this.user.reload();\r\n    }\r\n    async unenroll(infoOrUid) {\r\n        var _a;\r\n        const mfaEnrollmentId = typeof infoOrUid === 'string' ? infoOrUid : infoOrUid.uid;\r\n        const idToken = await this.user.getIdToken();\r\n        const idTokenResponse = await _logoutIfInvalidated(this.user, withdrawMfa(this.user.auth, {\r\n            idToken,\r\n            mfaEnrollmentId\r\n        }));\r\n        // Remove the second factor from the user's list.\r\n        this.enrolledFactors = this.enrolledFactors.filter(({ uid }) => uid !== mfaEnrollmentId);\r\n        // Depending on whether the backend decided to revoke the user's session,\r\n        // the tokenResponse may be empty. If the tokens were not updated (and they\r\n        // are now invalid), reloading the user will discover this and invalidate\r\n        // the user's state accordingly.\r\n        await this.user._updateTokensIfNecessary(idTokenResponse);\r\n        try {\r\n            await this.user.reload();\r\n        }\r\n        catch (e) {\r\n            if (((_a = e) === null || _a === void 0 ? void 0 : _a.code) !== `auth/${\"user-token-expired\" /* TOKEN_EXPIRED */}`) {\r\n                throw e;\r\n            }\r\n        }\r\n    }\r\n}\r\nconst multiFactorUserCache = new WeakMap();\r\n/**\r\n * The {@link MultiFactorUser} corresponding to the user.\r\n *\r\n * @remarks\r\n * This is used to access all multi-factor properties and operations related to the user.\r\n *\r\n * @param user - The user.\r\n *\r\n * @public\r\n */\r\nfunction multiFactor(user) {\r\n    const userModular = getModularInstance(user);\r\n    if (!multiFactorUserCache.has(userModular)) {\r\n        multiFactorUserCache.set(userModular, MultiFactorUserImpl._fromUser(userModular));\r\n    }\r\n    return multiFactorUserCache.get(userModular);\r\n}\n\nconst STORAGE_AVAILABLE_KEY = '__sak';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// There are two different browser persistence types: local and session.\r\n// Both have the same implementation but use a different underlying storage\r\n// object.\r\nclass BrowserPersistenceClass {\r\n    constructor(storageRetriever, type) {\r\n        this.storageRetriever = storageRetriever;\r\n        this.type = type;\r\n    }\r\n    _isAvailable() {\r\n        try {\r\n            if (!this.storage) {\r\n                return Promise.resolve(false);\r\n            }\r\n            this.storage.setItem(STORAGE_AVAILABLE_KEY, '1');\r\n            this.storage.removeItem(STORAGE_AVAILABLE_KEY);\r\n            return Promise.resolve(true);\r\n        }\r\n        catch (_a) {\r\n            return Promise.resolve(false);\r\n        }\r\n    }\r\n    _set(key, value) {\r\n        this.storage.setItem(key, JSON.stringify(value));\r\n        return Promise.resolve();\r\n    }\r\n    _get(key) {\r\n        const json = this.storage.getItem(key);\r\n        return Promise.resolve(json ? JSON.parse(json) : null);\r\n    }\r\n    _remove(key) {\r\n        this.storage.removeItem(key);\r\n        return Promise.resolve();\r\n    }\r\n    get storage() {\r\n        return this.storageRetriever();\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _iframeCannotSyncWebStorage() {\r\n    const ua = getUA();\r\n    return _isSafari(ua) || _isIOS(ua);\r\n}\r\n// The polling period in case events are not supported\r\nconst _POLLING_INTERVAL_MS$1 = 1000;\r\n// The IE 10 localStorage cross tab synchronization delay in milliseconds\r\nconst IE10_LOCAL_STORAGE_SYNC_DELAY = 10;\r\nclass BrowserLocalPersistence extends BrowserPersistenceClass {\r\n    constructor() {\r\n        super(() => window.localStorage, \"LOCAL\" /* LOCAL */);\r\n        this.boundEventHandler = (event, poll) => this.onStorageEvent(event, poll);\r\n        this.listeners = {};\r\n        this.localCache = {};\r\n        // setTimeout return value is platform specific\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        this.pollTimer = null;\r\n        // Safari or iOS browser and embedded in an iframe.\r\n        this.safariLocalStorageNotSynced = _iframeCannotSyncWebStorage() && _isIframe();\r\n        // Whether to use polling instead of depending on window events\r\n        this.fallbackToPolling = _isMobileBrowser();\r\n        this._shouldAllowMigration = true;\r\n    }\r\n    forAllChangedKeys(cb) {\r\n        // Check all keys with listeners on them.\r\n        for (const key of Object.keys(this.listeners)) {\r\n            // Get value from localStorage.\r\n            const newValue = this.storage.getItem(key);\r\n            const oldValue = this.localCache[key];\r\n            // If local map value does not match, trigger listener with storage event.\r\n            // Differentiate this simulated event from the real storage event.\r\n            if (newValue !== oldValue) {\r\n                cb(key, oldValue, newValue);\r\n            }\r\n        }\r\n    }\r\n    onStorageEvent(event, poll = false) {\r\n        // Key would be null in some situations, like when localStorage is cleared\r\n        if (!event.key) {\r\n            this.forAllChangedKeys((key, _oldValue, newValue) => {\r\n                this.notifyListeners(key, newValue);\r\n            });\r\n            return;\r\n        }\r\n        const key = event.key;\r\n        // Check the mechanism how this event was detected.\r\n        // The first event will dictate the mechanism to be used.\r\n        if (poll) {\r\n            // Environment detects storage changes via polling.\r\n            // Remove storage event listener to prevent possible event duplication.\r\n            this.detachListener();\r\n        }\r\n        else {\r\n            // Environment detects storage changes via storage event listener.\r\n            // Remove polling listener to prevent possible event duplication.\r\n            this.stopPolling();\r\n        }\r\n        // Safari embedded iframe. Storage event will trigger with the delta\r\n        // changes but no changes will be applied to the iframe localStorage.\r\n        if (this.safariLocalStorageNotSynced) {\r\n            // Get current iframe page value.\r\n            const storedValue = this.storage.getItem(key);\r\n            // Value not synchronized, synchronize manually.\r\n            if (event.newValue !== storedValue) {\r\n                if (event.newValue !== null) {\r\n                    // Value changed from current value.\r\n                    this.storage.setItem(key, event.newValue);\r\n                }\r\n                else {\r\n                    // Current value deleted.\r\n                    this.storage.removeItem(key);\r\n                }\r\n            }\r\n            else if (this.localCache[key] === event.newValue && !poll) {\r\n                // Already detected and processed, do not trigger listeners again.\r\n                return;\r\n            }\r\n        }\r\n        const triggerListeners = () => {\r\n            // Keep local map up to date in case storage event is triggered before\r\n            // poll.\r\n            const storedValue = this.storage.getItem(key);\r\n            if (!poll && this.localCache[key] === storedValue) {\r\n                // Real storage event which has already been detected, do nothing.\r\n                // This seems to trigger in some IE browsers for some reason.\r\n                return;\r\n            }\r\n            this.notifyListeners(key, storedValue);\r\n        };\r\n        const storedValue = this.storage.getItem(key);\r\n        if (_isIE10() &&\r\n            storedValue !== event.newValue &&\r\n            event.newValue !== event.oldValue) {\r\n            // IE 10 has this weird bug where a storage event would trigger with the\r\n            // correct key, oldValue and newValue but localStorage.getItem(key) does\r\n            // not yield the updated value until a few milliseconds. This ensures\r\n            // this recovers from that situation.\r\n            setTimeout(triggerListeners, IE10_LOCAL_STORAGE_SYNC_DELAY);\r\n        }\r\n        else {\r\n            triggerListeners();\r\n        }\r\n    }\r\n    notifyListeners(key, value) {\r\n        this.localCache[key] = value;\r\n        const listeners = this.listeners[key];\r\n        if (listeners) {\r\n            for (const listener of Array.from(listeners)) {\r\n                listener(value ? JSON.parse(value) : value);\r\n            }\r\n        }\r\n    }\r\n    startPolling() {\r\n        this.stopPolling();\r\n        this.pollTimer = setInterval(() => {\r\n            this.forAllChangedKeys((key, oldValue, newValue) => {\r\n                this.onStorageEvent(new StorageEvent('storage', {\r\n                    key,\r\n                    oldValue,\r\n                    newValue\r\n                }), \r\n                /* poll */ true);\r\n            });\r\n        }, _POLLING_INTERVAL_MS$1);\r\n    }\r\n    stopPolling() {\r\n        if (this.pollTimer) {\r\n            clearInterval(this.pollTimer);\r\n            this.pollTimer = null;\r\n        }\r\n    }\r\n    attachListener() {\r\n        window.addEventListener('storage', this.boundEventHandler);\r\n    }\r\n    detachListener() {\r\n        window.removeEventListener('storage', this.boundEventHandler);\r\n    }\r\n    _addListener(key, listener) {\r\n        if (Object.keys(this.listeners).length === 0) {\r\n            // Whether browser can detect storage event when it had already been pushed to the background.\r\n            // This may happen in some mobile browsers. A localStorage change in the foreground window\r\n            // will not be detected in the background window via the storage event.\r\n            // This was detected in iOS 7.x mobile browsers\r\n            if (this.fallbackToPolling) {\r\n                this.startPolling();\r\n            }\r\n            else {\r\n                this.attachListener();\r\n            }\r\n        }\r\n        if (!this.listeners[key]) {\r\n            this.listeners[key] = new Set();\r\n            // Populate the cache to avoid spuriously triggering on first poll.\r\n            this.localCache[key] = this.storage.getItem(key);\r\n        }\r\n        this.listeners[key].add(listener);\r\n    }\r\n    _removeListener(key, listener) {\r\n        if (this.listeners[key]) {\r\n            this.listeners[key].delete(listener);\r\n            if (this.listeners[key].size === 0) {\r\n                delete this.listeners[key];\r\n            }\r\n        }\r\n        if (Object.keys(this.listeners).length === 0) {\r\n            this.detachListener();\r\n            this.stopPolling();\r\n        }\r\n    }\r\n    // Update local cache on base operations:\r\n    async _set(key, value) {\r\n        await super._set(key, value);\r\n        this.localCache[key] = JSON.stringify(value);\r\n    }\r\n    async _get(key) {\r\n        const value = await super._get(key);\r\n        this.localCache[key] = JSON.stringify(value);\r\n        return value;\r\n    }\r\n    async _remove(key) {\r\n        await super._remove(key);\r\n        delete this.localCache[key];\r\n    }\r\n}\r\nBrowserLocalPersistence.type = 'LOCAL';\r\n/**\r\n * An implementation of {@link Persistence} of type `LOCAL` using `localStorage`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst browserLocalPersistence = BrowserLocalPersistence;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass BrowserSessionPersistence extends BrowserPersistenceClass {\r\n    constructor() {\r\n        super(() => window.sessionStorage, \"SESSION\" /* SESSION */);\r\n    }\r\n    _addListener(_key, _listener) {\r\n        // Listeners are not supported for session storage since it cannot be shared across windows\r\n        return;\r\n    }\r\n    _removeListener(_key, _listener) {\r\n        // Listeners are not supported for session storage since it cannot be shared across windows\r\n        return;\r\n    }\r\n}\r\nBrowserSessionPersistence.type = 'SESSION';\r\n/**\r\n * An implementation of {@link Persistence} of `SESSION` using `sessionStorage`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst browserSessionPersistence = BrowserSessionPersistence;\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Shim for Promise.allSettled, note the slightly different format of `fulfilled` vs `status`.\r\n *\r\n * @param promises - Array of promises to wait on.\r\n */\r\nfunction _allSettled(promises) {\r\n    return Promise.all(promises.map(async (promise) => {\r\n        try {\r\n            const value = await promise;\r\n            return {\r\n                fulfilled: true,\r\n                value\r\n            };\r\n        }\r\n        catch (reason) {\r\n            return {\r\n                fulfilled: false,\r\n                reason\r\n            };\r\n        }\r\n    }));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface class for receiving messages.\r\n *\r\n */\r\nclass Receiver {\r\n    constructor(eventTarget) {\r\n        this.eventTarget = eventTarget;\r\n        this.handlersMap = {};\r\n        this.boundEventHandler = this.handleEvent.bind(this);\r\n    }\r\n    /**\r\n     * Obtain an instance of a Receiver for a given event target, if none exists it will be created.\r\n     *\r\n     * @param eventTarget - An event target (such as window or self) through which the underlying\r\n     * messages will be received.\r\n     */\r\n    static _getInstance(eventTarget) {\r\n        // The results are stored in an array since objects can't be keys for other\r\n        // objects. In addition, setting a unique property on an event target as a\r\n        // hash map key may not be allowed due to CORS restrictions.\r\n        const existingInstance = this.receivers.find(receiver => receiver.isListeningto(eventTarget));\r\n        if (existingInstance) {\r\n            return existingInstance;\r\n        }\r\n        const newInstance = new Receiver(eventTarget);\r\n        this.receivers.push(newInstance);\r\n        return newInstance;\r\n    }\r\n    isListeningto(eventTarget) {\r\n        return this.eventTarget === eventTarget;\r\n    }\r\n    /**\r\n     * Fans out a MessageEvent to the appropriate listeners.\r\n     *\r\n     * @remarks\r\n     * Sends an {@link Status.ACK} upon receipt and a {@link Status.DONE} once all handlers have\r\n     * finished processing.\r\n     *\r\n     * @param event - The MessageEvent.\r\n     *\r\n     */\r\n    async handleEvent(event) {\r\n        const messageEvent = event;\r\n        const { eventId, eventType, data } = messageEvent.data;\r\n        const handlers = this.handlersMap[eventType];\r\n        if (!(handlers === null || handlers === void 0 ? void 0 : handlers.size)) {\r\n            return;\r\n        }\r\n        messageEvent.ports[0].postMessage({\r\n            status: \"ack\" /* ACK */,\r\n            eventId,\r\n            eventType\r\n        });\r\n        const promises = Array.from(handlers).map(async (handler) => handler(messageEvent.origin, data));\r\n        const response = await _allSettled(promises);\r\n        messageEvent.ports[0].postMessage({\r\n            status: \"done\" /* DONE */,\r\n            eventId,\r\n            eventType,\r\n            response\r\n        });\r\n    }\r\n    /**\r\n     * Subscribe an event handler for a particular event.\r\n     *\r\n     * @param eventType - Event name to subscribe to.\r\n     * @param eventHandler - The event handler which should receive the events.\r\n     *\r\n     */\r\n    _subscribe(eventType, eventHandler) {\r\n        if (Object.keys(this.handlersMap).length === 0) {\r\n            this.eventTarget.addEventListener('message', this.boundEventHandler);\r\n        }\r\n        if (!this.handlersMap[eventType]) {\r\n            this.handlersMap[eventType] = new Set();\r\n        }\r\n        this.handlersMap[eventType].add(eventHandler);\r\n    }\r\n    /**\r\n     * Unsubscribe an event handler from a particular event.\r\n     *\r\n     * @param eventType - Event name to unsubscribe from.\r\n     * @param eventHandler - Optinoal event handler, if none provided, unsubscribe all handlers on this event.\r\n     *\r\n     */\r\n    _unsubscribe(eventType, eventHandler) {\r\n        if (this.handlersMap[eventType] && eventHandler) {\r\n            this.handlersMap[eventType].delete(eventHandler);\r\n        }\r\n        if (!eventHandler || this.handlersMap[eventType].size === 0) {\r\n            delete this.handlersMap[eventType];\r\n        }\r\n        if (Object.keys(this.handlersMap).length === 0) {\r\n            this.eventTarget.removeEventListener('message', this.boundEventHandler);\r\n        }\r\n    }\r\n}\r\nReceiver.receivers = [];\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _generateEventId(prefix = '', digits = 10) {\r\n    let random = '';\r\n    for (let i = 0; i < digits; i++) {\r\n        random += Math.floor(Math.random() * 10);\r\n    }\r\n    return prefix + random;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface for sending messages and waiting for a completion response.\r\n *\r\n */\r\nclass Sender {\r\n    constructor(target) {\r\n        this.target = target;\r\n        this.handlers = new Set();\r\n    }\r\n    /**\r\n     * Unsubscribe the handler and remove it from our tracking Set.\r\n     *\r\n     * @param handler - The handler to unsubscribe.\r\n     */\r\n    removeMessageHandler(handler) {\r\n        if (handler.messageChannel) {\r\n            handler.messageChannel.port1.removeEventListener('message', handler.onMessage);\r\n            handler.messageChannel.port1.close();\r\n        }\r\n        this.handlers.delete(handler);\r\n    }\r\n    /**\r\n     * Send a message to the Receiver located at {@link target}.\r\n     *\r\n     * @remarks\r\n     * We'll first wait a bit for an ACK , if we get one we will wait significantly longer until the\r\n     * receiver has had a chance to fully process the event.\r\n     *\r\n     * @param eventType - Type of event to send.\r\n     * @param data - The payload of the event.\r\n     * @param timeout - Timeout for waiting on an ACK from the receiver.\r\n     *\r\n     * @returns An array of settled promises from all the handlers that were listening on the receiver.\r\n     */\r\n    async _send(eventType, data, timeout = 50 /* ACK */) {\r\n        const messageChannel = typeof MessageChannel !== 'undefined' ? new MessageChannel() : null;\r\n        if (!messageChannel) {\r\n            throw new Error(\"connection_unavailable\" /* CONNECTION_UNAVAILABLE */);\r\n        }\r\n        // Node timers and browser timers return fundamentally different types.\r\n        // We don't actually care what the value is but TS won't accept unknown and\r\n        // we can't cast properly in both environments.\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        let completionTimer;\r\n        let handler;\r\n        return new Promise((resolve, reject) => {\r\n            const eventId = _generateEventId('', 20);\r\n            messageChannel.port1.start();\r\n            const ackTimer = setTimeout(() => {\r\n                reject(new Error(\"unsupported_event\" /* UNSUPPORTED_EVENT */));\r\n            }, timeout);\r\n            handler = {\r\n                messageChannel,\r\n                onMessage(event) {\r\n                    const messageEvent = event;\r\n                    if (messageEvent.data.eventId !== eventId) {\r\n                        return;\r\n                    }\r\n                    switch (messageEvent.data.status) {\r\n                        case \"ack\" /* ACK */:\r\n                            // The receiver should ACK first.\r\n                            clearTimeout(ackTimer);\r\n                            completionTimer = setTimeout(() => {\r\n                                reject(new Error(\"timeout\" /* TIMEOUT */));\r\n                            }, 3000 /* COMPLETION */);\r\n                            break;\r\n                        case \"done\" /* DONE */:\r\n                            // Once the receiver's handlers are finished we will get the results.\r\n                            clearTimeout(completionTimer);\r\n                            resolve(messageEvent.data.response);\r\n                            break;\r\n                        default:\r\n                            clearTimeout(ackTimer);\r\n                            clearTimeout(completionTimer);\r\n                            reject(new Error(\"invalid_response\" /* INVALID_RESPONSE */));\r\n                            break;\r\n                    }\r\n                }\r\n            };\r\n            this.handlers.add(handler);\r\n            messageChannel.port1.addEventListener('message', handler.onMessage);\r\n            this.target.postMessage({\r\n                eventType,\r\n                eventId,\r\n                data\r\n            }, [messageChannel.port2]);\r\n        }).finally(() => {\r\n            if (handler) {\r\n                this.removeMessageHandler(handler);\r\n            }\r\n        });\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Lazy accessor for window, since the compat layer won't tree shake this out,\r\n * we need to make sure not to mess with window unless we have to\r\n */\r\nfunction _window() {\r\n    return window;\r\n}\r\nfunction _setWindowLocation(url) {\r\n    _window().location.href = url;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _isWorker() {\r\n    return (typeof _window()['WorkerGlobalScope'] !== 'undefined' &&\r\n        typeof _window()['importScripts'] === 'function');\r\n}\r\nasync function _getActiveServiceWorker() {\r\n    if (!(navigator === null || navigator === void 0 ? void 0 : navigator.serviceWorker)) {\r\n        return null;\r\n    }\r\n    try {\r\n        const registration = await navigator.serviceWorker.ready;\r\n        return registration.active;\r\n    }\r\n    catch (_a) {\r\n        return null;\r\n    }\r\n}\r\nfunction _getServiceWorkerController() {\r\n    var _a;\r\n    return ((_a = navigator === null || navigator === void 0 ? void 0 : navigator.serviceWorker) === null || _a === void 0 ? void 0 : _a.controller) || null;\r\n}\r\nfunction _getWorkerGlobalScope() {\r\n    return _isWorker() ? self : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebaseLocalStorageDb';\r\nconst DB_VERSION = 1;\r\nconst DB_OBJECTSTORE_NAME = 'firebaseLocalStorage';\r\nconst DB_DATA_KEYPATH = 'fbase_key';\r\n/**\r\n * Promise wrapper for IDBRequest\r\n *\r\n * Unfortunately we can't cleanly extend Promise<T> since promises are not callable in ES6\r\n *\r\n */\r\nclass DBPromise {\r\n    constructor(request) {\r\n        this.request = request;\r\n    }\r\n    toPromise() {\r\n        return new Promise((resolve, reject) => {\r\n            this.request.addEventListener('success', () => {\r\n                resolve(this.request.result);\r\n            });\r\n            this.request.addEventListener('error', () => {\r\n                reject(this.request.error);\r\n            });\r\n        });\r\n    }\r\n}\r\nfunction getObjectStore(db, isReadWrite) {\r\n    return db\r\n        .transaction([DB_OBJECTSTORE_NAME], isReadWrite ? 'readwrite' : 'readonly')\r\n        .objectStore(DB_OBJECTSTORE_NAME);\r\n}\r\nfunction _deleteDatabase() {\r\n    const request = indexedDB.deleteDatabase(DB_NAME);\r\n    return new DBPromise(request).toPromise();\r\n}\r\nfunction _openDatabase() {\r\n    const request = indexedDB.open(DB_NAME, DB_VERSION);\r\n    return new Promise((resolve, reject) => {\r\n        request.addEventListener('error', () => {\r\n            reject(request.error);\r\n        });\r\n        request.addEventListener('upgradeneeded', () => {\r\n            const db = request.result;\r\n            try {\r\n                db.createObjectStore(DB_OBJECTSTORE_NAME, { keyPath: DB_DATA_KEYPATH });\r\n            }\r\n            catch (e) {\r\n                reject(e);\r\n            }\r\n        });\r\n        request.addEventListener('success', async () => {\r\n            const db = request.result;\r\n            // Strange bug that occurs in Firefox when multiple tabs are opened at the\r\n            // same time. The only way to recover seems to be deleting the database\r\n            // and re-initializing it.\r\n            // https://github.com/firebase/firebase-js-sdk/issues/634\r\n            if (!db.objectStoreNames.contains(DB_OBJECTSTORE_NAME)) {\r\n                // Need to close the database or else you get a `blocked` event\r\n                db.close();\r\n                await _deleteDatabase();\r\n                resolve(await _openDatabase());\r\n            }\r\n            else {\r\n                resolve(db);\r\n            }\r\n        });\r\n    });\r\n}\r\nasync function _putObject(db, key, value) {\r\n    const request = getObjectStore(db, true).put({\r\n        [DB_DATA_KEYPATH]: key,\r\n        value\r\n    });\r\n    return new DBPromise(request).toPromise();\r\n}\r\nasync function getObject(db, key) {\r\n    const request = getObjectStore(db, false).get(key);\r\n    const data = await new DBPromise(request).toPromise();\r\n    return data === undefined ? null : data.value;\r\n}\r\nfunction _deleteObject(db, key) {\r\n    const request = getObjectStore(db, true).delete(key);\r\n    return new DBPromise(request).toPromise();\r\n}\r\nconst _POLLING_INTERVAL_MS = 800;\r\nconst _TRANSACTION_RETRY_COUNT = 3;\r\nclass IndexedDBLocalPersistence {\r\n    constructor() {\r\n        this.type = \"LOCAL\" /* LOCAL */;\r\n        this._shouldAllowMigration = true;\r\n        this.listeners = {};\r\n        this.localCache = {};\r\n        // setTimeout return value is platform specific\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        this.pollTimer = null;\r\n        this.pendingWrites = 0;\r\n        this.receiver = null;\r\n        this.sender = null;\r\n        this.serviceWorkerReceiverAvailable = false;\r\n        this.activeServiceWorker = null;\r\n        // Fire & forget the service worker registration as it may never resolve\r\n        this._workerInitializationPromise =\r\n            this.initializeServiceWorkerMessaging().then(() => { }, () => { });\r\n    }\r\n    async _openDb() {\r\n        if (this.db) {\r\n            return this.db;\r\n        }\r\n        this.db = await _openDatabase();\r\n        return this.db;\r\n    }\r\n    async _withRetries(op) {\r\n        let numAttempts = 0;\r\n        while (true) {\r\n            try {\r\n                const db = await this._openDb();\r\n                return await op(db);\r\n            }\r\n            catch (e) {\r\n                if (numAttempts++ > _TRANSACTION_RETRY_COUNT) {\r\n                    throw e;\r\n                }\r\n                if (this.db) {\r\n                    this.db.close();\r\n                    this.db = undefined;\r\n                }\r\n                // TODO: consider adding exponential backoff\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * IndexedDB events do not propagate from the main window to the worker context.  We rely on a\r\n     * postMessage interface to send these events to the worker ourselves.\r\n     */\r\n    async initializeServiceWorkerMessaging() {\r\n        return _isWorker() ? this.initializeReceiver() : this.initializeSender();\r\n    }\r\n    /**\r\n     * As the worker we should listen to events from the main window.\r\n     */\r\n    async initializeReceiver() {\r\n        this.receiver = Receiver._getInstance(_getWorkerGlobalScope());\r\n        // Refresh from persistence if we receive a KeyChanged message.\r\n        this.receiver._subscribe(\"keyChanged\" /* KEY_CHANGED */, async (_origin, data) => {\r\n            const keys = await this._poll();\r\n            return {\r\n                keyProcessed: keys.includes(data.key)\r\n            };\r\n        });\r\n        // Let the sender know that we are listening so they give us more timeout.\r\n        this.receiver._subscribe(\"ping\" /* PING */, async (_origin, _data) => {\r\n            return [\"keyChanged\" /* KEY_CHANGED */];\r\n        });\r\n    }\r\n    /**\r\n     * As the main window, we should let the worker know when keys change (set and remove).\r\n     *\r\n     * @remarks\r\n     * {@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/ready | ServiceWorkerContainer.ready}\r\n     * may not resolve.\r\n     */\r\n    async initializeSender() {\r\n        var _a, _b;\r\n        // Check to see if there's an active service worker.\r\n        this.activeServiceWorker = await _getActiveServiceWorker();\r\n        if (!this.activeServiceWorker) {\r\n            return;\r\n        }\r\n        this.sender = new Sender(this.activeServiceWorker);\r\n        // Ping the service worker to check what events they can handle.\r\n        const results = await this.sender._send(\"ping\" /* PING */, {}, 800 /* LONG_ACK */);\r\n        if (!results) {\r\n            return;\r\n        }\r\n        if (((_a = results[0]) === null || _a === void 0 ? void 0 : _a.fulfilled) &&\r\n            ((_b = results[0]) === null || _b === void 0 ? void 0 : _b.value.includes(\"keyChanged\" /* KEY_CHANGED */))) {\r\n            this.serviceWorkerReceiverAvailable = true;\r\n        }\r\n    }\r\n    /**\r\n     * Let the worker know about a changed key, the exact key doesn't technically matter since the\r\n     * worker will just trigger a full sync anyway.\r\n     *\r\n     * @remarks\r\n     * For now, we only support one service worker per page.\r\n     *\r\n     * @param key - Storage key which changed.\r\n     */\r\n    async notifyServiceWorker(key) {\r\n        if (!this.sender ||\r\n            !this.activeServiceWorker ||\r\n            _getServiceWorkerController() !== this.activeServiceWorker) {\r\n            return;\r\n        }\r\n        try {\r\n            await this.sender._send(\"keyChanged\" /* KEY_CHANGED */, { key }, \r\n            // Use long timeout if receiver has previously responded to a ping from us.\r\n            this.serviceWorkerReceiverAvailable\r\n                ? 800 /* LONG_ACK */\r\n                : 50 /* ACK */);\r\n        }\r\n        catch (_a) {\r\n            // This is a best effort approach. Ignore errors.\r\n        }\r\n    }\r\n    async _isAvailable() {\r\n        try {\r\n            if (!indexedDB) {\r\n                return false;\r\n            }\r\n            const db = await _openDatabase();\r\n            await _putObject(db, STORAGE_AVAILABLE_KEY, '1');\r\n            await _deleteObject(db, STORAGE_AVAILABLE_KEY);\r\n            return true;\r\n        }\r\n        catch (_a) { }\r\n        return false;\r\n    }\r\n    async _withPendingWrite(write) {\r\n        this.pendingWrites++;\r\n        try {\r\n            await write();\r\n        }\r\n        finally {\r\n            this.pendingWrites--;\r\n        }\r\n    }\r\n    async _set(key, value) {\r\n        return this._withPendingWrite(async () => {\r\n            await this._withRetries((db) => _putObject(db, key, value));\r\n            this.localCache[key] = value;\r\n            return this.notifyServiceWorker(key);\r\n        });\r\n    }\r\n    async _get(key) {\r\n        const obj = (await this._withRetries((db) => getObject(db, key)));\r\n        this.localCache[key] = obj;\r\n        return obj;\r\n    }\r\n    async _remove(key) {\r\n        return this._withPendingWrite(async () => {\r\n            await this._withRetries((db) => _deleteObject(db, key));\r\n            delete this.localCache[key];\r\n            return this.notifyServiceWorker(key);\r\n        });\r\n    }\r\n    async _poll() {\r\n        // TODO: check if we need to fallback if getAll is not supported\r\n        const result = await this._withRetries((db) => {\r\n            const getAllRequest = getObjectStore(db, false).getAll();\r\n            return new DBPromise(getAllRequest).toPromise();\r\n        });\r\n        if (!result) {\r\n            return [];\r\n        }\r\n        // If we have pending writes in progress abort, we'll get picked up on the next poll\r\n        if (this.pendingWrites !== 0) {\r\n            return [];\r\n        }\r\n        const keys = [];\r\n        const keysInResult = new Set();\r\n        for (const { fbase_key: key, value } of result) {\r\n            keysInResult.add(key);\r\n            if (JSON.stringify(this.localCache[key]) !== JSON.stringify(value)) {\r\n                this.notifyListeners(key, value);\r\n                keys.push(key);\r\n            }\r\n        }\r\n        for (const localKey of Object.keys(this.localCache)) {\r\n            if (this.localCache[localKey] && !keysInResult.has(localKey)) {\r\n                // Deleted\r\n                this.notifyListeners(localKey, null);\r\n                keys.push(localKey);\r\n            }\r\n        }\r\n        return keys;\r\n    }\r\n    notifyListeners(key, newValue) {\r\n        this.localCache[key] = newValue;\r\n        const listeners = this.listeners[key];\r\n        if (listeners) {\r\n            for (const listener of Array.from(listeners)) {\r\n                listener(newValue);\r\n            }\r\n        }\r\n    }\r\n    startPolling() {\r\n        this.stopPolling();\r\n        this.pollTimer = setInterval(async () => this._poll(), _POLLING_INTERVAL_MS);\r\n    }\r\n    stopPolling() {\r\n        if (this.pollTimer) {\r\n            clearInterval(this.pollTimer);\r\n            this.pollTimer = null;\r\n        }\r\n    }\r\n    _addListener(key, listener) {\r\n        if (Object.keys(this.listeners).length === 0) {\r\n            this.startPolling();\r\n        }\r\n        if (!this.listeners[key]) {\r\n            this.listeners[key] = new Set();\r\n            // Populate the cache to avoid spuriously triggering on first poll.\r\n            void this._get(key); // This can happen in the background async and we can return immediately.\r\n        }\r\n        this.listeners[key].add(listener);\r\n    }\r\n    _removeListener(key, listener) {\r\n        if (this.listeners[key]) {\r\n            this.listeners[key].delete(listener);\r\n            if (this.listeners[key].size === 0) {\r\n                delete this.listeners[key];\r\n            }\r\n        }\r\n        if (Object.keys(this.listeners).length === 0) {\r\n            this.stopPolling();\r\n        }\r\n    }\r\n}\r\nIndexedDBLocalPersistence.type = 'LOCAL';\r\n/**\r\n * An implementation of {@link Persistence} of type `LOCAL` using `indexedDB`\r\n * for the underlying storage.\r\n *\r\n * @public\r\n */\r\nconst indexedDBLocalPersistence = IndexedDBLocalPersistence;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction startSignInPhoneMfa(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v2/accounts/mfaSignIn:start\" /* START_PHONE_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\r\n}\r\nfunction finalizeSignInPhoneMfa(auth, request) {\r\n    return _performApiRequest(auth, \"POST\" /* POST */, \"/v2/accounts/mfaSignIn:finalize\" /* FINALIZE_PHONE_MFA_SIGN_IN */, _addTidIfNecessary(auth, request));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function getRecaptchaParams(auth) {\r\n    return ((await _performApiRequest(auth, \"GET\" /* GET */, \"/v1/recaptchaParams\" /* GET_RECAPTCHA_PARAM */)).recaptchaSiteKey || '');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getScriptParentElement() {\r\n    var _a, _b;\r\n    return (_b = (_a = document.getElementsByTagName('head')) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : document;\r\n}\r\nfunction _loadJS(url) {\r\n    // TODO: consider adding timeout support & cancellation\r\n    return new Promise((resolve, reject) => {\r\n        const el = document.createElement('script');\r\n        el.setAttribute('src', url);\r\n        el.onload = resolve;\r\n        el.onerror = e => {\r\n            const error = _createError(\"internal-error\" /* INTERNAL_ERROR */);\r\n            error.customData = e;\r\n            reject(error);\r\n        };\r\n        el.type = 'text/javascript';\r\n        el.charset = 'UTF-8';\r\n        getScriptParentElement().appendChild(el);\r\n    });\r\n}\r\nfunction _generateCallbackName(prefix) {\r\n    return `__${prefix}${Math.floor(Math.random() * 1000000)}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _SOLVE_TIME_MS = 500;\r\nconst _EXPIRATION_TIME_MS = 60000;\r\nconst _WIDGET_ID_START = 1000000000000;\r\nclass MockReCaptcha {\r\n    constructor(auth) {\r\n        this.auth = auth;\r\n        this.counter = _WIDGET_ID_START;\r\n        this._widgets = new Map();\r\n    }\r\n    render(container, parameters) {\r\n        const id = this.counter;\r\n        this._widgets.set(id, new MockWidget(container, this.auth.name, parameters || {}));\r\n        this.counter++;\r\n        return id;\r\n    }\r\n    reset(optWidgetId) {\r\n        var _a;\r\n        const id = optWidgetId || _WIDGET_ID_START;\r\n        void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.delete());\r\n        this._widgets.delete(id);\r\n    }\r\n    getResponse(optWidgetId) {\r\n        var _a;\r\n        const id = optWidgetId || _WIDGET_ID_START;\r\n        return ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.getResponse()) || '';\r\n    }\r\n    async execute(optWidgetId) {\r\n        var _a;\r\n        const id = optWidgetId || _WIDGET_ID_START;\r\n        void ((_a = this._widgets.get(id)) === null || _a === void 0 ? void 0 : _a.execute());\r\n        return '';\r\n    }\r\n}\r\nclass MockWidget {\r\n    constructor(containerOrId, appName, params) {\r\n        this.params = params;\r\n        this.timerId = null;\r\n        this.deleted = false;\r\n        this.responseToken = null;\r\n        this.clickHandler = () => {\r\n            this.execute();\r\n        };\r\n        const container = typeof containerOrId === 'string'\r\n            ? document.getElementById(containerOrId)\r\n            : containerOrId;\r\n        _assert(container, \"argument-error\" /* ARGUMENT_ERROR */, { appName });\r\n        this.container = container;\r\n        this.isVisible = this.params.size !== 'invisible';\r\n        if (this.isVisible) {\r\n            this.execute();\r\n        }\r\n        else {\r\n            this.container.addEventListener('click', this.clickHandler);\r\n        }\r\n    }\r\n    getResponse() {\r\n        this.checkIfDeleted();\r\n        return this.responseToken;\r\n    }\r\n    delete() {\r\n        this.checkIfDeleted();\r\n        this.deleted = true;\r\n        if (this.timerId) {\r\n            clearTimeout(this.timerId);\r\n            this.timerId = null;\r\n        }\r\n        this.container.removeEventListener('click', this.clickHandler);\r\n    }\r\n    execute() {\r\n        this.checkIfDeleted();\r\n        if (this.timerId) {\r\n            return;\r\n        }\r\n        this.timerId = window.setTimeout(() => {\r\n            this.responseToken = generateRandomAlphaNumericString(50);\r\n            const { callback, 'expired-callback': expiredCallback } = this.params;\r\n            if (callback) {\r\n                try {\r\n                    callback(this.responseToken);\r\n                }\r\n                catch (e) { }\r\n            }\r\n            this.timerId = window.setTimeout(() => {\r\n                this.timerId = null;\r\n                this.responseToken = null;\r\n                if (expiredCallback) {\r\n                    try {\r\n                        expiredCallback();\r\n                    }\r\n                    catch (e) { }\r\n                }\r\n                if (this.isVisible) {\r\n                    this.execute();\r\n                }\r\n            }, _EXPIRATION_TIME_MS);\r\n        }, _SOLVE_TIME_MS);\r\n    }\r\n    checkIfDeleted() {\r\n        if (this.deleted) {\r\n            throw new Error('reCAPTCHA mock was already deleted!');\r\n        }\r\n    }\r\n}\r\nfunction generateRandomAlphaNumericString(len) {\r\n    const chars = [];\r\n    const allowedChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n    for (let i = 0; i < len; i++) {\r\n        chars.push(allowedChars.charAt(Math.floor(Math.random() * allowedChars.length)));\r\n    }\r\n    return chars.join('');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// ReCaptcha will load using the same callback, so the callback function needs\r\n// to be kept around\r\nconst _JSLOAD_CALLBACK = _generateCallbackName('rcb');\r\nconst NETWORK_TIMEOUT_DELAY = new Delay(30000, 60000);\r\nconst RECAPTCHA_BASE = 'https://www.google.com/recaptcha/api.js?';\r\n/**\r\n * Loader for the GReCaptcha library. There should only ever be one of this.\r\n */\r\nclass ReCaptchaLoaderImpl {\r\n    constructor() {\r\n        var _a;\r\n        this.hostLanguage = '';\r\n        this.counter = 0;\r\n        /**\r\n         * Check for `render()` method. `window.grecaptcha` will exist if the Enterprise\r\n         * version of the ReCAPTCHA script was loaded by someone else (e.g. App Check) but\r\n         * `window.grecaptcha.render()` will not. Another load will add it.\r\n         */\r\n        this.librarySeparatelyLoaded = !!((_a = _window().grecaptcha) === null || _a === void 0 ? void 0 : _a.render);\r\n    }\r\n    load(auth, hl = '') {\r\n        _assert(isHostLanguageValid(hl), auth, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        if (this.shouldResolveImmediately(hl)) {\r\n            return Promise.resolve(_window().grecaptcha);\r\n        }\r\n        return new Promise((resolve, reject) => {\r\n            const networkTimeout = _window().setTimeout(() => {\r\n                reject(_createError(auth, \"network-request-failed\" /* NETWORK_REQUEST_FAILED */));\r\n            }, NETWORK_TIMEOUT_DELAY.get());\r\n            _window()[_JSLOAD_CALLBACK] = () => {\r\n                _window().clearTimeout(networkTimeout);\r\n                delete _window()[_JSLOAD_CALLBACK];\r\n                const recaptcha = _window().grecaptcha;\r\n                if (!recaptcha) {\r\n                    reject(_createError(auth, \"internal-error\" /* INTERNAL_ERROR */));\r\n                    return;\r\n                }\r\n                // Wrap the greptcha render function so that we know if the developer has\r\n                // called it separately\r\n                const render = recaptcha.render;\r\n                recaptcha.render = (container, params) => {\r\n                    const widgetId = render(container, params);\r\n                    this.counter++;\r\n                    return widgetId;\r\n                };\r\n                this.hostLanguage = hl;\r\n                resolve(recaptcha);\r\n            };\r\n            const url = `${RECAPTCHA_BASE}?${querystring({\r\n                onload: _JSLOAD_CALLBACK,\r\n                render: 'explicit',\r\n                hl\r\n            })}`;\r\n            _loadJS(url).catch(() => {\r\n                clearTimeout(networkTimeout);\r\n                reject(_createError(auth, \"internal-error\" /* INTERNAL_ERROR */));\r\n            });\r\n        });\r\n    }\r\n    clearedOneInstance() {\r\n        this.counter--;\r\n    }\r\n    shouldResolveImmediately(hl) {\r\n        var _a;\r\n        // We can resolve immediately if:\r\n        //   • grecaptcha is already defined AND (\r\n        //     1. the requested language codes are the same OR\r\n        //     2. there exists already a ReCaptcha on the page\r\n        //     3. the library was already loaded by the app\r\n        // In cases (2) and (3), we _can't_ reload as it would break the recaptchas\r\n        // that are already in the page\r\n        return (!!((_a = _window().grecaptcha) === null || _a === void 0 ? void 0 : _a.render) &&\r\n            (hl === this.hostLanguage ||\r\n                this.counter > 0 ||\r\n                this.librarySeparatelyLoaded));\r\n    }\r\n}\r\nfunction isHostLanguageValid(hl) {\r\n    return hl.length <= 6 && /^\\s*[a-zA-Z0-9\\-]*\\s*$/.test(hl);\r\n}\r\nclass MockReCaptchaLoaderImpl {\r\n    async load(auth) {\r\n        return new MockReCaptcha(auth);\r\n    }\r\n    clearedOneInstance() { }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst RECAPTCHA_VERIFIER_TYPE = 'recaptcha';\r\nconst DEFAULT_PARAMS = {\r\n    theme: 'light',\r\n    type: 'image'\r\n};\r\n/**\r\n * An {@link https://www.google.com/recaptcha/ | reCAPTCHA}-based application verifier.\r\n *\r\n * @public\r\n */\r\nclass RecaptchaVerifier {\r\n    /**\r\n     *\r\n     * @param containerOrId - The reCAPTCHA container parameter.\r\n     *\r\n     * @remarks\r\n     * This has different meaning depending on whether the reCAPTCHA is hidden or visible. For a\r\n     * visible reCAPTCHA the container must be empty. If a string is used, it has to correspond to\r\n     * an element ID. The corresponding element must also must be in the DOM at the time of\r\n     * initialization.\r\n     *\r\n     * @param parameters - The optional reCAPTCHA parameters.\r\n     *\r\n     * @remarks\r\n     * Check the reCAPTCHA docs for a comprehensive list. All parameters are accepted except for\r\n     * the sitekey. Firebase Auth backend provisions a reCAPTCHA for each project and will\r\n     * configure this upon rendering. For an invisible reCAPTCHA, a size key must have the value\r\n     * 'invisible'.\r\n     *\r\n     * @param authExtern - The corresponding Firebase {@link Auth} instance.\r\n     *\r\n     * @remarks\r\n     * If none is provided, the default Firebase {@link Auth} instance is used. A Firebase {@link Auth} instance\r\n     * must be initialized with an API key, otherwise an error will be thrown.\r\n     */\r\n    constructor(containerOrId, parameters = Object.assign({}, DEFAULT_PARAMS), authExtern) {\r\n        this.parameters = parameters;\r\n        /**\r\n         * The application verifier type.\r\n         *\r\n         * @remarks\r\n         * For a reCAPTCHA verifier, this is 'recaptcha'.\r\n         */\r\n        this.type = RECAPTCHA_VERIFIER_TYPE;\r\n        this.destroyed = false;\r\n        this.widgetId = null;\r\n        this.tokenChangeListeners = new Set();\r\n        this.renderPromise = null;\r\n        this.recaptcha = null;\r\n        this.auth = _castAuth(authExtern);\r\n        this.isInvisible = this.parameters.size === 'invisible';\r\n        _assert(typeof document !== 'undefined', this.auth, \"operation-not-supported-in-this-environment\" /* OPERATION_NOT_SUPPORTED */);\r\n        const container = typeof containerOrId === 'string'\r\n            ? document.getElementById(containerOrId)\r\n            : containerOrId;\r\n        _assert(container, this.auth, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        this.container = container;\r\n        this.parameters.callback = this.makeTokenCallback(this.parameters.callback);\r\n        this._recaptchaLoader = this.auth.settings.appVerificationDisabledForTesting\r\n            ? new MockReCaptchaLoaderImpl()\r\n            : new ReCaptchaLoaderImpl();\r\n        this.validateStartingState();\r\n        // TODO: Figure out if sdk version is needed\r\n    }\r\n    /**\r\n     * Waits for the user to solve the reCAPTCHA and resolves with the reCAPTCHA token.\r\n     *\r\n     * @returns A Promise for the reCAPTCHA token.\r\n     */\r\n    async verify() {\r\n        this.assertNotDestroyed();\r\n        const id = await this.render();\r\n        const recaptcha = this.getAssertedRecaptcha();\r\n        const response = recaptcha.getResponse(id);\r\n        if (response) {\r\n            return response;\r\n        }\r\n        return new Promise(resolve => {\r\n            const tokenChange = (token) => {\r\n                if (!token) {\r\n                    return; // Ignore token expirations.\r\n                }\r\n                this.tokenChangeListeners.delete(tokenChange);\r\n                resolve(token);\r\n            };\r\n            this.tokenChangeListeners.add(tokenChange);\r\n            if (this.isInvisible) {\r\n                recaptcha.execute(id);\r\n            }\r\n        });\r\n    }\r\n    /**\r\n     * Renders the reCAPTCHA widget on the page.\r\n     *\r\n     * @returns A Promise that resolves with the reCAPTCHA widget ID.\r\n     */\r\n    render() {\r\n        try {\r\n            this.assertNotDestroyed();\r\n        }\r\n        catch (e) {\r\n            // This method returns a promise. Since it's not async (we want to return the\r\n            // _same_ promise if rendering is still occurring), the API surface should\r\n            // reject with the error rather than just throw\r\n            return Promise.reject(e);\r\n        }\r\n        if (this.renderPromise) {\r\n            return this.renderPromise;\r\n        }\r\n        this.renderPromise = this.makeRenderPromise().catch(e => {\r\n            this.renderPromise = null;\r\n            throw e;\r\n        });\r\n        return this.renderPromise;\r\n    }\r\n    /** @internal */\r\n    _reset() {\r\n        this.assertNotDestroyed();\r\n        if (this.widgetId !== null) {\r\n            this.getAssertedRecaptcha().reset(this.widgetId);\r\n        }\r\n    }\r\n    /**\r\n     * Clears the reCAPTCHA widget from the page and destroys the instance.\r\n     */\r\n    clear() {\r\n        this.assertNotDestroyed();\r\n        this.destroyed = true;\r\n        this._recaptchaLoader.clearedOneInstance();\r\n        if (!this.isInvisible) {\r\n            this.container.childNodes.forEach(node => {\r\n                this.container.removeChild(node);\r\n            });\r\n        }\r\n    }\r\n    validateStartingState() {\r\n        _assert(!this.parameters.sitekey, this.auth, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        _assert(this.isInvisible || !this.container.hasChildNodes(), this.auth, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        _assert(typeof document !== 'undefined', this.auth, \"operation-not-supported-in-this-environment\" /* OPERATION_NOT_SUPPORTED */);\r\n    }\r\n    makeTokenCallback(existing) {\r\n        return token => {\r\n            this.tokenChangeListeners.forEach(listener => listener(token));\r\n            if (typeof existing === 'function') {\r\n                existing(token);\r\n            }\r\n            else if (typeof existing === 'string') {\r\n                const globalFunc = _window()[existing];\r\n                if (typeof globalFunc === 'function') {\r\n                    globalFunc(token);\r\n                }\r\n            }\r\n        };\r\n    }\r\n    assertNotDestroyed() {\r\n        _assert(!this.destroyed, this.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n    }\r\n    async makeRenderPromise() {\r\n        await this.init();\r\n        if (!this.widgetId) {\r\n            let container = this.container;\r\n            if (!this.isInvisible) {\r\n                const guaranteedEmpty = document.createElement('div');\r\n                container.appendChild(guaranteedEmpty);\r\n                container = guaranteedEmpty;\r\n            }\r\n            this.widgetId = this.getAssertedRecaptcha().render(container, this.parameters);\r\n        }\r\n        return this.widgetId;\r\n    }\r\n    async init() {\r\n        _assert(_isHttpOrHttps() && !_isWorker(), this.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        await domReady();\r\n        this.recaptcha = await this._recaptchaLoader.load(this.auth, this.auth.languageCode || undefined);\r\n        const siteKey = await getRecaptchaParams(this.auth);\r\n        _assert(siteKey, this.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        this.parameters.sitekey = siteKey;\r\n    }\r\n    getAssertedRecaptcha() {\r\n        _assert(this.recaptcha, this.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        return this.recaptcha;\r\n    }\r\n}\r\nfunction domReady() {\r\n    let resolver = null;\r\n    return new Promise(resolve => {\r\n        if (document.readyState === 'complete') {\r\n            resolve();\r\n            return;\r\n        }\r\n        // Document not ready, wait for load before resolving.\r\n        // Save resolver, so we can remove listener in case it was externally\r\n        // cancelled.\r\n        resolver = () => resolve();\r\n        window.addEventListener('load', resolver);\r\n    }).catch(e => {\r\n        if (resolver) {\r\n            window.removeEventListener('load', resolver);\r\n        }\r\n        throw e;\r\n    });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ConfirmationResultImpl {\r\n    constructor(verificationId, onConfirmation) {\r\n        this.verificationId = verificationId;\r\n        this.onConfirmation = onConfirmation;\r\n    }\r\n    confirm(verificationCode) {\r\n        const authCredential = PhoneAuthCredential._fromVerification(this.verificationId, verificationCode);\r\n        return this.onConfirmation(authCredential);\r\n    }\r\n}\r\n/**\r\n * Asynchronously signs in using a phone number.\r\n *\r\n * @remarks\r\n * This method sends a code via SMS to the given\r\n * phone number, and returns a {@link ConfirmationResult}. After the user\r\n * provides the code sent to their phone, call {@link ConfirmationResult.confirm}\r\n * with the code to sign the user in.\r\n *\r\n * For abuse prevention, this method also requires a {@link ApplicationVerifier}.\r\n * This SDK includes a reCAPTCHA-based implementation, {@link RecaptchaVerifier}.\r\n * This function can work on other platforms that do not support the\r\n * {@link RecaptchaVerifier} (like React Native), but you need to use a\r\n * third-party {@link ApplicationVerifier} implementation.\r\n *\r\n * @example\r\n * ```javascript\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-container');\r\n * const confirmationResult = await signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n * // Obtain a verificationCode from the user.\r\n * const credential = await confirmationResult.confirm(verificationCode);\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function signInWithPhoneNumber(auth, phoneNumber, appVerifier) {\r\n    const authInternal = _castAuth(auth);\r\n    const verificationId = await _verifyPhoneNumber(authInternal, phoneNumber, getModularInstance(appVerifier));\r\n    return new ConfirmationResultImpl(verificationId, cred => signInWithCredential(authInternal, cred));\r\n}\r\n/**\r\n * Links the user account with the given phone number.\r\n *\r\n * @param user - The user.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function linkWithPhoneNumber(user, phoneNumber, appVerifier) {\r\n    const userInternal = getModularInstance(user);\r\n    await _assertLinkedStatus(false, userInternal, \"phone\" /* PHONE */);\r\n    const verificationId = await _verifyPhoneNumber(userInternal.auth, phoneNumber, getModularInstance(appVerifier));\r\n    return new ConfirmationResultImpl(verificationId, cred => linkWithCredential(userInternal, cred));\r\n}\r\n/**\r\n * Re-authenticates a user using a fresh phone credential.\r\n *\r\n * @remarks Use before operations such as {@link updatePassword} that require tokens from recent sign-in attempts.\r\n *\r\n * @param user - The user.\r\n * @param phoneNumber - The user's phone number in E.164 format (e.g. +16505550101).\r\n * @param appVerifier - The {@link ApplicationVerifier}.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithPhoneNumber(user, phoneNumber, appVerifier) {\r\n    const userInternal = getModularInstance(user);\r\n    const verificationId = await _verifyPhoneNumber(userInternal.auth, phoneNumber, getModularInstance(appVerifier));\r\n    return new ConfirmationResultImpl(verificationId, cred => reauthenticateWithCredential(userInternal, cred));\r\n}\r\n/**\r\n * Returns a verification ID to be used in conjunction with the SMS code that is sent.\r\n *\r\n */\r\nasync function _verifyPhoneNumber(auth, options, verifier) {\r\n    var _a;\r\n    const recaptchaToken = await verifier.verify();\r\n    try {\r\n        _assert(typeof recaptchaToken === 'string', auth, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        _assert(verifier.type === RECAPTCHA_VERIFIER_TYPE, auth, \"argument-error\" /* ARGUMENT_ERROR */);\r\n        let phoneInfoOptions;\r\n        if (typeof options === 'string') {\r\n            phoneInfoOptions = {\r\n                phoneNumber: options\r\n            };\r\n        }\r\n        else {\r\n            phoneInfoOptions = options;\r\n        }\r\n        if ('session' in phoneInfoOptions) {\r\n            const session = phoneInfoOptions.session;\r\n            if ('phoneNumber' in phoneInfoOptions) {\r\n                _assert(session.type === \"enroll\" /* ENROLL */, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n                const response = await startEnrollPhoneMfa(auth, {\r\n                    idToken: session.credential,\r\n                    phoneEnrollmentInfo: {\r\n                        phoneNumber: phoneInfoOptions.phoneNumber,\r\n                        recaptchaToken\r\n                    }\r\n                });\r\n                return response.phoneSessionInfo.sessionInfo;\r\n            }\r\n            else {\r\n                _assert(session.type === \"signin\" /* SIGN_IN */, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n                const mfaEnrollmentId = ((_a = phoneInfoOptions.multiFactorHint) === null || _a === void 0 ? void 0 : _a.uid) ||\r\n                    phoneInfoOptions.multiFactorUid;\r\n                _assert(mfaEnrollmentId, auth, \"missing-multi-factor-info\" /* MISSING_MFA_INFO */);\r\n                const response = await startSignInPhoneMfa(auth, {\r\n                    mfaPendingCredential: session.credential,\r\n                    mfaEnrollmentId,\r\n                    phoneSignInInfo: {\r\n                        recaptchaToken\r\n                    }\r\n                });\r\n                return response.phoneResponseInfo.sessionInfo;\r\n            }\r\n        }\r\n        else {\r\n            const { sessionInfo } = await sendPhoneVerificationCode(auth, {\r\n                phoneNumber: phoneInfoOptions.phoneNumber,\r\n                recaptchaToken\r\n            });\r\n            return sessionInfo;\r\n        }\r\n    }\r\n    finally {\r\n        verifier._reset();\r\n    }\r\n}\r\n/**\r\n * Updates the user's phone number.\r\n *\r\n * @example\r\n * ```\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new RecaptchaVerifier('recaptcha-container');\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber('+16505550101', applicationVerifier);\r\n * // Obtain the verificationCode from the user.\r\n * const phoneCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * await updatePhoneNumber(user, phoneCredential);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param credential - A credential authenticating the new phone number.\r\n *\r\n * @public\r\n */\r\nasync function updatePhoneNumber(user, credential) {\r\n    await _link$1(getModularInstance(user), credential);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for generating an {@link PhoneAuthCredential}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // 'recaptcha-container' is the ID of an element in the DOM.\r\n * const applicationVerifier = new RecaptchaVerifier('recaptcha-container');\r\n * const provider = new PhoneAuthProvider(auth);\r\n * const verificationId = await provider.verifyPhoneNumber('+16505550101', applicationVerifier);\r\n * // Obtain the verificationCode from the user.\r\n * const phoneCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n * const userCredential = await signInWithCredential(auth, phoneCredential);\r\n * ```\r\n *\r\n * @public\r\n */\r\nclass PhoneAuthProvider {\r\n    /**\r\n     * @param auth - The Firebase {@link Auth} instance in which sign-ins should occur.\r\n     *\r\n     */\r\n    constructor(auth) {\r\n        /** Always set to {@link ProviderId}.PHONE. */\r\n        this.providerId = PhoneAuthProvider.PROVIDER_ID;\r\n        this.auth = _castAuth(auth);\r\n    }\r\n    /**\r\n     *\r\n     * Starts a phone number authentication flow by sending a verification code to the given phone\r\n     * number.\r\n     *\r\n     * @example\r\n     * ```javascript\r\n     * const provider = new PhoneAuthProvider(auth);\r\n     * const verificationId = await provider.verifyPhoneNumber(phoneNumber, applicationVerifier);\r\n     * // Obtain verificationCode from the user.\r\n     * const authCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n     * const userCredential = await signInWithCredential(auth, authCredential);\r\n     * ```\r\n     *\r\n     * @example\r\n     * An alternative flow is provided using the `signInWithPhoneNumber` method.\r\n     * ```javascript\r\n     * const confirmationResult = signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n     * // Obtain verificationCode from the user.\r\n     * const userCredential = confirmationResult.confirm(verificationCode);\r\n     * ```\r\n     *\r\n     * @param phoneInfoOptions - The user's {@link PhoneInfoOptions}. The phone number should be in\r\n     * E.164 format (e.g. +16505550101).\r\n     * @param applicationVerifier - For abuse prevention, this method also requires a\r\n     * {@link ApplicationVerifier}. This SDK includes a reCAPTCHA-based implementation,\r\n     * {@link RecaptchaVerifier}.\r\n     *\r\n     * @returns A Promise for a verification ID that can be passed to\r\n     * {@link PhoneAuthProvider.credential} to identify this flow..\r\n     */\r\n    verifyPhoneNumber(phoneOptions, applicationVerifier) {\r\n        return _verifyPhoneNumber(this.auth, phoneOptions, getModularInstance(applicationVerifier));\r\n    }\r\n    /**\r\n     * Creates a phone auth credential, given the verification ID from\r\n     * {@link PhoneAuthProvider.verifyPhoneNumber} and the code that was sent to the user's\r\n     * mobile device.\r\n     *\r\n     * @example\r\n     * ```javascript\r\n     * const provider = new PhoneAuthProvider(auth);\r\n     * const verificationId = provider.verifyPhoneNumber(phoneNumber, applicationVerifier);\r\n     * // Obtain verificationCode from the user.\r\n     * const authCredential = PhoneAuthProvider.credential(verificationId, verificationCode);\r\n     * const userCredential = signInWithCredential(auth, authCredential);\r\n     * ```\r\n     *\r\n     * @example\r\n     * An alternative flow is provided using the `signInWithPhoneNumber` method.\r\n     * ```javascript\r\n     * const confirmationResult = await signInWithPhoneNumber(auth, phoneNumber, applicationVerifier);\r\n     * // Obtain verificationCode from the user.\r\n     * const userCredential = await confirmationResult.confirm(verificationCode);\r\n     * ```\r\n     *\r\n     * @param verificationId - The verification ID returned from {@link PhoneAuthProvider.verifyPhoneNumber}.\r\n     * @param verificationCode - The verification code sent to the user's mobile device.\r\n     *\r\n     * @returns The auth provider credential.\r\n     */\r\n    static credential(verificationId, verificationCode) {\r\n        return PhoneAuthCredential._fromVerification(verificationId, verificationCode);\r\n    }\r\n    /**\r\n     * Generates an {@link AuthCredential} from a {@link UserCredential}.\r\n     * @param userCredential - The user credential.\r\n     */\r\n    static credentialFromResult(userCredential) {\r\n        const credential = userCredential;\r\n        return PhoneAuthProvider.credentialFromTaggedObject(credential);\r\n    }\r\n    /**\r\n     * Returns an {@link AuthCredential} when passed an error.\r\n     *\r\n     * @remarks\r\n     *\r\n     * This method works for errors like\r\n     * `auth/account-exists-with-different-credentials`. This is useful for\r\n     * recovering when attempting to set a user's phone number but the number\r\n     * in question is already tied to another account. For example, the following\r\n     * code tries to update the current user's phone number, and if that\r\n     * fails, links the user with the account associated with that number:\r\n     *\r\n     * ```js\r\n     * const provider = new PhoneAuthProvider(auth);\r\n     * const verificationId = await provider.verifyPhoneNumber(number, verifier);\r\n     * try {\r\n     *   const code = ''; // Prompt the user for the verification code\r\n     *   await updatePhoneNumber(\r\n     *       auth.currentUser,\r\n     *       PhoneAuthProvider.credential(verificationId, code));\r\n     * } catch (e) {\r\n     *   if ((e as FirebaseError)?.code === 'auth/account-exists-with-different-credential') {\r\n     *     const cred = PhoneAuthProvider.credentialFromError(e);\r\n     *     await linkWithCredential(auth.currentUser, cred);\r\n     *   }\r\n     * }\r\n     *\r\n     * // At this point, auth.currentUser.phoneNumber === number.\r\n     * ```\r\n     *\r\n     * @param error - The error to generate a credential from.\r\n     */\r\n    static credentialFromError(error) {\r\n        return PhoneAuthProvider.credentialFromTaggedObject((error.customData || {}));\r\n    }\r\n    static credentialFromTaggedObject({ _tokenResponse: tokenResponse }) {\r\n        if (!tokenResponse) {\r\n            return null;\r\n        }\r\n        const { phoneNumber, temporaryProof } = tokenResponse;\r\n        if (phoneNumber && temporaryProof) {\r\n            return PhoneAuthCredential._fromTokenResponse(phoneNumber, temporaryProof);\r\n        }\r\n        return null;\r\n    }\r\n}\r\n/** Always set to {@link ProviderId}.PHONE. */\r\nPhoneAuthProvider.PROVIDER_ID = \"phone\" /* PHONE */;\r\n/** Always set to {@link SignInMethod}.PHONE. */\r\nPhoneAuthProvider.PHONE_SIGN_IN_METHOD = \"phone\" /* PHONE */;\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Chooses a popup/redirect resolver to use. This prefers the override (which\r\n * is directly passed in), and falls back to the property set on the auth\r\n * object. If neither are available, this function errors w/ an argument error.\r\n */\r\nfunction _withDefaultResolver(auth, resolverOverride) {\r\n    if (resolverOverride) {\r\n        return _getInstance(resolverOverride);\r\n    }\r\n    _assert(auth._popupRedirectResolver, auth, \"argument-error\" /* ARGUMENT_ERROR */);\r\n    return auth._popupRedirectResolver;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass IdpCredential extends AuthCredential {\r\n    constructor(params) {\r\n        super(\"custom\" /* CUSTOM */, \"custom\" /* CUSTOM */);\r\n        this.params = params;\r\n    }\r\n    _getIdTokenResponse(auth) {\r\n        return signInWithIdp(auth, this._buildIdpRequest());\r\n    }\r\n    _linkToIdToken(auth, idToken) {\r\n        return signInWithIdp(auth, this._buildIdpRequest(idToken));\r\n    }\r\n    _getReauthenticationResolver(auth) {\r\n        return signInWithIdp(auth, this._buildIdpRequest());\r\n    }\r\n    _buildIdpRequest(idToken) {\r\n        const request = {\r\n            requestUri: this.params.requestUri,\r\n            sessionId: this.params.sessionId,\r\n            postBody: this.params.postBody,\r\n            tenantId: this.params.tenantId,\r\n            pendingToken: this.params.pendingToken,\r\n            returnSecureToken: true,\r\n            returnIdpCredential: true\r\n        };\r\n        if (idToken) {\r\n            request.idToken = idToken;\r\n        }\r\n        return request;\r\n    }\r\n}\r\nfunction _signIn(params) {\r\n    return _signInWithCredential(params.auth, new IdpCredential(params), params.bypassAuthState);\r\n}\r\nfunction _reauth(params) {\r\n    const { auth, user } = params;\r\n    _assert(user, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n    return _reauthenticate(user, new IdpCredential(params), params.bypassAuthState);\r\n}\r\nasync function _link(params) {\r\n    const { auth, user } = params;\r\n    _assert(user, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n    return _link$1(user, new IdpCredential(params), params.bypassAuthState);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Popup event manager. Handles the popup's entire lifecycle; listens to auth\r\n * events\r\n */\r\nclass AbstractPopupRedirectOperation {\r\n    constructor(auth, filter, resolver, user, bypassAuthState = false) {\r\n        this.auth = auth;\r\n        this.resolver = resolver;\r\n        this.user = user;\r\n        this.bypassAuthState = bypassAuthState;\r\n        this.pendingPromise = null;\r\n        this.eventManager = null;\r\n        this.filter = Array.isArray(filter) ? filter : [filter];\r\n    }\r\n    execute() {\r\n        return new Promise(async (resolve, reject) => {\r\n            this.pendingPromise = { resolve, reject };\r\n            try {\r\n                this.eventManager = await this.resolver._initialize(this.auth);\r\n                await this.onExecution();\r\n                this.eventManager.registerConsumer(this);\r\n            }\r\n            catch (e) {\r\n                this.reject(e);\r\n            }\r\n        });\r\n    }\r\n    async onAuthEvent(event) {\r\n        const { urlResponse, sessionId, postBody, tenantId, error, type } = event;\r\n        if (error) {\r\n            this.reject(error);\r\n            return;\r\n        }\r\n        const params = {\r\n            auth: this.auth,\r\n            requestUri: urlResponse,\r\n            sessionId: sessionId,\r\n            tenantId: tenantId || undefined,\r\n            postBody: postBody || undefined,\r\n            user: this.user,\r\n            bypassAuthState: this.bypassAuthState\r\n        };\r\n        try {\r\n            this.resolve(await this.getIdpTask(type)(params));\r\n        }\r\n        catch (e) {\r\n            this.reject(e);\r\n        }\r\n    }\r\n    onError(error) {\r\n        this.reject(error);\r\n    }\r\n    getIdpTask(type) {\r\n        switch (type) {\r\n            case \"signInViaPopup\" /* SIGN_IN_VIA_POPUP */:\r\n            case \"signInViaRedirect\" /* SIGN_IN_VIA_REDIRECT */:\r\n                return _signIn;\r\n            case \"linkViaPopup\" /* LINK_VIA_POPUP */:\r\n            case \"linkViaRedirect\" /* LINK_VIA_REDIRECT */:\r\n                return _link;\r\n            case \"reauthViaPopup\" /* REAUTH_VIA_POPUP */:\r\n            case \"reauthViaRedirect\" /* REAUTH_VIA_REDIRECT */:\r\n                return _reauth;\r\n            default:\r\n                _fail(this.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        }\r\n    }\r\n    resolve(cred) {\r\n        debugAssert(this.pendingPromise, 'Pending promise was never set');\r\n        this.pendingPromise.resolve(cred);\r\n        this.unregisterAndCleanUp();\r\n    }\r\n    reject(error) {\r\n        debugAssert(this.pendingPromise, 'Pending promise was never set');\r\n        this.pendingPromise.reject(error);\r\n        this.unregisterAndCleanUp();\r\n    }\r\n    unregisterAndCleanUp() {\r\n        if (this.eventManager) {\r\n            this.eventManager.unregisterConsumer(this);\r\n        }\r\n        this.pendingPromise = null;\r\n        this.cleanUp();\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _POLL_WINDOW_CLOSE_TIMEOUT = new Delay(2000, 10000);\r\n/**\r\n * Authenticates a Firebase client using a popup-based OAuth authentication flow.\r\n *\r\n * @remarks\r\n * If succeeds, returns the signed in user along with the provider's credential. If sign in was\r\n * unsuccessful, returns an error object containing additional information about the error.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n *\r\n * // The signed-in user info.\r\n * const user = result.user;\r\n * // This gives you a Facebook Access Token.\r\n * const credential = provider.credentialFromResult(auth, result);\r\n * const token = credential.accessToken;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n *\r\n * @public\r\n */\r\nasync function signInWithPopup(auth, provider, resolver) {\r\n    const authInternal = _castAuth(auth);\r\n    _assertInstanceOf(auth, provider, FederatedAuthProvider);\r\n    const resolverInternal = _withDefaultResolver(authInternal, resolver);\r\n    const action = new PopupOperation(authInternal, \"signInViaPopup\" /* SIGN_IN_VIA_POPUP */, provider, resolverInternal);\r\n    return action.executeNotNull();\r\n}\r\n/**\r\n * Reauthenticates the current user with the specified {@link OAuthProvider} using a pop-up based\r\n * OAuth flow.\r\n *\r\n * @remarks\r\n * If the reauthentication is successful, the returned result will contain the user and the\r\n * provider's credential.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithPopup(auth, provider);\r\n * // Reauthenticate using a popup.\r\n * await reauthenticateWithPopup(result.user, provider);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function reauthenticateWithPopup(user, provider, resolver) {\r\n    const userInternal = getModularInstance(user);\r\n    _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n    const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n    const action = new PopupOperation(userInternal.auth, \"reauthViaPopup\" /* REAUTH_VIA_POPUP */, provider, resolverInternal, userInternal);\r\n    return action.executeNotNull();\r\n}\r\n/**\r\n * Links the authenticated provider to the user account using a pop-up based OAuth flow.\r\n *\r\n * @remarks\r\n * If the linking is successful, the returned result will contain the user and the provider's credential.\r\n *\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using some other provider.\r\n * const result = await signInWithEmailAndPassword(auth, email, password);\r\n * // Link using a popup.\r\n * const provider = new FacebookAuthProvider();\r\n * await linkWithPopup(result.user, provider);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function linkWithPopup(user, provider, resolver) {\r\n    const userInternal = getModularInstance(user);\r\n    _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n    const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n    const action = new PopupOperation(userInternal.auth, \"linkViaPopup\" /* LINK_VIA_POPUP */, provider, resolverInternal, userInternal);\r\n    return action.executeNotNull();\r\n}\r\n/**\r\n * Popup event manager. Handles the popup's entire lifecycle; listens to auth\r\n * events\r\n *\r\n */\r\nclass PopupOperation extends AbstractPopupRedirectOperation {\r\n    constructor(auth, filter, provider, resolver, user) {\r\n        super(auth, filter, resolver, user);\r\n        this.provider = provider;\r\n        this.authWindow = null;\r\n        this.pollId = null;\r\n        if (PopupOperation.currentPopupAction) {\r\n            PopupOperation.currentPopupAction.cancel();\r\n        }\r\n        PopupOperation.currentPopupAction = this;\r\n    }\r\n    async executeNotNull() {\r\n        const result = await this.execute();\r\n        _assert(result, this.auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        return result;\r\n    }\r\n    async onExecution() {\r\n        debugAssert(this.filter.length === 1, 'Popup operations only handle one event');\r\n        const eventId = _generateEventId();\r\n        this.authWindow = await this.resolver._openPopup(this.auth, this.provider, this.filter[0], // There's always one, see constructor\r\n        eventId);\r\n        this.authWindow.associatedEvent = eventId;\r\n        // Check for web storage support and origin validation _after_ the popup is\r\n        // loaded. These operations are slow (~1 second or so) Rather than\r\n        // waiting on them before opening the window, optimistically open the popup\r\n        // and check for storage support at the same time. If storage support is\r\n        // not available, this will cause the whole thing to reject properly. It\r\n        // will also close the popup, but since the promise has already rejected,\r\n        // the popup closed by user poll will reject into the void.\r\n        this.resolver._originValidation(this.auth).catch(e => {\r\n            this.reject(e);\r\n        });\r\n        this.resolver._isIframeWebStorageSupported(this.auth, isSupported => {\r\n            if (!isSupported) {\r\n                this.reject(_createError(this.auth, \"web-storage-unsupported\" /* WEB_STORAGE_UNSUPPORTED */));\r\n            }\r\n        });\r\n        // Handle user closure. Notice this does *not* use await\r\n        this.pollUserCancellation();\r\n    }\r\n    get eventId() {\r\n        var _a;\r\n        return ((_a = this.authWindow) === null || _a === void 0 ? void 0 : _a.associatedEvent) || null;\r\n    }\r\n    cancel() {\r\n        this.reject(_createError(this.auth, \"cancelled-popup-request\" /* EXPIRED_POPUP_REQUEST */));\r\n    }\r\n    cleanUp() {\r\n        if (this.authWindow) {\r\n            this.authWindow.close();\r\n        }\r\n        if (this.pollId) {\r\n            window.clearTimeout(this.pollId);\r\n        }\r\n        this.authWindow = null;\r\n        this.pollId = null;\r\n        PopupOperation.currentPopupAction = null;\r\n    }\r\n    pollUserCancellation() {\r\n        const poll = () => {\r\n            var _a, _b;\r\n            if ((_b = (_a = this.authWindow) === null || _a === void 0 ? void 0 : _a.window) === null || _b === void 0 ? void 0 : _b.closed) {\r\n                // Make sure that there is sufficient time for whatever action to\r\n                // complete. The window could have closed but the sign in network\r\n                // call could still be in flight.\r\n                this.pollId = window.setTimeout(() => {\r\n                    this.pollId = null;\r\n                    this.reject(_createError(this.auth, \"popup-closed-by-user\" /* POPUP_CLOSED_BY_USER */));\r\n                }, 2000 /* AUTH_EVENT */);\r\n                return;\r\n            }\r\n            this.pollId = window.setTimeout(poll, _POLL_WINDOW_CLOSE_TIMEOUT.get());\r\n        };\r\n        poll();\r\n    }\r\n}\r\n// Only one popup is ever shown at once. The lifecycle of the current popup\r\n// can be managed / cancelled by the constructor.\r\nPopupOperation.currentPopupAction = null;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PENDING_REDIRECT_KEY = 'pendingRedirect';\r\n// We only get one redirect outcome for any one auth, so just store it\r\n// in here.\r\nconst redirectOutcomeMap = new Map();\r\nclass RedirectAction extends AbstractPopupRedirectOperation {\r\n    constructor(auth, resolver, bypassAuthState = false) {\r\n        super(auth, [\r\n            \"signInViaRedirect\" /* SIGN_IN_VIA_REDIRECT */,\r\n            \"linkViaRedirect\" /* LINK_VIA_REDIRECT */,\r\n            \"reauthViaRedirect\" /* REAUTH_VIA_REDIRECT */,\r\n            \"unknown\" /* UNKNOWN */\r\n        ], resolver, undefined, bypassAuthState);\r\n        this.eventId = null;\r\n    }\r\n    /**\r\n     * Override the execute function; if we already have a redirect result, then\r\n     * just return it.\r\n     */\r\n    async execute() {\r\n        let readyOutcome = redirectOutcomeMap.get(this.auth._key());\r\n        if (!readyOutcome) {\r\n            try {\r\n                const hasPendingRedirect = await _getAndClearPendingRedirectStatus(this.resolver, this.auth);\r\n                const result = hasPendingRedirect ? await super.execute() : null;\r\n                readyOutcome = () => Promise.resolve(result);\r\n            }\r\n            catch (e) {\r\n                readyOutcome = () => Promise.reject(e);\r\n            }\r\n            redirectOutcomeMap.set(this.auth._key(), readyOutcome);\r\n        }\r\n        // If we're not bypassing auth state, the ready outcome should be set to\r\n        // null.\r\n        if (!this.bypassAuthState) {\r\n            redirectOutcomeMap.set(this.auth._key(), () => Promise.resolve(null));\r\n        }\r\n        return readyOutcome();\r\n    }\r\n    async onAuthEvent(event) {\r\n        if (event.type === \"signInViaRedirect\" /* SIGN_IN_VIA_REDIRECT */) {\r\n            return super.onAuthEvent(event);\r\n        }\r\n        else if (event.type === \"unknown\" /* UNKNOWN */) {\r\n            // This is a sentinel value indicating there's no pending redirect\r\n            this.resolve(null);\r\n            return;\r\n        }\r\n        if (event.eventId) {\r\n            const user = await this.auth._redirectUserForId(event.eventId);\r\n            if (user) {\r\n                this.user = user;\r\n                return super.onAuthEvent(event);\r\n            }\r\n            else {\r\n                this.resolve(null);\r\n            }\r\n        }\r\n    }\r\n    async onExecution() { }\r\n    cleanUp() { }\r\n}\r\nasync function _getAndClearPendingRedirectStatus(resolver, auth) {\r\n    const key = pendingRedirectKey(auth);\r\n    const persistence = resolverPersistence(resolver);\r\n    if (!(await persistence._isAvailable())) {\r\n        return false;\r\n    }\r\n    const hasPendingRedirect = (await persistence._get(key)) === 'true';\r\n    await persistence._remove(key);\r\n    return hasPendingRedirect;\r\n}\r\nasync function _setPendingRedirectStatus(resolver, auth) {\r\n    return resolverPersistence(resolver)._set(pendingRedirectKey(auth), 'true');\r\n}\r\nfunction _clearRedirectOutcomes() {\r\n    redirectOutcomeMap.clear();\r\n}\r\nfunction _overrideRedirectResult(auth, result) {\r\n    redirectOutcomeMap.set(auth._key(), result);\r\n}\r\nfunction resolverPersistence(resolver) {\r\n    return _getInstance(resolver._redirectPersistence);\r\n}\r\nfunction pendingRedirectKey(auth) {\r\n    return _persistenceKeyName(PENDING_REDIRECT_KEY, auth.config.apiKey, auth.name);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Authenticates a Firebase client using a full-page redirect flow.\r\n *\r\n * @remarks\r\n * To handle the results and errors for this operation, refer to {@link getRedirectResult}.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // You can add additional scopes to the provider:\r\n * provider.addScope('user_birthday');\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n *   // This is the signed-in user\r\n *   const user = result.user;\r\n *   // This gives you a Facebook Access Token.\r\n *   const credential = provider.credentialFromResult(auth, result);\r\n *   const token = credential.accessToken;\r\n * }\r\n * // As this API can be used for sign-in, linking and reauthentication,\r\n * // check the operationType to determine what triggered this redirect\r\n * // operation.\r\n * const operationType = result.operationType;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nfunction signInWithRedirect(auth, provider, resolver) {\r\n    return _signInWithRedirect(auth, provider, resolver);\r\n}\r\nasync function _signInWithRedirect(auth, provider, resolver) {\r\n    const authInternal = _castAuth(auth);\r\n    _assertInstanceOf(auth, provider, FederatedAuthProvider);\r\n    const resolverInternal = _withDefaultResolver(authInternal, resolver);\r\n    await _setPendingRedirectStatus(resolverInternal, authInternal);\r\n    return resolverInternal._openRedirect(authInternal, provider, \"signInViaRedirect\" /* SIGN_IN_VIA_REDIRECT */);\r\n}\r\n/**\r\n * Reauthenticates the current user with the specified {@link OAuthProvider} using a full-page redirect flow.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * const result = await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * // Link using a redirect.\r\n * await linkWithRedirect(result.user, provider);\r\n * // This will again trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nfunction reauthenticateWithRedirect(user, provider, resolver) {\r\n    return _reauthenticateWithRedirect(user, provider, resolver);\r\n}\r\nasync function _reauthenticateWithRedirect(user, provider, resolver) {\r\n    const userInternal = getModularInstance(user);\r\n    _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n    // Allow the resolver to error before persisting the redirect user\r\n    const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n    await _setPendingRedirectStatus(resolverInternal, userInternal.auth);\r\n    const eventId = await prepareUserForRedirect(userInternal);\r\n    return resolverInternal._openRedirect(userInternal.auth, provider, \"reauthViaRedirect\" /* REAUTH_VIA_REDIRECT */, eventId);\r\n}\r\n/**\r\n * Links the {@link OAuthProvider} to the user account using a full-page redirect flow.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using some other provider.\r\n * const result = await signInWithEmailAndPassword(auth, email, password);\r\n * // Link using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * await linkWithRedirect(result.user, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * ```\r\n *\r\n * @param user - The user.\r\n * @param provider - The provider to authenticate. The provider has to be an {@link OAuthProvider}.\r\n * Non-OAuth providers like {@link EmailAuthProvider} will throw an error.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n *\r\n * @public\r\n */\r\nfunction linkWithRedirect(user, provider, resolver) {\r\n    return _linkWithRedirect(user, provider, resolver);\r\n}\r\nasync function _linkWithRedirect(user, provider, resolver) {\r\n    const userInternal = getModularInstance(user);\r\n    _assertInstanceOf(userInternal.auth, provider, FederatedAuthProvider);\r\n    // Allow the resolver to error before persisting the redirect user\r\n    const resolverInternal = _withDefaultResolver(userInternal.auth, resolver);\r\n    await _assertLinkedStatus(false, userInternal, provider.providerId);\r\n    await _setPendingRedirectStatus(resolverInternal, userInternal.auth);\r\n    const eventId = await prepareUserForRedirect(userInternal);\r\n    return resolverInternal._openRedirect(userInternal.auth, provider, \"linkViaRedirect\" /* LINK_VIA_REDIRECT */, eventId);\r\n}\r\n/**\r\n * Returns a {@link UserCredential} from the redirect-based sign-in flow.\r\n *\r\n * @remarks\r\n * If sign-in succeeded, returns the signed in user. If sign-in was unsuccessful, fails with an\r\n * error. If no redirect operation was called, returns a {@link UserCredential}\r\n * with a null `user`.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Sign in using a redirect.\r\n * const provider = new FacebookAuthProvider();\r\n * // You can add additional scopes to the provider:\r\n * provider.addScope('user_birthday');\r\n * // Start a sign in process for an unauthenticated user.\r\n * await signInWithRedirect(auth, provider);\r\n * // This will trigger a full page redirect away from your app\r\n *\r\n * // After returning from the redirect when your app initializes you can obtain the result\r\n * const result = await getRedirectResult(auth);\r\n * if (result) {\r\n *   // This is the signed-in user\r\n *   const user = result.user;\r\n *   // This gives you a Facebook Access Token.\r\n *   const credential = provider.credentialFromResult(auth, result);\r\n *   const token = credential.accessToken;\r\n * }\r\n * // As this API can be used for sign-in, linking and reauthentication,\r\n * // check the operationType to determine what triggered this redirect\r\n * // operation.\r\n * const operationType = result.operationType;\r\n * ```\r\n *\r\n * @param auth - The {@link Auth} instance.\r\n * @param resolver - An instance of {@link PopupRedirectResolver}, optional\r\n * if already supplied to {@link initializeAuth} or provided by {@link getAuth}.\r\n *\r\n * @public\r\n */\r\nasync function getRedirectResult(auth, resolver) {\r\n    await _castAuth(auth)._initializationPromise;\r\n    return _getRedirectResult(auth, resolver, false);\r\n}\r\nasync function _getRedirectResult(auth, resolverExtern, bypassAuthState = false) {\r\n    const authInternal = _castAuth(auth);\r\n    const resolver = _withDefaultResolver(authInternal, resolverExtern);\r\n    const action = new RedirectAction(authInternal, resolver, bypassAuthState);\r\n    const result = await action.execute();\r\n    if (result && !bypassAuthState) {\r\n        delete result.user._redirectEventId;\r\n        await authInternal._persistUserIfCurrent(result.user);\r\n        await authInternal._setRedirectUser(null, resolverExtern);\r\n    }\r\n    return result;\r\n}\r\nasync function prepareUserForRedirect(user) {\r\n    const eventId = _generateEventId(`${user.uid}:::`);\r\n    user._redirectEventId = eventId;\r\n    await user.auth._setRedirectUser(user);\r\n    await user.auth._persistUserIfCurrent(user);\r\n    return eventId;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// The amount of time to store the UIDs of seen events; this is\r\n// set to 10 min by default\r\nconst EVENT_DUPLICATION_CACHE_DURATION_MS = 10 * 60 * 1000;\r\nclass AuthEventManager {\r\n    constructor(auth) {\r\n        this.auth = auth;\r\n        this.cachedEventUids = new Set();\r\n        this.consumers = new Set();\r\n        this.queuedRedirectEvent = null;\r\n        this.hasHandledPotentialRedirect = false;\r\n        this.lastProcessedEventTime = Date.now();\r\n    }\r\n    registerConsumer(authEventConsumer) {\r\n        this.consumers.add(authEventConsumer);\r\n        if (this.queuedRedirectEvent &&\r\n            this.isEventForConsumer(this.queuedRedirectEvent, authEventConsumer)) {\r\n            this.sendToConsumer(this.queuedRedirectEvent, authEventConsumer);\r\n            this.saveEventToCache(this.queuedRedirectEvent);\r\n            this.queuedRedirectEvent = null;\r\n        }\r\n    }\r\n    unregisterConsumer(authEventConsumer) {\r\n        this.consumers.delete(authEventConsumer);\r\n    }\r\n    onEvent(event) {\r\n        // Check if the event has already been handled\r\n        if (this.hasEventBeenHandled(event)) {\r\n            return false;\r\n        }\r\n        let handled = false;\r\n        this.consumers.forEach(consumer => {\r\n            if (this.isEventForConsumer(event, consumer)) {\r\n                handled = true;\r\n                this.sendToConsumer(event, consumer);\r\n                this.saveEventToCache(event);\r\n            }\r\n        });\r\n        if (this.hasHandledPotentialRedirect || !isRedirectEvent(event)) {\r\n            // If we've already seen a redirect before, or this is a popup event,\r\n            // bail now\r\n            return handled;\r\n        }\r\n        this.hasHandledPotentialRedirect = true;\r\n        // If the redirect wasn't handled, hang on to it\r\n        if (!handled) {\r\n            this.queuedRedirectEvent = event;\r\n            handled = true;\r\n        }\r\n        return handled;\r\n    }\r\n    sendToConsumer(event, consumer) {\r\n        var _a;\r\n        if (event.error && !isNullRedirectEvent(event)) {\r\n            const code = ((_a = event.error.code) === null || _a === void 0 ? void 0 : _a.split('auth/')[1]) ||\r\n                \"internal-error\" /* INTERNAL_ERROR */;\r\n            consumer.onError(_createError(this.auth, code));\r\n        }\r\n        else {\r\n            consumer.onAuthEvent(event);\r\n        }\r\n    }\r\n    isEventForConsumer(event, consumer) {\r\n        const eventIdMatches = consumer.eventId === null ||\r\n            (!!event.eventId && event.eventId === consumer.eventId);\r\n        return consumer.filter.includes(event.type) && eventIdMatches;\r\n    }\r\n    hasEventBeenHandled(event) {\r\n        if (Date.now() - this.lastProcessedEventTime >=\r\n            EVENT_DUPLICATION_CACHE_DURATION_MS) {\r\n            this.cachedEventUids.clear();\r\n        }\r\n        return this.cachedEventUids.has(eventUid(event));\r\n    }\r\n    saveEventToCache(event) {\r\n        this.cachedEventUids.add(eventUid(event));\r\n        this.lastProcessedEventTime = Date.now();\r\n    }\r\n}\r\nfunction eventUid(e) {\r\n    return [e.type, e.eventId, e.sessionId, e.tenantId].filter(v => v).join('-');\r\n}\r\nfunction isNullRedirectEvent({ type, error }) {\r\n    return (type === \"unknown\" /* UNKNOWN */ &&\r\n        (error === null || error === void 0 ? void 0 : error.code) === `auth/${\"no-auth-event\" /* NO_AUTH_EVENT */}`);\r\n}\r\nfunction isRedirectEvent(event) {\r\n    switch (event.type) {\r\n        case \"signInViaRedirect\" /* SIGN_IN_VIA_REDIRECT */:\r\n        case \"linkViaRedirect\" /* LINK_VIA_REDIRECT */:\r\n        case \"reauthViaRedirect\" /* REAUTH_VIA_REDIRECT */:\r\n            return true;\r\n        case \"unknown\" /* UNKNOWN */:\r\n            return isNullRedirectEvent(event);\r\n        default:\r\n            return false;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function _getProjectConfig(auth, request = {}) {\r\n    return _performApiRequest(auth, \"GET\" /* GET */, \"/v1/projects\" /* GET_PROJECT_CONFIG */, request);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst IP_ADDRESS_REGEX = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\r\nconst HTTP_REGEX = /^https?/;\r\nasync function _validateOrigin(auth) {\r\n    // Skip origin validation if we are in an emulated environment\r\n    if (auth.config.emulator) {\r\n        return;\r\n    }\r\n    const { authorizedDomains } = await _getProjectConfig(auth);\r\n    for (const domain of authorizedDomains) {\r\n        try {\r\n            if (matchDomain(domain)) {\r\n                return;\r\n            }\r\n        }\r\n        catch (_a) {\r\n            // Do nothing if there's a URL error; just continue searching\r\n        }\r\n    }\r\n    // In the old SDK, this error also provides helpful messages.\r\n    _fail(auth, \"unauthorized-domain\" /* INVALID_ORIGIN */);\r\n}\r\nfunction matchDomain(expected) {\r\n    const currentUrl = _getCurrentUrl();\r\n    const { protocol, hostname } = new URL(currentUrl);\r\n    if (expected.startsWith('chrome-extension://')) {\r\n        const ceUrl = new URL(expected);\r\n        if (ceUrl.hostname === '' && hostname === '') {\r\n            // For some reason we're not parsing chrome URLs properly\r\n            return (protocol === 'chrome-extension:' &&\r\n                expected.replace('chrome-extension://', '') ===\r\n                    currentUrl.replace('chrome-extension://', ''));\r\n        }\r\n        return protocol === 'chrome-extension:' && ceUrl.hostname === hostname;\r\n    }\r\n    if (!HTTP_REGEX.test(protocol)) {\r\n        return false;\r\n    }\r\n    if (IP_ADDRESS_REGEX.test(expected)) {\r\n        // The domain has to be exactly equal to the pattern, as an IP domain will\r\n        // only contain the IP, no extra character.\r\n        return hostname === expected;\r\n    }\r\n    // Dots in pattern should be escaped.\r\n    const escapedDomainPattern = expected.replace(/\\./g, '\\\\.');\r\n    // Non ip address domains.\r\n    // domain.com = *.domain.com OR domain.com\r\n    const re = new RegExp('^(.+\\\\.' + escapedDomainPattern + '|' + escapedDomainPattern + ')$', 'i');\r\n    return re.test(hostname);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst NETWORK_TIMEOUT = new Delay(30000, 60000);\r\n/**\r\n * Reset unlaoded GApi modules. If gapi.load fails due to a network error,\r\n * it will stop working after a retrial. This is a hack to fix this issue.\r\n */\r\nfunction resetUnloadedGapiModules() {\r\n    // Clear last failed gapi.load state to force next gapi.load to first\r\n    // load the failed gapi.iframes module.\r\n    // Get gapix.beacon context.\r\n    const beacon = _window().___jsl;\r\n    // Get current hint.\r\n    if (beacon === null || beacon === void 0 ? void 0 : beacon.H) {\r\n        // Get gapi hint.\r\n        for (const hint of Object.keys(beacon.H)) {\r\n            // Requested modules.\r\n            beacon.H[hint].r = beacon.H[hint].r || [];\r\n            // Loaded modules.\r\n            beacon.H[hint].L = beacon.H[hint].L || [];\r\n            // Set requested modules to a copy of the loaded modules.\r\n            beacon.H[hint].r = [...beacon.H[hint].L];\r\n            // Clear pending callbacks.\r\n            if (beacon.CP) {\r\n                for (let i = 0; i < beacon.CP.length; i++) {\r\n                    // Remove all failed pending callbacks.\r\n                    beacon.CP[i] = null;\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\nfunction loadGapi(auth) {\r\n    return new Promise((resolve, reject) => {\r\n        var _a, _b, _c;\r\n        // Function to run when gapi.load is ready.\r\n        function loadGapiIframe() {\r\n            // The developer may have tried to previously run gapi.load and failed.\r\n            // Run this to fix that.\r\n            resetUnloadedGapiModules();\r\n            gapi.load('gapi.iframes', {\r\n                callback: () => {\r\n                    resolve(gapi.iframes.getContext());\r\n                },\r\n                ontimeout: () => {\r\n                    // The above reset may be sufficient, but having this reset after\r\n                    // failure ensures that if the developer calls gapi.load after the\r\n                    // connection is re-established and before another attempt to embed\r\n                    // the iframe, it would work and would not be broken because of our\r\n                    // failed attempt.\r\n                    // Timeout when gapi.iframes.Iframe not loaded.\r\n                    resetUnloadedGapiModules();\r\n                    reject(_createError(auth, \"network-request-failed\" /* NETWORK_REQUEST_FAILED */));\r\n                },\r\n                timeout: NETWORK_TIMEOUT.get()\r\n            });\r\n        }\r\n        if ((_b = (_a = _window().gapi) === null || _a === void 0 ? void 0 : _a.iframes) === null || _b === void 0 ? void 0 : _b.Iframe) {\r\n            // If gapi.iframes.Iframe available, resolve.\r\n            resolve(gapi.iframes.getContext());\r\n        }\r\n        else if (!!((_c = _window().gapi) === null || _c === void 0 ? void 0 : _c.load)) {\r\n            // Gapi loader ready, load gapi.iframes.\r\n            loadGapiIframe();\r\n        }\r\n        else {\r\n            // Create a new iframe callback when this is called so as not to overwrite\r\n            // any previous defined callback. This happens if this method is called\r\n            // multiple times in parallel and could result in the later callback\r\n            // overwriting the previous one. This would end up with a iframe\r\n            // timeout.\r\n            const cbName = _generateCallbackName('iframefcb');\r\n            // GApi loader not available, dynamically load platform.js.\r\n            _window()[cbName] = () => {\r\n                // GApi loader should be ready.\r\n                if (!!gapi.load) {\r\n                    loadGapiIframe();\r\n                }\r\n                else {\r\n                    // Gapi loader failed, throw error.\r\n                    reject(_createError(auth, \"network-request-failed\" /* NETWORK_REQUEST_FAILED */));\r\n                }\r\n            };\r\n            // Load GApi loader.\r\n            return _loadJS(`https://apis.google.com/js/api.js?onload=${cbName}`).catch(e => reject(e));\r\n        }\r\n    }).catch(error => {\r\n        // Reset cached promise to allow for retrial.\r\n        cachedGApiLoader = null;\r\n        throw error;\r\n    });\r\n}\r\nlet cachedGApiLoader = null;\r\nfunction _loadGapi(auth) {\r\n    cachedGApiLoader = cachedGApiLoader || loadGapi(auth);\r\n    return cachedGApiLoader;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PING_TIMEOUT = new Delay(5000, 15000);\r\nconst IFRAME_PATH = '__/auth/iframe';\r\nconst EMULATED_IFRAME_PATH = 'emulator/auth/iframe';\r\nconst IFRAME_ATTRIBUTES = {\r\n    style: {\r\n        position: 'absolute',\r\n        top: '-100px',\r\n        width: '1px',\r\n        height: '1px'\r\n    },\r\n    'aria-hidden': 'true',\r\n    tabindex: '-1'\r\n};\r\n// Map from apiHost to endpoint ID for passing into iframe. In current SDK, apiHost can be set to\r\n// anything (not from a list of endpoints with IDs as in legacy), so this is the closest we can get.\r\nconst EID_FROM_APIHOST = new Map([\r\n    [\"identitytoolkit.googleapis.com\" /* API_HOST */, 'p'],\r\n    ['staging-identitytoolkit.sandbox.googleapis.com', 's'],\r\n    ['test-identitytoolkit.sandbox.googleapis.com', 't'] // test\r\n]);\r\nfunction getIframeUrl(auth) {\r\n    const config = auth.config;\r\n    _assert(config.authDomain, auth, \"auth-domain-config-required\" /* MISSING_AUTH_DOMAIN */);\r\n    const url = config.emulator\r\n        ? _emulatorUrl(config, EMULATED_IFRAME_PATH)\r\n        : `https://${auth.config.authDomain}/${IFRAME_PATH}`;\r\n    const params = {\r\n        apiKey: config.apiKey,\r\n        appName: auth.name,\r\n        v: SDK_VERSION\r\n    };\r\n    const eid = EID_FROM_APIHOST.get(auth.config.apiHost);\r\n    if (eid) {\r\n        params.eid = eid;\r\n    }\r\n    const frameworks = auth._getFrameworks();\r\n    if (frameworks.length) {\r\n        params.fw = frameworks.join(',');\r\n    }\r\n    return `${url}?${querystring(params).slice(1)}`;\r\n}\r\nasync function _openIframe(auth) {\r\n    const context = await _loadGapi(auth);\r\n    const gapi = _window().gapi;\r\n    _assert(gapi, auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n    return context.open({\r\n        where: document.body,\r\n        url: getIframeUrl(auth),\r\n        messageHandlersFilter: gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER,\r\n        attributes: IFRAME_ATTRIBUTES,\r\n        dontclear: true\r\n    }, (iframe) => new Promise(async (resolve, reject) => {\r\n        await iframe.restyle({\r\n            // Prevent iframe from closing on mouse out.\r\n            setHideOnLeave: false\r\n        });\r\n        const networkError = _createError(auth, \"network-request-failed\" /* NETWORK_REQUEST_FAILED */);\r\n        // Confirm iframe is correctly loaded.\r\n        // To fallback on failure, set a timeout.\r\n        const networkErrorTimer = _window().setTimeout(() => {\r\n            reject(networkError);\r\n        }, PING_TIMEOUT.get());\r\n        // Clear timer and resolve pending iframe ready promise.\r\n        function clearTimerAndResolve() {\r\n            _window().clearTimeout(networkErrorTimer);\r\n            resolve(iframe);\r\n        }\r\n        // This returns an IThenable. However the reject part does not call\r\n        // when the iframe is not loaded.\r\n        iframe.ping(clearTimerAndResolve).then(clearTimerAndResolve, () => {\r\n            reject(networkError);\r\n        });\r\n    }));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst BASE_POPUP_OPTIONS = {\r\n    location: 'yes',\r\n    resizable: 'yes',\r\n    statusbar: 'yes',\r\n    toolbar: 'no'\r\n};\r\nconst DEFAULT_WIDTH = 500;\r\nconst DEFAULT_HEIGHT = 600;\r\nconst TARGET_BLANK = '_blank';\r\nconst FIREFOX_EMPTY_URL = 'http://localhost';\r\nclass AuthPopup {\r\n    constructor(window) {\r\n        this.window = window;\r\n        this.associatedEvent = null;\r\n    }\r\n    close() {\r\n        if (this.window) {\r\n            try {\r\n                this.window.close();\r\n            }\r\n            catch (e) { }\r\n        }\r\n    }\r\n}\r\nfunction _open(auth, url, name, width = DEFAULT_WIDTH, height = DEFAULT_HEIGHT) {\r\n    const top = Math.max((window.screen.availHeight - height) / 2, 0).toString();\r\n    const left = Math.max((window.screen.availWidth - width) / 2, 0).toString();\r\n    let target = '';\r\n    const options = Object.assign(Object.assign({}, BASE_POPUP_OPTIONS), { width: width.toString(), height: height.toString(), top,\r\n        left });\r\n    // Chrome iOS 7 and 8 is returning an undefined popup win when target is\r\n    // specified, even though the popup is not necessarily blocked.\r\n    const ua = getUA().toLowerCase();\r\n    if (name) {\r\n        target = _isChromeIOS(ua) ? TARGET_BLANK : name;\r\n    }\r\n    if (_isFirefox(ua)) {\r\n        // Firefox complains when invalid URLs are popped out. Hacky way to bypass.\r\n        url = url || FIREFOX_EMPTY_URL;\r\n        // Firefox disables by default scrolling on popup windows, which can create\r\n        // issues when the user has many Google accounts, for instance.\r\n        options.scrollbars = 'yes';\r\n    }\r\n    const optionsString = Object.entries(options).reduce((accum, [key, value]) => `${accum}${key}=${value},`, '');\r\n    if (_isIOSStandalone(ua) && target !== '_self') {\r\n        openAsNewWindowIOS(url || '', target);\r\n        return new AuthPopup(null);\r\n    }\r\n    // about:blank getting sanitized causing browsers like IE/Edge to display\r\n    // brief error message before redirecting to handler.\r\n    const newWin = window.open(url || '', target, optionsString);\r\n    _assert(newWin, auth, \"popup-blocked\" /* POPUP_BLOCKED */);\r\n    // Flaky on IE edge, encapsulate with a try and catch.\r\n    try {\r\n        newWin.focus();\r\n    }\r\n    catch (e) { }\r\n    return new AuthPopup(newWin);\r\n}\r\nfunction openAsNewWindowIOS(url, target) {\r\n    const el = document.createElement('a');\r\n    el.href = url;\r\n    el.target = target;\r\n    const click = document.createEvent('MouseEvent');\r\n    click.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 1, null);\r\n    el.dispatchEvent(click);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * URL for Authentication widget which will initiate the OAuth handshake\r\n *\r\n * @internal\r\n */\r\nconst WIDGET_PATH = '__/auth/handler';\r\n/**\r\n * URL for emulated environment\r\n *\r\n * @internal\r\n */\r\nconst EMULATOR_WIDGET_PATH = 'emulator/auth/handler';\r\nfunction _getRedirectUrl(auth, provider, authType, redirectUrl, eventId, additionalParams) {\r\n    _assert(auth.config.authDomain, auth, \"auth-domain-config-required\" /* MISSING_AUTH_DOMAIN */);\r\n    _assert(auth.config.apiKey, auth, \"invalid-api-key\" /* INVALID_API_KEY */);\r\n    const params = {\r\n        apiKey: auth.config.apiKey,\r\n        appName: auth.name,\r\n        authType,\r\n        redirectUrl,\r\n        v: SDK_VERSION,\r\n        eventId\r\n    };\r\n    if (provider instanceof FederatedAuthProvider) {\r\n        provider.setDefaultLanguage(auth.languageCode);\r\n        params.providerId = provider.providerId || '';\r\n        if (!isEmpty(provider.getCustomParameters())) {\r\n            params.customParameters = JSON.stringify(provider.getCustomParameters());\r\n        }\r\n        // TODO set additionalParams from the provider as well?\r\n        for (const [key, value] of Object.entries(additionalParams || {})) {\r\n            params[key] = value;\r\n        }\r\n    }\r\n    if (provider instanceof BaseOAuthProvider) {\r\n        const scopes = provider.getScopes().filter(scope => scope !== '');\r\n        if (scopes.length > 0) {\r\n            params.scopes = scopes.join(',');\r\n        }\r\n    }\r\n    if (auth.tenantId) {\r\n        params.tid = auth.tenantId;\r\n    }\r\n    // TODO: maybe set eid as endipointId\r\n    // TODO: maybe set fw as Frameworks.join(\",\")\r\n    const paramsDict = params;\r\n    for (const key of Object.keys(paramsDict)) {\r\n        if (paramsDict[key] === undefined) {\r\n            delete paramsDict[key];\r\n        }\r\n    }\r\n    return `${getHandlerBase(auth)}?${querystring(paramsDict).slice(1)}`;\r\n}\r\nfunction getHandlerBase({ config }) {\r\n    if (!config.emulator) {\r\n        return `https://${config.authDomain}/${WIDGET_PATH}`;\r\n    }\r\n    return _emulatorUrl(config, EMULATOR_WIDGET_PATH);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The special web storage event\r\n *\r\n */\r\nconst WEB_STORAGE_SUPPORT_KEY = 'webStorageSupport';\r\nclass BrowserPopupRedirectResolver {\r\n    constructor() {\r\n        this.eventManagers = {};\r\n        this.iframes = {};\r\n        this.originValidationPromises = {};\r\n        this._redirectPersistence = browserSessionPersistence;\r\n        this._completeRedirectFn = _getRedirectResult;\r\n        this._overrideRedirectResult = _overrideRedirectResult;\r\n    }\r\n    // Wrapping in async even though we don't await anywhere in order\r\n    // to make sure errors are raised as promise rejections\r\n    async _openPopup(auth, provider, authType, eventId) {\r\n        var _a;\r\n        debugAssert((_a = this.eventManagers[auth._key()]) === null || _a === void 0 ? void 0 : _a.manager, '_initialize() not called before _openPopup()');\r\n        const url = _getRedirectUrl(auth, provider, authType, _getCurrentUrl(), eventId);\r\n        return _open(auth, url, _generateEventId());\r\n    }\r\n    async _openRedirect(auth, provider, authType, eventId) {\r\n        await this._originValidation(auth);\r\n        _setWindowLocation(_getRedirectUrl(auth, provider, authType, _getCurrentUrl(), eventId));\r\n        return new Promise(() => { });\r\n    }\r\n    _initialize(auth) {\r\n        const key = auth._key();\r\n        if (this.eventManagers[key]) {\r\n            const { manager, promise } = this.eventManagers[key];\r\n            if (manager) {\r\n                return Promise.resolve(manager);\r\n            }\r\n            else {\r\n                debugAssert(promise, 'If manager is not set, promise should be');\r\n                return promise;\r\n            }\r\n        }\r\n        const promise = this.initAndGetManager(auth);\r\n        this.eventManagers[key] = { promise };\r\n        // If the promise is rejected, the key should be removed so that the\r\n        // operation can be retried later.\r\n        promise.catch(() => {\r\n            delete this.eventManagers[key];\r\n        });\r\n        return promise;\r\n    }\r\n    async initAndGetManager(auth) {\r\n        const iframe = await _openIframe(auth);\r\n        const manager = new AuthEventManager(auth);\r\n        iframe.register('authEvent', (iframeEvent) => {\r\n            _assert(iframeEvent === null || iframeEvent === void 0 ? void 0 : iframeEvent.authEvent, auth, \"invalid-auth-event\" /* INVALID_AUTH_EVENT */);\r\n            // TODO: Consider splitting redirect and popup events earlier on\r\n            const handled = manager.onEvent(iframeEvent.authEvent);\r\n            return { status: handled ? \"ACK\" /* ACK */ : \"ERROR\" /* ERROR */ };\r\n        }, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);\r\n        this.eventManagers[auth._key()] = { manager };\r\n        this.iframes[auth._key()] = iframe;\r\n        return manager;\r\n    }\r\n    _isIframeWebStorageSupported(auth, cb) {\r\n        const iframe = this.iframes[auth._key()];\r\n        iframe.send(WEB_STORAGE_SUPPORT_KEY, { type: WEB_STORAGE_SUPPORT_KEY }, result => {\r\n            var _a;\r\n            const isSupported = (_a = result === null || result === void 0 ? void 0 : result[0]) === null || _a === void 0 ? void 0 : _a[WEB_STORAGE_SUPPORT_KEY];\r\n            if (isSupported !== undefined) {\r\n                cb(!!isSupported);\r\n            }\r\n            _fail(auth, \"internal-error\" /* INTERNAL_ERROR */);\r\n        }, gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER);\r\n    }\r\n    _originValidation(auth) {\r\n        const key = auth._key();\r\n        if (!this.originValidationPromises[key]) {\r\n            this.originValidationPromises[key] = _validateOrigin(auth);\r\n        }\r\n        return this.originValidationPromises[key];\r\n    }\r\n    get _shouldInitProactively() {\r\n        // Mobile browsers and Safari need to optimistically initialize\r\n        return _isMobileBrowser() || _isSafari() || _isIOS();\r\n    }\r\n}\r\n/**\r\n * An implementation of {@link PopupRedirectResolver} suitable for browser\r\n * based applications.\r\n *\r\n * @public\r\n */\r\nconst browserPopupRedirectResolver = BrowserPopupRedirectResolver;\n\nclass MultiFactorAssertionImpl {\r\n    constructor(factorId) {\r\n        this.factorId = factorId;\r\n    }\r\n    _process(auth, session, displayName) {\r\n        switch (session.type) {\r\n            case \"enroll\" /* ENROLL */:\r\n                return this._finalizeEnroll(auth, session.credential, displayName);\r\n            case \"signin\" /* SIGN_IN */:\r\n                return this._finalizeSignIn(auth, session.credential);\r\n            default:\r\n                return debugFail('unexpected MultiFactorSessionType');\r\n        }\r\n    }\r\n}\n\n/**\r\n * {@inheritdoc PhoneMultiFactorAssertion}\r\n *\r\n * @public\r\n */\r\nclass PhoneMultiFactorAssertionImpl extends MultiFactorAssertionImpl {\r\n    constructor(credential) {\r\n        super(\"phone\" /* PHONE */);\r\n        this.credential = credential;\r\n    }\r\n    /** @internal */\r\n    static _fromCredential(credential) {\r\n        return new PhoneMultiFactorAssertionImpl(credential);\r\n    }\r\n    /** @internal */\r\n    _finalizeEnroll(auth, idToken, displayName) {\r\n        return finalizeEnrollPhoneMfa(auth, {\r\n            idToken,\r\n            displayName,\r\n            phoneVerificationInfo: this.credential._makeVerificationRequest()\r\n        });\r\n    }\r\n    /** @internal */\r\n    _finalizeSignIn(auth, mfaPendingCredential) {\r\n        return finalizeSignInPhoneMfa(auth, {\r\n            mfaPendingCredential,\r\n            phoneVerificationInfo: this.credential._makeVerificationRequest()\r\n        });\r\n    }\r\n}\r\n/**\r\n * Provider for generating a {@link PhoneMultiFactorAssertion}.\r\n *\r\n * @public\r\n */\r\nclass PhoneMultiFactorGenerator {\r\n    constructor() { }\r\n    /**\r\n     * Provides a {@link PhoneMultiFactorAssertion} to confirm ownership of the phone second factor.\r\n     *\r\n     * @param phoneAuthCredential - A credential provided by {@link PhoneAuthProvider.credential}.\r\n     * @returns A {@link PhoneMultiFactorAssertion} which can be used with\r\n     * {@link MultiFactorResolver.resolveSignIn}\r\n     */\r\n    static assertion(credential) {\r\n        return PhoneMultiFactorAssertionImpl._fromCredential(credential);\r\n    }\r\n}\r\n/**\r\n * The identifier of the phone second factor: `phone`.\r\n */\r\nPhoneMultiFactorGenerator.FACTOR_ID = 'phone';\n\nvar name = \"@firebase/auth\";\nvar version = \"0.20.5\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AuthInterop {\r\n    constructor(auth) {\r\n        this.auth = auth;\r\n        this.internalListeners = new Map();\r\n    }\r\n    getUid() {\r\n        var _a;\r\n        this.assertAuthConfigured();\r\n        return ((_a = this.auth.currentUser) === null || _a === void 0 ? void 0 : _a.uid) || null;\r\n    }\r\n    async getToken(forceRefresh) {\r\n        this.assertAuthConfigured();\r\n        await this.auth._initializationPromise;\r\n        if (!this.auth.currentUser) {\r\n            return null;\r\n        }\r\n        const accessToken = await this.auth.currentUser.getIdToken(forceRefresh);\r\n        return { accessToken };\r\n    }\r\n    addAuthTokenListener(listener) {\r\n        this.assertAuthConfigured();\r\n        if (this.internalListeners.has(listener)) {\r\n            return;\r\n        }\r\n        const unsubscribe = this.auth.onIdTokenChanged(user => {\r\n            var _a;\r\n            listener(((_a = user) === null || _a === void 0 ? void 0 : _a.stsTokenManager.accessToken) || null);\r\n        });\r\n        this.internalListeners.set(listener, unsubscribe);\r\n        this.updateProactiveRefresh();\r\n    }\r\n    removeAuthTokenListener(listener) {\r\n        this.assertAuthConfigured();\r\n        const unsubscribe = this.internalListeners.get(listener);\r\n        if (!unsubscribe) {\r\n            return;\r\n        }\r\n        this.internalListeners.delete(listener);\r\n        unsubscribe();\r\n        this.updateProactiveRefresh();\r\n    }\r\n    assertAuthConfigured() {\r\n        _assert(this.auth._initializationPromise, \"dependent-sdk-initialized-before-auth\" /* DEPENDENT_SDK_INIT_BEFORE_AUTH */);\r\n    }\r\n    updateProactiveRefresh() {\r\n        if (this.internalListeners.size > 0) {\r\n            this.auth._startProactiveRefresh();\r\n        }\r\n        else {\r\n            this.auth._stopProactiveRefresh();\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getVersionForPlatform(clientPlatform) {\r\n    switch (clientPlatform) {\r\n        case \"Node\" /* NODE */:\r\n            return 'node';\r\n        case \"ReactNative\" /* REACT_NATIVE */:\r\n            return 'rn';\r\n        case \"Worker\" /* WORKER */:\r\n            return 'webworker';\r\n        case \"Cordova\" /* CORDOVA */:\r\n            return 'cordova';\r\n        default:\r\n            return undefined;\r\n    }\r\n}\r\n/** @internal */\r\nfunction registerAuth(clientPlatform) {\r\n    _registerComponent(new Component(\"auth\" /* AUTH */, (container, { options: deps }) => {\r\n        const app = container.getProvider('app').getImmediate();\r\n        const heartbeatServiceProvider = container.getProvider('heartbeat');\r\n        const { apiKey, authDomain } = app.options;\r\n        return ((app, heartbeatServiceProvider) => {\r\n            _assert(apiKey && !apiKey.includes(':'), \"invalid-api-key\" /* INVALID_API_KEY */, { appName: app.name });\r\n            // Auth domain is optional if IdP sign in isn't being used\r\n            _assert(!(authDomain === null || authDomain === void 0 ? void 0 : authDomain.includes(':')), \"argument-error\" /* ARGUMENT_ERROR */, {\r\n                appName: app.name\r\n            });\r\n            const config = {\r\n                apiKey,\r\n                authDomain,\r\n                clientPlatform,\r\n                apiHost: \"identitytoolkit.googleapis.com\" /* API_HOST */,\r\n                tokenApiHost: \"securetoken.googleapis.com\" /* TOKEN_API_HOST */,\r\n                apiScheme: \"https\" /* API_SCHEME */,\r\n                sdkClientVersion: _getClientVersion(clientPlatform)\r\n            };\r\n            const authInstance = new AuthImpl(app, heartbeatServiceProvider, config);\r\n            _initializeAuthInstance(authInstance, deps);\r\n            return authInstance;\r\n        })(app, heartbeatServiceProvider);\r\n    }, \"PUBLIC\" /* PUBLIC */)\r\n        /**\r\n         * Auth can only be initialized by explicitly calling getAuth() or initializeAuth()\r\n         * For why we do this, See go/firebase-next-auth-init\r\n         */\r\n        .setInstantiationMode(\"EXPLICIT\" /* EXPLICIT */)\r\n        /**\r\n         * Because all firebase products that depend on auth depend on auth-internal directly,\r\n         * we need to initialize auth-internal after auth is initialized to make it available to other firebase products.\r\n         */\r\n        .setInstanceCreatedCallback((container, _instanceIdentifier, _instance) => {\r\n        const authInternalProvider = container.getProvider(\"auth-internal\" /* AUTH_INTERNAL */);\r\n        authInternalProvider.initialize();\r\n    }));\r\n    _registerComponent(new Component(\"auth-internal\" /* AUTH_INTERNAL */, container => {\r\n        const auth = _castAuth(container.getProvider(\"auth\" /* AUTH */).getImmediate());\r\n        return (auth => new AuthInterop(auth))(auth);\r\n    }, \"PRIVATE\" /* PRIVATE */).setInstantiationMode(\"EXPLICIT\" /* EXPLICIT */));\r\n    registerVersion(name, version, getVersionForPlatform(clientPlatform));\r\n    // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n    registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns the Auth instance associated with the provided {@link @firebase/app#FirebaseApp}.\r\n * If no instance exists, initializes an Auth instance with platform-specific default dependencies.\r\n *\r\n * @param app - The Firebase App.\r\n *\r\n * @public\r\n */\r\nfunction getAuth(app = getApp()) {\r\n    const provider = _getProvider(app, 'auth');\r\n    if (provider.isInitialized()) {\r\n        return provider.getImmediate();\r\n    }\r\n    return initializeAuth(app, {\r\n        popupRedirectResolver: browserPopupRedirectResolver,\r\n        persistence: [\r\n            indexedDBLocalPersistence,\r\n            browserLocalPersistence,\r\n            browserSessionPersistence\r\n        ]\r\n    });\r\n}\r\nregisterAuth(\"Browser\" /* BROWSER */);\n\nexport { signInWithCustomToken as $, ActionCodeOperation as A, debugErrorMap as B, prodErrorMap as C, AUTH_ERROR_CODES_MAP_DO_NOT_USE_INTERNALLY as D, initializeAuth as E, FactorId as F, connectAuthEmulator as G, AuthCredential as H, EmailAuthCredential as I, OAuthCredential as J, PhoneAuthCredential as K, inMemoryPersistence as L, EmailAuthProvider as M, FacebookAuthProvider as N, OperationType as O, PhoneAuthProvider as P, GoogleAuthProvider as Q, RecaptchaVerifier as R, SignInMethod as S, GithubAuthProvider as T, OAuthProvider as U, SAMLAuthProvider as V, TwitterAuthProvider as W, signInAnonymously as X, signInWithCredential as Y, linkWithCredential as Z, reauthenticateWithCredential as _, browserSessionPersistence as a, sendPasswordResetEmail as a0, confirmPasswordReset as a1, applyActionCode as a2, checkActionCode as a3, verifyPasswordResetCode as a4, createUserWithEmailAndPassword as a5, signInWithEmailAndPassword as a6, sendSignInLinkToEmail as a7, isSignInWithEmailLink as a8, signInWithEmailLink as a9, AuthEventManager as aA, _getRedirectResult as aB, _overrideRedirectResult as aC, _clearRedirectOutcomes as aD, _castAuth as aE, UserImpl as aF, AuthImpl as aG, _getClientVersion as aH, _generateEventId as aI, AuthPopup as aJ, FetchProvider as aK, SAMLAuthCredential as aL, fetchSignInMethodsForEmail as aa, sendEmailVerification as ab, verifyBeforeUpdateEmail as ac, ActionCodeURL as ad, parseActionCodeURL as ae, updateProfile as af, updateEmail as ag, updatePassword as ah, getIdToken as ai, getIdTokenResult as aj, unlink as ak, getAdditionalUserInfo as al, reload as am, getMultiFactorResolver as an, multiFactor as ao, _isIOS7Or8 as ap, debugAssert as aq, _isIOS as ar, _isAndroid as as, _fail as at, _getRedirectUrl as au, _getProjectConfig as av, _createError as aw, _assert as ax, _getInstance as ay, _persistenceKeyName as az, browserLocalPersistence as b, signInWithPopup as c, linkWithPopup as d, reauthenticateWithPopup as e, signInWithRedirect as f, linkWithRedirect as g, reauthenticateWithRedirect as h, indexedDBLocalPersistence as i, getRedirectResult as j, browserPopupRedirectResolver as k, linkWithPhoneNumber as l, PhoneMultiFactorGenerator as m, getAuth as n, ProviderId as o, setPersistence as p, onIdTokenChanged as q, reauthenticateWithPhoneNumber as r, signInWithPhoneNumber as s, beforeAuthStateChanged as t, updatePhoneNumber as u, onAuthStateChanged as v, useDeviceLanguage as w, updateCurrentUser as x, signOut as y, deleteUser as z };\n//# sourceMappingURL=index-90ebcfae.js.map\n","import { ap as _isIOS7Or8, aq as debugAssert, ar as _isIOS, as as _isAndroid, at as _fail, au as _getRedirectUrl, av as _getProjectConfig, aw as _createError, ax as _assert, ay as _getInstance, b as browserLocalPersistence, az as _persistenceKeyName, aA as AuthEventManager, a as browserSessionPersistence, aB as _getRedirectResult, aC as _overrideRedirectResult, aD as _clearRedirectOutcomes, aE as _castAuth } from './index-90ebcfae.js';\nexport { A as ActionCodeOperation, ad as ActionCodeURL, H as AuthCredential, D as AuthErrorCodes, aG as AuthImpl, aJ as AuthPopup, I as EmailAuthCredential, M as EmailAuthProvider, N as FacebookAuthProvider, F as FactorId, aK as FetchProvider, T as GithubAuthProvider, Q as GoogleAuthProvider, J as OAuthCredential, U as OAuthProvider, O as OperationType, K as PhoneAuthCredential, P as PhoneAuthProvider, m as PhoneMultiFactorGenerator, o as ProviderId, R as RecaptchaVerifier, aL as SAMLAuthCredential, V as SAMLAuthProvider, S as SignInMethod, W as TwitterAuthProvider, aF as UserImpl, ax as _assert, aE as _castAuth, at as _fail, aI as _generateEventId, aH as _getClientVersion, ay as _getInstance, aB as _getRedirectResult, aC as _overrideRedirectResult, az as _persistenceKeyName, a2 as applyActionCode, t as beforeAuthStateChanged, b as browserLocalPersistence, k as browserPopupRedirectResolver, a as browserSessionPersistence, a3 as checkActionCode, a1 as confirmPasswordReset, G as connectAuthEmulator, a5 as createUserWithEmailAndPassword, B as debugErrorMap, z as deleteUser, aa as fetchSignInMethodsForEmail, al as getAdditionalUserInfo, n as getAuth, ai as getIdToken, aj as getIdTokenResult, an as getMultiFactorResolver, j as getRedirectResult, L as inMemoryPersistence, i as indexedDBLocalPersistence, E as initializeAuth, a8 as isSignInWithEmailLink, Z as linkWithCredential, l as linkWithPhoneNumber, d as linkWithPopup, g as linkWithRedirect, ao as multiFactor, v as onAuthStateChanged, q as onIdTokenChanged, ae as parseActionCodeURL, C as prodErrorMap, _ as reauthenticateWithCredential, r as reauthenticateWithPhoneNumber, e as reauthenticateWithPopup, h as reauthenticateWithRedirect, am as reload, ab as sendEmailVerification, a0 as sendPasswordResetEmail, a7 as sendSignInLinkToEmail, p as setPersistence, X as signInAnonymously, Y as signInWithCredential, $ as signInWithCustomToken, a6 as signInWithEmailAndPassword, a9 as signInWithEmailLink, s as signInWithPhoneNumber, c as signInWithPopup, f as signInWithRedirect, y as signOut, ak as unlink, x as updateCurrentUser, ag as updateEmail, ah as updatePassword, u as updatePhoneNumber, af as updateProfile, w as useDeviceLanguage, ac as verifyBeforeUpdateEmail, a4 as verifyPasswordResetCode } from './index-90ebcfae.js';\nimport { querystringDecode } from '@firebase/util';\nimport '@firebase/app';\nimport 'tslib';\nimport '@firebase/logger';\nimport '@firebase/component';\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction _cordovaWindow() {\r\n    return window;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * How long to wait after the app comes back into focus before concluding that\r\n * the user closed the sign in tab.\r\n */\r\nconst REDIRECT_TIMEOUT_MS = 2000;\r\n/**\r\n * Generates the URL for the OAuth handler.\r\n */\r\nasync function _generateHandlerUrl(auth, event, provider) {\r\n    var _a;\r\n    // Get the cordova plugins\r\n    const { BuildInfo } = _cordovaWindow();\r\n    debugAssert(event.sessionId, 'AuthEvent did not contain a session ID');\r\n    const sessionDigest = await computeSha256(event.sessionId);\r\n    const additionalParams = {};\r\n    if (_isIOS()) {\r\n        // iOS app identifier\r\n        additionalParams['ibi'] = BuildInfo.packageName;\r\n    }\r\n    else if (_isAndroid()) {\r\n        // Android app identifier\r\n        additionalParams['apn'] = BuildInfo.packageName;\r\n    }\r\n    else {\r\n        _fail(auth, \"operation-not-supported-in-this-environment\" /* OPERATION_NOT_SUPPORTED */);\r\n    }\r\n    // Add the display name if available\r\n    if (BuildInfo.displayName) {\r\n        additionalParams['appDisplayName'] = BuildInfo.displayName;\r\n    }\r\n    // Attached the hashed session ID\r\n    additionalParams['sessionId'] = sessionDigest;\r\n    return _getRedirectUrl(auth, provider, event.type, undefined, (_a = event.eventId) !== null && _a !== void 0 ? _a : undefined, additionalParams);\r\n}\r\n/**\r\n * Validates that this app is valid for this project configuration\r\n */\r\nasync function _validateOrigin(auth) {\r\n    const { BuildInfo } = _cordovaWindow();\r\n    const request = {};\r\n    if (_isIOS()) {\r\n        request.iosBundleId = BuildInfo.packageName;\r\n    }\r\n    else if (_isAndroid()) {\r\n        request.androidPackageName = BuildInfo.packageName;\r\n    }\r\n    else {\r\n        _fail(auth, \"operation-not-supported-in-this-environment\" /* OPERATION_NOT_SUPPORTED */);\r\n    }\r\n    // Will fail automatically if package name is not authorized\r\n    await _getProjectConfig(auth, request);\r\n}\r\nfunction _performRedirect(handlerUrl) {\r\n    // Get the cordova plugins\r\n    const { cordova } = _cordovaWindow();\r\n    return new Promise(resolve => {\r\n        cordova.plugins.browsertab.isAvailable(browserTabIsAvailable => {\r\n            let iabRef = null;\r\n            if (browserTabIsAvailable) {\r\n                cordova.plugins.browsertab.openUrl(handlerUrl);\r\n            }\r\n            else {\r\n                // TODO: Return the inappbrowser ref that's returned from the open call\r\n                iabRef = cordova.InAppBrowser.open(handlerUrl, _isIOS7Or8() ? '_blank' : '_system', 'location=yes');\r\n            }\r\n            resolve(iabRef);\r\n        });\r\n    });\r\n}\r\n/**\r\n * This function waits for app activity to be seen before resolving. It does\r\n * this by attaching listeners to various dom events. Once the app is determined\r\n * to be visible, this promise resolves. AFTER that resolution, the listeners\r\n * are detached and any browser tabs left open will be closed.\r\n */\r\nasync function _waitForAppResume(auth, eventListener, iabRef) {\r\n    // Get the cordova plugins\r\n    const { cordova } = _cordovaWindow();\r\n    let cleanup = () => { };\r\n    try {\r\n        await new Promise((resolve, reject) => {\r\n            let onCloseTimer = null;\r\n            // DEFINE ALL THE CALLBACKS =====\r\n            function authEventSeen() {\r\n                var _a;\r\n                // Auth event was detected. Resolve this promise and close the extra\r\n                // window if it's still open.\r\n                resolve();\r\n                const closeBrowserTab = (_a = cordova.plugins.browsertab) === null || _a === void 0 ? void 0 : _a.close;\r\n                if (typeof closeBrowserTab === 'function') {\r\n                    closeBrowserTab();\r\n                }\r\n                // Close inappbrowser emebedded webview in iOS7 and 8 case if still\r\n                // open.\r\n                if (typeof (iabRef === null || iabRef === void 0 ? void 0 : iabRef.close) === 'function') {\r\n                    iabRef.close();\r\n                }\r\n            }\r\n            function resumed() {\r\n                if (onCloseTimer) {\r\n                    // This code already ran; do not rerun.\r\n                    return;\r\n                }\r\n                onCloseTimer = window.setTimeout(() => {\r\n                    // Wait two seeconds after resume then reject.\r\n                    reject(_createError(auth, \"redirect-cancelled-by-user\" /* REDIRECT_CANCELLED_BY_USER */));\r\n                }, REDIRECT_TIMEOUT_MS);\r\n            }\r\n            function visibilityChanged() {\r\n                if ((document === null || document === void 0 ? void 0 : document.visibilityState) === 'visible') {\r\n                    resumed();\r\n                }\r\n            }\r\n            // ATTACH ALL THE LISTENERS =====\r\n            // Listen for the auth event\r\n            eventListener.addPassiveListener(authEventSeen);\r\n            // Listen for resume and visibility events\r\n            document.addEventListener('resume', resumed, false);\r\n            if (_isAndroid()) {\r\n                document.addEventListener('visibilitychange', visibilityChanged, false);\r\n            }\r\n            // SETUP THE CLEANUP FUNCTION =====\r\n            cleanup = () => {\r\n                eventListener.removePassiveListener(authEventSeen);\r\n                document.removeEventListener('resume', resumed, false);\r\n                document.removeEventListener('visibilitychange', visibilityChanged, false);\r\n                if (onCloseTimer) {\r\n                    window.clearTimeout(onCloseTimer);\r\n                }\r\n            };\r\n        });\r\n    }\r\n    finally {\r\n        cleanup();\r\n    }\r\n}\r\n/**\r\n * Checks the configuration of the Cordova environment. This has no side effect\r\n * if the configuration is correct; otherwise it throws an error with the\r\n * missing plugin.\r\n */\r\nfunction _checkCordovaConfiguration(auth) {\r\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\r\n    const win = _cordovaWindow();\r\n    // Check all dependencies installed.\r\n    // https://github.com/nordnet/cordova-universal-links-plugin\r\n    // Note that cordova-universal-links-plugin has been abandoned.\r\n    // A fork with latest fixes is available at:\r\n    // https://www.npmjs.com/package/cordova-universal-links-plugin-fix\r\n    _assert(typeof ((_a = win === null || win === void 0 ? void 0 : win.universalLinks) === null || _a === void 0 ? void 0 : _a.subscribe) === 'function', auth, \"invalid-cordova-configuration\" /* INVALID_CORDOVA_CONFIGURATION */, {\r\n        missingPlugin: 'cordova-universal-links-plugin-fix'\r\n    });\r\n    // https://www.npmjs.com/package/cordova-plugin-buildinfo\r\n    _assert(typeof ((_b = win === null || win === void 0 ? void 0 : win.BuildInfo) === null || _b === void 0 ? void 0 : _b.packageName) !== 'undefined', auth, \"invalid-cordova-configuration\" /* INVALID_CORDOVA_CONFIGURATION */, {\r\n        missingPlugin: 'cordova-plugin-buildInfo'\r\n    });\r\n    // https://github.com/google/cordova-plugin-browsertab\r\n    _assert(typeof ((_e = (_d = (_c = win === null || win === void 0 ? void 0 : win.cordova) === null || _c === void 0 ? void 0 : _c.plugins) === null || _d === void 0 ? void 0 : _d.browsertab) === null || _e === void 0 ? void 0 : _e.openUrl) === 'function', auth, \"invalid-cordova-configuration\" /* INVALID_CORDOVA_CONFIGURATION */, {\r\n        missingPlugin: 'cordova-plugin-browsertab'\r\n    });\r\n    _assert(typeof ((_h = (_g = (_f = win === null || win === void 0 ? void 0 : win.cordova) === null || _f === void 0 ? void 0 : _f.plugins) === null || _g === void 0 ? void 0 : _g.browsertab) === null || _h === void 0 ? void 0 : _h.isAvailable) === 'function', auth, \"invalid-cordova-configuration\" /* INVALID_CORDOVA_CONFIGURATION */, {\r\n        missingPlugin: 'cordova-plugin-browsertab'\r\n    });\r\n    // https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-inappbrowser/\r\n    _assert(typeof ((_k = (_j = win === null || win === void 0 ? void 0 : win.cordova) === null || _j === void 0 ? void 0 : _j.InAppBrowser) === null || _k === void 0 ? void 0 : _k.open) === 'function', auth, \"invalid-cordova-configuration\" /* INVALID_CORDOVA_CONFIGURATION */, {\r\n        missingPlugin: 'cordova-plugin-inappbrowser'\r\n    });\r\n}\r\n/**\r\n * Computes the SHA-256 of a session ID. The SubtleCrypto interface is only\r\n * available in \"secure\" contexts, which covers Cordova (which is served on a file\r\n * protocol).\r\n */\r\nasync function computeSha256(sessionId) {\r\n    const bytes = stringToArrayBuffer(sessionId);\r\n    // TODO: For IE11 crypto has a different name and this operation comes back\r\n    //       as an object, not a promise. This is the old proposed standard that\r\n    //       is used by IE11:\r\n    // https://www.w3.org/TR/2013/WD-WebCryptoAPI-20130108/#cryptooperation-interface\r\n    const buf = await crypto.subtle.digest('SHA-256', bytes);\r\n    const arr = Array.from(new Uint8Array(buf));\r\n    return arr.map(num => num.toString(16).padStart(2, '0')).join('');\r\n}\r\nfunction stringToArrayBuffer(str) {\r\n    // This function is only meant to deal with an ASCII charset and makes\r\n    // certain simplifying assumptions.\r\n    debugAssert(/[0-9a-zA-Z]+/.test(str), 'Can only convert alpha-numeric strings');\r\n    if (typeof TextEncoder !== 'undefined') {\r\n        return new TextEncoder().encode(str);\r\n    }\r\n    const buff = new ArrayBuffer(str.length);\r\n    const view = new Uint8Array(buff);\r\n    for (let i = 0; i < str.length; i++) {\r\n        view[i] = str.charCodeAt(i);\r\n    }\r\n    return view;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SESSION_ID_LENGTH = 20;\r\n/** Custom AuthEventManager that adds passive listeners to events */\r\nclass CordovaAuthEventManager extends AuthEventManager {\r\n    constructor() {\r\n        super(...arguments);\r\n        this.passiveListeners = new Set();\r\n        this.initPromise = new Promise(resolve => {\r\n            this.resolveInialized = resolve;\r\n        });\r\n    }\r\n    addPassiveListener(cb) {\r\n        this.passiveListeners.add(cb);\r\n    }\r\n    removePassiveListener(cb) {\r\n        this.passiveListeners.delete(cb);\r\n    }\r\n    // In a Cordova environment, this manager can live through multiple redirect\r\n    // operations\r\n    resetRedirect() {\r\n        this.queuedRedirectEvent = null;\r\n        this.hasHandledPotentialRedirect = false;\r\n    }\r\n    /** Override the onEvent method */\r\n    onEvent(event) {\r\n        this.resolveInialized();\r\n        this.passiveListeners.forEach(cb => cb(event));\r\n        return super.onEvent(event);\r\n    }\r\n    async initialized() {\r\n        await this.initPromise;\r\n    }\r\n}\r\n/**\r\n * Generates a (partial) {@link AuthEvent}.\r\n */\r\nfunction _generateNewEvent(auth, type, eventId = null) {\r\n    return {\r\n        type,\r\n        eventId,\r\n        urlResponse: null,\r\n        sessionId: generateSessionId(),\r\n        postBody: null,\r\n        tenantId: auth.tenantId,\r\n        error: _createError(auth, \"no-auth-event\" /* NO_AUTH_EVENT */)\r\n    };\r\n}\r\nfunction _savePartialEvent(auth, event) {\r\n    return storage()._set(persistenceKey(auth), event);\r\n}\r\nasync function _getAndRemoveEvent(auth) {\r\n    const event = (await storage()._get(persistenceKey(auth)));\r\n    if (event) {\r\n        await storage()._remove(persistenceKey(auth));\r\n    }\r\n    return event;\r\n}\r\nfunction _eventFromPartialAndUrl(partialEvent, url) {\r\n    var _a, _b;\r\n    // Parse the deep link within the dynamic link URL.\r\n    const callbackUrl = _getDeepLinkFromCallback(url);\r\n    // Confirm it is actually a callback URL.\r\n    // Currently the universal link will be of this format:\r\n    // https://<AUTH_DOMAIN>/__/auth/callback<OAUTH_RESPONSE>\r\n    // This is a fake URL but is not intended to take the user anywhere\r\n    // and just redirect to the app.\r\n    if (callbackUrl.includes('/__/auth/callback')) {\r\n        // Check if there is an error in the URL.\r\n        // This mechanism is also used to pass errors back to the app:\r\n        // https://<AUTH_DOMAIN>/__/auth/callback?firebaseError=<STRINGIFIED_ERROR>\r\n        const params = searchParamsOrEmpty(callbackUrl);\r\n        // Get the error object corresponding to the stringified error if found.\r\n        const errorObject = params['firebaseError']\r\n            ? parseJsonOrNull(decodeURIComponent(params['firebaseError']))\r\n            : null;\r\n        const code = (_b = (_a = errorObject === null || errorObject === void 0 ? void 0 : errorObject['code']) === null || _a === void 0 ? void 0 : _a.split('auth/')) === null || _b === void 0 ? void 0 : _b[1];\r\n        const error = code ? _createError(code) : null;\r\n        if (error) {\r\n            return {\r\n                type: partialEvent.type,\r\n                eventId: partialEvent.eventId,\r\n                tenantId: partialEvent.tenantId,\r\n                error,\r\n                urlResponse: null,\r\n                sessionId: null,\r\n                postBody: null\r\n            };\r\n        }\r\n        else {\r\n            return {\r\n                type: partialEvent.type,\r\n                eventId: partialEvent.eventId,\r\n                tenantId: partialEvent.tenantId,\r\n                sessionId: partialEvent.sessionId,\r\n                urlResponse: callbackUrl,\r\n                postBody: null\r\n            };\r\n        }\r\n    }\r\n    return null;\r\n}\r\nfunction generateSessionId() {\r\n    const chars = [];\r\n    const allowedChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\r\n    for (let i = 0; i < SESSION_ID_LENGTH; i++) {\r\n        const idx = Math.floor(Math.random() * allowedChars.length);\r\n        chars.push(allowedChars.charAt(idx));\r\n    }\r\n    return chars.join('');\r\n}\r\nfunction storage() {\r\n    return _getInstance(browserLocalPersistence);\r\n}\r\nfunction persistenceKey(auth) {\r\n    return _persistenceKeyName(\"authEvent\" /* AUTH_EVENT */, auth.config.apiKey, auth.name);\r\n}\r\nfunction parseJsonOrNull(json) {\r\n    try {\r\n        return JSON.parse(json);\r\n    }\r\n    catch (e) {\r\n        return null;\r\n    }\r\n}\r\n// Exported for testing\r\nfunction _getDeepLinkFromCallback(url) {\r\n    const params = searchParamsOrEmpty(url);\r\n    const link = params['link'] ? decodeURIComponent(params['link']) : undefined;\r\n    // Double link case (automatic redirect)\r\n    const doubleDeepLink = searchParamsOrEmpty(link)['link'];\r\n    // iOS custom scheme links.\r\n    const iOSDeepLink = params['deep_link_id']\r\n        ? decodeURIComponent(params['deep_link_id'])\r\n        : undefined;\r\n    const iOSDoubleDeepLink = searchParamsOrEmpty(iOSDeepLink)['link'];\r\n    return iOSDoubleDeepLink || iOSDeepLink || doubleDeepLink || link || url;\r\n}\r\n/**\r\n * Optimistically tries to get search params from a string, or else returns an\r\n * empty search params object.\r\n */\r\nfunction searchParamsOrEmpty(url) {\r\n    if (!(url === null || url === void 0 ? void 0 : url.includes('?'))) {\r\n        return {};\r\n    }\r\n    const [_, ...rest] = url.split('?');\r\n    return querystringDecode(rest.join('?'));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * How long to wait for the initial auth event before concluding no\r\n * redirect pending\r\n */\r\nconst INITIAL_EVENT_TIMEOUT_MS = 500;\r\nclass CordovaPopupRedirectResolver {\r\n    constructor() {\r\n        this._redirectPersistence = browserSessionPersistence;\r\n        this._shouldInitProactively = true; // This is lightweight for Cordova\r\n        this.eventManagers = new Map();\r\n        this.originValidationPromises = {};\r\n        this._completeRedirectFn = _getRedirectResult;\r\n        this._overrideRedirectResult = _overrideRedirectResult;\r\n    }\r\n    async _initialize(auth) {\r\n        const key = auth._key();\r\n        let manager = this.eventManagers.get(key);\r\n        if (!manager) {\r\n            manager = new CordovaAuthEventManager(auth);\r\n            this.eventManagers.set(key, manager);\r\n            this.attachCallbackListeners(auth, manager);\r\n        }\r\n        return manager;\r\n    }\r\n    _openPopup(auth) {\r\n        _fail(auth, \"operation-not-supported-in-this-environment\" /* OPERATION_NOT_SUPPORTED */);\r\n    }\r\n    async _openRedirect(auth, provider, authType, eventId) {\r\n        _checkCordovaConfiguration(auth);\r\n        const manager = await this._initialize(auth);\r\n        await manager.initialized();\r\n        // Reset the persisted redirect states. This does not matter on Web where\r\n        // the redirect always blows away application state entirely. On Cordova,\r\n        // the app maintains control flow through the redirect.\r\n        manager.resetRedirect();\r\n        _clearRedirectOutcomes();\r\n        await this._originValidation(auth);\r\n        const event = _generateNewEvent(auth, authType, eventId);\r\n        await _savePartialEvent(auth, event);\r\n        const url = await _generateHandlerUrl(auth, event, provider);\r\n        const iabRef = await _performRedirect(url);\r\n        return _waitForAppResume(auth, manager, iabRef);\r\n    }\r\n    _isIframeWebStorageSupported(_auth, _cb) {\r\n        throw new Error('Method not implemented.');\r\n    }\r\n    _originValidation(auth) {\r\n        const key = auth._key();\r\n        if (!this.originValidationPromises[key]) {\r\n            this.originValidationPromises[key] = _validateOrigin(auth);\r\n        }\r\n        return this.originValidationPromises[key];\r\n    }\r\n    attachCallbackListeners(auth, manager) {\r\n        // Get the global plugins\r\n        const { universalLinks, handleOpenURL, BuildInfo } = _cordovaWindow();\r\n        const noEventTimeout = setTimeout(async () => {\r\n            // We didn't see that initial event. Clear any pending object and\r\n            // dispatch no event\r\n            await _getAndRemoveEvent(auth);\r\n            manager.onEvent(generateNoEvent());\r\n        }, INITIAL_EVENT_TIMEOUT_MS);\r\n        const universalLinksCb = async (eventData) => {\r\n            // We have an event so we can clear the no event timeout\r\n            clearTimeout(noEventTimeout);\r\n            const partialEvent = await _getAndRemoveEvent(auth);\r\n            let finalEvent = null;\r\n            if (partialEvent && (eventData === null || eventData === void 0 ? void 0 : eventData['url'])) {\r\n                finalEvent = _eventFromPartialAndUrl(partialEvent, eventData['url']);\r\n            }\r\n            // If finalEvent is never filled, trigger with no event\r\n            manager.onEvent(finalEvent || generateNoEvent());\r\n        };\r\n        // Universal links subscriber doesn't exist for iOS, so we need to check\r\n        if (typeof universalLinks !== 'undefined' &&\r\n            typeof universalLinks.subscribe === 'function') {\r\n            universalLinks.subscribe(null, universalLinksCb);\r\n        }\r\n        // iOS 7 or 8 custom URL schemes.\r\n        // This is also the current default behavior for iOS 9+.\r\n        // For this to work, cordova-plugin-customurlscheme needs to be installed.\r\n        // https://github.com/EddyVerbruggen/Custom-URL-scheme\r\n        // Do not overwrite the existing developer's URL handler.\r\n        const existingHandleOpenURL = handleOpenURL;\r\n        const packagePrefix = `${BuildInfo.packageName.toLowerCase()}://`;\r\n        _cordovaWindow().handleOpenURL = async (url) => {\r\n            if (url.toLowerCase().startsWith(packagePrefix)) {\r\n                // We want this intentionally to float\r\n                // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n                universalLinksCb({ url });\r\n            }\r\n            // Call the developer's handler if it is present.\r\n            if (typeof existingHandleOpenURL === 'function') {\r\n                try {\r\n                    existingHandleOpenURL(url);\r\n                }\r\n                catch (e) {\r\n                    // This is a developer error. Don't stop the flow of the SDK.\r\n                    console.error(e);\r\n                }\r\n            }\r\n        };\r\n    }\r\n}\r\n/**\r\n * An implementation of {@link PopupRedirectResolver} suitable for Cordova\r\n * based applications.\r\n *\r\n * @public\r\n */\r\nconst cordovaPopupRedirectResolver = CordovaPopupRedirectResolver;\r\nfunction generateNoEvent() {\r\n    return {\r\n        type: \"unknown\" /* UNKNOWN */,\r\n        eventId: null,\r\n        sessionId: null,\r\n        urlResponse: null,\r\n        postBody: null,\r\n        tenantId: null,\r\n        error: _createError(\"no-auth-event\" /* NO_AUTH_EVENT */)\r\n    };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// This function should only be called by frameworks (e.g. FirebaseUI-web) to log their usage.\r\n// It is not intended for direct use by developer apps. NO jsdoc here to intentionally leave it out\r\n// of autogenerated documentation pages to reduce accidental misuse.\r\nfunction addFrameworkForLogging(auth, framework) {\r\n    _castAuth(auth)._logFramework(framework);\r\n}\n\nexport { addFrameworkForLogging, cordovaPopupRedirectResolver };\n//# sourceMappingURL=internal.js.map\n","import firebase from '@firebase/app-compat';\nimport * as exp from '@firebase/auth/internal';\nimport { Component } from '@firebase/component';\nimport { isBrowserExtension, isReactNative, isNode, getUA, isIE, isIndexedDBAvailable, FirebaseError } from '@firebase/util';\n\nvar name = \"@firebase/auth-compat\";\nvar version = \"0.2.18\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst CORDOVA_ONDEVICEREADY_TIMEOUT_MS = 1000;\r\nfunction _getCurrentScheme() {\r\n    var _a;\r\n    return ((_a = self === null || self === void 0 ? void 0 : self.location) === null || _a === void 0 ? void 0 : _a.protocol) || null;\r\n}\r\n/**\r\n * @return {boolean} Whether the current environment is http or https.\r\n */\r\nfunction _isHttpOrHttps() {\r\n    return _getCurrentScheme() === 'http:' || _getCurrentScheme() === 'https:';\r\n}\r\n/**\r\n * @param {?string=} ua The user agent.\r\n * @return {boolean} Whether the app is rendered in a mobile iOS or Android\r\n *     Cordova environment.\r\n */\r\nfunction _isAndroidOrIosCordovaScheme(ua = getUA()) {\r\n    return !!((_getCurrentScheme() === 'file:' ||\r\n        _getCurrentScheme() === 'ionic:' ||\r\n        _getCurrentScheme() === 'capacitor:') &&\r\n        ua.toLowerCase().match(/iphone|ipad|ipod|android/));\r\n}\r\n/**\r\n * @return {boolean} Whether the environment is a native environment, where\r\n *     CORS checks do not apply.\r\n */\r\nfunction _isNativeEnvironment() {\r\n    return isReactNative() || isNode();\r\n}\r\n/**\r\n * Checks whether the user agent is IE11.\r\n * @return {boolean} True if it is IE11.\r\n */\r\nfunction _isIe11() {\r\n    return isIE() && (document === null || document === void 0 ? void 0 : document.documentMode) === 11;\r\n}\r\n/**\r\n * Checks whether the user agent is Edge.\r\n * @param {string} userAgent The browser user agent string.\r\n * @return {boolean} True if it is Edge.\r\n */\r\nfunction _isEdge(ua = getUA()) {\r\n    return /Edge\\/\\d+/.test(ua);\r\n}\r\n/**\r\n * @param {?string=} opt_userAgent The navigator user agent.\r\n * @return {boolean} Whether local storage is not synchronized between an iframe\r\n *     and a popup of the same domain.\r\n */\r\nfunction _isLocalStorageNotSynchronized(ua = getUA()) {\r\n    return _isIe11() || _isEdge(ua);\r\n}\r\n/** @return {boolean} Whether web storage is supported. */\r\nfunction _isWebStorageSupported() {\r\n    try {\r\n        const storage = self.localStorage;\r\n        const key = exp._generateEventId();\r\n        if (storage) {\r\n            // setItem will throw an exception if we cannot access WebStorage (e.g.,\r\n            // Safari in private mode).\r\n            storage['setItem'](key, '1');\r\n            storage['removeItem'](key);\r\n            // For browsers where iframe web storage does not synchronize with a popup\r\n            // of the same domain, indexedDB is used for persistent storage. These\r\n            // browsers include IE11 and Edge.\r\n            // Make sure it is supported (IE11 and Edge private mode does not support\r\n            // that).\r\n            if (_isLocalStorageNotSynchronized()) {\r\n                // In such browsers, if indexedDB is not supported, an iframe cannot be\r\n                // notified of the popup sign in result.\r\n                return isIndexedDBAvailable();\r\n            }\r\n            return true;\r\n        }\r\n    }\r\n    catch (e) {\r\n        // localStorage is not available from a worker. Test availability of\r\n        // indexedDB.\r\n        return _isWorker() && isIndexedDBAvailable();\r\n    }\r\n    return false;\r\n}\r\n/**\r\n * @param {?Object=} global The optional global scope.\r\n * @return {boolean} Whether current environment is a worker.\r\n */\r\nfunction _isWorker() {\r\n    // WorkerGlobalScope only defined in worker environment.\r\n    return (typeof global !== 'undefined' &&\r\n        'WorkerGlobalScope' in global &&\r\n        'importScripts' in global);\r\n}\r\nfunction _isPopupRedirectSupported() {\r\n    return ((_isHttpOrHttps() ||\r\n        isBrowserExtension() ||\r\n        _isAndroidOrIosCordovaScheme()) &&\r\n        // React Native with remote debugging reports its location.protocol as\r\n        // http.\r\n        !_isNativeEnvironment() &&\r\n        // Local storage has to be supported for browser popup and redirect\r\n        // operations to work.\r\n        _isWebStorageSupported() &&\r\n        // DOM, popups and redirects are not supported within a worker.\r\n        !_isWorker());\r\n}\r\n/** Quick check that indicates the platform *may* be Cordova */\r\nfunction _isLikelyCordova() {\r\n    return _isAndroidOrIosCordovaScheme() && typeof document !== 'undefined';\r\n}\r\nasync function _isCordova() {\r\n    if (!_isLikelyCordova()) {\r\n        return false;\r\n    }\r\n    return new Promise(resolve => {\r\n        const timeoutId = setTimeout(() => {\r\n            // We've waited long enough; the telltale Cordova event didn't happen\r\n            resolve(false);\r\n        }, CORDOVA_ONDEVICEREADY_TIMEOUT_MS);\r\n        document.addEventListener('deviceready', () => {\r\n            clearTimeout(timeoutId);\r\n            resolve(true);\r\n        });\r\n    });\r\n}\r\nfunction _getSelfWindow() {\r\n    return typeof window !== 'undefined' ? window : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst Persistence = {\r\n    LOCAL: 'local',\r\n    NONE: 'none',\r\n    SESSION: 'session'\r\n};\r\nconst _assert$3 = exp._assert;\r\nconst PERSISTENCE_KEY = 'persistence';\r\n/**\r\n * Validates that an argument is a valid persistence value. If an invalid type\r\n * is specified, an error is thrown synchronously.\r\n */\r\nfunction _validatePersistenceArgument(auth, persistence) {\r\n    _assert$3(Object.values(Persistence).includes(persistence), auth, \"invalid-persistence-type\" /* INVALID_PERSISTENCE */);\r\n    // Validate if the specified type is supported in the current environment.\r\n    if (isReactNative()) {\r\n        // This is only supported in a browser.\r\n        _assert$3(persistence !== Persistence.SESSION, auth, \"unsupported-persistence-type\" /* UNSUPPORTED_PERSISTENCE */);\r\n        return;\r\n    }\r\n    if (isNode()) {\r\n        // Only none is supported in Node.js.\r\n        _assert$3(persistence === Persistence.NONE, auth, \"unsupported-persistence-type\" /* UNSUPPORTED_PERSISTENCE */);\r\n        return;\r\n    }\r\n    if (_isWorker()) {\r\n        // In a worker environment, either LOCAL or NONE are supported.\r\n        // If indexedDB not supported and LOCAL provided, throw an error\r\n        _assert$3(persistence === Persistence.NONE ||\r\n            (persistence === Persistence.LOCAL && isIndexedDBAvailable()), auth, \"unsupported-persistence-type\" /* UNSUPPORTED_PERSISTENCE */);\r\n        return;\r\n    }\r\n    // This is restricted by what the browser supports.\r\n    _assert$3(persistence === Persistence.NONE || _isWebStorageSupported(), auth, \"unsupported-persistence-type\" /* UNSUPPORTED_PERSISTENCE */);\r\n}\r\nasync function _savePersistenceForRedirect(auth) {\r\n    await auth._initializationPromise;\r\n    const session = getSessionStorageIfAvailable();\r\n    const key = exp._persistenceKeyName(PERSISTENCE_KEY, auth.config.apiKey, auth.name);\r\n    if (session) {\r\n        session.setItem(key, auth._getPersistence());\r\n    }\r\n}\r\nfunction _getPersistencesFromRedirect(apiKey, appName) {\r\n    const session = getSessionStorageIfAvailable();\r\n    if (!session) {\r\n        return [];\r\n    }\r\n    const key = exp._persistenceKeyName(PERSISTENCE_KEY, apiKey, appName);\r\n    const persistence = session.getItem(key);\r\n    switch (persistence) {\r\n        case Persistence.NONE:\r\n            return [exp.inMemoryPersistence];\r\n        case Persistence.LOCAL:\r\n            return [exp.indexedDBLocalPersistence, exp.browserSessionPersistence];\r\n        case Persistence.SESSION:\r\n            return [exp.browserSessionPersistence];\r\n        default:\r\n            return [];\r\n    }\r\n}\r\n/** Returns session storage, or null if the property access errors */\r\nfunction getSessionStorageIfAvailable() {\r\n    var _a;\r\n    try {\r\n        return ((_a = _getSelfWindow()) === null || _a === void 0 ? void 0 : _a.sessionStorage) || null;\r\n    }\r\n    catch (e) {\r\n        return null;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _assert$2 = exp._assert;\r\n/** Platform-agnostic popup-redirect resolver */\r\nclass CompatPopupRedirectResolver {\r\n    constructor() {\r\n        // Create both resolvers for dynamic resolution later\r\n        this.browserResolver = exp._getInstance(exp.browserPopupRedirectResolver);\r\n        this.cordovaResolver = exp._getInstance(exp.cordovaPopupRedirectResolver);\r\n        // The actual resolver in use: either browserResolver or cordovaResolver.\r\n        this.underlyingResolver = null;\r\n        this._redirectPersistence = exp.browserSessionPersistence;\r\n        this._completeRedirectFn = exp._getRedirectResult;\r\n        this._overrideRedirectResult = exp._overrideRedirectResult;\r\n    }\r\n    async _initialize(auth) {\r\n        await this.selectUnderlyingResolver();\r\n        return this.assertedUnderlyingResolver._initialize(auth);\r\n    }\r\n    async _openPopup(auth, provider, authType, eventId) {\r\n        await this.selectUnderlyingResolver();\r\n        return this.assertedUnderlyingResolver._openPopup(auth, provider, authType, eventId);\r\n    }\r\n    async _openRedirect(auth, provider, authType, eventId) {\r\n        await this.selectUnderlyingResolver();\r\n        return this.assertedUnderlyingResolver._openRedirect(auth, provider, authType, eventId);\r\n    }\r\n    _isIframeWebStorageSupported(auth, cb) {\r\n        this.assertedUnderlyingResolver._isIframeWebStorageSupported(auth, cb);\r\n    }\r\n    _originValidation(auth) {\r\n        return this.assertedUnderlyingResolver._originValidation(auth);\r\n    }\r\n    get _shouldInitProactively() {\r\n        return _isLikelyCordova() || this.browserResolver._shouldInitProactively;\r\n    }\r\n    get assertedUnderlyingResolver() {\r\n        _assert$2(this.underlyingResolver, \"internal-error\" /* INTERNAL_ERROR */);\r\n        return this.underlyingResolver;\r\n    }\r\n    async selectUnderlyingResolver() {\r\n        if (this.underlyingResolver) {\r\n            return;\r\n        }\r\n        // We haven't yet determined whether or not we're in Cordova; go ahead\r\n        // and determine that state now.\r\n        const isCordova = await _isCordova();\r\n        this.underlyingResolver = isCordova\r\n            ? this.cordovaResolver\r\n            : this.browserResolver;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction unwrap(object) {\r\n    return object.unwrap();\r\n}\r\nfunction wrapped(object) {\r\n    return object.wrapped();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction credentialFromResponse(userCredential) {\r\n    return credentialFromObject(userCredential);\r\n}\r\nfunction attachExtraErrorFields(auth, e) {\r\n    var _a, _b;\r\n    // The response contains all fields from the server which may or may not\r\n    // actually match the underlying type\r\n    const response = (_a = e.customData) === null || _a === void 0 ? void 0 : _a._tokenResponse;\r\n    if (((_b = e) === null || _b === void 0 ? void 0 : _b.code) === 'auth/multi-factor-auth-required') {\r\n        const mfaErr = e;\r\n        mfaErr.resolver = new MultiFactorResolver(auth, exp.getMultiFactorResolver(auth, e));\r\n    }\r\n    else if (response) {\r\n        const credential = credentialFromObject(e);\r\n        const credErr = e;\r\n        if (credential) {\r\n            credErr.credential = credential;\r\n            credErr.tenantId = response.tenantId || undefined;\r\n            credErr.email = response.email || undefined;\r\n            credErr.phoneNumber = response.phoneNumber || undefined;\r\n        }\r\n    }\r\n}\r\nfunction credentialFromObject(object) {\r\n    const { _tokenResponse } = (object instanceof FirebaseError ? object.customData : object);\r\n    if (!_tokenResponse) {\r\n        return null;\r\n    }\r\n    // Handle phone Auth credential responses, as they have a different format\r\n    // from other backend responses (i.e. no providerId). This is also only the\r\n    // case for user credentials (does not work for errors).\r\n    if (!(object instanceof FirebaseError)) {\r\n        if ('temporaryProof' in _tokenResponse && 'phoneNumber' in _tokenResponse) {\r\n            return exp.PhoneAuthProvider.credentialFromResult(object);\r\n        }\r\n    }\r\n    const providerId = _tokenResponse.providerId;\r\n    // Email and password is not supported as there is no situation where the\r\n    // server would return the password to the client.\r\n    if (!providerId || providerId === exp.ProviderId.PASSWORD) {\r\n        return null;\r\n    }\r\n    let provider;\r\n    switch (providerId) {\r\n        case exp.ProviderId.GOOGLE:\r\n            provider = exp.GoogleAuthProvider;\r\n            break;\r\n        case exp.ProviderId.FACEBOOK:\r\n            provider = exp.FacebookAuthProvider;\r\n            break;\r\n        case exp.ProviderId.GITHUB:\r\n            provider = exp.GithubAuthProvider;\r\n            break;\r\n        case exp.ProviderId.TWITTER:\r\n            provider = exp.TwitterAuthProvider;\r\n            break;\r\n        default:\r\n            const { oauthIdToken, oauthAccessToken, oauthTokenSecret, pendingToken, nonce } = _tokenResponse;\r\n            if (!oauthAccessToken &&\r\n                !oauthTokenSecret &&\r\n                !oauthIdToken &&\r\n                !pendingToken) {\r\n                return null;\r\n            }\r\n            // TODO(avolkovi): uncomment this and get it working with SAML & OIDC\r\n            if (pendingToken) {\r\n                if (providerId.startsWith('saml.')) {\r\n                    return exp.SAMLAuthCredential._create(providerId, pendingToken);\r\n                }\r\n                else {\r\n                    // OIDC and non-default providers excluding Twitter.\r\n                    return exp.OAuthCredential._fromParams({\r\n                        providerId,\r\n                        signInMethod: providerId,\r\n                        pendingToken,\r\n                        idToken: oauthIdToken,\r\n                        accessToken: oauthAccessToken\r\n                    });\r\n                }\r\n            }\r\n            return new exp.OAuthProvider(providerId).credential({\r\n                idToken: oauthIdToken,\r\n                accessToken: oauthAccessToken,\r\n                rawNonce: nonce\r\n            });\r\n    }\r\n    return object instanceof FirebaseError\r\n        ? provider.credentialFromError(object)\r\n        : provider.credentialFromResult(object);\r\n}\r\nfunction convertCredential(auth, credentialPromise) {\r\n    return credentialPromise\r\n        .catch(e => {\r\n        if (e instanceof FirebaseError) {\r\n            attachExtraErrorFields(auth, e);\r\n        }\r\n        throw e;\r\n    })\r\n        .then(credential => {\r\n        const operationType = credential.operationType;\r\n        const user = credential.user;\r\n        return {\r\n            operationType,\r\n            credential: credentialFromResponse(credential),\r\n            additionalUserInfo: exp.getAdditionalUserInfo(credential),\r\n            user: User.getOrCreate(user)\r\n        };\r\n    });\r\n}\r\nasync function convertConfirmationResult(auth, confirmationResultPromise) {\r\n    const confirmationResultExp = await confirmationResultPromise;\r\n    return {\r\n        verificationId: confirmationResultExp.verificationId,\r\n        confirm: (verificationCode) => convertCredential(auth, confirmationResultExp.confirm(verificationCode))\r\n    };\r\n}\r\nclass MultiFactorResolver {\r\n    constructor(auth, resolver) {\r\n        this.resolver = resolver;\r\n        this.auth = wrapped(auth);\r\n    }\r\n    get session() {\r\n        return this.resolver.session;\r\n    }\r\n    get hints() {\r\n        return this.resolver.hints;\r\n    }\r\n    resolveSignIn(assertion) {\r\n        return convertCredential(unwrap(this.auth), this.resolver.resolveSignIn(assertion));\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass User {\r\n    constructor(_delegate) {\r\n        this._delegate = _delegate;\r\n        this.multiFactor = exp.multiFactor(_delegate);\r\n    }\r\n    static getOrCreate(user) {\r\n        if (!User.USER_MAP.has(user)) {\r\n            User.USER_MAP.set(user, new User(user));\r\n        }\r\n        return User.USER_MAP.get(user);\r\n    }\r\n    delete() {\r\n        return this._delegate.delete();\r\n    }\r\n    reload() {\r\n        return this._delegate.reload();\r\n    }\r\n    toJSON() {\r\n        return this._delegate.toJSON();\r\n    }\r\n    getIdTokenResult(forceRefresh) {\r\n        return this._delegate.getIdTokenResult(forceRefresh);\r\n    }\r\n    getIdToken(forceRefresh) {\r\n        return this._delegate.getIdToken(forceRefresh);\r\n    }\r\n    linkAndRetrieveDataWithCredential(credential) {\r\n        return this.linkWithCredential(credential);\r\n    }\r\n    async linkWithCredential(credential) {\r\n        return convertCredential(this.auth, exp.linkWithCredential(this._delegate, credential));\r\n    }\r\n    async linkWithPhoneNumber(phoneNumber, applicationVerifier) {\r\n        return convertConfirmationResult(this.auth, exp.linkWithPhoneNumber(this._delegate, phoneNumber, applicationVerifier));\r\n    }\r\n    async linkWithPopup(provider) {\r\n        return convertCredential(this.auth, exp.linkWithPopup(this._delegate, provider, CompatPopupRedirectResolver));\r\n    }\r\n    async linkWithRedirect(provider) {\r\n        await _savePersistenceForRedirect(exp._castAuth(this.auth));\r\n        return exp.linkWithRedirect(this._delegate, provider, CompatPopupRedirectResolver);\r\n    }\r\n    reauthenticateAndRetrieveDataWithCredential(credential) {\r\n        return this.reauthenticateWithCredential(credential);\r\n    }\r\n    async reauthenticateWithCredential(credential) {\r\n        return convertCredential(this.auth, exp.reauthenticateWithCredential(this._delegate, credential));\r\n    }\r\n    reauthenticateWithPhoneNumber(phoneNumber, applicationVerifier) {\r\n        return convertConfirmationResult(this.auth, exp.reauthenticateWithPhoneNumber(this._delegate, phoneNumber, applicationVerifier));\r\n    }\r\n    reauthenticateWithPopup(provider) {\r\n        return convertCredential(this.auth, exp.reauthenticateWithPopup(this._delegate, provider, CompatPopupRedirectResolver));\r\n    }\r\n    async reauthenticateWithRedirect(provider) {\r\n        await _savePersistenceForRedirect(exp._castAuth(this.auth));\r\n        return exp.reauthenticateWithRedirect(this._delegate, provider, CompatPopupRedirectResolver);\r\n    }\r\n    sendEmailVerification(actionCodeSettings) {\r\n        return exp.sendEmailVerification(this._delegate, actionCodeSettings);\r\n    }\r\n    async unlink(providerId) {\r\n        await exp.unlink(this._delegate, providerId);\r\n        return this;\r\n    }\r\n    updateEmail(newEmail) {\r\n        return exp.updateEmail(this._delegate, newEmail);\r\n    }\r\n    updatePassword(newPassword) {\r\n        return exp.updatePassword(this._delegate, newPassword);\r\n    }\r\n    updatePhoneNumber(phoneCredential) {\r\n        return exp.updatePhoneNumber(this._delegate, phoneCredential);\r\n    }\r\n    updateProfile(profile) {\r\n        return exp.updateProfile(this._delegate, profile);\r\n    }\r\n    verifyBeforeUpdateEmail(newEmail, actionCodeSettings) {\r\n        return exp.verifyBeforeUpdateEmail(this._delegate, newEmail, actionCodeSettings);\r\n    }\r\n    get emailVerified() {\r\n        return this._delegate.emailVerified;\r\n    }\r\n    get isAnonymous() {\r\n        return this._delegate.isAnonymous;\r\n    }\r\n    get metadata() {\r\n        return this._delegate.metadata;\r\n    }\r\n    get phoneNumber() {\r\n        return this._delegate.phoneNumber;\r\n    }\r\n    get providerData() {\r\n        return this._delegate.providerData;\r\n    }\r\n    get refreshToken() {\r\n        return this._delegate.refreshToken;\r\n    }\r\n    get tenantId() {\r\n        return this._delegate.tenantId;\r\n    }\r\n    get displayName() {\r\n        return this._delegate.displayName;\r\n    }\r\n    get email() {\r\n        return this._delegate.email;\r\n    }\r\n    get photoURL() {\r\n        return this._delegate.photoURL;\r\n    }\r\n    get providerId() {\r\n        return this._delegate.providerId;\r\n    }\r\n    get uid() {\r\n        return this._delegate.uid;\r\n    }\r\n    get auth() {\r\n        return this._delegate.auth;\r\n    }\r\n}\r\n// Maintain a map so that there's always a 1:1 mapping between new User and\r\n// legacy compat users\r\nUser.USER_MAP = new WeakMap();\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _assert$1 = exp._assert;\r\nclass Auth {\r\n    constructor(app, provider) {\r\n        this.app = app;\r\n        if (provider.isInitialized()) {\r\n            this._delegate = provider.getImmediate();\r\n            this.linkUnderlyingAuth();\r\n            return;\r\n        }\r\n        const { apiKey } = app.options;\r\n        // TODO: platform needs to be determined using heuristics\r\n        _assert$1(apiKey, \"invalid-api-key\" /* INVALID_API_KEY */, {\r\n            appName: app.name\r\n        });\r\n        // TODO: platform needs to be determined using heuristics\r\n        _assert$1(apiKey, \"invalid-api-key\" /* INVALID_API_KEY */, {\r\n            appName: app.name\r\n        });\r\n        // Only use a popup/redirect resolver in browser environments\r\n        const resolver = typeof window !== 'undefined' ? CompatPopupRedirectResolver : undefined;\r\n        this._delegate = provider.initialize({\r\n            options: {\r\n                persistence: buildPersistenceHierarchy(apiKey, app.name),\r\n                popupRedirectResolver: resolver\r\n            }\r\n        });\r\n        this._delegate._updateErrorMap(exp.debugErrorMap);\r\n        this.linkUnderlyingAuth();\r\n    }\r\n    get emulatorConfig() {\r\n        return this._delegate.emulatorConfig;\r\n    }\r\n    get currentUser() {\r\n        if (!this._delegate.currentUser) {\r\n            return null;\r\n        }\r\n        return User.getOrCreate(this._delegate.currentUser);\r\n    }\r\n    get languageCode() {\r\n        return this._delegate.languageCode;\r\n    }\r\n    set languageCode(languageCode) {\r\n        this._delegate.languageCode = languageCode;\r\n    }\r\n    get settings() {\r\n        return this._delegate.settings;\r\n    }\r\n    get tenantId() {\r\n        return this._delegate.tenantId;\r\n    }\r\n    set tenantId(tid) {\r\n        this._delegate.tenantId = tid;\r\n    }\r\n    useDeviceLanguage() {\r\n        this._delegate.useDeviceLanguage();\r\n    }\r\n    signOut() {\r\n        return this._delegate.signOut();\r\n    }\r\n    useEmulator(url, options) {\r\n        exp.connectAuthEmulator(this._delegate, url, options);\r\n    }\r\n    applyActionCode(code) {\r\n        return exp.applyActionCode(this._delegate, code);\r\n    }\r\n    checkActionCode(code) {\r\n        return exp.checkActionCode(this._delegate, code);\r\n    }\r\n    confirmPasswordReset(code, newPassword) {\r\n        return exp.confirmPasswordReset(this._delegate, code, newPassword);\r\n    }\r\n    async createUserWithEmailAndPassword(email, password) {\r\n        return convertCredential(this._delegate, exp.createUserWithEmailAndPassword(this._delegate, email, password));\r\n    }\r\n    fetchProvidersForEmail(email) {\r\n        return this.fetchSignInMethodsForEmail(email);\r\n    }\r\n    fetchSignInMethodsForEmail(email) {\r\n        return exp.fetchSignInMethodsForEmail(this._delegate, email);\r\n    }\r\n    isSignInWithEmailLink(emailLink) {\r\n        return exp.isSignInWithEmailLink(this._delegate, emailLink);\r\n    }\r\n    async getRedirectResult() {\r\n        _assert$1(_isPopupRedirectSupported(), this._delegate, \"operation-not-supported-in-this-environment\" /* OPERATION_NOT_SUPPORTED */);\r\n        const credential = await exp.getRedirectResult(this._delegate, CompatPopupRedirectResolver);\r\n        if (!credential) {\r\n            return {\r\n                credential: null,\r\n                user: null\r\n            };\r\n        }\r\n        return convertCredential(this._delegate, Promise.resolve(credential));\r\n    }\r\n    // This function should only be called by frameworks (e.g. FirebaseUI-web) to log their usage.\r\n    // It is not intended for direct use by developer apps. NO jsdoc here to intentionally leave it\r\n    // out of autogenerated documentation pages to reduce accidental misuse.\r\n    addFrameworkForLogging(framework) {\r\n        exp.addFrameworkForLogging(this._delegate, framework);\r\n    }\r\n    onAuthStateChanged(nextOrObserver, errorFn, completed) {\r\n        const { next, error, complete } = wrapObservers(nextOrObserver, errorFn, completed);\r\n        return this._delegate.onAuthStateChanged(next, error, complete);\r\n    }\r\n    onIdTokenChanged(nextOrObserver, errorFn, completed) {\r\n        const { next, error, complete } = wrapObservers(nextOrObserver, errorFn, completed);\r\n        return this._delegate.onIdTokenChanged(next, error, complete);\r\n    }\r\n    sendSignInLinkToEmail(email, actionCodeSettings) {\r\n        return exp.sendSignInLinkToEmail(this._delegate, email, actionCodeSettings);\r\n    }\r\n    sendPasswordResetEmail(email, actionCodeSettings) {\r\n        return exp.sendPasswordResetEmail(this._delegate, email, actionCodeSettings || undefined);\r\n    }\r\n    async setPersistence(persistence) {\r\n        _validatePersistenceArgument(this._delegate, persistence);\r\n        let converted;\r\n        switch (persistence) {\r\n            case Persistence.SESSION:\r\n                converted = exp.browserSessionPersistence;\r\n                break;\r\n            case Persistence.LOCAL:\r\n                // Not using isIndexedDBAvailable() since it only checks if indexedDB is defined.\r\n                const isIndexedDBFullySupported = await exp\r\n                    ._getInstance(exp.indexedDBLocalPersistence)\r\n                    ._isAvailable();\r\n                converted = isIndexedDBFullySupported\r\n                    ? exp.indexedDBLocalPersistence\r\n                    : exp.browserLocalPersistence;\r\n                break;\r\n            case Persistence.NONE:\r\n                converted = exp.inMemoryPersistence;\r\n                break;\r\n            default:\r\n                return exp._fail(\"argument-error\" /* ARGUMENT_ERROR */, {\r\n                    appName: this._delegate.name\r\n                });\r\n        }\r\n        return this._delegate.setPersistence(converted);\r\n    }\r\n    signInAndRetrieveDataWithCredential(credential) {\r\n        return this.signInWithCredential(credential);\r\n    }\r\n    signInAnonymously() {\r\n        return convertCredential(this._delegate, exp.signInAnonymously(this._delegate));\r\n    }\r\n    signInWithCredential(credential) {\r\n        return convertCredential(this._delegate, exp.signInWithCredential(this._delegate, credential));\r\n    }\r\n    signInWithCustomToken(token) {\r\n        return convertCredential(this._delegate, exp.signInWithCustomToken(this._delegate, token));\r\n    }\r\n    signInWithEmailAndPassword(email, password) {\r\n        return convertCredential(this._delegate, exp.signInWithEmailAndPassword(this._delegate, email, password));\r\n    }\r\n    signInWithEmailLink(email, emailLink) {\r\n        return convertCredential(this._delegate, exp.signInWithEmailLink(this._delegate, email, emailLink));\r\n    }\r\n    signInWithPhoneNumber(phoneNumber, applicationVerifier) {\r\n        return convertConfirmationResult(this._delegate, exp.signInWithPhoneNumber(this._delegate, phoneNumber, applicationVerifier));\r\n    }\r\n    async signInWithPopup(provider) {\r\n        _assert$1(_isPopupRedirectSupported(), this._delegate, \"operation-not-supported-in-this-environment\" /* OPERATION_NOT_SUPPORTED */);\r\n        return convertCredential(this._delegate, exp.signInWithPopup(this._delegate, provider, CompatPopupRedirectResolver));\r\n    }\r\n    async signInWithRedirect(provider) {\r\n        _assert$1(_isPopupRedirectSupported(), this._delegate, \"operation-not-supported-in-this-environment\" /* OPERATION_NOT_SUPPORTED */);\r\n        await _savePersistenceForRedirect(this._delegate);\r\n        return exp.signInWithRedirect(this._delegate, provider, CompatPopupRedirectResolver);\r\n    }\r\n    updateCurrentUser(user) {\r\n        // remove ts-ignore once overloads are defined for exp functions to accept compat objects\r\n        // @ts-ignore\r\n        return this._delegate.updateCurrentUser(user);\r\n    }\r\n    verifyPasswordResetCode(code) {\r\n        return exp.verifyPasswordResetCode(this._delegate, code);\r\n    }\r\n    unwrap() {\r\n        return this._delegate;\r\n    }\r\n    _delete() {\r\n        return this._delegate._delete();\r\n    }\r\n    linkUnderlyingAuth() {\r\n        this._delegate.wrapped = () => this;\r\n    }\r\n}\r\nAuth.Persistence = Persistence;\r\nfunction wrapObservers(nextOrObserver, error, complete) {\r\n    let next = nextOrObserver;\r\n    if (typeof nextOrObserver !== 'function') {\r\n        ({ next, error, complete } = nextOrObserver);\r\n    }\r\n    // We know 'next' is now a function\r\n    const oldNext = next;\r\n    const newNext = (user) => oldNext(user && User.getOrCreate(user));\r\n    return {\r\n        next: newNext,\r\n        error: error,\r\n        complete\r\n    };\r\n}\r\nfunction buildPersistenceHierarchy(apiKey, appName) {\r\n    // Note this is slightly different behavior: in this case, the stored\r\n    // persistence is checked *first* rather than last. This is because we want\r\n    // to prefer stored persistence type in the hierarchy. This is an empty\r\n    // array if window is not available or there is no pending redirect\r\n    const persistences = _getPersistencesFromRedirect(apiKey, appName);\r\n    // If \"self\" is available, add indexedDB\r\n    if (typeof self !== 'undefined' &&\r\n        !persistences.includes(exp.indexedDBLocalPersistence)) {\r\n        persistences.push(exp.indexedDBLocalPersistence);\r\n    }\r\n    // If \"window\" is available, add HTML Storage persistences\r\n    if (typeof window !== 'undefined') {\r\n        for (const persistence of [\r\n            exp.browserLocalPersistence,\r\n            exp.browserSessionPersistence\r\n        ]) {\r\n            if (!persistences.includes(persistence)) {\r\n                persistences.push(persistence);\r\n            }\r\n        }\r\n    }\r\n    // Add in-memory as a final fallback\r\n    if (!persistences.includes(exp.inMemoryPersistence)) {\r\n        persistences.push(exp.inMemoryPersistence);\r\n    }\r\n    return persistences;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PhoneAuthProvider {\r\n    constructor() {\r\n        this.providerId = 'phone';\r\n        // TODO: remove ts-ignore when moving types from auth-types to auth-compat\r\n        // @ts-ignore\r\n        this._delegate = new exp.PhoneAuthProvider(unwrap(firebase.auth()));\r\n    }\r\n    static credential(verificationId, verificationCode) {\r\n        return exp.PhoneAuthProvider.credential(verificationId, verificationCode);\r\n    }\r\n    verifyPhoneNumber(phoneInfoOptions, applicationVerifier) {\r\n        return this._delegate.verifyPhoneNumber(\r\n        // The implementation matches but the types are subtly incompatible\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        phoneInfoOptions, applicationVerifier);\r\n    }\r\n    unwrap() {\r\n        return this._delegate;\r\n    }\r\n}\r\nPhoneAuthProvider.PHONE_SIGN_IN_METHOD = exp.PhoneAuthProvider.PHONE_SIGN_IN_METHOD;\r\nPhoneAuthProvider.PROVIDER_ID = exp.PhoneAuthProvider.PROVIDER_ID;\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst _assert = exp._assert;\r\nclass RecaptchaVerifier {\r\n    constructor(container, parameters, app = firebase.app()) {\r\n        var _a;\r\n        // API key is required for web client RPC calls.\r\n        _assert((_a = app.options) === null || _a === void 0 ? void 0 : _a.apiKey, \"invalid-api-key\" /* INVALID_API_KEY */, {\r\n            appName: app.name\r\n        });\r\n        this._delegate = new exp.RecaptchaVerifier(container, \r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        parameters, \r\n        // TODO: remove ts-ignore when moving types from auth-types to auth-compat\r\n        // @ts-ignore\r\n        app.auth());\r\n        this.type = this._delegate.type;\r\n    }\r\n    clear() {\r\n        this._delegate.clear();\r\n    }\r\n    render() {\r\n        return this._delegate.render();\r\n    }\r\n    verify() {\r\n        return this._delegate.verify();\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst AUTH_TYPE = 'auth-compat';\r\n// Create auth components to register with firebase.\r\n// Provides Auth public APIs.\r\nfunction registerAuthCompat(instance) {\r\n    instance.INTERNAL.registerComponent(new Component(AUTH_TYPE, container => {\r\n        // getImmediate for FirebaseApp will always succeed\r\n        const app = container.getProvider('app-compat').getImmediate();\r\n        const authProvider = container.getProvider('auth');\r\n        return new Auth(app, authProvider);\r\n    }, \"PUBLIC\" /* PUBLIC */)\r\n        .setServiceProps({\r\n        ActionCodeInfo: {\r\n            Operation: {\r\n                EMAIL_SIGNIN: exp.ActionCodeOperation.EMAIL_SIGNIN,\r\n                PASSWORD_RESET: exp.ActionCodeOperation.PASSWORD_RESET,\r\n                RECOVER_EMAIL: exp.ActionCodeOperation.RECOVER_EMAIL,\r\n                REVERT_SECOND_FACTOR_ADDITION: exp.ActionCodeOperation.REVERT_SECOND_FACTOR_ADDITION,\r\n                VERIFY_AND_CHANGE_EMAIL: exp.ActionCodeOperation.VERIFY_AND_CHANGE_EMAIL,\r\n                VERIFY_EMAIL: exp.ActionCodeOperation.VERIFY_EMAIL\r\n            }\r\n        },\r\n        EmailAuthProvider: exp.EmailAuthProvider,\r\n        FacebookAuthProvider: exp.FacebookAuthProvider,\r\n        GithubAuthProvider: exp.GithubAuthProvider,\r\n        GoogleAuthProvider: exp.GoogleAuthProvider,\r\n        OAuthProvider: exp.OAuthProvider,\r\n        SAMLAuthProvider: exp.SAMLAuthProvider,\r\n        PhoneAuthProvider: PhoneAuthProvider,\r\n        PhoneMultiFactorGenerator: exp.PhoneMultiFactorGenerator,\r\n        RecaptchaVerifier: RecaptchaVerifier,\r\n        TwitterAuthProvider: exp.TwitterAuthProvider,\r\n        Auth,\r\n        AuthCredential: exp.AuthCredential,\r\n        Error: FirebaseError\r\n    })\r\n        .setInstantiationMode(\"LAZY\" /* LAZY */)\r\n        .setMultipleInstances(false));\r\n    instance.registerVersion(name, version);\r\n}\r\nregisterAuthCompat(firebase);\n//# sourceMappingURL=index.esm2017.js.map\n","import { getApp, _getProvider, SDK_VERSION as SDK_VERSION$1, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component } from '@firebase/component';\nimport { stringify, jsonEval, contains, assert, isNodeSdk, base64, stringToByteArray, Sha1, deepCopy, base64Encode, isMobileCordova, stringLength, Deferred, safeGet, isAdmin, isValidFormat, isEmpty, isReactNative, assertionError, map, querystring, errorPrefix, getModularInstance, createMockUserToken } from '@firebase/util';\nimport { Logger, LogLevel } from '@firebase/logger';\n\nconst name = \"@firebase/database\";\nconst version = \"0.13.4\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** The semver (www.semver.org) version of the SDK. */\r\nlet SDK_VERSION = '';\r\n/**\r\n * SDK_VERSION should be set before any database instance is created\r\n * @internal\r\n */\r\nfunction setSDKVersion(version) {\r\n    SDK_VERSION = version;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Wraps a DOM Storage object and:\r\n * - automatically encode objects as JSON strings before storing them to allow us to store arbitrary types.\r\n * - prefixes names with \"firebase:\" to avoid collisions with app data.\r\n *\r\n * We automatically (see storage.js) create two such wrappers, one for sessionStorage,\r\n * and one for localStorage.\r\n *\r\n */\r\nclass DOMStorageWrapper {\r\n    /**\r\n     * @param domStorage_ - The underlying storage object (e.g. localStorage or sessionStorage)\r\n     */\r\n    constructor(domStorage_) {\r\n        this.domStorage_ = domStorage_;\r\n        // Use a prefix to avoid collisions with other stuff saved by the app.\r\n        this.prefix_ = 'firebase:';\r\n    }\r\n    /**\r\n     * @param key - The key to save the value under\r\n     * @param value - The value being stored, or null to remove the key.\r\n     */\r\n    set(key, value) {\r\n        if (value == null) {\r\n            this.domStorage_.removeItem(this.prefixedName_(key));\r\n        }\r\n        else {\r\n            this.domStorage_.setItem(this.prefixedName_(key), stringify(value));\r\n        }\r\n    }\r\n    /**\r\n     * @returns The value that was stored under this key, or null\r\n     */\r\n    get(key) {\r\n        const storedVal = this.domStorage_.getItem(this.prefixedName_(key));\r\n        if (storedVal == null) {\r\n            return null;\r\n        }\r\n        else {\r\n            return jsonEval(storedVal);\r\n        }\r\n    }\r\n    remove(key) {\r\n        this.domStorage_.removeItem(this.prefixedName_(key));\r\n    }\r\n    prefixedName_(name) {\r\n        return this.prefix_ + name;\r\n    }\r\n    toString() {\r\n        return this.domStorage_.toString();\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An in-memory storage implementation that matches the API of DOMStorageWrapper\r\n * (TODO: create interface for both to implement).\r\n */\r\nclass MemoryStorage {\r\n    constructor() {\r\n        this.cache_ = {};\r\n        this.isInMemoryStorage = true;\r\n    }\r\n    set(key, value) {\r\n        if (value == null) {\r\n            delete this.cache_[key];\r\n        }\r\n        else {\r\n            this.cache_[key] = value;\r\n        }\r\n    }\r\n    get(key) {\r\n        if (contains(this.cache_, key)) {\r\n            return this.cache_[key];\r\n        }\r\n        return null;\r\n    }\r\n    remove(key) {\r\n        delete this.cache_[key];\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Helper to create a DOMStorageWrapper or else fall back to MemoryStorage.\r\n * TODO: Once MemoryStorage and DOMStorageWrapper have a shared interface this method annotation should change\r\n * to reflect this type\r\n *\r\n * @param domStorageName - Name of the underlying storage object\r\n *   (e.g. 'localStorage' or 'sessionStorage').\r\n * @returns Turning off type information until a common interface is defined.\r\n */\r\nconst createStoragefor = function (domStorageName) {\r\n    try {\r\n        // NOTE: just accessing \"localStorage\" or \"window['localStorage']\" may throw a security exception,\r\n        // so it must be inside the try/catch.\r\n        if (typeof window !== 'undefined' &&\r\n            typeof window[domStorageName] !== 'undefined') {\r\n            // Need to test cache. Just because it's here doesn't mean it works\r\n            const domStorage = window[domStorageName];\r\n            domStorage.setItem('firebase:sentinel', 'cache');\r\n            domStorage.removeItem('firebase:sentinel');\r\n            return new DOMStorageWrapper(domStorage);\r\n        }\r\n    }\r\n    catch (e) { }\r\n    // Failed to create wrapper.  Just return in-memory storage.\r\n    // TODO: log?\r\n    return new MemoryStorage();\r\n};\r\n/** A storage object that lasts across sessions */\r\nconst PersistentStorage = createStoragefor('localStorage');\r\n/** A storage object that only lasts one session */\r\nconst SessionStorage = createStoragefor('sessionStorage');\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/database');\r\n/**\r\n * Returns a locally-unique ID (generated by just incrementing up from 0 each time its called).\r\n */\r\nconst LUIDGenerator = (function () {\r\n    let id = 1;\r\n    return function () {\r\n        return id++;\r\n    };\r\n})();\r\n/**\r\n * Sha1 hash of the input string\r\n * @param str - The string to hash\r\n * @returns {!string} The resulting hash\r\n */\r\nconst sha1 = function (str) {\r\n    const utf8Bytes = stringToByteArray(str);\r\n    const sha1 = new Sha1();\r\n    sha1.update(utf8Bytes);\r\n    const sha1Bytes = sha1.digest();\r\n    return base64.encodeByteArray(sha1Bytes);\r\n};\r\nconst buildLogMessage_ = function (...varArgs) {\r\n    let message = '';\r\n    for (let i = 0; i < varArgs.length; i++) {\r\n        const arg = varArgs[i];\r\n        if (Array.isArray(arg) ||\r\n            (arg &&\r\n                typeof arg === 'object' &&\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                typeof arg.length === 'number')) {\r\n            message += buildLogMessage_.apply(null, arg);\r\n        }\r\n        else if (typeof arg === 'object') {\r\n            message += stringify(arg);\r\n        }\r\n        else {\r\n            message += arg;\r\n        }\r\n        message += ' ';\r\n    }\r\n    return message;\r\n};\r\n/**\r\n * Use this for all debug messages in Firebase.\r\n */\r\nlet logger = null;\r\n/**\r\n * Flag to check for log availability on first log message\r\n */\r\nlet firstLog_ = true;\r\n/**\r\n * The implementation of Firebase.enableLogging (defined here to break dependencies)\r\n * @param logger_ - A flag to turn on logging, or a custom logger\r\n * @param persistent - Whether or not to persist logging settings across refreshes\r\n */\r\nconst enableLogging$1 = function (logger_, persistent) {\r\n    assert(!persistent || logger_ === true || logger_ === false, \"Can't turn on custom loggers persistently.\");\r\n    if (logger_ === true) {\r\n        logClient.logLevel = LogLevel.VERBOSE;\r\n        logger = logClient.log.bind(logClient);\r\n        if (persistent) {\r\n            SessionStorage.set('logging_enabled', true);\r\n        }\r\n    }\r\n    else if (typeof logger_ === 'function') {\r\n        logger = logger_;\r\n    }\r\n    else {\r\n        logger = null;\r\n        SessionStorage.remove('logging_enabled');\r\n    }\r\n};\r\nconst log = function (...varArgs) {\r\n    if (firstLog_ === true) {\r\n        firstLog_ = false;\r\n        if (logger === null && SessionStorage.get('logging_enabled') === true) {\r\n            enableLogging$1(true);\r\n        }\r\n    }\r\n    if (logger) {\r\n        const message = buildLogMessage_.apply(null, varArgs);\r\n        logger(message);\r\n    }\r\n};\r\nconst logWrapper = function (prefix) {\r\n    return function (...varArgs) {\r\n        log(prefix, ...varArgs);\r\n    };\r\n};\r\nconst error = function (...varArgs) {\r\n    const message = 'FIREBASE INTERNAL ERROR: ' + buildLogMessage_(...varArgs);\r\n    logClient.error(message);\r\n};\r\nconst fatal = function (...varArgs) {\r\n    const message = `FIREBASE FATAL ERROR: ${buildLogMessage_(...varArgs)}`;\r\n    logClient.error(message);\r\n    throw new Error(message);\r\n};\r\nconst warn = function (...varArgs) {\r\n    const message = 'FIREBASE WARNING: ' + buildLogMessage_(...varArgs);\r\n    logClient.warn(message);\r\n};\r\n/**\r\n * Logs a warning if the containing page uses https. Called when a call to new Firebase\r\n * does not use https.\r\n */\r\nconst warnIfPageIsSecure = function () {\r\n    // Be very careful accessing browser globals. Who knows what may or may not exist.\r\n    if (typeof window !== 'undefined' &&\r\n        window.location &&\r\n        window.location.protocol &&\r\n        window.location.protocol.indexOf('https:') !== -1) {\r\n        warn('Insecure Firebase access from a secure page. ' +\r\n            'Please use https in calls to new Firebase().');\r\n    }\r\n};\r\n/**\r\n * Returns true if data is NaN, or +/- Infinity.\r\n */\r\nconst isInvalidJSONNumber = function (data) {\r\n    return (typeof data === 'number' &&\r\n        (data !== data || // NaN\r\n            data === Number.POSITIVE_INFINITY ||\r\n            data === Number.NEGATIVE_INFINITY));\r\n};\r\nconst executeWhenDOMReady = function (fn) {\r\n    if (isNodeSdk() || document.readyState === 'complete') {\r\n        fn();\r\n    }\r\n    else {\r\n        // Modeled after jQuery. Try DOMContentLoaded and onreadystatechange (which\r\n        // fire before onload), but fall back to onload.\r\n        let called = false;\r\n        const wrappedFn = function () {\r\n            if (!document.body) {\r\n                setTimeout(wrappedFn, Math.floor(10));\r\n                return;\r\n            }\r\n            if (!called) {\r\n                called = true;\r\n                fn();\r\n            }\r\n        };\r\n        if (document.addEventListener) {\r\n            document.addEventListener('DOMContentLoaded', wrappedFn, false);\r\n            // fallback to onload.\r\n            window.addEventListener('load', wrappedFn, false);\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        }\r\n        else if (document.attachEvent) {\r\n            // IE.\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            document.attachEvent('onreadystatechange', () => {\r\n                if (document.readyState === 'complete') {\r\n                    wrappedFn();\r\n                }\r\n            });\r\n            // fallback to onload.\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            window.attachEvent('onload', wrappedFn);\r\n            // jQuery has an extra hack for IE that we could employ (based on\r\n            // http://javascript.nwbox.com/IEContentLoaded/) But it looks really old.\r\n            // I'm hoping we don't need it.\r\n        }\r\n    }\r\n};\r\n/**\r\n * Minimum key name. Invalid for actual data, used as a marker to sort before any valid names\r\n */\r\nconst MIN_NAME = '[MIN_NAME]';\r\n/**\r\n * Maximum key name. Invalid for actual data, used as a marker to sort above any valid names\r\n */\r\nconst MAX_NAME = '[MAX_NAME]';\r\n/**\r\n * Compares valid Firebase key names, plus min and max name\r\n */\r\nconst nameCompare = function (a, b) {\r\n    if (a === b) {\r\n        return 0;\r\n    }\r\n    else if (a === MIN_NAME || b === MAX_NAME) {\r\n        return -1;\r\n    }\r\n    else if (b === MIN_NAME || a === MAX_NAME) {\r\n        return 1;\r\n    }\r\n    else {\r\n        const aAsInt = tryParseInt(a), bAsInt = tryParseInt(b);\r\n        if (aAsInt !== null) {\r\n            if (bAsInt !== null) {\r\n                return aAsInt - bAsInt === 0 ? a.length - b.length : aAsInt - bAsInt;\r\n            }\r\n            else {\r\n                return -1;\r\n            }\r\n        }\r\n        else if (bAsInt !== null) {\r\n            return 1;\r\n        }\r\n        else {\r\n            return a < b ? -1 : 1;\r\n        }\r\n    }\r\n};\r\n/**\r\n * @returns {!number} comparison result.\r\n */\r\nconst stringCompare = function (a, b) {\r\n    if (a === b) {\r\n        return 0;\r\n    }\r\n    else if (a < b) {\r\n        return -1;\r\n    }\r\n    else {\r\n        return 1;\r\n    }\r\n};\r\nconst requireKey = function (key, obj) {\r\n    if (obj && key in obj) {\r\n        return obj[key];\r\n    }\r\n    else {\r\n        throw new Error('Missing required key (' + key + ') in object: ' + stringify(obj));\r\n    }\r\n};\r\nconst ObjectToUniqueKey = function (obj) {\r\n    if (typeof obj !== 'object' || obj === null) {\r\n        return stringify(obj);\r\n    }\r\n    const keys = [];\r\n    // eslint-disable-next-line guard-for-in\r\n    for (const k in obj) {\r\n        keys.push(k);\r\n    }\r\n    // Export as json, but with the keys sorted.\r\n    keys.sort();\r\n    let key = '{';\r\n    for (let i = 0; i < keys.length; i++) {\r\n        if (i !== 0) {\r\n            key += ',';\r\n        }\r\n        key += stringify(keys[i]);\r\n        key += ':';\r\n        key += ObjectToUniqueKey(obj[keys[i]]);\r\n    }\r\n    key += '}';\r\n    return key;\r\n};\r\n/**\r\n * Splits a string into a number of smaller segments of maximum size\r\n * @param str - The string\r\n * @param segsize - The maximum number of chars in the string.\r\n * @returns The string, split into appropriately-sized chunks\r\n */\r\nconst splitStringBySize = function (str, segsize) {\r\n    const len = str.length;\r\n    if (len <= segsize) {\r\n        return [str];\r\n    }\r\n    const dataSegs = [];\r\n    for (let c = 0; c < len; c += segsize) {\r\n        if (c + segsize > len) {\r\n            dataSegs.push(str.substring(c, len));\r\n        }\r\n        else {\r\n            dataSegs.push(str.substring(c, c + segsize));\r\n        }\r\n    }\r\n    return dataSegs;\r\n};\r\n/**\r\n * Apply a function to each (key, value) pair in an object or\r\n * apply a function to each (index, value) pair in an array\r\n * @param obj - The object or array to iterate over\r\n * @param fn - The function to apply\r\n */\r\nfunction each(obj, fn) {\r\n    for (const key in obj) {\r\n        if (obj.hasOwnProperty(key)) {\r\n            fn(key, obj[key]);\r\n        }\r\n    }\r\n}\r\n/**\r\n * Borrowed from http://hg.secondlife.com/llsd/src/tip/js/typedarray.js (MIT License)\r\n * I made one modification at the end and removed the NaN / Infinity\r\n * handling (since it seemed broken [caused an overflow] and we don't need it).  See MJL comments.\r\n * @param v - A double\r\n *\r\n */\r\nconst doubleToIEEE754String = function (v) {\r\n    assert(!isInvalidJSONNumber(v), 'Invalid JSON number'); // MJL\r\n    const ebits = 11, fbits = 52;\r\n    const bias = (1 << (ebits - 1)) - 1;\r\n    let s, e, f, ln, i;\r\n    // Compute sign, exponent, fraction\r\n    // Skip NaN / Infinity handling --MJL.\r\n    if (v === 0) {\r\n        e = 0;\r\n        f = 0;\r\n        s = 1 / v === -Infinity ? 1 : 0;\r\n    }\r\n    else {\r\n        s = v < 0;\r\n        v = Math.abs(v);\r\n        if (v >= Math.pow(2, 1 - bias)) {\r\n            // Normalized\r\n            ln = Math.min(Math.floor(Math.log(v) / Math.LN2), bias);\r\n            e = ln + bias;\r\n            f = Math.round(v * Math.pow(2, fbits - ln) - Math.pow(2, fbits));\r\n        }\r\n        else {\r\n            // Denormalized\r\n            e = 0;\r\n            f = Math.round(v / Math.pow(2, 1 - bias - fbits));\r\n        }\r\n    }\r\n    // Pack sign, exponent, fraction\r\n    const bits = [];\r\n    for (i = fbits; i; i -= 1) {\r\n        bits.push(f % 2 ? 1 : 0);\r\n        f = Math.floor(f / 2);\r\n    }\r\n    for (i = ebits; i; i -= 1) {\r\n        bits.push(e % 2 ? 1 : 0);\r\n        e = Math.floor(e / 2);\r\n    }\r\n    bits.push(s ? 1 : 0);\r\n    bits.reverse();\r\n    const str = bits.join('');\r\n    // Return the data as a hex string. --MJL\r\n    let hexByteString = '';\r\n    for (i = 0; i < 64; i += 8) {\r\n        let hexByte = parseInt(str.substr(i, 8), 2).toString(16);\r\n        if (hexByte.length === 1) {\r\n            hexByte = '0' + hexByte;\r\n        }\r\n        hexByteString = hexByteString + hexByte;\r\n    }\r\n    return hexByteString.toLowerCase();\r\n};\r\n/**\r\n * Used to detect if we're in a Chrome content script (which executes in an\r\n * isolated environment where long-polling doesn't work).\r\n */\r\nconst isChromeExtensionContentScript = function () {\r\n    return !!(typeof window === 'object' &&\r\n        window['chrome'] &&\r\n        window['chrome']['extension'] &&\r\n        !/^chrome/.test(window.location.href));\r\n};\r\n/**\r\n * Used to detect if we're in a Windows 8 Store app.\r\n */\r\nconst isWindowsStoreApp = function () {\r\n    // Check for the presence of a couple WinRT globals\r\n    return typeof Windows === 'object' && typeof Windows.UI === 'object';\r\n};\r\n/**\r\n * Converts a server error code to a Javascript Error\r\n */\r\nfunction errorForServerCode(code, query) {\r\n    let reason = 'Unknown Error';\r\n    if (code === 'too_big') {\r\n        reason =\r\n            'The data requested exceeds the maximum size ' +\r\n                'that can be accessed with a single request.';\r\n    }\r\n    else if (code === 'permission_denied') {\r\n        reason = \"Client doesn't have permission to access the desired data.\";\r\n    }\r\n    else if (code === 'unavailable') {\r\n        reason = 'The service is unavailable';\r\n    }\r\n    const error = new Error(code + ' at ' + query._path.toString() + ': ' + reason);\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    error.code = code.toUpperCase();\r\n    return error;\r\n}\r\n/**\r\n * Used to test for integer-looking strings\r\n */\r\nconst INTEGER_REGEXP_ = new RegExp('^-?(0*)\\\\d{1,10}$');\r\n/**\r\n * For use in keys, the minimum possible 32-bit integer.\r\n */\r\nconst INTEGER_32_MIN = -2147483648;\r\n/**\r\n * For use in kyes, the maximum possible 32-bit integer.\r\n */\r\nconst INTEGER_32_MAX = 2147483647;\r\n/**\r\n * If the string contains a 32-bit integer, return it.  Else return null.\r\n */\r\nconst tryParseInt = function (str) {\r\n    if (INTEGER_REGEXP_.test(str)) {\r\n        const intVal = Number(str);\r\n        if (intVal >= INTEGER_32_MIN && intVal <= INTEGER_32_MAX) {\r\n            return intVal;\r\n        }\r\n    }\r\n    return null;\r\n};\r\n/**\r\n * Helper to run some code but catch any exceptions and re-throw them later.\r\n * Useful for preventing user callbacks from breaking internal code.\r\n *\r\n * Re-throwing the exception from a setTimeout is a little evil, but it's very\r\n * convenient (we don't have to try to figure out when is a safe point to\r\n * re-throw it), and the behavior seems reasonable:\r\n *\r\n * * If you aren't pausing on exceptions, you get an error in the console with\r\n *   the correct stack trace.\r\n * * If you're pausing on all exceptions, the debugger will pause on your\r\n *   exception and then again when we rethrow it.\r\n * * If you're only pausing on uncaught exceptions, the debugger will only pause\r\n *   on us re-throwing it.\r\n *\r\n * @param fn - The code to guard.\r\n */\r\nconst exceptionGuard = function (fn) {\r\n    try {\r\n        fn();\r\n    }\r\n    catch (e) {\r\n        // Re-throw exception when it's safe.\r\n        setTimeout(() => {\r\n            // It used to be that \"throw e\" would result in a good console error with\r\n            // relevant context, but as of Chrome 39, you just get the firebase.js\r\n            // file/line number where we re-throw it, which is useless. So we log\r\n            // e.stack explicitly.\r\n            const stack = e.stack || '';\r\n            warn('Exception was thrown by user callback.', stack);\r\n            throw e;\r\n        }, Math.floor(0));\r\n    }\r\n};\r\n/**\r\n * @returns {boolean} true if we think we're currently being crawled.\r\n */\r\nconst beingCrawled = function () {\r\n    const userAgent = (typeof window === 'object' &&\r\n        window['navigator'] &&\r\n        window['navigator']['userAgent']) ||\r\n        '';\r\n    // For now we whitelist the most popular crawlers.  We should refine this to be the set of crawlers we\r\n    // believe to support JavaScript/AJAX rendering.\r\n    // NOTE: Google Webmaster Tools doesn't really belong, but their \"This is how a visitor to your website\r\n    // would have seen the page\" is flaky if we don't treat it as a crawler.\r\n    return (userAgent.search(/googlebot|google webmaster tools|bingbot|yahoo! slurp|baiduspider|yandexbot|duckduckbot/i) >= 0);\r\n};\r\n/**\r\n * Same as setTimeout() except on Node.JS it will /not/ prevent the process from exiting.\r\n *\r\n * It is removed with clearTimeout() as normal.\r\n *\r\n * @param fn - Function to run.\r\n * @param time - Milliseconds to wait before running.\r\n * @returns The setTimeout() return value.\r\n */\r\nconst setTimeoutNonBlocking = function (fn, time) {\r\n    const timeout = setTimeout(fn, time);\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    if (typeof timeout === 'object' && timeout['unref']) {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        timeout['unref']();\r\n    }\r\n    return timeout;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Abstraction around AppCheck's token fetching capabilities.\r\n */\r\nclass AppCheckTokenProvider {\r\n    constructor(appName_, appCheckProvider) {\r\n        this.appName_ = appName_;\r\n        this.appCheckProvider = appCheckProvider;\r\n        this.appCheck = appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.getImmediate({ optional: true });\r\n        if (!this.appCheck) {\r\n            appCheckProvider === null || appCheckProvider === void 0 ? void 0 : appCheckProvider.get().then(appCheck => (this.appCheck = appCheck));\r\n        }\r\n    }\r\n    getToken(forceRefresh) {\r\n        if (!this.appCheck) {\r\n            return new Promise((resolve, reject) => {\r\n                // Support delayed initialization of FirebaseAppCheck. This allows our\r\n                // customers to initialize the RTDB SDK before initializing Firebase\r\n                // AppCheck and ensures that all requests are authenticated if a token\r\n                // becomes available before the timoeout below expires.\r\n                setTimeout(() => {\r\n                    if (this.appCheck) {\r\n                        this.getToken(forceRefresh).then(resolve, reject);\r\n                    }\r\n                    else {\r\n                        resolve(null);\r\n                    }\r\n                }, 0);\r\n            });\r\n        }\r\n        return this.appCheck.getToken(forceRefresh);\r\n    }\r\n    addTokenChangeListener(listener) {\r\n        var _a;\r\n        (_a = this.appCheckProvider) === null || _a === void 0 ? void 0 : _a.get().then(appCheck => appCheck.addTokenListener(listener));\r\n    }\r\n    notifyForInvalidToken() {\r\n        warn(`Provided AppCheck credentials for the app named \"${this.appName_}\" ` +\r\n            'are invalid. This usually indicates your app was not initialized correctly.');\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Abstraction around FirebaseApp's token fetching capabilities.\r\n */\r\nclass FirebaseAuthTokenProvider {\r\n    constructor(appName_, firebaseOptions_, authProvider_) {\r\n        this.appName_ = appName_;\r\n        this.firebaseOptions_ = firebaseOptions_;\r\n        this.authProvider_ = authProvider_;\r\n        this.auth_ = null;\r\n        this.auth_ = authProvider_.getImmediate({ optional: true });\r\n        if (!this.auth_) {\r\n            authProvider_.onInit(auth => (this.auth_ = auth));\r\n        }\r\n    }\r\n    getToken(forceRefresh) {\r\n        if (!this.auth_) {\r\n            return new Promise((resolve, reject) => {\r\n                // Support delayed initialization of FirebaseAuth. This allows our\r\n                // customers to initialize the RTDB SDK before initializing Firebase\r\n                // Auth and ensures that all requests are authenticated if a token\r\n                // becomes available before the timoeout below expires.\r\n                setTimeout(() => {\r\n                    if (this.auth_) {\r\n                        this.getToken(forceRefresh).then(resolve, reject);\r\n                    }\r\n                    else {\r\n                        resolve(null);\r\n                    }\r\n                }, 0);\r\n            });\r\n        }\r\n        return this.auth_.getToken(forceRefresh).catch(error => {\r\n            // TODO: Need to figure out all the cases this is raised and whether\r\n            // this makes sense.\r\n            if (error && error.code === 'auth/token-not-initialized') {\r\n                log('Got auth/token-not-initialized error.  Treating as null token.');\r\n                return null;\r\n            }\r\n            else {\r\n                return Promise.reject(error);\r\n            }\r\n        });\r\n    }\r\n    addTokenChangeListener(listener) {\r\n        // TODO: We might want to wrap the listener and call it with no args to\r\n        // avoid a leaky abstraction, but that makes removing the listener harder.\r\n        if (this.auth_) {\r\n            this.auth_.addAuthTokenListener(listener);\r\n        }\r\n        else {\r\n            this.authProvider_\r\n                .get()\r\n                .then(auth => auth.addAuthTokenListener(listener));\r\n        }\r\n    }\r\n    removeTokenChangeListener(listener) {\r\n        this.authProvider_\r\n            .get()\r\n            .then(auth => auth.removeAuthTokenListener(listener));\r\n    }\r\n    notifyForInvalidToken() {\r\n        let errorMessage = 'Provided authentication credentials for the app named \"' +\r\n            this.appName_ +\r\n            '\" are invalid. This usually indicates your app was not ' +\r\n            'initialized correctly. ';\r\n        if ('credential' in this.firebaseOptions_) {\r\n            errorMessage +=\r\n                'Make sure the \"credential\" property provided to initializeApp() ' +\r\n                    'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n                    'project.';\r\n        }\r\n        else if ('serviceAccount' in this.firebaseOptions_) {\r\n            errorMessage +=\r\n                'Make sure the \"serviceAccount\" property provided to initializeApp() ' +\r\n                    'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n                    'project.';\r\n        }\r\n        else {\r\n            errorMessage +=\r\n                'Make sure the \"apiKey\" and \"databaseURL\" properties provided to ' +\r\n                    'initializeApp() match the values provided for your app at ' +\r\n                    'https://console.firebase.google.com/.';\r\n        }\r\n        warn(errorMessage);\r\n    }\r\n}\r\n/* AuthTokenProvider that supplies a constant token. Used by Admin SDK or mockUserToken with emulators. */\r\nclass EmulatorTokenProvider {\r\n    constructor(accessToken) {\r\n        this.accessToken = accessToken;\r\n    }\r\n    getToken(forceRefresh) {\r\n        return Promise.resolve({\r\n            accessToken: this.accessToken\r\n        });\r\n    }\r\n    addTokenChangeListener(listener) {\r\n        // Invoke the listener immediately to match the behavior in Firebase Auth\r\n        // (see packages/auth/src/auth.js#L1807)\r\n        listener(this.accessToken);\r\n    }\r\n    removeTokenChangeListener(listener) { }\r\n    notifyForInvalidToken() { }\r\n}\r\n/** A string that is treated as an admin access token by the RTDB emulator. Used by Admin SDK. */\r\nEmulatorTokenProvider.OWNER = 'owner';\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PROTOCOL_VERSION = '5';\r\nconst VERSION_PARAM = 'v';\r\nconst TRANSPORT_SESSION_PARAM = 's';\r\nconst REFERER_PARAM = 'r';\r\nconst FORGE_REF = 'f';\r\n// Matches console.firebase.google.com, firebase-console-*.corp.google.com and\r\n// firebase.corp.google.com\r\nconst FORGE_DOMAIN_RE = /(console\\.firebase|firebase-console-\\w+\\.corp|firebase\\.corp)\\.google\\.com/;\r\nconst LAST_SESSION_PARAM = 'ls';\r\nconst APPLICATION_ID_PARAM = 'p';\r\nconst APP_CHECK_TOKEN_PARAM = 'ac';\r\nconst WEBSOCKET = 'websocket';\r\nconst LONG_POLLING = 'long_polling';\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A class that holds metadata about a Repo object\r\n */\r\nclass RepoInfo {\r\n    /**\r\n     * @param host - Hostname portion of the url for the repo\r\n     * @param secure - Whether or not this repo is accessed over ssl\r\n     * @param namespace - The namespace represented by the repo\r\n     * @param webSocketOnly - Whether to prefer websockets over all other transports (used by Nest).\r\n     * @param nodeAdmin - Whether this instance uses Admin SDK credentials\r\n     * @param persistenceKey - Override the default session persistence storage key\r\n     */\r\n    constructor(host, secure, namespace, webSocketOnly, nodeAdmin = false, persistenceKey = '', includeNamespaceInQueryParams = false) {\r\n        this.secure = secure;\r\n        this.namespace = namespace;\r\n        this.webSocketOnly = webSocketOnly;\r\n        this.nodeAdmin = nodeAdmin;\r\n        this.persistenceKey = persistenceKey;\r\n        this.includeNamespaceInQueryParams = includeNamespaceInQueryParams;\r\n        this._host = host.toLowerCase();\r\n        this._domain = this._host.substr(this._host.indexOf('.') + 1);\r\n        this.internalHost =\r\n            PersistentStorage.get('host:' + host) || this._host;\r\n    }\r\n    isCacheableHost() {\r\n        return this.internalHost.substr(0, 2) === 's-';\r\n    }\r\n    isCustomHost() {\r\n        return (this._domain !== 'firebaseio.com' &&\r\n            this._domain !== 'firebaseio-demo.com');\r\n    }\r\n    get host() {\r\n        return this._host;\r\n    }\r\n    set host(newHost) {\r\n        if (newHost !== this.internalHost) {\r\n            this.internalHost = newHost;\r\n            if (this.isCacheableHost()) {\r\n                PersistentStorage.set('host:' + this._host, this.internalHost);\r\n            }\r\n        }\r\n    }\r\n    toString() {\r\n        let str = this.toURLString();\r\n        if (this.persistenceKey) {\r\n            str += '<' + this.persistenceKey + '>';\r\n        }\r\n        return str;\r\n    }\r\n    toURLString() {\r\n        const protocol = this.secure ? 'https://' : 'http://';\r\n        const query = this.includeNamespaceInQueryParams\r\n            ? `?ns=${this.namespace}`\r\n            : '';\r\n        return `${protocol}${this.host}/${query}`;\r\n    }\r\n}\r\nfunction repoInfoNeedsQueryParam(repoInfo) {\r\n    return (repoInfo.host !== repoInfo.internalHost ||\r\n        repoInfo.isCustomHost() ||\r\n        repoInfo.includeNamespaceInQueryParams);\r\n}\r\n/**\r\n * Returns the websocket URL for this repo\r\n * @param repoInfo - RepoInfo object\r\n * @param type - of connection\r\n * @param params - list\r\n * @returns The URL for this repo\r\n */\r\nfunction repoInfoConnectionURL(repoInfo, type, params) {\r\n    assert(typeof type === 'string', 'typeof type must == string');\r\n    assert(typeof params === 'object', 'typeof params must == object');\r\n    let connURL;\r\n    if (type === WEBSOCKET) {\r\n        connURL =\r\n            (repoInfo.secure ? 'wss://' : 'ws://') + repoInfo.internalHost + '/.ws?';\r\n    }\r\n    else if (type === LONG_POLLING) {\r\n        connURL =\r\n            (repoInfo.secure ? 'https://' : 'http://') +\r\n                repoInfo.internalHost +\r\n                '/.lp?';\r\n    }\r\n    else {\r\n        throw new Error('Unknown connection type: ' + type);\r\n    }\r\n    if (repoInfoNeedsQueryParam(repoInfo)) {\r\n        params['ns'] = repoInfo.namespace;\r\n    }\r\n    const pairs = [];\r\n    each(params, (key, value) => {\r\n        pairs.push(key + '=' + value);\r\n    });\r\n    return connURL + pairs.join('&');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Tracks a collection of stats.\r\n */\r\nclass StatsCollection {\r\n    constructor() {\r\n        this.counters_ = {};\r\n    }\r\n    incrementCounter(name, amount = 1) {\r\n        if (!contains(this.counters_, name)) {\r\n            this.counters_[name] = 0;\r\n        }\r\n        this.counters_[name] += amount;\r\n    }\r\n    get() {\r\n        return deepCopy(this.counters_);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst collections = {};\r\nconst reporters = {};\r\nfunction statsManagerGetCollection(repoInfo) {\r\n    const hashString = repoInfo.toString();\r\n    if (!collections[hashString]) {\r\n        collections[hashString] = new StatsCollection();\r\n    }\r\n    return collections[hashString];\r\n}\r\nfunction statsManagerGetOrCreateReporter(repoInfo, creatorFunction) {\r\n    const hashString = repoInfo.toString();\r\n    if (!reporters[hashString]) {\r\n        reporters[hashString] = creatorFunction();\r\n    }\r\n    return reporters[hashString];\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class ensures the packets from the server arrive in order\r\n * This class takes data from the server and ensures it gets passed into the callbacks in order.\r\n */\r\nclass PacketReceiver {\r\n    /**\r\n     * @param onMessage_\r\n     */\r\n    constructor(onMessage_) {\r\n        this.onMessage_ = onMessage_;\r\n        this.pendingResponses = [];\r\n        this.currentResponseNum = 0;\r\n        this.closeAfterResponse = -1;\r\n        this.onClose = null;\r\n    }\r\n    closeAfter(responseNum, callback) {\r\n        this.closeAfterResponse = responseNum;\r\n        this.onClose = callback;\r\n        if (this.closeAfterResponse < this.currentResponseNum) {\r\n            this.onClose();\r\n            this.onClose = null;\r\n        }\r\n    }\r\n    /**\r\n     * Each message from the server comes with a response number, and an array of data. The responseNumber\r\n     * allows us to ensure that we process them in the right order, since we can't be guaranteed that all\r\n     * browsers will respond in the same order as the requests we sent\r\n     */\r\n    handleResponse(requestNum, data) {\r\n        this.pendingResponses[requestNum] = data;\r\n        while (this.pendingResponses[this.currentResponseNum]) {\r\n            const toProcess = this.pendingResponses[this.currentResponseNum];\r\n            delete this.pendingResponses[this.currentResponseNum];\r\n            for (let i = 0; i < toProcess.length; ++i) {\r\n                if (toProcess[i]) {\r\n                    exceptionGuard(() => {\r\n                        this.onMessage_(toProcess[i]);\r\n                    });\r\n                }\r\n            }\r\n            if (this.currentResponseNum === this.closeAfterResponse) {\r\n                if (this.onClose) {\r\n                    this.onClose();\r\n                    this.onClose = null;\r\n                }\r\n                break;\r\n            }\r\n            this.currentResponseNum++;\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// URL query parameters associated with longpolling\r\nconst FIREBASE_LONGPOLL_START_PARAM = 'start';\r\nconst FIREBASE_LONGPOLL_CLOSE_COMMAND = 'close';\r\nconst FIREBASE_LONGPOLL_COMMAND_CB_NAME = 'pLPCommand';\r\nconst FIREBASE_LONGPOLL_DATA_CB_NAME = 'pRTLPCB';\r\nconst FIREBASE_LONGPOLL_ID_PARAM = 'id';\r\nconst FIREBASE_LONGPOLL_PW_PARAM = 'pw';\r\nconst FIREBASE_LONGPOLL_SERIAL_PARAM = 'ser';\r\nconst FIREBASE_LONGPOLL_CALLBACK_ID_PARAM = 'cb';\r\nconst FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM = 'seg';\r\nconst FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET = 'ts';\r\nconst FIREBASE_LONGPOLL_DATA_PARAM = 'd';\r\nconst FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM = 'dframe';\r\n//Data size constants.\r\n//TODO: Perf: the maximum length actually differs from browser to browser.\r\n// We should check what browser we're on and set accordingly.\r\nconst MAX_URL_DATA_SIZE = 1870;\r\nconst SEG_HEADER_SIZE = 30; //ie: &seg=8299234&ts=982389123&d=\r\nconst MAX_PAYLOAD_SIZE = MAX_URL_DATA_SIZE - SEG_HEADER_SIZE;\r\n/**\r\n * Keepalive period\r\n * send a fresh request at minimum every 25 seconds. Opera has a maximum request\r\n * length of 30 seconds that we can't exceed.\r\n */\r\nconst KEEPALIVE_REQUEST_INTERVAL = 25000;\r\n/**\r\n * How long to wait before aborting a long-polling connection attempt.\r\n */\r\nconst LP_CONNECT_TIMEOUT = 30000;\r\n/**\r\n * This class manages a single long-polling connection.\r\n */\r\nclass BrowserPollConnection {\r\n    /**\r\n     * @param connId An identifier for this connection, used for logging\r\n     * @param repoInfo The info for the endpoint to send data to.\r\n     * @param applicationId The Firebase App ID for this project.\r\n     * @param appCheckToken The AppCheck token for this client.\r\n     * @param authToken The AuthToken to use for this connection.\r\n     * @param transportSessionId Optional transportSessionid if we are\r\n     * reconnecting for an existing transport session\r\n     * @param lastSessionId Optional lastSessionId if the PersistentConnection has\r\n     * already created a connection previously\r\n     */\r\n    constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\r\n        this.connId = connId;\r\n        this.repoInfo = repoInfo;\r\n        this.applicationId = applicationId;\r\n        this.appCheckToken = appCheckToken;\r\n        this.authToken = authToken;\r\n        this.transportSessionId = transportSessionId;\r\n        this.lastSessionId = lastSessionId;\r\n        this.bytesSent = 0;\r\n        this.bytesReceived = 0;\r\n        this.everConnected_ = false;\r\n        this.log_ = logWrapper(connId);\r\n        this.stats_ = statsManagerGetCollection(repoInfo);\r\n        this.urlFn = (params) => {\r\n            // Always add the token if we have one.\r\n            if (this.appCheckToken) {\r\n                params[APP_CHECK_TOKEN_PARAM] = this.appCheckToken;\r\n            }\r\n            return repoInfoConnectionURL(repoInfo, LONG_POLLING, params);\r\n        };\r\n    }\r\n    /**\r\n     * @param onMessage - Callback when messages arrive\r\n     * @param onDisconnect - Callback with connection lost.\r\n     */\r\n    open(onMessage, onDisconnect) {\r\n        this.curSegmentNum = 0;\r\n        this.onDisconnect_ = onDisconnect;\r\n        this.myPacketOrderer = new PacketReceiver(onMessage);\r\n        this.isClosed_ = false;\r\n        this.connectTimeoutTimer_ = setTimeout(() => {\r\n            this.log_('Timed out trying to connect.');\r\n            // Make sure we clear the host cache\r\n            this.onClosed_();\r\n            this.connectTimeoutTimer_ = null;\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        }, Math.floor(LP_CONNECT_TIMEOUT));\r\n        // Ensure we delay the creation of the iframe until the DOM is loaded.\r\n        executeWhenDOMReady(() => {\r\n            if (this.isClosed_) {\r\n                return;\r\n            }\r\n            //Set up a callback that gets triggered once a connection is set up.\r\n            this.scriptTagHolder = new FirebaseIFrameScriptHolder((...args) => {\r\n                const [command, arg1, arg2, arg3, arg4] = args;\r\n                this.incrementIncomingBytes_(args);\r\n                if (!this.scriptTagHolder) {\r\n                    return; // we closed the connection.\r\n                }\r\n                if (this.connectTimeoutTimer_) {\r\n                    clearTimeout(this.connectTimeoutTimer_);\r\n                    this.connectTimeoutTimer_ = null;\r\n                }\r\n                this.everConnected_ = true;\r\n                if (command === FIREBASE_LONGPOLL_START_PARAM) {\r\n                    this.id = arg1;\r\n                    this.password = arg2;\r\n                }\r\n                else if (command === FIREBASE_LONGPOLL_CLOSE_COMMAND) {\r\n                    // Don't clear the host cache. We got a response from the server, so we know it's reachable\r\n                    if (arg1) {\r\n                        // We aren't expecting any more data (other than what the server's already in the process of sending us\r\n                        // through our already open polls), so don't send any more.\r\n                        this.scriptTagHolder.sendNewPolls = false;\r\n                        // arg1 in this case is the last response number sent by the server. We should try to receive\r\n                        // all of the responses up to this one before closing\r\n                        this.myPacketOrderer.closeAfter(arg1, () => {\r\n                            this.onClosed_();\r\n                        });\r\n                    }\r\n                    else {\r\n                        this.onClosed_();\r\n                    }\r\n                }\r\n                else {\r\n                    throw new Error('Unrecognized command received: ' + command);\r\n                }\r\n            }, (...args) => {\r\n                const [pN, data] = args;\r\n                this.incrementIncomingBytes_(args);\r\n                this.myPacketOrderer.handleResponse(pN, data);\r\n            }, () => {\r\n                this.onClosed_();\r\n            }, this.urlFn);\r\n            //Send the initial request to connect. The serial number is simply to keep the browser from pulling previous results\r\n            //from cache.\r\n            const urlParams = {};\r\n            urlParams[FIREBASE_LONGPOLL_START_PARAM] = 't';\r\n            urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = Math.floor(Math.random() * 100000000);\r\n            if (this.scriptTagHolder.uniqueCallbackIdentifier) {\r\n                urlParams[FIREBASE_LONGPOLL_CALLBACK_ID_PARAM] =\r\n                    this.scriptTagHolder.uniqueCallbackIdentifier;\r\n            }\r\n            urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n            if (this.transportSessionId) {\r\n                urlParams[TRANSPORT_SESSION_PARAM] = this.transportSessionId;\r\n            }\r\n            if (this.lastSessionId) {\r\n                urlParams[LAST_SESSION_PARAM] = this.lastSessionId;\r\n            }\r\n            if (this.applicationId) {\r\n                urlParams[APPLICATION_ID_PARAM] = this.applicationId;\r\n            }\r\n            if (this.appCheckToken) {\r\n                urlParams[APP_CHECK_TOKEN_PARAM] = this.appCheckToken;\r\n            }\r\n            if (typeof location !== 'undefined' &&\r\n                location.hostname &&\r\n                FORGE_DOMAIN_RE.test(location.hostname)) {\r\n                urlParams[REFERER_PARAM] = FORGE_REF;\r\n            }\r\n            const connectURL = this.urlFn(urlParams);\r\n            this.log_('Connecting via long-poll to ' + connectURL);\r\n            this.scriptTagHolder.addTag(connectURL, () => {\r\n                /* do nothing */\r\n            });\r\n        });\r\n    }\r\n    /**\r\n     * Call this when a handshake has completed successfully and we want to consider the connection established\r\n     */\r\n    start() {\r\n        this.scriptTagHolder.startLongPoll(this.id, this.password);\r\n        this.addDisconnectPingFrame(this.id, this.password);\r\n    }\r\n    /**\r\n     * Forces long polling to be considered as a potential transport\r\n     */\r\n    static forceAllow() {\r\n        BrowserPollConnection.forceAllow_ = true;\r\n    }\r\n    /**\r\n     * Forces longpolling to not be considered as a potential transport\r\n     */\r\n    static forceDisallow() {\r\n        BrowserPollConnection.forceDisallow_ = true;\r\n    }\r\n    // Static method, use string literal so it can be accessed in a generic way\r\n    static isAvailable() {\r\n        if (isNodeSdk()) {\r\n            return false;\r\n        }\r\n        else if (BrowserPollConnection.forceAllow_) {\r\n            return true;\r\n        }\r\n        else {\r\n            // NOTE: In React-Native there's normally no 'document', but if you debug a React-Native app in\r\n            // the Chrome debugger, 'document' is defined, but document.createElement is null (2015/06/08).\r\n            return (!BrowserPollConnection.forceDisallow_ &&\r\n                typeof document !== 'undefined' &&\r\n                document.createElement != null &&\r\n                !isChromeExtensionContentScript() &&\r\n                !isWindowsStoreApp());\r\n        }\r\n    }\r\n    /**\r\n     * No-op for polling\r\n     */\r\n    markConnectionHealthy() { }\r\n    /**\r\n     * Stops polling and cleans up the iframe\r\n     */\r\n    shutdown_() {\r\n        this.isClosed_ = true;\r\n        if (this.scriptTagHolder) {\r\n            this.scriptTagHolder.close();\r\n            this.scriptTagHolder = null;\r\n        }\r\n        //remove the disconnect frame, which will trigger an XHR call to the server to tell it we're leaving.\r\n        if (this.myDisconnFrame) {\r\n            document.body.removeChild(this.myDisconnFrame);\r\n            this.myDisconnFrame = null;\r\n        }\r\n        if (this.connectTimeoutTimer_) {\r\n            clearTimeout(this.connectTimeoutTimer_);\r\n            this.connectTimeoutTimer_ = null;\r\n        }\r\n    }\r\n    /**\r\n     * Triggered when this transport is closed\r\n     */\r\n    onClosed_() {\r\n        if (!this.isClosed_) {\r\n            this.log_('Longpoll is closing itself');\r\n            this.shutdown_();\r\n            if (this.onDisconnect_) {\r\n                this.onDisconnect_(this.everConnected_);\r\n                this.onDisconnect_ = null;\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * External-facing close handler. RealTime has requested we shut down. Kill our connection and tell the server\r\n     * that we've left.\r\n     */\r\n    close() {\r\n        if (!this.isClosed_) {\r\n            this.log_('Longpoll is being closed.');\r\n            this.shutdown_();\r\n        }\r\n    }\r\n    /**\r\n     * Send the JSON object down to the server. It will need to be stringified, base64 encoded, and then\r\n     * broken into chunks (since URLs have a small maximum length).\r\n     * @param data - The JSON data to transmit.\r\n     */\r\n    send(data) {\r\n        const dataStr = stringify(data);\r\n        this.bytesSent += dataStr.length;\r\n        this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n        //first, lets get the base64-encoded data\r\n        const base64data = base64Encode(dataStr);\r\n        //We can only fit a certain amount in each URL, so we need to split this request\r\n        //up into multiple pieces if it doesn't fit in one request.\r\n        const dataSegs = splitStringBySize(base64data, MAX_PAYLOAD_SIZE);\r\n        //Enqueue each segment for transmission. We assign each chunk a sequential ID and a total number\r\n        //of segments so that we can reassemble the packet on the server.\r\n        for (let i = 0; i < dataSegs.length; i++) {\r\n            this.scriptTagHolder.enqueueSegment(this.curSegmentNum, dataSegs.length, dataSegs[i]);\r\n            this.curSegmentNum++;\r\n        }\r\n    }\r\n    /**\r\n     * This is how we notify the server that we're leaving.\r\n     * We aren't able to send requests with DHTML on a window close event, but we can\r\n     * trigger XHR requests in some browsers (everything but Opera basically).\r\n     */\r\n    addDisconnectPingFrame(id, pw) {\r\n        if (isNodeSdk()) {\r\n            return;\r\n        }\r\n        this.myDisconnFrame = document.createElement('iframe');\r\n        const urlParams = {};\r\n        urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM] = 't';\r\n        urlParams[FIREBASE_LONGPOLL_ID_PARAM] = id;\r\n        urlParams[FIREBASE_LONGPOLL_PW_PARAM] = pw;\r\n        this.myDisconnFrame.src = this.urlFn(urlParams);\r\n        this.myDisconnFrame.style.display = 'none';\r\n        document.body.appendChild(this.myDisconnFrame);\r\n    }\r\n    /**\r\n     * Used to track the bytes received by this client\r\n     */\r\n    incrementIncomingBytes_(args) {\r\n        // TODO: This is an annoying perf hit just to track the number of incoming bytes.  Maybe it should be opt-in.\r\n        const bytesReceived = stringify(args).length;\r\n        this.bytesReceived += bytesReceived;\r\n        this.stats_.incrementCounter('bytes_received', bytesReceived);\r\n    }\r\n}\r\n/*********************************************************************************************\r\n * A wrapper around an iframe that is used as a long-polling script holder.\r\n *********************************************************************************************/\r\nclass FirebaseIFrameScriptHolder {\r\n    /**\r\n     * @param commandCB - The callback to be called when control commands are recevied from the server.\r\n     * @param onMessageCB - The callback to be triggered when responses arrive from the server.\r\n     * @param onDisconnect - The callback to be triggered when this tag holder is closed\r\n     * @param urlFn - A function that provides the URL of the endpoint to send data to.\r\n     */\r\n    constructor(commandCB, onMessageCB, onDisconnect, urlFn) {\r\n        this.onDisconnect = onDisconnect;\r\n        this.urlFn = urlFn;\r\n        //We maintain a count of all of the outstanding requests, because if we have too many active at once it can cause\r\n        //problems in some browsers.\r\n        this.outstandingRequests = new Set();\r\n        //A queue of the pending segments waiting for transmission to the server.\r\n        this.pendingSegs = [];\r\n        //A serial number. We use this for two things:\r\n        // 1) A way to ensure the browser doesn't cache responses to polls\r\n        // 2) A way to make the server aware when long-polls arrive in a different order than we started them. The\r\n        //    server needs to release both polls in this case or it will cause problems in Opera since Opera can only execute\r\n        //    JSONP code in the order it was added to the iframe.\r\n        this.currentSerial = Math.floor(Math.random() * 100000000);\r\n        // This gets set to false when we're \"closing down\" the connection (e.g. we're switching transports but there's still\r\n        // incoming data from the server that we're waiting for).\r\n        this.sendNewPolls = true;\r\n        if (!isNodeSdk()) {\r\n            //Each script holder registers a couple of uniquely named callbacks with the window. These are called from the\r\n            //iframes where we put the long-polling script tags. We have two callbacks:\r\n            //   1) Command Callback - Triggered for control issues, like starting a connection.\r\n            //   2) Message Callback - Triggered when new data arrives.\r\n            this.uniqueCallbackIdentifier = LUIDGenerator();\r\n            window[FIREBASE_LONGPOLL_COMMAND_CB_NAME + this.uniqueCallbackIdentifier] = commandCB;\r\n            window[FIREBASE_LONGPOLL_DATA_CB_NAME + this.uniqueCallbackIdentifier] =\r\n                onMessageCB;\r\n            //Create an iframe for us to add script tags to.\r\n            this.myIFrame = FirebaseIFrameScriptHolder.createIFrame_();\r\n            // Set the iframe's contents.\r\n            let script = '';\r\n            // if we set a javascript url, it's IE and we need to set the document domain. The javascript url is sufficient\r\n            // for ie9, but ie8 needs to do it again in the document itself.\r\n            if (this.myIFrame.src &&\r\n                this.myIFrame.src.substr(0, 'javascript:'.length) === 'javascript:') {\r\n                const currentDomain = document.domain;\r\n                script = '<script>document.domain=\"' + currentDomain + '\";</script>';\r\n            }\r\n            const iframeContents = '<html><body>' + script + '</body></html>';\r\n            try {\r\n                this.myIFrame.doc.open();\r\n                this.myIFrame.doc.write(iframeContents);\r\n                this.myIFrame.doc.close();\r\n            }\r\n            catch (e) {\r\n                log('frame writing exception');\r\n                if (e.stack) {\r\n                    log(e.stack);\r\n                }\r\n                log(e);\r\n            }\r\n        }\r\n        else {\r\n            this.commandCB = commandCB;\r\n            this.onMessageCB = onMessageCB;\r\n        }\r\n    }\r\n    /**\r\n     * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\r\n     * actually use.\r\n     */\r\n    static createIFrame_() {\r\n        const iframe = document.createElement('iframe');\r\n        iframe.style.display = 'none';\r\n        // This is necessary in order to initialize the document inside the iframe\r\n        if (document.body) {\r\n            document.body.appendChild(iframe);\r\n            try {\r\n                // If document.domain has been modified in IE, this will throw an error, and we need to set the\r\n                // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\r\n                // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\r\n                const a = iframe.contentWindow.document;\r\n                if (!a) {\r\n                    // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\r\n                    log('No IE domain setting required');\r\n                }\r\n            }\r\n            catch (e) {\r\n                const domain = document.domain;\r\n                iframe.src =\r\n                    \"javascript:void((function(){document.open();document.domain='\" +\r\n                        domain +\r\n                        \"';document.close();})())\";\r\n            }\r\n        }\r\n        else {\r\n            // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\r\n            // never gets hit.\r\n            throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\r\n        }\r\n        // Get the document of the iframe in a browser-specific way.\r\n        if (iframe.contentDocument) {\r\n            iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\r\n        }\r\n        else if (iframe.contentWindow) {\r\n            iframe.doc = iframe.contentWindow.document; // Internet Explorer\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        }\r\n        else if (iframe.document) {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            iframe.doc = iframe.document; //others?\r\n        }\r\n        return iframe;\r\n    }\r\n    /**\r\n     * Cancel all outstanding queries and remove the frame.\r\n     */\r\n    close() {\r\n        //Mark this iframe as dead, so no new requests are sent.\r\n        this.alive = false;\r\n        if (this.myIFrame) {\r\n            //We have to actually remove all of the html inside this iframe before removing it from the\r\n            //window, or IE will continue loading and executing the script tags we've already added, which\r\n            //can lead to some errors being thrown. Setting innerHTML seems to be the easiest way to do this.\r\n            this.myIFrame.doc.body.innerHTML = '';\r\n            setTimeout(() => {\r\n                if (this.myIFrame !== null) {\r\n                    document.body.removeChild(this.myIFrame);\r\n                    this.myIFrame = null;\r\n                }\r\n            }, Math.floor(0));\r\n        }\r\n        // Protect from being called recursively.\r\n        const onDisconnect = this.onDisconnect;\r\n        if (onDisconnect) {\r\n            this.onDisconnect = null;\r\n            onDisconnect();\r\n        }\r\n    }\r\n    /**\r\n     * Actually start the long-polling session by adding the first script tag(s) to the iframe.\r\n     * @param id - The ID of this connection\r\n     * @param pw - The password for this connection\r\n     */\r\n    startLongPoll(id, pw) {\r\n        this.myID = id;\r\n        this.myPW = pw;\r\n        this.alive = true;\r\n        //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\r\n        while (this.newRequest_()) { }\r\n    }\r\n    /**\r\n     * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\r\n     * too many outstanding requests and we are still alive.\r\n     *\r\n     * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\r\n     * needed.\r\n     */\r\n    newRequest_() {\r\n        // We keep one outstanding request open all the time to receive data, but if we need to send data\r\n        // (pendingSegs.length > 0) then we create a new request to send the data.  The server will automatically\r\n        // close the old request.\r\n        if (this.alive &&\r\n            this.sendNewPolls &&\r\n            this.outstandingRequests.size < (this.pendingSegs.length > 0 ? 2 : 1)) {\r\n            //construct our url\r\n            this.currentSerial++;\r\n            const urlParams = {};\r\n            urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n            urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n            urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\r\n            let theURL = this.urlFn(urlParams);\r\n            //Now add as much data as we can.\r\n            let curDataString = '';\r\n            let i = 0;\r\n            while (this.pendingSegs.length > 0) {\r\n                //first, lets see if the next segment will fit.\r\n                const nextSeg = this.pendingSegs[0];\r\n                if (nextSeg.d.length +\r\n                    SEG_HEADER_SIZE +\r\n                    curDataString.length <=\r\n                    MAX_URL_DATA_SIZE) {\r\n                    //great, the segment will fit. Lets append it.\r\n                    const theSeg = this.pendingSegs.shift();\r\n                    curDataString =\r\n                        curDataString +\r\n                            '&' +\r\n                            FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\r\n                            i +\r\n                            '=' +\r\n                            theSeg.seg +\r\n                            '&' +\r\n                            FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\r\n                            i +\r\n                            '=' +\r\n                            theSeg.ts +\r\n                            '&' +\r\n                            FIREBASE_LONGPOLL_DATA_PARAM +\r\n                            i +\r\n                            '=' +\r\n                            theSeg.d;\r\n                    i++;\r\n                }\r\n                else {\r\n                    break;\r\n                }\r\n            }\r\n            theURL = theURL + curDataString;\r\n            this.addLongPollTag_(theURL, this.currentSerial);\r\n            return true;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    }\r\n    /**\r\n     * Queue a packet for transmission to the server.\r\n     * @param segnum - A sequential id for this packet segment used for reassembly\r\n     * @param totalsegs - The total number of segments in this packet\r\n     * @param data - The data for this segment.\r\n     */\r\n    enqueueSegment(segnum, totalsegs, data) {\r\n        //add this to the queue of segments to send.\r\n        this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\r\n        //send the data immediately if there isn't already data being transmitted, unless\r\n        //startLongPoll hasn't been called yet.\r\n        if (this.alive) {\r\n            this.newRequest_();\r\n        }\r\n    }\r\n    /**\r\n     * Add a script tag for a regular long-poll request.\r\n     * @param url - The URL of the script tag.\r\n     * @param serial - The serial number of the request.\r\n     */\r\n    addLongPollTag_(url, serial) {\r\n        //remember that we sent this request.\r\n        this.outstandingRequests.add(serial);\r\n        const doNewRequest = () => {\r\n            this.outstandingRequests.delete(serial);\r\n            this.newRequest_();\r\n        };\r\n        // If this request doesn't return on its own accord (by the server sending us some data), we'll\r\n        // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\r\n        const keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));\r\n        const readyStateCB = () => {\r\n            // Request completed.  Cancel the keepalive.\r\n            clearTimeout(keepaliveTimeout);\r\n            // Trigger a new request so we can continue receiving data.\r\n            doNewRequest();\r\n        };\r\n        this.addTag(url, readyStateCB);\r\n    }\r\n    /**\r\n     * Add an arbitrary script tag to the iframe.\r\n     * @param url - The URL for the script tag source.\r\n     * @param loadCB - A callback to be triggered once the script has loaded.\r\n     */\r\n    addTag(url, loadCB) {\r\n        if (isNodeSdk()) {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            this.doNodeLongPoll(url, loadCB);\r\n        }\r\n        else {\r\n            setTimeout(() => {\r\n                try {\r\n                    // if we're already closed, don't add this poll\r\n                    if (!this.sendNewPolls) {\r\n                        return;\r\n                    }\r\n                    const newScript = this.myIFrame.doc.createElement('script');\r\n                    newScript.type = 'text/javascript';\r\n                    newScript.async = true;\r\n                    newScript.src = url;\r\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                    newScript.onload = newScript.onreadystatechange =\r\n                        function () {\r\n                            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                            const rstate = newScript.readyState;\r\n                            if (!rstate || rstate === 'loaded' || rstate === 'complete') {\r\n                                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                                newScript.onload = newScript.onreadystatechange = null;\r\n                                if (newScript.parentNode) {\r\n                                    newScript.parentNode.removeChild(newScript);\r\n                                }\r\n                                loadCB();\r\n                            }\r\n                        };\r\n                    newScript.onerror = () => {\r\n                        log('Long-poll script failed to load: ' + url);\r\n                        this.sendNewPolls = false;\r\n                        this.close();\r\n                    };\r\n                    this.myIFrame.doc.body.appendChild(newScript);\r\n                }\r\n                catch (e) {\r\n                    // TODO: we should make this error visible somehow\r\n                }\r\n            }, Math.floor(1));\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst WEBSOCKET_MAX_FRAME_SIZE = 16384;\r\nconst WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\r\nlet WebSocketImpl = null;\r\nif (typeof MozWebSocket !== 'undefined') {\r\n    WebSocketImpl = MozWebSocket;\r\n}\r\nelse if (typeof WebSocket !== 'undefined') {\r\n    WebSocketImpl = WebSocket;\r\n}\r\n/**\r\n * Create a new websocket connection with the given callbacks.\r\n */\r\nclass WebSocketConnection {\r\n    /**\r\n     * @param connId identifier for this transport\r\n     * @param repoInfo The info for the websocket endpoint.\r\n     * @param applicationId The Firebase App ID for this project.\r\n     * @param appCheckToken The App Check Token for this client.\r\n     * @param authToken The Auth Token for this client.\r\n     * @param transportSessionId Optional transportSessionId if this is connecting\r\n     * to an existing transport session\r\n     * @param lastSessionId Optional lastSessionId if there was a previous\r\n     * connection\r\n     */\r\n    constructor(connId, repoInfo, applicationId, appCheckToken, authToken, transportSessionId, lastSessionId) {\r\n        this.connId = connId;\r\n        this.applicationId = applicationId;\r\n        this.appCheckToken = appCheckToken;\r\n        this.authToken = authToken;\r\n        this.keepaliveTimer = null;\r\n        this.frames = null;\r\n        this.totalFrames = 0;\r\n        this.bytesSent = 0;\r\n        this.bytesReceived = 0;\r\n        this.log_ = logWrapper(this.connId);\r\n        this.stats_ = statsManagerGetCollection(repoInfo);\r\n        this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId);\r\n        this.nodeAdmin = repoInfo.nodeAdmin;\r\n    }\r\n    /**\r\n     * @param repoInfo - The info for the websocket endpoint.\r\n     * @param transportSessionId - Optional transportSessionId if this is connecting to an existing transport\r\n     *                                         session\r\n     * @param lastSessionId - Optional lastSessionId if there was a previous connection\r\n     * @returns connection url\r\n     */\r\n    static connectionURL_(repoInfo, transportSessionId, lastSessionId, appCheckToken, applicationId) {\r\n        const urlParams = {};\r\n        urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n        if (!isNodeSdk() &&\r\n            typeof location !== 'undefined' &&\r\n            location.hostname &&\r\n            FORGE_DOMAIN_RE.test(location.hostname)) {\r\n            urlParams[REFERER_PARAM] = FORGE_REF;\r\n        }\r\n        if (transportSessionId) {\r\n            urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;\r\n        }\r\n        if (lastSessionId) {\r\n            urlParams[LAST_SESSION_PARAM] = lastSessionId;\r\n        }\r\n        if (appCheckToken) {\r\n            urlParams[APP_CHECK_TOKEN_PARAM] = appCheckToken;\r\n        }\r\n        if (applicationId) {\r\n            urlParams[APPLICATION_ID_PARAM] = applicationId;\r\n        }\r\n        return repoInfoConnectionURL(repoInfo, WEBSOCKET, urlParams);\r\n    }\r\n    /**\r\n     * @param onMessage - Callback when messages arrive\r\n     * @param onDisconnect - Callback with connection lost.\r\n     */\r\n    open(onMessage, onDisconnect) {\r\n        this.onDisconnect = onDisconnect;\r\n        this.onMessage = onMessage;\r\n        this.log_('Websocket connecting to ' + this.connURL);\r\n        this.everConnected_ = false;\r\n        // Assume failure until proven otherwise.\r\n        PersistentStorage.set('previous_websocket_failure', true);\r\n        try {\r\n            let options;\r\n            if (isNodeSdk()) {\r\n                const device = this.nodeAdmin ? 'AdminNode' : 'Node';\r\n                // UA Format: Firebase/<wire_protocol>/<sdk_version>/<platform>/<device>\r\n                options = {\r\n                    headers: {\r\n                        'User-Agent': `Firebase/${PROTOCOL_VERSION}/${SDK_VERSION}/${process.platform}/${device}`,\r\n                        'X-Firebase-GMPID': this.applicationId || ''\r\n                    }\r\n                };\r\n                // If using Node with admin creds, AppCheck-related checks are unnecessary.\r\n                // Note that we send the credentials here even if they aren't admin credentials, which is\r\n                // not a problem.\r\n                // Note that this header is just used to bypass appcheck, and the token should still be sent\r\n                // through the websocket connection once it is established.\r\n                if (this.authToken) {\r\n                    options.headers['Authorization'] = `Bearer ${this.authToken}`;\r\n                }\r\n                if (this.appCheckToken) {\r\n                    options.headers['X-Firebase-AppCheck'] = this.appCheckToken;\r\n                }\r\n                // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\r\n                const env = process['env'];\r\n                const proxy = this.connURL.indexOf('wss://') === 0\r\n                    ? env['HTTPS_PROXY'] || env['https_proxy']\r\n                    : env['HTTP_PROXY'] || env['http_proxy'];\r\n                if (proxy) {\r\n                    options['proxy'] = { origin: proxy };\r\n                }\r\n            }\r\n            this.mySock = new WebSocketImpl(this.connURL, [], options);\r\n        }\r\n        catch (e) {\r\n            this.log_('Error instantiating WebSocket.');\r\n            const error = e.message || e.data;\r\n            if (error) {\r\n                this.log_(error);\r\n            }\r\n            this.onClosed_();\r\n            return;\r\n        }\r\n        this.mySock.onopen = () => {\r\n            this.log_('Websocket connected.');\r\n            this.everConnected_ = true;\r\n        };\r\n        this.mySock.onclose = () => {\r\n            this.log_('Websocket connection was disconnected.');\r\n            this.mySock = null;\r\n            this.onClosed_();\r\n        };\r\n        this.mySock.onmessage = m => {\r\n            this.handleIncomingFrame(m);\r\n        };\r\n        this.mySock.onerror = e => {\r\n            this.log_('WebSocket error.  Closing connection.');\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            const error = e.message || e.data;\r\n            if (error) {\r\n                this.log_(error);\r\n            }\r\n            this.onClosed_();\r\n        };\r\n    }\r\n    /**\r\n     * No-op for websockets, we don't need to do anything once the connection is confirmed as open\r\n     */\r\n    start() { }\r\n    static forceDisallow() {\r\n        WebSocketConnection.forceDisallow_ = true;\r\n    }\r\n    static isAvailable() {\r\n        let isOldAndroid = false;\r\n        if (typeof navigator !== 'undefined' && navigator.userAgent) {\r\n            const oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\r\n            const oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\r\n            if (oldAndroidMatch && oldAndroidMatch.length > 1) {\r\n                if (parseFloat(oldAndroidMatch[1]) < 4.4) {\r\n                    isOldAndroid = true;\r\n                }\r\n            }\r\n        }\r\n        return (!isOldAndroid &&\r\n            WebSocketImpl !== null &&\r\n            !WebSocketConnection.forceDisallow_);\r\n    }\r\n    /**\r\n     * Returns true if we previously failed to connect with this transport.\r\n     */\r\n    static previouslyFailed() {\r\n        // If our persistent storage is actually only in-memory storage,\r\n        // we default to assuming that it previously failed to be safe.\r\n        return (PersistentStorage.isInMemoryStorage ||\r\n            PersistentStorage.get('previous_websocket_failure') === true);\r\n    }\r\n    markConnectionHealthy() {\r\n        PersistentStorage.remove('previous_websocket_failure');\r\n    }\r\n    appendFrame_(data) {\r\n        this.frames.push(data);\r\n        if (this.frames.length === this.totalFrames) {\r\n            const fullMess = this.frames.join('');\r\n            this.frames = null;\r\n            const jsonMess = jsonEval(fullMess);\r\n            //handle the message\r\n            this.onMessage(jsonMess);\r\n        }\r\n    }\r\n    /**\r\n     * @param frameCount - The number of frames we are expecting from the server\r\n     */\r\n    handleNewFrameCount_(frameCount) {\r\n        this.totalFrames = frameCount;\r\n        this.frames = [];\r\n    }\r\n    /**\r\n     * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\r\n     * @returns Any remaining data to be process, or null if there is none\r\n     */\r\n    extractFrameCount_(data) {\r\n        assert(this.frames === null, 'We already have a frame buffer');\r\n        // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\r\n        // currently.  So allowing larger frame counts (length <= 6).  See https://app.asana.com/0/search/8688598998380/8237608042508\r\n        if (data.length <= 6) {\r\n            const frameCount = Number(data);\r\n            if (!isNaN(frameCount)) {\r\n                this.handleNewFrameCount_(frameCount);\r\n                return null;\r\n            }\r\n        }\r\n        this.handleNewFrameCount_(1);\r\n        return data;\r\n    }\r\n    /**\r\n     * Process a websocket frame that has arrived from the server.\r\n     * @param mess - The frame data\r\n     */\r\n    handleIncomingFrame(mess) {\r\n        if (this.mySock === null) {\r\n            return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\r\n        }\r\n        const data = mess['data'];\r\n        this.bytesReceived += data.length;\r\n        this.stats_.incrementCounter('bytes_received', data.length);\r\n        this.resetKeepAlive();\r\n        if (this.frames !== null) {\r\n            // we're buffering\r\n            this.appendFrame_(data);\r\n        }\r\n        else {\r\n            // try to parse out a frame count, otherwise, assume 1 and process it\r\n            const remainingData = this.extractFrameCount_(data);\r\n            if (remainingData !== null) {\r\n                this.appendFrame_(remainingData);\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Send a message to the server\r\n     * @param data - The JSON object to transmit\r\n     */\r\n    send(data) {\r\n        this.resetKeepAlive();\r\n        const dataStr = stringify(data);\r\n        this.bytesSent += dataStr.length;\r\n        this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n        //We can only fit a certain amount in each websocket frame, so we need to split this request\r\n        //up into multiple pieces if it doesn't fit in one request.\r\n        const dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\r\n        //Send the length header\r\n        if (dataSegs.length > 1) {\r\n            this.sendString_(String(dataSegs.length));\r\n        }\r\n        //Send the actual data in segments.\r\n        for (let i = 0; i < dataSegs.length; i++) {\r\n            this.sendString_(dataSegs[i]);\r\n        }\r\n    }\r\n    shutdown_() {\r\n        this.isClosed_ = true;\r\n        if (this.keepaliveTimer) {\r\n            clearInterval(this.keepaliveTimer);\r\n            this.keepaliveTimer = null;\r\n        }\r\n        if (this.mySock) {\r\n            this.mySock.close();\r\n            this.mySock = null;\r\n        }\r\n    }\r\n    onClosed_() {\r\n        if (!this.isClosed_) {\r\n            this.log_('WebSocket is closing itself');\r\n            this.shutdown_();\r\n            // since this is an internal close, trigger the close listener\r\n            if (this.onDisconnect) {\r\n                this.onDisconnect(this.everConnected_);\r\n                this.onDisconnect = null;\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * External-facing close handler.\r\n     * Close the websocket and kill the connection.\r\n     */\r\n    close() {\r\n        if (!this.isClosed_) {\r\n            this.log_('WebSocket is being closed');\r\n            this.shutdown_();\r\n        }\r\n    }\r\n    /**\r\n     * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\r\n     * the last activity.\r\n     */\r\n    resetKeepAlive() {\r\n        clearInterval(this.keepaliveTimer);\r\n        this.keepaliveTimer = setInterval(() => {\r\n            //If there has been no websocket activity for a while, send a no-op\r\n            if (this.mySock) {\r\n                this.sendString_('0');\r\n            }\r\n            this.resetKeepAlive();\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));\r\n    }\r\n    /**\r\n     * Send a string over the websocket.\r\n     *\r\n     * @param str - String to send.\r\n     */\r\n    sendString_(str) {\r\n        // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\r\n        // calls for some unknown reason.  We treat these as an error and disconnect.\r\n        // See https://app.asana.com/0/58926111402292/68021340250410\r\n        try {\r\n            this.mySock.send(str);\r\n        }\r\n        catch (e) {\r\n            this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');\r\n            setTimeout(this.onClosed_.bind(this), 0);\r\n        }\r\n    }\r\n}\r\n/**\r\n * Number of response before we consider the connection \"healthy.\"\r\n */\r\nWebSocketConnection.responsesRequiredToBeHealthy = 2;\r\n/**\r\n * Time to wait for the connection te become healthy before giving up.\r\n */\r\nWebSocketConnection.healthyTimeout = 30000;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Currently simplistic, this class manages what transport a Connection should use at various stages of its\r\n * lifecycle.\r\n *\r\n * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\r\n * they are available.\r\n */\r\nclass TransportManager {\r\n    /**\r\n     * @param repoInfo - Metadata around the namespace we're connecting to\r\n     */\r\n    constructor(repoInfo) {\r\n        this.initTransports_(repoInfo);\r\n    }\r\n    static get ALL_TRANSPORTS() {\r\n        return [BrowserPollConnection, WebSocketConnection];\r\n    }\r\n    /**\r\n     * Returns whether transport has been selected to ensure WebSocketConnection or BrowserPollConnection are not called after\r\n     * TransportManager has already set up transports_\r\n     */\r\n    static get IS_TRANSPORT_INITIALIZED() {\r\n        return this.globalTransportInitialized_;\r\n    }\r\n    initTransports_(repoInfo) {\r\n        const isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();\r\n        let isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();\r\n        if (repoInfo.webSocketOnly) {\r\n            if (!isWebSocketsAvailable) {\r\n                warn(\"wss:// URL used, but browser isn't known to support websockets.  Trying anyway.\");\r\n            }\r\n            isSkipPollConnection = true;\r\n        }\r\n        if (isSkipPollConnection) {\r\n            this.transports_ = [WebSocketConnection];\r\n        }\r\n        else {\r\n            const transports = (this.transports_ = []);\r\n            for (const transport of TransportManager.ALL_TRANSPORTS) {\r\n                if (transport && transport['isAvailable']()) {\r\n                    transports.push(transport);\r\n                }\r\n            }\r\n            TransportManager.globalTransportInitialized_ = true;\r\n        }\r\n    }\r\n    /**\r\n     * @returns The constructor for the initial transport to use\r\n     */\r\n    initialTransport() {\r\n        if (this.transports_.length > 0) {\r\n            return this.transports_[0];\r\n        }\r\n        else {\r\n            throw new Error('No transports available');\r\n        }\r\n    }\r\n    /**\r\n     * @returns The constructor for the next transport, or null\r\n     */\r\n    upgradeTransport() {\r\n        if (this.transports_.length > 1) {\r\n            return this.transports_[1];\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    }\r\n}\r\n// Keeps track of whether the TransportManager has already chosen a transport to use\r\nTransportManager.globalTransportInitialized_ = false;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Abort upgrade attempt if it takes longer than 60s.\r\nconst UPGRADE_TIMEOUT = 60000;\r\n// For some transports (WebSockets), we need to \"validate\" the transport by exchanging a few requests and responses.\r\n// If we haven't sent enough requests within 5s, we'll start sending noop ping requests.\r\nconst DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000;\r\n// If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)\r\n// then we may not be able to exchange our ping/pong requests within the healthy timeout.  So if we reach the timeout\r\n// but we've sent/received enough bytes, we don't cancel the connection.\r\nconst BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;\r\nconst BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;\r\nconst MESSAGE_TYPE = 't';\r\nconst MESSAGE_DATA = 'd';\r\nconst CONTROL_SHUTDOWN = 's';\r\nconst CONTROL_RESET = 'r';\r\nconst CONTROL_ERROR = 'e';\r\nconst CONTROL_PONG = 'o';\r\nconst SWITCH_ACK = 'a';\r\nconst END_TRANSMISSION = 'n';\r\nconst PING = 'p';\r\nconst SERVER_HELLO = 'h';\r\n/**\r\n * Creates a new real-time connection to the server using whichever method works\r\n * best in the current browser.\r\n */\r\nclass Connection {\r\n    /**\r\n     * @param id - an id for this connection\r\n     * @param repoInfo_ - the info for the endpoint to connect to\r\n     * @param applicationId_ - the Firebase App ID for this project\r\n     * @param appCheckToken_ - The App Check Token for this device.\r\n     * @param authToken_ - The auth token for this session.\r\n     * @param onMessage_ - the callback to be triggered when a server-push message arrives\r\n     * @param onReady_ - the callback to be triggered when this connection is ready to send messages.\r\n     * @param onDisconnect_ - the callback to be triggered when a connection was lost\r\n     * @param onKill_ - the callback to be triggered when this connection has permanently shut down.\r\n     * @param lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server\r\n     */\r\n    constructor(id, repoInfo_, applicationId_, appCheckToken_, authToken_, onMessage_, onReady_, onDisconnect_, onKill_, lastSessionId) {\r\n        this.id = id;\r\n        this.repoInfo_ = repoInfo_;\r\n        this.applicationId_ = applicationId_;\r\n        this.appCheckToken_ = appCheckToken_;\r\n        this.authToken_ = authToken_;\r\n        this.onMessage_ = onMessage_;\r\n        this.onReady_ = onReady_;\r\n        this.onDisconnect_ = onDisconnect_;\r\n        this.onKill_ = onKill_;\r\n        this.lastSessionId = lastSessionId;\r\n        this.connectionCount = 0;\r\n        this.pendingDataMessages = [];\r\n        this.state_ = 0 /* CONNECTING */;\r\n        this.log_ = logWrapper('c:' + this.id + ':');\r\n        this.transportManager_ = new TransportManager(repoInfo_);\r\n        this.log_('Connection created');\r\n        this.start_();\r\n    }\r\n    /**\r\n     * Starts a connection attempt\r\n     */\r\n    start_() {\r\n        const conn = this.transportManager_.initialTransport();\r\n        this.conn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, null, this.lastSessionId);\r\n        // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n        // can consider the transport healthy.\r\n        this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;\r\n        const onMessageReceived = this.connReceiver_(this.conn_);\r\n        const onConnectionLost = this.disconnReceiver_(this.conn_);\r\n        this.tx_ = this.conn_;\r\n        this.rx_ = this.conn_;\r\n        this.secondaryConn_ = null;\r\n        this.isHealthy_ = false;\r\n        /*\r\n         * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.\r\n         * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.\r\n         * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should\r\n         * still have the context of your originating frame.\r\n         */\r\n        setTimeout(() => {\r\n            // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it\r\n            this.conn_ && this.conn_.open(onMessageReceived, onConnectionLost);\r\n        }, Math.floor(0));\r\n        const healthyTimeoutMS = conn['healthyTimeout'] || 0;\r\n        if (healthyTimeoutMS > 0) {\r\n            this.healthyTimeout_ = setTimeoutNonBlocking(() => {\r\n                this.healthyTimeout_ = null;\r\n                if (!this.isHealthy_) {\r\n                    if (this.conn_ &&\r\n                        this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE) {\r\n                        this.log_('Connection exceeded healthy timeout but has received ' +\r\n                            this.conn_.bytesReceived +\r\n                            ' bytes.  Marking connection healthy.');\r\n                        this.isHealthy_ = true;\r\n                        this.conn_.markConnectionHealthy();\r\n                    }\r\n                    else if (this.conn_ &&\r\n                        this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE) {\r\n                        this.log_('Connection exceeded healthy timeout but has sent ' +\r\n                            this.conn_.bytesSent +\r\n                            ' bytes.  Leaving connection alive.');\r\n                        // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to\r\n                        // the server.\r\n                    }\r\n                    else {\r\n                        this.log_('Closing unhealthy connection after timeout.');\r\n                        this.close();\r\n                    }\r\n                }\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            }, Math.floor(healthyTimeoutMS));\r\n        }\r\n    }\r\n    nextTransportId_() {\r\n        return 'c:' + this.id + ':' + this.connectionCount++;\r\n    }\r\n    disconnReceiver_(conn) {\r\n        return everConnected => {\r\n            if (conn === this.conn_) {\r\n                this.onConnectionLost_(everConnected);\r\n            }\r\n            else if (conn === this.secondaryConn_) {\r\n                this.log_('Secondary connection lost.');\r\n                this.onSecondaryConnectionLost_();\r\n            }\r\n            else {\r\n                this.log_('closing an old connection');\r\n            }\r\n        };\r\n    }\r\n    connReceiver_(conn) {\r\n        return (message) => {\r\n            if (this.state_ !== 2 /* DISCONNECTED */) {\r\n                if (conn === this.rx_) {\r\n                    this.onPrimaryMessageReceived_(message);\r\n                }\r\n                else if (conn === this.secondaryConn_) {\r\n                    this.onSecondaryMessageReceived_(message);\r\n                }\r\n                else {\r\n                    this.log_('message on old connection');\r\n                }\r\n            }\r\n        };\r\n    }\r\n    /**\r\n     * @param dataMsg - An arbitrary data message to be sent to the server\r\n     */\r\n    sendRequest(dataMsg) {\r\n        // wrap in a data message envelope and send it on\r\n        const msg = { t: 'd', d: dataMsg };\r\n        this.sendData_(msg);\r\n    }\r\n    tryCleanupConnection() {\r\n        if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {\r\n            this.log_('cleaning up and promoting a connection: ' + this.secondaryConn_.connId);\r\n            this.conn_ = this.secondaryConn_;\r\n            this.secondaryConn_ = null;\r\n            // the server will shutdown the old connection\r\n        }\r\n    }\r\n    onSecondaryControl_(controlData) {\r\n        if (MESSAGE_TYPE in controlData) {\r\n            const cmd = controlData[MESSAGE_TYPE];\r\n            if (cmd === SWITCH_ACK) {\r\n                this.upgradeIfSecondaryHealthy_();\r\n            }\r\n            else if (cmd === CONTROL_RESET) {\r\n                // Most likely the session wasn't valid. Abandon the switch attempt\r\n                this.log_('Got a reset on secondary, closing it');\r\n                this.secondaryConn_.close();\r\n                // If we were already using this connection for something, than we need to fully close\r\n                if (this.tx_ === this.secondaryConn_ ||\r\n                    this.rx_ === this.secondaryConn_) {\r\n                    this.close();\r\n                }\r\n            }\r\n            else if (cmd === CONTROL_PONG) {\r\n                this.log_('got pong on secondary.');\r\n                this.secondaryResponsesRequired_--;\r\n                this.upgradeIfSecondaryHealthy_();\r\n            }\r\n        }\r\n    }\r\n    onSecondaryMessageReceived_(parsedData) {\r\n        const layer = requireKey('t', parsedData);\r\n        const data = requireKey('d', parsedData);\r\n        if (layer === 'c') {\r\n            this.onSecondaryControl_(data);\r\n        }\r\n        else if (layer === 'd') {\r\n            // got a data message, but we're still second connection. Need to buffer it up\r\n            this.pendingDataMessages.push(data);\r\n        }\r\n        else {\r\n            throw new Error('Unknown protocol layer: ' + layer);\r\n        }\r\n    }\r\n    upgradeIfSecondaryHealthy_() {\r\n        if (this.secondaryResponsesRequired_ <= 0) {\r\n            this.log_('Secondary connection is healthy.');\r\n            this.isHealthy_ = true;\r\n            this.secondaryConn_.markConnectionHealthy();\r\n            this.proceedWithUpgrade_();\r\n        }\r\n        else {\r\n            // Send a ping to make sure the connection is healthy.\r\n            this.log_('sending ping on secondary.');\r\n            this.secondaryConn_.send({ t: 'c', d: { t: PING, d: {} } });\r\n        }\r\n    }\r\n    proceedWithUpgrade_() {\r\n        // tell this connection to consider itself open\r\n        this.secondaryConn_.start();\r\n        // send ack\r\n        this.log_('sending client ack on secondary');\r\n        this.secondaryConn_.send({ t: 'c', d: { t: SWITCH_ACK, d: {} } });\r\n        // send end packet on primary transport, switch to sending on this one\r\n        // can receive on this one, buffer responses until end received on primary transport\r\n        this.log_('Ending transmission on primary');\r\n        this.conn_.send({ t: 'c', d: { t: END_TRANSMISSION, d: {} } });\r\n        this.tx_ = this.secondaryConn_;\r\n        this.tryCleanupConnection();\r\n    }\r\n    onPrimaryMessageReceived_(parsedData) {\r\n        // Must refer to parsedData properties in quotes, so closure doesn't touch them.\r\n        const layer = requireKey('t', parsedData);\r\n        const data = requireKey('d', parsedData);\r\n        if (layer === 'c') {\r\n            this.onControl_(data);\r\n        }\r\n        else if (layer === 'd') {\r\n            this.onDataMessage_(data);\r\n        }\r\n    }\r\n    onDataMessage_(message) {\r\n        this.onPrimaryResponse_();\r\n        // We don't do anything with data messages, just kick them up a level\r\n        this.onMessage_(message);\r\n    }\r\n    onPrimaryResponse_() {\r\n        if (!this.isHealthy_) {\r\n            this.primaryResponsesRequired_--;\r\n            if (this.primaryResponsesRequired_ <= 0) {\r\n                this.log_('Primary connection is healthy.');\r\n                this.isHealthy_ = true;\r\n                this.conn_.markConnectionHealthy();\r\n            }\r\n        }\r\n    }\r\n    onControl_(controlData) {\r\n        const cmd = requireKey(MESSAGE_TYPE, controlData);\r\n        if (MESSAGE_DATA in controlData) {\r\n            const payload = controlData[MESSAGE_DATA];\r\n            if (cmd === SERVER_HELLO) {\r\n                this.onHandshake_(payload);\r\n            }\r\n            else if (cmd === END_TRANSMISSION) {\r\n                this.log_('recvd end transmission on primary');\r\n                this.rx_ = this.secondaryConn_;\r\n                for (let i = 0; i < this.pendingDataMessages.length; ++i) {\r\n                    this.onDataMessage_(this.pendingDataMessages[i]);\r\n                }\r\n                this.pendingDataMessages = [];\r\n                this.tryCleanupConnection();\r\n            }\r\n            else if (cmd === CONTROL_SHUTDOWN) {\r\n                // This was previously the 'onKill' callback passed to the lower-level connection\r\n                // payload in this case is the reason for the shutdown. Generally a human-readable error\r\n                this.onConnectionShutdown_(payload);\r\n            }\r\n            else if (cmd === CONTROL_RESET) {\r\n                // payload in this case is the host we should contact\r\n                this.onReset_(payload);\r\n            }\r\n            else if (cmd === CONTROL_ERROR) {\r\n                error('Server Error: ' + payload);\r\n            }\r\n            else if (cmd === CONTROL_PONG) {\r\n                this.log_('got pong on primary.');\r\n                this.onPrimaryResponse_();\r\n                this.sendPingOnPrimaryIfNecessary_();\r\n            }\r\n            else {\r\n                error('Unknown control packet command: ' + cmd);\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * @param handshake - The handshake data returned from the server\r\n     */\r\n    onHandshake_(handshake) {\r\n        const timestamp = handshake.ts;\r\n        const version = handshake.v;\r\n        const host = handshake.h;\r\n        this.sessionId = handshake.s;\r\n        this.repoInfo_.host = host;\r\n        // if we've already closed the connection, then don't bother trying to progress further\r\n        if (this.state_ === 0 /* CONNECTING */) {\r\n            this.conn_.start();\r\n            this.onConnectionEstablished_(this.conn_, timestamp);\r\n            if (PROTOCOL_VERSION !== version) {\r\n                warn('Protocol version mismatch detected');\r\n            }\r\n            // TODO: do we want to upgrade? when? maybe a delay?\r\n            this.tryStartUpgrade_();\r\n        }\r\n    }\r\n    tryStartUpgrade_() {\r\n        const conn = this.transportManager_.upgradeTransport();\r\n        if (conn) {\r\n            this.startUpgrade_(conn);\r\n        }\r\n    }\r\n    startUpgrade_(conn) {\r\n        this.secondaryConn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, this.sessionId);\r\n        // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n        // can consider the transport healthy.\r\n        this.secondaryResponsesRequired_ =\r\n            conn['responsesRequiredToBeHealthy'] || 0;\r\n        const onMessage = this.connReceiver_(this.secondaryConn_);\r\n        const onDisconnect = this.disconnReceiver_(this.secondaryConn_);\r\n        this.secondaryConn_.open(onMessage, onDisconnect);\r\n        // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.\r\n        setTimeoutNonBlocking(() => {\r\n            if (this.secondaryConn_) {\r\n                this.log_('Timed out trying to upgrade.');\r\n                this.secondaryConn_.close();\r\n            }\r\n        }, Math.floor(UPGRADE_TIMEOUT));\r\n    }\r\n    onReset_(host) {\r\n        this.log_('Reset packet received.  New host: ' + host);\r\n        this.repoInfo_.host = host;\r\n        // TODO: if we're already \"connected\", we need to trigger a disconnect at the next layer up.\r\n        // We don't currently support resets after the connection has already been established\r\n        if (this.state_ === 1 /* CONNECTED */) {\r\n            this.close();\r\n        }\r\n        else {\r\n            // Close whatever connections we have open and start again.\r\n            this.closeConnections_();\r\n            this.start_();\r\n        }\r\n    }\r\n    onConnectionEstablished_(conn, timestamp) {\r\n        this.log_('Realtime connection established.');\r\n        this.conn_ = conn;\r\n        this.state_ = 1 /* CONNECTED */;\r\n        if (this.onReady_) {\r\n            this.onReady_(timestamp, this.sessionId);\r\n            this.onReady_ = null;\r\n        }\r\n        // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,\r\n        // send some pings.\r\n        if (this.primaryResponsesRequired_ === 0) {\r\n            this.log_('Primary connection is healthy.');\r\n            this.isHealthy_ = true;\r\n        }\r\n        else {\r\n            setTimeoutNonBlocking(() => {\r\n                this.sendPingOnPrimaryIfNecessary_();\r\n            }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));\r\n        }\r\n    }\r\n    sendPingOnPrimaryIfNecessary_() {\r\n        // If the connection isn't considered healthy yet, we'll send a noop ping packet request.\r\n        if (!this.isHealthy_ && this.state_ === 1 /* CONNECTED */) {\r\n            this.log_('sending ping on primary.');\r\n            this.sendData_({ t: 'c', d: { t: PING, d: {} } });\r\n        }\r\n    }\r\n    onSecondaryConnectionLost_() {\r\n        const conn = this.secondaryConn_;\r\n        this.secondaryConn_ = null;\r\n        if (this.tx_ === conn || this.rx_ === conn) {\r\n            // we are relying on this connection already in some capacity. Therefore, a failure is real\r\n            this.close();\r\n        }\r\n    }\r\n    /**\r\n     * @param everConnected - Whether or not the connection ever reached a server. Used to determine if\r\n     * we should flush the host cache\r\n     */\r\n    onConnectionLost_(everConnected) {\r\n        this.conn_ = null;\r\n        // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting\r\n        // called on window close and RealtimeState.CONNECTING is no longer defined.  Just a guess.\r\n        if (!everConnected && this.state_ === 0 /* CONNECTING */) {\r\n            this.log_('Realtime connection failed.');\r\n            // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away\r\n            if (this.repoInfo_.isCacheableHost()) {\r\n                PersistentStorage.remove('host:' + this.repoInfo_.host);\r\n                // reset the internal host to what we would show the user, i.e. <ns>.firebaseio.com\r\n                this.repoInfo_.internalHost = this.repoInfo_.host;\r\n            }\r\n        }\r\n        else if (this.state_ === 1 /* CONNECTED */) {\r\n            this.log_('Realtime connection lost.');\r\n        }\r\n        this.close();\r\n    }\r\n    onConnectionShutdown_(reason) {\r\n        this.log_('Connection shutdown command received. Shutting down...');\r\n        if (this.onKill_) {\r\n            this.onKill_(reason);\r\n            this.onKill_ = null;\r\n        }\r\n        // We intentionally don't want to fire onDisconnect (kill is a different case),\r\n        // so clear the callback.\r\n        this.onDisconnect_ = null;\r\n        this.close();\r\n    }\r\n    sendData_(data) {\r\n        if (this.state_ !== 1 /* CONNECTED */) {\r\n            throw 'Connection is not connected';\r\n        }\r\n        else {\r\n            this.tx_.send(data);\r\n        }\r\n    }\r\n    /**\r\n     * Cleans up this connection, calling the appropriate callbacks\r\n     */\r\n    close() {\r\n        if (this.state_ !== 2 /* DISCONNECTED */) {\r\n            this.log_('Closing realtime connection.');\r\n            this.state_ = 2 /* DISCONNECTED */;\r\n            this.closeConnections_();\r\n            if (this.onDisconnect_) {\r\n                this.onDisconnect_();\r\n                this.onDisconnect_ = null;\r\n            }\r\n        }\r\n    }\r\n    closeConnections_() {\r\n        this.log_('Shutting down all connections');\r\n        if (this.conn_) {\r\n            this.conn_.close();\r\n            this.conn_ = null;\r\n        }\r\n        if (this.secondaryConn_) {\r\n            this.secondaryConn_.close();\r\n            this.secondaryConn_ = null;\r\n        }\r\n        if (this.healthyTimeout_) {\r\n            clearTimeout(this.healthyTimeout_);\r\n            this.healthyTimeout_ = null;\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface defining the set of actions that can be performed against the Firebase server\r\n * (basically corresponds to our wire protocol).\r\n *\r\n * @interface\r\n */\r\nclass ServerActions {\r\n    put(pathString, data, onComplete, hash) { }\r\n    merge(pathString, data, onComplete, hash) { }\r\n    /**\r\n     * Refreshes the auth token for the current connection.\r\n     * @param token - The authentication token\r\n     */\r\n    refreshAuthToken(token) { }\r\n    /**\r\n     * Refreshes the app check token for the current connection.\r\n     * @param token The app check token\r\n     */\r\n    refreshAppCheckToken(token) { }\r\n    onDisconnectPut(pathString, data, onComplete) { }\r\n    onDisconnectMerge(pathString, data, onComplete) { }\r\n    onDisconnectCancel(pathString, onComplete) { }\r\n    reportStats(stats) { }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Base class to be used if you want to emit events. Call the constructor with\r\n * the set of allowed event names.\r\n */\r\nclass EventEmitter {\r\n    constructor(allowedEvents_) {\r\n        this.allowedEvents_ = allowedEvents_;\r\n        this.listeners_ = {};\r\n        assert(Array.isArray(allowedEvents_) && allowedEvents_.length > 0, 'Requires a non-empty array');\r\n    }\r\n    /**\r\n     * To be called by derived classes to trigger events.\r\n     */\r\n    trigger(eventType, ...varArgs) {\r\n        if (Array.isArray(this.listeners_[eventType])) {\r\n            // Clone the list, since callbacks could add/remove listeners.\r\n            const listeners = [...this.listeners_[eventType]];\r\n            for (let i = 0; i < listeners.length; i++) {\r\n                listeners[i].callback.apply(listeners[i].context, varArgs);\r\n            }\r\n        }\r\n    }\r\n    on(eventType, callback, context) {\r\n        this.validateEventType_(eventType);\r\n        this.listeners_[eventType] = this.listeners_[eventType] || [];\r\n        this.listeners_[eventType].push({ callback, context });\r\n        const eventData = this.getInitialEvent(eventType);\r\n        if (eventData) {\r\n            callback.apply(context, eventData);\r\n        }\r\n    }\r\n    off(eventType, callback, context) {\r\n        this.validateEventType_(eventType);\r\n        const listeners = this.listeners_[eventType] || [];\r\n        for (let i = 0; i < listeners.length; i++) {\r\n            if (listeners[i].callback === callback &&\r\n                (!context || context === listeners[i].context)) {\r\n                listeners.splice(i, 1);\r\n                return;\r\n            }\r\n        }\r\n    }\r\n    validateEventType_(eventType) {\r\n        assert(this.allowedEvents_.find(et => {\r\n            return et === eventType;\r\n        }), 'Unknown event: ' + eventType);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Monitors online state (as reported by window.online/offline events).\r\n *\r\n * The expectation is that this could have many false positives (thinks we are online\r\n * when we're not), but no false negatives.  So we can safely use it to determine when\r\n * we definitely cannot reach the internet.\r\n */\r\nclass OnlineMonitor extends EventEmitter {\r\n    constructor() {\r\n        super(['online']);\r\n        this.online_ = true;\r\n        // We've had repeated complaints that Cordova apps can get stuck \"offline\", e.g.\r\n        // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810\r\n        // It would seem that the 'online' event does not always fire consistently. So we disable it\r\n        // for Cordova.\r\n        if (typeof window !== 'undefined' &&\r\n            typeof window.addEventListener !== 'undefined' &&\r\n            !isMobileCordova()) {\r\n            window.addEventListener('online', () => {\r\n                if (!this.online_) {\r\n                    this.online_ = true;\r\n                    this.trigger('online', true);\r\n                }\r\n            }, false);\r\n            window.addEventListener('offline', () => {\r\n                if (this.online_) {\r\n                    this.online_ = false;\r\n                    this.trigger('online', false);\r\n                }\r\n            }, false);\r\n        }\r\n    }\r\n    static getInstance() {\r\n        return new OnlineMonitor();\r\n    }\r\n    getInitialEvent(eventType) {\r\n        assert(eventType === 'online', 'Unknown event type: ' + eventType);\r\n        return [this.online_];\r\n    }\r\n    currentlyOnline() {\r\n        return this.online_;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Maximum key depth. */\r\nconst MAX_PATH_DEPTH = 32;\r\n/** Maximum number of (UTF8) bytes in a Firebase path. */\r\nconst MAX_PATH_LENGTH_BYTES = 768;\r\n/**\r\n * An immutable object representing a parsed path.  It's immutable so that you\r\n * can pass them around to other functions without worrying about them changing\r\n * it.\r\n */\r\nclass Path {\r\n    /**\r\n     * @param pathOrString - Path string to parse, or another path, or the raw\r\n     * tokens array\r\n     */\r\n    constructor(pathOrString, pieceNum) {\r\n        if (pieceNum === void 0) {\r\n            this.pieces_ = pathOrString.split('/');\r\n            // Remove empty pieces.\r\n            let copyTo = 0;\r\n            for (let i = 0; i < this.pieces_.length; i++) {\r\n                if (this.pieces_[i].length > 0) {\r\n                    this.pieces_[copyTo] = this.pieces_[i];\r\n                    copyTo++;\r\n                }\r\n            }\r\n            this.pieces_.length = copyTo;\r\n            this.pieceNum_ = 0;\r\n        }\r\n        else {\r\n            this.pieces_ = pathOrString;\r\n            this.pieceNum_ = pieceNum;\r\n        }\r\n    }\r\n    toString() {\r\n        let pathString = '';\r\n        for (let i = this.pieceNum_; i < this.pieces_.length; i++) {\r\n            if (this.pieces_[i] !== '') {\r\n                pathString += '/' + this.pieces_[i];\r\n            }\r\n        }\r\n        return pathString || '/';\r\n    }\r\n}\r\nfunction newEmptyPath() {\r\n    return new Path('');\r\n}\r\nfunction pathGetFront(path) {\r\n    if (path.pieceNum_ >= path.pieces_.length) {\r\n        return null;\r\n    }\r\n    return path.pieces_[path.pieceNum_];\r\n}\r\n/**\r\n * @returns The number of segments in this path\r\n */\r\nfunction pathGetLength(path) {\r\n    return path.pieces_.length - path.pieceNum_;\r\n}\r\nfunction pathPopFront(path) {\r\n    let pieceNum = path.pieceNum_;\r\n    if (pieceNum < path.pieces_.length) {\r\n        pieceNum++;\r\n    }\r\n    return new Path(path.pieces_, pieceNum);\r\n}\r\nfunction pathGetBack(path) {\r\n    if (path.pieceNum_ < path.pieces_.length) {\r\n        return path.pieces_[path.pieces_.length - 1];\r\n    }\r\n    return null;\r\n}\r\nfunction pathToUrlEncodedString(path) {\r\n    let pathString = '';\r\n    for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\r\n        if (path.pieces_[i] !== '') {\r\n            pathString += '/' + encodeURIComponent(String(path.pieces_[i]));\r\n        }\r\n    }\r\n    return pathString || '/';\r\n}\r\n/**\r\n * Shallow copy of the parts of the path.\r\n *\r\n */\r\nfunction pathSlice(path, begin = 0) {\r\n    return path.pieces_.slice(path.pieceNum_ + begin);\r\n}\r\nfunction pathParent(path) {\r\n    if (path.pieceNum_ >= path.pieces_.length) {\r\n        return null;\r\n    }\r\n    const pieces = [];\r\n    for (let i = path.pieceNum_; i < path.pieces_.length - 1; i++) {\r\n        pieces.push(path.pieces_[i]);\r\n    }\r\n    return new Path(pieces, 0);\r\n}\r\nfunction pathChild(path, childPathObj) {\r\n    const pieces = [];\r\n    for (let i = path.pieceNum_; i < path.pieces_.length; i++) {\r\n        pieces.push(path.pieces_[i]);\r\n    }\r\n    if (childPathObj instanceof Path) {\r\n        for (let i = childPathObj.pieceNum_; i < childPathObj.pieces_.length; i++) {\r\n            pieces.push(childPathObj.pieces_[i]);\r\n        }\r\n    }\r\n    else {\r\n        const childPieces = childPathObj.split('/');\r\n        for (let i = 0; i < childPieces.length; i++) {\r\n            if (childPieces[i].length > 0) {\r\n                pieces.push(childPieces[i]);\r\n            }\r\n        }\r\n    }\r\n    return new Path(pieces, 0);\r\n}\r\n/**\r\n * @returns True if there are no segments in this path\r\n */\r\nfunction pathIsEmpty(path) {\r\n    return path.pieceNum_ >= path.pieces_.length;\r\n}\r\n/**\r\n * @returns The path from outerPath to innerPath\r\n */\r\nfunction newRelativePath(outerPath, innerPath) {\r\n    const outer = pathGetFront(outerPath), inner = pathGetFront(innerPath);\r\n    if (outer === null) {\r\n        return innerPath;\r\n    }\r\n    else if (outer === inner) {\r\n        return newRelativePath(pathPopFront(outerPath), pathPopFront(innerPath));\r\n    }\r\n    else {\r\n        throw new Error('INTERNAL ERROR: innerPath (' +\r\n            innerPath +\r\n            ') is not within ' +\r\n            'outerPath (' +\r\n            outerPath +\r\n            ')');\r\n    }\r\n}\r\n/**\r\n * @returns -1, 0, 1 if left is less, equal, or greater than the right.\r\n */\r\nfunction pathCompare(left, right) {\r\n    const leftKeys = pathSlice(left, 0);\r\n    const rightKeys = pathSlice(right, 0);\r\n    for (let i = 0; i < leftKeys.length && i < rightKeys.length; i++) {\r\n        const cmp = nameCompare(leftKeys[i], rightKeys[i]);\r\n        if (cmp !== 0) {\r\n            return cmp;\r\n        }\r\n    }\r\n    if (leftKeys.length === rightKeys.length) {\r\n        return 0;\r\n    }\r\n    return leftKeys.length < rightKeys.length ? -1 : 1;\r\n}\r\n/**\r\n * @returns true if paths are the same.\r\n */\r\nfunction pathEquals(path, other) {\r\n    if (pathGetLength(path) !== pathGetLength(other)) {\r\n        return false;\r\n    }\r\n    for (let i = path.pieceNum_, j = other.pieceNum_; i <= path.pieces_.length; i++, j++) {\r\n        if (path.pieces_[i] !== other.pieces_[j]) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\n/**\r\n * @returns True if this path is a parent of (or the same as) other\r\n */\r\nfunction pathContains(path, other) {\r\n    let i = path.pieceNum_;\r\n    let j = other.pieceNum_;\r\n    if (pathGetLength(path) > pathGetLength(other)) {\r\n        return false;\r\n    }\r\n    while (i < path.pieces_.length) {\r\n        if (path.pieces_[i] !== other.pieces_[j]) {\r\n            return false;\r\n        }\r\n        ++i;\r\n        ++j;\r\n    }\r\n    return true;\r\n}\r\n/**\r\n * Dynamic (mutable) path used to count path lengths.\r\n *\r\n * This class is used to efficiently check paths for valid\r\n * length (in UTF8 bytes) and depth (used in path validation).\r\n *\r\n * Throws Error exception if path is ever invalid.\r\n *\r\n * The definition of a path always begins with '/'.\r\n */\r\nclass ValidationPath {\r\n    /**\r\n     * @param path - Initial Path.\r\n     * @param errorPrefix_ - Prefix for any error messages.\r\n     */\r\n    constructor(path, errorPrefix_) {\r\n        this.errorPrefix_ = errorPrefix_;\r\n        this.parts_ = pathSlice(path, 0);\r\n        /** Initialize to number of '/' chars needed in path. */\r\n        this.byteLength_ = Math.max(1, this.parts_.length);\r\n        for (let i = 0; i < this.parts_.length; i++) {\r\n            this.byteLength_ += stringLength(this.parts_[i]);\r\n        }\r\n        validationPathCheckValid(this);\r\n    }\r\n}\r\nfunction validationPathPush(validationPath, child) {\r\n    // Count the needed '/'\r\n    if (validationPath.parts_.length > 0) {\r\n        validationPath.byteLength_ += 1;\r\n    }\r\n    validationPath.parts_.push(child);\r\n    validationPath.byteLength_ += stringLength(child);\r\n    validationPathCheckValid(validationPath);\r\n}\r\nfunction validationPathPop(validationPath) {\r\n    const last = validationPath.parts_.pop();\r\n    validationPath.byteLength_ -= stringLength(last);\r\n    // Un-count the previous '/'\r\n    if (validationPath.parts_.length > 0) {\r\n        validationPath.byteLength_ -= 1;\r\n    }\r\n}\r\nfunction validationPathCheckValid(validationPath) {\r\n    if (validationPath.byteLength_ > MAX_PATH_LENGTH_BYTES) {\r\n        throw new Error(validationPath.errorPrefix_ +\r\n            'has a key path longer than ' +\r\n            MAX_PATH_LENGTH_BYTES +\r\n            ' bytes (' +\r\n            validationPath.byteLength_ +\r\n            ').');\r\n    }\r\n    if (validationPath.parts_.length > MAX_PATH_DEPTH) {\r\n        throw new Error(validationPath.errorPrefix_ +\r\n            'path specified exceeds the maximum depth that can be written (' +\r\n            MAX_PATH_DEPTH +\r\n            ') or object contains a cycle ' +\r\n            validationPathToErrorString(validationPath));\r\n    }\r\n}\r\n/**\r\n * String for use in error messages - uses '.' notation for path.\r\n */\r\nfunction validationPathToErrorString(validationPath) {\r\n    if (validationPath.parts_.length === 0) {\r\n        return '';\r\n    }\r\n    return \"in property '\" + validationPath.parts_.join('.') + \"'\";\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass VisibilityMonitor extends EventEmitter {\r\n    constructor() {\r\n        super(['visible']);\r\n        let hidden;\r\n        let visibilityChange;\r\n        if (typeof document !== 'undefined' &&\r\n            typeof document.addEventListener !== 'undefined') {\r\n            if (typeof document['hidden'] !== 'undefined') {\r\n                // Opera 12.10 and Firefox 18 and later support\r\n                visibilityChange = 'visibilitychange';\r\n                hidden = 'hidden';\r\n            }\r\n            else if (typeof document['mozHidden'] !== 'undefined') {\r\n                visibilityChange = 'mozvisibilitychange';\r\n                hidden = 'mozHidden';\r\n            }\r\n            else if (typeof document['msHidden'] !== 'undefined') {\r\n                visibilityChange = 'msvisibilitychange';\r\n                hidden = 'msHidden';\r\n            }\r\n            else if (typeof document['webkitHidden'] !== 'undefined') {\r\n                visibilityChange = 'webkitvisibilitychange';\r\n                hidden = 'webkitHidden';\r\n            }\r\n        }\r\n        // Initially, we always assume we are visible. This ensures that in browsers\r\n        // without page visibility support or in cases where we are never visible\r\n        // (e.g. chrome extension), we act as if we are visible, i.e. don't delay\r\n        // reconnects\r\n        this.visible_ = true;\r\n        if (visibilityChange) {\r\n            document.addEventListener(visibilityChange, () => {\r\n                const visible = !document[hidden];\r\n                if (visible !== this.visible_) {\r\n                    this.visible_ = visible;\r\n                    this.trigger('visible', visible);\r\n                }\r\n            }, false);\r\n        }\r\n    }\r\n    static getInstance() {\r\n        return new VisibilityMonitor();\r\n    }\r\n    getInitialEvent(eventType) {\r\n        assert(eventType === 'visible', 'Unknown event type: ' + eventType);\r\n        return [this.visible_];\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst RECONNECT_MIN_DELAY = 1000;\r\nconst RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)\r\nconst RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)\r\nconst RECONNECT_DELAY_MULTIPLIER = 1.3;\r\nconst RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.\r\nconst SERVER_KILL_INTERRUPT_REASON = 'server_kill';\r\n// If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.\r\nconst INVALID_TOKEN_THRESHOLD = 3;\r\n/**\r\n * Firebase connection.  Abstracts wire protocol and handles reconnecting.\r\n *\r\n * NOTE: All JSON objects sent to the realtime connection must have property names enclosed\r\n * in quotes to make sure the closure compiler does not minify them.\r\n */\r\nclass PersistentConnection extends ServerActions {\r\n    /**\r\n     * @param repoInfo_ - Data about the namespace we are connecting to\r\n     * @param applicationId_ - The Firebase App ID for this project\r\n     * @param onDataUpdate_ - A callback for new data from the server\r\n     */\r\n    constructor(repoInfo_, applicationId_, onDataUpdate_, onConnectStatus_, onServerInfoUpdate_, authTokenProvider_, appCheckTokenProvider_, authOverride_) {\r\n        super();\r\n        this.repoInfo_ = repoInfo_;\r\n        this.applicationId_ = applicationId_;\r\n        this.onDataUpdate_ = onDataUpdate_;\r\n        this.onConnectStatus_ = onConnectStatus_;\r\n        this.onServerInfoUpdate_ = onServerInfoUpdate_;\r\n        this.authTokenProvider_ = authTokenProvider_;\r\n        this.appCheckTokenProvider_ = appCheckTokenProvider_;\r\n        this.authOverride_ = authOverride_;\r\n        // Used for diagnostic logging.\r\n        this.id = PersistentConnection.nextPersistentConnectionId_++;\r\n        this.log_ = logWrapper('p:' + this.id + ':');\r\n        this.interruptReasons_ = {};\r\n        this.listens = new Map();\r\n        this.outstandingPuts_ = [];\r\n        this.outstandingGets_ = [];\r\n        this.outstandingPutCount_ = 0;\r\n        this.outstandingGetCount_ = 0;\r\n        this.onDisconnectRequestQueue_ = [];\r\n        this.connected_ = false;\r\n        this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n        this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;\r\n        this.securityDebugCallback_ = null;\r\n        this.lastSessionId = null;\r\n        this.establishConnectionTimer_ = null;\r\n        this.visible_ = false;\r\n        // Before we get connected, we keep a queue of pending messages to send.\r\n        this.requestCBHash_ = {};\r\n        this.requestNumber_ = 0;\r\n        this.realtime_ = null;\r\n        this.authToken_ = null;\r\n        this.appCheckToken_ = null;\r\n        this.forceTokenRefresh_ = false;\r\n        this.invalidAuthTokenCount_ = 0;\r\n        this.invalidAppCheckTokenCount_ = 0;\r\n        this.firstConnection_ = true;\r\n        this.lastConnectionAttemptTime_ = null;\r\n        this.lastConnectionEstablishedTime_ = null;\r\n        if (authOverride_ && !isNodeSdk()) {\r\n            throw new Error('Auth override specified in options, but not supported on non Node.js platforms');\r\n        }\r\n        VisibilityMonitor.getInstance().on('visible', this.onVisible_, this);\r\n        if (repoInfo_.host.indexOf('fblocal') === -1) {\r\n            OnlineMonitor.getInstance().on('online', this.onOnline_, this);\r\n        }\r\n    }\r\n    sendRequest(action, body, onResponse) {\r\n        const curReqNum = ++this.requestNumber_;\r\n        const msg = { r: curReqNum, a: action, b: body };\r\n        this.log_(stringify(msg));\r\n        assert(this.connected_, \"sendRequest call when we're not connected not allowed.\");\r\n        this.realtime_.sendRequest(msg);\r\n        if (onResponse) {\r\n            this.requestCBHash_[curReqNum] = onResponse;\r\n        }\r\n    }\r\n    get(query) {\r\n        this.initConnection_();\r\n        const deferred = new Deferred();\r\n        const request = {\r\n            p: query._path.toString(),\r\n            q: query._queryObject\r\n        };\r\n        const outstandingGet = {\r\n            action: 'g',\r\n            request,\r\n            onComplete: (message) => {\r\n                const payload = message['d'];\r\n                if (message['s'] === 'ok') {\r\n                    deferred.resolve(payload);\r\n                }\r\n                else {\r\n                    deferred.reject(payload);\r\n                }\r\n            }\r\n        };\r\n        this.outstandingGets_.push(outstandingGet);\r\n        this.outstandingGetCount_++;\r\n        const index = this.outstandingGets_.length - 1;\r\n        if (this.connected_) {\r\n            this.sendGet_(index);\r\n        }\r\n        return deferred.promise;\r\n    }\r\n    listen(query, currentHashFn, tag, onComplete) {\r\n        this.initConnection_();\r\n        const queryId = query._queryIdentifier;\r\n        const pathString = query._path.toString();\r\n        this.log_('Listen called for ' + pathString + ' ' + queryId);\r\n        if (!this.listens.has(pathString)) {\r\n            this.listens.set(pathString, new Map());\r\n        }\r\n        assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'listen() called for non-default but complete query');\r\n        assert(!this.listens.get(pathString).has(queryId), `listen() called twice for same path/queryId.`);\r\n        const listenSpec = {\r\n            onComplete,\r\n            hashFn: currentHashFn,\r\n            query,\r\n            tag\r\n        };\r\n        this.listens.get(pathString).set(queryId, listenSpec);\r\n        if (this.connected_) {\r\n            this.sendListen_(listenSpec);\r\n        }\r\n    }\r\n    sendGet_(index) {\r\n        const get = this.outstandingGets_[index];\r\n        this.sendRequest('g', get.request, (message) => {\r\n            delete this.outstandingGets_[index];\r\n            this.outstandingGetCount_--;\r\n            if (this.outstandingGetCount_ === 0) {\r\n                this.outstandingGets_ = [];\r\n            }\r\n            if (get.onComplete) {\r\n                get.onComplete(message);\r\n            }\r\n        });\r\n    }\r\n    sendListen_(listenSpec) {\r\n        const query = listenSpec.query;\r\n        const pathString = query._path.toString();\r\n        const queryId = query._queryIdentifier;\r\n        this.log_('Listen on ' + pathString + ' for ' + queryId);\r\n        const req = { /*path*/ p: pathString };\r\n        const action = 'q';\r\n        // Only bother to send query if it's non-default.\r\n        if (listenSpec.tag) {\r\n            req['q'] = query._queryObject;\r\n            req['t'] = listenSpec.tag;\r\n        }\r\n        req[ /*hash*/'h'] = listenSpec.hashFn();\r\n        this.sendRequest(action, req, (message) => {\r\n            const payload = message[ /*data*/'d'];\r\n            const status = message[ /*status*/'s'];\r\n            // print warnings in any case...\r\n            PersistentConnection.warnOnListenWarnings_(payload, query);\r\n            const currentListenSpec = this.listens.get(pathString) &&\r\n                this.listens.get(pathString).get(queryId);\r\n            // only trigger actions if the listen hasn't been removed and readded\r\n            if (currentListenSpec === listenSpec) {\r\n                this.log_('listen response', message);\r\n                if (status !== 'ok') {\r\n                    this.removeListen_(pathString, queryId);\r\n                }\r\n                if (listenSpec.onComplete) {\r\n                    listenSpec.onComplete(status, payload);\r\n                }\r\n            }\r\n        });\r\n    }\r\n    static warnOnListenWarnings_(payload, query) {\r\n        if (payload && typeof payload === 'object' && contains(payload, 'w')) {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            const warnings = safeGet(payload, 'w');\r\n            if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {\r\n                const indexSpec = '\".indexOn\": \"' + query._queryParams.getIndex().toString() + '\"';\r\n                const indexPath = query._path.toString();\r\n                warn(`Using an unspecified index. Your data will be downloaded and ` +\r\n                    `filtered on the client. Consider adding ${indexSpec} at ` +\r\n                    `${indexPath} to your security rules for better performance.`);\r\n            }\r\n        }\r\n    }\r\n    refreshAuthToken(token) {\r\n        this.authToken_ = token;\r\n        this.log_('Auth token refreshed');\r\n        if (this.authToken_) {\r\n            this.tryAuth();\r\n        }\r\n        else {\r\n            //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete\r\n            //the credential so we dont become authenticated next time we connect.\r\n            if (this.connected_) {\r\n                this.sendRequest('unauth', {}, () => { });\r\n            }\r\n        }\r\n        this.reduceReconnectDelayIfAdminCredential_(token);\r\n    }\r\n    reduceReconnectDelayIfAdminCredential_(credential) {\r\n        // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).\r\n        // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.\r\n        const isFirebaseSecret = credential && credential.length === 40;\r\n        if (isFirebaseSecret || isAdmin(credential)) {\r\n            this.log_('Admin auth credential detected.  Reducing max reconnect time.');\r\n            this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n        }\r\n    }\r\n    refreshAppCheckToken(token) {\r\n        this.appCheckToken_ = token;\r\n        this.log_('App check token refreshed');\r\n        if (this.appCheckToken_) {\r\n            this.tryAppCheck();\r\n        }\r\n        else {\r\n            //If we're connected we want to let the server know to unauthenticate us.\r\n            //If we're not connected, simply delete the credential so we dont become\r\n            // authenticated next time we connect.\r\n            if (this.connected_) {\r\n                this.sendRequest('unappeck', {}, () => { });\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like\r\n     * a auth revoked (the connection is closed).\r\n     */\r\n    tryAuth() {\r\n        if (this.connected_ && this.authToken_) {\r\n            const token = this.authToken_;\r\n            const authMethod = isValidFormat(token) ? 'auth' : 'gauth';\r\n            const requestData = { cred: token };\r\n            if (this.authOverride_ === null) {\r\n                requestData['noauth'] = true;\r\n            }\r\n            else if (typeof this.authOverride_ === 'object') {\r\n                requestData['authvar'] = this.authOverride_;\r\n            }\r\n            this.sendRequest(authMethod, requestData, (res) => {\r\n                const status = res[ /*status*/'s'];\r\n                const data = res[ /*data*/'d'] || 'error';\r\n                if (this.authToken_ === token) {\r\n                    if (status === 'ok') {\r\n                        this.invalidAuthTokenCount_ = 0;\r\n                    }\r\n                    else {\r\n                        // Triggers reconnect and force refresh for auth token\r\n                        this.onAuthRevoked_(status, data);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n    }\r\n    /**\r\n     * Attempts to authenticate with the given token. If the authentication\r\n     * attempt fails, it's triggered like the token was revoked (the connection is\r\n     * closed).\r\n     */\r\n    tryAppCheck() {\r\n        if (this.connected_ && this.appCheckToken_) {\r\n            this.sendRequest('appcheck', { 'token': this.appCheckToken_ }, (res) => {\r\n                const status = res[ /*status*/'s'];\r\n                const data = res[ /*data*/'d'] || 'error';\r\n                if (status === 'ok') {\r\n                    this.invalidAppCheckTokenCount_ = 0;\r\n                }\r\n                else {\r\n                    this.onAppCheckRevoked_(status, data);\r\n                }\r\n            });\r\n        }\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    unlisten(query, tag) {\r\n        const pathString = query._path.toString();\r\n        const queryId = query._queryIdentifier;\r\n        this.log_('Unlisten called for ' + pathString + ' ' + queryId);\r\n        assert(query._queryParams.isDefault() || !query._queryParams.loadsAllData(), 'unlisten() called for non-default but complete query');\r\n        const listen = this.removeListen_(pathString, queryId);\r\n        if (listen && this.connected_) {\r\n            this.sendUnlisten_(pathString, queryId, query._queryObject, tag);\r\n        }\r\n    }\r\n    sendUnlisten_(pathString, queryId, queryObj, tag) {\r\n        this.log_('Unlisten on ' + pathString + ' for ' + queryId);\r\n        const req = { /*path*/ p: pathString };\r\n        const action = 'n';\r\n        // Only bother sending queryId if it's non-default.\r\n        if (tag) {\r\n            req['q'] = queryObj;\r\n            req['t'] = tag;\r\n        }\r\n        this.sendRequest(action, req);\r\n    }\r\n    onDisconnectPut(pathString, data, onComplete) {\r\n        this.initConnection_();\r\n        if (this.connected_) {\r\n            this.sendOnDisconnect_('o', pathString, data, onComplete);\r\n        }\r\n        else {\r\n            this.onDisconnectRequestQueue_.push({\r\n                pathString,\r\n                action: 'o',\r\n                data,\r\n                onComplete\r\n            });\r\n        }\r\n    }\r\n    onDisconnectMerge(pathString, data, onComplete) {\r\n        this.initConnection_();\r\n        if (this.connected_) {\r\n            this.sendOnDisconnect_('om', pathString, data, onComplete);\r\n        }\r\n        else {\r\n            this.onDisconnectRequestQueue_.push({\r\n                pathString,\r\n                action: 'om',\r\n                data,\r\n                onComplete\r\n            });\r\n        }\r\n    }\r\n    onDisconnectCancel(pathString, onComplete) {\r\n        this.initConnection_();\r\n        if (this.connected_) {\r\n            this.sendOnDisconnect_('oc', pathString, null, onComplete);\r\n        }\r\n        else {\r\n            this.onDisconnectRequestQueue_.push({\r\n                pathString,\r\n                action: 'oc',\r\n                data: null,\r\n                onComplete\r\n            });\r\n        }\r\n    }\r\n    sendOnDisconnect_(action, pathString, data, onComplete) {\r\n        const request = { /*path*/ p: pathString, /*data*/ d: data };\r\n        this.log_('onDisconnect ' + action, request);\r\n        this.sendRequest(action, request, (response) => {\r\n            if (onComplete) {\r\n                setTimeout(() => {\r\n                    onComplete(response[ /*status*/'s'], response[ /* data */'d']);\r\n                }, Math.floor(0));\r\n            }\r\n        });\r\n    }\r\n    put(pathString, data, onComplete, hash) {\r\n        this.putInternal('p', pathString, data, onComplete, hash);\r\n    }\r\n    merge(pathString, data, onComplete, hash) {\r\n        this.putInternal('m', pathString, data, onComplete, hash);\r\n    }\r\n    putInternal(action, pathString, data, onComplete, hash) {\r\n        this.initConnection_();\r\n        const request = {\r\n            /*path*/ p: pathString,\r\n            /*data*/ d: data\r\n        };\r\n        if (hash !== undefined) {\r\n            request[ /*hash*/'h'] = hash;\r\n        }\r\n        // TODO: Only keep track of the most recent put for a given path?\r\n        this.outstandingPuts_.push({\r\n            action,\r\n            request,\r\n            onComplete\r\n        });\r\n        this.outstandingPutCount_++;\r\n        const index = this.outstandingPuts_.length - 1;\r\n        if (this.connected_) {\r\n            this.sendPut_(index);\r\n        }\r\n        else {\r\n            this.log_('Buffering put: ' + pathString);\r\n        }\r\n    }\r\n    sendPut_(index) {\r\n        const action = this.outstandingPuts_[index].action;\r\n        const request = this.outstandingPuts_[index].request;\r\n        const onComplete = this.outstandingPuts_[index].onComplete;\r\n        this.outstandingPuts_[index].queued = this.connected_;\r\n        this.sendRequest(action, request, (message) => {\r\n            this.log_(action + ' response', message);\r\n            delete this.outstandingPuts_[index];\r\n            this.outstandingPutCount_--;\r\n            // Clean up array occasionally.\r\n            if (this.outstandingPutCount_ === 0) {\r\n                this.outstandingPuts_ = [];\r\n            }\r\n            if (onComplete) {\r\n                onComplete(message[ /*status*/'s'], message[ /* data */'d']);\r\n            }\r\n        });\r\n    }\r\n    reportStats(stats) {\r\n        // If we're not connected, we just drop the stats.\r\n        if (this.connected_) {\r\n            const request = { /*counters*/ c: stats };\r\n            this.log_('reportStats', request);\r\n            this.sendRequest(/*stats*/ 's', request, result => {\r\n                const status = result[ /*status*/'s'];\r\n                if (status !== 'ok') {\r\n                    const errorReason = result[ /* data */'d'];\r\n                    this.log_('reportStats', 'Error sending stats: ' + errorReason);\r\n                }\r\n            });\r\n        }\r\n    }\r\n    onDataMessage_(message) {\r\n        if ('r' in message) {\r\n            // this is a response\r\n            this.log_('from server: ' + stringify(message));\r\n            const reqNum = message['r'];\r\n            const onResponse = this.requestCBHash_[reqNum];\r\n            if (onResponse) {\r\n                delete this.requestCBHash_[reqNum];\r\n                onResponse(message[ /*body*/'b']);\r\n            }\r\n        }\r\n        else if ('error' in message) {\r\n            throw 'A server-side error has occurred: ' + message['error'];\r\n        }\r\n        else if ('a' in message) {\r\n            // a and b are action and body, respectively\r\n            this.onDataPush_(message['a'], message['b']);\r\n        }\r\n    }\r\n    onDataPush_(action, body) {\r\n        this.log_('handleServerMessage', action, body);\r\n        if (action === 'd') {\r\n            this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n            /*isMerge*/ false, body['t']);\r\n        }\r\n        else if (action === 'm') {\r\n            this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n            /*isMerge=*/ true, body['t']);\r\n        }\r\n        else if (action === 'c') {\r\n            this.onListenRevoked_(body[ /*path*/'p'], body[ /*query*/'q']);\r\n        }\r\n        else if (action === 'ac') {\r\n            this.onAuthRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n        }\r\n        else if (action === 'apc') {\r\n            this.onAppCheckRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n        }\r\n        else if (action === 'sd') {\r\n            this.onSecurityDebugPacket_(body);\r\n        }\r\n        else {\r\n            error('Unrecognized action received from server: ' +\r\n                stringify(action) +\r\n                '\\nAre you using the latest client?');\r\n        }\r\n    }\r\n    onReady_(timestamp, sessionId) {\r\n        this.log_('connection ready');\r\n        this.connected_ = true;\r\n        this.lastConnectionEstablishedTime_ = new Date().getTime();\r\n        this.handleTimestamp_(timestamp);\r\n        this.lastSessionId = sessionId;\r\n        if (this.firstConnection_) {\r\n            this.sendConnectStats_();\r\n        }\r\n        this.restoreState_();\r\n        this.firstConnection_ = false;\r\n        this.onConnectStatus_(true);\r\n    }\r\n    scheduleConnect_(timeout) {\r\n        assert(!this.realtime_, \"Scheduling a connect when we're already connected/ing?\");\r\n        if (this.establishConnectionTimer_) {\r\n            clearTimeout(this.establishConnectionTimer_);\r\n        }\r\n        // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating \"Security Error\" in\r\n        // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).\r\n        this.establishConnectionTimer_ = setTimeout(() => {\r\n            this.establishConnectionTimer_ = null;\r\n            this.establishConnection_();\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        }, Math.floor(timeout));\r\n    }\r\n    initConnection_() {\r\n        if (!this.realtime_ && this.firstConnection_) {\r\n            this.scheduleConnect_(0);\r\n        }\r\n    }\r\n    onVisible_(visible) {\r\n        // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.\r\n        if (visible &&\r\n            !this.visible_ &&\r\n            this.reconnectDelay_ === this.maxReconnectDelay_) {\r\n            this.log_('Window became visible.  Reducing delay.');\r\n            this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n            if (!this.realtime_) {\r\n                this.scheduleConnect_(0);\r\n            }\r\n        }\r\n        this.visible_ = visible;\r\n    }\r\n    onOnline_(online) {\r\n        if (online) {\r\n            this.log_('Browser went online.');\r\n            this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n            if (!this.realtime_) {\r\n                this.scheduleConnect_(0);\r\n            }\r\n        }\r\n        else {\r\n            this.log_('Browser went offline.  Killing connection.');\r\n            if (this.realtime_) {\r\n                this.realtime_.close();\r\n            }\r\n        }\r\n    }\r\n    onRealtimeDisconnect_() {\r\n        this.log_('data client disconnected');\r\n        this.connected_ = false;\r\n        this.realtime_ = null;\r\n        // Since we don't know if our sent transactions succeeded or not, we need to cancel them.\r\n        this.cancelSentTransactions_();\r\n        // Clear out the pending requests.\r\n        this.requestCBHash_ = {};\r\n        if (this.shouldReconnect_()) {\r\n            if (!this.visible_) {\r\n                this.log_(\"Window isn't visible.  Delaying reconnect.\");\r\n                this.reconnectDelay_ = this.maxReconnectDelay_;\r\n                this.lastConnectionAttemptTime_ = new Date().getTime();\r\n            }\r\n            else if (this.lastConnectionEstablishedTime_) {\r\n                // If we've been connected long enough, reset reconnect delay to minimum.\r\n                const timeSinceLastConnectSucceeded = new Date().getTime() - this.lastConnectionEstablishedTime_;\r\n                if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT) {\r\n                    this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n                }\r\n                this.lastConnectionEstablishedTime_ = null;\r\n            }\r\n            const timeSinceLastConnectAttempt = new Date().getTime() - this.lastConnectionAttemptTime_;\r\n            let reconnectDelay = Math.max(0, this.reconnectDelay_ - timeSinceLastConnectAttempt);\r\n            reconnectDelay = Math.random() * reconnectDelay;\r\n            this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');\r\n            this.scheduleConnect_(reconnectDelay);\r\n            // Adjust reconnect delay for next time.\r\n            this.reconnectDelay_ = Math.min(this.maxReconnectDelay_, this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER);\r\n        }\r\n        this.onConnectStatus_(false);\r\n    }\r\n    async establishConnection_() {\r\n        if (this.shouldReconnect_()) {\r\n            this.log_('Making a connection attempt');\r\n            this.lastConnectionAttemptTime_ = new Date().getTime();\r\n            this.lastConnectionEstablishedTime_ = null;\r\n            const onDataMessage = this.onDataMessage_.bind(this);\r\n            const onReady = this.onReady_.bind(this);\r\n            const onDisconnect = this.onRealtimeDisconnect_.bind(this);\r\n            const connId = this.id + ':' + PersistentConnection.nextConnectionId_++;\r\n            const lastSessionId = this.lastSessionId;\r\n            let canceled = false;\r\n            let connection = null;\r\n            const closeFn = function () {\r\n                if (connection) {\r\n                    connection.close();\r\n                }\r\n                else {\r\n                    canceled = true;\r\n                    onDisconnect();\r\n                }\r\n            };\r\n            const sendRequestFn = function (msg) {\r\n                assert(connection, \"sendRequest call when we're not connected not allowed.\");\r\n                connection.sendRequest(msg);\r\n            };\r\n            this.realtime_ = {\r\n                close: closeFn,\r\n                sendRequest: sendRequestFn\r\n            };\r\n            const forceRefresh = this.forceTokenRefresh_;\r\n            this.forceTokenRefresh_ = false;\r\n            try {\r\n                // First fetch auth and app check token, and establish connection after\r\n                // fetching the token was successful\r\n                const [authToken, appCheckToken] = await Promise.all([\r\n                    this.authTokenProvider_.getToken(forceRefresh),\r\n                    this.appCheckTokenProvider_.getToken(forceRefresh)\r\n                ]);\r\n                if (!canceled) {\r\n                    log('getToken() completed. Creating connection.');\r\n                    this.authToken_ = authToken && authToken.accessToken;\r\n                    this.appCheckToken_ = appCheckToken && appCheckToken.token;\r\n                    connection = new Connection(connId, this.repoInfo_, this.applicationId_, this.appCheckToken_, this.authToken_, onDataMessage, onReady, onDisconnect, \r\n                    /* onKill= */ reason => {\r\n                        warn(reason + ' (' + this.repoInfo_.toString() + ')');\r\n                        this.interrupt(SERVER_KILL_INTERRUPT_REASON);\r\n                    }, lastSessionId);\r\n                }\r\n                else {\r\n                    log('getToken() completed but was canceled');\r\n                }\r\n            }\r\n            catch (error) {\r\n                this.log_('Failed to get token: ' + error);\r\n                if (!canceled) {\r\n                    if (this.repoInfo_.nodeAdmin) {\r\n                        // This may be a critical error for the Admin Node.js SDK, so log a warning.\r\n                        // But getToken() may also just have temporarily failed, so we still want to\r\n                        // continue retrying.\r\n                        warn(error);\r\n                    }\r\n                    closeFn();\r\n                }\r\n            }\r\n        }\r\n    }\r\n    interrupt(reason) {\r\n        log('Interrupting connection for reason: ' + reason);\r\n        this.interruptReasons_[reason] = true;\r\n        if (this.realtime_) {\r\n            this.realtime_.close();\r\n        }\r\n        else {\r\n            if (this.establishConnectionTimer_) {\r\n                clearTimeout(this.establishConnectionTimer_);\r\n                this.establishConnectionTimer_ = null;\r\n            }\r\n            if (this.connected_) {\r\n                this.onRealtimeDisconnect_();\r\n            }\r\n        }\r\n    }\r\n    resume(reason) {\r\n        log('Resuming connection for reason: ' + reason);\r\n        delete this.interruptReasons_[reason];\r\n        if (isEmpty(this.interruptReasons_)) {\r\n            this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n            if (!this.realtime_) {\r\n                this.scheduleConnect_(0);\r\n            }\r\n        }\r\n    }\r\n    handleTimestamp_(timestamp) {\r\n        const delta = timestamp - new Date().getTime();\r\n        this.onServerInfoUpdate_({ serverTimeOffset: delta });\r\n    }\r\n    cancelSentTransactions_() {\r\n        for (let i = 0; i < this.outstandingPuts_.length; i++) {\r\n            const put = this.outstandingPuts_[i];\r\n            if (put && /*hash*/ 'h' in put.request && put.queued) {\r\n                if (put.onComplete) {\r\n                    put.onComplete('disconnect');\r\n                }\r\n                delete this.outstandingPuts_[i];\r\n                this.outstandingPutCount_--;\r\n            }\r\n        }\r\n        // Clean up array occasionally.\r\n        if (this.outstandingPutCount_ === 0) {\r\n            this.outstandingPuts_ = [];\r\n        }\r\n    }\r\n    onListenRevoked_(pathString, query) {\r\n        // Remove the listen and manufacture a \"permission_denied\" error for the failed listen.\r\n        let queryId;\r\n        if (!query) {\r\n            queryId = 'default';\r\n        }\r\n        else {\r\n            queryId = query.map(q => ObjectToUniqueKey(q)).join('$');\r\n        }\r\n        const listen = this.removeListen_(pathString, queryId);\r\n        if (listen && listen.onComplete) {\r\n            listen.onComplete('permission_denied');\r\n        }\r\n    }\r\n    removeListen_(pathString, queryId) {\r\n        const normalizedPathString = new Path(pathString).toString(); // normalize path.\r\n        let listen;\r\n        if (this.listens.has(normalizedPathString)) {\r\n            const map = this.listens.get(normalizedPathString);\r\n            listen = map.get(queryId);\r\n            map.delete(queryId);\r\n            if (map.size === 0) {\r\n                this.listens.delete(normalizedPathString);\r\n            }\r\n        }\r\n        else {\r\n            // all listens for this path has already been removed\r\n            listen = undefined;\r\n        }\r\n        return listen;\r\n    }\r\n    onAuthRevoked_(statusCode, explanation) {\r\n        log('Auth token revoked: ' + statusCode + '/' + explanation);\r\n        this.authToken_ = null;\r\n        this.forceTokenRefresh_ = true;\r\n        this.realtime_.close();\r\n        if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n            // We'll wait a couple times before logging the warning / increasing the\r\n            // retry period since oauth tokens will report as \"invalid\" if they're\r\n            // just expired. Plus there may be transient issues that resolve themselves.\r\n            this.invalidAuthTokenCount_++;\r\n            if (this.invalidAuthTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\r\n                // Set a long reconnect delay because recovery is unlikely\r\n                this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n                // Notify the auth token provider that the token is invalid, which will log\r\n                // a warning\r\n                this.authTokenProvider_.notifyForInvalidToken();\r\n            }\r\n        }\r\n    }\r\n    onAppCheckRevoked_(statusCode, explanation) {\r\n        log('App check token revoked: ' + statusCode + '/' + explanation);\r\n        this.appCheckToken_ = null;\r\n        this.forceTokenRefresh_ = true;\r\n        // Note: We don't close the connection as the developer may not have\r\n        // enforcement enabled. The backend closes connections with enforcements.\r\n        if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n            // We'll wait a couple times before logging the warning / increasing the\r\n            // retry period since oauth tokens will report as \"invalid\" if they're\r\n            // just expired. Plus there may be transient issues that resolve themselves.\r\n            this.invalidAppCheckTokenCount_++;\r\n            if (this.invalidAppCheckTokenCount_ >= INVALID_TOKEN_THRESHOLD) {\r\n                this.appCheckTokenProvider_.notifyForInvalidToken();\r\n            }\r\n        }\r\n    }\r\n    onSecurityDebugPacket_(body) {\r\n        if (this.securityDebugCallback_) {\r\n            this.securityDebugCallback_(body);\r\n        }\r\n        else {\r\n            if ('msg' in body) {\r\n                console.log('FIREBASE: ' + body['msg'].replace('\\n', '\\nFIREBASE: '));\r\n            }\r\n        }\r\n    }\r\n    restoreState_() {\r\n        //Re-authenticate ourselves if we have a credential stored.\r\n        this.tryAuth();\r\n        this.tryAppCheck();\r\n        // Puts depend on having received the corresponding data update from the server before they complete, so we must\r\n        // make sure to send listens before puts.\r\n        for (const queries of this.listens.values()) {\r\n            for (const listenSpec of queries.values()) {\r\n                this.sendListen_(listenSpec);\r\n            }\r\n        }\r\n        for (let i = 0; i < this.outstandingPuts_.length; i++) {\r\n            if (this.outstandingPuts_[i]) {\r\n                this.sendPut_(i);\r\n            }\r\n        }\r\n        while (this.onDisconnectRequestQueue_.length) {\r\n            const request = this.onDisconnectRequestQueue_.shift();\r\n            this.sendOnDisconnect_(request.action, request.pathString, request.data, request.onComplete);\r\n        }\r\n        for (let i = 0; i < this.outstandingGets_.length; i++) {\r\n            if (this.outstandingGets_[i]) {\r\n                this.sendGet_(i);\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Sends client stats for first connection\r\n     */\r\n    sendConnectStats_() {\r\n        const stats = {};\r\n        let clientName = 'js';\r\n        if (isNodeSdk()) {\r\n            if (this.repoInfo_.nodeAdmin) {\r\n                clientName = 'admin_node';\r\n            }\r\n            else {\r\n                clientName = 'node';\r\n            }\r\n        }\r\n        stats['sdk.' + clientName + '.' + SDK_VERSION.replace(/\\./g, '-')] = 1;\r\n        if (isMobileCordova()) {\r\n            stats['framework.cordova'] = 1;\r\n        }\r\n        else if (isReactNative()) {\r\n            stats['framework.reactnative'] = 1;\r\n        }\r\n        this.reportStats(stats);\r\n    }\r\n    shouldReconnect_() {\r\n        const online = OnlineMonitor.getInstance().currentlyOnline();\r\n        return isEmpty(this.interruptReasons_) && online;\r\n    }\r\n}\r\nPersistentConnection.nextPersistentConnectionId_ = 0;\r\n/**\r\n * Counter for number of connections created. Mainly used for tagging in the logs\r\n */\r\nPersistentConnection.nextConnectionId_ = 0;\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass NamedNode {\r\n    constructor(name, node) {\r\n        this.name = name;\r\n        this.node = node;\r\n    }\r\n    static Wrap(name, node) {\r\n        return new NamedNode(name, node);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Index {\r\n    /**\r\n     * @returns A standalone comparison function for\r\n     * this index\r\n     */\r\n    getCompare() {\r\n        return this.compare.bind(this);\r\n    }\r\n    /**\r\n     * Given a before and after value for a node, determine if the indexed value has changed. Even if they are different,\r\n     * it's possible that the changes are isolated to parts of the snapshot that are not indexed.\r\n     *\r\n     *\r\n     * @returns True if the portion of the snapshot being indexed changed between oldNode and newNode\r\n     */\r\n    indexedValueChanged(oldNode, newNode) {\r\n        const oldWrapped = new NamedNode(MIN_NAME, oldNode);\r\n        const newWrapped = new NamedNode(MIN_NAME, newNode);\r\n        return this.compare(oldWrapped, newWrapped) !== 0;\r\n    }\r\n    /**\r\n     * @returns a node wrapper that will sort equal to or less than\r\n     * any other node wrapper, using this index\r\n     */\r\n    minPost() {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        return NamedNode.MIN;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet __EMPTY_NODE;\r\nclass KeyIndex extends Index {\r\n    static get __EMPTY_NODE() {\r\n        return __EMPTY_NODE;\r\n    }\r\n    static set __EMPTY_NODE(val) {\r\n        __EMPTY_NODE = val;\r\n    }\r\n    compare(a, b) {\r\n        return nameCompare(a.name, b.name);\r\n    }\r\n    isDefinedOn(node) {\r\n        // We could probably return true here (since every node has a key), but it's never called\r\n        // so just leaving unimplemented for now.\r\n        throw assertionError('KeyIndex.isDefinedOn not expected to be called.');\r\n    }\r\n    indexedValueChanged(oldNode, newNode) {\r\n        return false; // The key for a node never changes.\r\n    }\r\n    minPost() {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        return NamedNode.MIN;\r\n    }\r\n    maxPost() {\r\n        // TODO: This should really be created once and cached in a static property, but\r\n        // NamedNode isn't defined yet, so I can't use it in a static.  Bleh.\r\n        return new NamedNode(MAX_NAME, __EMPTY_NODE);\r\n    }\r\n    makePost(indexValue, name) {\r\n        assert(typeof indexValue === 'string', 'KeyIndex indexValue must always be a string.');\r\n        // We just use empty node, but it'll never be compared, since our comparator only looks at name.\r\n        return new NamedNode(indexValue, __EMPTY_NODE);\r\n    }\r\n    /**\r\n     * @returns String representation for inclusion in a query spec\r\n     */\r\n    toString() {\r\n        return '.key';\r\n    }\r\n}\r\nconst KEY_INDEX = new KeyIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An iterator over an LLRBNode.\r\n */\r\nclass SortedMapIterator {\r\n    /**\r\n     * @param node - Node to iterate.\r\n     * @param isReverse_ - Whether or not to iterate in reverse\r\n     */\r\n    constructor(node, startKey, comparator, isReverse_, resultGenerator_ = null) {\r\n        this.isReverse_ = isReverse_;\r\n        this.resultGenerator_ = resultGenerator_;\r\n        this.nodeStack_ = [];\r\n        let cmp = 1;\r\n        while (!node.isEmpty()) {\r\n            node = node;\r\n            cmp = startKey ? comparator(node.key, startKey) : 1;\r\n            // flip the comparison if we're going in reverse\r\n            if (isReverse_) {\r\n                cmp *= -1;\r\n            }\r\n            if (cmp < 0) {\r\n                // This node is less than our start key. ignore it\r\n                if (this.isReverse_) {\r\n                    node = node.left;\r\n                }\r\n                else {\r\n                    node = node.right;\r\n                }\r\n            }\r\n            else if (cmp === 0) {\r\n                // This node is exactly equal to our start key. Push it on the stack, but stop iterating;\r\n                this.nodeStack_.push(node);\r\n                break;\r\n            }\r\n            else {\r\n                // This node is greater than our start key, add it to the stack and move to the next one\r\n                this.nodeStack_.push(node);\r\n                if (this.isReverse_) {\r\n                    node = node.right;\r\n                }\r\n                else {\r\n                    node = node.left;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    getNext() {\r\n        if (this.nodeStack_.length === 0) {\r\n            return null;\r\n        }\r\n        let node = this.nodeStack_.pop();\r\n        let result;\r\n        if (this.resultGenerator_) {\r\n            result = this.resultGenerator_(node.key, node.value);\r\n        }\r\n        else {\r\n            result = { key: node.key, value: node.value };\r\n        }\r\n        if (this.isReverse_) {\r\n            node = node.left;\r\n            while (!node.isEmpty()) {\r\n                this.nodeStack_.push(node);\r\n                node = node.right;\r\n            }\r\n        }\r\n        else {\r\n            node = node.right;\r\n            while (!node.isEmpty()) {\r\n                this.nodeStack_.push(node);\r\n                node = node.left;\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n    hasNext() {\r\n        return this.nodeStack_.length > 0;\r\n    }\r\n    peek() {\r\n        if (this.nodeStack_.length === 0) {\r\n            return null;\r\n        }\r\n        const node = this.nodeStack_[this.nodeStack_.length - 1];\r\n        if (this.resultGenerator_) {\r\n            return this.resultGenerator_(node.key, node.value);\r\n        }\r\n        else {\r\n            return { key: node.key, value: node.value };\r\n        }\r\n    }\r\n}\r\n/**\r\n * Represents a node in a Left-leaning Red-Black tree.\r\n */\r\nclass LLRBNode {\r\n    /**\r\n     * @param key - Key associated with this node.\r\n     * @param value - Value associated with this node.\r\n     * @param color - Whether this node is red.\r\n     * @param left - Left child.\r\n     * @param right - Right child.\r\n     */\r\n    constructor(key, value, color, left, right) {\r\n        this.key = key;\r\n        this.value = value;\r\n        this.color = color != null ? color : LLRBNode.RED;\r\n        this.left =\r\n            left != null ? left : SortedMap.EMPTY_NODE;\r\n        this.right =\r\n            right != null ? right : SortedMap.EMPTY_NODE;\r\n    }\r\n    /**\r\n     * Returns a copy of the current node, optionally replacing pieces of it.\r\n     *\r\n     * @param key - New key for the node, or null.\r\n     * @param value - New value for the node, or null.\r\n     * @param color - New color for the node, or null.\r\n     * @param left - New left child for the node, or null.\r\n     * @param right - New right child for the node, or null.\r\n     * @returns The node copy.\r\n     */\r\n    copy(key, value, color, left, right) {\r\n        return new LLRBNode(key != null ? key : this.key, value != null ? value : this.value, color != null ? color : this.color, left != null ? left : this.left, right != null ? right : this.right);\r\n    }\r\n    /**\r\n     * @returns The total number of nodes in the tree.\r\n     */\r\n    count() {\r\n        return this.left.count() + 1 + this.right.count();\r\n    }\r\n    /**\r\n     * @returns True if the tree is empty.\r\n     */\r\n    isEmpty() {\r\n        return false;\r\n    }\r\n    /**\r\n     * Traverses the tree in key order and calls the specified action function\r\n     * for each node.\r\n     *\r\n     * @param action - Callback function to be called for each\r\n     *   node.  If it returns true, traversal is aborted.\r\n     * @returns The first truthy value returned by action, or the last falsey\r\n     *   value returned by action\r\n     */\r\n    inorderTraversal(action) {\r\n        return (this.left.inorderTraversal(action) ||\r\n            !!action(this.key, this.value) ||\r\n            this.right.inorderTraversal(action));\r\n    }\r\n    /**\r\n     * Traverses the tree in reverse key order and calls the specified action function\r\n     * for each node.\r\n     *\r\n     * @param action - Callback function to be called for each\r\n     * node.  If it returns true, traversal is aborted.\r\n     * @returns True if traversal was aborted.\r\n     */\r\n    reverseTraversal(action) {\r\n        return (this.right.reverseTraversal(action) ||\r\n            action(this.key, this.value) ||\r\n            this.left.reverseTraversal(action));\r\n    }\r\n    /**\r\n     * @returns The minimum node in the tree.\r\n     */\r\n    min_() {\r\n        if (this.left.isEmpty()) {\r\n            return this;\r\n        }\r\n        else {\r\n            return this.left.min_();\r\n        }\r\n    }\r\n    /**\r\n     * @returns The maximum key in the tree.\r\n     */\r\n    minKey() {\r\n        return this.min_().key;\r\n    }\r\n    /**\r\n     * @returns The maximum key in the tree.\r\n     */\r\n    maxKey() {\r\n        if (this.right.isEmpty()) {\r\n            return this.key;\r\n        }\r\n        else {\r\n            return this.right.maxKey();\r\n        }\r\n    }\r\n    /**\r\n     * @param key - Key to insert.\r\n     * @param value - Value to insert.\r\n     * @param comparator - Comparator.\r\n     * @returns New tree, with the key/value added.\r\n     */\r\n    insert(key, value, comparator) {\r\n        let n = this;\r\n        const cmp = comparator(key, n.key);\r\n        if (cmp < 0) {\r\n            n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\r\n        }\r\n        else if (cmp === 0) {\r\n            n = n.copy(null, value, null, null, null);\r\n        }\r\n        else {\r\n            n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));\r\n        }\r\n        return n.fixUp_();\r\n    }\r\n    /**\r\n     * @returns New tree, with the minimum key removed.\r\n     */\r\n    removeMin_() {\r\n        if (this.left.isEmpty()) {\r\n            return SortedMap.EMPTY_NODE;\r\n        }\r\n        let n = this;\r\n        if (!n.left.isRed_() && !n.left.left.isRed_()) {\r\n            n = n.moveRedLeft_();\r\n        }\r\n        n = n.copy(null, null, null, n.left.removeMin_(), null);\r\n        return n.fixUp_();\r\n    }\r\n    /**\r\n     * @param key - The key of the item to remove.\r\n     * @param comparator - Comparator.\r\n     * @returns New tree, with the specified item removed.\r\n     */\r\n    remove(key, comparator) {\r\n        let n, smallest;\r\n        n = this;\r\n        if (comparator(key, n.key) < 0) {\r\n            if (!n.left.isEmpty() && !n.left.isRed_() && !n.left.left.isRed_()) {\r\n                n = n.moveRedLeft_();\r\n            }\r\n            n = n.copy(null, null, null, n.left.remove(key, comparator), null);\r\n        }\r\n        else {\r\n            if (n.left.isRed_()) {\r\n                n = n.rotateRight_();\r\n            }\r\n            if (!n.right.isEmpty() && !n.right.isRed_() && !n.right.left.isRed_()) {\r\n                n = n.moveRedRight_();\r\n            }\r\n            if (comparator(key, n.key) === 0) {\r\n                if (n.right.isEmpty()) {\r\n                    return SortedMap.EMPTY_NODE;\r\n                }\r\n                else {\r\n                    smallest = n.right.min_();\r\n                    n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin_());\r\n                }\r\n            }\r\n            n = n.copy(null, null, null, null, n.right.remove(key, comparator));\r\n        }\r\n        return n.fixUp_();\r\n    }\r\n    /**\r\n     * @returns Whether this is a RED node.\r\n     */\r\n    isRed_() {\r\n        return this.color;\r\n    }\r\n    /**\r\n     * @returns New tree after performing any needed rotations.\r\n     */\r\n    fixUp_() {\r\n        let n = this;\r\n        if (n.right.isRed_() && !n.left.isRed_()) {\r\n            n = n.rotateLeft_();\r\n        }\r\n        if (n.left.isRed_() && n.left.left.isRed_()) {\r\n            n = n.rotateRight_();\r\n        }\r\n        if (n.left.isRed_() && n.right.isRed_()) {\r\n            n = n.colorFlip_();\r\n        }\r\n        return n;\r\n    }\r\n    /**\r\n     * @returns New tree, after moveRedLeft.\r\n     */\r\n    moveRedLeft_() {\r\n        let n = this.colorFlip_();\r\n        if (n.right.left.isRed_()) {\r\n            n = n.copy(null, null, null, null, n.right.rotateRight_());\r\n            n = n.rotateLeft_();\r\n            n = n.colorFlip_();\r\n        }\r\n        return n;\r\n    }\r\n    /**\r\n     * @returns New tree, after moveRedRight.\r\n     */\r\n    moveRedRight_() {\r\n        let n = this.colorFlip_();\r\n        if (n.left.left.isRed_()) {\r\n            n = n.rotateRight_();\r\n            n = n.colorFlip_();\r\n        }\r\n        return n;\r\n    }\r\n    /**\r\n     * @returns New tree, after rotateLeft.\r\n     */\r\n    rotateLeft_() {\r\n        const nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\r\n        return this.right.copy(null, null, this.color, nl, null);\r\n    }\r\n    /**\r\n     * @returns New tree, after rotateRight.\r\n     */\r\n    rotateRight_() {\r\n        const nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\r\n        return this.left.copy(null, null, this.color, null, nr);\r\n    }\r\n    /**\r\n     * @returns Newt ree, after colorFlip.\r\n     */\r\n    colorFlip_() {\r\n        const left = this.left.copy(null, null, !this.left.color, null, null);\r\n        const right = this.right.copy(null, null, !this.right.color, null, null);\r\n        return this.copy(null, null, !this.color, left, right);\r\n    }\r\n    /**\r\n     * For testing.\r\n     *\r\n     * @returns True if all is well.\r\n     */\r\n    checkMaxDepth_() {\r\n        const blackDepth = this.check_();\r\n        return Math.pow(2.0, blackDepth) <= this.count() + 1;\r\n    }\r\n    check_() {\r\n        if (this.isRed_() && this.left.isRed_()) {\r\n            throw new Error('Red node has red child(' + this.key + ',' + this.value + ')');\r\n        }\r\n        if (this.right.isRed_()) {\r\n            throw new Error('Right child of (' + this.key + ',' + this.value + ') is red');\r\n        }\r\n        const blackDepth = this.left.check_();\r\n        if (blackDepth !== this.right.check_()) {\r\n            throw new Error('Black depths differ');\r\n        }\r\n        else {\r\n            return blackDepth + (this.isRed_() ? 0 : 1);\r\n        }\r\n    }\r\n}\r\nLLRBNode.RED = true;\r\nLLRBNode.BLACK = false;\r\n/**\r\n * Represents an empty node (a leaf node in the Red-Black Tree).\r\n */\r\nclass LLRBEmptyNode {\r\n    /**\r\n     * Returns a copy of the current node.\r\n     *\r\n     * @returns The node copy.\r\n     */\r\n    copy(key, value, color, left, right) {\r\n        return this;\r\n    }\r\n    /**\r\n     * Returns a copy of the tree, with the specified key/value added.\r\n     *\r\n     * @param key - Key to be added.\r\n     * @param value - Value to be added.\r\n     * @param comparator - Comparator.\r\n     * @returns New tree, with item added.\r\n     */\r\n    insert(key, value, comparator) {\r\n        return new LLRBNode(key, value, null);\r\n    }\r\n    /**\r\n     * Returns a copy of the tree, with the specified key removed.\r\n     *\r\n     * @param key - The key to remove.\r\n     * @param comparator - Comparator.\r\n     * @returns New tree, with item removed.\r\n     */\r\n    remove(key, comparator) {\r\n        return this;\r\n    }\r\n    /**\r\n     * @returns The total number of nodes in the tree.\r\n     */\r\n    count() {\r\n        return 0;\r\n    }\r\n    /**\r\n     * @returns True if the tree is empty.\r\n     */\r\n    isEmpty() {\r\n        return true;\r\n    }\r\n    /**\r\n     * Traverses the tree in key order and calls the specified action function\r\n     * for each node.\r\n     *\r\n     * @param action - Callback function to be called for each\r\n     * node.  If it returns true, traversal is aborted.\r\n     * @returns True if traversal was aborted.\r\n     */\r\n    inorderTraversal(action) {\r\n        return false;\r\n    }\r\n    /**\r\n     * Traverses the tree in reverse key order and calls the specified action function\r\n     * for each node.\r\n     *\r\n     * @param action - Callback function to be called for each\r\n     * node.  If it returns true, traversal is aborted.\r\n     * @returns True if traversal was aborted.\r\n     */\r\n    reverseTraversal(action) {\r\n        return false;\r\n    }\r\n    minKey() {\r\n        return null;\r\n    }\r\n    maxKey() {\r\n        return null;\r\n    }\r\n    check_() {\r\n        return 0;\r\n    }\r\n    /**\r\n     * @returns Whether this node is red.\r\n     */\r\n    isRed_() {\r\n        return false;\r\n    }\r\n}\r\n/**\r\n * An immutable sorted map implementation, based on a Left-leaning Red-Black\r\n * tree.\r\n */\r\nclass SortedMap {\r\n    /**\r\n     * @param comparator_ - Key comparator.\r\n     * @param root_ - Optional root node for the map.\r\n     */\r\n    constructor(comparator_, root_ = SortedMap.EMPTY_NODE) {\r\n        this.comparator_ = comparator_;\r\n        this.root_ = root_;\r\n    }\r\n    /**\r\n     * Returns a copy of the map, with the specified key/value added or replaced.\r\n     * (TODO: We should perhaps rename this method to 'put')\r\n     *\r\n     * @param key - Key to be added.\r\n     * @param value - Value to be added.\r\n     * @returns New map, with item added.\r\n     */\r\n    insert(key, value) {\r\n        return new SortedMap(this.comparator_, this.root_\r\n            .insert(key, value, this.comparator_)\r\n            .copy(null, null, LLRBNode.BLACK, null, null));\r\n    }\r\n    /**\r\n     * Returns a copy of the map, with the specified key removed.\r\n     *\r\n     * @param key - The key to remove.\r\n     * @returns New map, with item removed.\r\n     */\r\n    remove(key) {\r\n        return new SortedMap(this.comparator_, this.root_\r\n            .remove(key, this.comparator_)\r\n            .copy(null, null, LLRBNode.BLACK, null, null));\r\n    }\r\n    /**\r\n     * Returns the value of the node with the given key, or null.\r\n     *\r\n     * @param key - The key to look up.\r\n     * @returns The value of the node with the given key, or null if the\r\n     * key doesn't exist.\r\n     */\r\n    get(key) {\r\n        let cmp;\r\n        let node = this.root_;\r\n        while (!node.isEmpty()) {\r\n            cmp = this.comparator_(key, node.key);\r\n            if (cmp === 0) {\r\n                return node.value;\r\n            }\r\n            else if (cmp < 0) {\r\n                node = node.left;\r\n            }\r\n            else if (cmp > 0) {\r\n                node = node.right;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n    /**\r\n     * Returns the key of the item *before* the specified key, or null if key is the first item.\r\n     * @param key - The key to find the predecessor of\r\n     * @returns The predecessor key.\r\n     */\r\n    getPredecessorKey(key) {\r\n        let cmp, node = this.root_, rightParent = null;\r\n        while (!node.isEmpty()) {\r\n            cmp = this.comparator_(key, node.key);\r\n            if (cmp === 0) {\r\n                if (!node.left.isEmpty()) {\r\n                    node = node.left;\r\n                    while (!node.right.isEmpty()) {\r\n                        node = node.right;\r\n                    }\r\n                    return node.key;\r\n                }\r\n                else if (rightParent) {\r\n                    return rightParent.key;\r\n                }\r\n                else {\r\n                    return null; // first item.\r\n                }\r\n            }\r\n            else if (cmp < 0) {\r\n                node = node.left;\r\n            }\r\n            else if (cmp > 0) {\r\n                rightParent = node;\r\n                node = node.right;\r\n            }\r\n        }\r\n        throw new Error('Attempted to find predecessor key for a nonexistent key.  What gives?');\r\n    }\r\n    /**\r\n     * @returns True if the map is empty.\r\n     */\r\n    isEmpty() {\r\n        return this.root_.isEmpty();\r\n    }\r\n    /**\r\n     * @returns The total number of nodes in the map.\r\n     */\r\n    count() {\r\n        return this.root_.count();\r\n    }\r\n    /**\r\n     * @returns The minimum key in the map.\r\n     */\r\n    minKey() {\r\n        return this.root_.minKey();\r\n    }\r\n    /**\r\n     * @returns The maximum key in the map.\r\n     */\r\n    maxKey() {\r\n        return this.root_.maxKey();\r\n    }\r\n    /**\r\n     * Traverses the map in key order and calls the specified action function\r\n     * for each key/value pair.\r\n     *\r\n     * @param action - Callback function to be called\r\n     * for each key/value pair.  If action returns true, traversal is aborted.\r\n     * @returns The first truthy value returned by action, or the last falsey\r\n     *   value returned by action\r\n     */\r\n    inorderTraversal(action) {\r\n        return this.root_.inorderTraversal(action);\r\n    }\r\n    /**\r\n     * Traverses the map in reverse key order and calls the specified action function\r\n     * for each key/value pair.\r\n     *\r\n     * @param action - Callback function to be called\r\n     * for each key/value pair.  If action returns true, traversal is aborted.\r\n     * @returns True if the traversal was aborted.\r\n     */\r\n    reverseTraversal(action) {\r\n        return this.root_.reverseTraversal(action);\r\n    }\r\n    /**\r\n     * Returns an iterator over the SortedMap.\r\n     * @returns The iterator.\r\n     */\r\n    getIterator(resultGenerator) {\r\n        return new SortedMapIterator(this.root_, null, this.comparator_, false, resultGenerator);\r\n    }\r\n    getIteratorFrom(key, resultGenerator) {\r\n        return new SortedMapIterator(this.root_, key, this.comparator_, false, resultGenerator);\r\n    }\r\n    getReverseIteratorFrom(key, resultGenerator) {\r\n        return new SortedMapIterator(this.root_, key, this.comparator_, true, resultGenerator);\r\n    }\r\n    getReverseIterator(resultGenerator) {\r\n        return new SortedMapIterator(this.root_, null, this.comparator_, true, resultGenerator);\r\n    }\r\n}\r\n/**\r\n * Always use the same empty node, to reduce memory.\r\n */\r\nSortedMap.EMPTY_NODE = new LLRBEmptyNode();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction NAME_ONLY_COMPARATOR(left, right) {\r\n    return nameCompare(left.name, right.name);\r\n}\r\nfunction NAME_COMPARATOR(left, right) {\r\n    return nameCompare(left, right);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet MAX_NODE$2;\r\nfunction setMaxNode$1(val) {\r\n    MAX_NODE$2 = val;\r\n}\r\nconst priorityHashText = function (priority) {\r\n    if (typeof priority === 'number') {\r\n        return 'number:' + doubleToIEEE754String(priority);\r\n    }\r\n    else {\r\n        return 'string:' + priority;\r\n    }\r\n};\r\n/**\r\n * Validates that a priority snapshot Node is valid.\r\n */\r\nconst validatePriorityNode = function (priorityNode) {\r\n    if (priorityNode.isLeafNode()) {\r\n        const val = priorityNode.val();\r\n        assert(typeof val === 'string' ||\r\n            typeof val === 'number' ||\r\n            (typeof val === 'object' && contains(val, '.sv')), 'Priority must be a string or number.');\r\n    }\r\n    else {\r\n        assert(priorityNode === MAX_NODE$2 || priorityNode.isEmpty(), 'priority of unexpected type.');\r\n    }\r\n    // Don't call getPriority() on MAX_NODE to avoid hitting assertion.\r\n    assert(priorityNode === MAX_NODE$2 || priorityNode.getPriority().isEmpty(), \"Priority nodes can't have a priority of their own.\");\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet __childrenNodeConstructor;\r\n/**\r\n * LeafNode is a class for storing leaf nodes in a DataSnapshot.  It\r\n * implements Node and stores the value of the node (a string,\r\n * number, or boolean) accessible via getValue().\r\n */\r\nclass LeafNode {\r\n    /**\r\n     * @param value_ - The value to store in this leaf node. The object type is\r\n     * possible in the event of a deferred value\r\n     * @param priorityNode_ - The priority of this node.\r\n     */\r\n    constructor(value_, priorityNode_ = LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n        this.value_ = value_;\r\n        this.priorityNode_ = priorityNode_;\r\n        this.lazyHash_ = null;\r\n        assert(this.value_ !== undefined && this.value_ !== null, \"LeafNode shouldn't be created with null/undefined value.\");\r\n        validatePriorityNode(this.priorityNode_);\r\n    }\r\n    static set __childrenNodeConstructor(val) {\r\n        __childrenNodeConstructor = val;\r\n    }\r\n    static get __childrenNodeConstructor() {\r\n        return __childrenNodeConstructor;\r\n    }\r\n    /** @inheritDoc */\r\n    isLeafNode() {\r\n        return true;\r\n    }\r\n    /** @inheritDoc */\r\n    getPriority() {\r\n        return this.priorityNode_;\r\n    }\r\n    /** @inheritDoc */\r\n    updatePriority(newPriorityNode) {\r\n        return new LeafNode(this.value_, newPriorityNode);\r\n    }\r\n    /** @inheritDoc */\r\n    getImmediateChild(childName) {\r\n        // Hack to treat priority as a regular child\r\n        if (childName === '.priority') {\r\n            return this.priorityNode_;\r\n        }\r\n        else {\r\n            return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n        }\r\n    }\r\n    /** @inheritDoc */\r\n    getChild(path) {\r\n        if (pathIsEmpty(path)) {\r\n            return this;\r\n        }\r\n        else if (pathGetFront(path) === '.priority') {\r\n            return this.priorityNode_;\r\n        }\r\n        else {\r\n            return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n        }\r\n    }\r\n    hasChild() {\r\n        return false;\r\n    }\r\n    /** @inheritDoc */\r\n    getPredecessorChildName(childName, childNode) {\r\n        return null;\r\n    }\r\n    /** @inheritDoc */\r\n    updateImmediateChild(childName, newChildNode) {\r\n        if (childName === '.priority') {\r\n            return this.updatePriority(newChildNode);\r\n        }\r\n        else if (newChildNode.isEmpty() && childName !== '.priority') {\r\n            return this;\r\n        }\r\n        else {\r\n            return LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(childName, newChildNode).updatePriority(this.priorityNode_);\r\n        }\r\n    }\r\n    /** @inheritDoc */\r\n    updateChild(path, newChildNode) {\r\n        const front = pathGetFront(path);\r\n        if (front === null) {\r\n            return newChildNode;\r\n        }\r\n        else if (newChildNode.isEmpty() && front !== '.priority') {\r\n            return this;\r\n        }\r\n        else {\r\n            assert(front !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\r\n            return this.updateImmediateChild(front, LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateChild(pathPopFront(path), newChildNode));\r\n        }\r\n    }\r\n    /** @inheritDoc */\r\n    isEmpty() {\r\n        return false;\r\n    }\r\n    /** @inheritDoc */\r\n    numChildren() {\r\n        return 0;\r\n    }\r\n    /** @inheritDoc */\r\n    forEachChild(index, action) {\r\n        return false;\r\n    }\r\n    val(exportFormat) {\r\n        if (exportFormat && !this.getPriority().isEmpty()) {\r\n            return {\r\n                '.value': this.getValue(),\r\n                '.priority': this.getPriority().val()\r\n            };\r\n        }\r\n        else {\r\n            return this.getValue();\r\n        }\r\n    }\r\n    /** @inheritDoc */\r\n    hash() {\r\n        if (this.lazyHash_ === null) {\r\n            let toHash = '';\r\n            if (!this.priorityNode_.isEmpty()) {\r\n                toHash +=\r\n                    'priority:' +\r\n                        priorityHashText(this.priorityNode_.val()) +\r\n                        ':';\r\n            }\r\n            const type = typeof this.value_;\r\n            toHash += type + ':';\r\n            if (type === 'number') {\r\n                toHash += doubleToIEEE754String(this.value_);\r\n            }\r\n            else {\r\n                toHash += this.value_;\r\n            }\r\n            this.lazyHash_ = sha1(toHash);\r\n        }\r\n        return this.lazyHash_;\r\n    }\r\n    /**\r\n     * Returns the value of the leaf node.\r\n     * @returns The value of the node.\r\n     */\r\n    getValue() {\r\n        return this.value_;\r\n    }\r\n    compareTo(other) {\r\n        if (other === LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n            return 1;\r\n        }\r\n        else if (other instanceof LeafNode.__childrenNodeConstructor) {\r\n            return -1;\r\n        }\r\n        else {\r\n            assert(other.isLeafNode(), 'Unknown node type');\r\n            return this.compareToLeafNode_(other);\r\n        }\r\n    }\r\n    /**\r\n     * Comparison specifically for two leaf nodes\r\n     */\r\n    compareToLeafNode_(otherLeaf) {\r\n        const otherLeafType = typeof otherLeaf.value_;\r\n        const thisLeafType = typeof this.value_;\r\n        const otherIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(otherLeafType);\r\n        const thisIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(thisLeafType);\r\n        assert(otherIndex >= 0, 'Unknown leaf type: ' + otherLeafType);\r\n        assert(thisIndex >= 0, 'Unknown leaf type: ' + thisLeafType);\r\n        if (otherIndex === thisIndex) {\r\n            // Same type, compare values\r\n            if (thisLeafType === 'object') {\r\n                // Deferred value nodes are all equal, but we should also never get to this point...\r\n                return 0;\r\n            }\r\n            else {\r\n                // Note that this works because true > false, all others are number or string comparisons\r\n                if (this.value_ < otherLeaf.value_) {\r\n                    return -1;\r\n                }\r\n                else if (this.value_ === otherLeaf.value_) {\r\n                    return 0;\r\n                }\r\n                else {\r\n                    return 1;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            return thisIndex - otherIndex;\r\n        }\r\n    }\r\n    withIndex() {\r\n        return this;\r\n    }\r\n    isIndexed() {\r\n        return true;\r\n    }\r\n    equals(other) {\r\n        if (other === this) {\r\n            return true;\r\n        }\r\n        else if (other.isLeafNode()) {\r\n            const otherLeaf = other;\r\n            return (this.value_ === otherLeaf.value_ &&\r\n                this.priorityNode_.equals(otherLeaf.priorityNode_));\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    }\r\n}\r\n/**\r\n * The sort order for comparing leaf nodes of different types. If two leaf nodes have\r\n * the same type, the comparison falls back to their value\r\n */\r\nLeafNode.VALUE_TYPE_ORDER = ['object', 'boolean', 'number', 'string'];\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet nodeFromJSON$1;\r\nlet MAX_NODE$1;\r\nfunction setNodeFromJSON(val) {\r\n    nodeFromJSON$1 = val;\r\n}\r\nfunction setMaxNode(val) {\r\n    MAX_NODE$1 = val;\r\n}\r\nclass PriorityIndex extends Index {\r\n    compare(a, b) {\r\n        const aPriority = a.node.getPriority();\r\n        const bPriority = b.node.getPriority();\r\n        const indexCmp = aPriority.compareTo(bPriority);\r\n        if (indexCmp === 0) {\r\n            return nameCompare(a.name, b.name);\r\n        }\r\n        else {\r\n            return indexCmp;\r\n        }\r\n    }\r\n    isDefinedOn(node) {\r\n        return !node.getPriority().isEmpty();\r\n    }\r\n    indexedValueChanged(oldNode, newNode) {\r\n        return !oldNode.getPriority().equals(newNode.getPriority());\r\n    }\r\n    minPost() {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        return NamedNode.MIN;\r\n    }\r\n    maxPost() {\r\n        return new NamedNode(MAX_NAME, new LeafNode('[PRIORITY-POST]', MAX_NODE$1));\r\n    }\r\n    makePost(indexValue, name) {\r\n        const priorityNode = nodeFromJSON$1(indexValue);\r\n        return new NamedNode(name, new LeafNode('[PRIORITY-POST]', priorityNode));\r\n    }\r\n    /**\r\n     * @returns String representation for inclusion in a query spec\r\n     */\r\n    toString() {\r\n        return '.priority';\r\n    }\r\n}\r\nconst PRIORITY_INDEX = new PriorityIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst LOG_2 = Math.log(2);\r\nclass Base12Num {\r\n    constructor(length) {\r\n        const logBase2 = (num) => \r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        parseInt((Math.log(num) / LOG_2), 10);\r\n        const bitMask = (bits) => parseInt(Array(bits + 1).join('1'), 2);\r\n        this.count = logBase2(length + 1);\r\n        this.current_ = this.count - 1;\r\n        const mask = bitMask(this.count);\r\n        this.bits_ = (length + 1) & mask;\r\n    }\r\n    nextBitIsOne() {\r\n        //noinspection JSBitwiseOperatorUsage\r\n        const result = !(this.bits_ & (0x1 << this.current_));\r\n        this.current_--;\r\n        return result;\r\n    }\r\n}\r\n/**\r\n * Takes a list of child nodes and constructs a SortedSet using the given comparison\r\n * function\r\n *\r\n * Uses the algorithm described in the paper linked here:\r\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458\r\n *\r\n * @param childList - Unsorted list of children\r\n * @param cmp - The comparison method to be used\r\n * @param keyFn - An optional function to extract K from a node wrapper, if K's\r\n * type is not NamedNode\r\n * @param mapSortFn - An optional override for comparator used by the generated sorted map\r\n */\r\nconst buildChildSet = function (childList, cmp, keyFn, mapSortFn) {\r\n    childList.sort(cmp);\r\n    const buildBalancedTree = function (low, high) {\r\n        const length = high - low;\r\n        let namedNode;\r\n        let key;\r\n        if (length === 0) {\r\n            return null;\r\n        }\r\n        else if (length === 1) {\r\n            namedNode = childList[low];\r\n            key = keyFn ? keyFn(namedNode) : namedNode;\r\n            return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, null, null);\r\n        }\r\n        else {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            const middle = parseInt((length / 2), 10) + low;\r\n            const left = buildBalancedTree(low, middle);\r\n            const right = buildBalancedTree(middle + 1, high);\r\n            namedNode = childList[middle];\r\n            key = keyFn ? keyFn(namedNode) : namedNode;\r\n            return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, left, right);\r\n        }\r\n    };\r\n    const buildFrom12Array = function (base12) {\r\n        let node = null;\r\n        let root = null;\r\n        let index = childList.length;\r\n        const buildPennant = function (chunkSize, color) {\r\n            const low = index - chunkSize;\r\n            const high = index;\r\n            index -= chunkSize;\r\n            const childTree = buildBalancedTree(low + 1, high);\r\n            const namedNode = childList[low];\r\n            const key = keyFn ? keyFn(namedNode) : namedNode;\r\n            attachPennant(new LLRBNode(key, namedNode.node, color, null, childTree));\r\n        };\r\n        const attachPennant = function (pennant) {\r\n            if (node) {\r\n                node.left = pennant;\r\n                node = pennant;\r\n            }\r\n            else {\r\n                root = pennant;\r\n                node = pennant;\r\n            }\r\n        };\r\n        for (let i = 0; i < base12.count; ++i) {\r\n            const isOne = base12.nextBitIsOne();\r\n            // The number of nodes taken in each slice is 2^(arr.length - (i + 1))\r\n            const chunkSize = Math.pow(2, base12.count - (i + 1));\r\n            if (isOne) {\r\n                buildPennant(chunkSize, LLRBNode.BLACK);\r\n            }\r\n            else {\r\n                // current == 2\r\n                buildPennant(chunkSize, LLRBNode.BLACK);\r\n                buildPennant(chunkSize, LLRBNode.RED);\r\n            }\r\n        }\r\n        return root;\r\n    };\r\n    const base12 = new Base12Num(childList.length);\r\n    const root = buildFrom12Array(base12);\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    return new SortedMap(mapSortFn || cmp, root);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet _defaultIndexMap;\r\nconst fallbackObject = {};\r\nclass IndexMap {\r\n    constructor(indexes_, indexSet_) {\r\n        this.indexes_ = indexes_;\r\n        this.indexSet_ = indexSet_;\r\n    }\r\n    /**\r\n     * The default IndexMap for nodes without a priority\r\n     */\r\n    static get Default() {\r\n        assert(fallbackObject && PRIORITY_INDEX, 'ChildrenNode.ts has not been loaded');\r\n        _defaultIndexMap =\r\n            _defaultIndexMap ||\r\n                new IndexMap({ '.priority': fallbackObject }, { '.priority': PRIORITY_INDEX });\r\n        return _defaultIndexMap;\r\n    }\r\n    get(indexKey) {\r\n        const sortedMap = safeGet(this.indexes_, indexKey);\r\n        if (!sortedMap) {\r\n            throw new Error('No index defined for ' + indexKey);\r\n        }\r\n        if (sortedMap instanceof SortedMap) {\r\n            return sortedMap;\r\n        }\r\n        else {\r\n            // The index exists, but it falls back to just name comparison. Return null so that the calling code uses the\r\n            // regular child map\r\n            return null;\r\n        }\r\n    }\r\n    hasIndex(indexDefinition) {\r\n        return contains(this.indexSet_, indexDefinition.toString());\r\n    }\r\n    addIndex(indexDefinition, existingChildren) {\r\n        assert(indexDefinition !== KEY_INDEX, \"KeyIndex always exists and isn't meant to be added to the IndexMap.\");\r\n        const childList = [];\r\n        let sawIndexedValue = false;\r\n        const iter = existingChildren.getIterator(NamedNode.Wrap);\r\n        let next = iter.getNext();\r\n        while (next) {\r\n            sawIndexedValue =\r\n                sawIndexedValue || indexDefinition.isDefinedOn(next.node);\r\n            childList.push(next);\r\n            next = iter.getNext();\r\n        }\r\n        let newIndex;\r\n        if (sawIndexedValue) {\r\n            newIndex = buildChildSet(childList, indexDefinition.getCompare());\r\n        }\r\n        else {\r\n            newIndex = fallbackObject;\r\n        }\r\n        const indexName = indexDefinition.toString();\r\n        const newIndexSet = Object.assign({}, this.indexSet_);\r\n        newIndexSet[indexName] = indexDefinition;\r\n        const newIndexes = Object.assign({}, this.indexes_);\r\n        newIndexes[indexName] = newIndex;\r\n        return new IndexMap(newIndexes, newIndexSet);\r\n    }\r\n    /**\r\n     * Ensure that this node is properly tracked in any indexes that we're maintaining\r\n     */\r\n    addToIndexes(namedNode, existingChildren) {\r\n        const newIndexes = map(this.indexes_, (indexedChildren, indexName) => {\r\n            const index = safeGet(this.indexSet_, indexName);\r\n            assert(index, 'Missing index implementation for ' + indexName);\r\n            if (indexedChildren === fallbackObject) {\r\n                // Check to see if we need to index everything\r\n                if (index.isDefinedOn(namedNode.node)) {\r\n                    // We need to build this index\r\n                    const childList = [];\r\n                    const iter = existingChildren.getIterator(NamedNode.Wrap);\r\n                    let next = iter.getNext();\r\n                    while (next) {\r\n                        if (next.name !== namedNode.name) {\r\n                            childList.push(next);\r\n                        }\r\n                        next = iter.getNext();\r\n                    }\r\n                    childList.push(namedNode);\r\n                    return buildChildSet(childList, index.getCompare());\r\n                }\r\n                else {\r\n                    // No change, this remains a fallback\r\n                    return fallbackObject;\r\n                }\r\n            }\r\n            else {\r\n                const existingSnap = existingChildren.get(namedNode.name);\r\n                let newChildren = indexedChildren;\r\n                if (existingSnap) {\r\n                    newChildren = newChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n                }\r\n                return newChildren.insert(namedNode, namedNode.node);\r\n            }\r\n        });\r\n        return new IndexMap(newIndexes, this.indexSet_);\r\n    }\r\n    /**\r\n     * Create a new IndexMap instance with the given value removed\r\n     */\r\n    removeFromIndexes(namedNode, existingChildren) {\r\n        const newIndexes = map(this.indexes_, (indexedChildren) => {\r\n            if (indexedChildren === fallbackObject) {\r\n                // This is the fallback. Just return it, nothing to do in this case\r\n                return indexedChildren;\r\n            }\r\n            else {\r\n                const existingSnap = existingChildren.get(namedNode.name);\r\n                if (existingSnap) {\r\n                    return indexedChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n                }\r\n                else {\r\n                    // No record of this child\r\n                    return indexedChildren;\r\n                }\r\n            }\r\n        });\r\n        return new IndexMap(newIndexes, this.indexSet_);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// TODO: For memory savings, don't store priorityNode_ if it's empty.\r\nlet EMPTY_NODE;\r\n/**\r\n * ChildrenNode is a class for storing internal nodes in a DataSnapshot\r\n * (i.e. nodes with children).  It implements Node and stores the\r\n * list of children in the children property, sorted by child name.\r\n */\r\nclass ChildrenNode {\r\n    /**\r\n     * @param children_ - List of children of this node..\r\n     * @param priorityNode_ - The priority of this node (as a snapshot node).\r\n     */\r\n    constructor(children_, priorityNode_, indexMap_) {\r\n        this.children_ = children_;\r\n        this.priorityNode_ = priorityNode_;\r\n        this.indexMap_ = indexMap_;\r\n        this.lazyHash_ = null;\r\n        /**\r\n         * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use\r\n         * EMPTY_NODE as the priority of EMPTY_NODE.  We might want to consider making EMPTY_NODE its own\r\n         * class instead of an empty ChildrenNode.\r\n         */\r\n        if (this.priorityNode_) {\r\n            validatePriorityNode(this.priorityNode_);\r\n        }\r\n        if (this.children_.isEmpty()) {\r\n            assert(!this.priorityNode_ || this.priorityNode_.isEmpty(), 'An empty node cannot have a priority');\r\n        }\r\n    }\r\n    static get EMPTY_NODE() {\r\n        return (EMPTY_NODE ||\r\n            (EMPTY_NODE = new ChildrenNode(new SortedMap(NAME_COMPARATOR), null, IndexMap.Default)));\r\n    }\r\n    /** @inheritDoc */\r\n    isLeafNode() {\r\n        return false;\r\n    }\r\n    /** @inheritDoc */\r\n    getPriority() {\r\n        return this.priorityNode_ || EMPTY_NODE;\r\n    }\r\n    /** @inheritDoc */\r\n    updatePriority(newPriorityNode) {\r\n        if (this.children_.isEmpty()) {\r\n            // Don't allow priorities on empty nodes\r\n            return this;\r\n        }\r\n        else {\r\n            return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);\r\n        }\r\n    }\r\n    /** @inheritDoc */\r\n    getImmediateChild(childName) {\r\n        // Hack to treat priority as a regular child\r\n        if (childName === '.priority') {\r\n            return this.getPriority();\r\n        }\r\n        else {\r\n            const child = this.children_.get(childName);\r\n            return child === null ? EMPTY_NODE : child;\r\n        }\r\n    }\r\n    /** @inheritDoc */\r\n    getChild(path) {\r\n        const front = pathGetFront(path);\r\n        if (front === null) {\r\n            return this;\r\n        }\r\n        return this.getImmediateChild(front).getChild(pathPopFront(path));\r\n    }\r\n    /** @inheritDoc */\r\n    hasChild(childName) {\r\n        return this.children_.get(childName) !== null;\r\n    }\r\n    /** @inheritDoc */\r\n    updateImmediateChild(childName, newChildNode) {\r\n        assert(newChildNode, 'We should always be passing snapshot nodes');\r\n        if (childName === '.priority') {\r\n            return this.updatePriority(newChildNode);\r\n        }\r\n        else {\r\n            const namedNode = new NamedNode(childName, newChildNode);\r\n            let newChildren, newIndexMap;\r\n            if (newChildNode.isEmpty()) {\r\n                newChildren = this.children_.remove(childName);\r\n                newIndexMap = this.indexMap_.removeFromIndexes(namedNode, this.children_);\r\n            }\r\n            else {\r\n                newChildren = this.children_.insert(childName, newChildNode);\r\n                newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);\r\n            }\r\n            const newPriority = newChildren.isEmpty()\r\n                ? EMPTY_NODE\r\n                : this.priorityNode_;\r\n            return new ChildrenNode(newChildren, newPriority, newIndexMap);\r\n        }\r\n    }\r\n    /** @inheritDoc */\r\n    updateChild(path, newChildNode) {\r\n        const front = pathGetFront(path);\r\n        if (front === null) {\r\n            return newChildNode;\r\n        }\r\n        else {\r\n            assert(pathGetFront(path) !== '.priority' || pathGetLength(path) === 1, '.priority must be the last token in a path');\r\n            const newImmediateChild = this.getImmediateChild(front).updateChild(pathPopFront(path), newChildNode);\r\n            return this.updateImmediateChild(front, newImmediateChild);\r\n        }\r\n    }\r\n    /** @inheritDoc */\r\n    isEmpty() {\r\n        return this.children_.isEmpty();\r\n    }\r\n    /** @inheritDoc */\r\n    numChildren() {\r\n        return this.children_.count();\r\n    }\r\n    /** @inheritDoc */\r\n    val(exportFormat) {\r\n        if (this.isEmpty()) {\r\n            return null;\r\n        }\r\n        const obj = {};\r\n        let numKeys = 0, maxKey = 0, allIntegerKeys = true;\r\n        this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n            obj[key] = childNode.val(exportFormat);\r\n            numKeys++;\r\n            if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {\r\n                maxKey = Math.max(maxKey, Number(key));\r\n            }\r\n            else {\r\n                allIntegerKeys = false;\r\n            }\r\n        });\r\n        if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {\r\n            // convert to array.\r\n            const array = [];\r\n            // eslint-disable-next-line guard-for-in\r\n            for (const key in obj) {\r\n                array[key] = obj[key];\r\n            }\r\n            return array;\r\n        }\r\n        else {\r\n            if (exportFormat && !this.getPriority().isEmpty()) {\r\n                obj['.priority'] = this.getPriority().val();\r\n            }\r\n            return obj;\r\n        }\r\n    }\r\n    /** @inheritDoc */\r\n    hash() {\r\n        if (this.lazyHash_ === null) {\r\n            let toHash = '';\r\n            if (!this.getPriority().isEmpty()) {\r\n                toHash +=\r\n                    'priority:' +\r\n                        priorityHashText(this.getPriority().val()) +\r\n                        ':';\r\n            }\r\n            this.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n                const childHash = childNode.hash();\r\n                if (childHash !== '') {\r\n                    toHash += ':' + key + ':' + childHash;\r\n                }\r\n            });\r\n            this.lazyHash_ = toHash === '' ? '' : sha1(toHash);\r\n        }\r\n        return this.lazyHash_;\r\n    }\r\n    /** @inheritDoc */\r\n    getPredecessorChildName(childName, childNode, index) {\r\n        const idx = this.resolveIndex_(index);\r\n        if (idx) {\r\n            const predecessor = idx.getPredecessorKey(new NamedNode(childName, childNode));\r\n            return predecessor ? predecessor.name : null;\r\n        }\r\n        else {\r\n            return this.children_.getPredecessorKey(childName);\r\n        }\r\n    }\r\n    getFirstChildName(indexDefinition) {\r\n        const idx = this.resolveIndex_(indexDefinition);\r\n        if (idx) {\r\n            const minKey = idx.minKey();\r\n            return minKey && minKey.name;\r\n        }\r\n        else {\r\n            return this.children_.minKey();\r\n        }\r\n    }\r\n    getFirstChild(indexDefinition) {\r\n        const minKey = this.getFirstChildName(indexDefinition);\r\n        if (minKey) {\r\n            return new NamedNode(minKey, this.children_.get(minKey));\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    }\r\n    /**\r\n     * Given an index, return the key name of the largest value we have, according to that index\r\n     */\r\n    getLastChildName(indexDefinition) {\r\n        const idx = this.resolveIndex_(indexDefinition);\r\n        if (idx) {\r\n            const maxKey = idx.maxKey();\r\n            return maxKey && maxKey.name;\r\n        }\r\n        else {\r\n            return this.children_.maxKey();\r\n        }\r\n    }\r\n    getLastChild(indexDefinition) {\r\n        const maxKey = this.getLastChildName(indexDefinition);\r\n        if (maxKey) {\r\n            return new NamedNode(maxKey, this.children_.get(maxKey));\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    }\r\n    forEachChild(index, action) {\r\n        const idx = this.resolveIndex_(index);\r\n        if (idx) {\r\n            return idx.inorderTraversal(wrappedNode => {\r\n                return action(wrappedNode.name, wrappedNode.node);\r\n            });\r\n        }\r\n        else {\r\n            return this.children_.inorderTraversal(action);\r\n        }\r\n    }\r\n    getIterator(indexDefinition) {\r\n        return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);\r\n    }\r\n    getIteratorFrom(startPost, indexDefinition) {\r\n        const idx = this.resolveIndex_(indexDefinition);\r\n        if (idx) {\r\n            return idx.getIteratorFrom(startPost, key => key);\r\n        }\r\n        else {\r\n            const iterator = this.children_.getIteratorFrom(startPost.name, NamedNode.Wrap);\r\n            let next = iterator.peek();\r\n            while (next != null && indexDefinition.compare(next, startPost) < 0) {\r\n                iterator.getNext();\r\n                next = iterator.peek();\r\n            }\r\n            return iterator;\r\n        }\r\n    }\r\n    getReverseIterator(indexDefinition) {\r\n        return this.getReverseIteratorFrom(indexDefinition.maxPost(), indexDefinition);\r\n    }\r\n    getReverseIteratorFrom(endPost, indexDefinition) {\r\n        const idx = this.resolveIndex_(indexDefinition);\r\n        if (idx) {\r\n            return idx.getReverseIteratorFrom(endPost, key => {\r\n                return key;\r\n            });\r\n        }\r\n        else {\r\n            const iterator = this.children_.getReverseIteratorFrom(endPost.name, NamedNode.Wrap);\r\n            let next = iterator.peek();\r\n            while (next != null && indexDefinition.compare(next, endPost) > 0) {\r\n                iterator.getNext();\r\n                next = iterator.peek();\r\n            }\r\n            return iterator;\r\n        }\r\n    }\r\n    compareTo(other) {\r\n        if (this.isEmpty()) {\r\n            if (other.isEmpty()) {\r\n                return 0;\r\n            }\r\n            else {\r\n                return -1;\r\n            }\r\n        }\r\n        else if (other.isLeafNode() || other.isEmpty()) {\r\n            return 1;\r\n        }\r\n        else if (other === MAX_NODE) {\r\n            return -1;\r\n        }\r\n        else {\r\n            // Must be another node with children.\r\n            return 0;\r\n        }\r\n    }\r\n    withIndex(indexDefinition) {\r\n        if (indexDefinition === KEY_INDEX ||\r\n            this.indexMap_.hasIndex(indexDefinition)) {\r\n            return this;\r\n        }\r\n        else {\r\n            const newIndexMap = this.indexMap_.addIndex(indexDefinition, this.children_);\r\n            return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);\r\n        }\r\n    }\r\n    isIndexed(index) {\r\n        return index === KEY_INDEX || this.indexMap_.hasIndex(index);\r\n    }\r\n    equals(other) {\r\n        if (other === this) {\r\n            return true;\r\n        }\r\n        else if (other.isLeafNode()) {\r\n            return false;\r\n        }\r\n        else {\r\n            const otherChildrenNode = other;\r\n            if (!this.getPriority().equals(otherChildrenNode.getPriority())) {\r\n                return false;\r\n            }\r\n            else if (this.children_.count() === otherChildrenNode.children_.count()) {\r\n                const thisIter = this.getIterator(PRIORITY_INDEX);\r\n                const otherIter = otherChildrenNode.getIterator(PRIORITY_INDEX);\r\n                let thisCurrent = thisIter.getNext();\r\n                let otherCurrent = otherIter.getNext();\r\n                while (thisCurrent && otherCurrent) {\r\n                    if (thisCurrent.name !== otherCurrent.name ||\r\n                        !thisCurrent.node.equals(otherCurrent.node)) {\r\n                        return false;\r\n                    }\r\n                    thisCurrent = thisIter.getNext();\r\n                    otherCurrent = otherIter.getNext();\r\n                }\r\n                return thisCurrent === null && otherCurrent === null;\r\n            }\r\n            else {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used\r\n     * instead.\r\n     *\r\n     */\r\n    resolveIndex_(indexDefinition) {\r\n        if (indexDefinition === KEY_INDEX) {\r\n            return null;\r\n        }\r\n        else {\r\n            return this.indexMap_.get(indexDefinition.toString());\r\n        }\r\n    }\r\n}\r\nChildrenNode.INTEGER_REGEXP_ = /^(0|[1-9]\\d*)$/;\r\nclass MaxNode extends ChildrenNode {\r\n    constructor() {\r\n        super(new SortedMap(NAME_COMPARATOR), ChildrenNode.EMPTY_NODE, IndexMap.Default);\r\n    }\r\n    compareTo(other) {\r\n        if (other === this) {\r\n            return 0;\r\n        }\r\n        else {\r\n            return 1;\r\n        }\r\n    }\r\n    equals(other) {\r\n        // Not that we every compare it, but MAX_NODE is only ever equal to itself\r\n        return other === this;\r\n    }\r\n    getPriority() {\r\n        return this;\r\n    }\r\n    getImmediateChild(childName) {\r\n        return ChildrenNode.EMPTY_NODE;\r\n    }\r\n    isEmpty() {\r\n        return false;\r\n    }\r\n}\r\n/**\r\n * Marker that will sort higher than any other snapshot.\r\n */\r\nconst MAX_NODE = new MaxNode();\r\nObject.defineProperties(NamedNode, {\r\n    MIN: {\r\n        value: new NamedNode(MIN_NAME, ChildrenNode.EMPTY_NODE)\r\n    },\r\n    MAX: {\r\n        value: new NamedNode(MAX_NAME, MAX_NODE)\r\n    }\r\n});\r\n/**\r\n * Reference Extensions\r\n */\r\nKeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;\r\nLeafNode.__childrenNodeConstructor = ChildrenNode;\r\nsetMaxNode$1(MAX_NODE);\r\nsetMaxNode(MAX_NODE);\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst USE_HINZE = true;\r\n/**\r\n * Constructs a snapshot node representing the passed JSON and returns it.\r\n * @param json - JSON to create a node for.\r\n * @param priority - Optional priority to use.  This will be ignored if the\r\n * passed JSON contains a .priority property.\r\n */\r\nfunction nodeFromJSON(json, priority = null) {\r\n    if (json === null) {\r\n        return ChildrenNode.EMPTY_NODE;\r\n    }\r\n    if (typeof json === 'object' && '.priority' in json) {\r\n        priority = json['.priority'];\r\n    }\r\n    assert(priority === null ||\r\n        typeof priority === 'string' ||\r\n        typeof priority === 'number' ||\r\n        (typeof priority === 'object' && '.sv' in priority), 'Invalid priority type found: ' + typeof priority);\r\n    if (typeof json === 'object' && '.value' in json && json['.value'] !== null) {\r\n        json = json['.value'];\r\n    }\r\n    // Valid leaf nodes include non-objects or server-value wrapper objects\r\n    if (typeof json !== 'object' || '.sv' in json) {\r\n        const jsonLeaf = json;\r\n        return new LeafNode(jsonLeaf, nodeFromJSON(priority));\r\n    }\r\n    if (!(json instanceof Array) && USE_HINZE) {\r\n        const children = [];\r\n        let childrenHavePriority = false;\r\n        const hinzeJsonObj = json;\r\n        each(hinzeJsonObj, (key, child) => {\r\n            if (key.substring(0, 1) !== '.') {\r\n                // Ignore metadata nodes\r\n                const childNode = nodeFromJSON(child);\r\n                if (!childNode.isEmpty()) {\r\n                    childrenHavePriority =\r\n                        childrenHavePriority || !childNode.getPriority().isEmpty();\r\n                    children.push(new NamedNode(key, childNode));\r\n                }\r\n            }\r\n        });\r\n        if (children.length === 0) {\r\n            return ChildrenNode.EMPTY_NODE;\r\n        }\r\n        const childSet = buildChildSet(children, NAME_ONLY_COMPARATOR, namedNode => namedNode.name, NAME_COMPARATOR);\r\n        if (childrenHavePriority) {\r\n            const sortedChildSet = buildChildSet(children, PRIORITY_INDEX.getCompare());\r\n            return new ChildrenNode(childSet, nodeFromJSON(priority), new IndexMap({ '.priority': sortedChildSet }, { '.priority': PRIORITY_INDEX }));\r\n        }\r\n        else {\r\n            return new ChildrenNode(childSet, nodeFromJSON(priority), IndexMap.Default);\r\n        }\r\n    }\r\n    else {\r\n        let node = ChildrenNode.EMPTY_NODE;\r\n        each(json, (key, childData) => {\r\n            if (contains(json, key)) {\r\n                if (key.substring(0, 1) !== '.') {\r\n                    // ignore metadata nodes.\r\n                    const childNode = nodeFromJSON(childData);\r\n                    if (childNode.isLeafNode() || !childNode.isEmpty()) {\r\n                        node = node.updateImmediateChild(key, childNode);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        return node.updatePriority(nodeFromJSON(priority));\r\n    }\r\n}\r\nsetNodeFromJSON(nodeFromJSON);\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PathIndex extends Index {\r\n    constructor(indexPath_) {\r\n        super();\r\n        this.indexPath_ = indexPath_;\r\n        assert(!pathIsEmpty(indexPath_) && pathGetFront(indexPath_) !== '.priority', \"Can't create PathIndex with empty path or .priority key\");\r\n    }\r\n    extractChild(snap) {\r\n        return snap.getChild(this.indexPath_);\r\n    }\r\n    isDefinedOn(node) {\r\n        return !node.getChild(this.indexPath_).isEmpty();\r\n    }\r\n    compare(a, b) {\r\n        const aChild = this.extractChild(a.node);\r\n        const bChild = this.extractChild(b.node);\r\n        const indexCmp = aChild.compareTo(bChild);\r\n        if (indexCmp === 0) {\r\n            return nameCompare(a.name, b.name);\r\n        }\r\n        else {\r\n            return indexCmp;\r\n        }\r\n    }\r\n    makePost(indexValue, name) {\r\n        const valueNode = nodeFromJSON(indexValue);\r\n        const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, valueNode);\r\n        return new NamedNode(name, node);\r\n    }\r\n    maxPost() {\r\n        const node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, MAX_NODE);\r\n        return new NamedNode(MAX_NAME, node);\r\n    }\r\n    toString() {\r\n        return pathSlice(this.indexPath_, 0).join('/');\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ValueIndex extends Index {\r\n    compare(a, b) {\r\n        const indexCmp = a.node.compareTo(b.node);\r\n        if (indexCmp === 0) {\r\n            return nameCompare(a.name, b.name);\r\n        }\r\n        else {\r\n            return indexCmp;\r\n        }\r\n    }\r\n    isDefinedOn(node) {\r\n        return true;\r\n    }\r\n    indexedValueChanged(oldNode, newNode) {\r\n        return !oldNode.equals(newNode);\r\n    }\r\n    minPost() {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        return NamedNode.MIN;\r\n    }\r\n    maxPost() {\r\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n        return NamedNode.MAX;\r\n    }\r\n    makePost(indexValue, name) {\r\n        const valueNode = nodeFromJSON(indexValue);\r\n        return new NamedNode(name, valueNode);\r\n    }\r\n    /**\r\n     * @returns String representation for inclusion in a query spec\r\n     */\r\n    toString() {\r\n        return '.value';\r\n    }\r\n}\r\nconst VALUE_INDEX = new ValueIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Modeled after base64 web-safe chars, but ordered by ASCII.\r\nconst PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';\r\nconst MIN_PUSH_CHAR = '-';\r\nconst MAX_PUSH_CHAR = 'z';\r\nconst MAX_KEY_LEN = 786;\r\n/**\r\n * Fancy ID generator that creates 20-character string identifiers with the\r\n * following properties:\r\n *\r\n * 1. They're based on timestamp so that they sort *after* any existing ids.\r\n * 2. They contain 72-bits of random data after the timestamp so that IDs won't\r\n *    collide with other clients' IDs.\r\n * 3. They sort *lexicographically* (so the timestamp is converted to characters\r\n *    that will sort properly).\r\n * 4. They're monotonically increasing. Even if you generate more than one in\r\n *    the same timestamp, the latter ones will sort after the former ones. We do\r\n *    this by using the previous random bits but \"incrementing\" them by 1 (only\r\n *    in the case of a timestamp collision).\r\n */\r\nconst nextPushId = (function () {\r\n    // Timestamp of last push, used to prevent local collisions if you push twice\r\n    // in one ms.\r\n    let lastPushTime = 0;\r\n    // We generate 72-bits of randomness which get turned into 12 characters and\r\n    // appended to the timestamp to prevent collisions with other clients. We\r\n    // store the last characters we generated because in the event of a collision,\r\n    // we'll use those same characters except \"incremented\" by one.\r\n    const lastRandChars = [];\r\n    return function (now) {\r\n        const duplicateTime = now === lastPushTime;\r\n        lastPushTime = now;\r\n        let i;\r\n        const timeStampChars = new Array(8);\r\n        for (i = 7; i >= 0; i--) {\r\n            timeStampChars[i] = PUSH_CHARS.charAt(now % 64);\r\n            // NOTE: Can't use << here because javascript will convert to int and lose\r\n            // the upper bits.\r\n            now = Math.floor(now / 64);\r\n        }\r\n        assert(now === 0, 'Cannot push at time == 0');\r\n        let id = timeStampChars.join('');\r\n        if (!duplicateTime) {\r\n            for (i = 0; i < 12; i++) {\r\n                lastRandChars[i] = Math.floor(Math.random() * 64);\r\n            }\r\n        }\r\n        else {\r\n            // If the timestamp hasn't changed since last push, use the same random\r\n            // number, except incremented by 1.\r\n            for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {\r\n                lastRandChars[i] = 0;\r\n            }\r\n            lastRandChars[i]++;\r\n        }\r\n        for (i = 0; i < 12; i++) {\r\n            id += PUSH_CHARS.charAt(lastRandChars[i]);\r\n        }\r\n        assert(id.length === 20, 'nextPushId: Length should be 20.');\r\n        return id;\r\n    };\r\n})();\r\nconst successor = function (key) {\r\n    if (key === '' + INTEGER_32_MAX) {\r\n        // See https://firebase.google.com/docs/database/web/lists-of-data#data-order\r\n        return MIN_PUSH_CHAR;\r\n    }\r\n    const keyAsInt = tryParseInt(key);\r\n    if (keyAsInt != null) {\r\n        return '' + (keyAsInt + 1);\r\n    }\r\n    const next = new Array(key.length);\r\n    for (let i = 0; i < next.length; i++) {\r\n        next[i] = key.charAt(i);\r\n    }\r\n    if (next.length < MAX_KEY_LEN) {\r\n        next.push(MIN_PUSH_CHAR);\r\n        return next.join('');\r\n    }\r\n    let i = next.length - 1;\r\n    while (i >= 0 && next[i] === MAX_PUSH_CHAR) {\r\n        i--;\r\n    }\r\n    // `successor` was called on the largest possible key, so return the\r\n    // MAX_NAME, which sorts larger than all keys.\r\n    if (i === -1) {\r\n        return MAX_NAME;\r\n    }\r\n    const source = next[i];\r\n    const sourcePlusOne = PUSH_CHARS.charAt(PUSH_CHARS.indexOf(source) + 1);\r\n    next[i] = sourcePlusOne;\r\n    return next.slice(0, i + 1).join('');\r\n};\r\n// `key` is assumed to be non-empty.\r\nconst predecessor = function (key) {\r\n    if (key === '' + INTEGER_32_MIN) {\r\n        return MIN_NAME;\r\n    }\r\n    const keyAsInt = tryParseInt(key);\r\n    if (keyAsInt != null) {\r\n        return '' + (keyAsInt - 1);\r\n    }\r\n    const next = new Array(key.length);\r\n    for (let i = 0; i < next.length; i++) {\r\n        next[i] = key.charAt(i);\r\n    }\r\n    // If `key` ends in `MIN_PUSH_CHAR`, the largest key lexicographically\r\n    // smaller than `key`, is `key[0:key.length - 1]`. The next key smaller\r\n    // than that, `predecessor(predecessor(key))`, is\r\n    //\r\n    // `key[0:key.length - 2] + (key[key.length - 1] - 1) + \\\r\n    //   { MAX_PUSH_CHAR repeated MAX_KEY_LEN - (key.length - 1) times }\r\n    //\r\n    // analogous to increment/decrement for base-10 integers.\r\n    //\r\n    // This works because lexigographic comparison works character-by-character,\r\n    // using length as a tie-breaker if one key is a prefix of the other.\r\n    if (next[next.length - 1] === MIN_PUSH_CHAR) {\r\n        if (next.length === 1) {\r\n            // See https://firebase.google.com/docs/database/web/lists-of-data#orderbykey\r\n            return '' + INTEGER_32_MAX;\r\n        }\r\n        delete next[next.length - 1];\r\n        return next.join('');\r\n    }\r\n    // Replace the last character with it's immediate predecessor, and\r\n    // fill the suffix of the key with MAX_PUSH_CHAR. This is the\r\n    // lexicographically largest possible key smaller than `key`.\r\n    next[next.length - 1] = PUSH_CHARS.charAt(PUSH_CHARS.indexOf(next[next.length - 1]) - 1);\r\n    return next.join('') + MAX_PUSH_CHAR.repeat(MAX_KEY_LEN - next.length);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction changeValue(snapshotNode) {\r\n    return { type: \"value\" /* VALUE */, snapshotNode };\r\n}\r\nfunction changeChildAdded(childName, snapshotNode) {\r\n    return { type: \"child_added\" /* CHILD_ADDED */, snapshotNode, childName };\r\n}\r\nfunction changeChildRemoved(childName, snapshotNode) {\r\n    return { type: \"child_removed\" /* CHILD_REMOVED */, snapshotNode, childName };\r\n}\r\nfunction changeChildChanged(childName, snapshotNode, oldSnap) {\r\n    return {\r\n        type: \"child_changed\" /* CHILD_CHANGED */,\r\n        snapshotNode,\r\n        childName,\r\n        oldSnap\r\n    };\r\n}\r\nfunction changeChildMoved(childName, snapshotNode) {\r\n    return { type: \"child_moved\" /* CHILD_MOVED */, snapshotNode, childName };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Doesn't really filter nodes but applies an index to the node and keeps track of any changes\r\n */\r\nclass IndexedFilter {\r\n    constructor(index_) {\r\n        this.index_ = index_;\r\n    }\r\n    updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n        assert(snap.isIndexed(this.index_), 'A node must be indexed if only a child is updated');\r\n        const oldChild = snap.getImmediateChild(key);\r\n        // Check if anything actually changed.\r\n        if (oldChild.getChild(affectedPath).equals(newChild.getChild(affectedPath))) {\r\n            // There's an edge case where a child can enter or leave the view because affectedPath was set to null.\r\n            // In this case, affectedPath will appear null in both the old and new snapshots.  So we need\r\n            // to avoid treating these cases as \"nothing changed.\"\r\n            if (oldChild.isEmpty() === newChild.isEmpty()) {\r\n                // Nothing changed.\r\n                // This assert should be valid, but it's expensive (can dominate perf testing) so don't actually do it.\r\n                //assert(oldChild.equals(newChild), 'Old and new snapshots should be equal.');\r\n                return snap;\r\n            }\r\n        }\r\n        if (optChangeAccumulator != null) {\r\n            if (newChild.isEmpty()) {\r\n                if (snap.hasChild(key)) {\r\n                    optChangeAccumulator.trackChildChange(changeChildRemoved(key, oldChild));\r\n                }\r\n                else {\r\n                    assert(snap.isLeafNode(), 'A child remove without an old child only makes sense on a leaf node');\r\n                }\r\n            }\r\n            else if (oldChild.isEmpty()) {\r\n                optChangeAccumulator.trackChildChange(changeChildAdded(key, newChild));\r\n            }\r\n            else {\r\n                optChangeAccumulator.trackChildChange(changeChildChanged(key, newChild, oldChild));\r\n            }\r\n        }\r\n        if (snap.isLeafNode() && newChild.isEmpty()) {\r\n            return snap;\r\n        }\r\n        else {\r\n            // Make sure the node is indexed\r\n            return snap.updateImmediateChild(key, newChild).withIndex(this.index_);\r\n        }\r\n    }\r\n    updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n        if (optChangeAccumulator != null) {\r\n            if (!oldSnap.isLeafNode()) {\r\n                oldSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n                    if (!newSnap.hasChild(key)) {\r\n                        optChangeAccumulator.trackChildChange(changeChildRemoved(key, childNode));\r\n                    }\r\n                });\r\n            }\r\n            if (!newSnap.isLeafNode()) {\r\n                newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n                    if (oldSnap.hasChild(key)) {\r\n                        const oldChild = oldSnap.getImmediateChild(key);\r\n                        if (!oldChild.equals(childNode)) {\r\n                            optChangeAccumulator.trackChildChange(changeChildChanged(key, childNode, oldChild));\r\n                        }\r\n                    }\r\n                    else {\r\n                        optChangeAccumulator.trackChildChange(changeChildAdded(key, childNode));\r\n                    }\r\n                });\r\n            }\r\n        }\r\n        return newSnap.withIndex(this.index_);\r\n    }\r\n    updatePriority(oldSnap, newPriority) {\r\n        if (oldSnap.isEmpty()) {\r\n            return ChildrenNode.EMPTY_NODE;\r\n        }\r\n        else {\r\n            return oldSnap.updatePriority(newPriority);\r\n        }\r\n    }\r\n    filtersNodes() {\r\n        return false;\r\n    }\r\n    getIndexedFilter() {\r\n        return this;\r\n    }\r\n    getIndex() {\r\n        return this.index_;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node\r\n */\r\nclass RangedFilter {\r\n    constructor(params) {\r\n        this.indexedFilter_ = new IndexedFilter(params.getIndex());\r\n        this.index_ = params.getIndex();\r\n        this.startPost_ = RangedFilter.getStartPost_(params);\r\n        this.endPost_ = RangedFilter.getEndPost_(params);\r\n    }\r\n    getStartPost() {\r\n        return this.startPost_;\r\n    }\r\n    getEndPost() {\r\n        return this.endPost_;\r\n    }\r\n    matches(node) {\r\n        return (this.index_.compare(this.getStartPost(), node) <= 0 &&\r\n            this.index_.compare(node, this.getEndPost()) <= 0);\r\n    }\r\n    updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n        if (!this.matches(new NamedNode(key, newChild))) {\r\n            newChild = ChildrenNode.EMPTY_NODE;\r\n        }\r\n        return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n    }\r\n    updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n        if (newSnap.isLeafNode()) {\r\n            // Make sure we have a children node with the correct index, not a leaf node;\r\n            newSnap = ChildrenNode.EMPTY_NODE;\r\n        }\r\n        let filtered = newSnap.withIndex(this.index_);\r\n        // Don't support priorities on queries\r\n        filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n        const self = this;\r\n        newSnap.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n            if (!self.matches(new NamedNode(key, childNode))) {\r\n                filtered = filtered.updateImmediateChild(key, ChildrenNode.EMPTY_NODE);\r\n            }\r\n        });\r\n        return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n    }\r\n    updatePriority(oldSnap, newPriority) {\r\n        // Don't support priorities on queries\r\n        return oldSnap;\r\n    }\r\n    filtersNodes() {\r\n        return true;\r\n    }\r\n    getIndexedFilter() {\r\n        return this.indexedFilter_;\r\n    }\r\n    getIndex() {\r\n        return this.index_;\r\n    }\r\n    static getStartPost_(params) {\r\n        if (params.hasStart()) {\r\n            const startName = params.getIndexStartName();\r\n            return params.getIndex().makePost(params.getIndexStartValue(), startName);\r\n        }\r\n        else {\r\n            return params.getIndex().minPost();\r\n        }\r\n    }\r\n    static getEndPost_(params) {\r\n        if (params.hasEnd()) {\r\n            const endName = params.getIndexEndName();\r\n            return params.getIndex().makePost(params.getIndexEndValue(), endName);\r\n        }\r\n        else {\r\n            return params.getIndex().maxPost();\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible\r\n */\r\nclass LimitedFilter {\r\n    constructor(params) {\r\n        this.rangedFilter_ = new RangedFilter(params);\r\n        this.index_ = params.getIndex();\r\n        this.limit_ = params.getLimit();\r\n        this.reverse_ = !params.isViewFromLeft();\r\n    }\r\n    updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n        if (!this.rangedFilter_.matches(new NamedNode(key, newChild))) {\r\n            newChild = ChildrenNode.EMPTY_NODE;\r\n        }\r\n        if (snap.getImmediateChild(key).equals(newChild)) {\r\n            // No change\r\n            return snap;\r\n        }\r\n        else if (snap.numChildren() < this.limit_) {\r\n            return this.rangedFilter_\r\n                .getIndexedFilter()\r\n                .updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n        }\r\n        else {\r\n            return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);\r\n        }\r\n    }\r\n    updateFullNode(oldSnap, newSnap, optChangeAccumulator) {\r\n        let filtered;\r\n        if (newSnap.isLeafNode() || newSnap.isEmpty()) {\r\n            // Make sure we have a children node with the correct index, not a leaf node;\r\n            filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n        }\r\n        else {\r\n            if (this.limit_ * 2 < newSnap.numChildren() &&\r\n                newSnap.isIndexed(this.index_)) {\r\n                // Easier to build up a snapshot, since what we're given has more than twice the elements we want\r\n                filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n                // anchor to the startPost, endPost, or last element as appropriate\r\n                let iterator;\r\n                if (this.reverse_) {\r\n                    iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);\r\n                }\r\n                else {\r\n                    iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);\r\n                }\r\n                let count = 0;\r\n                while (iterator.hasNext() && count < this.limit_) {\r\n                    const next = iterator.getNext();\r\n                    let inRange;\r\n                    if (this.reverse_) {\r\n                        inRange =\r\n                            this.index_.compare(this.rangedFilter_.getStartPost(), next) <= 0;\r\n                    }\r\n                    else {\r\n                        inRange =\r\n                            this.index_.compare(next, this.rangedFilter_.getEndPost()) <= 0;\r\n                    }\r\n                    if (inRange) {\r\n                        filtered = filtered.updateImmediateChild(next.name, next.node);\r\n                        count++;\r\n                    }\r\n                    else {\r\n                        // if we have reached the end post, we cannot keep adding elemments\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one\r\n                filtered = newSnap.withIndex(this.index_);\r\n                // Don't support priorities on queries\r\n                filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n                let startPost;\r\n                let endPost;\r\n                let cmp;\r\n                let iterator;\r\n                if (this.reverse_) {\r\n                    iterator = filtered.getReverseIterator(this.index_);\r\n                    startPost = this.rangedFilter_.getEndPost();\r\n                    endPost = this.rangedFilter_.getStartPost();\r\n                    const indexCompare = this.index_.getCompare();\r\n                    cmp = (a, b) => indexCompare(b, a);\r\n                }\r\n                else {\r\n                    iterator = filtered.getIterator(this.index_);\r\n                    startPost = this.rangedFilter_.getStartPost();\r\n                    endPost = this.rangedFilter_.getEndPost();\r\n                    cmp = this.index_.getCompare();\r\n                }\r\n                let count = 0;\r\n                let foundStartPost = false;\r\n                while (iterator.hasNext()) {\r\n                    const next = iterator.getNext();\r\n                    if (!foundStartPost && cmp(startPost, next) <= 0) {\r\n                        // start adding\r\n                        foundStartPost = true;\r\n                    }\r\n                    const inRange = foundStartPost && count < this.limit_ && cmp(next, endPost) <= 0;\r\n                    if (inRange) {\r\n                        count++;\r\n                    }\r\n                    else {\r\n                        filtered = filtered.updateImmediateChild(next.name, ChildrenNode.EMPTY_NODE);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return this.rangedFilter_\r\n            .getIndexedFilter()\r\n            .updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n    }\r\n    updatePriority(oldSnap, newPriority) {\r\n        // Don't support priorities on queries\r\n        return oldSnap;\r\n    }\r\n    filtersNodes() {\r\n        return true;\r\n    }\r\n    getIndexedFilter() {\r\n        return this.rangedFilter_.getIndexedFilter();\r\n    }\r\n    getIndex() {\r\n        return this.index_;\r\n    }\r\n    fullLimitUpdateChild_(snap, childKey, childSnap, source, changeAccumulator) {\r\n        // TODO: rename all cache stuff etc to general snap terminology\r\n        let cmp;\r\n        if (this.reverse_) {\r\n            const indexCmp = this.index_.getCompare();\r\n            cmp = (a, b) => indexCmp(b, a);\r\n        }\r\n        else {\r\n            cmp = this.index_.getCompare();\r\n        }\r\n        const oldEventCache = snap;\r\n        assert(oldEventCache.numChildren() === this.limit_, '');\r\n        const newChildNamedNode = new NamedNode(childKey, childSnap);\r\n        const windowBoundary = this.reverse_\r\n            ? oldEventCache.getFirstChild(this.index_)\r\n            : oldEventCache.getLastChild(this.index_);\r\n        const inRange = this.rangedFilter_.matches(newChildNamedNode);\r\n        if (oldEventCache.hasChild(childKey)) {\r\n            const oldChildSnap = oldEventCache.getImmediateChild(childKey);\r\n            let nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);\r\n            while (nextChild != null &&\r\n                (nextChild.name === childKey || oldEventCache.hasChild(nextChild.name))) {\r\n                // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't\r\n                // been applied to the limited filter yet. Ignore this next child which will be updated later in\r\n                // the limited filter...\r\n                nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);\r\n            }\r\n            const compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);\r\n            const remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;\r\n            if (remainsInWindow) {\r\n                if (changeAccumulator != null) {\r\n                    changeAccumulator.trackChildChange(changeChildChanged(childKey, childSnap, oldChildSnap));\r\n                }\r\n                return oldEventCache.updateImmediateChild(childKey, childSnap);\r\n            }\r\n            else {\r\n                if (changeAccumulator != null) {\r\n                    changeAccumulator.trackChildChange(changeChildRemoved(childKey, oldChildSnap));\r\n                }\r\n                const newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode.EMPTY_NODE);\r\n                const nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);\r\n                if (nextChildInRange) {\r\n                    if (changeAccumulator != null) {\r\n                        changeAccumulator.trackChildChange(changeChildAdded(nextChild.name, nextChild.node));\r\n                    }\r\n                    return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);\r\n                }\r\n                else {\r\n                    return newEventCache;\r\n                }\r\n            }\r\n        }\r\n        else if (childSnap.isEmpty()) {\r\n            // we're deleting a node, but it was not in the window, so ignore it\r\n            return snap;\r\n        }\r\n        else if (inRange) {\r\n            if (cmp(windowBoundary, newChildNamedNode) >= 0) {\r\n                if (changeAccumulator != null) {\r\n                    changeAccumulator.trackChildChange(changeChildRemoved(windowBoundary.name, windowBoundary.node));\r\n                    changeAccumulator.trackChildChange(changeChildAdded(childKey, childSnap));\r\n                }\r\n                return oldEventCache\r\n                    .updateImmediateChild(childKey, childSnap)\r\n                    .updateImmediateChild(windowBoundary.name, ChildrenNode.EMPTY_NODE);\r\n            }\r\n            else {\r\n                return snap;\r\n            }\r\n        }\r\n        else {\r\n            return snap;\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\r\n * range to be returned for a particular location. It is assumed that validation of parameters is done at the\r\n * user-facing API level, so it is not done here.\r\n *\r\n * @internal\r\n */\r\nclass QueryParams {\r\n    constructor() {\r\n        this.limitSet_ = false;\r\n        this.startSet_ = false;\r\n        this.startNameSet_ = false;\r\n        this.startAfterSet_ = false;\r\n        this.endSet_ = false;\r\n        this.endNameSet_ = false;\r\n        this.endBeforeSet_ = false;\r\n        this.limit_ = 0;\r\n        this.viewFrom_ = '';\r\n        this.indexStartValue_ = null;\r\n        this.indexStartName_ = '';\r\n        this.indexEndValue_ = null;\r\n        this.indexEndName_ = '';\r\n        this.index_ = PRIORITY_INDEX;\r\n    }\r\n    hasStart() {\r\n        return this.startSet_;\r\n    }\r\n    hasStartAfter() {\r\n        return this.startAfterSet_;\r\n    }\r\n    hasEndBefore() {\r\n        return this.endBeforeSet_;\r\n    }\r\n    /**\r\n     * @returns True if it would return from left.\r\n     */\r\n    isViewFromLeft() {\r\n        if (this.viewFrom_ === '') {\r\n            // limit(), rather than limitToFirst or limitToLast was called.\r\n            // This means that only one of startSet_ and endSet_ is true. Use them\r\n            // to calculate which side of the view to anchor to. If neither is set,\r\n            // anchor to the end.\r\n            return this.startSet_;\r\n        }\r\n        else {\r\n            return this.viewFrom_ === \"l\" /* VIEW_FROM_LEFT */;\r\n        }\r\n    }\r\n    /**\r\n     * Only valid to call if hasStart() returns true\r\n     */\r\n    getIndexStartValue() {\r\n        assert(this.startSet_, 'Only valid if start has been set');\r\n        return this.indexStartValue_;\r\n    }\r\n    /**\r\n     * Only valid to call if hasStart() returns true.\r\n     * Returns the starting key name for the range defined by these query parameters\r\n     */\r\n    getIndexStartName() {\r\n        assert(this.startSet_, 'Only valid if start has been set');\r\n        if (this.startNameSet_) {\r\n            return this.indexStartName_;\r\n        }\r\n        else {\r\n            return MIN_NAME;\r\n        }\r\n    }\r\n    hasEnd() {\r\n        return this.endSet_;\r\n    }\r\n    /**\r\n     * Only valid to call if hasEnd() returns true.\r\n     */\r\n    getIndexEndValue() {\r\n        assert(this.endSet_, 'Only valid if end has been set');\r\n        return this.indexEndValue_;\r\n    }\r\n    /**\r\n     * Only valid to call if hasEnd() returns true.\r\n     * Returns the end key name for the range defined by these query parameters\r\n     */\r\n    getIndexEndName() {\r\n        assert(this.endSet_, 'Only valid if end has been set');\r\n        if (this.endNameSet_) {\r\n            return this.indexEndName_;\r\n        }\r\n        else {\r\n            return MAX_NAME;\r\n        }\r\n    }\r\n    hasLimit() {\r\n        return this.limitSet_;\r\n    }\r\n    /**\r\n     * @returns True if a limit has been set and it has been explicitly anchored\r\n     */\r\n    hasAnchoredLimit() {\r\n        return this.limitSet_ && this.viewFrom_ !== '';\r\n    }\r\n    /**\r\n     * Only valid to call if hasLimit() returns true\r\n     */\r\n    getLimit() {\r\n        assert(this.limitSet_, 'Only valid if limit has been set');\r\n        return this.limit_;\r\n    }\r\n    getIndex() {\r\n        return this.index_;\r\n    }\r\n    loadsAllData() {\r\n        return !(this.startSet_ || this.endSet_ || this.limitSet_);\r\n    }\r\n    isDefault() {\r\n        return this.loadsAllData() && this.index_ === PRIORITY_INDEX;\r\n    }\r\n    copy() {\r\n        const copy = new QueryParams();\r\n        copy.limitSet_ = this.limitSet_;\r\n        copy.limit_ = this.limit_;\r\n        copy.startSet_ = this.startSet_;\r\n        copy.indexStartValue_ = this.indexStartValue_;\r\n        copy.startNameSet_ = this.startNameSet_;\r\n        copy.indexStartName_ = this.indexStartName_;\r\n        copy.endSet_ = this.endSet_;\r\n        copy.indexEndValue_ = this.indexEndValue_;\r\n        copy.endNameSet_ = this.endNameSet_;\r\n        copy.indexEndName_ = this.indexEndName_;\r\n        copy.index_ = this.index_;\r\n        copy.viewFrom_ = this.viewFrom_;\r\n        return copy;\r\n    }\r\n}\r\nfunction queryParamsGetNodeFilter(queryParams) {\r\n    if (queryParams.loadsAllData()) {\r\n        return new IndexedFilter(queryParams.getIndex());\r\n    }\r\n    else if (queryParams.hasLimit()) {\r\n        return new LimitedFilter(queryParams);\r\n    }\r\n    else {\r\n        return new RangedFilter(queryParams);\r\n    }\r\n}\r\nfunction queryParamsLimitToFirst(queryParams, newLimit) {\r\n    const newParams = queryParams.copy();\r\n    newParams.limitSet_ = true;\r\n    newParams.limit_ = newLimit;\r\n    newParams.viewFrom_ = \"l\" /* VIEW_FROM_LEFT */;\r\n    return newParams;\r\n}\r\nfunction queryParamsLimitToLast(queryParams, newLimit) {\r\n    const newParams = queryParams.copy();\r\n    newParams.limitSet_ = true;\r\n    newParams.limit_ = newLimit;\r\n    newParams.viewFrom_ = \"r\" /* VIEW_FROM_RIGHT */;\r\n    return newParams;\r\n}\r\nfunction queryParamsStartAt(queryParams, indexValue, key) {\r\n    const newParams = queryParams.copy();\r\n    newParams.startSet_ = true;\r\n    if (indexValue === undefined) {\r\n        indexValue = null;\r\n    }\r\n    newParams.indexStartValue_ = indexValue;\r\n    if (key != null) {\r\n        newParams.startNameSet_ = true;\r\n        newParams.indexStartName_ = key;\r\n    }\r\n    else {\r\n        newParams.startNameSet_ = false;\r\n        newParams.indexStartName_ = '';\r\n    }\r\n    return newParams;\r\n}\r\nfunction queryParamsStartAfter(queryParams, indexValue, key) {\r\n    let params;\r\n    if (queryParams.index_ === KEY_INDEX) {\r\n        if (typeof indexValue === 'string') {\r\n            indexValue = successor(indexValue);\r\n        }\r\n        params = queryParamsStartAt(queryParams, indexValue, key);\r\n    }\r\n    else {\r\n        let childKey;\r\n        if (key == null) {\r\n            childKey = MAX_NAME;\r\n        }\r\n        else {\r\n            childKey = successor(key);\r\n        }\r\n        params = queryParamsStartAt(queryParams, indexValue, childKey);\r\n    }\r\n    params.startAfterSet_ = true;\r\n    return params;\r\n}\r\nfunction queryParamsEndAt(queryParams, indexValue, key) {\r\n    const newParams = queryParams.copy();\r\n    newParams.endSet_ = true;\r\n    if (indexValue === undefined) {\r\n        indexValue = null;\r\n    }\r\n    newParams.indexEndValue_ = indexValue;\r\n    if (key !== undefined) {\r\n        newParams.endNameSet_ = true;\r\n        newParams.indexEndName_ = key;\r\n    }\r\n    else {\r\n        newParams.endNameSet_ = false;\r\n        newParams.indexEndName_ = '';\r\n    }\r\n    return newParams;\r\n}\r\nfunction queryParamsEndBefore(queryParams, indexValue, key) {\r\n    let childKey;\r\n    let params;\r\n    if (queryParams.index_ === KEY_INDEX) {\r\n        if (typeof indexValue === 'string') {\r\n            indexValue = predecessor(indexValue);\r\n        }\r\n        params = queryParamsEndAt(queryParams, indexValue, key);\r\n    }\r\n    else {\r\n        if (key == null) {\r\n            childKey = MIN_NAME;\r\n        }\r\n        else {\r\n            childKey = predecessor(key);\r\n        }\r\n        params = queryParamsEndAt(queryParams, indexValue, childKey);\r\n    }\r\n    params.endBeforeSet_ = true;\r\n    return params;\r\n}\r\nfunction queryParamsOrderBy(queryParams, index) {\r\n    const newParams = queryParams.copy();\r\n    newParams.index_ = index;\r\n    return newParams;\r\n}\r\n/**\r\n * Returns a set of REST query string parameters representing this query.\r\n *\r\n * @returns query string parameters\r\n */\r\nfunction queryParamsToRestQueryStringParameters(queryParams) {\r\n    const qs = {};\r\n    if (queryParams.isDefault()) {\r\n        return qs;\r\n    }\r\n    let orderBy;\r\n    if (queryParams.index_ === PRIORITY_INDEX) {\r\n        orderBy = \"$priority\" /* PRIORITY_INDEX */;\r\n    }\r\n    else if (queryParams.index_ === VALUE_INDEX) {\r\n        orderBy = \"$value\" /* VALUE_INDEX */;\r\n    }\r\n    else if (queryParams.index_ === KEY_INDEX) {\r\n        orderBy = \"$key\" /* KEY_INDEX */;\r\n    }\r\n    else {\r\n        assert(queryParams.index_ instanceof PathIndex, 'Unrecognized index type!');\r\n        orderBy = queryParams.index_.toString();\r\n    }\r\n    qs[\"orderBy\" /* ORDER_BY */] = stringify(orderBy);\r\n    if (queryParams.startSet_) {\r\n        qs[\"startAt\" /* START_AT */] = stringify(queryParams.indexStartValue_);\r\n        if (queryParams.startNameSet_) {\r\n            qs[\"startAt\" /* START_AT */] +=\r\n                ',' + stringify(queryParams.indexStartName_);\r\n        }\r\n    }\r\n    if (queryParams.endSet_) {\r\n        qs[\"endAt\" /* END_AT */] = stringify(queryParams.indexEndValue_);\r\n        if (queryParams.endNameSet_) {\r\n            qs[\"endAt\" /* END_AT */] +=\r\n                ',' + stringify(queryParams.indexEndName_);\r\n        }\r\n    }\r\n    if (queryParams.limitSet_) {\r\n        if (queryParams.isViewFromLeft()) {\r\n            qs[\"limitToFirst\" /* LIMIT_TO_FIRST */] = queryParams.limit_;\r\n        }\r\n        else {\r\n            qs[\"limitToLast\" /* LIMIT_TO_LAST */] = queryParams.limit_;\r\n        }\r\n    }\r\n    return qs;\r\n}\r\nfunction queryParamsGetQueryObject(queryParams) {\r\n    const obj = {};\r\n    if (queryParams.startSet_) {\r\n        obj[\"sp\" /* INDEX_START_VALUE */] =\r\n            queryParams.indexStartValue_;\r\n        if (queryParams.startNameSet_) {\r\n            obj[\"sn\" /* INDEX_START_NAME */] =\r\n                queryParams.indexStartName_;\r\n        }\r\n    }\r\n    if (queryParams.endSet_) {\r\n        obj[\"ep\" /* INDEX_END_VALUE */] = queryParams.indexEndValue_;\r\n        if (queryParams.endNameSet_) {\r\n            obj[\"en\" /* INDEX_END_NAME */] = queryParams.indexEndName_;\r\n        }\r\n    }\r\n    if (queryParams.limitSet_) {\r\n        obj[\"l\" /* LIMIT */] = queryParams.limit_;\r\n        let viewFrom = queryParams.viewFrom_;\r\n        if (viewFrom === '') {\r\n            if (queryParams.isViewFromLeft()) {\r\n                viewFrom = \"l\" /* VIEW_FROM_LEFT */;\r\n            }\r\n            else {\r\n                viewFrom = \"r\" /* VIEW_FROM_RIGHT */;\r\n            }\r\n        }\r\n        obj[\"vf\" /* VIEW_FROM */] = viewFrom;\r\n    }\r\n    // For now, priority index is the default, so we only specify if it's some other index\r\n    if (queryParams.index_ !== PRIORITY_INDEX) {\r\n        obj[\"i\" /* INDEX */] = queryParams.index_.toString();\r\n    }\r\n    return obj;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of ServerActions that communicates with the server via REST requests.\r\n * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\r\n * persistent connection (using WebSockets or long-polling)\r\n */\r\nclass ReadonlyRestClient extends ServerActions {\r\n    /**\r\n     * @param repoInfo_ - Data about the namespace we are connecting to\r\n     * @param onDataUpdate_ - A callback for new data from the server\r\n     */\r\n    constructor(repoInfo_, onDataUpdate_, authTokenProvider_, appCheckTokenProvider_) {\r\n        super();\r\n        this.repoInfo_ = repoInfo_;\r\n        this.onDataUpdate_ = onDataUpdate_;\r\n        this.authTokenProvider_ = authTokenProvider_;\r\n        this.appCheckTokenProvider_ = appCheckTokenProvider_;\r\n        /** @private {function(...[*])} */\r\n        this.log_ = logWrapper('p:rest:');\r\n        /**\r\n         * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\r\n         * that's been removed. :-/\r\n         */\r\n        this.listens_ = {};\r\n    }\r\n    reportStats(stats) {\r\n        throw new Error('Method not implemented.');\r\n    }\r\n    static getListenId_(query, tag) {\r\n        if (tag !== undefined) {\r\n            return 'tag$' + tag;\r\n        }\r\n        else {\r\n            assert(query._queryParams.isDefault(), \"should have a tag if it's not a default query.\");\r\n            return query._path.toString();\r\n        }\r\n    }\r\n    /** @inheritDoc */\r\n    listen(query, currentHashFn, tag, onComplete) {\r\n        const pathString = query._path.toString();\r\n        this.log_('Listen called for ' + pathString + ' ' + query._queryIdentifier);\r\n        // Mark this listener so we can tell if it's removed.\r\n        const listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n        const thisListen = {};\r\n        this.listens_[listenId] = thisListen;\r\n        const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\r\n        this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\r\n            let data = result;\r\n            if (error === 404) {\r\n                data = null;\r\n                error = null;\r\n            }\r\n            if (error === null) {\r\n                this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\r\n            }\r\n            if (safeGet(this.listens_, listenId) === thisListen) {\r\n                let status;\r\n                if (!error) {\r\n                    status = 'ok';\r\n                }\r\n                else if (error === 401) {\r\n                    status = 'permission_denied';\r\n                }\r\n                else {\r\n                    status = 'rest_error:' + error;\r\n                }\r\n                onComplete(status, null);\r\n            }\r\n        });\r\n    }\r\n    /** @inheritDoc */\r\n    unlisten(query, tag) {\r\n        const listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n        delete this.listens_[listenId];\r\n    }\r\n    get(query) {\r\n        const queryStringParameters = queryParamsToRestQueryStringParameters(query._queryParams);\r\n        const pathString = query._path.toString();\r\n        const deferred = new Deferred();\r\n        this.restRequest_(pathString + '.json', queryStringParameters, (error, result) => {\r\n            let data = result;\r\n            if (error === 404) {\r\n                data = null;\r\n                error = null;\r\n            }\r\n            if (error === null) {\r\n                this.onDataUpdate_(pathString, data, \r\n                /*isMerge=*/ false, \r\n                /*tag=*/ null);\r\n                deferred.resolve(data);\r\n            }\r\n            else {\r\n                deferred.reject(new Error(data));\r\n            }\r\n        });\r\n        return deferred.promise;\r\n    }\r\n    /** @inheritDoc */\r\n    refreshAuthToken(token) {\r\n        // no-op since we just always call getToken.\r\n    }\r\n    /**\r\n     * Performs a REST request to the given path, with the provided query string parameters,\r\n     * and any auth credentials we have.\r\n     */\r\n    restRequest_(pathString, queryStringParameters = {}, callback) {\r\n        queryStringParameters['format'] = 'export';\r\n        return Promise.all([\r\n            this.authTokenProvider_.getToken(/*forceRefresh=*/ false),\r\n            this.appCheckTokenProvider_.getToken(/*forceRefresh=*/ false)\r\n        ]).then(([authToken, appCheckToken]) => {\r\n            if (authToken && authToken.accessToken) {\r\n                queryStringParameters['auth'] = authToken.accessToken;\r\n            }\r\n            if (appCheckToken && appCheckToken.token) {\r\n                queryStringParameters['ac'] = appCheckToken.token;\r\n            }\r\n            const url = (this.repoInfo_.secure ? 'https://' : 'http://') +\r\n                this.repoInfo_.host +\r\n                pathString +\r\n                '?' +\r\n                'ns=' +\r\n                this.repoInfo_.namespace +\r\n                querystring(queryStringParameters);\r\n            this.log_('Sending REST request for ' + url);\r\n            const xhr = new XMLHttpRequest();\r\n            xhr.onreadystatechange = () => {\r\n                if (callback && xhr.readyState === 4) {\r\n                    this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);\r\n                    let res = null;\r\n                    if (xhr.status >= 200 && xhr.status < 300) {\r\n                        try {\r\n                            res = jsonEval(xhr.responseText);\r\n                        }\r\n                        catch (e) {\r\n                            warn('Failed to parse JSON response for ' +\r\n                                url +\r\n                                ': ' +\r\n                                xhr.responseText);\r\n                        }\r\n                        callback(null, res);\r\n                    }\r\n                    else {\r\n                        // 401 and 404 are expected.\r\n                        if (xhr.status !== 401 && xhr.status !== 404) {\r\n                            warn('Got unsuccessful REST response for ' +\r\n                                url +\r\n                                ' Status: ' +\r\n                                xhr.status);\r\n                        }\r\n                        callback(xhr.status);\r\n                    }\r\n                    callback = null;\r\n                }\r\n            };\r\n            xhr.open('GET', url, /*asynchronous=*/ true);\r\n            xhr.send();\r\n        });\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Mutable object which basically just stores a reference to the \"latest\" immutable snapshot.\r\n */\r\nclass SnapshotHolder {\r\n    constructor() {\r\n        this.rootNode_ = ChildrenNode.EMPTY_NODE;\r\n    }\r\n    getNode(path) {\r\n        return this.rootNode_.getChild(path);\r\n    }\r\n    updateSnapshot(path, newSnapshotNode) {\r\n        this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newSparseSnapshotTree() {\r\n    return {\r\n        value: null,\r\n        children: new Map()\r\n    };\r\n}\r\n/**\r\n * Stores the given node at the specified path. If there is already a node\r\n * at a shallower path, it merges the new data into that snapshot node.\r\n *\r\n * @param path - Path to look up snapshot for.\r\n * @param data - The new data, or null.\r\n */\r\nfunction sparseSnapshotTreeRemember(sparseSnapshotTree, path, data) {\r\n    if (pathIsEmpty(path)) {\r\n        sparseSnapshotTree.value = data;\r\n        sparseSnapshotTree.children.clear();\r\n    }\r\n    else if (sparseSnapshotTree.value !== null) {\r\n        sparseSnapshotTree.value = sparseSnapshotTree.value.updateChild(path, data);\r\n    }\r\n    else {\r\n        const childKey = pathGetFront(path);\r\n        if (!sparseSnapshotTree.children.has(childKey)) {\r\n            sparseSnapshotTree.children.set(childKey, newSparseSnapshotTree());\r\n        }\r\n        const child = sparseSnapshotTree.children.get(childKey);\r\n        path = pathPopFront(path);\r\n        sparseSnapshotTreeRemember(child, path, data);\r\n    }\r\n}\r\n/**\r\n * Purge the data at path from the cache.\r\n *\r\n * @param path - Path to look up snapshot for.\r\n * @returns True if this node should now be removed.\r\n */\r\nfunction sparseSnapshotTreeForget(sparseSnapshotTree, path) {\r\n    if (pathIsEmpty(path)) {\r\n        sparseSnapshotTree.value = null;\r\n        sparseSnapshotTree.children.clear();\r\n        return true;\r\n    }\r\n    else {\r\n        if (sparseSnapshotTree.value !== null) {\r\n            if (sparseSnapshotTree.value.isLeafNode()) {\r\n                // We're trying to forget a node that doesn't exist\r\n                return false;\r\n            }\r\n            else {\r\n                const value = sparseSnapshotTree.value;\r\n                sparseSnapshotTree.value = null;\r\n                value.forEachChild(PRIORITY_INDEX, (key, tree) => {\r\n                    sparseSnapshotTreeRemember(sparseSnapshotTree, new Path(key), tree);\r\n                });\r\n                return sparseSnapshotTreeForget(sparseSnapshotTree, path);\r\n            }\r\n        }\r\n        else if (sparseSnapshotTree.children.size > 0) {\r\n            const childKey = pathGetFront(path);\r\n            path = pathPopFront(path);\r\n            if (sparseSnapshotTree.children.has(childKey)) {\r\n                const safeToRemove = sparseSnapshotTreeForget(sparseSnapshotTree.children.get(childKey), path);\r\n                if (safeToRemove) {\r\n                    sparseSnapshotTree.children.delete(childKey);\r\n                }\r\n            }\r\n            return sparseSnapshotTree.children.size === 0;\r\n        }\r\n        else {\r\n            return true;\r\n        }\r\n    }\r\n}\r\n/**\r\n * Recursively iterates through all of the stored tree and calls the\r\n * callback on each one.\r\n *\r\n * @param prefixPath - Path to look up node for.\r\n * @param func - The function to invoke for each tree.\r\n */\r\nfunction sparseSnapshotTreeForEachTree(sparseSnapshotTree, prefixPath, func) {\r\n    if (sparseSnapshotTree.value !== null) {\r\n        func(prefixPath, sparseSnapshotTree.value);\r\n    }\r\n    else {\r\n        sparseSnapshotTreeForEachChild(sparseSnapshotTree, (key, tree) => {\r\n            const path = new Path(prefixPath.toString() + '/' + key);\r\n            sparseSnapshotTreeForEachTree(tree, path, func);\r\n        });\r\n    }\r\n}\r\n/**\r\n * Iterates through each immediate child and triggers the callback.\r\n * Only seems to be used in tests.\r\n *\r\n * @param func - The function to invoke for each child.\r\n */\r\nfunction sparseSnapshotTreeForEachChild(sparseSnapshotTree, func) {\r\n    sparseSnapshotTree.children.forEach((tree, key) => {\r\n        func(key, tree);\r\n    });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns the delta from the previous call to get stats.\r\n *\r\n * @param collection_ - The collection to \"listen\" to.\r\n */\r\nclass StatsListener {\r\n    constructor(collection_) {\r\n        this.collection_ = collection_;\r\n        this.last_ = null;\r\n    }\r\n    get() {\r\n        const newStats = this.collection_.get();\r\n        const delta = Object.assign({}, newStats);\r\n        if (this.last_) {\r\n            each(this.last_, (stat, value) => {\r\n                delta[stat] = delta[stat] - value;\r\n            });\r\n        }\r\n        this.last_ = newStats;\r\n        return delta;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably\r\n// happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10\r\n// seconds to try to ensure the Firebase connection is established / settled.\r\nconst FIRST_STATS_MIN_TIME = 10 * 1000;\r\nconst FIRST_STATS_MAX_TIME = 30 * 1000;\r\n// We'll continue to report stats on average every 5 minutes.\r\nconst REPORT_STATS_INTERVAL = 5 * 60 * 1000;\r\nclass StatsReporter {\r\n    constructor(collection, server_) {\r\n        this.server_ = server_;\r\n        this.statsToReport_ = {};\r\n        this.statsListener_ = new StatsListener(collection);\r\n        const timeout = FIRST_STATS_MIN_TIME +\r\n            (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();\r\n        setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));\r\n    }\r\n    reportStats_() {\r\n        const stats = this.statsListener_.get();\r\n        const reportedStats = {};\r\n        let haveStatsToReport = false;\r\n        each(stats, (stat, value) => {\r\n            if (value > 0 && contains(this.statsToReport_, stat)) {\r\n                reportedStats[stat] = value;\r\n                haveStatsToReport = true;\r\n            }\r\n        });\r\n        if (haveStatsToReport) {\r\n            this.server_.reportStats(reportedStats);\r\n        }\r\n        // queue our next run.\r\n        setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL));\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n *\r\n * @enum\r\n */\r\nvar OperationType;\r\n(function (OperationType) {\r\n    OperationType[OperationType[\"OVERWRITE\"] = 0] = \"OVERWRITE\";\r\n    OperationType[OperationType[\"MERGE\"] = 1] = \"MERGE\";\r\n    OperationType[OperationType[\"ACK_USER_WRITE\"] = 2] = \"ACK_USER_WRITE\";\r\n    OperationType[OperationType[\"LISTEN_COMPLETE\"] = 3] = \"LISTEN_COMPLETE\";\r\n})(OperationType || (OperationType = {}));\r\nfunction newOperationSourceUser() {\r\n    return {\r\n        fromUser: true,\r\n        fromServer: false,\r\n        queryId: null,\r\n        tagged: false\r\n    };\r\n}\r\nfunction newOperationSourceServer() {\r\n    return {\r\n        fromUser: false,\r\n        fromServer: true,\r\n        queryId: null,\r\n        tagged: false\r\n    };\r\n}\r\nfunction newOperationSourceServerTaggedQuery(queryId) {\r\n    return {\r\n        fromUser: false,\r\n        fromServer: true,\r\n        queryId,\r\n        tagged: true\r\n    };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass AckUserWrite {\r\n    /**\r\n     * @param affectedTree - A tree containing true for each affected path. Affected paths can't overlap.\r\n     */\r\n    constructor(\r\n    /** @inheritDoc */ path, \r\n    /** @inheritDoc */ affectedTree, \r\n    /** @inheritDoc */ revert) {\r\n        this.path = path;\r\n        this.affectedTree = affectedTree;\r\n        this.revert = revert;\r\n        /** @inheritDoc */\r\n        this.type = OperationType.ACK_USER_WRITE;\r\n        /** @inheritDoc */\r\n        this.source = newOperationSourceUser();\r\n    }\r\n    operationForChild(childName) {\r\n        if (!pathIsEmpty(this.path)) {\r\n            assert(pathGetFront(this.path) === childName, 'operationForChild called for unrelated child.');\r\n            return new AckUserWrite(pathPopFront(this.path), this.affectedTree, this.revert);\r\n        }\r\n        else if (this.affectedTree.value != null) {\r\n            assert(this.affectedTree.children.isEmpty(), 'affectedTree should not have overlapping affected paths.');\r\n            // All child locations are affected as well; just return same operation.\r\n            return this;\r\n        }\r\n        else {\r\n            const childTree = this.affectedTree.subtree(new Path(childName));\r\n            return new AckUserWrite(newEmptyPath(), childTree, this.revert);\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ListenComplete {\r\n    constructor(source, path) {\r\n        this.source = source;\r\n        this.path = path;\r\n        /** @inheritDoc */\r\n        this.type = OperationType.LISTEN_COMPLETE;\r\n    }\r\n    operationForChild(childName) {\r\n        if (pathIsEmpty(this.path)) {\r\n            return new ListenComplete(this.source, newEmptyPath());\r\n        }\r\n        else {\r\n            return new ListenComplete(this.source, pathPopFront(this.path));\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Overwrite {\r\n    constructor(source, path, snap) {\r\n        this.source = source;\r\n        this.path = path;\r\n        this.snap = snap;\r\n        /** @inheritDoc */\r\n        this.type = OperationType.OVERWRITE;\r\n    }\r\n    operationForChild(childName) {\r\n        if (pathIsEmpty(this.path)) {\r\n            return new Overwrite(this.source, newEmptyPath(), this.snap.getImmediateChild(childName));\r\n        }\r\n        else {\r\n            return new Overwrite(this.source, pathPopFront(this.path), this.snap);\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Merge {\r\n    constructor(\r\n    /** @inheritDoc */ source, \r\n    /** @inheritDoc */ path, \r\n    /** @inheritDoc */ children) {\r\n        this.source = source;\r\n        this.path = path;\r\n        this.children = children;\r\n        /** @inheritDoc */\r\n        this.type = OperationType.MERGE;\r\n    }\r\n    operationForChild(childName) {\r\n        if (pathIsEmpty(this.path)) {\r\n            const childTree = this.children.subtree(new Path(childName));\r\n            if (childTree.isEmpty()) {\r\n                // This child is unaffected\r\n                return null;\r\n            }\r\n            else if (childTree.value) {\r\n                // We have a snapshot for the child in question.  This becomes an overwrite of the child.\r\n                return new Overwrite(this.source, newEmptyPath(), childTree.value);\r\n            }\r\n            else {\r\n                // This is a merge at a deeper level\r\n                return new Merge(this.source, newEmptyPath(), childTree);\r\n            }\r\n        }\r\n        else {\r\n            assert(pathGetFront(this.path) === childName, \"Can't get a merge for a child not on the path of the operation\");\r\n            return new Merge(this.source, pathPopFront(this.path), this.children);\r\n        }\r\n    }\r\n    toString() {\r\n        return ('Operation(' +\r\n            this.path +\r\n            ': ' +\r\n            this.source.toString() +\r\n            ' merge: ' +\r\n            this.children.toString() +\r\n            ')');\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A cache node only stores complete children. Additionally it holds a flag whether the node can be considered fully\r\n * initialized in the sense that we know at one point in time this represented a valid state of the world, e.g.\r\n * initialized with data from the server, or a complete overwrite by the client. The filtered flag also tracks\r\n * whether a node potentially had children removed due to a filter.\r\n */\r\nclass CacheNode {\r\n    constructor(node_, fullyInitialized_, filtered_) {\r\n        this.node_ = node_;\r\n        this.fullyInitialized_ = fullyInitialized_;\r\n        this.filtered_ = filtered_;\r\n    }\r\n    /**\r\n     * Returns whether this node was fully initialized with either server data or a complete overwrite by the client\r\n     */\r\n    isFullyInitialized() {\r\n        return this.fullyInitialized_;\r\n    }\r\n    /**\r\n     * Returns whether this node is potentially missing children due to a filter applied to the node\r\n     */\r\n    isFiltered() {\r\n        return this.filtered_;\r\n    }\r\n    isCompleteForPath(path) {\r\n        if (pathIsEmpty(path)) {\r\n            return this.isFullyInitialized() && !this.filtered_;\r\n        }\r\n        const childKey = pathGetFront(path);\r\n        return this.isCompleteForChild(childKey);\r\n    }\r\n    isCompleteForChild(key) {\r\n        return ((this.isFullyInitialized() && !this.filtered_) || this.node_.hasChild(key));\r\n    }\r\n    getNode() {\r\n        return this.node_;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An EventGenerator is used to convert \"raw\" changes (Change) as computed by the\r\n * CacheDiffer into actual events (Event) that can be raised.  See generateEventsForChanges()\r\n * for details.\r\n *\r\n */\r\nclass EventGenerator {\r\n    constructor(query_) {\r\n        this.query_ = query_;\r\n        this.index_ = this.query_._queryParams.getIndex();\r\n    }\r\n}\r\n/**\r\n * Given a set of raw changes (no moved events and prevName not specified yet), and a set of\r\n * EventRegistrations that should be notified of these changes, generate the actual events to be raised.\r\n *\r\n * Notes:\r\n *  - child_moved events will be synthesized at this time for any child_changed events that affect\r\n *    our index.\r\n *  - prevName will be calculated based on the index ordering.\r\n */\r\nfunction eventGeneratorGenerateEventsForChanges(eventGenerator, changes, eventCache, eventRegistrations) {\r\n    const events = [];\r\n    const moves = [];\r\n    changes.forEach(change => {\r\n        if (change.type === \"child_changed\" /* CHILD_CHANGED */ &&\r\n            eventGenerator.index_.indexedValueChanged(change.oldSnap, change.snapshotNode)) {\r\n            moves.push(changeChildMoved(change.childName, change.snapshotNode));\r\n        }\r\n    });\r\n    eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_removed\" /* CHILD_REMOVED */, changes, eventRegistrations, eventCache);\r\n    eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_added\" /* CHILD_ADDED */, changes, eventRegistrations, eventCache);\r\n    eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_moved\" /* CHILD_MOVED */, moves, eventRegistrations, eventCache);\r\n    eventGeneratorGenerateEventsForType(eventGenerator, events, \"child_changed\" /* CHILD_CHANGED */, changes, eventRegistrations, eventCache);\r\n    eventGeneratorGenerateEventsForType(eventGenerator, events, \"value\" /* VALUE */, changes, eventRegistrations, eventCache);\r\n    return events;\r\n}\r\n/**\r\n * Given changes of a single change type, generate the corresponding events.\r\n */\r\nfunction eventGeneratorGenerateEventsForType(eventGenerator, events, eventType, changes, registrations, eventCache) {\r\n    const filteredChanges = changes.filter(change => change.type === eventType);\r\n    filteredChanges.sort((a, b) => eventGeneratorCompareChanges(eventGenerator, a, b));\r\n    filteredChanges.forEach(change => {\r\n        const materializedChange = eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache);\r\n        registrations.forEach(registration => {\r\n            if (registration.respondsTo(change.type)) {\r\n                events.push(registration.createEvent(materializedChange, eventGenerator.query_));\r\n            }\r\n        });\r\n    });\r\n}\r\nfunction eventGeneratorMaterializeSingleChange(eventGenerator, change, eventCache) {\r\n    if (change.type === 'value' || change.type === 'child_removed') {\r\n        return change;\r\n    }\r\n    else {\r\n        change.prevName = eventCache.getPredecessorChildName(change.childName, change.snapshotNode, eventGenerator.index_);\r\n        return change;\r\n    }\r\n}\r\nfunction eventGeneratorCompareChanges(eventGenerator, a, b) {\r\n    if (a.childName == null || b.childName == null) {\r\n        throw assertionError('Should only compare child_ events.');\r\n    }\r\n    const aWrapped = new NamedNode(a.childName, a.snapshotNode);\r\n    const bWrapped = new NamedNode(b.childName, b.snapshotNode);\r\n    return eventGenerator.index_.compare(aWrapped, bWrapped);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newViewCache(eventCache, serverCache) {\r\n    return { eventCache, serverCache };\r\n}\r\nfunction viewCacheUpdateEventSnap(viewCache, eventSnap, complete, filtered) {\r\n    return newViewCache(new CacheNode(eventSnap, complete, filtered), viewCache.serverCache);\r\n}\r\nfunction viewCacheUpdateServerSnap(viewCache, serverSnap, complete, filtered) {\r\n    return newViewCache(viewCache.eventCache, new CacheNode(serverSnap, complete, filtered));\r\n}\r\nfunction viewCacheGetCompleteEventSnap(viewCache) {\r\n    return viewCache.eventCache.isFullyInitialized()\r\n        ? viewCache.eventCache.getNode()\r\n        : null;\r\n}\r\nfunction viewCacheGetCompleteServerSnap(viewCache) {\r\n    return viewCache.serverCache.isFullyInitialized()\r\n        ? viewCache.serverCache.getNode()\r\n        : null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet emptyChildrenSingleton;\r\n/**\r\n * Singleton empty children collection.\r\n *\r\n */\r\nconst EmptyChildren = () => {\r\n    if (!emptyChildrenSingleton) {\r\n        emptyChildrenSingleton = new SortedMap(stringCompare);\r\n    }\r\n    return emptyChildrenSingleton;\r\n};\r\n/**\r\n * A tree with immutable elements.\r\n */\r\nclass ImmutableTree {\r\n    constructor(value, children = EmptyChildren()) {\r\n        this.value = value;\r\n        this.children = children;\r\n    }\r\n    static fromObject(obj) {\r\n        let tree = new ImmutableTree(null);\r\n        each(obj, (childPath, childSnap) => {\r\n            tree = tree.set(new Path(childPath), childSnap);\r\n        });\r\n        return tree;\r\n    }\r\n    /**\r\n     * True if the value is empty and there are no children\r\n     */\r\n    isEmpty() {\r\n        return this.value === null && this.children.isEmpty();\r\n    }\r\n    /**\r\n     * Given a path and predicate, return the first node and the path to that node\r\n     * where the predicate returns true.\r\n     *\r\n     * TODO Do a perf test -- If we're creating a bunch of `{path: value:}`\r\n     * objects on the way back out, it may be better to pass down a pathSoFar obj.\r\n     *\r\n     * @param relativePath - The remainder of the path\r\n     * @param predicate - The predicate to satisfy to return a node\r\n     */\r\n    findRootMostMatchingPathAndValue(relativePath, predicate) {\r\n        if (this.value != null && predicate(this.value)) {\r\n            return { path: newEmptyPath(), value: this.value };\r\n        }\r\n        else {\r\n            if (pathIsEmpty(relativePath)) {\r\n                return null;\r\n            }\r\n            else {\r\n                const front = pathGetFront(relativePath);\r\n                const child = this.children.get(front);\r\n                if (child !== null) {\r\n                    const childExistingPathAndValue = child.findRootMostMatchingPathAndValue(pathPopFront(relativePath), predicate);\r\n                    if (childExistingPathAndValue != null) {\r\n                        const fullPath = pathChild(new Path(front), childExistingPathAndValue.path);\r\n                        return { path: fullPath, value: childExistingPathAndValue.value };\r\n                    }\r\n                    else {\r\n                        return null;\r\n                    }\r\n                }\r\n                else {\r\n                    return null;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Find, if it exists, the shortest subpath of the given path that points a defined\r\n     * value in the tree\r\n     */\r\n    findRootMostValueAndPath(relativePath) {\r\n        return this.findRootMostMatchingPathAndValue(relativePath, () => true);\r\n    }\r\n    /**\r\n     * @returns The subtree at the given path\r\n     */\r\n    subtree(relativePath) {\r\n        if (pathIsEmpty(relativePath)) {\r\n            return this;\r\n        }\r\n        else {\r\n            const front = pathGetFront(relativePath);\r\n            const childTree = this.children.get(front);\r\n            if (childTree !== null) {\r\n                return childTree.subtree(pathPopFront(relativePath));\r\n            }\r\n            else {\r\n                return new ImmutableTree(null);\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Sets a value at the specified path.\r\n     *\r\n     * @param relativePath - Path to set value at.\r\n     * @param toSet - Value to set.\r\n     * @returns Resulting tree.\r\n     */\r\n    set(relativePath, toSet) {\r\n        if (pathIsEmpty(relativePath)) {\r\n            return new ImmutableTree(toSet, this.children);\r\n        }\r\n        else {\r\n            const front = pathGetFront(relativePath);\r\n            const child = this.children.get(front) || new ImmutableTree(null);\r\n            const newChild = child.set(pathPopFront(relativePath), toSet);\r\n            const newChildren = this.children.insert(front, newChild);\r\n            return new ImmutableTree(this.value, newChildren);\r\n        }\r\n    }\r\n    /**\r\n     * Removes the value at the specified path.\r\n     *\r\n     * @param relativePath - Path to value to remove.\r\n     * @returns Resulting tree.\r\n     */\r\n    remove(relativePath) {\r\n        if (pathIsEmpty(relativePath)) {\r\n            if (this.children.isEmpty()) {\r\n                return new ImmutableTree(null);\r\n            }\r\n            else {\r\n                return new ImmutableTree(null, this.children);\r\n            }\r\n        }\r\n        else {\r\n            const front = pathGetFront(relativePath);\r\n            const child = this.children.get(front);\r\n            if (child) {\r\n                const newChild = child.remove(pathPopFront(relativePath));\r\n                let newChildren;\r\n                if (newChild.isEmpty()) {\r\n                    newChildren = this.children.remove(front);\r\n                }\r\n                else {\r\n                    newChildren = this.children.insert(front, newChild);\r\n                }\r\n                if (this.value === null && newChildren.isEmpty()) {\r\n                    return new ImmutableTree(null);\r\n                }\r\n                else {\r\n                    return new ImmutableTree(this.value, newChildren);\r\n                }\r\n            }\r\n            else {\r\n                return this;\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Gets a value from the tree.\r\n     *\r\n     * @param relativePath - Path to get value for.\r\n     * @returns Value at path, or null.\r\n     */\r\n    get(relativePath) {\r\n        if (pathIsEmpty(relativePath)) {\r\n            return this.value;\r\n        }\r\n        else {\r\n            const front = pathGetFront(relativePath);\r\n            const child = this.children.get(front);\r\n            if (child) {\r\n                return child.get(pathPopFront(relativePath));\r\n            }\r\n            else {\r\n                return null;\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Replace the subtree at the specified path with the given new tree.\r\n     *\r\n     * @param relativePath - Path to replace subtree for.\r\n     * @param newTree - New tree.\r\n     * @returns Resulting tree.\r\n     */\r\n    setTree(relativePath, newTree) {\r\n        if (pathIsEmpty(relativePath)) {\r\n            return newTree;\r\n        }\r\n        else {\r\n            const front = pathGetFront(relativePath);\r\n            const child = this.children.get(front) || new ImmutableTree(null);\r\n            const newChild = child.setTree(pathPopFront(relativePath), newTree);\r\n            let newChildren;\r\n            if (newChild.isEmpty()) {\r\n                newChildren = this.children.remove(front);\r\n            }\r\n            else {\r\n                newChildren = this.children.insert(front, newChild);\r\n            }\r\n            return new ImmutableTree(this.value, newChildren);\r\n        }\r\n    }\r\n    /**\r\n     * Performs a depth first fold on this tree. Transforms a tree into a single\r\n     * value, given a function that operates on the path to a node, an optional\r\n     * current value, and a map of child names to folded subtrees\r\n     */\r\n    fold(fn) {\r\n        return this.fold_(newEmptyPath(), fn);\r\n    }\r\n    /**\r\n     * Recursive helper for public-facing fold() method\r\n     */\r\n    fold_(pathSoFar, fn) {\r\n        const accum = {};\r\n        this.children.inorderTraversal((childKey, childTree) => {\r\n            accum[childKey] = childTree.fold_(pathChild(pathSoFar, childKey), fn);\r\n        });\r\n        return fn(pathSoFar, this.value, accum);\r\n    }\r\n    /**\r\n     * Find the first matching value on the given path. Return the result of applying f to it.\r\n     */\r\n    findOnPath(path, f) {\r\n        return this.findOnPath_(path, newEmptyPath(), f);\r\n    }\r\n    findOnPath_(pathToFollow, pathSoFar, f) {\r\n        const result = this.value ? f(pathSoFar, this.value) : false;\r\n        if (result) {\r\n            return result;\r\n        }\r\n        else {\r\n            if (pathIsEmpty(pathToFollow)) {\r\n                return null;\r\n            }\r\n            else {\r\n                const front = pathGetFront(pathToFollow);\r\n                const nextChild = this.children.get(front);\r\n                if (nextChild) {\r\n                    return nextChild.findOnPath_(pathPopFront(pathToFollow), pathChild(pathSoFar, front), f);\r\n                }\r\n                else {\r\n                    return null;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    foreachOnPath(path, f) {\r\n        return this.foreachOnPath_(path, newEmptyPath(), f);\r\n    }\r\n    foreachOnPath_(pathToFollow, currentRelativePath, f) {\r\n        if (pathIsEmpty(pathToFollow)) {\r\n            return this;\r\n        }\r\n        else {\r\n            if (this.value) {\r\n                f(currentRelativePath, this.value);\r\n            }\r\n            const front = pathGetFront(pathToFollow);\r\n            const nextChild = this.children.get(front);\r\n            if (nextChild) {\r\n                return nextChild.foreachOnPath_(pathPopFront(pathToFollow), pathChild(currentRelativePath, front), f);\r\n            }\r\n            else {\r\n                return new ImmutableTree(null);\r\n            }\r\n        }\r\n    }\r\n    /**\r\n     * Calls the given function for each node in the tree that has a value.\r\n     *\r\n     * @param f - A function to be called with the path from the root of the tree to\r\n     * a node, and the value at that node. Called in depth-first order.\r\n     */\r\n    foreach(f) {\r\n        this.foreach_(newEmptyPath(), f);\r\n    }\r\n    foreach_(currentRelativePath, f) {\r\n        this.children.inorderTraversal((childName, childTree) => {\r\n            childTree.foreach_(pathChild(currentRelativePath, childName), f);\r\n        });\r\n        if (this.value) {\r\n            f(currentRelativePath, this.value);\r\n        }\r\n    }\r\n    foreachChild(f) {\r\n        this.children.inorderTraversal((childName, childTree) => {\r\n            if (childTree.value) {\r\n                f(childName, childTree.value);\r\n            }\r\n        });\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with\r\n * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write\r\n * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write\r\n * to reflect the write added.\r\n */\r\nclass CompoundWrite {\r\n    constructor(writeTree_) {\r\n        this.writeTree_ = writeTree_;\r\n    }\r\n    static empty() {\r\n        return new CompoundWrite(new ImmutableTree(null));\r\n    }\r\n}\r\nfunction compoundWriteAddWrite(compoundWrite, path, node) {\r\n    if (pathIsEmpty(path)) {\r\n        return new CompoundWrite(new ImmutableTree(node));\r\n    }\r\n    else {\r\n        const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\r\n        if (rootmost != null) {\r\n            const rootMostPath = rootmost.path;\r\n            let value = rootmost.value;\r\n            const relativePath = newRelativePath(rootMostPath, path);\r\n            value = value.updateChild(relativePath, node);\r\n            return new CompoundWrite(compoundWrite.writeTree_.set(rootMostPath, value));\r\n        }\r\n        else {\r\n            const subtree = new ImmutableTree(node);\r\n            const newWriteTree = compoundWrite.writeTree_.setTree(path, subtree);\r\n            return new CompoundWrite(newWriteTree);\r\n        }\r\n    }\r\n}\r\nfunction compoundWriteAddWrites(compoundWrite, path, updates) {\r\n    let newWrite = compoundWrite;\r\n    each(updates, (childKey, node) => {\r\n        newWrite = compoundWriteAddWrite(newWrite, pathChild(path, childKey), node);\r\n    });\r\n    return newWrite;\r\n}\r\n/**\r\n * Will remove a write at the given path and deeper paths. This will <em>not</em> modify a write at a higher\r\n * location, which must be removed by calling this method with that path.\r\n *\r\n * @param compoundWrite - The CompoundWrite to remove.\r\n * @param path - The path at which a write and all deeper writes should be removed\r\n * @returns The new CompoundWrite with the removed path\r\n */\r\nfunction compoundWriteRemoveWrite(compoundWrite, path) {\r\n    if (pathIsEmpty(path)) {\r\n        return CompoundWrite.empty();\r\n    }\r\n    else {\r\n        const newWriteTree = compoundWrite.writeTree_.setTree(path, new ImmutableTree(null));\r\n        return new CompoundWrite(newWriteTree);\r\n    }\r\n}\r\n/**\r\n * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be\r\n * considered \"complete\".\r\n *\r\n * @param compoundWrite - The CompoundWrite to check.\r\n * @param path - The path to check for\r\n * @returns Whether there is a complete write at that path\r\n */\r\nfunction compoundWriteHasCompleteWrite(compoundWrite, path) {\r\n    return compoundWriteGetCompleteNode(compoundWrite, path) != null;\r\n}\r\n/**\r\n * Returns a node for a path if and only if the node is a \"complete\" overwrite at that path. This will not aggregate\r\n * writes from deeper paths, but will return child nodes from a more shallow path.\r\n *\r\n * @param compoundWrite - The CompoundWrite to get the node from.\r\n * @param path - The path to get a complete write\r\n * @returns The node if complete at that path, or null otherwise.\r\n */\r\nfunction compoundWriteGetCompleteNode(compoundWrite, path) {\r\n    const rootmost = compoundWrite.writeTree_.findRootMostValueAndPath(path);\r\n    if (rootmost != null) {\r\n        return compoundWrite.writeTree_\r\n            .get(rootmost.path)\r\n            .getChild(newRelativePath(rootmost.path, path));\r\n    }\r\n    else {\r\n        return null;\r\n    }\r\n}\r\n/**\r\n * Returns all children that are guaranteed to be a complete overwrite.\r\n *\r\n * @param compoundWrite - The CompoundWrite to get children from.\r\n * @returns A list of all complete children.\r\n */\r\nfunction compoundWriteGetCompleteChildren(compoundWrite) {\r\n    const children = [];\r\n    const node = compoundWrite.writeTree_.value;\r\n    if (node != null) {\r\n        // If it's a leaf node, it has no children; so nothing to do.\r\n        if (!node.isLeafNode()) {\r\n            node.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n                children.push(new NamedNode(childName, childNode));\r\n            });\r\n        }\r\n    }\r\n    else {\r\n        compoundWrite.writeTree_.children.inorderTraversal((childName, childTree) => {\r\n            if (childTree.value != null) {\r\n                children.push(new NamedNode(childName, childTree.value));\r\n            }\r\n        });\r\n    }\r\n    return children;\r\n}\r\nfunction compoundWriteChildCompoundWrite(compoundWrite, path) {\r\n    if (pathIsEmpty(path)) {\r\n        return compoundWrite;\r\n    }\r\n    else {\r\n        const shadowingNode = compoundWriteGetCompleteNode(compoundWrite, path);\r\n        if (shadowingNode != null) {\r\n            return new CompoundWrite(new ImmutableTree(shadowingNode));\r\n        }\r\n        else {\r\n            return new CompoundWrite(compoundWrite.writeTree_.subtree(path));\r\n        }\r\n    }\r\n}\r\n/**\r\n * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.\r\n * @returns Whether this CompoundWrite is empty\r\n */\r\nfunction compoundWriteIsEmpty(compoundWrite) {\r\n    return compoundWrite.writeTree_.isEmpty();\r\n}\r\n/**\r\n * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the\r\n * node\r\n * @param node - The node to apply this CompoundWrite to\r\n * @returns The node with all writes applied\r\n */\r\nfunction compoundWriteApply(compoundWrite, node) {\r\n    return applySubtreeWrite(newEmptyPath(), compoundWrite.writeTree_, node);\r\n}\r\nfunction applySubtreeWrite(relativePath, writeTree, node) {\r\n    if (writeTree.value != null) {\r\n        // Since there a write is always a leaf, we're done here\r\n        return node.updateChild(relativePath, writeTree.value);\r\n    }\r\n    else {\r\n        let priorityWrite = null;\r\n        writeTree.children.inorderTraversal((childKey, childTree) => {\r\n            if (childKey === '.priority') {\r\n                // Apply priorities at the end so we don't update priorities for either empty nodes or forget\r\n                // to apply priorities to empty nodes that are later filled\r\n                assert(childTree.value !== null, 'Priority writes must always be leaf nodes');\r\n                priorityWrite = childTree.value;\r\n            }\r\n            else {\r\n                node = applySubtreeWrite(pathChild(relativePath, childKey), childTree, node);\r\n            }\r\n        });\r\n        // If there was a priority write, we only apply it if the node is not empty\r\n        if (!node.getChild(relativePath).isEmpty() && priorityWrite !== null) {\r\n            node = node.updateChild(pathChild(relativePath, '.priority'), priorityWrite);\r\n        }\r\n        return node;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.\r\n *\r\n */\r\nfunction writeTreeChildWrites(writeTree, path) {\r\n    return newWriteTreeRef(path, writeTree);\r\n}\r\n/**\r\n * Record a new overwrite from user code.\r\n *\r\n * @param visible - This is set to false by some transactions. It should be excluded from event caches\r\n */\r\nfunction writeTreeAddOverwrite(writeTree, path, snap, writeId, visible) {\r\n    assert(writeId > writeTree.lastWriteId, 'Stacking an older write on top of newer ones');\r\n    if (visible === undefined) {\r\n        visible = true;\r\n    }\r\n    writeTree.allWrites.push({\r\n        path,\r\n        snap,\r\n        writeId,\r\n        visible\r\n    });\r\n    if (visible) {\r\n        writeTree.visibleWrites = compoundWriteAddWrite(writeTree.visibleWrites, path, snap);\r\n    }\r\n    writeTree.lastWriteId = writeId;\r\n}\r\n/**\r\n * Record a new merge from user code.\r\n */\r\nfunction writeTreeAddMerge(writeTree, path, changedChildren, writeId) {\r\n    assert(writeId > writeTree.lastWriteId, 'Stacking an older merge on top of newer ones');\r\n    writeTree.allWrites.push({\r\n        path,\r\n        children: changedChildren,\r\n        writeId,\r\n        visible: true\r\n    });\r\n    writeTree.visibleWrites = compoundWriteAddWrites(writeTree.visibleWrites, path, changedChildren);\r\n    writeTree.lastWriteId = writeId;\r\n}\r\nfunction writeTreeGetWrite(writeTree, writeId) {\r\n    for (let i = 0; i < writeTree.allWrites.length; i++) {\r\n        const record = writeTree.allWrites[i];\r\n        if (record.writeId === writeId) {\r\n            return record;\r\n        }\r\n    }\r\n    return null;\r\n}\r\n/**\r\n * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates\r\n * the tree if necessary.  We return true if it may have been visible, meaning views need to reevaluate.\r\n *\r\n * @returns true if the write may have been visible (meaning we'll need to reevaluate / raise\r\n * events as a result).\r\n */\r\nfunction writeTreeRemoveWrite(writeTree, writeId) {\r\n    // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied\r\n    // out of order.\r\n    //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;\r\n    //assert(validClear, \"Either we don't have this write, or it's the first one in the queue\");\r\n    const idx = writeTree.allWrites.findIndex(s => {\r\n        return s.writeId === writeId;\r\n    });\r\n    assert(idx >= 0, 'removeWrite called with nonexistent writeId.');\r\n    const writeToRemove = writeTree.allWrites[idx];\r\n    writeTree.allWrites.splice(idx, 1);\r\n    let removedWriteWasVisible = writeToRemove.visible;\r\n    let removedWriteOverlapsWithOtherWrites = false;\r\n    let i = writeTree.allWrites.length - 1;\r\n    while (removedWriteWasVisible && i >= 0) {\r\n        const currentWrite = writeTree.allWrites[i];\r\n        if (currentWrite.visible) {\r\n            if (i >= idx &&\r\n                writeTreeRecordContainsPath_(currentWrite, writeToRemove.path)) {\r\n                // The removed write was completely shadowed by a subsequent write.\r\n                removedWriteWasVisible = false;\r\n            }\r\n            else if (pathContains(writeToRemove.path, currentWrite.path)) {\r\n                // Either we're covering some writes or they're covering part of us (depending on which came first).\r\n                removedWriteOverlapsWithOtherWrites = true;\r\n            }\r\n        }\r\n        i--;\r\n    }\r\n    if (!removedWriteWasVisible) {\r\n        return false;\r\n    }\r\n    else if (removedWriteOverlapsWithOtherWrites) {\r\n        // There's some shadowing going on. Just rebuild the visible writes from scratch.\r\n        writeTreeResetTree_(writeTree);\r\n        return true;\r\n    }\r\n    else {\r\n        // There's no shadowing.  We can safely just remove the write(s) from visibleWrites.\r\n        if (writeToRemove.snap) {\r\n            writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, writeToRemove.path);\r\n        }\r\n        else {\r\n            const children = writeToRemove.children;\r\n            each(children, (childName) => {\r\n                writeTree.visibleWrites = compoundWriteRemoveWrite(writeTree.visibleWrites, pathChild(writeToRemove.path, childName));\r\n            });\r\n        }\r\n        return true;\r\n    }\r\n}\r\nfunction writeTreeRecordContainsPath_(writeRecord, path) {\r\n    if (writeRecord.snap) {\r\n        return pathContains(writeRecord.path, path);\r\n    }\r\n    else {\r\n        for (const childName in writeRecord.children) {\r\n            if (writeRecord.children.hasOwnProperty(childName) &&\r\n                pathContains(pathChild(writeRecord.path, childName), path)) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n}\r\n/**\r\n * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots\r\n */\r\nfunction writeTreeResetTree_(writeTree) {\r\n    writeTree.visibleWrites = writeTreeLayerTree_(writeTree.allWrites, writeTreeDefaultFilter_, newEmptyPath());\r\n    if (writeTree.allWrites.length > 0) {\r\n        writeTree.lastWriteId =\r\n            writeTree.allWrites[writeTree.allWrites.length - 1].writeId;\r\n    }\r\n    else {\r\n        writeTree.lastWriteId = -1;\r\n    }\r\n}\r\n/**\r\n * The default filter used when constructing the tree. Keep everything that's visible.\r\n */\r\nfunction writeTreeDefaultFilter_(write) {\r\n    return write.visible;\r\n}\r\n/**\r\n * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of\r\n * event data at that path.\r\n */\r\nfunction writeTreeLayerTree_(writes, filter, treeRoot) {\r\n    let compoundWrite = CompoundWrite.empty();\r\n    for (let i = 0; i < writes.length; ++i) {\r\n        const write = writes[i];\r\n        // Theory, a later set will either:\r\n        // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction\r\n        // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction\r\n        if (filter(write)) {\r\n            const writePath = write.path;\r\n            let relativePath;\r\n            if (write.snap) {\r\n                if (pathContains(treeRoot, writePath)) {\r\n                    relativePath = newRelativePath(treeRoot, writePath);\r\n                    compoundWrite = compoundWriteAddWrite(compoundWrite, relativePath, write.snap);\r\n                }\r\n                else if (pathContains(writePath, treeRoot)) {\r\n                    relativePath = newRelativePath(writePath, treeRoot);\r\n                    compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), write.snap.getChild(relativePath));\r\n                }\r\n                else ;\r\n            }\r\n            else if (write.children) {\r\n                if (pathContains(treeRoot, writePath)) {\r\n                    relativePath = newRelativePath(treeRoot, writePath);\r\n                    compoundWrite = compoundWriteAddWrites(compoundWrite, relativePath, write.children);\r\n                }\r\n                else if (pathContains(writePath, treeRoot)) {\r\n                    relativePath = newRelativePath(writePath, treeRoot);\r\n                    if (pathIsEmpty(relativePath)) {\r\n                        compoundWrite = compoundWriteAddWrites(compoundWrite, newEmptyPath(), write.children);\r\n                    }\r\n                    else {\r\n                        const child = safeGet(write.children, pathGetFront(relativePath));\r\n                        if (child) {\r\n                            // There exists a child in this node that matches the root path\r\n                            const deepNode = child.getChild(pathPopFront(relativePath));\r\n                            compoundWrite = compoundWriteAddWrite(compoundWrite, newEmptyPath(), deepNode);\r\n                        }\r\n                    }\r\n                }\r\n                else ;\r\n            }\r\n            else {\r\n                throw assertionError('WriteRecord should have .snap or .children');\r\n            }\r\n        }\r\n    }\r\n    return compoundWrite;\r\n}\r\n/**\r\n * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden\r\n * writes), attempt to calculate a complete snapshot for the given path\r\n *\r\n * @param writeIdsToExclude - An optional set to be excluded\r\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\r\n */\r\nfunction writeTreeCalcCompleteEventCache(writeTree, treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n    if (!writeIdsToExclude && !includeHiddenWrites) {\r\n        const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\r\n        if (shadowingNode != null) {\r\n            return shadowingNode;\r\n        }\r\n        else {\r\n            const subMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n            if (compoundWriteIsEmpty(subMerge)) {\r\n                return completeServerCache;\r\n            }\r\n            else if (completeServerCache == null &&\r\n                !compoundWriteHasCompleteWrite(subMerge, newEmptyPath())) {\r\n                // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow\r\n                return null;\r\n            }\r\n            else {\r\n                const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n                return compoundWriteApply(subMerge, layeredCache);\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n        if (!includeHiddenWrites && compoundWriteIsEmpty(merge)) {\r\n            return completeServerCache;\r\n        }\r\n        else {\r\n            // If the server cache is null, and we don't have a complete cache, we need to return null\r\n            if (!includeHiddenWrites &&\r\n                completeServerCache == null &&\r\n                !compoundWriteHasCompleteWrite(merge, newEmptyPath())) {\r\n                return null;\r\n            }\r\n            else {\r\n                const filter = function (write) {\r\n                    return ((write.visible || includeHiddenWrites) &&\r\n                        (!writeIdsToExclude ||\r\n                            !~writeIdsToExclude.indexOf(write.writeId)) &&\r\n                        (pathContains(write.path, treePath) ||\r\n                            pathContains(treePath, write.path)));\r\n                };\r\n                const mergeAtPath = writeTreeLayerTree_(writeTree.allWrites, filter, treePath);\r\n                const layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n                return compoundWriteApply(mergeAtPath, layeredCache);\r\n            }\r\n        }\r\n    }\r\n}\r\n/**\r\n * With optional, underlying server data, attempt to return a children node of children that we have complete data for.\r\n * Used when creating new views, to pre-fill their complete event children snapshot.\r\n */\r\nfunction writeTreeCalcCompleteEventChildren(writeTree, treePath, completeServerChildren) {\r\n    let completeChildren = ChildrenNode.EMPTY_NODE;\r\n    const topLevelSet = compoundWriteGetCompleteNode(writeTree.visibleWrites, treePath);\r\n    if (topLevelSet) {\r\n        if (!topLevelSet.isLeafNode()) {\r\n            // we're shadowing everything. Return the children.\r\n            topLevelSet.forEachChild(PRIORITY_INDEX, (childName, childSnap) => {\r\n                completeChildren = completeChildren.updateImmediateChild(childName, childSnap);\r\n            });\r\n        }\r\n        return completeChildren;\r\n    }\r\n    else if (completeServerChildren) {\r\n        // Layer any children we have on top of this\r\n        // We know we don't have a top-level set, so just enumerate existing children\r\n        const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n        completeServerChildren.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n            const node = compoundWriteApply(compoundWriteChildCompoundWrite(merge, new Path(childName)), childNode);\r\n            completeChildren = completeChildren.updateImmediateChild(childName, node);\r\n        });\r\n        // Add any complete children we have from the set\r\n        compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\r\n            completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n        });\r\n        return completeChildren;\r\n    }\r\n    else {\r\n        // We don't have anything to layer on top of. Layer on any children we have\r\n        // Note that we can return an empty snap if we have a defined delete\r\n        const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n        compoundWriteGetCompleteChildren(merge).forEach(namedNode => {\r\n            completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n        });\r\n        return completeChildren;\r\n    }\r\n}\r\n/**\r\n * Given that the underlying server data has updated, determine what, if anything, needs to be\r\n * applied to the event cache.\r\n *\r\n * Possibilities:\r\n *\r\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n *\r\n * 2. Some write is completely shadowing. No events to be raised\r\n *\r\n * 3. Is partially shadowed. Events\r\n *\r\n * Either existingEventSnap or existingServerSnap must exist\r\n */\r\nfunction writeTreeCalcEventCacheAfterServerOverwrite(writeTree, treePath, childPath, existingEventSnap, existingServerSnap) {\r\n    assert(existingEventSnap || existingServerSnap, 'Either existingEventSnap or existingServerSnap must exist');\r\n    const path = pathChild(treePath, childPath);\r\n    if (compoundWriteHasCompleteWrite(writeTree.visibleWrites, path)) {\r\n        // At this point we can probably guarantee that we're in case 2, meaning no events\r\n        // May need to check visibility while doing the findRootMostValueAndPath call\r\n        return null;\r\n    }\r\n    else {\r\n        // No complete shadowing. We're either partially shadowing or not shadowing at all.\r\n        const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\r\n        if (compoundWriteIsEmpty(childMerge)) {\r\n            // We're not shadowing at all. Case 1\r\n            return existingServerSnap.getChild(childPath);\r\n        }\r\n        else {\r\n            // This could be more efficient if the serverNode + updates doesn't change the eventSnap\r\n            // However this is tricky to find out, since user updates don't necessary change the server\r\n            // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server\r\n            // adds nodes, but doesn't change any existing writes. It is therefore not enough to\r\n            // only check if the updates change the serverNode.\r\n            // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?\r\n            return compoundWriteApply(childMerge, existingServerSnap.getChild(childPath));\r\n        }\r\n    }\r\n}\r\n/**\r\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n * complete child for this ChildKey.\r\n */\r\nfunction writeTreeCalcCompleteChild(writeTree, treePath, childKey, existingServerSnap) {\r\n    const path = pathChild(treePath, childKey);\r\n    const shadowingNode = compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\r\n    if (shadowingNode != null) {\r\n        return shadowingNode;\r\n    }\r\n    else {\r\n        if (existingServerSnap.isCompleteForChild(childKey)) {\r\n            const childMerge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, path);\r\n            return compoundWriteApply(childMerge, existingServerSnap.getNode().getImmediateChild(childKey));\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    }\r\n}\r\n/**\r\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n * a higher path, this will return the child of that write relative to the write and this path.\r\n * Returns null if there is no write at this path.\r\n */\r\nfunction writeTreeShadowingWrite(writeTree, path) {\r\n    return compoundWriteGetCompleteNode(writeTree.visibleWrites, path);\r\n}\r\n/**\r\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n * the window, but may now be in the window.\r\n */\r\nfunction writeTreeCalcIndexedSlice(writeTree, treePath, completeServerData, startPost, count, reverse, index) {\r\n    let toIterate;\r\n    const merge = compoundWriteChildCompoundWrite(writeTree.visibleWrites, treePath);\r\n    const shadowingNode = compoundWriteGetCompleteNode(merge, newEmptyPath());\r\n    if (shadowingNode != null) {\r\n        toIterate = shadowingNode;\r\n    }\r\n    else if (completeServerData != null) {\r\n        toIterate = compoundWriteApply(merge, completeServerData);\r\n    }\r\n    else {\r\n        // no children to iterate on\r\n        return [];\r\n    }\r\n    toIterate = toIterate.withIndex(index);\r\n    if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {\r\n        const nodes = [];\r\n        const cmp = index.getCompare();\r\n        const iter = reverse\r\n            ? toIterate.getReverseIteratorFrom(startPost, index)\r\n            : toIterate.getIteratorFrom(startPost, index);\r\n        let next = iter.getNext();\r\n        while (next && nodes.length < count) {\r\n            if (cmp(next, startPost) !== 0) {\r\n                nodes.push(next);\r\n            }\r\n            next = iter.getNext();\r\n        }\r\n        return nodes;\r\n    }\r\n    else {\r\n        return [];\r\n    }\r\n}\r\nfunction newWriteTree() {\r\n    return {\r\n        visibleWrites: CompoundWrite.empty(),\r\n        allWrites: [],\r\n        lastWriteId: -1\r\n    };\r\n}\r\n/**\r\n * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used\r\n * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node\r\n * can lead to a more expensive calculation.\r\n *\r\n * @param writeIdsToExclude - Optional writes to exclude.\r\n * @param includeHiddenWrites - Defaults to false, whether or not to layer on writes with visible set to false\r\n */\r\nfunction writeTreeRefCalcCompleteEventCache(writeTreeRef, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n    return writeTreeCalcCompleteEventCache(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites);\r\n}\r\n/**\r\n * If possible, returns a children node containing all of the complete children we have data for. The returned data is a\r\n * mix of the given server data and write data.\r\n *\r\n */\r\nfunction writeTreeRefCalcCompleteEventChildren(writeTreeRef, completeServerChildren) {\r\n    return writeTreeCalcCompleteEventChildren(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerChildren);\r\n}\r\n/**\r\n * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,\r\n * if anything, needs to be applied to the event cache.\r\n *\r\n * Possibilities:\r\n *\r\n * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n *\r\n * 2. Some write is completely shadowing. No events to be raised\r\n *\r\n * 3. Is partially shadowed. Events should be raised\r\n *\r\n * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert\r\n *\r\n *\r\n */\r\nfunction writeTreeRefCalcEventCacheAfterServerOverwrite(writeTreeRef, path, existingEventSnap, existingServerSnap) {\r\n    return writeTreeCalcEventCacheAfterServerOverwrite(writeTreeRef.writeTree, writeTreeRef.treePath, path, existingEventSnap, existingServerSnap);\r\n}\r\n/**\r\n * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n * a higher path, this will return the child of that write relative to the write and this path.\r\n * Returns null if there is no write at this path.\r\n *\r\n */\r\nfunction writeTreeRefShadowingWrite(writeTreeRef, path) {\r\n    return writeTreeShadowingWrite(writeTreeRef.writeTree, pathChild(writeTreeRef.treePath, path));\r\n}\r\n/**\r\n * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n * the window, but may now be in the window\r\n */\r\nfunction writeTreeRefCalcIndexedSlice(writeTreeRef, completeServerData, startPost, count, reverse, index) {\r\n    return writeTreeCalcIndexedSlice(writeTreeRef.writeTree, writeTreeRef.treePath, completeServerData, startPost, count, reverse, index);\r\n}\r\n/**\r\n * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n * complete child for this ChildKey.\r\n */\r\nfunction writeTreeRefCalcCompleteChild(writeTreeRef, childKey, existingServerCache) {\r\n    return writeTreeCalcCompleteChild(writeTreeRef.writeTree, writeTreeRef.treePath, childKey, existingServerCache);\r\n}\r\n/**\r\n * Return a WriteTreeRef for a child.\r\n */\r\nfunction writeTreeRefChild(writeTreeRef, childName) {\r\n    return newWriteTreeRef(pathChild(writeTreeRef.treePath, childName), writeTreeRef.writeTree);\r\n}\r\nfunction newWriteTreeRef(path, writeTree) {\r\n    return {\r\n        treePath: path,\r\n        writeTree\r\n    };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ChildChangeAccumulator {\r\n    constructor() {\r\n        this.changeMap = new Map();\r\n    }\r\n    trackChildChange(change) {\r\n        const type = change.type;\r\n        const childKey = change.childName;\r\n        assert(type === \"child_added\" /* CHILD_ADDED */ ||\r\n            type === \"child_changed\" /* CHILD_CHANGED */ ||\r\n            type === \"child_removed\" /* CHILD_REMOVED */, 'Only child changes supported for tracking');\r\n        assert(childKey !== '.priority', 'Only non-priority child changes can be tracked.');\r\n        const oldChange = this.changeMap.get(childKey);\r\n        if (oldChange) {\r\n            const oldType = oldChange.type;\r\n            if (type === \"child_added\" /* CHILD_ADDED */ &&\r\n                oldType === \"child_removed\" /* CHILD_REMOVED */) {\r\n                this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.snapshotNode));\r\n            }\r\n            else if (type === \"child_removed\" /* CHILD_REMOVED */ &&\r\n                oldType === \"child_added\" /* CHILD_ADDED */) {\r\n                this.changeMap.delete(childKey);\r\n            }\r\n            else if (type === \"child_removed\" /* CHILD_REMOVED */ &&\r\n                oldType === \"child_changed\" /* CHILD_CHANGED */) {\r\n                this.changeMap.set(childKey, changeChildRemoved(childKey, oldChange.oldSnap));\r\n            }\r\n            else if (type === \"child_changed\" /* CHILD_CHANGED */ &&\r\n                oldType === \"child_added\" /* CHILD_ADDED */) {\r\n                this.changeMap.set(childKey, changeChildAdded(childKey, change.snapshotNode));\r\n            }\r\n            else if (type === \"child_changed\" /* CHILD_CHANGED */ &&\r\n                oldType === \"child_changed\" /* CHILD_CHANGED */) {\r\n                this.changeMap.set(childKey, changeChildChanged(childKey, change.snapshotNode, oldChange.oldSnap));\r\n            }\r\n            else {\r\n                throw assertionError('Illegal combination of changes: ' +\r\n                    change +\r\n                    ' occurred after ' +\r\n                    oldChange);\r\n            }\r\n        }\r\n        else {\r\n            this.changeMap.set(childKey, change);\r\n        }\r\n    }\r\n    getChanges() {\r\n        return Array.from(this.changeMap.values());\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of CompleteChildSource that never returns any additional children\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nclass NoCompleteChildSource_ {\r\n    getCompleteChild(childKey) {\r\n        return null;\r\n    }\r\n    getChildAfterChild(index, child, reverse) {\r\n        return null;\r\n    }\r\n}\r\n/**\r\n * Singleton instance.\r\n */\r\nconst NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();\r\n/**\r\n * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or\r\n * old event caches available to calculate complete children.\r\n */\r\nclass WriteTreeCompleteChildSource {\r\n    constructor(writes_, viewCache_, optCompleteServerCache_ = null) {\r\n        this.writes_ = writes_;\r\n        this.viewCache_ = viewCache_;\r\n        this.optCompleteServerCache_ = optCompleteServerCache_;\r\n    }\r\n    getCompleteChild(childKey) {\r\n        const node = this.viewCache_.eventCache;\r\n        if (node.isCompleteForChild(childKey)) {\r\n            return node.getNode().getImmediateChild(childKey);\r\n        }\r\n        else {\r\n            const serverNode = this.optCompleteServerCache_ != null\r\n                ? new CacheNode(this.optCompleteServerCache_, true, false)\r\n                : this.viewCache_.serverCache;\r\n            return writeTreeRefCalcCompleteChild(this.writes_, childKey, serverNode);\r\n        }\r\n    }\r\n    getChildAfterChild(index, child, reverse) {\r\n        const completeServerData = this.optCompleteServerCache_ != null\r\n            ? this.optCompleteServerCache_\r\n            : viewCacheGetCompleteServerSnap(this.viewCache_);\r\n        const nodes = writeTreeRefCalcIndexedSlice(this.writes_, completeServerData, child, 1, reverse, index);\r\n        if (nodes.length === 0) {\r\n            return null;\r\n        }\r\n        else {\r\n            return nodes[0];\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction newViewProcessor(filter) {\r\n    return { filter };\r\n}\r\nfunction viewProcessorAssertIndexed(viewProcessor, viewCache) {\r\n    assert(viewCache.eventCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Event snap not indexed');\r\n    assert(viewCache.serverCache.getNode().isIndexed(viewProcessor.filter.getIndex()), 'Server snap not indexed');\r\n}\r\nfunction viewProcessorApplyOperation(viewProcessor, oldViewCache, operation, writesCache, completeCache) {\r\n    const accumulator = new ChildChangeAccumulator();\r\n    let newViewCache, filterServerNode;\r\n    if (operation.type === OperationType.OVERWRITE) {\r\n        const overwrite = operation;\r\n        if (overwrite.source.fromUser) {\r\n            newViewCache = viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, accumulator);\r\n        }\r\n        else {\r\n            assert(overwrite.source.fromServer, 'Unknown source.');\r\n            // We filter the node if it's a tagged update or the node has been previously filtered  and the\r\n            // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered\r\n            // again\r\n            filterServerNode =\r\n                overwrite.source.tagged ||\r\n                    (oldViewCache.serverCache.isFiltered() && !pathIsEmpty(overwrite.path));\r\n            newViewCache = viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, filterServerNode, accumulator);\r\n        }\r\n    }\r\n    else if (operation.type === OperationType.MERGE) {\r\n        const merge = operation;\r\n        if (merge.source.fromUser) {\r\n            newViewCache = viewProcessorApplyUserMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, accumulator);\r\n        }\r\n        else {\r\n            assert(merge.source.fromServer, 'Unknown source.');\r\n            // We filter the node if it's a tagged update or the node has been previously filtered\r\n            filterServerNode =\r\n                merge.source.tagged || oldViewCache.serverCache.isFiltered();\r\n            newViewCache = viewProcessorApplyServerMerge(viewProcessor, oldViewCache, merge.path, merge.children, writesCache, completeCache, filterServerNode, accumulator);\r\n        }\r\n    }\r\n    else if (operation.type === OperationType.ACK_USER_WRITE) {\r\n        const ackUserWrite = operation;\r\n        if (!ackUserWrite.revert) {\r\n            newViewCache = viewProcessorAckUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, ackUserWrite.affectedTree, writesCache, completeCache, accumulator);\r\n        }\r\n        else {\r\n            newViewCache = viewProcessorRevertUserWrite(viewProcessor, oldViewCache, ackUserWrite.path, writesCache, completeCache, accumulator);\r\n        }\r\n    }\r\n    else if (operation.type === OperationType.LISTEN_COMPLETE) {\r\n        newViewCache = viewProcessorListenComplete(viewProcessor, oldViewCache, operation.path, writesCache, accumulator);\r\n    }\r\n    else {\r\n        throw assertionError('Unknown operation type: ' + operation.type);\r\n    }\r\n    const changes = accumulator.getChanges();\r\n    viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, changes);\r\n    return { viewCache: newViewCache, changes };\r\n}\r\nfunction viewProcessorMaybeAddValueEvent(oldViewCache, newViewCache, accumulator) {\r\n    const eventSnap = newViewCache.eventCache;\r\n    if (eventSnap.isFullyInitialized()) {\r\n        const isLeafOrEmpty = eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();\r\n        const oldCompleteSnap = viewCacheGetCompleteEventSnap(oldViewCache);\r\n        if (accumulator.length > 0 ||\r\n            !oldViewCache.eventCache.isFullyInitialized() ||\r\n            (isLeafOrEmpty && !eventSnap.getNode().equals(oldCompleteSnap)) ||\r\n            !eventSnap.getNode().getPriority().equals(oldCompleteSnap.getPriority())) {\r\n            accumulator.push(changeValue(viewCacheGetCompleteEventSnap(newViewCache)));\r\n        }\r\n    }\r\n}\r\nfunction viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, viewCache, changePath, writesCache, source, accumulator) {\r\n    const oldEventSnap = viewCache.eventCache;\r\n    if (writeTreeRefShadowingWrite(writesCache, changePath) != null) {\r\n        // we have a shadowing write, ignore changes\r\n        return viewCache;\r\n    }\r\n    else {\r\n        let newEventCache, serverNode;\r\n        if (pathIsEmpty(changePath)) {\r\n            // TODO: figure out how this plays with \"sliding ack windows\"\r\n            assert(viewCache.serverCache.isFullyInitialized(), 'If change path is empty, we must have complete server data');\r\n            if (viewCache.serverCache.isFiltered()) {\r\n                // We need to special case this, because we need to only apply writes to complete children, or\r\n                // we might end up raising events for incomplete children. If the server data is filtered deep\r\n                // writes cannot be guaranteed to be complete\r\n                const serverCache = viewCacheGetCompleteServerSnap(viewCache);\r\n                const completeChildren = serverCache instanceof ChildrenNode\r\n                    ? serverCache\r\n                    : ChildrenNode.EMPTY_NODE;\r\n                const completeEventChildren = writeTreeRefCalcCompleteEventChildren(writesCache, completeChildren);\r\n                newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeEventChildren, accumulator);\r\n            }\r\n            else {\r\n                const completeNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n                newEventCache = viewProcessor.filter.updateFullNode(viewCache.eventCache.getNode(), completeNode, accumulator);\r\n            }\r\n        }\r\n        else {\r\n            const childKey = pathGetFront(changePath);\r\n            if (childKey === '.priority') {\r\n                assert(pathGetLength(changePath) === 1, \"Can't have a priority with additional path components\");\r\n                const oldEventNode = oldEventSnap.getNode();\r\n                serverNode = viewCache.serverCache.getNode();\r\n                // we might have overwrites for this priority\r\n                const updatedPriority = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventNode, serverNode);\r\n                if (updatedPriority != null) {\r\n                    newEventCache = viewProcessor.filter.updatePriority(oldEventNode, updatedPriority);\r\n                }\r\n                else {\r\n                    // priority didn't change, keep old node\r\n                    newEventCache = oldEventSnap.getNode();\r\n                }\r\n            }\r\n            else {\r\n                const childChangePath = pathPopFront(changePath);\r\n                // update child\r\n                let newEventChild;\r\n                if (oldEventSnap.isCompleteForChild(childKey)) {\r\n                    serverNode = viewCache.serverCache.getNode();\r\n                    const eventChildUpdate = writeTreeRefCalcEventCacheAfterServerOverwrite(writesCache, changePath, oldEventSnap.getNode(), serverNode);\r\n                    if (eventChildUpdate != null) {\r\n                        newEventChild = oldEventSnap\r\n                            .getNode()\r\n                            .getImmediateChild(childKey)\r\n                            .updateChild(childChangePath, eventChildUpdate);\r\n                    }\r\n                    else {\r\n                        // Nothing changed, just keep the old child\r\n                        newEventChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n                    }\r\n                }\r\n                else {\r\n                    newEventChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\r\n                }\r\n                if (newEventChild != null) {\r\n                    newEventCache = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newEventChild, childChangePath, source, accumulator);\r\n                }\r\n                else {\r\n                    // no complete child available or no change\r\n                    newEventCache = oldEventSnap.getNode();\r\n                }\r\n            }\r\n        }\r\n        return viewCacheUpdateEventSnap(viewCache, newEventCache, oldEventSnap.isFullyInitialized() || pathIsEmpty(changePath), viewProcessor.filter.filtersNodes());\r\n    }\r\n}\r\nfunction viewProcessorApplyServerOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, filterServerNode, accumulator) {\r\n    const oldServerSnap = oldViewCache.serverCache;\r\n    let newServerCache;\r\n    const serverFilter = filterServerNode\r\n        ? viewProcessor.filter\r\n        : viewProcessor.filter.getIndexedFilter();\r\n    if (pathIsEmpty(changePath)) {\r\n        newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), changedSnap, null);\r\n    }\r\n    else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {\r\n        // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update\r\n        const newServerNode = oldServerSnap\r\n            .getNode()\r\n            .updateChild(changePath, changedSnap);\r\n        newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), newServerNode, null);\r\n    }\r\n    else {\r\n        const childKey = pathGetFront(changePath);\r\n        if (!oldServerSnap.isCompleteForPath(changePath) &&\r\n            pathGetLength(changePath) > 1) {\r\n            // We don't update incomplete nodes with updates intended for other listeners\r\n            return oldViewCache;\r\n        }\r\n        const childChangePath = pathPopFront(changePath);\r\n        const childNode = oldServerSnap.getNode().getImmediateChild(childKey);\r\n        const newChildNode = childNode.updateChild(childChangePath, changedSnap);\r\n        if (childKey === '.priority') {\r\n            newServerCache = serverFilter.updatePriority(oldServerSnap.getNode(), newChildNode);\r\n        }\r\n        else {\r\n            newServerCache = serverFilter.updateChild(oldServerSnap.getNode(), childKey, newChildNode, childChangePath, NO_COMPLETE_CHILD_SOURCE, null);\r\n        }\r\n    }\r\n    const newViewCache = viewCacheUpdateServerSnap(oldViewCache, newServerCache, oldServerSnap.isFullyInitialized() || pathIsEmpty(changePath), serverFilter.filtersNodes());\r\n    const source = new WriteTreeCompleteChildSource(writesCache, newViewCache, completeCache);\r\n    return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, changePath, writesCache, source, accumulator);\r\n}\r\nfunction viewProcessorApplyUserOverwrite(viewProcessor, oldViewCache, changePath, changedSnap, writesCache, completeCache, accumulator) {\r\n    const oldEventSnap = oldViewCache.eventCache;\r\n    let newViewCache, newEventCache;\r\n    const source = new WriteTreeCompleteChildSource(writesCache, oldViewCache, completeCache);\r\n    if (pathIsEmpty(changePath)) {\r\n        newEventCache = viewProcessor.filter.updateFullNode(oldViewCache.eventCache.getNode(), changedSnap, accumulator);\r\n        newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, true, viewProcessor.filter.filtersNodes());\r\n    }\r\n    else {\r\n        const childKey = pathGetFront(changePath);\r\n        if (childKey === '.priority') {\r\n            newEventCache = viewProcessor.filter.updatePriority(oldViewCache.eventCache.getNode(), changedSnap);\r\n            newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventCache, oldEventSnap.isFullyInitialized(), oldEventSnap.isFiltered());\r\n        }\r\n        else {\r\n            const childChangePath = pathPopFront(changePath);\r\n            const oldChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n            let newChild;\r\n            if (pathIsEmpty(childChangePath)) {\r\n                // Child overwrite, we can replace the child\r\n                newChild = changedSnap;\r\n            }\r\n            else {\r\n                const childNode = source.getCompleteChild(childKey);\r\n                if (childNode != null) {\r\n                    if (pathGetBack(childChangePath) === '.priority' &&\r\n                        childNode.getChild(pathParent(childChangePath)).isEmpty()) {\r\n                        // This is a priority update on an empty node. If this node exists on the server, the\r\n                        // server will send down the priority in the update, so ignore for now\r\n                        newChild = childNode;\r\n                    }\r\n                    else {\r\n                        newChild = childNode.updateChild(childChangePath, changedSnap);\r\n                    }\r\n                }\r\n                else {\r\n                    // There is no complete child node available\r\n                    newChild = ChildrenNode.EMPTY_NODE;\r\n                }\r\n            }\r\n            if (!oldChild.equals(newChild)) {\r\n                const newEventSnap = viewProcessor.filter.updateChild(oldEventSnap.getNode(), childKey, newChild, childChangePath, source, accumulator);\r\n                newViewCache = viewCacheUpdateEventSnap(oldViewCache, newEventSnap, oldEventSnap.isFullyInitialized(), viewProcessor.filter.filtersNodes());\r\n            }\r\n            else {\r\n                newViewCache = oldViewCache;\r\n            }\r\n        }\r\n    }\r\n    return newViewCache;\r\n}\r\nfunction viewProcessorCacheHasChild(viewCache, childKey) {\r\n    return viewCache.eventCache.isCompleteForChild(childKey);\r\n}\r\nfunction viewProcessorApplyUserMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, accumulator) {\r\n    // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n    // window leaving room for new items.  It's important we process these changes first, so we\r\n    // iterate the changes twice, first processing any that affect items currently in view.\r\n    // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n    // and event snap.  I'm not sure if this will result in edge cases when a child is in one but\r\n    // not the other.\r\n    let curViewCache = viewCache;\r\n    changedChildren.foreach((relativePath, childNode) => {\r\n        const writePath = pathChild(path, relativePath);\r\n        if (viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\r\n            curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n        }\r\n    });\r\n    changedChildren.foreach((relativePath, childNode) => {\r\n        const writePath = pathChild(path, relativePath);\r\n        if (!viewProcessorCacheHasChild(viewCache, pathGetFront(writePath))) {\r\n            curViewCache = viewProcessorApplyUserOverwrite(viewProcessor, curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n        }\r\n    });\r\n    return curViewCache;\r\n}\r\nfunction viewProcessorApplyMerge(viewProcessor, node, merge) {\r\n    merge.foreach((relativePath, childNode) => {\r\n        node = node.updateChild(relativePath, childNode);\r\n    });\r\n    return node;\r\n}\r\nfunction viewProcessorApplyServerMerge(viewProcessor, viewCache, path, changedChildren, writesCache, serverCache, filterServerNode, accumulator) {\r\n    // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and\r\n    // wait for the complete data update coming soon.\r\n    if (viewCache.serverCache.getNode().isEmpty() &&\r\n        !viewCache.serverCache.isFullyInitialized()) {\r\n        return viewCache;\r\n    }\r\n    // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n    // window leaving room for new items.  It's important we process these changes first, so we\r\n    // iterate the changes twice, first processing any that affect items currently in view.\r\n    // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n    // and event snap.  I'm not sure if this will result in edge cases when a child is in one but\r\n    // not the other.\r\n    let curViewCache = viewCache;\r\n    let viewMergeTree;\r\n    if (pathIsEmpty(path)) {\r\n        viewMergeTree = changedChildren;\r\n    }\r\n    else {\r\n        viewMergeTree = new ImmutableTree(null).setTree(path, changedChildren);\r\n    }\r\n    const serverNode = viewCache.serverCache.getNode();\r\n    viewMergeTree.children.inorderTraversal((childKey, childTree) => {\r\n        if (serverNode.hasChild(childKey)) {\r\n            const serverChild = viewCache.serverCache\r\n                .getNode()\r\n                .getImmediateChild(childKey);\r\n            const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childTree);\r\n            curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n        }\r\n    });\r\n    viewMergeTree.children.inorderTraversal((childKey, childMergeTree) => {\r\n        const isUnknownDeepMerge = !viewCache.serverCache.isCompleteForChild(childKey) &&\r\n            childMergeTree.value === undefined;\r\n        if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {\r\n            const serverChild = viewCache.serverCache\r\n                .getNode()\r\n                .getImmediateChild(childKey);\r\n            const newChild = viewProcessorApplyMerge(viewProcessor, serverChild, childMergeTree);\r\n            curViewCache = viewProcessorApplyServerOverwrite(viewProcessor, curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n        }\r\n    });\r\n    return curViewCache;\r\n}\r\nfunction viewProcessorAckUserWrite(viewProcessor, viewCache, ackPath, affectedTree, writesCache, completeCache, accumulator) {\r\n    if (writeTreeRefShadowingWrite(writesCache, ackPath) != null) {\r\n        return viewCache;\r\n    }\r\n    // Only filter server node if it is currently filtered\r\n    const filterServerNode = viewCache.serverCache.isFiltered();\r\n    // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update\r\n    // now that it won't be shadowed.\r\n    const serverCache = viewCache.serverCache;\r\n    if (affectedTree.value != null) {\r\n        // This is an overwrite.\r\n        if ((pathIsEmpty(ackPath) && serverCache.isFullyInitialized()) ||\r\n            serverCache.isCompleteForPath(ackPath)) {\r\n            return viewProcessorApplyServerOverwrite(viewProcessor, viewCache, ackPath, serverCache.getNode().getChild(ackPath), writesCache, completeCache, filterServerNode, accumulator);\r\n        }\r\n        else if (pathIsEmpty(ackPath)) {\r\n            // This is a goofy edge case where we are acking data at this location but don't have full data.  We\r\n            // should just re-apply whatever we have in our cache as a merge.\r\n            let changedChildren = new ImmutableTree(null);\r\n            serverCache.getNode().forEachChild(KEY_INDEX, (name, node) => {\r\n                changedChildren = changedChildren.set(new Path(name), node);\r\n            });\r\n            return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\r\n        }\r\n        else {\r\n            return viewCache;\r\n        }\r\n    }\r\n    else {\r\n        // This is a merge.\r\n        let changedChildren = new ImmutableTree(null);\r\n        affectedTree.foreach((mergePath, value) => {\r\n            const serverCachePath = pathChild(ackPath, mergePath);\r\n            if (serverCache.isCompleteForPath(serverCachePath)) {\r\n                changedChildren = changedChildren.set(mergePath, serverCache.getNode().getChild(serverCachePath));\r\n            }\r\n        });\r\n        return viewProcessorApplyServerMerge(viewProcessor, viewCache, ackPath, changedChildren, writesCache, completeCache, filterServerNode, accumulator);\r\n    }\r\n}\r\nfunction viewProcessorListenComplete(viewProcessor, viewCache, path, writesCache, accumulator) {\r\n    const oldServerNode = viewCache.serverCache;\r\n    const newViewCache = viewCacheUpdateServerSnap(viewCache, oldServerNode.getNode(), oldServerNode.isFullyInitialized() || pathIsEmpty(path), oldServerNode.isFiltered());\r\n    return viewProcessorGenerateEventCacheAfterServerEvent(viewProcessor, newViewCache, path, writesCache, NO_COMPLETE_CHILD_SOURCE, accumulator);\r\n}\r\nfunction viewProcessorRevertUserWrite(viewProcessor, viewCache, path, writesCache, completeServerCache, accumulator) {\r\n    let complete;\r\n    if (writeTreeRefShadowingWrite(writesCache, path) != null) {\r\n        return viewCache;\r\n    }\r\n    else {\r\n        const source = new WriteTreeCompleteChildSource(writesCache, viewCache, completeServerCache);\r\n        const oldEventCache = viewCache.eventCache.getNode();\r\n        let newEventCache;\r\n        if (pathIsEmpty(path) || pathGetFront(path) === '.priority') {\r\n            let newNode;\r\n            if (viewCache.serverCache.isFullyInitialized()) {\r\n                newNode = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n            }\r\n            else {\r\n                const serverChildren = viewCache.serverCache.getNode();\r\n                assert(serverChildren instanceof ChildrenNode, 'serverChildren would be complete if leaf node');\r\n                newNode = writeTreeRefCalcCompleteEventChildren(writesCache, serverChildren);\r\n            }\r\n            newNode = newNode;\r\n            newEventCache = viewProcessor.filter.updateFullNode(oldEventCache, newNode, accumulator);\r\n        }\r\n        else {\r\n            const childKey = pathGetFront(path);\r\n            let newChild = writeTreeRefCalcCompleteChild(writesCache, childKey, viewCache.serverCache);\r\n            if (newChild == null &&\r\n                viewCache.serverCache.isCompleteForChild(childKey)) {\r\n                newChild = oldEventCache.getImmediateChild(childKey);\r\n            }\r\n            if (newChild != null) {\r\n                newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, newChild, pathPopFront(path), source, accumulator);\r\n            }\r\n            else if (viewCache.eventCache.getNode().hasChild(childKey)) {\r\n                // No complete child available, delete the existing one, if any\r\n                newEventCache = viewProcessor.filter.updateChild(oldEventCache, childKey, ChildrenNode.EMPTY_NODE, pathPopFront(path), source, accumulator);\r\n            }\r\n            else {\r\n                newEventCache = oldEventCache;\r\n            }\r\n            if (newEventCache.isEmpty() &&\r\n                viewCache.serverCache.isFullyInitialized()) {\r\n                // We might have reverted all child writes. Maybe the old event was a leaf node\r\n                complete = writeTreeRefCalcCompleteEventCache(writesCache, viewCacheGetCompleteServerSnap(viewCache));\r\n                if (complete.isLeafNode()) {\r\n                    newEventCache = viewProcessor.filter.updateFullNode(newEventCache, complete, accumulator);\r\n                }\r\n            }\r\n        }\r\n        complete =\r\n            viewCache.serverCache.isFullyInitialized() ||\r\n                writeTreeRefShadowingWrite(writesCache, newEmptyPath()) != null;\r\n        return viewCacheUpdateEventSnap(viewCache, newEventCache, complete, viewProcessor.filter.filtersNodes());\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A view represents a specific location and query that has 1 or more event registrations.\r\n *\r\n * It does several things:\r\n *  - Maintains the list of event registrations for this location/query.\r\n *  - Maintains a cache of the data visible for this location/query.\r\n *  - Applies new operations (via applyOperation), updates the cache, and based on the event\r\n *    registrations returns the set of events to be raised.\r\n */\r\nclass View {\r\n    constructor(query_, initialViewCache) {\r\n        this.query_ = query_;\r\n        this.eventRegistrations_ = [];\r\n        const params = this.query_._queryParams;\r\n        const indexFilter = new IndexedFilter(params.getIndex());\r\n        const filter = queryParamsGetNodeFilter(params);\r\n        this.processor_ = newViewProcessor(filter);\r\n        const initialServerCache = initialViewCache.serverCache;\r\n        const initialEventCache = initialViewCache.eventCache;\r\n        // Don't filter server node with other filter than index, wait for tagged listen\r\n        const serverSnap = indexFilter.updateFullNode(ChildrenNode.EMPTY_NODE, initialServerCache.getNode(), null);\r\n        const eventSnap = filter.updateFullNode(ChildrenNode.EMPTY_NODE, initialEventCache.getNode(), null);\r\n        const newServerCache = new CacheNode(serverSnap, initialServerCache.isFullyInitialized(), indexFilter.filtersNodes());\r\n        const newEventCache = new CacheNode(eventSnap, initialEventCache.isFullyInitialized(), filter.filtersNodes());\r\n        this.viewCache_ = newViewCache(newEventCache, newServerCache);\r\n        this.eventGenerator_ = new EventGenerator(this.query_);\r\n    }\r\n    get query() {\r\n        return this.query_;\r\n    }\r\n}\r\nfunction viewGetServerCache(view) {\r\n    return view.viewCache_.serverCache.getNode();\r\n}\r\nfunction viewGetCompleteNode(view) {\r\n    return viewCacheGetCompleteEventSnap(view.viewCache_);\r\n}\r\nfunction viewGetCompleteServerCache(view, path) {\r\n    const cache = viewCacheGetCompleteServerSnap(view.viewCache_);\r\n    if (cache) {\r\n        // If this isn't a \"loadsAllData\" view, then cache isn't actually a complete cache and\r\n        // we need to see if it contains the child we're interested in.\r\n        if (view.query._queryParams.loadsAllData() ||\r\n            (!pathIsEmpty(path) &&\r\n                !cache.getImmediateChild(pathGetFront(path)).isEmpty())) {\r\n            return cache.getChild(path);\r\n        }\r\n    }\r\n    return null;\r\n}\r\nfunction viewIsEmpty(view) {\r\n    return view.eventRegistrations_.length === 0;\r\n}\r\nfunction viewAddEventRegistration(view, eventRegistration) {\r\n    view.eventRegistrations_.push(eventRegistration);\r\n}\r\n/**\r\n * @param eventRegistration - If null, remove all callbacks.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns Cancel events, if cancelError was provided.\r\n */\r\nfunction viewRemoveEventRegistration(view, eventRegistration, cancelError) {\r\n    const cancelEvents = [];\r\n    if (cancelError) {\r\n        assert(eventRegistration == null, 'A cancel should cancel all event registrations.');\r\n        const path = view.query._path;\r\n        view.eventRegistrations_.forEach(registration => {\r\n            const maybeEvent = registration.createCancelEvent(cancelError, path);\r\n            if (maybeEvent) {\r\n                cancelEvents.push(maybeEvent);\r\n            }\r\n        });\r\n    }\r\n    if (eventRegistration) {\r\n        let remaining = [];\r\n        for (let i = 0; i < view.eventRegistrations_.length; ++i) {\r\n            const existing = view.eventRegistrations_[i];\r\n            if (!existing.matches(eventRegistration)) {\r\n                remaining.push(existing);\r\n            }\r\n            else if (eventRegistration.hasAnyCallback()) {\r\n                // We're removing just this one\r\n                remaining = remaining.concat(view.eventRegistrations_.slice(i + 1));\r\n                break;\r\n            }\r\n        }\r\n        view.eventRegistrations_ = remaining;\r\n    }\r\n    else {\r\n        view.eventRegistrations_ = [];\r\n    }\r\n    return cancelEvents;\r\n}\r\n/**\r\n * Applies the given Operation, updates our cache, and returns the appropriate events.\r\n */\r\nfunction viewApplyOperation(view, operation, writesCache, completeServerCache) {\r\n    if (operation.type === OperationType.MERGE &&\r\n        operation.source.queryId !== null) {\r\n        assert(viewCacheGetCompleteServerSnap(view.viewCache_), 'We should always have a full cache before handling merges');\r\n        assert(viewCacheGetCompleteEventSnap(view.viewCache_), 'Missing event cache, even though we have a server cache');\r\n    }\r\n    const oldViewCache = view.viewCache_;\r\n    const result = viewProcessorApplyOperation(view.processor_, oldViewCache, operation, writesCache, completeServerCache);\r\n    viewProcessorAssertIndexed(view.processor_, result.viewCache);\r\n    assert(result.viewCache.serverCache.isFullyInitialized() ||\r\n        !oldViewCache.serverCache.isFullyInitialized(), 'Once a server snap is complete, it should never go back');\r\n    view.viewCache_ = result.viewCache;\r\n    return viewGenerateEventsForChanges_(view, result.changes, result.viewCache.eventCache.getNode(), null);\r\n}\r\nfunction viewGetInitialEvents(view, registration) {\r\n    const eventSnap = view.viewCache_.eventCache;\r\n    const initialChanges = [];\r\n    if (!eventSnap.getNode().isLeafNode()) {\r\n        const eventNode = eventSnap.getNode();\r\n        eventNode.forEachChild(PRIORITY_INDEX, (key, childNode) => {\r\n            initialChanges.push(changeChildAdded(key, childNode));\r\n        });\r\n    }\r\n    if (eventSnap.isFullyInitialized()) {\r\n        initialChanges.push(changeValue(eventSnap.getNode()));\r\n    }\r\n    return viewGenerateEventsForChanges_(view, initialChanges, eventSnap.getNode(), registration);\r\n}\r\nfunction viewGenerateEventsForChanges_(view, changes, eventCache, eventRegistration) {\r\n    const registrations = eventRegistration\r\n        ? [eventRegistration]\r\n        : view.eventRegistrations_;\r\n    return eventGeneratorGenerateEventsForChanges(view.eventGenerator_, changes, eventCache, registrations);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet referenceConstructor$1;\r\n/**\r\n * SyncPoint represents a single location in a SyncTree with 1 or more event registrations, meaning we need to\r\n * maintain 1 or more Views at this location to cache server data and raise appropriate events for server changes\r\n * and user writes (set, transaction, update).\r\n *\r\n * It's responsible for:\r\n *  - Maintaining the set of 1 or more views necessary at this location (a SyncPoint with 0 views should be removed).\r\n *  - Proxying user / server operations to the views as appropriate (i.e. applyServerOverwrite,\r\n *    applyUserOverwrite, etc.)\r\n */\r\nclass SyncPoint {\r\n    constructor() {\r\n        /**\r\n         * The Views being tracked at this location in the tree, stored as a map where the key is a\r\n         * queryId and the value is the View for that query.\r\n         *\r\n         * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more is an odd use case).\r\n         */\r\n        this.views = new Map();\r\n    }\r\n}\r\nfunction syncPointSetReferenceConstructor(val) {\r\n    assert(!referenceConstructor$1, '__referenceConstructor has already been defined');\r\n    referenceConstructor$1 = val;\r\n}\r\nfunction syncPointGetReferenceConstructor() {\r\n    assert(referenceConstructor$1, 'Reference.ts has not been loaded');\r\n    return referenceConstructor$1;\r\n}\r\nfunction syncPointIsEmpty(syncPoint) {\r\n    return syncPoint.views.size === 0;\r\n}\r\nfunction syncPointApplyOperation(syncPoint, operation, writesCache, optCompleteServerCache) {\r\n    const queryId = operation.source.queryId;\r\n    if (queryId !== null) {\r\n        const view = syncPoint.views.get(queryId);\r\n        assert(view != null, 'SyncTree gave us an op for an invalid query.');\r\n        return viewApplyOperation(view, operation, writesCache, optCompleteServerCache);\r\n    }\r\n    else {\r\n        let events = [];\r\n        for (const view of syncPoint.views.values()) {\r\n            events = events.concat(viewApplyOperation(view, operation, writesCache, optCompleteServerCache));\r\n        }\r\n        return events;\r\n    }\r\n}\r\n/**\r\n * Get a view for the specified query.\r\n *\r\n * @param query - The query to return a view for\r\n * @param writesCache\r\n * @param serverCache\r\n * @param serverCacheComplete\r\n * @returns Events to raise.\r\n */\r\nfunction syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete) {\r\n    const queryId = query._queryIdentifier;\r\n    const view = syncPoint.views.get(queryId);\r\n    if (!view) {\r\n        // TODO: make writesCache take flag for complete server node\r\n        let eventCache = writeTreeRefCalcCompleteEventCache(writesCache, serverCacheComplete ? serverCache : null);\r\n        let eventCacheComplete = false;\r\n        if (eventCache) {\r\n            eventCacheComplete = true;\r\n        }\r\n        else if (serverCache instanceof ChildrenNode) {\r\n            eventCache = writeTreeRefCalcCompleteEventChildren(writesCache, serverCache);\r\n            eventCacheComplete = false;\r\n        }\r\n        else {\r\n            eventCache = ChildrenNode.EMPTY_NODE;\r\n            eventCacheComplete = false;\r\n        }\r\n        const viewCache = newViewCache(new CacheNode(eventCache, eventCacheComplete, false), new CacheNode(serverCache, serverCacheComplete, false));\r\n        return new View(query, viewCache);\r\n    }\r\n    return view;\r\n}\r\n/**\r\n * Add an event callback for the specified query.\r\n *\r\n * @param query\r\n * @param eventRegistration\r\n * @param writesCache\r\n * @param serverCache - Complete server cache, if we have it.\r\n * @param serverCacheComplete\r\n * @returns Events to raise.\r\n */\r\nfunction syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete) {\r\n    const view = syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete);\r\n    if (!syncPoint.views.has(query._queryIdentifier)) {\r\n        syncPoint.views.set(query._queryIdentifier, view);\r\n    }\r\n    // This is guaranteed to exist now, we just created anything that was missing\r\n    viewAddEventRegistration(view, eventRegistration);\r\n    return viewGetInitialEvents(view, eventRegistration);\r\n}\r\n/**\r\n * Remove event callback(s).  Return cancelEvents if a cancelError is specified.\r\n *\r\n * If query is the default query, we'll check all views for the specified eventRegistration.\r\n * If eventRegistration is null, we'll remove all callbacks for the specified view(s).\r\n *\r\n * @param eventRegistration - If null, remove all callbacks.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns removed queries and any cancel events\r\n */\r\nfunction syncPointRemoveEventRegistration(syncPoint, query, eventRegistration, cancelError) {\r\n    const queryId = query._queryIdentifier;\r\n    const removed = [];\r\n    let cancelEvents = [];\r\n    const hadCompleteView = syncPointHasCompleteView(syncPoint);\r\n    if (queryId === 'default') {\r\n        // When you do ref.off(...), we search all views for the registration to remove.\r\n        for (const [viewQueryId, view] of syncPoint.views.entries()) {\r\n            cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\r\n            if (viewIsEmpty(view)) {\r\n                syncPoint.views.delete(viewQueryId);\r\n                // We'll deal with complete views later.\r\n                if (!view.query._queryParams.loadsAllData()) {\r\n                    removed.push(view.query);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    else {\r\n        // remove the callback from the specific view.\r\n        const view = syncPoint.views.get(queryId);\r\n        if (view) {\r\n            cancelEvents = cancelEvents.concat(viewRemoveEventRegistration(view, eventRegistration, cancelError));\r\n            if (viewIsEmpty(view)) {\r\n                syncPoint.views.delete(queryId);\r\n                // We'll deal with complete views later.\r\n                if (!view.query._queryParams.loadsAllData()) {\r\n                    removed.push(view.query);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (hadCompleteView && !syncPointHasCompleteView(syncPoint)) {\r\n        // We removed our last complete view.\r\n        removed.push(new (syncPointGetReferenceConstructor())(query._repo, query._path));\r\n    }\r\n    return { removed, events: cancelEvents };\r\n}\r\nfunction syncPointGetQueryViews(syncPoint) {\r\n    const result = [];\r\n    for (const view of syncPoint.views.values()) {\r\n        if (!view.query._queryParams.loadsAllData()) {\r\n            result.push(view);\r\n        }\r\n    }\r\n    return result;\r\n}\r\n/**\r\n * @param path - The path to the desired complete snapshot\r\n * @returns A complete cache, if it exists\r\n */\r\nfunction syncPointGetCompleteServerCache(syncPoint, path) {\r\n    let serverCache = null;\r\n    for (const view of syncPoint.views.values()) {\r\n        serverCache = serverCache || viewGetCompleteServerCache(view, path);\r\n    }\r\n    return serverCache;\r\n}\r\nfunction syncPointViewForQuery(syncPoint, query) {\r\n    const params = query._queryParams;\r\n    if (params.loadsAllData()) {\r\n        return syncPointGetCompleteView(syncPoint);\r\n    }\r\n    else {\r\n        const queryId = query._queryIdentifier;\r\n        return syncPoint.views.get(queryId);\r\n    }\r\n}\r\nfunction syncPointViewExistsForQuery(syncPoint, query) {\r\n    return syncPointViewForQuery(syncPoint, query) != null;\r\n}\r\nfunction syncPointHasCompleteView(syncPoint) {\r\n    return syncPointGetCompleteView(syncPoint) != null;\r\n}\r\nfunction syncPointGetCompleteView(syncPoint) {\r\n    for (const view of syncPoint.views.values()) {\r\n        if (view.query._queryParams.loadsAllData()) {\r\n            return view;\r\n        }\r\n    }\r\n    return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nlet referenceConstructor;\r\nfunction syncTreeSetReferenceConstructor(val) {\r\n    assert(!referenceConstructor, '__referenceConstructor has already been defined');\r\n    referenceConstructor = val;\r\n}\r\nfunction syncTreeGetReferenceConstructor() {\r\n    assert(referenceConstructor, 'Reference.ts has not been loaded');\r\n    return referenceConstructor;\r\n}\r\n/**\r\n * Static tracker for next query tag.\r\n */\r\nlet syncTreeNextQueryTag_ = 1;\r\n/**\r\n * SyncTree is the central class for managing event callback registration, data caching, views\r\n * (query processing), and event generation.  There are typically two SyncTree instances for\r\n * each Repo, one for the normal Firebase data, and one for the .info data.\r\n *\r\n * It has a number of responsibilities, including:\r\n *  - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).\r\n *  - Applying and caching data changes for user set(), transaction(), and update() calls\r\n *    (applyUserOverwrite(), applyUserMerge()).\r\n *  - Applying and caching data changes for server data changes (applyServerOverwrite(),\r\n *    applyServerMerge()).\r\n *  - Generating user-facing events for server and user changes (all of the apply* methods\r\n *    return the set of events that need to be raised as a result).\r\n *  - Maintaining the appropriate set of server listens to ensure we are always subscribed\r\n *    to the correct set of paths and queries to satisfy the current set of user event\r\n *    callbacks (listens are started/stopped using the provided listenProvider).\r\n *\r\n * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual\r\n * events are returned to the caller rather than raised synchronously.\r\n *\r\n */\r\nclass SyncTree {\r\n    /**\r\n     * @param listenProvider_ - Used by SyncTree to start / stop listening\r\n     *   to server data.\r\n     */\r\n    constructor(listenProvider_) {\r\n        this.listenProvider_ = listenProvider_;\r\n        /**\r\n         * Tree of SyncPoints.  There's a SyncPoint at any location that has 1 or more views.\r\n         */\r\n        this.syncPointTree_ = new ImmutableTree(null);\r\n        /**\r\n         * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).\r\n         */\r\n        this.pendingWriteTree_ = newWriteTree();\r\n        this.tagToQueryMap = new Map();\r\n        this.queryToTagMap = new Map();\r\n    }\r\n}\r\n/**\r\n * Apply the data changes for a user-generated set() or transaction() call.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyUserOverwrite(syncTree, path, newData, writeId, visible) {\r\n    // Record pending write.\r\n    writeTreeAddOverwrite(syncTree.pendingWriteTree_, path, newData, writeId, visible);\r\n    if (!visible) {\r\n        return [];\r\n    }\r\n    else {\r\n        return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceUser(), path, newData));\r\n    }\r\n}\r\n/**\r\n * Apply the data from a user-generated update() call\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyUserMerge(syncTree, path, changedChildren, writeId) {\r\n    // Record pending merge.\r\n    writeTreeAddMerge(syncTree.pendingWriteTree_, path, changedChildren, writeId);\r\n    const changeTree = ImmutableTree.fromObject(changedChildren);\r\n    return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceUser(), path, changeTree));\r\n}\r\n/**\r\n * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().\r\n *\r\n * @param revert - True if the given write failed and needs to be reverted\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeAckUserWrite(syncTree, writeId, revert = false) {\r\n    const write = writeTreeGetWrite(syncTree.pendingWriteTree_, writeId);\r\n    const needToReevaluate = writeTreeRemoveWrite(syncTree.pendingWriteTree_, writeId);\r\n    if (!needToReevaluate) {\r\n        return [];\r\n    }\r\n    else {\r\n        let affectedTree = new ImmutableTree(null);\r\n        if (write.snap != null) {\r\n            // overwrite\r\n            affectedTree = affectedTree.set(newEmptyPath(), true);\r\n        }\r\n        else {\r\n            each(write.children, (pathString) => {\r\n                affectedTree = affectedTree.set(new Path(pathString), true);\r\n            });\r\n        }\r\n        return syncTreeApplyOperationToSyncPoints_(syncTree, new AckUserWrite(write.path, affectedTree, revert));\r\n    }\r\n}\r\n/**\r\n * Apply new server data for the specified path..\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyServerOverwrite(syncTree, path, newData) {\r\n    return syncTreeApplyOperationToSyncPoints_(syncTree, new Overwrite(newOperationSourceServer(), path, newData));\r\n}\r\n/**\r\n * Apply new server data to be merged in at the specified path.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyServerMerge(syncTree, path, changedChildren) {\r\n    const changeTree = ImmutableTree.fromObject(changedChildren);\r\n    return syncTreeApplyOperationToSyncPoints_(syncTree, new Merge(newOperationSourceServer(), path, changeTree));\r\n}\r\n/**\r\n * Apply a listen complete for a query\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyListenComplete(syncTree, path) {\r\n    return syncTreeApplyOperationToSyncPoints_(syncTree, new ListenComplete(newOperationSourceServer(), path));\r\n}\r\n/**\r\n * Apply a listen complete for a tagged query\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedListenComplete(syncTree, path, tag) {\r\n    const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n    if (queryKey) {\r\n        const r = syncTreeParseQueryKey_(queryKey);\r\n        const queryPath = r.path, queryId = r.queryId;\r\n        const relativePath = newRelativePath(queryPath, path);\r\n        const op = new ListenComplete(newOperationSourceServerTaggedQuery(queryId), relativePath);\r\n        return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n    }\r\n    else {\r\n        // We've already removed the query. No big deal, ignore the update\r\n        return [];\r\n    }\r\n}\r\n/**\r\n * Remove event callback(s).\r\n *\r\n * If query is the default query, we'll check all queries for the specified eventRegistration.\r\n * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.\r\n *\r\n * @param eventRegistration - If null, all callbacks are removed.\r\n * @param cancelError - If a cancelError is provided, appropriate cancel events will be returned.\r\n * @returns Cancel events, if cancelError was provided.\r\n */\r\nfunction syncTreeRemoveEventRegistration(syncTree, query, eventRegistration, cancelError) {\r\n    // Find the syncPoint first. Then deal with whether or not it has matching listeners\r\n    const path = query._path;\r\n    const maybeSyncPoint = syncTree.syncPointTree_.get(path);\r\n    let cancelEvents = [];\r\n    // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without\r\n    // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and\r\n    // not loadsAllData().\r\n    if (maybeSyncPoint &&\r\n        (query._queryIdentifier === 'default' ||\r\n            syncPointViewExistsForQuery(maybeSyncPoint, query))) {\r\n        const removedAndEvents = syncPointRemoveEventRegistration(maybeSyncPoint, query, eventRegistration, cancelError);\r\n        if (syncPointIsEmpty(maybeSyncPoint)) {\r\n            syncTree.syncPointTree_ = syncTree.syncPointTree_.remove(path);\r\n        }\r\n        const removed = removedAndEvents.removed;\r\n        cancelEvents = removedAndEvents.events;\r\n        // We may have just removed one of many listeners and can short-circuit this whole process\r\n        // We may also not have removed a default listener, in which case all of the descendant listeners should already be\r\n        // properly set up.\r\n        //\r\n        // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of\r\n        // queryId === 'default'\r\n        const removingDefault = -1 !==\r\n            removed.findIndex(query => {\r\n                return query._queryParams.loadsAllData();\r\n            });\r\n        const covered = syncTree.syncPointTree_.findOnPath(path, (relativePath, parentSyncPoint) => syncPointHasCompleteView(parentSyncPoint));\r\n        if (removingDefault && !covered) {\r\n            const subtree = syncTree.syncPointTree_.subtree(path);\r\n            // There are potentially child listeners. Determine what if any listens we need to send before executing the\r\n            // removal\r\n            if (!subtree.isEmpty()) {\r\n                // We need to fold over our subtree and collect the listeners to send\r\n                const newViews = syncTreeCollectDistinctViewsForSubTree_(subtree);\r\n                // Ok, we've collected all the listens we need. Set them up.\r\n                for (let i = 0; i < newViews.length; ++i) {\r\n                    const view = newViews[i], newQuery = view.query;\r\n                    const listener = syncTreeCreateListenerForView_(syncTree, view);\r\n                    syncTree.listenProvider_.startListening(syncTreeQueryForListening_(newQuery), syncTreeTagForQuery_(syncTree, newQuery), listener.hashFn, listener.onComplete);\r\n                }\r\n            }\r\n        }\r\n        // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query\r\n        // The above block has us covered in terms of making sure we're set up on listens lower in the tree.\r\n        // Also, note that if we have a cancelError, it's already been removed at the provider level.\r\n        if (!covered && removed.length > 0 && !cancelError) {\r\n            // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one\r\n            // default. Otherwise, we need to iterate through and cancel each individual query\r\n            if (removingDefault) {\r\n                // We don't tag default listeners\r\n                const defaultTag = null;\r\n                syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(query), defaultTag);\r\n            }\r\n            else {\r\n                removed.forEach((queryToRemove) => {\r\n                    const tagToRemove = syncTree.queryToTagMap.get(syncTreeMakeQueryKey_(queryToRemove));\r\n                    syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToRemove), tagToRemove);\r\n                });\r\n            }\r\n        }\r\n        // Now, clear all of the tags we're tracking for the removed listens\r\n        syncTreeRemoveTags_(syncTree, removed);\r\n    }\r\n    return cancelEvents;\r\n}\r\n/**\r\n * This function was added to support non-listener queries,\r\n * specifically for use in repoGetValue. It sets up all the same\r\n * local cache data-structures (SyncPoint + View) that are\r\n * needed for listeners without installing an event registration.\r\n * If `query` is not `loadsAllData`, it will also provision a tag for\r\n * the query so that query results can be merged into the sync\r\n * tree using existing logic for tagged listener queries.\r\n *\r\n * @param syncTree - Synctree to add the query to.\r\n * @param query - Query to register\r\n * @returns tag as a string if query is not a default query, null if query is not.\r\n */\r\nfunction syncTreeRegisterQuery(syncTree, query) {\r\n    const { syncPoint, serverCache, writesCache, serverCacheComplete } = syncTreeRegisterSyncPoint(query, syncTree);\r\n    const view = syncPointGetView(syncPoint, query, writesCache, serverCache, serverCacheComplete);\r\n    if (!syncPoint.views.has(query._queryIdentifier)) {\r\n        syncPoint.views.set(query._queryIdentifier, view);\r\n    }\r\n    if (!query._queryParams.loadsAllData()) {\r\n        return syncTreeTagForQuery_(syncTree, query);\r\n    }\r\n    return null;\r\n}\r\n/**\r\n * Apply new server data for the specified tagged query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedQueryOverwrite(syncTree, path, snap, tag) {\r\n    const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n    if (queryKey != null) {\r\n        const r = syncTreeParseQueryKey_(queryKey);\r\n        const queryPath = r.path, queryId = r.queryId;\r\n        const relativePath = newRelativePath(queryPath, path);\r\n        const op = new Overwrite(newOperationSourceServerTaggedQuery(queryId), relativePath, snap);\r\n        return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n    }\r\n    else {\r\n        // Query must have been removed already\r\n        return [];\r\n    }\r\n}\r\n/**\r\n * Apply server data to be merged in for the specified tagged query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeApplyTaggedQueryMerge(syncTree, path, changedChildren, tag) {\r\n    const queryKey = syncTreeQueryKeyForTag_(syncTree, tag);\r\n    if (queryKey) {\r\n        const r = syncTreeParseQueryKey_(queryKey);\r\n        const queryPath = r.path, queryId = r.queryId;\r\n        const relativePath = newRelativePath(queryPath, path);\r\n        const changeTree = ImmutableTree.fromObject(changedChildren);\r\n        const op = new Merge(newOperationSourceServerTaggedQuery(queryId), relativePath, changeTree);\r\n        return syncTreeApplyTaggedOperation_(syncTree, queryPath, op);\r\n    }\r\n    else {\r\n        // We've already removed the query. No big deal, ignore the update\r\n        return [];\r\n    }\r\n}\r\n/**\r\n * Creates a new syncpoint for a query and creates a tag if the view doesn't exist.\r\n * Extracted from addEventRegistration to allow `repoGetValue` to properly set up the SyncTree\r\n * without actually listening on a query.\r\n */\r\nfunction syncTreeRegisterSyncPoint(query, syncTree) {\r\n    const path = query._path;\r\n    let serverCache = null;\r\n    let foundAncestorDefaultView = false;\r\n    // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n    // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n    syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\r\n        const relativePath = newRelativePath(pathToSyncPoint, path);\r\n        serverCache =\r\n            serverCache || syncPointGetCompleteServerCache(sp, relativePath);\r\n        foundAncestorDefaultView =\r\n            foundAncestorDefaultView || syncPointHasCompleteView(sp);\r\n    });\r\n    let syncPoint = syncTree.syncPointTree_.get(path);\r\n    if (!syncPoint) {\r\n        syncPoint = new SyncPoint();\r\n        syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\r\n    }\r\n    else {\r\n        foundAncestorDefaultView =\r\n            foundAncestorDefaultView || syncPointHasCompleteView(syncPoint);\r\n        serverCache =\r\n            serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n    }\r\n    let serverCacheComplete;\r\n    if (serverCache != null) {\r\n        serverCacheComplete = true;\r\n    }\r\n    else {\r\n        serverCacheComplete = false;\r\n        serverCache = ChildrenNode.EMPTY_NODE;\r\n        const subtree = syncTree.syncPointTree_.subtree(path);\r\n        subtree.foreachChild((childName, childSyncPoint) => {\r\n            const completeCache = syncPointGetCompleteServerCache(childSyncPoint, newEmptyPath());\r\n            if (completeCache) {\r\n                serverCache = serverCache.updateImmediateChild(childName, completeCache);\r\n            }\r\n        });\r\n    }\r\n    const viewAlreadyExists = syncPointViewExistsForQuery(syncPoint, query);\r\n    if (!viewAlreadyExists && !query._queryParams.loadsAllData()) {\r\n        // We need to track a tag for this query\r\n        const queryKey = syncTreeMakeQueryKey_(query);\r\n        assert(!syncTree.queryToTagMap.has(queryKey), 'View does not exist, but we have a tag');\r\n        const tag = syncTreeGetNextQueryTag_();\r\n        syncTree.queryToTagMap.set(queryKey, tag);\r\n        syncTree.tagToQueryMap.set(tag, queryKey);\r\n    }\r\n    const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, path);\r\n    return {\r\n        syncPoint,\r\n        writesCache,\r\n        serverCache,\r\n        serverCacheComplete,\r\n        foundAncestorDefaultView,\r\n        viewAlreadyExists\r\n    };\r\n}\r\n/**\r\n * Add an event callback for the specified query.\r\n *\r\n * @returns Events to raise.\r\n */\r\nfunction syncTreeAddEventRegistration(syncTree, query, eventRegistration) {\r\n    const { syncPoint, serverCache, writesCache, serverCacheComplete, viewAlreadyExists, foundAncestorDefaultView } = syncTreeRegisterSyncPoint(query, syncTree);\r\n    let events = syncPointAddEventRegistration(syncPoint, query, eventRegistration, writesCache, serverCache, serverCacheComplete);\r\n    if (!viewAlreadyExists && !foundAncestorDefaultView) {\r\n        const view = syncPointViewForQuery(syncPoint, query);\r\n        events = events.concat(syncTreeSetupListener_(syncTree, query, view));\r\n    }\r\n    return events;\r\n}\r\n/**\r\n * Returns a complete cache, if we have one, of the data at a particular path. If the location does not have a\r\n * listener above it, we will get a false \"null\". This shouldn't be a problem because transactions will always\r\n * have a listener above, and atomic operations would correctly show a jitter of <increment value> ->\r\n *     <incremented total> as the write is applied locally and then acknowledged at the server.\r\n *\r\n * Note: this method will *include* hidden writes from transaction with applyLocally set to false.\r\n *\r\n * @param path - The path to the data we want\r\n * @param writeIdsToExclude - A specific set to be excluded\r\n */\r\nfunction syncTreeCalcCompleteEventCache(syncTree, path, writeIdsToExclude) {\r\n    const includeHiddenSets = true;\r\n    const writeTree = syncTree.pendingWriteTree_;\r\n    const serverCache = syncTree.syncPointTree_.findOnPath(path, (pathSoFar, syncPoint) => {\r\n        const relativePath = newRelativePath(pathSoFar, path);\r\n        const serverCache = syncPointGetCompleteServerCache(syncPoint, relativePath);\r\n        if (serverCache) {\r\n            return serverCache;\r\n        }\r\n    });\r\n    return writeTreeCalcCompleteEventCache(writeTree, path, serverCache, writeIdsToExclude, includeHiddenSets);\r\n}\r\nfunction syncTreeGetServerValue(syncTree, query) {\r\n    const path = query._path;\r\n    let serverCache = null;\r\n    // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n    // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n    syncTree.syncPointTree_.foreachOnPath(path, (pathToSyncPoint, sp) => {\r\n        const relativePath = newRelativePath(pathToSyncPoint, path);\r\n        serverCache =\r\n            serverCache || syncPointGetCompleteServerCache(sp, relativePath);\r\n    });\r\n    let syncPoint = syncTree.syncPointTree_.get(path);\r\n    if (!syncPoint) {\r\n        syncPoint = new SyncPoint();\r\n        syncTree.syncPointTree_ = syncTree.syncPointTree_.set(path, syncPoint);\r\n    }\r\n    else {\r\n        serverCache =\r\n            serverCache || syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n    }\r\n    const serverCacheComplete = serverCache != null;\r\n    const serverCacheNode = serverCacheComplete\r\n        ? new CacheNode(serverCache, true, false)\r\n        : null;\r\n    const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, query._path);\r\n    const view = syncPointGetView(syncPoint, query, writesCache, serverCacheComplete ? serverCacheNode.getNode() : ChildrenNode.EMPTY_NODE, serverCacheComplete);\r\n    return viewGetCompleteNode(view);\r\n}\r\n/**\r\n * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.\r\n *\r\n * NOTES:\r\n * - Descendant SyncPoints will be visited first (since we raise events depth-first).\r\n *\r\n * - We call applyOperation() on each SyncPoint passing three things:\r\n *   1. A version of the Operation that has been made relative to the SyncPoint location.\r\n *   2. A WriteTreeRef of any writes we have cached at the SyncPoint location.\r\n *   3. A snapshot Node with cached server data, if we have it.\r\n *\r\n * - We concatenate all of the events returned by each SyncPoint and return the result.\r\n */\r\nfunction syncTreeApplyOperationToSyncPoints_(syncTree, operation) {\r\n    return syncTreeApplyOperationHelper_(operation, syncTree.syncPointTree_, \r\n    /*serverCache=*/ null, writeTreeChildWrites(syncTree.pendingWriteTree_, newEmptyPath()));\r\n}\r\n/**\r\n * Recursive helper for applyOperationToSyncPoints_\r\n */\r\nfunction syncTreeApplyOperationHelper_(operation, syncPointTree, serverCache, writesCache) {\r\n    if (pathIsEmpty(operation.path)) {\r\n        return syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache);\r\n    }\r\n    else {\r\n        const syncPoint = syncPointTree.get(newEmptyPath());\r\n        // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n        if (serverCache == null && syncPoint != null) {\r\n            serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n        }\r\n        let events = [];\r\n        const childName = pathGetFront(operation.path);\r\n        const childOperation = operation.operationForChild(childName);\r\n        const childTree = syncPointTree.children.get(childName);\r\n        if (childTree && childOperation) {\r\n            const childServerCache = serverCache\r\n                ? serverCache.getImmediateChild(childName)\r\n                : null;\r\n            const childWritesCache = writeTreeRefChild(writesCache, childName);\r\n            events = events.concat(syncTreeApplyOperationHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n        }\r\n        if (syncPoint) {\r\n            events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\r\n        }\r\n        return events;\r\n    }\r\n}\r\n/**\r\n * Recursive helper for applyOperationToSyncPoints_\r\n */\r\nfunction syncTreeApplyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache) {\r\n    const syncPoint = syncPointTree.get(newEmptyPath());\r\n    // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n    if (serverCache == null && syncPoint != null) {\r\n        serverCache = syncPointGetCompleteServerCache(syncPoint, newEmptyPath());\r\n    }\r\n    let events = [];\r\n    syncPointTree.children.inorderTraversal((childName, childTree) => {\r\n        const childServerCache = serverCache\r\n            ? serverCache.getImmediateChild(childName)\r\n            : null;\r\n        const childWritesCache = writeTreeRefChild(writesCache, childName);\r\n        const childOperation = operation.operationForChild(childName);\r\n        if (childOperation) {\r\n            events = events.concat(syncTreeApplyOperationDescendantsHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n        }\r\n    });\r\n    if (syncPoint) {\r\n        events = events.concat(syncPointApplyOperation(syncPoint, operation, writesCache, serverCache));\r\n    }\r\n    return events;\r\n}\r\nfunction syncTreeCreateListenerForView_(syncTree, view) {\r\n    const query = view.query;\r\n    const tag = syncTreeTagForQuery_(syncTree, query);\r\n    return {\r\n        hashFn: () => {\r\n            const cache = viewGetServerCache(view) || ChildrenNode.EMPTY_NODE;\r\n            return cache.hash();\r\n        },\r\n        onComplete: (status) => {\r\n            if (status === 'ok') {\r\n                if (tag) {\r\n                    return syncTreeApplyTaggedListenComplete(syncTree, query._path, tag);\r\n                }\r\n                else {\r\n                    return syncTreeApplyListenComplete(syncTree, query._path);\r\n                }\r\n            }\r\n            else {\r\n                // If a listen failed, kill all of the listeners here, not just the one that triggered the error.\r\n                // Note that this may need to be scoped to just this listener if we change permissions on filtered children\r\n                const error = errorForServerCode(status, query);\r\n                return syncTreeRemoveEventRegistration(syncTree, query, \r\n                /*eventRegistration*/ null, error);\r\n            }\r\n        }\r\n    };\r\n}\r\n/**\r\n * Return the tag associated with the given query.\r\n */\r\nfunction syncTreeTagForQuery_(syncTree, query) {\r\n    const queryKey = syncTreeMakeQueryKey_(query);\r\n    return syncTree.queryToTagMap.get(queryKey);\r\n}\r\n/**\r\n * Given a query, computes a \"queryKey\" suitable for use in our queryToTagMap_.\r\n */\r\nfunction syncTreeMakeQueryKey_(query) {\r\n    return query._path.toString() + '$' + query._queryIdentifier;\r\n}\r\n/**\r\n * Return the query associated with the given tag, if we have one\r\n */\r\nfunction syncTreeQueryKeyForTag_(syncTree, tag) {\r\n    return syncTree.tagToQueryMap.get(tag);\r\n}\r\n/**\r\n * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.\r\n */\r\nfunction syncTreeParseQueryKey_(queryKey) {\r\n    const splitIndex = queryKey.indexOf('$');\r\n    assert(splitIndex !== -1 && splitIndex < queryKey.length - 1, 'Bad queryKey.');\r\n    return {\r\n        queryId: queryKey.substr(splitIndex + 1),\r\n        path: new Path(queryKey.substr(0, splitIndex))\r\n    };\r\n}\r\n/**\r\n * A helper method to apply tagged operations\r\n */\r\nfunction syncTreeApplyTaggedOperation_(syncTree, queryPath, operation) {\r\n    const syncPoint = syncTree.syncPointTree_.get(queryPath);\r\n    assert(syncPoint, \"Missing sync point for query tag that we're tracking\");\r\n    const writesCache = writeTreeChildWrites(syncTree.pendingWriteTree_, queryPath);\r\n    return syncPointApplyOperation(syncPoint, operation, writesCache, null);\r\n}\r\n/**\r\n * This collapses multiple unfiltered views into a single view, since we only need a single\r\n * listener for them.\r\n */\r\nfunction syncTreeCollectDistinctViewsForSubTree_(subtree) {\r\n    return subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\r\n        if (maybeChildSyncPoint && syncPointHasCompleteView(maybeChildSyncPoint)) {\r\n            const completeView = syncPointGetCompleteView(maybeChildSyncPoint);\r\n            return [completeView];\r\n        }\r\n        else {\r\n            // No complete view here, flatten any deeper listens into an array\r\n            let views = [];\r\n            if (maybeChildSyncPoint) {\r\n                views = syncPointGetQueryViews(maybeChildSyncPoint);\r\n            }\r\n            each(childMap, (_key, childViews) => {\r\n                views = views.concat(childViews);\r\n            });\r\n            return views;\r\n        }\r\n    });\r\n}\r\n/**\r\n * Normalizes a query to a query we send the server for listening\r\n *\r\n * @returns The normalized query\r\n */\r\nfunction syncTreeQueryForListening_(query) {\r\n    if (query._queryParams.loadsAllData() && !query._queryParams.isDefault()) {\r\n        // We treat queries that load all data as default queries\r\n        // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits\r\n        // from Query\r\n        return new (syncTreeGetReferenceConstructor())(query._repo, query._path);\r\n    }\r\n    else {\r\n        return query;\r\n    }\r\n}\r\nfunction syncTreeRemoveTags_(syncTree, queries) {\r\n    for (let j = 0; j < queries.length; ++j) {\r\n        const removedQuery = queries[j];\r\n        if (!removedQuery._queryParams.loadsAllData()) {\r\n            // We should have a tag for this\r\n            const removedQueryKey = syncTreeMakeQueryKey_(removedQuery);\r\n            const removedQueryTag = syncTree.queryToTagMap.get(removedQueryKey);\r\n            syncTree.queryToTagMap.delete(removedQueryKey);\r\n            syncTree.tagToQueryMap.delete(removedQueryTag);\r\n        }\r\n    }\r\n}\r\n/**\r\n * Static accessor for query tags.\r\n */\r\nfunction syncTreeGetNextQueryTag_() {\r\n    return syncTreeNextQueryTag_++;\r\n}\r\n/**\r\n * For a given new listen, manage the de-duplication of outstanding subscriptions.\r\n *\r\n * @returns This method can return events to support synchronous data sources\r\n */\r\nfunction syncTreeSetupListener_(syncTree, query, view) {\r\n    const path = query._path;\r\n    const tag = syncTreeTagForQuery_(syncTree, query);\r\n    const listener = syncTreeCreateListenerForView_(syncTree, view);\r\n    const events = syncTree.listenProvider_.startListening(syncTreeQueryForListening_(query), tag, listener.hashFn, listener.onComplete);\r\n    const subtree = syncTree.syncPointTree_.subtree(path);\r\n    // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we\r\n    // may need to shadow other listens as well.\r\n    if (tag) {\r\n        assert(!syncPointHasCompleteView(subtree.value), \"If we're adding a query, it shouldn't be shadowed\");\r\n    }\r\n    else {\r\n        // Shadow everything at or below this location, this is a default listener.\r\n        const queriesToStop = subtree.fold((relativePath, maybeChildSyncPoint, childMap) => {\r\n            if (!pathIsEmpty(relativePath) &&\r\n                maybeChildSyncPoint &&\r\n                syncPointHasCompleteView(maybeChildSyncPoint)) {\r\n                return [syncPointGetCompleteView(maybeChildSyncPoint).query];\r\n            }\r\n            else {\r\n                // No default listener here, flatten any deeper queries into an array\r\n                let queries = [];\r\n                if (maybeChildSyncPoint) {\r\n                    queries = queries.concat(syncPointGetQueryViews(maybeChildSyncPoint).map(view => view.query));\r\n                }\r\n                each(childMap, (_key, childQueries) => {\r\n                    queries = queries.concat(childQueries);\r\n                });\r\n                return queries;\r\n            }\r\n        });\r\n        for (let i = 0; i < queriesToStop.length; ++i) {\r\n            const queryToStop = queriesToStop[i];\r\n            syncTree.listenProvider_.stopListening(syncTreeQueryForListening_(queryToStop), syncTreeTagForQuery_(syncTree, queryToStop));\r\n        }\r\n    }\r\n    return events;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass ExistingValueProvider {\r\n    constructor(node_) {\r\n        this.node_ = node_;\r\n    }\r\n    getImmediateChild(childName) {\r\n        const child = this.node_.getImmediateChild(childName);\r\n        return new ExistingValueProvider(child);\r\n    }\r\n    node() {\r\n        return this.node_;\r\n    }\r\n}\r\nclass DeferredValueProvider {\r\n    constructor(syncTree, path) {\r\n        this.syncTree_ = syncTree;\r\n        this.path_ = path;\r\n    }\r\n    getImmediateChild(childName) {\r\n        const childPath = pathChild(this.path_, childName);\r\n        return new DeferredValueProvider(this.syncTree_, childPath);\r\n    }\r\n    node() {\r\n        return syncTreeCalcCompleteEventCache(this.syncTree_, this.path_);\r\n    }\r\n}\r\n/**\r\n * Generate placeholders for deferred values.\r\n */\r\nconst generateWithValues = function (values) {\r\n    values = values || {};\r\n    values['timestamp'] = values['timestamp'] || new Date().getTime();\r\n    return values;\r\n};\r\n/**\r\n * Value to use when firing local events. When writing server values, fire\r\n * local events with an approximate value, otherwise return value as-is.\r\n */\r\nconst resolveDeferredLeafValue = function (value, existingVal, serverValues) {\r\n    if (!value || typeof value !== 'object') {\r\n        return value;\r\n    }\r\n    assert('.sv' in value, 'Unexpected leaf node or priority contents');\r\n    if (typeof value['.sv'] === 'string') {\r\n        return resolveScalarDeferredValue(value['.sv'], existingVal, serverValues);\r\n    }\r\n    else if (typeof value['.sv'] === 'object') {\r\n        return resolveComplexDeferredValue(value['.sv'], existingVal);\r\n    }\r\n    else {\r\n        assert(false, 'Unexpected server value: ' + JSON.stringify(value, null, 2));\r\n    }\r\n};\r\nconst resolveScalarDeferredValue = function (op, existing, serverValues) {\r\n    switch (op) {\r\n        case 'timestamp':\r\n            return serverValues['timestamp'];\r\n        default:\r\n            assert(false, 'Unexpected server value: ' + op);\r\n    }\r\n};\r\nconst resolveComplexDeferredValue = function (op, existing, unused) {\r\n    if (!op.hasOwnProperty('increment')) {\r\n        assert(false, 'Unexpected server value: ' + JSON.stringify(op, null, 2));\r\n    }\r\n    const delta = op['increment'];\r\n    if (typeof delta !== 'number') {\r\n        assert(false, 'Unexpected increment value: ' + delta);\r\n    }\r\n    const existingNode = existing.node();\r\n    assert(existingNode !== null && typeof existingNode !== 'undefined', 'Expected ChildrenNode.EMPTY_NODE for nulls');\r\n    // Incrementing a non-number sets the value to the incremented amount\r\n    if (!existingNode.isLeafNode()) {\r\n        return delta;\r\n    }\r\n    const leaf = existingNode;\r\n    const existingVal = leaf.getValue();\r\n    if (typeof existingVal !== 'number') {\r\n        return delta;\r\n    }\r\n    // No need to do over/underflow arithmetic here because JS only handles floats under the covers\r\n    return existingVal + delta;\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the tree with the\r\n * specified generated replacement values.\r\n * @param path - path to which write is relative\r\n * @param node - new data written at path\r\n * @param syncTree - current data\r\n */\r\nconst resolveDeferredValueTree = function (path, node, syncTree, serverValues) {\r\n    return resolveDeferredValue(node, new DeferredValueProvider(syncTree, path), serverValues);\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the node with the\r\n * specified generated replacement values.  If there are no server values in the node,\r\n * it'll be returned as-is.\r\n */\r\nconst resolveDeferredValueSnapshot = function (node, existing, serverValues) {\r\n    return resolveDeferredValue(node, new ExistingValueProvider(existing), serverValues);\r\n};\r\nfunction resolveDeferredValue(node, existingVal, serverValues) {\r\n    const rawPri = node.getPriority().val();\r\n    const priority = resolveDeferredLeafValue(rawPri, existingVal.getImmediateChild('.priority'), serverValues);\r\n    let newNode;\r\n    if (node.isLeafNode()) {\r\n        const leafNode = node;\r\n        const value = resolveDeferredLeafValue(leafNode.getValue(), existingVal, serverValues);\r\n        if (value !== leafNode.getValue() ||\r\n            priority !== leafNode.getPriority().val()) {\r\n            return new LeafNode(value, nodeFromJSON(priority));\r\n        }\r\n        else {\r\n            return node;\r\n        }\r\n    }\r\n    else {\r\n        const childrenNode = node;\r\n        newNode = childrenNode;\r\n        if (priority !== childrenNode.getPriority().val()) {\r\n            newNode = newNode.updatePriority(new LeafNode(priority));\r\n        }\r\n        childrenNode.forEachChild(PRIORITY_INDEX, (childName, childNode) => {\r\n            const newChildNode = resolveDeferredValue(childNode, existingVal.getImmediateChild(childName), serverValues);\r\n            if (newChildNode !== childNode) {\r\n                newNode = newNode.updateImmediateChild(childName, newChildNode);\r\n            }\r\n        });\r\n        return newNode;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A light-weight tree, traversable by path.  Nodes can have both values and children.\r\n * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\r\n * children.\r\n */\r\nclass Tree {\r\n    /**\r\n     * @param name - Optional name of the node.\r\n     * @param parent - Optional parent node.\r\n     * @param node - Optional node to wrap.\r\n     */\r\n    constructor(name = '', parent = null, node = { children: {}, childCount: 0 }) {\r\n        this.name = name;\r\n        this.parent = parent;\r\n        this.node = node;\r\n    }\r\n}\r\n/**\r\n * Returns a sub-Tree for the given path.\r\n *\r\n * @param pathObj - Path to look up.\r\n * @returns Tree for path.\r\n */\r\nfunction treeSubTree(tree, pathObj) {\r\n    // TODO: Require pathObj to be Path?\r\n    let path = pathObj instanceof Path ? pathObj : new Path(pathObj);\r\n    let child = tree, next = pathGetFront(path);\r\n    while (next !== null) {\r\n        const childNode = safeGet(child.node.children, next) || {\r\n            children: {},\r\n            childCount: 0\r\n        };\r\n        child = new Tree(next, child, childNode);\r\n        path = pathPopFront(path);\r\n        next = pathGetFront(path);\r\n    }\r\n    return child;\r\n}\r\n/**\r\n * Returns the data associated with this tree node.\r\n *\r\n * @returns The data or null if no data exists.\r\n */\r\nfunction treeGetValue(tree) {\r\n    return tree.node.value;\r\n}\r\n/**\r\n * Sets data to this tree node.\r\n *\r\n * @param value - Value to set.\r\n */\r\nfunction treeSetValue(tree, value) {\r\n    tree.node.value = value;\r\n    treeUpdateParents(tree);\r\n}\r\n/**\r\n * @returns Whether the tree has any children.\r\n */\r\nfunction treeHasChildren(tree) {\r\n    return tree.node.childCount > 0;\r\n}\r\n/**\r\n * @returns Whethe rthe tree is empty (no value or children).\r\n */\r\nfunction treeIsEmpty(tree) {\r\n    return treeGetValue(tree) === undefined && !treeHasChildren(tree);\r\n}\r\n/**\r\n * Calls action for each child of this tree node.\r\n *\r\n * @param action - Action to be called for each child.\r\n */\r\nfunction treeForEachChild(tree, action) {\r\n    each(tree.node.children, (child, childTree) => {\r\n        action(new Tree(child, tree, childTree));\r\n    });\r\n}\r\n/**\r\n * Does a depth-first traversal of this node's descendants, calling action for each one.\r\n *\r\n * @param action - Action to be called for each child.\r\n * @param includeSelf - Whether to call action on this node as well. Defaults to\r\n *   false.\r\n * @param childrenFirst - Whether to call action on children before calling it on\r\n *   parent.\r\n */\r\nfunction treeForEachDescendant(tree, action, includeSelf, childrenFirst) {\r\n    if (includeSelf && !childrenFirst) {\r\n        action(tree);\r\n    }\r\n    treeForEachChild(tree, child => {\r\n        treeForEachDescendant(child, action, true, childrenFirst);\r\n    });\r\n    if (includeSelf && childrenFirst) {\r\n        action(tree);\r\n    }\r\n}\r\n/**\r\n * Calls action on each ancestor node.\r\n *\r\n * @param action - Action to be called on each parent; return\r\n *   true to abort.\r\n * @param includeSelf - Whether to call action on this node as well.\r\n * @returns true if the action callback returned true.\r\n */\r\nfunction treeForEachAncestor(tree, action, includeSelf) {\r\n    let node = includeSelf ? tree : tree.parent;\r\n    while (node !== null) {\r\n        if (action(node)) {\r\n            return true;\r\n        }\r\n        node = node.parent;\r\n    }\r\n    return false;\r\n}\r\n/**\r\n * @returns The path of this tree node, as a Path.\r\n */\r\nfunction treeGetPath(tree) {\r\n    return new Path(tree.parent === null\r\n        ? tree.name\r\n        : treeGetPath(tree.parent) + '/' + tree.name);\r\n}\r\n/**\r\n * Adds or removes this child from its parent based on whether it's empty or not.\r\n */\r\nfunction treeUpdateParents(tree) {\r\n    if (tree.parent !== null) {\r\n        treeUpdateChild(tree.parent, tree.name, tree);\r\n    }\r\n}\r\n/**\r\n * Adds or removes the passed child to this tree node, depending on whether it's empty.\r\n *\r\n * @param childName - The name of the child to update.\r\n * @param child - The child to update.\r\n */\r\nfunction treeUpdateChild(tree, childName, child) {\r\n    const childEmpty = treeIsEmpty(child);\r\n    const childExists = contains(tree.node.children, childName);\r\n    if (childEmpty && childExists) {\r\n        delete tree.node.children[childName];\r\n        tree.node.childCount--;\r\n        treeUpdateParents(tree);\r\n    }\r\n    else if (!childEmpty && !childExists) {\r\n        tree.node.children[childName] = child.node;\r\n        tree.node.childCount++;\r\n        treeUpdateParents(tree);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * True for invalid Firebase keys\r\n */\r\nconst INVALID_KEY_REGEX_ = /[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * True for invalid Firebase paths.\r\n * Allows '/' in paths.\r\n */\r\nconst INVALID_PATH_REGEX_ = /[\\[\\].#$\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * Maximum number of characters to allow in leaf value\r\n */\r\nconst MAX_LEAF_SIZE_ = 10 * 1024 * 1024;\r\nconst isValidKey = function (key) {\r\n    return (typeof key === 'string' && key.length !== 0 && !INVALID_KEY_REGEX_.test(key));\r\n};\r\nconst isValidPathString = function (pathString) {\r\n    return (typeof pathString === 'string' &&\r\n        pathString.length !== 0 &&\r\n        !INVALID_PATH_REGEX_.test(pathString));\r\n};\r\nconst isValidRootPathString = function (pathString) {\r\n    if (pathString) {\r\n        // Allow '/.info/' at the beginning.\r\n        pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n    }\r\n    return isValidPathString(pathString);\r\n};\r\nconst isValidPriority = function (priority) {\r\n    return (priority === null ||\r\n        typeof priority === 'string' ||\r\n        (typeof priority === 'number' && !isInvalidJSONNumber(priority)) ||\r\n        (priority &&\r\n            typeof priority === 'object' &&\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            contains(priority, '.sv')));\r\n};\r\n/**\r\n * Pre-validate a datum passed as an argument to Firebase function.\r\n */\r\nconst validateFirebaseDataArg = function (fnName, value, path, optional) {\r\n    if (optional && value === undefined) {\r\n        return;\r\n    }\r\n    validateFirebaseData(errorPrefix(fnName, 'value'), value, path);\r\n};\r\n/**\r\n * Validate a data object client-side before sending to server.\r\n */\r\nconst validateFirebaseData = function (errorPrefix, data, path_) {\r\n    const path = path_ instanceof Path ? new ValidationPath(path_, errorPrefix) : path_;\r\n    if (data === undefined) {\r\n        throw new Error(errorPrefix + 'contains undefined ' + validationPathToErrorString(path));\r\n    }\r\n    if (typeof data === 'function') {\r\n        throw new Error(errorPrefix +\r\n            'contains a function ' +\r\n            validationPathToErrorString(path) +\r\n            ' with contents = ' +\r\n            data.toString());\r\n    }\r\n    if (isInvalidJSONNumber(data)) {\r\n        throw new Error(errorPrefix +\r\n            'contains ' +\r\n            data.toString() +\r\n            ' ' +\r\n            validationPathToErrorString(path));\r\n    }\r\n    // Check max leaf size, but try to avoid the utf8 conversion if we can.\r\n    if (typeof data === 'string' &&\r\n        data.length > MAX_LEAF_SIZE_ / 3 &&\r\n        stringLength(data) > MAX_LEAF_SIZE_) {\r\n        throw new Error(errorPrefix +\r\n            'contains a string greater than ' +\r\n            MAX_LEAF_SIZE_ +\r\n            ' utf8 bytes ' +\r\n            validationPathToErrorString(path) +\r\n            \" ('\" +\r\n            data.substring(0, 50) +\r\n            \"...')\");\r\n    }\r\n    // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON\r\n    // to save extra walking of large objects.\r\n    if (data && typeof data === 'object') {\r\n        let hasDotValue = false;\r\n        let hasActualChild = false;\r\n        each(data, (key, value) => {\r\n            if (key === '.value') {\r\n                hasDotValue = true;\r\n            }\r\n            else if (key !== '.priority' && key !== '.sv') {\r\n                hasActualChild = true;\r\n                if (!isValidKey(key)) {\r\n                    throw new Error(errorPrefix +\r\n                        ' contains an invalid key (' +\r\n                        key +\r\n                        ') ' +\r\n                        validationPathToErrorString(path) +\r\n                        '.  Keys must be non-empty strings ' +\r\n                        'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n                }\r\n            }\r\n            validationPathPush(path, key);\r\n            validateFirebaseData(errorPrefix, value, path);\r\n            validationPathPop(path);\r\n        });\r\n        if (hasDotValue && hasActualChild) {\r\n            throw new Error(errorPrefix +\r\n                ' contains \".value\" child ' +\r\n                validationPathToErrorString(path) +\r\n                ' in addition to actual children.');\r\n        }\r\n    }\r\n};\r\n/**\r\n * Pre-validate paths passed in the firebase function.\r\n */\r\nconst validateFirebaseMergePaths = function (errorPrefix, mergePaths) {\r\n    let i, curPath;\r\n    for (i = 0; i < mergePaths.length; i++) {\r\n        curPath = mergePaths[i];\r\n        const keys = pathSlice(curPath);\r\n        for (let j = 0; j < keys.length; j++) {\r\n            if (keys[j] === '.priority' && j === keys.length - 1) ;\r\n            else if (!isValidKey(keys[j])) {\r\n                throw new Error(errorPrefix +\r\n                    'contains an invalid key (' +\r\n                    keys[j] +\r\n                    ') in path ' +\r\n                    curPath.toString() +\r\n                    '. Keys must be non-empty strings ' +\r\n                    'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n            }\r\n        }\r\n    }\r\n    // Check that update keys are not descendants of each other.\r\n    // We rely on the property that sorting guarantees that ancestors come\r\n    // right before descendants.\r\n    mergePaths.sort(pathCompare);\r\n    let prevPath = null;\r\n    for (i = 0; i < mergePaths.length; i++) {\r\n        curPath = mergePaths[i];\r\n        if (prevPath !== null && pathContains(prevPath, curPath)) {\r\n            throw new Error(errorPrefix +\r\n                'contains a path ' +\r\n                prevPath.toString() +\r\n                ' that is ancestor of another path ' +\r\n                curPath.toString());\r\n        }\r\n        prevPath = curPath;\r\n    }\r\n};\r\n/**\r\n * pre-validate an object passed as an argument to firebase function (\r\n * must be an object - e.g. for firebase.update()).\r\n */\r\nconst validateFirebaseMergeDataArg = function (fnName, data, path, optional) {\r\n    if (optional && data === undefined) {\r\n        return;\r\n    }\r\n    const errorPrefix$1 = errorPrefix(fnName, 'values');\r\n    if (!(data && typeof data === 'object') || Array.isArray(data)) {\r\n        throw new Error(errorPrefix$1 + ' must be an object containing the children to replace.');\r\n    }\r\n    const mergePaths = [];\r\n    each(data, (key, value) => {\r\n        const curPath = new Path(key);\r\n        validateFirebaseData(errorPrefix$1, value, pathChild(path, curPath));\r\n        if (pathGetBack(curPath) === '.priority') {\r\n            if (!isValidPriority(value)) {\r\n                throw new Error(errorPrefix$1 +\r\n                    \"contains an invalid value for '\" +\r\n                    curPath.toString() +\r\n                    \"', which must be a valid \" +\r\n                    'Firebase priority (a string, finite number, server value, or null).');\r\n            }\r\n        }\r\n        mergePaths.push(curPath);\r\n    });\r\n    validateFirebaseMergePaths(errorPrefix$1, mergePaths);\r\n};\r\nconst validatePriority = function (fnName, priority, optional) {\r\n    if (optional && priority === undefined) {\r\n        return;\r\n    }\r\n    if (isInvalidJSONNumber(priority)) {\r\n        throw new Error(errorPrefix(fnName, 'priority') +\r\n            'is ' +\r\n            priority.toString() +\r\n            ', but must be a valid Firebase priority (a string, finite number, ' +\r\n            'server value, or null).');\r\n    }\r\n    // Special case to allow importing data with a .sv.\r\n    if (!isValidPriority(priority)) {\r\n        throw new Error(errorPrefix(fnName, 'priority') +\r\n            'must be a valid Firebase priority ' +\r\n            '(a string, finite number, server value, or null).');\r\n    }\r\n};\r\nconst validateKey = function (fnName, argumentName, key, optional) {\r\n    if (optional && key === undefined) {\r\n        return;\r\n    }\r\n    if (!isValidKey(key)) {\r\n        throw new Error(errorPrefix(fnName, argumentName) +\r\n            'was an invalid key = \"' +\r\n            key +\r\n            '\".  Firebase keys must be non-empty strings and ' +\r\n            'can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\").');\r\n    }\r\n};\r\n/**\r\n * @internal\r\n */\r\nconst validatePathString = function (fnName, argumentName, pathString, optional) {\r\n    if (optional && pathString === undefined) {\r\n        return;\r\n    }\r\n    if (!isValidPathString(pathString)) {\r\n        throw new Error(errorPrefix(fnName, argumentName) +\r\n            'was an invalid path = \"' +\r\n            pathString +\r\n            '\". Paths must be non-empty strings and ' +\r\n            'can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\"');\r\n    }\r\n};\r\nconst validateRootPathString = function (fnName, argumentName, pathString, optional) {\r\n    if (pathString) {\r\n        // Allow '/.info/' at the beginning.\r\n        pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n    }\r\n    validatePathString(fnName, argumentName, pathString, optional);\r\n};\r\n/**\r\n * @internal\r\n */\r\nconst validateWritablePath = function (fnName, path) {\r\n    if (pathGetFront(path) === '.info') {\r\n        throw new Error(fnName + \" failed = Can't modify data under /.info/\");\r\n    }\r\n};\r\nconst validateUrl = function (fnName, parsedUrl) {\r\n    // TODO = Validate server better.\r\n    const pathString = parsedUrl.path.toString();\r\n    if (!(typeof parsedUrl.repoInfo.host === 'string') ||\r\n        parsedUrl.repoInfo.host.length === 0 ||\r\n        (!isValidKey(parsedUrl.repoInfo.namespace) &&\r\n            parsedUrl.repoInfo.host.split(':')[0] !== 'localhost') ||\r\n        (pathString.length !== 0 && !isValidRootPathString(pathString))) {\r\n        throw new Error(errorPrefix(fnName, 'url') +\r\n            'must be a valid firebase URL and ' +\r\n            'the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');\r\n    }\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The event queue serves a few purposes:\r\n * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more\r\n *    events being queued.\r\n * 2. raiseQueuedEvents() handles being called reentrantly nicely.  That is, if in the course of raising events,\r\n *    raiseQueuedEvents() is called again, the \"inner\" call will pick up raising events where the \"outer\" call\r\n *    left off, ensuring that the events are still raised synchronously and in order.\r\n * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued\r\n *    events are raised synchronously.\r\n *\r\n * NOTE: This can all go away if/when we move to async events.\r\n *\r\n */\r\nclass EventQueue {\r\n    constructor() {\r\n        this.eventLists_ = [];\r\n        /**\r\n         * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.\r\n         */\r\n        this.recursionDepth_ = 0;\r\n    }\r\n}\r\n/**\r\n * @param eventDataList - The new events to queue.\r\n */\r\nfunction eventQueueQueueEvents(eventQueue, eventDataList) {\r\n    // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.\r\n    let currList = null;\r\n    for (let i = 0; i < eventDataList.length; i++) {\r\n        const data = eventDataList[i];\r\n        const path = data.getPath();\r\n        if (currList !== null && !pathEquals(path, currList.path)) {\r\n            eventQueue.eventLists_.push(currList);\r\n            currList = null;\r\n        }\r\n        if (currList === null) {\r\n            currList = { events: [], path };\r\n        }\r\n        currList.events.push(data);\r\n    }\r\n    if (currList) {\r\n        eventQueue.eventLists_.push(currList);\r\n    }\r\n}\r\n/**\r\n * Queues the specified events and synchronously raises all events (including previously queued ones)\r\n * for the specified path.\r\n *\r\n * It is assumed that the new events are all for the specified path.\r\n *\r\n * @param path - The path to raise events for.\r\n * @param eventDataList - The new events to raise.\r\n */\r\nfunction eventQueueRaiseEventsAtPath(eventQueue, path, eventDataList) {\r\n    eventQueueQueueEvents(eventQueue, eventDataList);\r\n    eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathEquals(eventPath, path));\r\n}\r\n/**\r\n * Queues the specified events and synchronously raises all events (including previously queued ones) for\r\n * locations related to the specified change path (i.e. all ancestors and descendants).\r\n *\r\n * It is assumed that the new events are all related (ancestor or descendant) to the specified path.\r\n *\r\n * @param changedPath - The path to raise events for.\r\n * @param eventDataList - The events to raise\r\n */\r\nfunction eventQueueRaiseEventsForChangedPath(eventQueue, changedPath, eventDataList) {\r\n    eventQueueQueueEvents(eventQueue, eventDataList);\r\n    eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, eventPath => pathContains(eventPath, changedPath) ||\r\n        pathContains(changedPath, eventPath));\r\n}\r\nfunction eventQueueRaiseQueuedEventsMatchingPredicate(eventQueue, predicate) {\r\n    eventQueue.recursionDepth_++;\r\n    let sentAll = true;\r\n    for (let i = 0; i < eventQueue.eventLists_.length; i++) {\r\n        const eventList = eventQueue.eventLists_[i];\r\n        if (eventList) {\r\n            const eventPath = eventList.path;\r\n            if (predicate(eventPath)) {\r\n                eventListRaise(eventQueue.eventLists_[i]);\r\n                eventQueue.eventLists_[i] = null;\r\n            }\r\n            else {\r\n                sentAll = false;\r\n            }\r\n        }\r\n    }\r\n    if (sentAll) {\r\n        eventQueue.eventLists_ = [];\r\n    }\r\n    eventQueue.recursionDepth_--;\r\n}\r\n/**\r\n * Iterates through the list and raises each event\r\n */\r\nfunction eventListRaise(eventList) {\r\n    for (let i = 0; i < eventList.events.length; i++) {\r\n        const eventData = eventList.events[i];\r\n        if (eventData !== null) {\r\n            eventList.events[i] = null;\r\n            const eventFn = eventData.getEventRunner();\r\n            if (logger) {\r\n                log('event: ' + eventData.toString());\r\n            }\r\n            exceptionGuard(eventFn);\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst INTERRUPT_REASON = 'repo_interrupt';\r\n/**\r\n * If a transaction does not succeed after 25 retries, we abort it. Among other\r\n * things this ensure that if there's ever a bug causing a mismatch between\r\n * client / server hashes for some data, we won't retry indefinitely.\r\n */\r\nconst MAX_TRANSACTION_RETRIES = 25;\r\n/**\r\n * A connection to a single data repository.\r\n */\r\nclass Repo {\r\n    constructor(repoInfo_, forceRestClient_, authTokenProvider_, appCheckProvider_) {\r\n        this.repoInfo_ = repoInfo_;\r\n        this.forceRestClient_ = forceRestClient_;\r\n        this.authTokenProvider_ = authTokenProvider_;\r\n        this.appCheckProvider_ = appCheckProvider_;\r\n        this.dataUpdateCount = 0;\r\n        this.statsListener_ = null;\r\n        this.eventQueue_ = new EventQueue();\r\n        this.nextWriteId_ = 1;\r\n        this.interceptServerDataCallback_ = null;\r\n        /** A list of data pieces and paths to be set when this client disconnects. */\r\n        this.onDisconnect_ = newSparseSnapshotTree();\r\n        /** Stores queues of outstanding transactions for Firebase locations. */\r\n        this.transactionQueueTree_ = new Tree();\r\n        // TODO: This should be @private but it's used by test_access.js and internal.js\r\n        this.persistentConnection_ = null;\r\n        // This key is intentionally not updated if RepoInfo is later changed or replaced\r\n        this.key = this.repoInfo_.toURLString();\r\n    }\r\n    /**\r\n     * @returns The URL corresponding to the root of this Firebase.\r\n     */\r\n    toString() {\r\n        return ((this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host);\r\n    }\r\n}\r\nfunction repoStart(repo, appId, authOverride) {\r\n    repo.stats_ = statsManagerGetCollection(repo.repoInfo_);\r\n    if (repo.forceRestClient_ || beingCrawled()) {\r\n        repo.server_ = new ReadonlyRestClient(repo.repoInfo_, (pathString, data, isMerge, tag) => {\r\n            repoOnDataUpdate(repo, pathString, data, isMerge, tag);\r\n        }, repo.authTokenProvider_, repo.appCheckProvider_);\r\n        // Minor hack: Fire onConnect immediately, since there's no actual connection.\r\n        setTimeout(() => repoOnConnectStatus(repo, /* connectStatus= */ true), 0);\r\n    }\r\n    else {\r\n        // Validate authOverride\r\n        if (typeof authOverride !== 'undefined' && authOverride !== null) {\r\n            if (typeof authOverride !== 'object') {\r\n                throw new Error('Only objects are supported for option databaseAuthVariableOverride');\r\n            }\r\n            try {\r\n                stringify(authOverride);\r\n            }\r\n            catch (e) {\r\n                throw new Error('Invalid authOverride provided: ' + e);\r\n            }\r\n        }\r\n        repo.persistentConnection_ = new PersistentConnection(repo.repoInfo_, appId, (pathString, data, isMerge, tag) => {\r\n            repoOnDataUpdate(repo, pathString, data, isMerge, tag);\r\n        }, (connectStatus) => {\r\n            repoOnConnectStatus(repo, connectStatus);\r\n        }, (updates) => {\r\n            repoOnServerInfoUpdate(repo, updates);\r\n        }, repo.authTokenProvider_, repo.appCheckProvider_, authOverride);\r\n        repo.server_ = repo.persistentConnection_;\r\n    }\r\n    repo.authTokenProvider_.addTokenChangeListener(token => {\r\n        repo.server_.refreshAuthToken(token);\r\n    });\r\n    repo.appCheckProvider_.addTokenChangeListener(result => {\r\n        repo.server_.refreshAppCheckToken(result.token);\r\n    });\r\n    // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),\r\n    // we only want to create one StatsReporter.  As such, we'll report stats over the first Repo created.\r\n    repo.statsReporter_ = statsManagerGetOrCreateReporter(repo.repoInfo_, () => new StatsReporter(repo.stats_, repo.server_));\r\n    // Used for .info.\r\n    repo.infoData_ = new SnapshotHolder();\r\n    repo.infoSyncTree_ = new SyncTree({\r\n        startListening: (query, tag, currentHashFn, onComplete) => {\r\n            let infoEvents = [];\r\n            const node = repo.infoData_.getNode(query._path);\r\n            // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events\r\n            // on initial data...\r\n            if (!node.isEmpty()) {\r\n                infoEvents = syncTreeApplyServerOverwrite(repo.infoSyncTree_, query._path, node);\r\n                setTimeout(() => {\r\n                    onComplete('ok');\r\n                }, 0);\r\n            }\r\n            return infoEvents;\r\n        },\r\n        stopListening: () => { }\r\n    });\r\n    repoUpdateInfo(repo, 'connected', false);\r\n    repo.serverSyncTree_ = new SyncTree({\r\n        startListening: (query, tag, currentHashFn, onComplete) => {\r\n            repo.server_.listen(query, currentHashFn, tag, (status, data) => {\r\n                const events = onComplete(status, data);\r\n                eventQueueRaiseEventsForChangedPath(repo.eventQueue_, query._path, events);\r\n            });\r\n            // No synchronous events for network-backed sync trees\r\n            return [];\r\n        },\r\n        stopListening: (query, tag) => {\r\n            repo.server_.unlisten(query, tag);\r\n        }\r\n    });\r\n}\r\n/**\r\n * @returns The time in milliseconds, taking the server offset into account if we have one.\r\n */\r\nfunction repoServerTime(repo) {\r\n    const offsetNode = repo.infoData_.getNode(new Path('.info/serverTimeOffset'));\r\n    const offset = offsetNode.val() || 0;\r\n    return new Date().getTime() + offset;\r\n}\r\n/**\r\n * Generate ServerValues using some variables from the repo object.\r\n */\r\nfunction repoGenerateServerValues(repo) {\r\n    return generateWithValues({\r\n        timestamp: repoServerTime(repo)\r\n    });\r\n}\r\n/**\r\n * Called by realtime when we get new messages from the server.\r\n */\r\nfunction repoOnDataUpdate(repo, pathString, data, isMerge, tag) {\r\n    // For testing.\r\n    repo.dataUpdateCount++;\r\n    const path = new Path(pathString);\r\n    data = repo.interceptServerDataCallback_\r\n        ? repo.interceptServerDataCallback_(pathString, data)\r\n        : data;\r\n    let events = [];\r\n    if (tag) {\r\n        if (isMerge) {\r\n            const taggedChildren = map(data, (raw) => nodeFromJSON(raw));\r\n            events = syncTreeApplyTaggedQueryMerge(repo.serverSyncTree_, path, taggedChildren, tag);\r\n        }\r\n        else {\r\n            const taggedSnap = nodeFromJSON(data);\r\n            events = syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, path, taggedSnap, tag);\r\n        }\r\n    }\r\n    else if (isMerge) {\r\n        const changedChildren = map(data, (raw) => nodeFromJSON(raw));\r\n        events = syncTreeApplyServerMerge(repo.serverSyncTree_, path, changedChildren);\r\n    }\r\n    else {\r\n        const snap = nodeFromJSON(data);\r\n        events = syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap);\r\n    }\r\n    let affectedPath = path;\r\n    if (events.length > 0) {\r\n        // Since we have a listener outstanding for each transaction, receiving any events\r\n        // is a proxy for some change having occurred.\r\n        affectedPath = repoRerunTransactions(repo, path);\r\n    }\r\n    eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, events);\r\n}\r\nfunction repoOnConnectStatus(repo, connectStatus) {\r\n    repoUpdateInfo(repo, 'connected', connectStatus);\r\n    if (connectStatus === false) {\r\n        repoRunOnDisconnectEvents(repo);\r\n    }\r\n}\r\nfunction repoOnServerInfoUpdate(repo, updates) {\r\n    each(updates, (key, value) => {\r\n        repoUpdateInfo(repo, key, value);\r\n    });\r\n}\r\nfunction repoUpdateInfo(repo, pathString, value) {\r\n    const path = new Path('/.info/' + pathString);\r\n    const newNode = nodeFromJSON(value);\r\n    repo.infoData_.updateSnapshot(path, newNode);\r\n    const events = syncTreeApplyServerOverwrite(repo.infoSyncTree_, path, newNode);\r\n    eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n}\r\nfunction repoGetNextWriteId(repo) {\r\n    return repo.nextWriteId_++;\r\n}\r\n/**\r\n * The purpose of `getValue` is to return the latest known value\r\n * satisfying `query`.\r\n *\r\n * This method will first check for in-memory cached values\r\n * belonging to active listeners. If they are found, such values\r\n * are considered to be the most up-to-date.\r\n *\r\n * If the client is not connected, this method will try to\r\n * establish a connection and request the value for `query`. If\r\n * the client is not able to retrieve the query result, it reports\r\n * an error.\r\n *\r\n * @param query - The query to surface a value for.\r\n */\r\nfunction repoGetValue(repo, query) {\r\n    // Only active queries are cached. There is no persisted cache.\r\n    const cached = syncTreeGetServerValue(repo.serverSyncTree_, query);\r\n    if (cached != null) {\r\n        return Promise.resolve(cached);\r\n    }\r\n    return repo.server_.get(query).then(payload => {\r\n        const node = nodeFromJSON(payload).withIndex(query._queryParams.getIndex());\r\n        // if this is a filtered query, then overwrite at path\r\n        if (query._queryParams.loadsAllData()) {\r\n            syncTreeApplyServerOverwrite(repo.serverSyncTree_, query._path, node);\r\n        }\r\n        else {\r\n            // Simulate `syncTreeAddEventRegistration` without events/listener setup.\r\n            // We do this (along with the syncTreeRemoveEventRegistration` below) so that\r\n            // `repoGetValue` results have the same cache effects as initial listener(s)\r\n            // updates.\r\n            const tag = syncTreeRegisterQuery(repo.serverSyncTree_, query);\r\n            syncTreeApplyTaggedQueryOverwrite(repo.serverSyncTree_, query._path, node, tag);\r\n            // Call `syncTreeRemoveEventRegistration` with a null event registration, since there is none.\r\n            // Note: The below code essentially unregisters the query and cleans up any views/syncpoints temporarily created above.\r\n        }\r\n        const cancels = syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, null);\r\n        if (cancels.length > 0) {\r\n            repoLog(repo, 'unexpected cancel events in repoGetValue');\r\n        }\r\n        return node;\r\n    }, err => {\r\n        repoLog(repo, 'get for query ' + stringify(query) + ' failed: ' + err);\r\n        return Promise.reject(new Error(err));\r\n    });\r\n}\r\nfunction repoSetWithPriority(repo, path, newVal, newPriority, onComplete) {\r\n    repoLog(repo, 'set', {\r\n        path: path.toString(),\r\n        value: newVal,\r\n        priority: newPriority\r\n    });\r\n    // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or\r\n    // (b) store unresolved paths on JSON parse\r\n    const serverValues = repoGenerateServerValues(repo);\r\n    const newNodeUnresolved = nodeFromJSON(newVal, newPriority);\r\n    const existing = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path);\r\n    const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, existing, serverValues);\r\n    const writeId = repoGetNextWriteId(repo);\r\n    const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, writeId, true);\r\n    eventQueueQueueEvents(repo.eventQueue_, events);\r\n    repo.server_.put(path.toString(), newNodeUnresolved.val(/*export=*/ true), (status, errorReason) => {\r\n        const success = status === 'ok';\r\n        if (!success) {\r\n            warn('set at ' + path + ' failed: ' + status);\r\n        }\r\n        const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\r\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, clearEvents);\r\n        repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n    });\r\n    const affectedPath = repoAbortTransactions(repo, path);\r\n    repoRerunTransactions(repo, affectedPath);\r\n    // We queued the events above, so just flush the queue here\r\n    eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, []);\r\n}\r\nfunction repoUpdate(repo, path, childrenToMerge, onComplete) {\r\n    repoLog(repo, 'update', { path: path.toString(), value: childrenToMerge });\r\n    // Start with our existing data and merge each child into it.\r\n    let empty = true;\r\n    const serverValues = repoGenerateServerValues(repo);\r\n    const changedChildren = {};\r\n    each(childrenToMerge, (changedKey, changedValue) => {\r\n        empty = false;\r\n        changedChildren[changedKey] = resolveDeferredValueTree(pathChild(path, changedKey), nodeFromJSON(changedValue), repo.serverSyncTree_, serverValues);\r\n    });\r\n    if (!empty) {\r\n        const writeId = repoGetNextWriteId(repo);\r\n        const events = syncTreeApplyUserMerge(repo.serverSyncTree_, path, changedChildren, writeId);\r\n        eventQueueQueueEvents(repo.eventQueue_, events);\r\n        repo.server_.merge(path.toString(), childrenToMerge, (status, errorReason) => {\r\n            const success = status === 'ok';\r\n            if (!success) {\r\n                warn('update at ' + path + ' failed: ' + status);\r\n            }\r\n            const clearEvents = syncTreeAckUserWrite(repo.serverSyncTree_, writeId, !success);\r\n            const affectedPath = clearEvents.length > 0 ? repoRerunTransactions(repo, path) : path;\r\n            eventQueueRaiseEventsForChangedPath(repo.eventQueue_, affectedPath, clearEvents);\r\n            repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n        });\r\n        each(childrenToMerge, (changedPath) => {\r\n            const affectedPath = repoAbortTransactions(repo, pathChild(path, changedPath));\r\n            repoRerunTransactions(repo, affectedPath);\r\n        });\r\n        // We queued the events above, so just flush the queue here\r\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, []);\r\n    }\r\n    else {\r\n        log(\"update() called with empty data.  Don't do anything.\");\r\n        repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\r\n    }\r\n}\r\n/**\r\n * Applies all of the changes stored up in the onDisconnect_ tree.\r\n */\r\nfunction repoRunOnDisconnectEvents(repo) {\r\n    repoLog(repo, 'onDisconnectEvents');\r\n    const serverValues = repoGenerateServerValues(repo);\r\n    const resolvedOnDisconnectTree = newSparseSnapshotTree();\r\n    sparseSnapshotTreeForEachTree(repo.onDisconnect_, newEmptyPath(), (path, node) => {\r\n        const resolved = resolveDeferredValueTree(path, node, repo.serverSyncTree_, serverValues);\r\n        sparseSnapshotTreeRemember(resolvedOnDisconnectTree, path, resolved);\r\n    });\r\n    let events = [];\r\n    sparseSnapshotTreeForEachTree(resolvedOnDisconnectTree, newEmptyPath(), (path, snap) => {\r\n        events = events.concat(syncTreeApplyServerOverwrite(repo.serverSyncTree_, path, snap));\r\n        const affectedPath = repoAbortTransactions(repo, path);\r\n        repoRerunTransactions(repo, affectedPath);\r\n    });\r\n    repo.onDisconnect_ = newSparseSnapshotTree();\r\n    eventQueueRaiseEventsForChangedPath(repo.eventQueue_, newEmptyPath(), events);\r\n}\r\nfunction repoOnDisconnectCancel(repo, path, onComplete) {\r\n    repo.server_.onDisconnectCancel(path.toString(), (status, errorReason) => {\r\n        if (status === 'ok') {\r\n            sparseSnapshotTreeForget(repo.onDisconnect_, path);\r\n        }\r\n        repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n    });\r\n}\r\nfunction repoOnDisconnectSet(repo, path, value, onComplete) {\r\n    const newNode = nodeFromJSON(value);\r\n    repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\r\n        if (status === 'ok') {\r\n            sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\r\n        }\r\n        repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n    });\r\n}\r\nfunction repoOnDisconnectSetWithPriority(repo, path, value, priority, onComplete) {\r\n    const newNode = nodeFromJSON(value, priority);\r\n    repo.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), (status, errorReason) => {\r\n        if (status === 'ok') {\r\n            sparseSnapshotTreeRemember(repo.onDisconnect_, path, newNode);\r\n        }\r\n        repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n    });\r\n}\r\nfunction repoOnDisconnectUpdate(repo, path, childrenToMerge, onComplete) {\r\n    if (isEmpty(childrenToMerge)) {\r\n        log(\"onDisconnect().update() called with empty data.  Don't do anything.\");\r\n        repoCallOnCompleteCallback(repo, onComplete, 'ok', undefined);\r\n        return;\r\n    }\r\n    repo.server_.onDisconnectMerge(path.toString(), childrenToMerge, (status, errorReason) => {\r\n        if (status === 'ok') {\r\n            each(childrenToMerge, (childName, childNode) => {\r\n                const newChildNode = nodeFromJSON(childNode);\r\n                sparseSnapshotTreeRemember(repo.onDisconnect_, pathChild(path, childName), newChildNode);\r\n            });\r\n        }\r\n        repoCallOnCompleteCallback(repo, onComplete, status, errorReason);\r\n    });\r\n}\r\nfunction repoAddEventCallbackForQuery(repo, query, eventRegistration) {\r\n    let events;\r\n    if (pathGetFront(query._path) === '.info') {\r\n        events = syncTreeAddEventRegistration(repo.infoSyncTree_, query, eventRegistration);\r\n    }\r\n    else {\r\n        events = syncTreeAddEventRegistration(repo.serverSyncTree_, query, eventRegistration);\r\n    }\r\n    eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\r\n}\r\nfunction repoRemoveEventCallbackForQuery(repo, query, eventRegistration) {\r\n    // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof\r\n    // a little bit by handling the return values anyways.\r\n    let events;\r\n    if (pathGetFront(query._path) === '.info') {\r\n        events = syncTreeRemoveEventRegistration(repo.infoSyncTree_, query, eventRegistration);\r\n    }\r\n    else {\r\n        events = syncTreeRemoveEventRegistration(repo.serverSyncTree_, query, eventRegistration);\r\n    }\r\n    eventQueueRaiseEventsAtPath(repo.eventQueue_, query._path, events);\r\n}\r\nfunction repoInterrupt(repo) {\r\n    if (repo.persistentConnection_) {\r\n        repo.persistentConnection_.interrupt(INTERRUPT_REASON);\r\n    }\r\n}\r\nfunction repoResume(repo) {\r\n    if (repo.persistentConnection_) {\r\n        repo.persistentConnection_.resume(INTERRUPT_REASON);\r\n    }\r\n}\r\nfunction repoLog(repo, ...varArgs) {\r\n    let prefix = '';\r\n    if (repo.persistentConnection_) {\r\n        prefix = repo.persistentConnection_.id + ':';\r\n    }\r\n    log(prefix, ...varArgs);\r\n}\r\nfunction repoCallOnCompleteCallback(repo, callback, status, errorReason) {\r\n    if (callback) {\r\n        exceptionGuard(() => {\r\n            if (status === 'ok') {\r\n                callback(null);\r\n            }\r\n            else {\r\n                const code = (status || 'error').toUpperCase();\r\n                let message = code;\r\n                if (errorReason) {\r\n                    message += ': ' + errorReason;\r\n                }\r\n                const error = new Error(message);\r\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n                error.code = code;\r\n                callback(error);\r\n            }\r\n        });\r\n    }\r\n}\r\n/**\r\n * Creates a new transaction, adds it to the transactions we're tracking, and\r\n * sends it to the server if possible.\r\n *\r\n * @param path - Path at which to do transaction.\r\n * @param transactionUpdate - Update callback.\r\n * @param onComplete - Completion callback.\r\n * @param unwatcher - Function that will be called when the transaction no longer\r\n * need data updates for `path`.\r\n * @param applyLocally - Whether or not to make intermediate results visible\r\n */\r\nfunction repoStartTransaction(repo, path, transactionUpdate, onComplete, unwatcher, applyLocally) {\r\n    repoLog(repo, 'transaction on ' + path);\r\n    // Initialize transaction.\r\n    const transaction = {\r\n        path,\r\n        update: transactionUpdate,\r\n        onComplete,\r\n        // One of TransactionStatus enums.\r\n        status: null,\r\n        // Used when combining transactions at different locations to figure out\r\n        // which one goes first.\r\n        order: LUIDGenerator(),\r\n        // Whether to raise local events for this transaction.\r\n        applyLocally,\r\n        // Count of how many times we've retried the transaction.\r\n        retryCount: 0,\r\n        // Function to call to clean up our .on() listener.\r\n        unwatcher,\r\n        // Stores why a transaction was aborted.\r\n        abortReason: null,\r\n        currentWriteId: null,\r\n        currentInputSnapshot: null,\r\n        currentOutputSnapshotRaw: null,\r\n        currentOutputSnapshotResolved: null\r\n    };\r\n    // Run transaction initially.\r\n    const currentState = repoGetLatestState(repo, path, undefined);\r\n    transaction.currentInputSnapshot = currentState;\r\n    const newVal = transaction.update(currentState.val());\r\n    if (newVal === undefined) {\r\n        // Abort transaction.\r\n        transaction.unwatcher();\r\n        transaction.currentOutputSnapshotRaw = null;\r\n        transaction.currentOutputSnapshotResolved = null;\r\n        if (transaction.onComplete) {\r\n            transaction.onComplete(null, false, transaction.currentInputSnapshot);\r\n        }\r\n    }\r\n    else {\r\n        validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path);\r\n        // Mark as run and add to our queue.\r\n        transaction.status = 0 /* RUN */;\r\n        const queueNode = treeSubTree(repo.transactionQueueTree_, path);\r\n        const nodeQueue = treeGetValue(queueNode) || [];\r\n        nodeQueue.push(transaction);\r\n        treeSetValue(queueNode, nodeQueue);\r\n        // Update visibleData and raise events\r\n        // Note: We intentionally raise events after updating all of our\r\n        // transaction state, since the user could start new transactions from the\r\n        // event callbacks.\r\n        let priorityForNode;\r\n        if (typeof newVal === 'object' &&\r\n            newVal !== null &&\r\n            contains(newVal, '.priority')) {\r\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n            priorityForNode = safeGet(newVal, '.priority');\r\n            assert(isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' +\r\n                'Priority must be a valid string, finite number, server value, or null.');\r\n        }\r\n        else {\r\n            const currentNode = syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path) ||\r\n                ChildrenNode.EMPTY_NODE;\r\n            priorityForNode = currentNode.getPriority().val();\r\n        }\r\n        const serverValues = repoGenerateServerValues(repo);\r\n        const newNodeUnresolved = nodeFromJSON(newVal, priorityForNode);\r\n        const newNode = resolveDeferredValueSnapshot(newNodeUnresolved, currentState, serverValues);\r\n        transaction.currentOutputSnapshotRaw = newNodeUnresolved;\r\n        transaction.currentOutputSnapshotResolved = newNode;\r\n        transaction.currentWriteId = repoGetNextWriteId(repo);\r\n        const events = syncTreeApplyUserOverwrite(repo.serverSyncTree_, path, newNode, transaction.currentWriteId, transaction.applyLocally);\r\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n        repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n    }\r\n}\r\n/**\r\n * @param excludeSets - A specific set to exclude\r\n */\r\nfunction repoGetLatestState(repo, path, excludeSets) {\r\n    return (syncTreeCalcCompleteEventCache(repo.serverSyncTree_, path, excludeSets) ||\r\n        ChildrenNode.EMPTY_NODE);\r\n}\r\n/**\r\n * Sends any already-run transactions that aren't waiting for outstanding\r\n * transactions to complete.\r\n *\r\n * Externally it's called with no arguments, but it calls itself recursively\r\n * with a particular transactionQueueTree node to recurse through the tree.\r\n *\r\n * @param node - transactionQueueTree node to start at.\r\n */\r\nfunction repoSendReadyTransactions(repo, node = repo.transactionQueueTree_) {\r\n    // Before recursing, make sure any completed transactions are removed.\r\n    if (!node) {\r\n        repoPruneCompletedTransactionsBelowNode(repo, node);\r\n    }\r\n    if (treeGetValue(node)) {\r\n        const queue = repoBuildTransactionQueue(repo, node);\r\n        assert(queue.length > 0, 'Sending zero length transaction queue');\r\n        const allRun = queue.every((transaction) => transaction.status === 0 /* RUN */);\r\n        // If they're all run (and not sent), we can send them.  Else, we must wait.\r\n        if (allRun) {\r\n            repoSendTransactionQueue(repo, treeGetPath(node), queue);\r\n        }\r\n    }\r\n    else if (treeHasChildren(node)) {\r\n        treeForEachChild(node, childNode => {\r\n            repoSendReadyTransactions(repo, childNode);\r\n        });\r\n    }\r\n}\r\n/**\r\n * Given a list of run transactions, send them to the server and then handle\r\n * the result (success or failure).\r\n *\r\n * @param path - The location of the queue.\r\n * @param queue - Queue of transactions under the specified location.\r\n */\r\nfunction repoSendTransactionQueue(repo, path, queue) {\r\n    // Mark transactions as sent and increment retry count!\r\n    const setsToIgnore = queue.map(txn => {\r\n        return txn.currentWriteId;\r\n    });\r\n    const latestState = repoGetLatestState(repo, path, setsToIgnore);\r\n    let snapToSend = latestState;\r\n    const latestHash = latestState.hash();\r\n    for (let i = 0; i < queue.length; i++) {\r\n        const txn = queue[i];\r\n        assert(txn.status === 0 /* RUN */, 'tryToSendTransactionQueue_: items in queue should all be run.');\r\n        txn.status = 1 /* SENT */;\r\n        txn.retryCount++;\r\n        const relativePath = newRelativePath(path, txn.path);\r\n        // If we've gotten to this point, the output snapshot must be defined.\r\n        snapToSend = snapToSend.updateChild(relativePath /** @type {!Node} */, txn.currentOutputSnapshotRaw);\r\n    }\r\n    const dataToSend = snapToSend.val(true);\r\n    const pathToSend = path;\r\n    // Send the put.\r\n    repo.server_.put(pathToSend.toString(), dataToSend, (status) => {\r\n        repoLog(repo, 'transaction put response', {\r\n            path: pathToSend.toString(),\r\n            status\r\n        });\r\n        let events = [];\r\n        if (status === 'ok') {\r\n            // Queue up the callbacks and fire them after cleaning up all of our\r\n            // transaction state, since the callback could trigger more\r\n            // transactions or sets.\r\n            const callbacks = [];\r\n            for (let i = 0; i < queue.length; i++) {\r\n                queue[i].status = 2 /* COMPLETED */;\r\n                events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId));\r\n                if (queue[i].onComplete) {\r\n                    // We never unset the output snapshot, and given that this\r\n                    // transaction is complete, it should be set\r\n                    callbacks.push(() => queue[i].onComplete(null, true, queue[i].currentOutputSnapshotResolved));\r\n                }\r\n                queue[i].unwatcher();\r\n            }\r\n            // Now remove the completed transactions.\r\n            repoPruneCompletedTransactionsBelowNode(repo, treeSubTree(repo.transactionQueueTree_, path));\r\n            // There may be pending transactions that we can now send.\r\n            repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n            eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n            // Finally, trigger onComplete callbacks.\r\n            for (let i = 0; i < callbacks.length; i++) {\r\n                exceptionGuard(callbacks[i]);\r\n            }\r\n        }\r\n        else {\r\n            // transactions are no longer sent.  Update their status appropriately.\r\n            if (status === 'datastale') {\r\n                for (let i = 0; i < queue.length; i++) {\r\n                    if (queue[i].status === 3 /* SENT_NEEDS_ABORT */) {\r\n                        queue[i].status = 4 /* NEEDS_ABORT */;\r\n                    }\r\n                    else {\r\n                        queue[i].status = 0 /* RUN */;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);\r\n                for (let i = 0; i < queue.length; i++) {\r\n                    queue[i].status = 4 /* NEEDS_ABORT */;\r\n                    queue[i].abortReason = status;\r\n                }\r\n            }\r\n            repoRerunTransactions(repo, path);\r\n        }\r\n    }, latestHash);\r\n}\r\n/**\r\n * Finds all transactions dependent on the data at changedPath and reruns them.\r\n *\r\n * Should be called any time cached data changes.\r\n *\r\n * Return the highest path that was affected by rerunning transactions. This\r\n * is the path at which events need to be raised for.\r\n *\r\n * @param changedPath - The path in mergedData that changed.\r\n * @returns The rootmost path that was affected by rerunning transactions.\r\n */\r\nfunction repoRerunTransactions(repo, changedPath) {\r\n    const rootMostTransactionNode = repoGetAncestorTransactionNode(repo, changedPath);\r\n    const path = treeGetPath(rootMostTransactionNode);\r\n    const queue = repoBuildTransactionQueue(repo, rootMostTransactionNode);\r\n    repoRerunTransactionQueue(repo, queue, path);\r\n    return path;\r\n}\r\n/**\r\n * Does all the work of rerunning transactions (as well as cleans up aborted\r\n * transactions and whatnot).\r\n *\r\n * @param queue - The queue of transactions to run.\r\n * @param path - The path the queue is for.\r\n */\r\nfunction repoRerunTransactionQueue(repo, queue, path) {\r\n    if (queue.length === 0) {\r\n        return; // Nothing to do!\r\n    }\r\n    // Queue up the callbacks and fire them after cleaning up all of our\r\n    // transaction state, since the callback could trigger more transactions or\r\n    // sets.\r\n    const callbacks = [];\r\n    let events = [];\r\n    // Ignore all of the sets we're going to re-run.\r\n    const txnsToRerun = queue.filter(q => {\r\n        return q.status === 0 /* RUN */;\r\n    });\r\n    const setsToIgnore = txnsToRerun.map(q => {\r\n        return q.currentWriteId;\r\n    });\r\n    for (let i = 0; i < queue.length; i++) {\r\n        const transaction = queue[i];\r\n        const relativePath = newRelativePath(path, transaction.path);\r\n        let abortTransaction = false, abortReason;\r\n        assert(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');\r\n        if (transaction.status === 4 /* NEEDS_ABORT */) {\r\n            abortTransaction = true;\r\n            abortReason = transaction.abortReason;\r\n            events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n        }\r\n        else if (transaction.status === 0 /* RUN */) {\r\n            if (transaction.retryCount >= MAX_TRANSACTION_RETRIES) {\r\n                abortTransaction = true;\r\n                abortReason = 'maxretry';\r\n                events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n            }\r\n            else {\r\n                // This code reruns a transaction\r\n                const currentNode = repoGetLatestState(repo, transaction.path, setsToIgnore);\r\n                transaction.currentInputSnapshot = currentNode;\r\n                const newData = queue[i].update(currentNode.val());\r\n                if (newData !== undefined) {\r\n                    validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);\r\n                    let newDataNode = nodeFromJSON(newData);\r\n                    const hasExplicitPriority = typeof newData === 'object' &&\r\n                        newData != null &&\r\n                        contains(newData, '.priority');\r\n                    if (!hasExplicitPriority) {\r\n                        // Keep the old priority if there wasn't a priority explicitly specified.\r\n                        newDataNode = newDataNode.updatePriority(currentNode.getPriority());\r\n                    }\r\n                    const oldWriteId = transaction.currentWriteId;\r\n                    const serverValues = repoGenerateServerValues(repo);\r\n                    const newNodeResolved = resolveDeferredValueSnapshot(newDataNode, currentNode, serverValues);\r\n                    transaction.currentOutputSnapshotRaw = newDataNode;\r\n                    transaction.currentOutputSnapshotResolved = newNodeResolved;\r\n                    transaction.currentWriteId = repoGetNextWriteId(repo);\r\n                    // Mutates setsToIgnore in place\r\n                    setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\r\n                    events = events.concat(syncTreeApplyUserOverwrite(repo.serverSyncTree_, transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));\r\n                    events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, oldWriteId, true));\r\n                }\r\n                else {\r\n                    abortTransaction = true;\r\n                    abortReason = 'nodata';\r\n                    events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, transaction.currentWriteId, true));\r\n                }\r\n            }\r\n        }\r\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, path, events);\r\n        events = [];\r\n        if (abortTransaction) {\r\n            // Abort.\r\n            queue[i].status = 2 /* COMPLETED */;\r\n            // Removing a listener can trigger pruning which can muck with\r\n            // mergedData/visibleData (as it prunes data). So defer the unwatcher\r\n            // until we're done.\r\n            (function (unwatcher) {\r\n                setTimeout(unwatcher, Math.floor(0));\r\n            })(queue[i].unwatcher);\r\n            if (queue[i].onComplete) {\r\n                if (abortReason === 'nodata') {\r\n                    callbacks.push(() => queue[i].onComplete(null, false, queue[i].currentInputSnapshot));\r\n                }\r\n                else {\r\n                    callbacks.push(() => queue[i].onComplete(new Error(abortReason), false, null));\r\n                }\r\n            }\r\n        }\r\n    }\r\n    // Clean up completed transactions.\r\n    repoPruneCompletedTransactionsBelowNode(repo, repo.transactionQueueTree_);\r\n    // Now fire callbacks, now that we're in a good, known state.\r\n    for (let i = 0; i < callbacks.length; i++) {\r\n        exceptionGuard(callbacks[i]);\r\n    }\r\n    // Try to send the transaction result to the server.\r\n    repoSendReadyTransactions(repo, repo.transactionQueueTree_);\r\n}\r\n/**\r\n * Returns the rootmost ancestor node of the specified path that has a pending\r\n * transaction on it, or just returns the node for the given path if there are\r\n * no pending transactions on any ancestor.\r\n *\r\n * @param path - The location to start at.\r\n * @returns The rootmost node with a transaction.\r\n */\r\nfunction repoGetAncestorTransactionNode(repo, path) {\r\n    let front;\r\n    // Start at the root and walk deeper into the tree towards path until we\r\n    // find a node with pending transactions.\r\n    let transactionNode = repo.transactionQueueTree_;\r\n    front = pathGetFront(path);\r\n    while (front !== null && treeGetValue(transactionNode) === undefined) {\r\n        transactionNode = treeSubTree(transactionNode, front);\r\n        path = pathPopFront(path);\r\n        front = pathGetFront(path);\r\n    }\r\n    return transactionNode;\r\n}\r\n/**\r\n * Builds the queue of all transactions at or below the specified\r\n * transactionNode.\r\n *\r\n * @param transactionNode\r\n * @returns The generated queue.\r\n */\r\nfunction repoBuildTransactionQueue(repo, transactionNode) {\r\n    // Walk any child transaction queues and aggregate them into a single queue.\r\n    const transactionQueue = [];\r\n    repoAggregateTransactionQueuesForNode(repo, transactionNode, transactionQueue);\r\n    // Sort them by the order the transactions were created.\r\n    transactionQueue.sort((a, b) => a.order - b.order);\r\n    return transactionQueue;\r\n}\r\nfunction repoAggregateTransactionQueuesForNode(repo, node, queue) {\r\n    const nodeQueue = treeGetValue(node);\r\n    if (nodeQueue) {\r\n        for (let i = 0; i < nodeQueue.length; i++) {\r\n            queue.push(nodeQueue[i]);\r\n        }\r\n    }\r\n    treeForEachChild(node, child => {\r\n        repoAggregateTransactionQueuesForNode(repo, child, queue);\r\n    });\r\n}\r\n/**\r\n * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\r\n */\r\nfunction repoPruneCompletedTransactionsBelowNode(repo, node) {\r\n    const queue = treeGetValue(node);\r\n    if (queue) {\r\n        let to = 0;\r\n        for (let from = 0; from < queue.length; from++) {\r\n            if (queue[from].status !== 2 /* COMPLETED */) {\r\n                queue[to] = queue[from];\r\n                to++;\r\n            }\r\n        }\r\n        queue.length = to;\r\n        treeSetValue(node, queue.length > 0 ? queue : undefined);\r\n    }\r\n    treeForEachChild(node, childNode => {\r\n        repoPruneCompletedTransactionsBelowNode(repo, childNode);\r\n    });\r\n}\r\n/**\r\n * Aborts all transactions on ancestors or descendants of the specified path.\r\n * Called when doing a set() or update() since we consider them incompatible\r\n * with transactions.\r\n *\r\n * @param path - Path for which we want to abort related transactions.\r\n */\r\nfunction repoAbortTransactions(repo, path) {\r\n    const affectedPath = treeGetPath(repoGetAncestorTransactionNode(repo, path));\r\n    const transactionNode = treeSubTree(repo.transactionQueueTree_, path);\r\n    treeForEachAncestor(transactionNode, (node) => {\r\n        repoAbortTransactionsOnNode(repo, node);\r\n    });\r\n    repoAbortTransactionsOnNode(repo, transactionNode);\r\n    treeForEachDescendant(transactionNode, (node) => {\r\n        repoAbortTransactionsOnNode(repo, node);\r\n    });\r\n    return affectedPath;\r\n}\r\n/**\r\n * Abort transactions stored in this transaction queue node.\r\n *\r\n * @param node - Node to abort transactions for.\r\n */\r\nfunction repoAbortTransactionsOnNode(repo, node) {\r\n    const queue = treeGetValue(node);\r\n    if (queue) {\r\n        // Queue up the callbacks and fire them after cleaning up all of our\r\n        // transaction state, since the callback could trigger more transactions\r\n        // or sets.\r\n        const callbacks = [];\r\n        // Go through queue.  Any already-sent transactions must be marked for\r\n        // abort, while the unsent ones can be immediately aborted and removed.\r\n        let events = [];\r\n        let lastSent = -1;\r\n        for (let i = 0; i < queue.length; i++) {\r\n            if (queue[i].status === 3 /* SENT_NEEDS_ABORT */) ;\r\n            else if (queue[i].status === 1 /* SENT */) {\r\n                assert(lastSent === i - 1, 'All SENT items should be at beginning of queue.');\r\n                lastSent = i;\r\n                // Mark transaction for abort when it comes back.\r\n                queue[i].status = 3 /* SENT_NEEDS_ABORT */;\r\n                queue[i].abortReason = 'set';\r\n            }\r\n            else {\r\n                assert(queue[i].status === 0 /* RUN */, 'Unexpected transaction status in abort');\r\n                // We can abort it immediately.\r\n                queue[i].unwatcher();\r\n                events = events.concat(syncTreeAckUserWrite(repo.serverSyncTree_, queue[i].currentWriteId, true));\r\n                if (queue[i].onComplete) {\r\n                    callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, null));\r\n                }\r\n            }\r\n        }\r\n        if (lastSent === -1) {\r\n            // We're not waiting for any sent transactions.  We can clear the queue.\r\n            treeSetValue(node, undefined);\r\n        }\r\n        else {\r\n            // Remove the transactions we aborted.\r\n            queue.length = lastSent + 1;\r\n        }\r\n        // Now fire the callbacks.\r\n        eventQueueRaiseEventsForChangedPath(repo.eventQueue_, treeGetPath(node), events);\r\n        for (let i = 0; i < callbacks.length; i++) {\r\n            exceptionGuard(callbacks[i]);\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction decodePath(pathString) {\r\n    let pathStringDecoded = '';\r\n    const pieces = pathString.split('/');\r\n    for (let i = 0; i < pieces.length; i++) {\r\n        if (pieces[i].length > 0) {\r\n            let piece = pieces[i];\r\n            try {\r\n                piece = decodeURIComponent(piece.replace(/\\+/g, ' '));\r\n            }\r\n            catch (e) { }\r\n            pathStringDecoded += '/' + piece;\r\n        }\r\n    }\r\n    return pathStringDecoded;\r\n}\r\n/**\r\n * @returns key value hash\r\n */\r\nfunction decodeQuery(queryString) {\r\n    const results = {};\r\n    if (queryString.charAt(0) === '?') {\r\n        queryString = queryString.substring(1);\r\n    }\r\n    for (const segment of queryString.split('&')) {\r\n        if (segment.length === 0) {\r\n            continue;\r\n        }\r\n        const kv = segment.split('=');\r\n        if (kv.length === 2) {\r\n            results[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);\r\n        }\r\n        else {\r\n            warn(`Invalid query segment '${segment}' in query '${queryString}'`);\r\n        }\r\n    }\r\n    return results;\r\n}\r\nconst parseRepoInfo = function (dataURL, nodeAdmin) {\r\n    const parsedUrl = parseDatabaseURL(dataURL), namespace = parsedUrl.namespace;\r\n    if (parsedUrl.domain === 'firebase.com') {\r\n        fatal(parsedUrl.host +\r\n            ' is no longer supported. ' +\r\n            'Please use <YOUR FIREBASE>.firebaseio.com instead');\r\n    }\r\n    // Catch common error of uninitialized namespace value.\r\n    if ((!namespace || namespace === 'undefined') &&\r\n        parsedUrl.domain !== 'localhost') {\r\n        fatal('Cannot parse Firebase url. Please use https://<YOUR FIREBASE>.firebaseio.com');\r\n    }\r\n    if (!parsedUrl.secure) {\r\n        warnIfPageIsSecure();\r\n    }\r\n    const webSocketOnly = parsedUrl.scheme === 'ws' || parsedUrl.scheme === 'wss';\r\n    return {\r\n        repoInfo: new RepoInfo(parsedUrl.host, parsedUrl.secure, namespace, webSocketOnly, nodeAdmin, \r\n        /*persistenceKey=*/ '', \r\n        /*includeNamespaceInQueryParams=*/ namespace !== parsedUrl.subdomain),\r\n        path: new Path(parsedUrl.pathString)\r\n    };\r\n};\r\nconst parseDatabaseURL = function (dataURL) {\r\n    // Default to empty strings in the event of a malformed string.\r\n    let host = '', domain = '', subdomain = '', pathString = '', namespace = '';\r\n    // Always default to SSL, unless otherwise specified.\r\n    let secure = true, scheme = 'https', port = 443;\r\n    // Don't do any validation here. The caller is responsible for validating the result of parsing.\r\n    if (typeof dataURL === 'string') {\r\n        // Parse scheme.\r\n        let colonInd = dataURL.indexOf('//');\r\n        if (colonInd >= 0) {\r\n            scheme = dataURL.substring(0, colonInd - 1);\r\n            dataURL = dataURL.substring(colonInd + 2);\r\n        }\r\n        // Parse host, path, and query string.\r\n        let slashInd = dataURL.indexOf('/');\r\n        if (slashInd === -1) {\r\n            slashInd = dataURL.length;\r\n        }\r\n        let questionMarkInd = dataURL.indexOf('?');\r\n        if (questionMarkInd === -1) {\r\n            questionMarkInd = dataURL.length;\r\n        }\r\n        host = dataURL.substring(0, Math.min(slashInd, questionMarkInd));\r\n        if (slashInd < questionMarkInd) {\r\n            // For pathString, questionMarkInd will always come after slashInd\r\n            pathString = decodePath(dataURL.substring(slashInd, questionMarkInd));\r\n        }\r\n        const queryParams = decodeQuery(dataURL.substring(Math.min(dataURL.length, questionMarkInd)));\r\n        // If we have a port, use scheme for determining if it's secure.\r\n        colonInd = host.indexOf(':');\r\n        if (colonInd >= 0) {\r\n            secure = scheme === 'https' || scheme === 'wss';\r\n            port = parseInt(host.substring(colonInd + 1), 10);\r\n        }\r\n        else {\r\n            colonInd = host.length;\r\n        }\r\n        const hostWithoutPort = host.slice(0, colonInd);\r\n        if (hostWithoutPort.toLowerCase() === 'localhost') {\r\n            domain = 'localhost';\r\n        }\r\n        else if (hostWithoutPort.split('.').length <= 2) {\r\n            domain = hostWithoutPort;\r\n        }\r\n        else {\r\n            // Interpret the subdomain of a 3 or more component URL as the namespace name.\r\n            const dotInd = host.indexOf('.');\r\n            subdomain = host.substring(0, dotInd).toLowerCase();\r\n            domain = host.substring(dotInd + 1);\r\n            // Normalize namespaces to lowercase to share storage / connection.\r\n            namespace = subdomain;\r\n        }\r\n        // Always treat the value of the `ns` as the namespace name if it is present.\r\n        if ('ns' in queryParams) {\r\n            namespace = queryParams['ns'];\r\n        }\r\n    }\r\n    return {\r\n        host,\r\n        port,\r\n        domain,\r\n        subdomain,\r\n        secure,\r\n        scheme,\r\n        pathString,\r\n        namespace\r\n    };\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Encapsulates the data needed to raise an event\r\n */\r\nclass DataEvent {\r\n    /**\r\n     * @param eventType - One of: value, child_added, child_changed, child_moved, child_removed\r\n     * @param eventRegistration - The function to call to with the event data. User provided\r\n     * @param snapshot - The data backing the event\r\n     * @param prevName - Optional, the name of the previous child for child_* events.\r\n     */\r\n    constructor(eventType, eventRegistration, snapshot, prevName) {\r\n        this.eventType = eventType;\r\n        this.eventRegistration = eventRegistration;\r\n        this.snapshot = snapshot;\r\n        this.prevName = prevName;\r\n    }\r\n    getPath() {\r\n        const ref = this.snapshot.ref;\r\n        if (this.eventType === 'value') {\r\n            return ref._path;\r\n        }\r\n        else {\r\n            return ref.parent._path;\r\n        }\r\n    }\r\n    getEventType() {\r\n        return this.eventType;\r\n    }\r\n    getEventRunner() {\r\n        return this.eventRegistration.getEventRunner(this);\r\n    }\r\n    toString() {\r\n        return (this.getPath().toString() +\r\n            ':' +\r\n            this.eventType +\r\n            ':' +\r\n            stringify(this.snapshot.exportVal()));\r\n    }\r\n}\r\nclass CancelEvent {\r\n    constructor(eventRegistration, error, path) {\r\n        this.eventRegistration = eventRegistration;\r\n        this.error = error;\r\n        this.path = path;\r\n    }\r\n    getPath() {\r\n        return this.path;\r\n    }\r\n    getEventType() {\r\n        return 'cancel';\r\n    }\r\n    getEventRunner() {\r\n        return this.eventRegistration.getEventRunner(this);\r\n    }\r\n    toString() {\r\n        return this.path.toString() + ':cancel';\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A wrapper class that converts events from the database@exp SDK to the legacy\r\n * Database SDK. Events are not converted directly as event registration relies\r\n * on reference comparison of the original user callback (see `matches()`) and\r\n * relies on equality of the legacy SDK's `context` object.\r\n */\r\nclass CallbackContext {\r\n    constructor(snapshotCallback, cancelCallback) {\r\n        this.snapshotCallback = snapshotCallback;\r\n        this.cancelCallback = cancelCallback;\r\n    }\r\n    onValue(expDataSnapshot, previousChildName) {\r\n        this.snapshotCallback.call(null, expDataSnapshot, previousChildName);\r\n    }\r\n    onCancel(error) {\r\n        assert(this.hasCancelCallback, 'Raising a cancel event on a listener with no cancel callback');\r\n        return this.cancelCallback.call(null, error);\r\n    }\r\n    get hasCancelCallback() {\r\n        return !!this.cancelCallback;\r\n    }\r\n    matches(other) {\r\n        return (this.snapshotCallback === other.snapshotCallback ||\r\n            (this.snapshotCallback.userCallback !== undefined &&\r\n                this.snapshotCallback.userCallback ===\r\n                    other.snapshotCallback.userCallback &&\r\n                this.snapshotCallback.context === other.snapshotCallback.context));\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The `onDisconnect` class allows you to write or clear data when your client\r\n * disconnects from the Database server. These updates occur whether your\r\n * client disconnects cleanly or not, so you can rely on them to clean up data\r\n * even if a connection is dropped or a client crashes.\r\n *\r\n * The `onDisconnect` class is most commonly used to manage presence in\r\n * applications where it is useful to detect how many clients are connected and\r\n * when other clients disconnect. See\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information.\r\n *\r\n * To avoid problems when a connection is dropped before the requests can be\r\n * transferred to the Database server, these functions should be called before\r\n * writing any data.\r\n *\r\n * Note that `onDisconnect` operations are only triggered once. If you want an\r\n * operation to occur each time a disconnect occurs, you'll need to re-establish\r\n * the `onDisconnect` operations each time you reconnect.\r\n */\r\nclass OnDisconnect {\r\n    /** @hideconstructor */\r\n    constructor(_repo, _path) {\r\n        this._repo = _repo;\r\n        this._path = _path;\r\n    }\r\n    /**\r\n     * Cancels all previously queued `onDisconnect()` set or update events for this\r\n     * location and all children.\r\n     *\r\n     * If a write has been queued for this location via a `set()` or `update()` at a\r\n     * parent location, the write at this location will be canceled, though writes\r\n     * to sibling locations will still occur.\r\n     *\r\n     * @returns Resolves when synchronization to the server is complete.\r\n     */\r\n    cancel() {\r\n        const deferred = new Deferred();\r\n        repoOnDisconnectCancel(this._repo, this._path, deferred.wrapCallback(() => { }));\r\n        return deferred.promise;\r\n    }\r\n    /**\r\n     * Ensures the data at this location is deleted when the client is disconnected\r\n     * (due to closing the browser, navigating to a new page, or network issues).\r\n     *\r\n     * @returns Resolves when synchronization to the server is complete.\r\n     */\r\n    remove() {\r\n        validateWritablePath('OnDisconnect.remove', this._path);\r\n        const deferred = new Deferred();\r\n        repoOnDisconnectSet(this._repo, this._path, null, deferred.wrapCallback(() => { }));\r\n        return deferred.promise;\r\n    }\r\n    /**\r\n     * Ensures the data at this location is set to the specified value when the\r\n     * client is disconnected (due to closing the browser, navigating to a new page,\r\n     * or network issues).\r\n     *\r\n     * `set()` is especially useful for implementing \"presence\" systems, where a\r\n     * value should be changed or cleared when a user disconnects so that they\r\n     * appear \"offline\" to other users. See\r\n     * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n     * for more information.\r\n     *\r\n     * Note that `onDisconnect` operations are only triggered once. If you want an\r\n     * operation to occur each time a disconnect occurs, you'll need to re-establish\r\n     * the `onDisconnect` operations each time.\r\n     *\r\n     * @param value - The value to be written to this location on disconnect (can\r\n     * be an object, array, string, number, boolean, or null).\r\n     * @returns Resolves when synchronization to the Database is complete.\r\n     */\r\n    set(value) {\r\n        validateWritablePath('OnDisconnect.set', this._path);\r\n        validateFirebaseDataArg('OnDisconnect.set', value, this._path, false);\r\n        const deferred = new Deferred();\r\n        repoOnDisconnectSet(this._repo, this._path, value, deferred.wrapCallback(() => { }));\r\n        return deferred.promise;\r\n    }\r\n    /**\r\n     * Ensures the data at this location is set to the specified value and priority\r\n     * when the client is disconnected (due to closing the browser, navigating to a\r\n     * new page, or network issues).\r\n     *\r\n     * @param value - The value to be written to this location on disconnect (can\r\n     * be an object, array, string, number, boolean, or null).\r\n     * @param priority - The priority to be written (string, number, or null).\r\n     * @returns Resolves when synchronization to the Database is complete.\r\n     */\r\n    setWithPriority(value, priority) {\r\n        validateWritablePath('OnDisconnect.setWithPriority', this._path);\r\n        validateFirebaseDataArg('OnDisconnect.setWithPriority', value, this._path, false);\r\n        validatePriority('OnDisconnect.setWithPriority', priority, false);\r\n        const deferred = new Deferred();\r\n        repoOnDisconnectSetWithPriority(this._repo, this._path, value, priority, deferred.wrapCallback(() => { }));\r\n        return deferred.promise;\r\n    }\r\n    /**\r\n     * Writes multiple values at this location when the client is disconnected (due\r\n     * to closing the browser, navigating to a new page, or network issues).\r\n     *\r\n     * The `values` argument contains multiple property-value pairs that will be\r\n     * written to the Database together. Each child property can either be a simple\r\n     * property (for example, \"name\") or a relative path (for example, \"name/first\")\r\n     * from the current location to the data to update.\r\n     *\r\n     * As opposed to the `set()` method, `update()` can be use to selectively update\r\n     * only the referenced properties at the current location (instead of replacing\r\n     * all the child properties at the current location).\r\n     *\r\n     * @param values - Object containing multiple values.\r\n     * @returns Resolves when synchronization to the Database is complete.\r\n     */\r\n    update(values) {\r\n        validateWritablePath('OnDisconnect.update', this._path);\r\n        validateFirebaseMergeDataArg('OnDisconnect.update', values, this._path, false);\r\n        const deferred = new Deferred();\r\n        repoOnDisconnectUpdate(this._repo, this._path, values, deferred.wrapCallback(() => { }));\r\n        return deferred.promise;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nclass QueryImpl {\r\n    /**\r\n     * @hideconstructor\r\n     */\r\n    constructor(_repo, _path, _queryParams, _orderByCalled) {\r\n        this._repo = _repo;\r\n        this._path = _path;\r\n        this._queryParams = _queryParams;\r\n        this._orderByCalled = _orderByCalled;\r\n    }\r\n    get key() {\r\n        if (pathIsEmpty(this._path)) {\r\n            return null;\r\n        }\r\n        else {\r\n            return pathGetBack(this._path);\r\n        }\r\n    }\r\n    get ref() {\r\n        return new ReferenceImpl(this._repo, this._path);\r\n    }\r\n    get _queryIdentifier() {\r\n        const obj = queryParamsGetQueryObject(this._queryParams);\r\n        const id = ObjectToUniqueKey(obj);\r\n        return id === '{}' ? 'default' : id;\r\n    }\r\n    /**\r\n     * An object representation of the query parameters used by this Query.\r\n     */\r\n    get _queryObject() {\r\n        return queryParamsGetQueryObject(this._queryParams);\r\n    }\r\n    isEqual(other) {\r\n        other = getModularInstance(other);\r\n        if (!(other instanceof QueryImpl)) {\r\n            return false;\r\n        }\r\n        const sameRepo = this._repo === other._repo;\r\n        const samePath = pathEquals(this._path, other._path);\r\n        const sameQueryIdentifier = this._queryIdentifier === other._queryIdentifier;\r\n        return sameRepo && samePath && sameQueryIdentifier;\r\n    }\r\n    toJSON() {\r\n        return this.toString();\r\n    }\r\n    toString() {\r\n        return this._repo.toString() + pathToUrlEncodedString(this._path);\r\n    }\r\n}\r\n/**\r\n * Validates that no other order by call has been made\r\n */\r\nfunction validateNoPreviousOrderByCall(query, fnName) {\r\n    if (query._orderByCalled === true) {\r\n        throw new Error(fnName + \": You can't combine multiple orderBy calls.\");\r\n    }\r\n}\r\n/**\r\n * Validates start/end values for queries.\r\n */\r\nfunction validateQueryEndpoints(params) {\r\n    let startNode = null;\r\n    let endNode = null;\r\n    if (params.hasStart()) {\r\n        startNode = params.getIndexStartValue();\r\n    }\r\n    if (params.hasEnd()) {\r\n        endNode = params.getIndexEndValue();\r\n    }\r\n    if (params.getIndex() === KEY_INDEX) {\r\n        const tooManyArgsError = 'Query: When ordering by key, you may only pass one argument to ' +\r\n            'startAt(), endAt(), or equalTo().';\r\n        const wrongArgTypeError = 'Query: When ordering by key, the argument passed to startAt(), startAfter(), ' +\r\n            'endAt(), endBefore(), or equalTo() must be a string.';\r\n        if (params.hasStart()) {\r\n            const startName = params.getIndexStartName();\r\n            if (startName !== MIN_NAME) {\r\n                throw new Error(tooManyArgsError);\r\n            }\r\n            else if (typeof startNode !== 'string') {\r\n                throw new Error(wrongArgTypeError);\r\n            }\r\n        }\r\n        if (params.hasEnd()) {\r\n            const endName = params.getIndexEndName();\r\n            if (endName !== MAX_NAME) {\r\n                throw new Error(tooManyArgsError);\r\n            }\r\n            else if (typeof endNode !== 'string') {\r\n                throw new Error(wrongArgTypeError);\r\n            }\r\n        }\r\n    }\r\n    else if (params.getIndex() === PRIORITY_INDEX) {\r\n        if ((startNode != null && !isValidPriority(startNode)) ||\r\n            (endNode != null && !isValidPriority(endNode))) {\r\n            throw new Error('Query: When ordering by priority, the first argument passed to startAt(), ' +\r\n                'startAfter() endAt(), endBefore(), or equalTo() must be a valid priority value ' +\r\n                '(null, a number, or a string).');\r\n        }\r\n    }\r\n    else {\r\n        assert(params.getIndex() instanceof PathIndex ||\r\n            params.getIndex() === VALUE_INDEX, 'unknown index type.');\r\n        if ((startNode != null && typeof startNode === 'object') ||\r\n            (endNode != null && typeof endNode === 'object')) {\r\n            throw new Error('Query: First argument passed to startAt(), startAfter(), endAt(), endBefore(), or ' +\r\n                'equalTo() cannot be an object.');\r\n        }\r\n    }\r\n}\r\n/**\r\n * Validates that limit* has been called with the correct combination of parameters\r\n */\r\nfunction validateLimit(params) {\r\n    if (params.hasStart() &&\r\n        params.hasEnd() &&\r\n        params.hasLimit() &&\r\n        !params.hasAnchoredLimit()) {\r\n        throw new Error(\"Query: Can't combine startAt(), startAfter(), endAt(), endBefore(), and limit(). Use \" +\r\n            'limitToFirst() or limitToLast() instead.');\r\n    }\r\n}\r\n/**\r\n * @internal\r\n */\r\nclass ReferenceImpl extends QueryImpl {\r\n    /** @hideconstructor */\r\n    constructor(repo, path) {\r\n        super(repo, path, new QueryParams(), false);\r\n    }\r\n    get parent() {\r\n        const parentPath = pathParent(this._path);\r\n        return parentPath === null\r\n            ? null\r\n            : new ReferenceImpl(this._repo, parentPath);\r\n    }\r\n    get root() {\r\n        let ref = this;\r\n        while (ref.parent !== null) {\r\n            ref = ref.parent;\r\n        }\r\n        return ref;\r\n    }\r\n}\r\n/**\r\n * A `DataSnapshot` contains data from a Database location.\r\n *\r\n * Any time you read data from the Database, you receive the data as a\r\n * `DataSnapshot`. A `DataSnapshot` is passed to the event callbacks you attach\r\n * with `on()` or `once()`. You can extract the contents of the snapshot as a\r\n * JavaScript object by calling the `val()` method. Alternatively, you can\r\n * traverse into the snapshot by calling `child()` to return child snapshots\r\n * (which you could then call `val()` on).\r\n *\r\n * A `DataSnapshot` is an efficiently generated, immutable copy of the data at\r\n * a Database location. It cannot be modified and will never change (to modify\r\n * data, you always call the `set()` method on a `Reference` directly).\r\n */\r\nclass DataSnapshot {\r\n    /**\r\n     * @param _node - A SnapshotNode to wrap.\r\n     * @param ref - The location this snapshot came from.\r\n     * @param _index - The iteration order for this snapshot\r\n     * @hideconstructor\r\n     */\r\n    constructor(_node, \r\n    /**\r\n     * The location of this DataSnapshot.\r\n     */\r\n    ref, _index) {\r\n        this._node = _node;\r\n        this.ref = ref;\r\n        this._index = _index;\r\n    }\r\n    /**\r\n     * Gets the priority value of the data in this `DataSnapshot`.\r\n     *\r\n     * Applications need not use priority but can order collections by\r\n     * ordinary properties (see\r\n     * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data |Sorting and filtering data}\r\n     * ).\r\n     */\r\n    get priority() {\r\n        // typecast here because we never return deferred values or internal priorities (MAX_PRIORITY)\r\n        return this._node.getPriority().val();\r\n    }\r\n    /**\r\n     * The key (last part of the path) of the location of this `DataSnapshot`.\r\n     *\r\n     * The last token in a Database location is considered its key. For example,\r\n     * \"ada\" is the key for the /users/ada/ node. Accessing the key on any\r\n     * `DataSnapshot` will return the key for the location that generated it.\r\n     * However, accessing the key on the root URL of a Database will return\r\n     * `null`.\r\n     */\r\n    get key() {\r\n        return this.ref.key;\r\n    }\r\n    /** Returns the number of child properties of this `DataSnapshot`. */\r\n    get size() {\r\n        return this._node.numChildren();\r\n    }\r\n    /**\r\n     * Gets another `DataSnapshot` for the location at the specified relative path.\r\n     *\r\n     * Passing a relative path to the `child()` method of a DataSnapshot returns\r\n     * another `DataSnapshot` for the location at the specified relative path. The\r\n     * relative path can either be a simple child name (for example, \"ada\") or a\r\n     * deeper, slash-separated path (for example, \"ada/name/first\"). If the child\r\n     * location has no data, an empty `DataSnapshot` (that is, a `DataSnapshot`\r\n     * whose value is `null`) is returned.\r\n     *\r\n     * @param path - A relative path to the location of child data.\r\n     */\r\n    child(path) {\r\n        const childPath = new Path(path);\r\n        const childRef = child(this.ref, path);\r\n        return new DataSnapshot(this._node.getChild(childPath), childRef, PRIORITY_INDEX);\r\n    }\r\n    /**\r\n     * Returns true if this `DataSnapshot` contains any data. It is slightly more\r\n     * efficient than using `snapshot.val() !== null`.\r\n     */\r\n    exists() {\r\n        return !this._node.isEmpty();\r\n    }\r\n    /**\r\n     * Exports the entire contents of the DataSnapshot as a JavaScript object.\r\n     *\r\n     * The `exportVal()` method is similar to `val()`, except priority information\r\n     * is included (if available), making it suitable for backing up your data.\r\n     *\r\n     * @returns The DataSnapshot's contents as a JavaScript value (Object,\r\n     *   Array, string, number, boolean, or `null`).\r\n     */\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    exportVal() {\r\n        return this._node.val(true);\r\n    }\r\n    /**\r\n     * Enumerates the top-level children in the `DataSnapshot`.\r\n     *\r\n     * Because of the way JavaScript objects work, the ordering of data in the\r\n     * JavaScript object returned by `val()` is not guaranteed to match the\r\n     * ordering on the server nor the ordering of `onChildAdded()` events. That is\r\n     * where `forEach()` comes in handy. It guarantees the children of a\r\n     * `DataSnapshot` will be iterated in their query order.\r\n     *\r\n     * If no explicit `orderBy*()` method is used, results are returned\r\n     * ordered by key (unless priorities are used, in which case, results are\r\n     * returned by priority).\r\n     *\r\n     * @param action - A function that will be called for each child DataSnapshot.\r\n     * The callback can return true to cancel further enumeration.\r\n     * @returns true if enumeration was canceled due to your callback returning\r\n     * true.\r\n     */\r\n    forEach(action) {\r\n        if (this._node.isLeafNode()) {\r\n            return false;\r\n        }\r\n        const childrenNode = this._node;\r\n        // Sanitize the return value to a boolean. ChildrenNode.forEachChild has a weird return type...\r\n        return !!childrenNode.forEachChild(this._index, (key, node) => {\r\n            return action(new DataSnapshot(node, child(this.ref, key), PRIORITY_INDEX));\r\n        });\r\n    }\r\n    /**\r\n     * Returns true if the specified child path has (non-null) data.\r\n     *\r\n     * @param path - A relative path to the location of a potential child.\r\n     * @returns `true` if data exists at the specified child path; else\r\n     *  `false`.\r\n     */\r\n    hasChild(path) {\r\n        const childPath = new Path(path);\r\n        return !this._node.getChild(childPath).isEmpty();\r\n    }\r\n    /**\r\n     * Returns whether or not the `DataSnapshot` has any non-`null` child\r\n     * properties.\r\n     *\r\n     * You can use `hasChildren()` to determine if a `DataSnapshot` has any\r\n     * children. If it does, you can enumerate them using `forEach()`. If it\r\n     * doesn't, then either this snapshot contains a primitive value (which can be\r\n     * retrieved with `val()`) or it is empty (in which case, `val()` will return\r\n     * `null`).\r\n     *\r\n     * @returns true if this snapshot has any children; else false.\r\n     */\r\n    hasChildren() {\r\n        if (this._node.isLeafNode()) {\r\n            return false;\r\n        }\r\n        else {\r\n            return !this._node.isEmpty();\r\n        }\r\n    }\r\n    /**\r\n     * Returns a JSON-serializable representation of this object.\r\n     */\r\n    toJSON() {\r\n        return this.exportVal();\r\n    }\r\n    /**\r\n     * Extracts a JavaScript value from a `DataSnapshot`.\r\n     *\r\n     * Depending on the data in a `DataSnapshot`, the `val()` method may return a\r\n     * scalar type (string, number, or boolean), an array, or an object. It may\r\n     * also return null, indicating that the `DataSnapshot` is empty (contains no\r\n     * data).\r\n     *\r\n     * @returns The DataSnapshot's contents as a JavaScript value (Object,\r\n     *   Array, string, number, boolean, or `null`).\r\n     */\r\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n    val() {\r\n        return this._node.val();\r\n    }\r\n}\r\n/**\r\n *\r\n * Returns a `Reference` representing the location in the Database\r\n * corresponding to the provided path. If no path is provided, the `Reference`\r\n * will point to the root of the Database.\r\n *\r\n * @param db - The database instance to obtain a reference for.\r\n * @param path - Optional path representing the location the returned\r\n *   `Reference` will point. If not provided, the returned `Reference` will\r\n *   point to the root of the Database.\r\n * @returns If a path is provided, a `Reference`\r\n *   pointing to the provided path. Otherwise, a `Reference` pointing to the\r\n *   root of the Database.\r\n */\r\nfunction ref(db, path) {\r\n    db = getModularInstance(db);\r\n    db._checkNotDeleted('ref');\r\n    return path !== undefined ? child(db._root, path) : db._root;\r\n}\r\n/**\r\n * Returns a `Reference` representing the location in the Database\r\n * corresponding to the provided Firebase URL.\r\n *\r\n * An exception is thrown if the URL is not a valid Firebase Database URL or it\r\n * has a different domain than the current `Database` instance.\r\n *\r\n * Note that all query parameters (`orderBy`, `limitToLast`, etc.) are ignored\r\n * and are not applied to the returned `Reference`.\r\n *\r\n * @param db - The database instance to obtain a reference for.\r\n * @param url - The Firebase URL at which the returned `Reference` will\r\n *   point.\r\n * @returns A `Reference` pointing to the provided\r\n *   Firebase URL.\r\n */\r\nfunction refFromURL(db, url) {\r\n    db = getModularInstance(db);\r\n    db._checkNotDeleted('refFromURL');\r\n    const parsedURL = parseRepoInfo(url, db._repo.repoInfo_.nodeAdmin);\r\n    validateUrl('refFromURL', parsedURL);\r\n    const repoInfo = parsedURL.repoInfo;\r\n    if (!db._repo.repoInfo_.isCustomHost() &&\r\n        repoInfo.host !== db._repo.repoInfo_.host) {\r\n        fatal('refFromURL' +\r\n            ': Host name does not match the current database: ' +\r\n            '(found ' +\r\n            repoInfo.host +\r\n            ' but expected ' +\r\n            db._repo.repoInfo_.host +\r\n            ')');\r\n    }\r\n    return ref(db, parsedURL.path.toString());\r\n}\r\n/**\r\n * Gets a `Reference` for the location at the specified relative path.\r\n *\r\n * The relative path can either be a simple child name (for example, \"ada\") or\r\n * a deeper slash-separated path (for example, \"ada/name/first\").\r\n *\r\n * @param parent - The parent location.\r\n * @param path - A relative path from this location to the desired child\r\n *   location.\r\n * @returns The specified child location.\r\n */\r\nfunction child(parent, path) {\r\n    parent = getModularInstance(parent);\r\n    if (pathGetFront(parent._path) === null) {\r\n        validateRootPathString('child', 'path', path, false);\r\n    }\r\n    else {\r\n        validatePathString('child', 'path', path, false);\r\n    }\r\n    return new ReferenceImpl(parent._repo, pathChild(parent._path, path));\r\n}\r\n/**\r\n * Returns an `OnDisconnect` object - see\r\n * {@link https://firebase.google.com/docs/database/web/offline-capabilities | Enabling Offline Capabilities in JavaScript}\r\n * for more information on how to use it.\r\n *\r\n * @param ref - The reference to add OnDisconnect triggers for.\r\n */\r\nfunction onDisconnect(ref) {\r\n    ref = getModularInstance(ref);\r\n    return new OnDisconnect(ref._repo, ref._path);\r\n}\r\n/**\r\n * Generates a new child location using a unique key and returns its\r\n * `Reference`.\r\n *\r\n * This is the most common pattern for adding data to a collection of items.\r\n *\r\n * If you provide a value to `push()`, the value is written to the\r\n * generated location. If you don't pass a value, nothing is written to the\r\n * database and the child remains empty (but you can use the `Reference`\r\n * elsewhere).\r\n *\r\n * The unique keys generated by `push()` are ordered by the current time, so the\r\n * resulting list of items is chronologically sorted. The keys are also\r\n * designed to be unguessable (they contain 72 random bits of entropy).\r\n *\r\n * See {@link https://firebase.google.com/docs/database/web/lists-of-data#append_to_a_list_of_data | Append to a list of data}\r\n * </br>See {@link ttps://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html | The 2^120 Ways to Ensure Unique Identifiers}\r\n *\r\n * @param parent - The parent location.\r\n * @param value - Optional value to be written at the generated location.\r\n * @returns Combined `Promise` and `Reference`; resolves when write is complete,\r\n * but can be used immediately as the `Reference` to the child location.\r\n */\r\nfunction push(parent, value) {\r\n    parent = getModularInstance(parent);\r\n    validateWritablePath('push', parent._path);\r\n    validateFirebaseDataArg('push', value, parent._path, true);\r\n    const now = repoServerTime(parent._repo);\r\n    const name = nextPushId(now);\r\n    // push() returns a ThennableReference whose promise is fulfilled with a\r\n    // regular Reference. We use child() to create handles to two different\r\n    // references. The first is turned into a ThennableReference below by adding\r\n    // then() and catch() methods and is used as the return value of push(). The\r\n    // second remains a regular Reference and is used as the fulfilled value of\r\n    // the first ThennableReference.\r\n    const thennablePushRef = child(parent, name);\r\n    const pushRef = child(parent, name);\r\n    let promise;\r\n    if (value != null) {\r\n        promise = set(pushRef, value).then(() => pushRef);\r\n    }\r\n    else {\r\n        promise = Promise.resolve(pushRef);\r\n    }\r\n    thennablePushRef.then = promise.then.bind(promise);\r\n    thennablePushRef.catch = promise.then.bind(promise, undefined);\r\n    return thennablePushRef;\r\n}\r\n/**\r\n * Removes the data at this Database location.\r\n *\r\n * Any data at child locations will also be deleted.\r\n *\r\n * The effect of the remove will be visible immediately and the corresponding\r\n * event 'value' will be triggered. Synchronization of the remove to the\r\n * Firebase servers will also be started, and the returned Promise will resolve\r\n * when complete. If provided, the onComplete callback will be called\r\n * asynchronously after synchronization has finished.\r\n *\r\n * @param ref - The location to remove.\r\n * @returns Resolves when remove on server is complete.\r\n */\r\nfunction remove(ref) {\r\n    validateWritablePath('remove', ref._path);\r\n    return set(ref, null);\r\n}\r\n/**\r\n * Writes data to this Database location.\r\n *\r\n * This will overwrite any data at this location and all child locations.\r\n *\r\n * The effect of the write will be visible immediately, and the corresponding\r\n * events (\"value\", \"child_added\", etc.) will be triggered. Synchronization of\r\n * the data to the Firebase servers will also be started, and the returned\r\n * Promise will resolve when complete. If provided, the `onComplete` callback\r\n * will be called asynchronously after synchronization has finished.\r\n *\r\n * Passing `null` for the new value is equivalent to calling `remove()`; namely,\r\n * all data at this location and all child locations will be deleted.\r\n *\r\n * `set()` will remove any priority stored at this location, so if priority is\r\n * meant to be preserved, you need to use `setWithPriority()` instead.\r\n *\r\n * Note that modifying data with `set()` will cancel any pending transactions\r\n * at that location, so extreme care should be taken if mixing `set()` and\r\n * `transaction()` to modify the same data.\r\n *\r\n * A single `set()` will generate a single \"value\" event at the location where\r\n * the `set()` was performed.\r\n *\r\n * @param ref - The location to write to.\r\n * @param value - The value to be written (string, number, boolean, object,\r\n *   array, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction set(ref, value) {\r\n    ref = getModularInstance(ref);\r\n    validateWritablePath('set', ref._path);\r\n    validateFirebaseDataArg('set', value, ref._path, false);\r\n    const deferred = new Deferred();\r\n    repoSetWithPriority(ref._repo, ref._path, value, \r\n    /*priority=*/ null, deferred.wrapCallback(() => { }));\r\n    return deferred.promise;\r\n}\r\n/**\r\n * Sets a priority for the data at this Database location.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\r\n * ).\r\n *\r\n * @param ref - The location to write to.\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction setPriority(ref, priority) {\r\n    ref = getModularInstance(ref);\r\n    validateWritablePath('setPriority', ref._path);\r\n    validatePriority('setPriority', priority, false);\r\n    const deferred = new Deferred();\r\n    repoSetWithPriority(ref._repo, pathChild(ref._path, '.priority'), priority, null, deferred.wrapCallback(() => { }));\r\n    return deferred.promise;\r\n}\r\n/**\r\n * Writes data the Database location. Like `set()` but also specifies the\r\n * priority for that data.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sorting_and_filtering_data | Sorting and filtering data}\r\n * ).\r\n *\r\n * @param ref - The location to write to.\r\n * @param value - The value to be written (string, number, boolean, object,\r\n *   array, or null).\r\n * @param priority - The priority to be written (string, number, or null).\r\n * @returns Resolves when write to server is complete.\r\n */\r\nfunction setWithPriority(ref, value, priority) {\r\n    validateWritablePath('setWithPriority', ref._path);\r\n    validateFirebaseDataArg('setWithPriority', value, ref._path, false);\r\n    validatePriority('setWithPriority', priority, false);\r\n    if (ref.key === '.length' || ref.key === '.keys') {\r\n        throw 'setWithPriority failed: ' + ref.key + ' is a read-only object.';\r\n    }\r\n    const deferred = new Deferred();\r\n    repoSetWithPriority(ref._repo, ref._path, value, priority, deferred.wrapCallback(() => { }));\r\n    return deferred.promise;\r\n}\r\n/**\r\n * Writes multiple values to the Database at once.\r\n *\r\n * The `values` argument contains multiple property-value pairs that will be\r\n * written to the Database together. Each child property can either be a simple\r\n * property (for example, \"name\") or a relative path (for example,\r\n * \"name/first\") from the current location to the data to update.\r\n *\r\n * As opposed to the `set()` method, `update()` can be use to selectively update\r\n * only the referenced properties at the current location (instead of replacing\r\n * all the child properties at the current location).\r\n *\r\n * The effect of the write will be visible immediately, and the corresponding\r\n * events ('value', 'child_added', etc.) will be triggered. Synchronization of\r\n * the data to the Firebase servers will also be started, and the returned\r\n * Promise will resolve when complete. If provided, the `onComplete` callback\r\n * will be called asynchronously after synchronization has finished.\r\n *\r\n * A single `update()` will generate a single \"value\" event at the location\r\n * where the `update()` was performed, regardless of how many children were\r\n * modified.\r\n *\r\n * Note that modifying data with `update()` will cancel any pending\r\n * transactions at that location, so extreme care should be taken if mixing\r\n * `update()` and `transaction()` to modify the same data.\r\n *\r\n * Passing `null` to `update()` will remove the data at this location.\r\n *\r\n * See\r\n * {@link https://firebase.googleblog.com/2015/09/introducing-multi-location-updates-and_86.html | Introducing multi-location updates and more}.\r\n *\r\n * @param ref - The location to write to.\r\n * @param values - Object containing multiple values.\r\n * @returns Resolves when update on server is complete.\r\n */\r\nfunction update(ref, values) {\r\n    validateFirebaseMergeDataArg('update', values, ref._path, false);\r\n    const deferred = new Deferred();\r\n    repoUpdate(ref._repo, ref._path, values, deferred.wrapCallback(() => { }));\r\n    return deferred.promise;\r\n}\r\n/**\r\n * Gets the most up-to-date result for this query.\r\n *\r\n * @param query - The query to run.\r\n * @returns A `Promise` which resolves to the resulting DataSnapshot if a value is\r\n * available, or rejects if the client is unable to return a value (e.g., if the\r\n * server is unreachable and there is nothing cached).\r\n */\r\nfunction get(query) {\r\n    query = getModularInstance(query);\r\n    return repoGetValue(query._repo, query).then(node => {\r\n        return new DataSnapshot(node, new ReferenceImpl(query._repo, query._path), query._queryParams.getIndex());\r\n    });\r\n}\r\n/**\r\n * Represents registration for 'value' events.\r\n */\r\nclass ValueEventRegistration {\r\n    constructor(callbackContext) {\r\n        this.callbackContext = callbackContext;\r\n    }\r\n    respondsTo(eventType) {\r\n        return eventType === 'value';\r\n    }\r\n    createEvent(change, query) {\r\n        const index = query._queryParams.getIndex();\r\n        return new DataEvent('value', this, new DataSnapshot(change.snapshotNode, new ReferenceImpl(query._repo, query._path), index));\r\n    }\r\n    getEventRunner(eventData) {\r\n        if (eventData.getEventType() === 'cancel') {\r\n            return () => this.callbackContext.onCancel(eventData.error);\r\n        }\r\n        else {\r\n            return () => this.callbackContext.onValue(eventData.snapshot, null);\r\n        }\r\n    }\r\n    createCancelEvent(error, path) {\r\n        if (this.callbackContext.hasCancelCallback) {\r\n            return new CancelEvent(this, error, path);\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    }\r\n    matches(other) {\r\n        if (!(other instanceof ValueEventRegistration)) {\r\n            return false;\r\n        }\r\n        else if (!other.callbackContext || !this.callbackContext) {\r\n            // If no callback specified, we consider it to match any callback.\r\n            return true;\r\n        }\r\n        else {\r\n            return other.callbackContext.matches(this.callbackContext);\r\n        }\r\n    }\r\n    hasAnyCallback() {\r\n        return this.callbackContext !== null;\r\n    }\r\n}\r\n/**\r\n * Represents the registration of a child_x event.\r\n */\r\nclass ChildEventRegistration {\r\n    constructor(eventType, callbackContext) {\r\n        this.eventType = eventType;\r\n        this.callbackContext = callbackContext;\r\n    }\r\n    respondsTo(eventType) {\r\n        let eventToCheck = eventType === 'children_added' ? 'child_added' : eventType;\r\n        eventToCheck =\r\n            eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;\r\n        return this.eventType === eventToCheck;\r\n    }\r\n    createCancelEvent(error, path) {\r\n        if (this.callbackContext.hasCancelCallback) {\r\n            return new CancelEvent(this, error, path);\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    }\r\n    createEvent(change, query) {\r\n        assert(change.childName != null, 'Child events should have a childName.');\r\n        const childRef = child(new ReferenceImpl(query._repo, query._path), change.childName);\r\n        const index = query._queryParams.getIndex();\r\n        return new DataEvent(change.type, this, new DataSnapshot(change.snapshotNode, childRef, index), change.prevName);\r\n    }\r\n    getEventRunner(eventData) {\r\n        if (eventData.getEventType() === 'cancel') {\r\n            return () => this.callbackContext.onCancel(eventData.error);\r\n        }\r\n        else {\r\n            return () => this.callbackContext.onValue(eventData.snapshot, eventData.prevName);\r\n        }\r\n    }\r\n    matches(other) {\r\n        if (other instanceof ChildEventRegistration) {\r\n            return (this.eventType === other.eventType &&\r\n                (!this.callbackContext ||\r\n                    !other.callbackContext ||\r\n                    this.callbackContext.matches(other.callbackContext)));\r\n        }\r\n        return false;\r\n    }\r\n    hasAnyCallback() {\r\n        return !!this.callbackContext;\r\n    }\r\n}\r\nfunction addEventListener(query, eventType, callback, cancelCallbackOrListenOptions, options) {\r\n    let cancelCallback;\r\n    if (typeof cancelCallbackOrListenOptions === 'object') {\r\n        cancelCallback = undefined;\r\n        options = cancelCallbackOrListenOptions;\r\n    }\r\n    if (typeof cancelCallbackOrListenOptions === 'function') {\r\n        cancelCallback = cancelCallbackOrListenOptions;\r\n    }\r\n    if (options && options.onlyOnce) {\r\n        const userCallback = callback;\r\n        const onceCallback = (dataSnapshot, previousChildName) => {\r\n            repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n            userCallback(dataSnapshot, previousChildName);\r\n        };\r\n        onceCallback.userCallback = callback.userCallback;\r\n        onceCallback.context = callback.context;\r\n        callback = onceCallback;\r\n    }\r\n    const callbackContext = new CallbackContext(callback, cancelCallback || undefined);\r\n    const container = eventType === 'value'\r\n        ? new ValueEventRegistration(callbackContext)\r\n        : new ChildEventRegistration(eventType, callbackContext);\r\n    repoAddEventCallbackForQuery(query._repo, query, container);\r\n    return () => repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n}\r\nfunction onValue(query, callback, cancelCallbackOrListenOptions, options) {\r\n    return addEventListener(query, 'value', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildAdded(query, callback, cancelCallbackOrListenOptions, options) {\r\n    return addEventListener(query, 'child_added', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildChanged(query, callback, cancelCallbackOrListenOptions, options) {\r\n    return addEventListener(query, 'child_changed', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildMoved(query, callback, cancelCallbackOrListenOptions, options) {\r\n    return addEventListener(query, 'child_moved', callback, cancelCallbackOrListenOptions, options);\r\n}\r\nfunction onChildRemoved(query, callback, cancelCallbackOrListenOptions, options) {\r\n    return addEventListener(query, 'child_removed', callback, cancelCallbackOrListenOptions, options);\r\n}\r\n/**\r\n * Detaches a callback previously attached with the corresponding `on*()` (`onValue`, `onChildAdded`) listener.\r\n * Note: This is not the recommended way to remove a listener. Instead, please use the returned callback function from\r\n * the respective `on*` callbacks.\r\n *\r\n * Detach a callback previously attached with `on*()`. Calling `off()` on a parent listener\r\n * will not automatically remove listeners registered on child nodes, `off()`\r\n * must also be called on any child listeners to remove the callback.\r\n *\r\n * If a callback is not specified, all callbacks for the specified eventType\r\n * will be removed. Similarly, if no eventType is specified, all callbacks\r\n * for the `Reference` will be removed.\r\n *\r\n * Individual listeners can also be removed by invoking their unsubscribe\r\n * callbacks.\r\n *\r\n * @param query - The query that the listener was registered with.\r\n * @param eventType - One of the following strings: \"value\", \"child_added\",\r\n * \"child_changed\", \"child_removed\", or \"child_moved.\" If omitted, all callbacks\r\n * for the `Reference` will be removed.\r\n * @param callback - The callback function that was passed to `on()` or\r\n * `undefined` to remove all callbacks.\r\n */\r\nfunction off(query, eventType, callback) {\r\n    let container = null;\r\n    const expCallback = callback ? new CallbackContext(callback) : null;\r\n    if (eventType === 'value') {\r\n        container = new ValueEventRegistration(expCallback);\r\n    }\r\n    else if (eventType) {\r\n        container = new ChildEventRegistration(eventType, expCallback);\r\n    }\r\n    repoRemoveEventCallbackForQuery(query._repo, query, container);\r\n}\r\n/**\r\n * A `QueryConstraint` is used to narrow the set of documents returned by a\r\n * Database query. `QueryConstraint`s are created by invoking {@link endAt},\r\n * {@link endBefore}, {@link startAt}, {@link startAfter}, {@link\r\n * limitToFirst}, {@link limitToLast}, {@link orderByChild},\r\n * {@link orderByChild}, {@link orderByKey} , {@link orderByPriority} ,\r\n * {@link orderByValue}  or {@link equalTo} and\r\n * can then be passed to {@link query} to create a new query instance that\r\n * also contains this `QueryConstraint`.\r\n */\r\nclass QueryConstraint {\r\n}\r\nclass QueryEndAtConstraint extends QueryConstraint {\r\n    constructor(_value, _key) {\r\n        super();\r\n        this._value = _value;\r\n        this._key = _key;\r\n    }\r\n    _apply(query) {\r\n        validateFirebaseDataArg('endAt', this._value, query._path, true);\r\n        const newParams = queryParamsEndAt(query._queryParams, this._value, this._key);\r\n        validateLimit(newParams);\r\n        validateQueryEndpoints(newParams);\r\n        if (query._queryParams.hasEnd()) {\r\n            throw new Error('endAt: Starting point was already set (by another call to endAt, ' +\r\n                'endBefore or equalTo).');\r\n        }\r\n        return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n    }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified ending point.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The ending point is inclusive, so children with exactly the specified value\r\n * will be included in the query. The optional key argument can be used to\r\n * further limit the range of the query. If it is specified, then children that\r\n * have exactly the specified value must also have a key name less than or equal\r\n * to the specified key.\r\n *\r\n * You can read more about `endAt()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to end at. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to end at, among the children with the previously\r\n * specified priority. This argument is only allowed if ordering by child,\r\n * value, or priority.\r\n */\r\nfunction endAt(value, key) {\r\n    validateKey('endAt', 'key', key, true);\r\n    return new QueryEndAtConstraint(value, key);\r\n}\r\nclass QueryEndBeforeConstraint extends QueryConstraint {\r\n    constructor(_value, _key) {\r\n        super();\r\n        this._value = _value;\r\n        this._key = _key;\r\n    }\r\n    _apply(query) {\r\n        validateFirebaseDataArg('endBefore', this._value, query._path, false);\r\n        const newParams = queryParamsEndBefore(query._queryParams, this._value, this._key);\r\n        validateLimit(newParams);\r\n        validateQueryEndpoints(newParams);\r\n        if (query._queryParams.hasEnd()) {\r\n            throw new Error('endBefore: Starting point was already set (by another call to endAt, ' +\r\n                'endBefore or equalTo).');\r\n        }\r\n        return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n    }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified ending point (exclusive).\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The ending point is exclusive. If only a value is provided, children\r\n * with a value less than the specified value will be included in the query.\r\n * If a key is specified, then children must have a value lesss than or equal\r\n * to the specified value and a a key name less than the specified key.\r\n *\r\n * @param value - The value to end before. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to end before, among the children with the\r\n * previously specified priority. This argument is only allowed if ordering by\r\n * child, value, or priority.\r\n */\r\nfunction endBefore(value, key) {\r\n    validateKey('endBefore', 'key', key, true);\r\n    return new QueryEndBeforeConstraint(value, key);\r\n}\r\nclass QueryStartAtConstraint extends QueryConstraint {\r\n    constructor(_value, _key) {\r\n        super();\r\n        this._value = _value;\r\n        this._key = _key;\r\n    }\r\n    _apply(query) {\r\n        validateFirebaseDataArg('startAt', this._value, query._path, true);\r\n        const newParams = queryParamsStartAt(query._queryParams, this._value, this._key);\r\n        validateLimit(newParams);\r\n        validateQueryEndpoints(newParams);\r\n        if (query._queryParams.hasStart()) {\r\n            throw new Error('startAt: Starting point was already set (by another call to startAt, ' +\r\n                'startBefore or equalTo).');\r\n        }\r\n        return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n    }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified starting point.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The starting point is inclusive, so children with exactly the specified value\r\n * will be included in the query. The optional key argument can be used to\r\n * further limit the range of the query. If it is specified, then children that\r\n * have exactly the specified value must also have a key name greater than or\r\n * equal to the specified key.\r\n *\r\n * You can read more about `startAt()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to start at. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start at. This argument is only allowed if\r\n * ordering by child, value, or priority.\r\n */\r\nfunction startAt(value = null, key) {\r\n    validateKey('startAt', 'key', key, true);\r\n    return new QueryStartAtConstraint(value, key);\r\n}\r\nclass QueryStartAfterConstraint extends QueryConstraint {\r\n    constructor(_value, _key) {\r\n        super();\r\n        this._value = _value;\r\n        this._key = _key;\r\n    }\r\n    _apply(query) {\r\n        validateFirebaseDataArg('startAfter', this._value, query._path, false);\r\n        const newParams = queryParamsStartAfter(query._queryParams, this._value, this._key);\r\n        validateLimit(newParams);\r\n        validateQueryEndpoints(newParams);\r\n        if (query._queryParams.hasStart()) {\r\n            throw new Error('startAfter: Starting point was already set (by another call to startAt, ' +\r\n                'startAfter, or equalTo).');\r\n        }\r\n        return new QueryImpl(query._repo, query._path, newParams, query._orderByCalled);\r\n    }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` with the specified starting point (exclusive).\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The starting point is exclusive. If only a value is provided, children\r\n * with a value greater than the specified value will be included in the query.\r\n * If a key is specified, then children must have a value greater than or equal\r\n * to the specified value and a a key name greater than the specified key.\r\n *\r\n * @param value - The value to start after. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start after. This argument is only allowed if\r\n * ordering by child, value, or priority.\r\n */\r\nfunction startAfter(value, key) {\r\n    validateKey('startAfter', 'key', key, true);\r\n    return new QueryStartAfterConstraint(value, key);\r\n}\r\nclass QueryLimitToFirstConstraint extends QueryConstraint {\r\n    constructor(_limit) {\r\n        super();\r\n        this._limit = _limit;\r\n    }\r\n    _apply(query) {\r\n        if (query._queryParams.hasLimit()) {\r\n            throw new Error('limitToFirst: Limit was already set (by another call to limitToFirst ' +\r\n                'or limitToLast).');\r\n        }\r\n        return new QueryImpl(query._repo, query._path, queryParamsLimitToFirst(query._queryParams, this._limit), query._orderByCalled);\r\n    }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that if limited to the first specific number\r\n * of children.\r\n *\r\n * The `limitToFirst()` method is used to set a maximum number of children to be\r\n * synced for a given callback. If we set a limit of 100, we will initially only\r\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\r\n * stored in our Database, a `child_added` event will fire for each message.\r\n * However, if we have over 100 messages, we will only receive a `child_added`\r\n * event for the first 100 ordered messages. As items change, we will receive\r\n * `child_removed` events for each item that drops out of the active list so\r\n * that the total number stays at 100.\r\n *\r\n * You can read more about `limitToFirst()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param limit - The maximum number of nodes to include in this query.\r\n */\r\nfunction limitToFirst(limit) {\r\n    if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n        throw new Error('limitToFirst: First argument must be a positive integer.');\r\n    }\r\n    return new QueryLimitToFirstConstraint(limit);\r\n}\r\nclass QueryLimitToLastConstraint extends QueryConstraint {\r\n    constructor(_limit) {\r\n        super();\r\n        this._limit = _limit;\r\n    }\r\n    _apply(query) {\r\n        if (query._queryParams.hasLimit()) {\r\n            throw new Error('limitToLast: Limit was already set (by another call to limitToFirst ' +\r\n                'or limitToLast).');\r\n        }\r\n        return new QueryImpl(query._repo, query._path, queryParamsLimitToLast(query._queryParams, this._limit), query._orderByCalled);\r\n    }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that is limited to return only the last\r\n * specified number of children.\r\n *\r\n * The `limitToLast()` method is used to set a maximum number of children to be\r\n * synced for a given callback. If we set a limit of 100, we will initially only\r\n * receive up to 100 `child_added` events. If we have fewer than 100 messages\r\n * stored in our Database, a `child_added` event will fire for each message.\r\n * However, if we have over 100 messages, we will only receive a `child_added`\r\n * event for the last 100 ordered messages. As items change, we will receive\r\n * `child_removed` events for each item that drops out of the active list so\r\n * that the total number stays at 100.\r\n *\r\n * You can read more about `limitToLast()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param limit - The maximum number of nodes to include in this query.\r\n */\r\nfunction limitToLast(limit) {\r\n    if (typeof limit !== 'number' || Math.floor(limit) !== limit || limit <= 0) {\r\n        throw new Error('limitToLast: First argument must be a positive integer.');\r\n    }\r\n    return new QueryLimitToLastConstraint(limit);\r\n}\r\nclass QueryOrderByChildConstraint extends QueryConstraint {\r\n    constructor(_path) {\r\n        super();\r\n        this._path = _path;\r\n    }\r\n    _apply(query) {\r\n        validateNoPreviousOrderByCall(query, 'orderByChild');\r\n        const parsedPath = new Path(this._path);\r\n        if (pathIsEmpty(parsedPath)) {\r\n            throw new Error('orderByChild: cannot pass in empty path. Use orderByValue() instead.');\r\n        }\r\n        const index = new PathIndex(parsedPath);\r\n        const newParams = queryParamsOrderBy(query._queryParams, index);\r\n        validateQueryEndpoints(newParams);\r\n        return new QueryImpl(query._repo, query._path, newParams, \r\n        /*orderByCalled=*/ true);\r\n    }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by the specified child key.\r\n *\r\n * Queries can only order by one key at a time. Calling `orderByChild()`\r\n * multiple times on the same query is an error.\r\n *\r\n * Firebase queries allow you to order your data by any child key on the fly.\r\n * However, if you know in advance what your indexes will be, you can define\r\n * them via the .indexOn rule in your Security Rules for better performance. See\r\n * the{@link https://firebase.google.com/docs/database/security/indexing-data}\r\n * rule for more information.\r\n *\r\n * You can read more about `orderByChild()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n *\r\n * @param path - The path to order by.\r\n */\r\nfunction orderByChild(path) {\r\n    if (path === '$key') {\r\n        throw new Error('orderByChild: \"$key\" is invalid.  Use orderByKey() instead.');\r\n    }\r\n    else if (path === '$priority') {\r\n        throw new Error('orderByChild: \"$priority\" is invalid.  Use orderByPriority() instead.');\r\n    }\r\n    else if (path === '$value') {\r\n        throw new Error('orderByChild: \"$value\" is invalid.  Use orderByValue() instead.');\r\n    }\r\n    validatePathString('orderByChild', 'path', path, false);\r\n    return new QueryOrderByChildConstraint(path);\r\n}\r\nclass QueryOrderByKeyConstraint extends QueryConstraint {\r\n    _apply(query) {\r\n        validateNoPreviousOrderByCall(query, 'orderByKey');\r\n        const newParams = queryParamsOrderBy(query._queryParams, KEY_INDEX);\r\n        validateQueryEndpoints(newParams);\r\n        return new QueryImpl(query._repo, query._path, newParams, \r\n        /*orderByCalled=*/ true);\r\n    }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by the key.\r\n *\r\n * Sorts the results of a query by their (ascending) key values.\r\n *\r\n * You can read more about `orderByKey()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n */\r\nfunction orderByKey() {\r\n    return new QueryOrderByKeyConstraint();\r\n}\r\nclass QueryOrderByPriorityConstraint extends QueryConstraint {\r\n    _apply(query) {\r\n        validateNoPreviousOrderByCall(query, 'orderByPriority');\r\n        const newParams = queryParamsOrderBy(query._queryParams, PRIORITY_INDEX);\r\n        validateQueryEndpoints(newParams);\r\n        return new QueryImpl(query._repo, query._path, newParams, \r\n        /*orderByCalled=*/ true);\r\n    }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by priority.\r\n *\r\n * Applications need not use priority but can order collections by\r\n * ordinary properties (see\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}\r\n * for alternatives to priority.\r\n */\r\nfunction orderByPriority() {\r\n    return new QueryOrderByPriorityConstraint();\r\n}\r\nclass QueryOrderByValueConstraint extends QueryConstraint {\r\n    _apply(query) {\r\n        validateNoPreviousOrderByCall(query, 'orderByValue');\r\n        const newParams = queryParamsOrderBy(query._queryParams, VALUE_INDEX);\r\n        validateQueryEndpoints(newParams);\r\n        return new QueryImpl(query._repo, query._path, newParams, \r\n        /*orderByCalled=*/ true);\r\n    }\r\n}\r\n/**\r\n * Creates a new `QueryConstraint` that orders by value.\r\n *\r\n * If the children of a query are all scalar values (string, number, or\r\n * boolean), you can order the results by their (ascending) values.\r\n *\r\n * You can read more about `orderByValue()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#sort_data | Sort data}.\r\n */\r\nfunction orderByValue() {\r\n    return new QueryOrderByValueConstraint();\r\n}\r\nclass QueryEqualToValueConstraint extends QueryConstraint {\r\n    constructor(_value, _key) {\r\n        super();\r\n        this._value = _value;\r\n        this._key = _key;\r\n    }\r\n    _apply(query) {\r\n        validateFirebaseDataArg('equalTo', this._value, query._path, false);\r\n        if (query._queryParams.hasStart()) {\r\n            throw new Error('equalTo: Starting point was already set (by another call to startAt/startAfter or ' +\r\n                'equalTo).');\r\n        }\r\n        if (query._queryParams.hasEnd()) {\r\n            throw new Error('equalTo: Ending point was already set (by another call to endAt/endBefore or ' +\r\n                'equalTo).');\r\n        }\r\n        return new QueryEndAtConstraint(this._value, this._key)._apply(new QueryStartAtConstraint(this._value, this._key)._apply(query));\r\n    }\r\n}\r\n/**\r\n * Creates a `QueryConstraint` that includes children that match the specified\r\n * value.\r\n *\r\n * Using `startAt()`, `startAfter()`, `endBefore()`, `endAt()` and `equalTo()`\r\n * allows you to choose arbitrary starting and ending points for your queries.\r\n *\r\n * The optional key argument can be used to further limit the range of the\r\n * query. If it is specified, then children that have exactly the specified\r\n * value must also have exactly the specified key as their key name. This can be\r\n * used to filter result sets with many matches for the same value.\r\n *\r\n * You can read more about `equalTo()` in\r\n * {@link https://firebase.google.com/docs/database/web/lists-of-data#filtering_data | Filtering data}.\r\n *\r\n * @param value - The value to match for. The argument type depends on which\r\n * `orderBy*()` function was used in this query. Specify a value that matches\r\n * the `orderBy*()` type. When used in combination with `orderByKey()`, the\r\n * value must be a string.\r\n * @param key - The child key to start at, among the children with the\r\n * previously specified priority. This argument is only allowed if ordering by\r\n * child, value, or priority.\r\n */\r\nfunction equalTo(value, key) {\r\n    validateKey('equalTo', 'key', key, true);\r\n    return new QueryEqualToValueConstraint(value, key);\r\n}\r\n/**\r\n * Creates a new immutable instance of `Query` that is extended to also include\r\n * additional query constraints.\r\n *\r\n * @param query - The Query instance to use as a base for the new constraints.\r\n * @param queryConstraints - The list of `QueryConstraint`s to apply.\r\n * @throws if any of the provided query constraints cannot be combined with the\r\n * existing or new constraints.\r\n */\r\nfunction query(query, ...queryConstraints) {\r\n    let queryImpl = getModularInstance(query);\r\n    for (const constraint of queryConstraints) {\r\n        queryImpl = constraint._apply(queryImpl);\r\n    }\r\n    return queryImpl;\r\n}\r\n/**\r\n * Define reference constructor in various modules\r\n *\r\n * We are doing this here to avoid several circular\r\n * dependency issues\r\n */\r\nsyncPointSetReferenceConstructor(ReferenceImpl);\r\nsyncTreeSetReferenceConstructor(ReferenceImpl);\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This variable is also defined in the firebase Node.js Admin SDK. Before\r\n * modifying this definition, consult the definition in:\r\n *\r\n * https://github.com/firebase/firebase-admin-node\r\n *\r\n * and make sure the two are consistent.\r\n */\r\nconst FIREBASE_DATABASE_EMULATOR_HOST_VAR = 'FIREBASE_DATABASE_EMULATOR_HOST';\r\n/**\r\n * Creates and caches `Repo` instances.\r\n */\r\nconst repos = {};\r\n/**\r\n * If true, any new `Repo` will be created to use `ReadonlyRestClient` (for testing purposes).\r\n */\r\nlet useRestClient = false;\r\n/**\r\n * Update an existing `Repo` in place to point to a new host/port.\r\n */\r\nfunction repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider) {\r\n    repo.repoInfo_ = new RepoInfo(`${host}:${port}`, \r\n    /* secure= */ false, repo.repoInfo_.namespace, repo.repoInfo_.webSocketOnly, repo.repoInfo_.nodeAdmin, repo.repoInfo_.persistenceKey, repo.repoInfo_.includeNamespaceInQueryParams);\r\n    if (tokenProvider) {\r\n        repo.authTokenProvider_ = tokenProvider;\r\n    }\r\n}\r\n/**\r\n * This function should only ever be called to CREATE a new database instance.\r\n * @internal\r\n */\r\nfunction repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url, nodeAdmin) {\r\n    let dbUrl = url || app.options.databaseURL;\r\n    if (dbUrl === undefined) {\r\n        if (!app.options.projectId) {\r\n            fatal(\"Can't determine Firebase Database URL. Be sure to include \" +\r\n                ' a Project ID when calling firebase.initializeApp().');\r\n        }\r\n        log('Using default host for project ', app.options.projectId);\r\n        dbUrl = `${app.options.projectId}-default-rtdb.firebaseio.com`;\r\n    }\r\n    let parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\r\n    let repoInfo = parsedUrl.repoInfo;\r\n    let isEmulator;\r\n    let dbEmulatorHost = undefined;\r\n    if (typeof process !== 'undefined' && process.env) {\r\n        dbEmulatorHost = process.env[FIREBASE_DATABASE_EMULATOR_HOST_VAR];\r\n    }\r\n    if (dbEmulatorHost) {\r\n        isEmulator = true;\r\n        dbUrl = `http://${dbEmulatorHost}?ns=${repoInfo.namespace}`;\r\n        parsedUrl = parseRepoInfo(dbUrl, nodeAdmin);\r\n        repoInfo = parsedUrl.repoInfo;\r\n    }\r\n    else {\r\n        isEmulator = !parsedUrl.repoInfo.secure;\r\n    }\r\n    const authTokenProvider = nodeAdmin && isEmulator\r\n        ? new EmulatorTokenProvider(EmulatorTokenProvider.OWNER)\r\n        : new FirebaseAuthTokenProvider(app.name, app.options, authProvider);\r\n    validateUrl('Invalid Firebase Database URL', parsedUrl);\r\n    if (!pathIsEmpty(parsedUrl.path)) {\r\n        fatal('Database URL must point to the root of a Firebase Database ' +\r\n            '(not including a child path).');\r\n    }\r\n    const repo = repoManagerCreateRepo(repoInfo, app, authTokenProvider, new AppCheckTokenProvider(app.name, appCheckProvider));\r\n    return new Database(repo, app);\r\n}\r\n/**\r\n * Remove the repo and make sure it is disconnected.\r\n *\r\n */\r\nfunction repoManagerDeleteRepo(repo, appName) {\r\n    const appRepos = repos[appName];\r\n    // This should never happen...\r\n    if (!appRepos || appRepos[repo.key] !== repo) {\r\n        fatal(`Database ${appName}(${repo.repoInfo_}) has already been deleted.`);\r\n    }\r\n    repoInterrupt(repo);\r\n    delete appRepos[repo.key];\r\n}\r\n/**\r\n * Ensures a repo doesn't already exist and then creates one using the\r\n * provided app.\r\n *\r\n * @param repoInfo - The metadata about the Repo\r\n * @returns The Repo object for the specified server / repoName.\r\n */\r\nfunction repoManagerCreateRepo(repoInfo, app, authTokenProvider, appCheckProvider) {\r\n    let appRepos = repos[app.name];\r\n    if (!appRepos) {\r\n        appRepos = {};\r\n        repos[app.name] = appRepos;\r\n    }\r\n    let repo = appRepos[repoInfo.toURLString()];\r\n    if (repo) {\r\n        fatal('Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.');\r\n    }\r\n    repo = new Repo(repoInfo, useRestClient, authTokenProvider, appCheckProvider);\r\n    appRepos[repoInfo.toURLString()] = repo;\r\n    return repo;\r\n}\r\n/**\r\n * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.\r\n */\r\nfunction repoManagerForceRestClient(forceRestClient) {\r\n    useRestClient = forceRestClient;\r\n}\r\n/**\r\n * Class representing a Firebase Realtime Database.\r\n */\r\nclass Database {\r\n    /** @hideconstructor */\r\n    constructor(_repoInternal, \r\n    /** The {@link @firebase/app#FirebaseApp} associated with this Realtime Database instance. */\r\n    app) {\r\n        this._repoInternal = _repoInternal;\r\n        this.app = app;\r\n        /** Represents a `Database` instance. */\r\n        this['type'] = 'database';\r\n        /** Track if the instance has been used (root or repo accessed) */\r\n        this._instanceStarted = false;\r\n    }\r\n    get _repo() {\r\n        if (!this._instanceStarted) {\r\n            repoStart(this._repoInternal, this.app.options.appId, this.app.options['databaseAuthVariableOverride']);\r\n            this._instanceStarted = true;\r\n        }\r\n        return this._repoInternal;\r\n    }\r\n    get _root() {\r\n        if (!this._rootInternal) {\r\n            this._rootInternal = new ReferenceImpl(this._repo, newEmptyPath());\r\n        }\r\n        return this._rootInternal;\r\n    }\r\n    _delete() {\r\n        if (this._rootInternal !== null) {\r\n            repoManagerDeleteRepo(this._repo, this.app.name);\r\n            this._repoInternal = null;\r\n            this._rootInternal = null;\r\n        }\r\n        return Promise.resolve();\r\n    }\r\n    _checkNotDeleted(apiName) {\r\n        if (this._rootInternal === null) {\r\n            fatal('Cannot call ' + apiName + ' on a deleted database.');\r\n        }\r\n    }\r\n}\r\nfunction checkTransportInit() {\r\n    if (TransportManager.IS_TRANSPORT_INITIALIZED) {\r\n        warn('Transport has already been initialized. Please call this function before calling ref or setting up a listener');\r\n    }\r\n}\r\n/**\r\n * Force the use of websockets instead of longPolling.\r\n */\r\nfunction forceWebSockets() {\r\n    checkTransportInit();\r\n    BrowserPollConnection.forceDisallow();\r\n}\r\n/**\r\n * Force the use of longPolling instead of websockets. This will be ignored if websocket protocol is used in databaseURL.\r\n */\r\nfunction forceLongPolling() {\r\n    checkTransportInit();\r\n    WebSocketConnection.forceDisallow();\r\n    BrowserPollConnection.forceAllow();\r\n}\r\n/**\r\n * Returns the instance of the Realtime Database SDK that is associated\r\n * with the provided {@link @firebase/app#FirebaseApp}. Initializes a new instance with\r\n * with default settings if no instance exists or if the existing instance uses\r\n * a custom database URL.\r\n *\r\n * @param app - The {@link @firebase/app#FirebaseApp} instance that the returned Realtime\r\n * Database instance is associated with.\r\n * @param url - The URL of the Realtime Database instance to connect to. If not\r\n * provided, the SDK connects to the default instance of the Firebase App.\r\n * @returns The `Database` instance of the provided app.\r\n */\r\nfunction getDatabase(app = getApp(), url) {\r\n    return _getProvider(app, 'database').getImmediate({\r\n        identifier: url\r\n    });\r\n}\r\n/**\r\n * Modify the provided instance to communicate with the Realtime Database\r\n * emulator.\r\n *\r\n * <p>Note: This method must be called before performing any other operation.\r\n *\r\n * @param db - The instance to modify.\r\n * @param host - The emulator host (ex: localhost)\r\n * @param port - The emulator port (ex: 8080)\r\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\r\n */\r\nfunction connectDatabaseEmulator(db, host, port, options = {}) {\r\n    db = getModularInstance(db);\r\n    db._checkNotDeleted('useEmulator');\r\n    if (db._instanceStarted) {\r\n        fatal('Cannot call useEmulator() after instance has already been initialized.');\r\n    }\r\n    const repo = db._repoInternal;\r\n    let tokenProvider = undefined;\r\n    if (repo.repoInfo_.nodeAdmin) {\r\n        if (options.mockUserToken) {\r\n            fatal('mockUserToken is not supported by the Admin SDK. For client access with mock users, please use the \"firebase\" package instead of \"firebase-admin\".');\r\n        }\r\n        tokenProvider = new EmulatorTokenProvider(EmulatorTokenProvider.OWNER);\r\n    }\r\n    else if (options.mockUserToken) {\r\n        const token = typeof options.mockUserToken === 'string'\r\n            ? options.mockUserToken\r\n            : createMockUserToken(options.mockUserToken, db.app.options.projectId);\r\n        tokenProvider = new EmulatorTokenProvider(token);\r\n    }\r\n    // Modify the repo to apply emulator settings\r\n    repoManagerApplyEmulatorSettings(repo, host, port, tokenProvider);\r\n}\r\n/**\r\n * Disconnects from the server (all Database operations will be completed\r\n * offline).\r\n *\r\n * The client automatically maintains a persistent connection to the Database\r\n * server, which will remain active indefinitely and reconnect when\r\n * disconnected. However, the `goOffline()` and `goOnline()` methods may be used\r\n * to control the client connection in cases where a persistent connection is\r\n * undesirable.\r\n *\r\n * While offline, the client will no longer receive data updates from the\r\n * Database. However, all Database operations performed locally will continue to\r\n * immediately fire events, allowing your application to continue behaving\r\n * normally. Additionally, each operation performed locally will automatically\r\n * be queued and retried upon reconnection to the Database server.\r\n *\r\n * To reconnect to the Database and begin receiving remote events, see\r\n * `goOnline()`.\r\n *\r\n * @param db - The instance to disconnect.\r\n */\r\nfunction goOffline(db) {\r\n    db = getModularInstance(db);\r\n    db._checkNotDeleted('goOffline');\r\n    repoInterrupt(db._repo);\r\n}\r\n/**\r\n * Reconnects to the server and synchronizes the offline Database state\r\n * with the server state.\r\n *\r\n * This method should be used after disabling the active connection with\r\n * `goOffline()`. Once reconnected, the client will transmit the proper data\r\n * and fire the appropriate events so that your client \"catches up\"\r\n * automatically.\r\n *\r\n * @param db - The instance to reconnect.\r\n */\r\nfunction goOnline(db) {\r\n    db = getModularInstance(db);\r\n    db._checkNotDeleted('goOnline');\r\n    repoResume(db._repo);\r\n}\r\nfunction enableLogging(logger, persistent) {\r\n    enableLogging$1(logger, persistent);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerDatabase(variant) {\r\n    setSDKVersion(SDK_VERSION$1);\r\n    _registerComponent(new Component('database', (container, { instanceIdentifier: url }) => {\r\n        const app = container.getProvider('app').getImmediate();\r\n        const authProvider = container.getProvider('auth-internal');\r\n        const appCheckProvider = container.getProvider('app-check-internal');\r\n        return repoManagerDatabaseFromApp(app, authProvider, appCheckProvider, url);\r\n    }, \"PUBLIC\" /* PUBLIC */).setMultipleInstances(true));\r\n    registerVersion(name, version, variant);\r\n    // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n    registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst SERVER_TIMESTAMP = {\r\n    '.sv': 'timestamp'\r\n};\r\n/**\r\n * Returns a placeholder value for auto-populating the current timestamp (time\r\n * since the Unix epoch, in milliseconds) as determined by the Firebase\r\n * servers.\r\n */\r\nfunction serverTimestamp() {\r\n    return SERVER_TIMESTAMP;\r\n}\r\n/**\r\n * Returns a placeholder value that can be used to atomically increment the\r\n * current database value by the provided delta.\r\n *\r\n * @param delta - the amount to modify the current value atomically.\r\n * @returns A placeholder value for modifying data atomically server-side.\r\n */\r\nfunction increment(delta) {\r\n    return {\r\n        '.sv': {\r\n            'increment': delta\r\n        }\r\n    };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A type for the resolve value of {@link runTransaction}.\r\n */\r\nclass TransactionResult {\r\n    /** @hideconstructor */\r\n    constructor(\r\n    /** Whether the transaction was successfully committed. */\r\n    committed, \r\n    /** The resulting data snapshot. */\r\n    snapshot) {\r\n        this.committed = committed;\r\n        this.snapshot = snapshot;\r\n    }\r\n    /** Returns a JSON-serializable representation of this object. */\r\n    toJSON() {\r\n        return { committed: this.committed, snapshot: this.snapshot.toJSON() };\r\n    }\r\n}\r\n/**\r\n * Atomically modifies the data at this location.\r\n *\r\n * Atomically modify the data at this location. Unlike a normal `set()`, which\r\n * just overwrites the data regardless of its previous value, `runTransaction()` is\r\n * used to modify the existing value to a new value, ensuring there are no\r\n * conflicts with other clients writing to the same location at the same time.\r\n *\r\n * To accomplish this, you pass `runTransaction()` an update function which is\r\n * used to transform the current value into a new value. If another client\r\n * writes to the location before your new value is successfully written, your\r\n * update function will be called again with the new current value, and the\r\n * write will be retried. This will happen repeatedly until your write succeeds\r\n * without conflict or you abort the transaction by not returning a value from\r\n * your update function.\r\n *\r\n * Note: Modifying data with `set()` will cancel any pending transactions at\r\n * that location, so extreme care should be taken if mixing `set()` and\r\n * `runTransaction()` to update the same data.\r\n *\r\n * Note: When using transactions with Security and Firebase Rules in place, be\r\n * aware that a client needs `.read` access in addition to `.write` access in\r\n * order to perform a transaction. This is because the client-side nature of\r\n * transactions requires the client to read the data in order to transactionally\r\n * update it.\r\n *\r\n * @param ref - The location to atomically modify.\r\n * @param transactionUpdate - A developer-supplied function which will be passed\r\n * the current data stored at this location (as a JavaScript object). The\r\n * function should return the new value it would like written (as a JavaScript\r\n * object). If `undefined` is returned (i.e. you return with no arguments) the\r\n * transaction will be aborted and the data at this location will not be\r\n * modified.\r\n * @param options - An options object to configure transactions.\r\n * @returns A `Promise` that can optionally be used instead of the `onComplete`\r\n * callback to handle success and failure.\r\n */\r\nfunction runTransaction(ref, \r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ntransactionUpdate, options) {\r\n    var _a;\r\n    ref = getModularInstance(ref);\r\n    validateWritablePath('Reference.transaction', ref._path);\r\n    if (ref.key === '.length' || ref.key === '.keys') {\r\n        throw ('Reference.transaction failed: ' + ref.key + ' is a read-only object.');\r\n    }\r\n    const applyLocally = (_a = options === null || options === void 0 ? void 0 : options.applyLocally) !== null && _a !== void 0 ? _a : true;\r\n    const deferred = new Deferred();\r\n    const promiseComplete = (error, committed, node) => {\r\n        let dataSnapshot = null;\r\n        if (error) {\r\n            deferred.reject(error);\r\n        }\r\n        else {\r\n            dataSnapshot = new DataSnapshot(node, new ReferenceImpl(ref._repo, ref._path), PRIORITY_INDEX);\r\n            deferred.resolve(new TransactionResult(committed, dataSnapshot));\r\n        }\r\n    };\r\n    // Add a watch to make sure we get server updates.\r\n    const unwatcher = onValue(ref, () => { });\r\n    repoStartTransaction(ref._repo, ref._path, transactionUpdate, promiseComplete, unwatcher, applyLocally);\r\n    return deferred.promise;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nPersistentConnection;\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nPersistentConnection.prototype.simpleListen = function (pathString, onComplete) {\r\n    this.sendRequest('q', { p: pathString }, onComplete);\r\n};\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nPersistentConnection.prototype.echo = function (data, onEcho) {\r\n    this.sendRequest('echo', { d: data }, onEcho);\r\n};\r\n// RealTimeConnection properties that we use in tests.\r\nConnection;\r\n/**\r\n * @internal\r\n */\r\nconst hijackHash = function (newHash) {\r\n    const oldPut = PersistentConnection.prototype.put;\r\n    PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {\r\n        if (hash !== undefined) {\r\n            hash = newHash();\r\n        }\r\n        oldPut.call(this, pathString, data, onComplete, hash);\r\n    };\r\n    return function () {\r\n        PersistentConnection.prototype.put = oldPut;\r\n    };\r\n};\r\nRepoInfo;\r\n/**\r\n * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\r\n * @internal\r\n */\r\nconst forceRestClient = function (forceRestClient) {\r\n    repoManagerForceRestClient(forceRestClient);\r\n};\n\n/**\r\n * Firebase Realtime Database\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterDatabase();\n\nexport { DataSnapshot, Database, OnDisconnect, QueryConstraint, TransactionResult, QueryImpl as _QueryImpl, QueryParams as _QueryParams, ReferenceImpl as _ReferenceImpl, forceRestClient as _TEST_ACCESS_forceRestClient, hijackHash as _TEST_ACCESS_hijackHash, repoManagerDatabaseFromApp as _repoManagerDatabaseFromApp, setSDKVersion as _setSDKVersion, validatePathString as _validatePathString, validateWritablePath as _validateWritablePath, child, connectDatabaseEmulator, enableLogging, endAt, endBefore, equalTo, forceLongPolling, forceWebSockets, get, getDatabase, goOffline, goOnline, increment, limitToFirst, limitToLast, off, onChildAdded, onChildChanged, onChildMoved, onChildRemoved, onDisconnect, onValue, orderByChild, orderByKey, orderByPriority, orderByValue, push, query, ref, refFromURL, remove, runTransaction, serverTimestamp, set, setPriority, setWithPriority, startAfter, startAt, update };\n//# sourceMappingURL=index.esm2017.js.map\n","import firebase from '@firebase/app-compat';\nimport { Provider, ComponentContainer, Component } from '@firebase/component';\nimport { _validatePathString, onChildMoved, onChildChanged, onChildRemoved, onChildAdded, onValue, off, get, query, limitToFirst, limitToLast, orderByChild, orderByKey, orderByPriority, orderByValue, startAt, startAfter, endAt, endBefore, equalTo, _ReferenceImpl, _QueryImpl, _QueryParams, child, set, _validateWritablePath, update, setWithPriority, remove, runTransaction, setPriority, push, OnDisconnect as OnDisconnect$1, forceWebSockets, forceLongPolling, connectDatabaseEmulator, refFromURL, ref, goOffline, goOnline, serverTimestamp, increment, _setSDKVersion, _repoManagerDatabaseFromApp, enableLogging } from '@firebase/database';\nimport { errorPrefix, validateArgCount, validateCallback, validateContextObject, Deferred } from '@firebase/util';\nimport { Logger } from '@firebase/logger';\n\nconst name = \"@firebase/database-compat\";\nconst version = \"0.2.4\";\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logClient = new Logger('@firebase/database-compat');\r\nconst warn = function (msg) {\r\n    const message = 'FIREBASE WARNING: ' + msg;\r\n    logClient.warn(message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst validateBoolean = function (fnName, argumentName, bool, optional) {\r\n    if (optional && bool === undefined) {\r\n        return;\r\n    }\r\n    if (typeof bool !== 'boolean') {\r\n        throw new Error(errorPrefix(fnName, argumentName) + 'must be a boolean.');\r\n    }\r\n};\r\nconst validateEventType = function (fnName, eventType, optional) {\r\n    if (optional && eventType === undefined) {\r\n        return;\r\n    }\r\n    switch (eventType) {\r\n        case 'value':\r\n        case 'child_added':\r\n        case 'child_removed':\r\n        case 'child_changed':\r\n        case 'child_moved':\r\n            break;\r\n        default:\r\n            throw new Error(errorPrefix(fnName, 'eventType') +\r\n                'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n                '\"child_changed\", or \"child_moved\".');\r\n    }\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass OnDisconnect {\r\n    constructor(_delegate) {\r\n        this._delegate = _delegate;\r\n    }\r\n    cancel(onComplete) {\r\n        validateArgCount('OnDisconnect.cancel', 0, 1, arguments.length);\r\n        validateCallback('OnDisconnect.cancel', 'onComplete', onComplete, true);\r\n        const result = this._delegate.cancel();\r\n        if (onComplete) {\r\n            result.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        return result;\r\n    }\r\n    remove(onComplete) {\r\n        validateArgCount('OnDisconnect.remove', 0, 1, arguments.length);\r\n        validateCallback('OnDisconnect.remove', 'onComplete', onComplete, true);\r\n        const result = this._delegate.remove();\r\n        if (onComplete) {\r\n            result.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        return result;\r\n    }\r\n    set(value, onComplete) {\r\n        validateArgCount('OnDisconnect.set', 1, 2, arguments.length);\r\n        validateCallback('OnDisconnect.set', 'onComplete', onComplete, true);\r\n        const result = this._delegate.set(value);\r\n        if (onComplete) {\r\n            result.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        return result;\r\n    }\r\n    setWithPriority(value, priority, onComplete) {\r\n        validateArgCount('OnDisconnect.setWithPriority', 2, 3, arguments.length);\r\n        validateCallback('OnDisconnect.setWithPriority', 'onComplete', onComplete, true);\r\n        const result = this._delegate.setWithPriority(value, priority);\r\n        if (onComplete) {\r\n            result.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        return result;\r\n    }\r\n    update(objectToMerge, onComplete) {\r\n        validateArgCount('OnDisconnect.update', 1, 2, arguments.length);\r\n        if (Array.isArray(objectToMerge)) {\r\n            const newObjectToMerge = {};\r\n            for (let i = 0; i < objectToMerge.length; ++i) {\r\n                newObjectToMerge['' + i] = objectToMerge[i];\r\n            }\r\n            objectToMerge = newObjectToMerge;\r\n            warn('Passing an Array to firebase.database.onDisconnect().update() is deprecated. Use set() if you want to overwrite the ' +\r\n                'existing data, or an Object with integer keys if you really do want to only update some of the children.');\r\n        }\r\n        validateCallback('OnDisconnect.update', 'onComplete', onComplete, true);\r\n        const result = this._delegate.update(objectToMerge);\r\n        if (onComplete) {\r\n            result.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        return result;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass TransactionResult {\r\n    /**\r\n     * A type for the resolve value of Firebase.transaction.\r\n     */\r\n    constructor(committed, snapshot) {\r\n        this.committed = committed;\r\n        this.snapshot = snapshot;\r\n    }\r\n    // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n    // for end-users\r\n    toJSON() {\r\n        validateArgCount('TransactionResult.toJSON', 0, 1, arguments.length);\r\n        return { committed: this.committed, snapshot: this.snapshot.toJSON() };\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Class representing a firebase data snapshot.  It wraps a SnapshotNode and\r\n * surfaces the public methods (val, forEach, etc.) we want to expose.\r\n */\r\nclass DataSnapshot {\r\n    constructor(_database, _delegate) {\r\n        this._database = _database;\r\n        this._delegate = _delegate;\r\n    }\r\n    /**\r\n     * Retrieves the snapshot contents as JSON.  Returns null if the snapshot is\r\n     * empty.\r\n     *\r\n     * @returns JSON representation of the DataSnapshot contents, or null if empty.\r\n     */\r\n    val() {\r\n        validateArgCount('DataSnapshot.val', 0, 0, arguments.length);\r\n        return this._delegate.val();\r\n    }\r\n    /**\r\n     * Returns the snapshot contents as JSON, including priorities of node.  Suitable for exporting\r\n     * the entire node contents.\r\n     * @returns JSON representation of the DataSnapshot contents, or null if empty.\r\n     */\r\n    exportVal() {\r\n        validateArgCount('DataSnapshot.exportVal', 0, 0, arguments.length);\r\n        return this._delegate.exportVal();\r\n    }\r\n    // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n    // for end-users\r\n    toJSON() {\r\n        // Optional spacer argument is unnecessary because we're depending on recursion rather than stringifying the content\r\n        validateArgCount('DataSnapshot.toJSON', 0, 1, arguments.length);\r\n        return this._delegate.toJSON();\r\n    }\r\n    /**\r\n     * Returns whether the snapshot contains a non-null value.\r\n     *\r\n     * @returns Whether the snapshot contains a non-null value, or is empty.\r\n     */\r\n    exists() {\r\n        validateArgCount('DataSnapshot.exists', 0, 0, arguments.length);\r\n        return this._delegate.exists();\r\n    }\r\n    /**\r\n     * Returns a DataSnapshot of the specified child node's contents.\r\n     *\r\n     * @param path - Path to a child.\r\n     * @returns DataSnapshot for child node.\r\n     */\r\n    child(path) {\r\n        validateArgCount('DataSnapshot.child', 0, 1, arguments.length);\r\n        // Ensure the childPath is a string (can be a number)\r\n        path = String(path);\r\n        _validatePathString('DataSnapshot.child', 'path', path, false);\r\n        return new DataSnapshot(this._database, this._delegate.child(path));\r\n    }\r\n    /**\r\n     * Returns whether the snapshot contains a child at the specified path.\r\n     *\r\n     * @param path - Path to a child.\r\n     * @returns Whether the child exists.\r\n     */\r\n    hasChild(path) {\r\n        validateArgCount('DataSnapshot.hasChild', 1, 1, arguments.length);\r\n        _validatePathString('DataSnapshot.hasChild', 'path', path, false);\r\n        return this._delegate.hasChild(path);\r\n    }\r\n    /**\r\n     * Returns the priority of the object, or null if no priority was set.\r\n     *\r\n     * @returns The priority.\r\n     */\r\n    getPriority() {\r\n        validateArgCount('DataSnapshot.getPriority', 0, 0, arguments.length);\r\n        return this._delegate.priority;\r\n    }\r\n    /**\r\n     * Iterates through child nodes and calls the specified action for each one.\r\n     *\r\n     * @param action - Callback function to be called\r\n     * for each child.\r\n     * @returns True if forEach was canceled by action returning true for\r\n     * one of the child nodes.\r\n     */\r\n    forEach(action) {\r\n        validateArgCount('DataSnapshot.forEach', 1, 1, arguments.length);\r\n        validateCallback('DataSnapshot.forEach', 'action', action, false);\r\n        return this._delegate.forEach(expDataSnapshot => action(new DataSnapshot(this._database, expDataSnapshot)));\r\n    }\r\n    /**\r\n     * Returns whether this DataSnapshot has children.\r\n     * @returns True if the DataSnapshot contains 1 or more child nodes.\r\n     */\r\n    hasChildren() {\r\n        validateArgCount('DataSnapshot.hasChildren', 0, 0, arguments.length);\r\n        return this._delegate.hasChildren();\r\n    }\r\n    get key() {\r\n        return this._delegate.key;\r\n    }\r\n    /**\r\n     * Returns the number of children for this DataSnapshot.\r\n     * @returns The number of children that this DataSnapshot contains.\r\n     */\r\n    numChildren() {\r\n        validateArgCount('DataSnapshot.numChildren', 0, 0, arguments.length);\r\n        return this._delegate.size;\r\n    }\r\n    /**\r\n     * @returns The Firebase reference for the location this snapshot's data came\r\n     * from.\r\n     */\r\n    getRef() {\r\n        validateArgCount('DataSnapshot.ref', 0, 0, arguments.length);\r\n        return new Reference(this._database, this._delegate.ref);\r\n    }\r\n    get ref() {\r\n        return this.getRef();\r\n    }\r\n}\r\n/**\r\n * A Query represents a filter to be applied to a firebase location.  This object purely represents the\r\n * query expression (and exposes our public API to build the query).  The actual query logic is in ViewBase.js.\r\n *\r\n * Since every Firebase reference is a query, Firebase inherits from this object.\r\n */\r\nclass Query {\r\n    constructor(database, _delegate) {\r\n        this.database = database;\r\n        this._delegate = _delegate;\r\n    }\r\n    on(eventType, callback, cancelCallbackOrContext, context) {\r\n        var _a;\r\n        validateArgCount('Query.on', 2, 4, arguments.length);\r\n        validateCallback('Query.on', 'callback', callback, false);\r\n        const ret = Query.getCancelAndContextArgs_('Query.on', cancelCallbackOrContext, context);\r\n        const valueCallback = (expSnapshot, previousChildName) => {\r\n            callback.call(ret.context, new DataSnapshot(this.database, expSnapshot), previousChildName);\r\n        };\r\n        valueCallback.userCallback = callback;\r\n        valueCallback.context = ret.context;\r\n        const cancelCallback = (_a = ret.cancel) === null || _a === void 0 ? void 0 : _a.bind(ret.context);\r\n        switch (eventType) {\r\n            case 'value':\r\n                onValue(this._delegate, valueCallback, cancelCallback);\r\n                return callback;\r\n            case 'child_added':\r\n                onChildAdded(this._delegate, valueCallback, cancelCallback);\r\n                return callback;\r\n            case 'child_removed':\r\n                onChildRemoved(this._delegate, valueCallback, cancelCallback);\r\n                return callback;\r\n            case 'child_changed':\r\n                onChildChanged(this._delegate, valueCallback, cancelCallback);\r\n                return callback;\r\n            case 'child_moved':\r\n                onChildMoved(this._delegate, valueCallback, cancelCallback);\r\n                return callback;\r\n            default:\r\n                throw new Error(errorPrefix('Query.on', 'eventType') +\r\n                    'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n                    '\"child_changed\", or \"child_moved\".');\r\n        }\r\n    }\r\n    off(eventType, callback, context) {\r\n        validateArgCount('Query.off', 0, 3, arguments.length);\r\n        validateEventType('Query.off', eventType, true);\r\n        validateCallback('Query.off', 'callback', callback, true);\r\n        validateContextObject('Query.off', 'context', context, true);\r\n        if (callback) {\r\n            const valueCallback = () => { };\r\n            valueCallback.userCallback = callback;\r\n            valueCallback.context = context;\r\n            off(this._delegate, eventType, valueCallback);\r\n        }\r\n        else {\r\n            off(this._delegate, eventType);\r\n        }\r\n    }\r\n    /**\r\n     * Get the server-value for this query, or return a cached value if not connected.\r\n     */\r\n    get() {\r\n        return get(this._delegate).then(expSnapshot => {\r\n            return new DataSnapshot(this.database, expSnapshot);\r\n        });\r\n    }\r\n    /**\r\n     * Attaches a listener, waits for the first event, and then removes the listener\r\n     */\r\n    once(eventType, callback, failureCallbackOrContext, context) {\r\n        validateArgCount('Query.once', 1, 4, arguments.length);\r\n        validateCallback('Query.once', 'callback', callback, true);\r\n        const ret = Query.getCancelAndContextArgs_('Query.once', failureCallbackOrContext, context);\r\n        const deferred = new Deferred();\r\n        const valueCallback = (expSnapshot, previousChildName) => {\r\n            const result = new DataSnapshot(this.database, expSnapshot);\r\n            if (callback) {\r\n                callback.call(ret.context, result, previousChildName);\r\n            }\r\n            deferred.resolve(result);\r\n        };\r\n        valueCallback.userCallback = callback;\r\n        valueCallback.context = ret.context;\r\n        const cancelCallback = (error) => {\r\n            if (ret.cancel) {\r\n                ret.cancel.call(ret.context, error);\r\n            }\r\n            deferred.reject(error);\r\n        };\r\n        switch (eventType) {\r\n            case 'value':\r\n                onValue(this._delegate, valueCallback, cancelCallback, {\r\n                    onlyOnce: true\r\n                });\r\n                break;\r\n            case 'child_added':\r\n                onChildAdded(this._delegate, valueCallback, cancelCallback, {\r\n                    onlyOnce: true\r\n                });\r\n                break;\r\n            case 'child_removed':\r\n                onChildRemoved(this._delegate, valueCallback, cancelCallback, {\r\n                    onlyOnce: true\r\n                });\r\n                break;\r\n            case 'child_changed':\r\n                onChildChanged(this._delegate, valueCallback, cancelCallback, {\r\n                    onlyOnce: true\r\n                });\r\n                break;\r\n            case 'child_moved':\r\n                onChildMoved(this._delegate, valueCallback, cancelCallback, {\r\n                    onlyOnce: true\r\n                });\r\n                break;\r\n            default:\r\n                throw new Error(errorPrefix('Query.once', 'eventType') +\r\n                    'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n                    '\"child_changed\", or \"child_moved\".');\r\n        }\r\n        return deferred.promise;\r\n    }\r\n    /**\r\n     * Set a limit and anchor it to the start of the window.\r\n     */\r\n    limitToFirst(limit) {\r\n        validateArgCount('Query.limitToFirst', 1, 1, arguments.length);\r\n        return new Query(this.database, query(this._delegate, limitToFirst(limit)));\r\n    }\r\n    /**\r\n     * Set a limit and anchor it to the end of the window.\r\n     */\r\n    limitToLast(limit) {\r\n        validateArgCount('Query.limitToLast', 1, 1, arguments.length);\r\n        return new Query(this.database, query(this._delegate, limitToLast(limit)));\r\n    }\r\n    /**\r\n     * Given a child path, return a new query ordered by the specified grandchild path.\r\n     */\r\n    orderByChild(path) {\r\n        validateArgCount('Query.orderByChild', 1, 1, arguments.length);\r\n        return new Query(this.database, query(this._delegate, orderByChild(path)));\r\n    }\r\n    /**\r\n     * Return a new query ordered by the KeyIndex\r\n     */\r\n    orderByKey() {\r\n        validateArgCount('Query.orderByKey', 0, 0, arguments.length);\r\n        return new Query(this.database, query(this._delegate, orderByKey()));\r\n    }\r\n    /**\r\n     * Return a new query ordered by the PriorityIndex\r\n     */\r\n    orderByPriority() {\r\n        validateArgCount('Query.orderByPriority', 0, 0, arguments.length);\r\n        return new Query(this.database, query(this._delegate, orderByPriority()));\r\n    }\r\n    /**\r\n     * Return a new query ordered by the ValueIndex\r\n     */\r\n    orderByValue() {\r\n        validateArgCount('Query.orderByValue', 0, 0, arguments.length);\r\n        return new Query(this.database, query(this._delegate, orderByValue()));\r\n    }\r\n    startAt(value = null, name) {\r\n        validateArgCount('Query.startAt', 0, 2, arguments.length);\r\n        return new Query(this.database, query(this._delegate, startAt(value, name)));\r\n    }\r\n    startAfter(value = null, name) {\r\n        validateArgCount('Query.startAfter', 0, 2, arguments.length);\r\n        return new Query(this.database, query(this._delegate, startAfter(value, name)));\r\n    }\r\n    endAt(value = null, name) {\r\n        validateArgCount('Query.endAt', 0, 2, arguments.length);\r\n        return new Query(this.database, query(this._delegate, endAt(value, name)));\r\n    }\r\n    endBefore(value = null, name) {\r\n        validateArgCount('Query.endBefore', 0, 2, arguments.length);\r\n        return new Query(this.database, query(this._delegate, endBefore(value, name)));\r\n    }\r\n    /**\r\n     * Load the selection of children with exactly the specified value, and, optionally,\r\n     * the specified name.\r\n     */\r\n    equalTo(value, name) {\r\n        validateArgCount('Query.equalTo', 1, 2, arguments.length);\r\n        return new Query(this.database, query(this._delegate, equalTo(value, name)));\r\n    }\r\n    /**\r\n     * @returns URL for this location.\r\n     */\r\n    toString() {\r\n        validateArgCount('Query.toString', 0, 0, arguments.length);\r\n        return this._delegate.toString();\r\n    }\r\n    // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n    // for end-users.\r\n    toJSON() {\r\n        // An optional spacer argument is unnecessary for a string.\r\n        validateArgCount('Query.toJSON', 0, 1, arguments.length);\r\n        return this._delegate.toJSON();\r\n    }\r\n    /**\r\n     * Return true if this query and the provided query are equivalent; otherwise, return false.\r\n     */\r\n    isEqual(other) {\r\n        validateArgCount('Query.isEqual', 1, 1, arguments.length);\r\n        if (!(other instanceof Query)) {\r\n            const error = 'Query.isEqual failed: First argument must be an instance of firebase.database.Query.';\r\n            throw new Error(error);\r\n        }\r\n        return this._delegate.isEqual(other._delegate);\r\n    }\r\n    /**\r\n     * Helper used by .on and .once to extract the context and or cancel arguments.\r\n     * @param fnName - The function name (on or once)\r\n     *\r\n     */\r\n    static getCancelAndContextArgs_(fnName, cancelOrContext, context) {\r\n        const ret = { cancel: undefined, context: undefined };\r\n        if (cancelOrContext && context) {\r\n            ret.cancel = cancelOrContext;\r\n            validateCallback(fnName, 'cancel', ret.cancel, true);\r\n            ret.context = context;\r\n            validateContextObject(fnName, 'context', ret.context, true);\r\n        }\r\n        else if (cancelOrContext) {\r\n            // we have either a cancel callback or a context.\r\n            if (typeof cancelOrContext === 'object' && cancelOrContext !== null) {\r\n                // it's a context!\r\n                ret.context = cancelOrContext;\r\n            }\r\n            else if (typeof cancelOrContext === 'function') {\r\n                ret.cancel = cancelOrContext;\r\n            }\r\n            else {\r\n                throw new Error(errorPrefix(fnName, 'cancelOrContext') +\r\n                    ' must either be a cancel callback or a context object.');\r\n            }\r\n        }\r\n        return ret;\r\n    }\r\n    get ref() {\r\n        return new Reference(this.database, new _ReferenceImpl(this._delegate._repo, this._delegate._path));\r\n    }\r\n}\r\nclass Reference extends Query {\r\n    /**\r\n     * Call options:\r\n     *   new Reference(Repo, Path) or\r\n     *   new Reference(url: string, string|RepoManager)\r\n     *\r\n     * Externally - this is the firebase.database.Reference type.\r\n     */\r\n    constructor(database, _delegate) {\r\n        super(database, new _QueryImpl(_delegate._repo, _delegate._path, new _QueryParams(), false));\r\n        this.database = database;\r\n        this._delegate = _delegate;\r\n    }\r\n    /** @returns {?string} */\r\n    getKey() {\r\n        validateArgCount('Reference.key', 0, 0, arguments.length);\r\n        return this._delegate.key;\r\n    }\r\n    child(pathString) {\r\n        validateArgCount('Reference.child', 1, 1, arguments.length);\r\n        if (typeof pathString === 'number') {\r\n            pathString = String(pathString);\r\n        }\r\n        return new Reference(this.database, child(this._delegate, pathString));\r\n    }\r\n    /** @returns {?Reference} */\r\n    getParent() {\r\n        validateArgCount('Reference.parent', 0, 0, arguments.length);\r\n        const parent = this._delegate.parent;\r\n        return parent ? new Reference(this.database, parent) : null;\r\n    }\r\n    /** @returns {!Reference} */\r\n    getRoot() {\r\n        validateArgCount('Reference.root', 0, 0, arguments.length);\r\n        return new Reference(this.database, this._delegate.root);\r\n    }\r\n    set(newVal, onComplete) {\r\n        validateArgCount('Reference.set', 1, 2, arguments.length);\r\n        validateCallback('Reference.set', 'onComplete', onComplete, true);\r\n        const result = set(this._delegate, newVal);\r\n        if (onComplete) {\r\n            result.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        return result;\r\n    }\r\n    update(values, onComplete) {\r\n        validateArgCount('Reference.update', 1, 2, arguments.length);\r\n        if (Array.isArray(values)) {\r\n            const newObjectToMerge = {};\r\n            for (let i = 0; i < values.length; ++i) {\r\n                newObjectToMerge['' + i] = values[i];\r\n            }\r\n            values = newObjectToMerge;\r\n            warn('Passing an Array to Firebase.update() is deprecated. ' +\r\n                'Use set() if you want to overwrite the existing data, or ' +\r\n                'an Object with integer keys if you really do want to ' +\r\n                'only update some of the children.');\r\n        }\r\n        _validateWritablePath('Reference.update', this._delegate._path);\r\n        validateCallback('Reference.update', 'onComplete', onComplete, true);\r\n        const result = update(this._delegate, values);\r\n        if (onComplete) {\r\n            result.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        return result;\r\n    }\r\n    setWithPriority(newVal, newPriority, onComplete) {\r\n        validateArgCount('Reference.setWithPriority', 2, 3, arguments.length);\r\n        validateCallback('Reference.setWithPriority', 'onComplete', onComplete, true);\r\n        const result = setWithPriority(this._delegate, newVal, newPriority);\r\n        if (onComplete) {\r\n            result.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        return result;\r\n    }\r\n    remove(onComplete) {\r\n        validateArgCount('Reference.remove', 0, 1, arguments.length);\r\n        validateCallback('Reference.remove', 'onComplete', onComplete, true);\r\n        const result = remove(this._delegate);\r\n        if (onComplete) {\r\n            result.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        return result;\r\n    }\r\n    transaction(transactionUpdate, onComplete, applyLocally) {\r\n        validateArgCount('Reference.transaction', 1, 3, arguments.length);\r\n        validateCallback('Reference.transaction', 'transactionUpdate', transactionUpdate, false);\r\n        validateCallback('Reference.transaction', 'onComplete', onComplete, true);\r\n        validateBoolean('Reference.transaction', 'applyLocally', applyLocally, true);\r\n        const result = runTransaction(this._delegate, transactionUpdate, {\r\n            applyLocally\r\n        }).then(transactionResult => new TransactionResult(transactionResult.committed, new DataSnapshot(this.database, transactionResult.snapshot)));\r\n        if (onComplete) {\r\n            result.then(transactionResult => onComplete(null, transactionResult.committed, transactionResult.snapshot), error => onComplete(error, false, null));\r\n        }\r\n        return result;\r\n    }\r\n    setPriority(priority, onComplete) {\r\n        validateArgCount('Reference.setPriority', 1, 2, arguments.length);\r\n        validateCallback('Reference.setPriority', 'onComplete', onComplete, true);\r\n        const result = setPriority(this._delegate, priority);\r\n        if (onComplete) {\r\n            result.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        return result;\r\n    }\r\n    push(value, onComplete) {\r\n        validateArgCount('Reference.push', 0, 2, arguments.length);\r\n        validateCallback('Reference.push', 'onComplete', onComplete, true);\r\n        const expPromise = push(this._delegate, value);\r\n        const promise = expPromise.then(expRef => new Reference(this.database, expRef));\r\n        if (onComplete) {\r\n            promise.then(() => onComplete(null), error => onComplete(error));\r\n        }\r\n        const result = new Reference(this.database, expPromise);\r\n        result.then = promise.then.bind(promise);\r\n        result.catch = promise.catch.bind(promise, undefined);\r\n        return result;\r\n    }\r\n    onDisconnect() {\r\n        _validateWritablePath('Reference.onDisconnect', this._delegate._path);\r\n        return new OnDisconnect(new OnDisconnect$1(this._delegate._repo, this._delegate._path));\r\n    }\r\n    get key() {\r\n        return this.getKey();\r\n    }\r\n    get parent() {\r\n        return this.getParent();\r\n    }\r\n    get root() {\r\n        return this.getRoot();\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Class representing a firebase database.\r\n */\r\nclass Database {\r\n    /**\r\n     * The constructor should not be called by users of our public API.\r\n     */\r\n    constructor(_delegate, app) {\r\n        this._delegate = _delegate;\r\n        this.app = app;\r\n        this.INTERNAL = {\r\n            delete: () => this._delegate._delete(),\r\n            forceWebSockets,\r\n            forceLongPolling\r\n        };\r\n    }\r\n    /**\r\n     * Modify this instance to communicate with the Realtime Database emulator.\r\n     *\r\n     * <p>Note: This method must be called before performing any other operation.\r\n     *\r\n     * @param host - the emulator host (ex: localhost)\r\n     * @param port - the emulator port (ex: 8080)\r\n     * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules\r\n     */\r\n    useEmulator(host, port, options = {}) {\r\n        connectDatabaseEmulator(this._delegate, host, port, options);\r\n    }\r\n    ref(path) {\r\n        validateArgCount('database.ref', 0, 1, arguments.length);\r\n        if (path instanceof Reference) {\r\n            const childRef = refFromURL(this._delegate, path.toString());\r\n            return new Reference(this, childRef);\r\n        }\r\n        else {\r\n            const childRef = ref(this._delegate, path);\r\n            return new Reference(this, childRef);\r\n        }\r\n    }\r\n    /**\r\n     * Returns a reference to the root or the path specified in url.\r\n     * We throw a exception if the url is not in the same domain as the\r\n     * current repo.\r\n     * @returns Firebase reference.\r\n     */\r\n    refFromURL(url) {\r\n        const apiName = 'database.refFromURL';\r\n        validateArgCount(apiName, 1, 1, arguments.length);\r\n        const childRef = refFromURL(this._delegate, url);\r\n        return new Reference(this, childRef);\r\n    }\r\n    // Make individual repo go offline.\r\n    goOffline() {\r\n        validateArgCount('database.goOffline', 0, 0, arguments.length);\r\n        return goOffline(this._delegate);\r\n    }\r\n    goOnline() {\r\n        validateArgCount('database.goOnline', 0, 0, arguments.length);\r\n        return goOnline(this._delegate);\r\n    }\r\n}\r\nDatabase.ServerValue = {\r\n    TIMESTAMP: serverTimestamp(),\r\n    increment: (delta) => increment(delta)\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Used by console to create a database based on the app,\r\n * passed database URL and a custom auth implementation.\r\n *\r\n * @param app - A valid FirebaseApp-like object\r\n * @param url - A valid Firebase databaseURL\r\n * @param version - custom version e.g. firebase-admin version\r\n * @param customAuthImpl - custom auth implementation\r\n */\r\nfunction initStandalone({ app, url, version, customAuthImpl, namespace, nodeAdmin = false }) {\r\n    _setSDKVersion(version);\r\n    /**\r\n     * ComponentContainer('database-standalone') is just a placeholder that doesn't perform\r\n     * any actual function.\r\n     */\r\n    const authProvider = new Provider('auth-internal', new ComponentContainer('database-standalone'));\r\n    authProvider.setComponent(new Component('auth-internal', () => customAuthImpl, \"PRIVATE\" /* PRIVATE */));\r\n    return {\r\n        instance: new Database(_repoManagerDatabaseFromApp(app, authProvider, \r\n        /* appCheckProvider= */ undefined, url, nodeAdmin), app),\r\n        namespace\r\n    };\r\n}\n\nvar INTERNAL = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  initStandalone: initStandalone\n});\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ServerValue = Database.ServerValue;\r\nfunction registerDatabase(instance) {\r\n    // Register the Database Service with the 'firebase' namespace.\r\n    instance.INTERNAL.registerComponent(new Component('database-compat', (container, { instanceIdentifier: url }) => {\r\n        /* Dependencies */\r\n        // getImmediate for FirebaseApp will always succeed\r\n        const app = container.getProvider('app-compat').getImmediate();\r\n        const databaseExp = container\r\n            .getProvider('database')\r\n            .getImmediate({ identifier: url });\r\n        return new Database(databaseExp, app);\r\n    }, \"PUBLIC\" /* PUBLIC */)\r\n        .setServiceProps(\r\n    // firebase.database namespace properties\r\n    {\r\n        Reference,\r\n        Query,\r\n        Database,\r\n        DataSnapshot,\r\n        enableLogging,\r\n        INTERNAL,\r\n        ServerValue\r\n    })\r\n        .setMultipleInstances(true));\r\n    instance.registerVersion(name, version);\r\n}\r\nregisterDatabase(firebase);\n\nexport { registerDatabase };\n//# sourceMappingURL=index.esm2017.js.map\n","import t from\"firebase/compat/app\";import\"firebase/compat/auth\";import\"firebase/compat/database\";import e,{Component as i,PureComponent as s}from\"react\";function o(t,e,i,s){return new(i||(i=Promise))((function(o,r){function n(t){try{h(s.next(t))}catch(t){r(t)}}function l(t){try{h(s.throw(t))}catch(t){r(t)}}function h(t){var e;t.done?o(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(n,l)}h((s=s.apply(t,e||[])).next())}))}const r={__error:\"NOT_SET\"};const n=new class{constructor(){this.pendingViews=new Set,this.addPendingView=t=>{this.pendingViews.add(t)},this.removePendingView=t=>{this.pendingViews.delete(t)}}};class l{constructor(t,e){this._onValueHandler=t=>{this._value=t.val(),this._resolveValues();for(let t of this._listeners)try{t()}catch(t){console.error(t)}},this._onErrorHandler=t=>{this._rejectValues(t)},this.onValues=()=>o(this,void 0,void 0,(function*(){return yield this._valuePromise,Object.assign({},this._value)})),this.set=t=>this._ref.set(t),this.push=t=>o(this,void 0,void 0,(function*(){const e=yield this._ref.push(t);return new l(e)})),this.update=t=>this._ref.update(t),this.remove=()=>this._ref.remove(),this.onDisconnect=()=>this._ref.onDisconnect(),this.close=()=>{this._ref&&this._ref.off(\"value\")},this._ref=e?t.fdb.ref(e):t,this._value=r,this._listeners=new Set,this._valuePromise=new Promise(((t,e)=>{this._resolveValues=t,this._rejectValues=e})),this._ref.on(\"value\",this._onValueHandler,this._onErrorHandler)}get key(){return this._ref.key}get value(){if(n.pendingViews.forEach((t=>{this._listeners.add(t);let e=t._documents;void 0===e&&(e=t._documents=new Set),e.add(this)})),this._value===r)throw r;return this._value}get path(){return this._ref.toString().substring(this._ref.root.toString().length-1)}}class h{constructor(e){var{persistence:i}=e,s=function(t,e){var i={};for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&e.indexOf(s)<0&&(i[s]=t[s]);if(null!=t&&\"function\"==typeof Object.getOwnPropertySymbols){var o=0;for(s=Object.getOwnPropertySymbols(t);o<s.length;o++)e.indexOf(s[o])<0&&Object.prototype.propertyIsEnumerable.call(t,s[o])&&(i[s[o]]=t[s[o]])}return i}(e,[\"persistence\"]);this.TIMESTAMP=t.database.ServerValue.TIMESTAMP,this.get=t=>new l(this,t),this.signInWithCustomToken=e=>o(this,void 0,void 0,(function*(){return yield t.auth().setPersistence(this.authPersistence),t.auth().signInWithCustomToken(e)})),this.goOffline=()=>this.fdb.goOffline(),this.goOnline=()=>this.fdb.goOnline(),this.authPersistence=i||t.auth.Auth.Persistence.NONE,t.initializeApp(s),this.fdb=t.database()}static signOut(){return t.auth().signOut()}}function c(t){const e=t._documents;if(e)for(let i of e)i._listeners.delete(t),0===i._listeners.size&&i.close()}function a(t){n.addPendingView(t);try{t()}catch(t){if(t!==r)throw t}finally{n.removePendingView(t)}return function(t){return()=>{c(t)}}(t)}function u(){n.addPendingView(this._fireRender);try{return this._originalRender()}catch(t){if(t!==r)return null;throw t}finally{n.removePendingView(this._fireRender)}}function d(t){var e;if(!(\"function\"!=typeof t||t.prototype&&t.prototype.render||t.isReactClass||i.isPrototypeOf(t))){return d(((e=class extends s{render(){return t.call(this,this.props,this.context)}}).displayName=t.displayName||t.name,e.contextTypes=t.contextTypes,e.propTypes=t.propTypes,e.defaultProps=t.defaultProps,e))}const o=t.prototype.render;return Object.defineProperty(t,\"componentWillUnmount\",{value:function(){c(this._fireRender)},enumerable:!1}),t.prototype.render=function(){return this._fireRender=()=>{this.forceUpdate()},this._originalRender=o,this.render=u.bind(this),this.render()},t}const f=(t={})=>i=>{class o extends s{constructor(e){super(e),this.collection=[],this.runQuery=()=>{this.query&&this.query.off(),this.collection=[];const e=Object.assign(Object.assign({},this.props),t),i=e.database,r=e.path;if(!r)throw new Error(\"Collection requires a 'path' option.\");if(!i)throw new Error(\"Collection requires a 'database' option.\");let n=i.get(r)._ref;o.displayName=`collection-observer-${n.toString()}`,e.orderByKey&&(n=n.orderByKey()),e.orderByValue&&(n=n.orderByValue()),e.orderByChild&&(n=n.orderByChild(e.orderByChild)),e.limitToLast&&(n=n.limitToLast(e.limitToLast)),e.limitToFirst&&(n=n.limitToFirst(s)),this.query=n,this.mounted&&this.listenToQuery()},this.listenToQuery=()=>{this.query.on(\"child_added\",this.onChildAdded,this.onQueryError),this.query.on(\"child_changed\",this.onChildChanged,this.onQueryError),this.query.on(\"child_removed\",this.onChildRemoved,this.onQueryError),this.query.on(\"child_moved\",this.onChildMoved,this.onQueryError)},this.onQueryError=t=>{this.setState({error:t})},this.onChildAdded=(t,e)=>{const i={key:t.key,value:t.val()};let s=!1;if(e)for(let t=0;t<this.collection.length-1;t++){this.collection[t].key===e&&(s=!0,this.collection.splice(t+1,0,i))}s||this.collection.push(i),this.mounted&&this.forceUpdate()},this.onChildChanged=t=>{for(let e=0;e<this.collection.length;e++){const i=this.collection[e];if(i&&t.key===i.key)return i.value=t.val(),void(this.mounted&&this.forceUpdate())}},this.onChildRemoved=t=>{for(let e=0;e<this.collection.length;e++){const i=this.collection[e];if(i&&t.key===i.key)return this.collection.splice(e,1),void(this.mounted&&this.forceUpdate())}},this.onChildMoved=(t,e)=>{const i=[];let s={key:t.key,value:t.val()};for(let o of this.collection)o.key!==t.key&&(i.push(o),o.key===e&&(i.push(s),s=null));s&&i.push(s),this.collection=i},this.onScroll=()=>{const e=t.limitToLast||this.props.limitToLast,i=t.limitToFirst||this.props.limitToFirst;e?t.limitToLast=e+this.limit:i&&(t.limitToFirst=i+this.limit),this.runQuery()},this.setLimitToLast=e=>{t.limitToLast=e,this.runQuery()},this.setLimitToFirst=e=>{t.limitToFirst=e,this.runQuery()},this.state={error:null},this.runQuery();const i=t.limitToLast||this.props.limitToLast,s=t.limitToFirst||this.props.limitToFirst;this.limit=i||s||50}componentDidMount(){this.mounted=!0,this.listenToQuery()}componentWillUnmount(){this.mounted=!1,this.query.off()}render(){const t=Object.assign({},this.props,{collection:this.collection.slice(),scrollCollection:this.onScroll,setLimitToLast:this.setLimitToLast,setLimitToFirst:this.setLimitToFirst,collectionError:this.state.error});return e.createElement(i,t)}}return o.displayName=\"collection-observer-\",o};export{h as RTDatabase,f as collectionObserver,d as observer,a as view};\n//# sourceMappingURL=firebase-react-store.js.map\n","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar React = require('react');\nvar ReactDOM = require('react-dom');\nvar createFocusTrap = require('focus-trap');\n\nvar FocusTrap = function (_React$Component) {\n  _inherits(FocusTrap, _React$Component);\n\n  function FocusTrap(props) {\n    _classCallCheck(this, FocusTrap);\n\n    var _this = _possibleConstructorReturn(this, (FocusTrap.__proto__ || Object.getPrototypeOf(FocusTrap)).call(this, props));\n\n    _this.setFocusTrapElement = function (element) {\n      _this.focusTrapElement = element;\n    };\n\n    if (typeof document !== 'undefined') {\n      _this.previouslyFocusedElement = document.activeElement;\n    }\n    return _this;\n  }\n\n  _createClass(FocusTrap, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      // We need to hijack the returnFocusOnDeactivate option,\n      // because React can move focus into the element before we arrived at\n      // this lifecycle hook (e.g. with autoFocus inputs). So the component\n      // captures the previouslyFocusedElement in componentWillMount,\n      // then (optionally) returns focus to it in componentWillUnmount.\n      var specifiedFocusTrapOptions = this.props.focusTrapOptions;\n      var tailoredFocusTrapOptions = {\n        returnFocusOnDeactivate: false\n      };\n      for (var optionName in specifiedFocusTrapOptions) {\n        if (!specifiedFocusTrapOptions.hasOwnProperty(optionName)) continue;\n        if (optionName === 'returnFocusOnDeactivate') continue;\n        tailoredFocusTrapOptions[optionName] = specifiedFocusTrapOptions[optionName];\n      }\n\n      var focusTrapElementDOMNode = ReactDOM.findDOMNode(this.focusTrapElement);\n\n      this.focusTrap = this.props._createFocusTrap(focusTrapElementDOMNode, tailoredFocusTrapOptions);\n      if (this.props.active) {\n        this.focusTrap.activate();\n      }\n      if (this.props.paused) {\n        this.focusTrap.pause();\n      }\n    }\n  }, {\n    key: 'componentDidUpdate',\n    value: function componentDidUpdate(prevProps) {\n      if (prevProps.active && !this.props.active) {\n        var returnFocusOnDeactivate = this.props.focusTrapOptions.returnFocusOnDeactivate;\n\n        var returnFocus = returnFocusOnDeactivate || false;\n        var config = { returnFocus: returnFocus };\n        this.focusTrap.deactivate(config);\n      } else if (!prevProps.active && this.props.active) {\n        this.focusTrap.activate();\n      }\n\n      if (prevProps.paused && !this.props.paused) {\n        this.focusTrap.unpause();\n      } else if (!prevProps.paused && this.props.paused) {\n        this.focusTrap.pause();\n      }\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      this.focusTrap.deactivate();\n      if (this.props.focusTrapOptions.returnFocusOnDeactivate !== false && this.previouslyFocusedElement && this.previouslyFocusedElement.focus) {\n        this.previouslyFocusedElement.focus();\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      var child = React.Children.only(this.props.children);\n\n      var composedRefCallback = function composedRefCallback(element) {\n        _this2.setFocusTrapElement(element);\n        if (typeof child.ref === 'function') {\n          child.ref(element);\n        }\n      };\n\n      var childWithRef = React.cloneElement(child, { ref: composedRefCallback });\n\n      return childWithRef;\n    }\n  }]);\n\n  return FocusTrap;\n}(React.Component);\n\nFocusTrap.defaultProps = {\n  active: true,\n  paused: false,\n  focusTrapOptions: {},\n  _createFocusTrap: createFocusTrap\n};\n\nmodule.exports = FocusTrap;","var tabbable = require('tabbable');\nvar xtend = require('xtend');\n\nvar activeFocusTraps = (function() {\n  var trapQueue = [];\n  return {\n    activateTrap: function(trap) {\n      if (trapQueue.length > 0) {\n        var activeTrap = trapQueue[trapQueue.length - 1];\n        if (activeTrap !== trap) {\n          activeTrap.pause();\n        }\n      }\n\n      var trapIndex = trapQueue.indexOf(trap);\n      if (trapIndex === -1) {\n        trapQueue.push(trap);\n      } else {\n        // move this existing trap to the front of the queue\n        trapQueue.splice(trapIndex, 1);\n        trapQueue.push(trap);\n      }\n    },\n\n    deactivateTrap: function(trap) {\n      var trapIndex = trapQueue.indexOf(trap);\n      if (trapIndex !== -1) {\n        trapQueue.splice(trapIndex, 1);\n      }\n\n      if (trapQueue.length > 0) {\n        trapQueue[trapQueue.length - 1].unpause();\n      }\n    }\n  };\n})();\n\nfunction focusTrap(element, userOptions) {\n  var doc = document;\n  var container =\n    typeof element === 'string' ? doc.querySelector(element) : element;\n\n  var config = xtend(\n    {\n      returnFocusOnDeactivate: true,\n      escapeDeactivates: true\n    },\n    userOptions\n  );\n\n  var state = {\n    firstTabbableNode: null,\n    lastTabbableNode: null,\n    nodeFocusedBeforeActivation: null,\n    mostRecentlyFocusedNode: null,\n    active: false,\n    paused: false\n  };\n\n  var trap = {\n    activate: activate,\n    deactivate: deactivate,\n    pause: pause,\n    unpause: unpause\n  };\n\n  return trap;\n\n  function activate(activateOptions) {\n    if (state.active) return;\n\n    updateTabbableNodes();\n\n    state.active = true;\n    state.paused = false;\n    state.nodeFocusedBeforeActivation = doc.activeElement;\n\n    var onActivate =\n      activateOptions && activateOptions.onActivate\n        ? activateOptions.onActivate\n        : config.onActivate;\n    if (onActivate) {\n      onActivate();\n    }\n\n    addListeners();\n    return trap;\n  }\n\n  function deactivate(deactivateOptions) {\n    if (!state.active) return;\n\n    removeListeners();\n    state.active = false;\n    state.paused = false;\n\n    activeFocusTraps.deactivateTrap(trap);\n\n    var onDeactivate =\n      deactivateOptions && deactivateOptions.onDeactivate !== undefined\n        ? deactivateOptions.onDeactivate\n        : config.onDeactivate;\n    if (onDeactivate) {\n      onDeactivate();\n    }\n\n    var returnFocus =\n      deactivateOptions && deactivateOptions.returnFocus !== undefined\n        ? deactivateOptions.returnFocus\n        : config.returnFocusOnDeactivate;\n    if (returnFocus) {\n      delay(function() {\n        tryFocus(state.nodeFocusedBeforeActivation);\n      });\n    }\n\n    return trap;\n  }\n\n  function pause() {\n    if (state.paused || !state.active) return;\n    state.paused = true;\n    removeListeners();\n  }\n\n  function unpause() {\n    if (!state.paused || !state.active) return;\n    state.paused = false;\n    addListeners();\n  }\n\n  function addListeners() {\n    if (!state.active) return;\n\n    // There can be only one listening focus trap at a time\n    activeFocusTraps.activateTrap(trap);\n\n    updateTabbableNodes();\n\n    // Delay ensures that the focused element doesn't capture the event\n    // that caused the focus trap activation.\n    delay(function() {\n      tryFocus(getInitialFocusNode());\n    });\n    doc.addEventListener('focusin', checkFocusIn, true);\n    doc.addEventListener('mousedown', checkPointerDown, true);\n    doc.addEventListener('touchstart', checkPointerDown, true);\n    doc.addEventListener('click', checkClick, true);\n    doc.addEventListener('keydown', checkKey, true);\n\n    return trap;\n  }\n\n  function removeListeners() {\n    if (!state.active) return;\n\n    doc.removeEventListener('focusin', checkFocusIn, true);\n    doc.removeEventListener('mousedown', checkPointerDown, true);\n    doc.removeEventListener('touchstart', checkPointerDown, true);\n    doc.removeEventListener('click', checkClick, true);\n    doc.removeEventListener('keydown', checkKey, true);\n\n    return trap;\n  }\n\n  function getNodeForOption(optionName) {\n    var optionValue = config[optionName];\n    var node = optionValue;\n    if (!optionValue) {\n      return null;\n    }\n    if (typeof optionValue === 'string') {\n      node = doc.querySelector(optionValue);\n      if (!node) {\n        throw new Error('`' + optionName + '` refers to no known node');\n      }\n    }\n    if (typeof optionValue === 'function') {\n      node = optionValue();\n      if (!node) {\n        throw new Error('`' + optionName + '` did not return a node');\n      }\n    }\n    return node;\n  }\n\n  function getInitialFocusNode() {\n    var node;\n    if (getNodeForOption('initialFocus') !== null) {\n      node = getNodeForOption('initialFocus');\n    } else if (container.contains(doc.activeElement)) {\n      node = doc.activeElement;\n    } else {\n      node = state.firstTabbableNode || getNodeForOption('fallbackFocus');\n    }\n\n    if (!node) {\n      throw new Error(\n        \"You can't have a focus-trap without at least one focusable element\"\n      );\n    }\n\n    return node;\n  }\n\n  // This needs to be done on mousedown and touchstart instead of click\n  // so that it precedes the focus event.\n  function checkPointerDown(e) {\n    if (container.contains(e.target)) return;\n    if (config.clickOutsideDeactivates) {\n      deactivate({\n        returnFocus: !tabbable.isFocusable(e.target)\n      });\n    } else {\n      e.preventDefault();\n    }\n  }\n\n  // In case focus escapes the trap for some strange reason, pull it back in.\n  function checkFocusIn(e) {\n    // In Firefox when you Tab out of an iframe the Document is briefly focused.\n    if (container.contains(e.target) || e.target instanceof Document) {\n      return;\n    }\n    e.stopImmediatePropagation();\n    tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n  }\n\n  function checkKey(e) {\n    if (config.escapeDeactivates !== false && isEscapeEvent(e)) {\n      e.preventDefault();\n      deactivate();\n      return;\n    }\n    if (isTabEvent(e)) {\n      checkTab(e);\n      return;\n    }\n  }\n\n  // Hijack Tab events on the first and last focusable nodes of the trap,\n  // in order to prevent focus from escaping. If it escapes for even a\n  // moment it can end up scrolling the page and causing confusion so we\n  // kind of need to capture the action at the keydown phase.\n  function checkTab(e) {\n    updateTabbableNodes();\n    if (e.shiftKey && e.target === state.firstTabbableNode) {\n      e.preventDefault();\n      tryFocus(state.lastTabbableNode);\n      return;\n    }\n    if (!e.shiftKey && e.target === state.lastTabbableNode) {\n      e.preventDefault();\n      tryFocus(state.firstTabbableNode);\n      return;\n    }\n  }\n\n  function checkClick(e) {\n    if (config.clickOutsideDeactivates) return;\n    if (container.contains(e.target)) return;\n    e.preventDefault();\n    e.stopImmediatePropagation();\n  }\n\n  function updateTabbableNodes() {\n    var tabbableNodes = tabbable(container);\n    state.firstTabbableNode = tabbableNodes[0] || getInitialFocusNode();\n    state.lastTabbableNode =\n      tabbableNodes[tabbableNodes.length - 1] || getInitialFocusNode();\n  }\n\n  function tryFocus(node) {\n    if (node === doc.activeElement) return;\n    if (!node || !node.focus) {\n      tryFocus(getInitialFocusNode());\n      return;\n    }\n\n    node.focus();\n    state.mostRecentlyFocusedNode = node;\n    if (isSelectableInput(node)) {\n      node.select();\n    }\n  }\n}\n\nfunction isSelectableInput(node) {\n  return (\n    node.tagName &&\n    node.tagName.toLowerCase() === 'input' &&\n    typeof node.select === 'function'\n  );\n}\n\nfunction isEscapeEvent(e) {\n  return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n}\n\nfunction isTabEvent(e) {\n  return e.key === 'Tab' || e.keyCode === 9;\n}\n\nfunction delay(fn) {\n  return setTimeout(fn, 0);\n}\n\nmodule.exports = focusTrap;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.deinterlace = void 0;\n\n/**\r\n * Deinterlace function from https://github.com/shachaf/jsgif\r\n */\nvar deinterlace = function deinterlace(pixels, width) {\n  var newPixels = new Array(pixels.length);\n  var rows = pixels.length / width;\n\n  var cpRow = function cpRow(toRow, fromRow) {\n    var fromPixels = pixels.slice(fromRow * width, (fromRow + 1) * width);\n    newPixels.splice.apply(newPixels, [toRow * width, width].concat(fromPixels));\n  }; // See appendix E.\n\n\n  var offsets = [0, 4, 2, 1];\n  var steps = [8, 8, 4, 2];\n  var fromRow = 0;\n\n  for (var pass = 0; pass < 4; pass++) {\n    for (var toRow = offsets[pass]; toRow < rows; toRow += steps[pass]) {\n      cpRow(toRow, fromRow);\n      fromRow++;\n    }\n  }\n\n  return newPixels;\n};\n\nexports.deinterlace = deinterlace;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.decompressFrames = exports.decompressFrame = exports.parseGIF = void 0;\n\nvar _gif = _interopRequireDefault(require(\"js-binary-schema-parser/lib/schemas/gif\"));\n\nvar _jsBinarySchemaParser = require(\"js-binary-schema-parser\");\n\nvar _uint = require(\"js-binary-schema-parser/lib/parsers/uint8\");\n\nvar _deinterlace = require(\"./deinterlace\");\n\nvar _lzw = require(\"./lzw\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar parseGIF = function parseGIF(arrayBuffer) {\n  var byteData = new Uint8Array(arrayBuffer);\n  return (0, _jsBinarySchemaParser.parse)((0, _uint.buildStream)(byteData), _gif[\"default\"]);\n};\n\nexports.parseGIF = parseGIF;\n\nvar generatePatch = function generatePatch(image) {\n  var totalPixels = image.pixels.length;\n  var patchData = new Uint8ClampedArray(totalPixels * 4);\n\n  for (var i = 0; i < totalPixels; i++) {\n    var pos = i * 4;\n    var colorIndex = image.pixels[i];\n    var color = image.colorTable[colorIndex] || [0, 0, 0];\n    patchData[pos] = color[0];\n    patchData[pos + 1] = color[1];\n    patchData[pos + 2] = color[2];\n    patchData[pos + 3] = colorIndex !== image.transparentIndex ? 255 : 0;\n  }\n\n  return patchData;\n};\n\nvar decompressFrame = function decompressFrame(frame, gct, buildImagePatch) {\n  if (!frame.image) {\n    console.warn('gif frame does not have associated image.');\n    return;\n  }\n\n  var image = frame.image; // get the number of pixels\n\n  var totalPixels = image.descriptor.width * image.descriptor.height; // do lzw decompression\n\n  var pixels = (0, _lzw.lzw)(image.data.minCodeSize, image.data.blocks, totalPixels); // deal with interlacing if necessary\n\n  if (image.descriptor.lct.interlaced) {\n    pixels = (0, _deinterlace.deinterlace)(pixels, image.descriptor.width);\n  }\n\n  var resultImage = {\n    pixels: pixels,\n    dims: {\n      top: frame.image.descriptor.top,\n      left: frame.image.descriptor.left,\n      width: frame.image.descriptor.width,\n      height: frame.image.descriptor.height\n    }\n  }; // color table\n\n  if (image.descriptor.lct && image.descriptor.lct.exists) {\n    resultImage.colorTable = image.lct;\n  } else {\n    resultImage.colorTable = gct;\n  } // add per frame relevant gce information\n\n\n  if (frame.gce) {\n    resultImage.delay = (frame.gce.delay || 10) * 10; // convert to ms\n\n    resultImage.disposalType = frame.gce.extras.disposal; // transparency\n\n    if (frame.gce.extras.transparentColorGiven) {\n      resultImage.transparentIndex = frame.gce.transparentColorIndex;\n    }\n  } // create canvas usable imagedata if desired\n\n\n  if (buildImagePatch) {\n    resultImage.patch = generatePatch(resultImage);\n  }\n\n  return resultImage;\n};\n\nexports.decompressFrame = decompressFrame;\n\nvar decompressFrames = function decompressFrames(parsedGif, buildImagePatches) {\n  return parsedGif.frames.filter(function (f) {\n    return f.image;\n  }).map(function (f) {\n    return decompressFrame(f, parsedGif.gct, buildImagePatches);\n  });\n};\n\nexports.decompressFrames = decompressFrames;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.lzw = void 0;\n\n/**\r\n * javascript port of java LZW decompression\r\n * Original java author url: https://gist.github.com/devunwired/4479231\r\n */\nvar lzw = function lzw(minCodeSize, data, pixelCount) {\n  var MAX_STACK_SIZE = 4096;\n  var nullCode = -1;\n  var npix = pixelCount;\n  var available, clear, code_mask, code_size, end_of_information, in_code, old_code, bits, code, i, datum, data_size, first, top, bi, pi;\n  var dstPixels = new Array(pixelCount);\n  var prefix = new Array(MAX_STACK_SIZE);\n  var suffix = new Array(MAX_STACK_SIZE);\n  var pixelStack = new Array(MAX_STACK_SIZE + 1); // Initialize GIF data stream decoder.\n\n  data_size = minCodeSize;\n  clear = 1 << data_size;\n  end_of_information = clear + 1;\n  available = clear + 2;\n  old_code = nullCode;\n  code_size = data_size + 1;\n  code_mask = (1 << code_size) - 1;\n\n  for (code = 0; code < clear; code++) {\n    prefix[code] = 0;\n    suffix[code] = code;\n  } // Decode GIF pixel stream.\n\n\n  var datum, bits, count, first, top, pi, bi;\n  datum = bits = count = first = top = pi = bi = 0;\n\n  for (i = 0; i < npix;) {\n    if (top === 0) {\n      if (bits < code_size) {\n        // get the next byte\n        datum += data[bi] << bits;\n        bits += 8;\n        bi++;\n        continue;\n      } // Get the next code.\n\n\n      code = datum & code_mask;\n      datum >>= code_size;\n      bits -= code_size; // Interpret the code\n\n      if (code > available || code == end_of_information) {\n        break;\n      }\n\n      if (code == clear) {\n        // Reset decoder.\n        code_size = data_size + 1;\n        code_mask = (1 << code_size) - 1;\n        available = clear + 2;\n        old_code = nullCode;\n        continue;\n      }\n\n      if (old_code == nullCode) {\n        pixelStack[top++] = suffix[code];\n        old_code = code;\n        first = code;\n        continue;\n      }\n\n      in_code = code;\n\n      if (code == available) {\n        pixelStack[top++] = first;\n        code = old_code;\n      }\n\n      while (code > clear) {\n        pixelStack[top++] = suffix[code];\n        code = prefix[code];\n      }\n\n      first = suffix[code] & 0xff;\n      pixelStack[top++] = first; // add a new string to the table, but only if space is available\n      // if not, just continue with current table until a clear code is found\n      // (deferred clear code implementation as per GIF spec)\n\n      if (available < MAX_STACK_SIZE) {\n        prefix[available] = old_code;\n        suffix[available] = first;\n        available++;\n\n        if ((available & code_mask) === 0 && available < MAX_STACK_SIZE) {\n          code_size++;\n          code_mask += available;\n        }\n      }\n\n      old_code = in_code;\n    } // Pop a pixel off the pixel stack.\n\n\n    top--;\n    dstPixels[pi++] = pixelStack[top];\n    i++;\n  }\n\n  for (i = pi; i < npix; i++) {\n    dstPixels[i] = 0; // clear missing pixels\n  }\n\n  return dstPixels;\n};\n\nexports.lzw = lzw;","import _extends from '@babel/runtime/helpers/esm/extends';\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport warning from 'tiny-warning';\nimport invariant from 'tiny-invariant';\n\nfunction addLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path : '/' + path;\n}\nfunction stripLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path.substr(1) : path;\n}\nfunction hasBasename(path, prefix) {\n  return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;\n}\nfunction stripBasename(path, prefix) {\n  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n}\nfunction stripTrailingSlash(path) {\n  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n}\nfunction parsePath(path) {\n  var pathname = path || '/';\n  var search = '';\n  var hash = '';\n  var hashIndex = pathname.indexOf('#');\n\n  if (hashIndex !== -1) {\n    hash = pathname.substr(hashIndex);\n    pathname = pathname.substr(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n\n  if (searchIndex !== -1) {\n    search = pathname.substr(searchIndex);\n    pathname = pathname.substr(0, searchIndex);\n  }\n\n  return {\n    pathname: pathname,\n    search: search === '?' ? '' : search,\n    hash: hash === '#' ? '' : hash\n  };\n}\nfunction createPath(location) {\n  var pathname = location.pathname,\n      search = location.search,\n      hash = location.hash;\n  var path = pathname || '/';\n  if (search && search !== '?') path += search.charAt(0) === '?' ? search : \"?\" + search;\n  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : \"#\" + hash;\n  return path;\n}\n\nfunction createLocation(path, state, key, currentLocation) {\n  var location;\n\n  if (typeof path === 'string') {\n    // Two-arg form: push(path, state)\n    location = parsePath(path);\n    location.state = state;\n  } else {\n    // One-arg form: push(location)\n    location = _extends({}, path);\n    if (location.pathname === undefined) location.pathname = '';\n\n    if (location.search) {\n      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n    } else {\n      location.search = '';\n    }\n\n    if (location.hash) {\n      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n    } else {\n      location.hash = '';\n    }\n\n    if (state !== undefined && location.state === undefined) location.state = state;\n  }\n\n  try {\n    location.pathname = decodeURI(location.pathname);\n  } catch (e) {\n    if (e instanceof URIError) {\n      throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n    } else {\n      throw e;\n    }\n  }\n\n  if (key) location.key = key;\n\n  if (currentLocation) {\n    // Resolve incomplete/relative pathname relative to current location.\n    if (!location.pathname) {\n      location.pathname = currentLocation.pathname;\n    } else if (location.pathname.charAt(0) !== '/') {\n      location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n    }\n  } else {\n    // When there is no prior location and pathname is empty, set it to /\n    if (!location.pathname) {\n      location.pathname = '/';\n    }\n  }\n\n  return location;\n}\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n}\n\nfunction createTransitionManager() {\n  var prompt = null;\n\n  function setPrompt(nextPrompt) {\n    process.env.NODE_ENV !== \"production\" ? warning(prompt == null, 'A history supports only one prompt at a time') : void 0;\n    prompt = nextPrompt;\n    return function () {\n      if (prompt === nextPrompt) prompt = null;\n    };\n  }\n\n  function confirmTransitionTo(location, action, getUserConfirmation, callback) {\n    // TODO: If another transition starts while we're still confirming\n    // the previous one, we may end up in a weird state. Figure out the\n    // best way to handle this.\n    if (prompt != null) {\n      var result = typeof prompt === 'function' ? prompt(location, action) : prompt;\n\n      if (typeof result === 'string') {\n        if (typeof getUserConfirmation === 'function') {\n          getUserConfirmation(result, callback);\n        } else {\n          process.env.NODE_ENV !== \"production\" ? warning(false, 'A history needs a getUserConfirmation function in order to use a prompt message') : void 0;\n          callback(true);\n        }\n      } else {\n        // Return false from a transition hook to cancel the transition.\n        callback(result !== false);\n      }\n    } else {\n      callback(true);\n    }\n  }\n\n  var listeners = [];\n\n  function appendListener(fn) {\n    var isActive = true;\n\n    function listener() {\n      if (isActive) fn.apply(void 0, arguments);\n    }\n\n    listeners.push(listener);\n    return function () {\n      isActive = false;\n      listeners = listeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function notifyListeners() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    listeners.forEach(function (listener) {\n      return listener.apply(void 0, args);\n    });\n  }\n\n  return {\n    setPrompt: setPrompt,\n    confirmTransitionTo: confirmTransitionTo,\n    appendListener: appendListener,\n    notifyListeners: notifyListeners\n  };\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction getConfirmation(message, callback) {\n  callback(window.confirm(message)); // eslint-disable-line no-alert\n}\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = window.navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n  return window.history && 'pushState' in window.history;\n}\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\n\nfunction supportsPopStateOnHashChange() {\n  return window.navigator.userAgent.indexOf('Trident') === -1;\n}\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  return window.navigator.userAgent.indexOf('Firefox') === -1;\n}\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\n\nfunction isExtraneousPopstateEvent(event) {\n  return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n}\n\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\n\nfunction getHistoryState() {\n  try {\n    return window.history.state || {};\n  } catch (e) {\n    // IE 11 sometimes throws when accessing window.history.state\n    // See https://github.com/ReactTraining/history/pull/289\n    return {};\n  }\n}\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\n\n\nfunction createBrowserHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Browser history needs a DOM') : invariant(false) : void 0;\n  var globalHistory = window.history;\n  var canUseHistory = supportsHistory();\n  var needsHashChangeListener = !supportsPopStateOnHashChange();\n  var _props = props,\n      _props$forceRefresh = _props.forceRefresh,\n      forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n\n  function getDOMLocation(historyState) {\n    var _ref = historyState || {},\n        key = _ref.key,\n        state = _ref.state;\n\n    var _window$location = window.location,\n        pathname = _window$location.pathname,\n        search = _window$location.search,\n        hash = _window$location.hash;\n    var path = pathname + search + hash;\n    process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path, state, key);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function handlePopState(event) {\n    // Ignore extraneous popstate events in WebKit.\n    if (isExtraneousPopstateEvent(event)) return;\n    handlePop(getDOMLocation(event.state));\n  }\n\n  function handleHashChange() {\n    handlePop(getDOMLocation(getHistoryState()));\n  }\n\n  var forceNextPop = false;\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of keys we've seen in sessionStorage.\n    // Instead, we just default to 0 for keys we don't know.\n\n    var toIndex = allKeys.indexOf(toLocation.key);\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allKeys.indexOf(fromLocation.key);\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  }\n\n  var initialLocation = getDOMLocation(getHistoryState());\n  var allKeys = [initialLocation.key]; // Public interface\n\n  function createHref(location) {\n    return basename + createPath(location);\n  }\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.pushState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.href = href;\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          var nextKeys = allKeys.slice(0, prevIndex + 1);\n          nextKeys.push(location.key);\n          allKeys = nextKeys;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history') : void 0;\n        window.location.href = href;\n      }\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n          state = location.state;\n\n      if (canUseHistory) {\n        globalHistory.replaceState({\n          key: key,\n          state: state\n        }, null, href);\n\n        if (forceRefresh) {\n          window.location.replace(href);\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history') : void 0;\n        window.location.replace(href);\n      }\n    });\n  }\n\n  function go(n) {\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(PopStateEvent, handlePopState);\n      if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nvar HashChangeEvent$1 = 'hashchange';\nvar HashPathCoders = {\n  hashbang: {\n    encodePath: function encodePath(path) {\n      return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n    },\n    decodePath: function decodePath(path) {\n      return path.charAt(0) === '!' ? path.substr(1) : path;\n    }\n  },\n  noslash: {\n    encodePath: stripLeadingSlash,\n    decodePath: addLeadingSlash\n  },\n  slash: {\n    encodePath: addLeadingSlash,\n    decodePath: addLeadingSlash\n  }\n};\n\nfunction stripHash(url) {\n  var hashIndex = url.indexOf('#');\n  return hashIndex === -1 ? url : url.slice(0, hashIndex);\n}\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  var href = window.location.href;\n  var hashIndex = href.indexOf('#');\n  return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n}\n\nfunction pushHashPath(path) {\n  window.location.hash = path;\n}\n\nfunction replaceHashPath(path) {\n  window.location.replace(stripHash(window.location.href) + '#' + path);\n}\n\nfunction createHashHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  !canUseDOM ? process.env.NODE_ENV !== \"production\" ? invariant(false, 'Hash history needs a DOM') : invariant(false) : void 0;\n  var globalHistory = window.history;\n  var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n  var _props = props,\n      _props$getUserConfirm = _props.getUserConfirmation,\n      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,\n      _props$hashType = _props.hashType,\n      hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n  var _HashPathCoders$hashT = HashPathCoders[hashType],\n      encodePath = _HashPathCoders$hashT.encodePath,\n      decodePath = _HashPathCoders$hashT.decodePath;\n\n  function getDOMLocation() {\n    var path = decodePath(getHashPath());\n    process.env.NODE_ENV !== \"production\" ? warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".') : void 0;\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path);\n  }\n\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  var forceNextPop = false;\n  var ignorePath = null;\n\n  function locationsAreEqual$$1(a, b) {\n    return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;\n  }\n\n  function handleHashChange() {\n    var path = getHashPath();\n    var encodedPath = encodePath(path);\n\n    if (path !== encodedPath) {\n      // Ensure we always have a properly-encoded hash.\n      replaceHashPath(encodedPath);\n    } else {\n      var location = getDOMLocation();\n      var prevLocation = history.location;\n      if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n      if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n      ignorePath = null;\n      handlePop(location);\n    }\n  }\n\n  function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  }\n\n  function revertPop(fromLocation) {\n    var toLocation = history.location; // TODO: We could probably make this more reliable by\n    // keeping a list of paths we've seen in sessionStorage.\n    // Instead, we just default to 0 for paths we don't know.\n\n    var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  } // Ensure the hash is encoded properly before doing anything else.\n\n\n  var path = getHashPath();\n  var encodedPath = encodePath(path);\n  if (path !== encodedPath) replaceHashPath(encodedPath);\n  var initialLocation = getDOMLocation();\n  var allPaths = [createPath(initialLocation)]; // Public interface\n\n  function createHref(location) {\n    var baseTag = document.querySelector('base');\n    var href = '';\n\n    if (baseTag && baseTag.getAttribute('href')) {\n      href = stripHash(window.location.href);\n    }\n\n    return href + '#' + encodePath(basename + createPath(location));\n  }\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot push state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a PUSH, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        pushHashPath(encodedPath);\n        var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n        var nextPaths = allPaths.slice(0, prevIndex + 1);\n        nextPaths.push(path);\n        allPaths = nextPaths;\n        setState({\n          action: action,\n          location: location\n        });\n      } else {\n        process.env.NODE_ENV !== \"production\" ? warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack') : void 0;\n        setState();\n      }\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(state === undefined, 'Hash history cannot replace state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        replaceHashPath(encodedPath);\n      }\n\n      var prevIndex = allPaths.indexOf(createPath(history.location));\n      if (prevIndex !== -1) allPaths[prevIndex] = path;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    process.env.NODE_ENV !== \"production\" ? warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser') : void 0;\n    globalHistory.go(n);\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  var listenerCount = 0;\n\n  function checkDOMListeners(delta) {\n    listenerCount += delta;\n\n    if (listenerCount === 1 && delta === 1) {\n      window.addEventListener(HashChangeEvent$1, handleHashChange);\n    } else if (listenerCount === 0) {\n      window.removeEventListener(HashChangeEvent$1, handleHashChange);\n    }\n  }\n\n  var isBlocked = false;\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    var unblock = transitionManager.setPrompt(prompt);\n\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n\n      return unblock();\n    };\n  }\n\n  function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  }\n\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nfunction clamp(n, lowerBound, upperBound) {\n  return Math.min(Math.max(n, lowerBound), upperBound);\n}\n/**\n * Creates a history object that stores locations in memory.\n */\n\n\nfunction createMemoryHistory(props) {\n  if (props === void 0) {\n    props = {};\n  }\n\n  var _props = props,\n      getUserConfirmation = _props.getUserConfirmation,\n      _props$initialEntries = _props.initialEntries,\n      initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,\n      _props$initialIndex = _props.initialIndex,\n      initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,\n      _props$keyLength = _props.keyLength,\n      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;\n  var transitionManager = createTransitionManager();\n\n  function setState(nextState) {\n    _extends(history, nextState);\n\n    history.length = history.entries.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  }\n\n  function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  }\n\n  var index = clamp(initialIndex, 0, initialEntries.length - 1);\n  var entries = initialEntries.map(function (entry) {\n    return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n  }); // Public interface\n\n  var createHref = createPath;\n\n  function push(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var prevIndex = history.index;\n      var nextIndex = prevIndex + 1;\n      var nextEntries = history.entries.slice(0);\n\n      if (nextEntries.length > nextIndex) {\n        nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n      } else {\n        nextEntries.push(location);\n      }\n\n      setState({\n        action: action,\n        location: location,\n        index: nextIndex,\n        entries: nextEntries\n      });\n    });\n  }\n\n  function replace(path, state) {\n    process.env.NODE_ENV !== \"production\" ? warning(!(typeof path === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored') : void 0;\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      history.entries[history.index] = location;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  }\n\n  function go(n) {\n    var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n    var action = 'POP';\n    var location = history.entries[nextIndex];\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (ok) {\n        setState({\n          action: action,\n          location: location,\n          index: nextIndex\n        });\n      } else {\n        // Mimic the behavior of DOM histories by\n        // causing a render after a cancelled POP.\n        setState();\n      }\n    });\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function canGo(n) {\n    var nextIndex = history.index + n;\n    return nextIndex >= 0 && nextIndex < history.entries.length;\n  }\n\n  function block(prompt) {\n    if (prompt === void 0) {\n      prompt = false;\n    }\n\n    return transitionManager.setPrompt(prompt);\n  }\n\n  function listen(listener) {\n    return transitionManager.appendListener(listener);\n  }\n\n  var history = {\n    length: entries.length,\n    action: 'POP',\n    location: entries[index],\n    index: index,\n    entries: entries,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    canGo: canGo,\n    block: block,\n    listen: listen\n  };\n  return history;\n}\n\nexport { createBrowserHistory, createHashHistory, createMemoryHistory, createLocation, locationsAreEqual, parsePath, createPath };\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/**\n * SVG elements are case-sensitive.\n *\n * @see {@link https://developer.mozilla.org/docs/Web/SVG/Element#SVG_elements_A_to_Z}\n */\nvar CASE_SENSITIVE_TAG_NAMES = [\n  'animateMotion',\n  'animateTransform',\n  'clipPath',\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feDropShadow',\n  'feFlood',\n  'feFuncA',\n  'feFuncB',\n  'feFuncG',\n  'feFuncR',\n  'feGaussainBlur',\n  'feImage',\n  'feMerge',\n  'feMergeNode',\n  'feMorphology',\n  'feOffset',\n  'fePointLight',\n  'feSpecularLighting',\n  'feSpotLight',\n  'feTile',\n  'feTurbulence',\n  'foreignObject',\n  'linearGradient',\n  'radialGradient',\n  'textPath'\n];\n\nmodule.exports = {\n  CASE_SENSITIVE_TAG_NAMES: CASE_SENSITIVE_TAG_NAMES\n};\n","// constants\nvar HTML = 'html';\nvar HEAD = 'head';\nvar BODY = 'body';\nvar FIRST_TAG_REGEX = /<([a-zA-Z]+[0-9]?)/; // e.g., <h1>\nvar HEAD_TAG_REGEX = /<head.*>/i;\nvar BODY_TAG_REGEX = /<body.*>/i;\n\n// falls back to `parseFromString` if `createHTMLDocument` cannot be used\nvar parseFromDocument = function () {\n  throw new Error(\n    'This browser does not support `document.implementation.createHTMLDocument`'\n  );\n};\n\nvar parseFromString = function () {\n  throw new Error(\n    'This browser does not support `DOMParser.prototype.parseFromString`'\n  );\n};\n\n/**\n * DOMParser (performance: slow).\n *\n * @see https://developer.mozilla.org/docs/Web/API/DOMParser#Parsing_an_SVG_or_HTML_document\n */\nif (typeof window.DOMParser === 'function') {\n  var domParser = new window.DOMParser();\n  var mimeType = 'text/html';\n\n  /**\n   * Creates an HTML document using `DOMParser.parseFromString`.\n   *\n   * @param  {string} html      - The HTML string.\n   * @param  {string} [tagName] - The element to render the HTML (with 'body' as fallback).\n   * @return {HTMLDocument}\n   */\n  parseFromString = function (html, tagName) {\n    if (tagName) {\n      html = '<' + tagName + '>' + html + '</' + tagName + '>';\n    }\n\n    return domParser.parseFromString(html, mimeType);\n  };\n\n  parseFromDocument = parseFromString;\n}\n\n/**\n * DOMImplementation (performance: fair).\n *\n * @see https://developer.mozilla.org/docs/Web/API/DOMImplementation/createHTMLDocument\n */\nif (document.implementation) {\n  var isIE = require('./utilities').isIE;\n\n  // title parameter is required in IE\n  // https://msdn.microsoft.com/en-us/library/ff975457(v=vs.85).aspx\n  var doc = document.implementation.createHTMLDocument(\n    isIE() ? 'html-dom-parser' : undefined\n  );\n\n  /**\n   * Use HTML document created by `document.implementation.createHTMLDocument`.\n   *\n   * @param  {string} html      - The HTML string.\n   * @param  {string} [tagName] - The element to render the HTML (with 'body' as fallback).\n   * @return {HTMLDocument}\n   */\n  parseFromDocument = function (html, tagName) {\n    if (tagName) {\n      doc.documentElement.getElementsByTagName(tagName)[0].innerHTML = html;\n      return doc;\n    }\n\n    doc.documentElement.innerHTML = html;\n    return doc;\n  };\n}\n\n/**\n * Template (performance: fast).\n *\n * @see https://developer.mozilla.org/docs/Web/HTML/Element/template\n */\nvar template = document.createElement('template');\nvar parseFromTemplate;\n\nif (template.content) {\n  /**\n   * Uses a template element (content fragment) to parse HTML.\n   *\n   * @param  {string} html - The HTML string.\n   * @return {NodeList}\n   */\n  parseFromTemplate = function (html) {\n    template.innerHTML = html;\n    return template.content.childNodes;\n  };\n}\n\n/**\n * Parses HTML string to DOM nodes.\n *\n * @param  {string}   html - HTML markup.\n * @return {NodeList}\n */\nfunction domparser(html) {\n  var firstTagName;\n  var match = html.match(FIRST_TAG_REGEX);\n\n  if (match && match[1]) {\n    firstTagName = match[1].toLowerCase();\n  }\n\n  var doc;\n  var element;\n  var elements;\n\n  switch (firstTagName) {\n    case HTML:\n      doc = parseFromString(html);\n\n      // the created document may come with filler head/body elements,\n      // so make sure to remove them if they don't actually exist\n      if (!HEAD_TAG_REGEX.test(html)) {\n        element = doc.getElementsByTagName(HEAD)[0];\n        if (element) {\n          element.parentNode.removeChild(element);\n        }\n      }\n\n      if (!BODY_TAG_REGEX.test(html)) {\n        element = doc.getElementsByTagName(BODY)[0];\n        if (element) {\n          element.parentNode.removeChild(element);\n        }\n      }\n\n      return doc.getElementsByTagName(HTML);\n\n    case HEAD:\n    case BODY:\n      elements = parseFromDocument(html).getElementsByTagName(firstTagName);\n\n      // if there's a sibling element, then return both elements\n      if (BODY_TAG_REGEX.test(html) && HEAD_TAG_REGEX.test(html)) {\n        return elements[0].parentNode.childNodes;\n      }\n      return elements;\n\n    // low-level tag or text\n    default:\n      if (parseFromTemplate) {\n        return parseFromTemplate(html);\n      }\n\n      return parseFromDocument(html, BODY).getElementsByTagName(BODY)[0]\n        .childNodes;\n  }\n}\n\nmodule.exports = domparser;\n","var domparser = require('./domparser');\nvar formatDOM = require('./utilities').formatDOM;\n\nvar DIRECTIVE_REGEX = /<(![a-zA-Z\\s]+)>/; // e.g., <!doctype html>\n\n/**\n * Parses HTML string to DOM nodes in browser.\n *\n * @param  {string} html  - HTML markup.\n * @return {DomElement[]} - DOM elements.\n */\nfunction HTMLDOMParser(html) {\n  if (typeof html !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (html === '') {\n    return [];\n  }\n\n  // match directive\n  var match = html.match(DIRECTIVE_REGEX);\n  var directive;\n\n  if (match && match[1]) {\n    directive = match[1];\n  }\n\n  return formatDOM(domparser(html), null, directive);\n}\n\nmodule.exports = HTMLDOMParser;\n","var constants = require('./constants');\nvar domhandler = require('domhandler/lib/node');\n\nvar CASE_SENSITIVE_TAG_NAMES = constants.CASE_SENSITIVE_TAG_NAMES;\n\nvar Comment = domhandler.Comment;\nvar Element = domhandler.Element;\nvar ProcessingInstruction = domhandler.ProcessingInstruction;\nvar Text = domhandler.Text;\n\nvar caseSensitiveTagNamesMap = {};\nvar tagName;\n\nfor (var i = 0, len = CASE_SENSITIVE_TAG_NAMES.length; i < len; i++) {\n  tagName = CASE_SENSITIVE_TAG_NAMES[i];\n  caseSensitiveTagNamesMap[tagName.toLowerCase()] = tagName;\n}\n\n/**\n * Gets case-sensitive tag name.\n *\n * @param  {string}           tagName - Tag name in lowercase.\n * @return {string|undefined}         - Case-sensitive tag name.\n */\nfunction getCaseSensitiveTagName(tagName) {\n  return caseSensitiveTagNamesMap[tagName];\n}\n\n/**\n * Formats DOM attributes to a hash map.\n *\n * @param  {NamedNodeMap} attributes - List of attributes.\n * @return {object}                  - Map of attribute name to value.\n */\nfunction formatAttributes(attributes) {\n  var result = {};\n  var attribute;\n  // `NamedNodeMap` is array-like\n  for (var i = 0, len = attributes.length; i < len; i++) {\n    attribute = attributes[i];\n    result[attribute.name] = attribute.value;\n  }\n  return result;\n}\n\n/**\n * Corrects the tag name if it is case-sensitive (SVG).\n * Otherwise, returns the lowercase tag name (HTML).\n *\n * @param  {string} tagName - Lowercase tag name.\n * @return {string}         - Formatted tag name.\n */\nfunction formatTagName(tagName) {\n  tagName = tagName.toLowerCase();\n  var caseSensitiveTagName = getCaseSensitiveTagName(tagName);\n  if (caseSensitiveTagName) {\n    return caseSensitiveTagName;\n  }\n  return tagName;\n}\n\n/**\n * Transforms DOM nodes to `domhandler` nodes.\n *\n * @param  {NodeList}     nodes         - DOM nodes.\n * @param  {Element|null} [parent=null] - Parent node.\n * @param  {string}       [directive]   - Directive.\n * @return {Array<Comment|Element|ProcessingInstruction|Text>}\n */\nfunction formatDOM(nodes, parent, directive) {\n  parent = parent || null;\n  var result = [];\n\n  for (var index = 0, len = nodes.length; index < len; index++) {\n    var node = nodes[index];\n    var current;\n\n    // set the node data given the type\n    switch (node.nodeType) {\n      case 1:\n        // script, style, or tag\n        current = new Element(\n          formatTagName(node.nodeName),\n          formatAttributes(node.attributes)\n        );\n        current.children = formatDOM(node.childNodes, current);\n        break;\n\n      case 3:\n        current = new Text(node.nodeValue);\n        break;\n\n      case 8:\n        current = new Comment(node.nodeValue);\n        break;\n\n      default:\n        continue;\n    }\n\n    // set previous node next\n    var prev = result[index - 1] || null;\n    if (prev) {\n      prev.next = current;\n    }\n\n    // set properties for current node\n    current.parent = parent;\n    current.prev = prev;\n    current.next = null;\n\n    result.push(current);\n  }\n\n  if (directive) {\n    current = new ProcessingInstruction(\n      directive.substring(0, directive.indexOf(' ')).toLowerCase(),\n      directive\n    );\n    current.next = result[0] || null;\n    current.parent = parent;\n    result.unshift(current);\n\n    if (result[1]) {\n      result[1].prev = result[0];\n    }\n  }\n\n  return result;\n}\n\n/**\n * Detects if browser is Internet Explorer.\n *\n * @return {boolean} - Whether IE is detected.\n */\nfunction isIE() {\n  return /(MSIE |Trident\\/|Edge\\/)/.test(navigator.userAgent);\n}\n\nmodule.exports = {\n  formatAttributes: formatAttributes,\n  formatDOM: formatDOM,\n  isIE: isIE\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = void 0;\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType;\n(function (ElementType) {\n    /** Type for the root element of a document */\n    ElementType[\"Root\"] = \"root\";\n    /** Type for Text */\n    ElementType[\"Text\"] = \"text\";\n    /** Type for <? ... ?> */\n    ElementType[\"Directive\"] = \"directive\";\n    /** Type for <!-- ... --> */\n    ElementType[\"Comment\"] = \"comment\";\n    /** Type for <script> tags */\n    ElementType[\"Script\"] = \"script\";\n    /** Type for <style> tags */\n    ElementType[\"Style\"] = \"style\";\n    /** Type for Any tag */\n    ElementType[\"Tag\"] = \"tag\";\n    /** Type for <![CDATA[ ... ]]> */\n    ElementType[\"CDATA\"] = \"cdata\";\n    /** Type for <!doctype ...> */\n    ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType = exports.ElementType || (exports.ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nfunction isTag(elem) {\n    return (elem.type === ElementType.Tag ||\n        elem.type === ElementType.Script ||\n        elem.type === ElementType.Style);\n}\nexports.isTag = isTag;\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexports.Root = ElementType.Root;\n/** Type for Text */\nexports.Text = ElementType.Text;\n/** Type for <? ... ?> */\nexports.Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexports.Comment = ElementType.Comment;\n/** Type for <script> tags */\nexports.Script = ElementType.Script;\n/** Type for <style> tags */\nexports.Style = ElementType.Style;\n/** Type for Any tag */\nexports.Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexports.CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexports.Doctype = ElementType.Doctype;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\nvar nodeTypes = new Map([\n    [domelementtype_1.ElementType.Tag, 1],\n    [domelementtype_1.ElementType.Script, 1],\n    [domelementtype_1.ElementType.Style, 1],\n    [domelementtype_1.ElementType.Directive, 1],\n    [domelementtype_1.ElementType.Text, 3],\n    [domelementtype_1.ElementType.CDATA, 4],\n    [domelementtype_1.ElementType.Comment, 8],\n    [domelementtype_1.ElementType.Root, 9],\n]);\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nvar Node = /** @class */ (function () {\n    /**\n     *\n     * @param type The type of the node.\n     */\n    function Node(type) {\n        this.type = type;\n        /** Parent of the node */\n        this.parent = null;\n        /** Previous sibling */\n        this.prev = null;\n        /** Next sibling */\n        this.next = null;\n        /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n        this.startIndex = null;\n        /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n        this.endIndex = null;\n    }\n    Object.defineProperty(Node.prototype, \"nodeType\", {\n        // Read-only aliases\n        /**\n         * [DOM spec](https://dom.spec.whatwg.org/#dom-node-nodetype)-compatible\n         * node {@link type}.\n         */\n        get: function () {\n            var _a;\n            return (_a = nodeTypes.get(this.type)) !== null && _a !== void 0 ? _a : 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"parentNode\", {\n        // Read-write aliases for properties\n        /**\n         * Same as {@link parent}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.parent;\n        },\n        set: function (parent) {\n            this.parent = parent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"previousSibling\", {\n        /**\n         * Same as {@link prev}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.prev;\n        },\n        set: function (prev) {\n            this.prev = prev;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"nextSibling\", {\n        /**\n         * Same as {@link next}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.next;\n        },\n        set: function (next) {\n            this.next = next;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Clone this node, and optionally its children.\n     *\n     * @param recursive Clone child nodes as well.\n     * @returns A clone of the node.\n     */\n    Node.prototype.cloneNode = function (recursive) {\n        if (recursive === void 0) { recursive = false; }\n        return cloneNode(this, recursive);\n    };\n    return Node;\n}());\nexports.Node = Node;\n/**\n * A node that contains some data.\n */\nvar DataNode = /** @class */ (function (_super) {\n    __extends(DataNode, _super);\n    /**\n     * @param type The type of the node\n     * @param data The content of the data node\n     */\n    function DataNode(type, data) {\n        var _this = _super.call(this, type) || this;\n        _this.data = data;\n        return _this;\n    }\n    Object.defineProperty(DataNode.prototype, \"nodeValue\", {\n        /**\n         * Same as {@link data}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.data;\n        },\n        set: function (data) {\n            this.data = data;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return DataNode;\n}(Node));\nexports.DataNode = DataNode;\n/**\n * Text within the document.\n */\nvar Text = /** @class */ (function (_super) {\n    __extends(Text, _super);\n    function Text(data) {\n        return _super.call(this, domelementtype_1.ElementType.Text, data) || this;\n    }\n    return Text;\n}(DataNode));\nexports.Text = Text;\n/**\n * Comments within the document.\n */\nvar Comment = /** @class */ (function (_super) {\n    __extends(Comment, _super);\n    function Comment(data) {\n        return _super.call(this, domelementtype_1.ElementType.Comment, data) || this;\n    }\n    return Comment;\n}(DataNode));\nexports.Comment = Comment;\n/**\n * Processing instructions, including doc types.\n */\nvar ProcessingInstruction = /** @class */ (function (_super) {\n    __extends(ProcessingInstruction, _super);\n    function ProcessingInstruction(name, data) {\n        var _this = _super.call(this, domelementtype_1.ElementType.Directive, data) || this;\n        _this.name = name;\n        return _this;\n    }\n    return ProcessingInstruction;\n}(DataNode));\nexports.ProcessingInstruction = ProcessingInstruction;\n/**\n * A `Node` that can have children.\n */\nvar NodeWithChildren = /** @class */ (function (_super) {\n    __extends(NodeWithChildren, _super);\n    /**\n     * @param type Type of the node.\n     * @param children Children of the node. Only certain node types can have children.\n     */\n    function NodeWithChildren(type, children) {\n        var _this = _super.call(this, type) || this;\n        _this.children = children;\n        return _this;\n    }\n    Object.defineProperty(NodeWithChildren.prototype, \"firstChild\", {\n        // Aliases\n        /** First child of the node. */\n        get: function () {\n            var _a;\n            return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NodeWithChildren.prototype, \"lastChild\", {\n        /** Last child of the node. */\n        get: function () {\n            return this.children.length > 0\n                ? this.children[this.children.length - 1]\n                : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NodeWithChildren.prototype, \"childNodes\", {\n        /**\n         * Same as {@link children}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.children;\n        },\n        set: function (children) {\n            this.children = children;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return NodeWithChildren;\n}(Node));\nexports.NodeWithChildren = NodeWithChildren;\n/**\n * The root node of the document.\n */\nvar Document = /** @class */ (function (_super) {\n    __extends(Document, _super);\n    function Document(children) {\n        return _super.call(this, domelementtype_1.ElementType.Root, children) || this;\n    }\n    return Document;\n}(NodeWithChildren));\nexports.Document = Document;\n/**\n * An element within the DOM.\n */\nvar Element = /** @class */ (function (_super) {\n    __extends(Element, _super);\n    /**\n     * @param name Name of the tag, eg. `div`, `span`.\n     * @param attribs Object mapping attribute names to attribute values.\n     * @param children Children of the node.\n     */\n    function Element(name, attribs, children, type) {\n        if (children === void 0) { children = []; }\n        if (type === void 0) { type = name === \"script\"\n            ? domelementtype_1.ElementType.Script\n            : name === \"style\"\n                ? domelementtype_1.ElementType.Style\n                : domelementtype_1.ElementType.Tag; }\n        var _this = _super.call(this, type, children) || this;\n        _this.name = name;\n        _this.attribs = attribs;\n        return _this;\n    }\n    Object.defineProperty(Element.prototype, \"tagName\", {\n        // DOM Level 1 aliases\n        /**\n         * Same as {@link name}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.name;\n        },\n        set: function (name) {\n            this.name = name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Element.prototype, \"attributes\", {\n        get: function () {\n            var _this = this;\n            return Object.keys(this.attribs).map(function (name) {\n                var _a, _b;\n                return ({\n                    name: name,\n                    value: _this.attribs[name],\n                    namespace: (_a = _this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n                    prefix: (_b = _this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n                });\n            });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Element;\n}(NodeWithChildren));\nexports.Element = Element;\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nfunction isTag(node) {\n    return (0, domelementtype_1.isTag)(node);\n}\nexports.isTag = isTag;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nfunction isCDATA(node) {\n    return node.type === domelementtype_1.ElementType.CDATA;\n}\nexports.isCDATA = isCDATA;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nfunction isText(node) {\n    return node.type === domelementtype_1.ElementType.Text;\n}\nexports.isText = isText;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nfunction isComment(node) {\n    return node.type === domelementtype_1.ElementType.Comment;\n}\nexports.isComment = isComment;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDirective(node) {\n    return node.type === domelementtype_1.ElementType.Directive;\n}\nexports.isDirective = isDirective;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDocument(node) {\n    return node.type === domelementtype_1.ElementType.Root;\n}\nexports.isDocument = isDocument;\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `NodeWithChildren` (has children), `false` otherwise.\n */\nfunction hasChildren(node) {\n    return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\nexports.hasChildren = hasChildren;\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nfunction cloneNode(node, recursive) {\n    if (recursive === void 0) { recursive = false; }\n    var result;\n    if (isText(node)) {\n        result = new Text(node.data);\n    }\n    else if (isComment(node)) {\n        result = new Comment(node.data);\n    }\n    else if (isTag(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_1 = new Element(node.name, __assign({}, node.attribs), children);\n        children.forEach(function (child) { return (child.parent = clone_1); });\n        if (node.namespace != null) {\n            clone_1.namespace = node.namespace;\n        }\n        if (node[\"x-attribsNamespace\"]) {\n            clone_1[\"x-attribsNamespace\"] = __assign({}, node[\"x-attribsNamespace\"]);\n        }\n        if (node[\"x-attribsPrefix\"]) {\n            clone_1[\"x-attribsPrefix\"] = __assign({}, node[\"x-attribsPrefix\"]);\n        }\n        result = clone_1;\n    }\n    else if (isCDATA(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_2 = new NodeWithChildren(domelementtype_1.ElementType.CDATA, children);\n        children.forEach(function (child) { return (child.parent = clone_2); });\n        result = clone_2;\n    }\n    else if (isDocument(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_3 = new Document(children);\n        children.forEach(function (child) { return (child.parent = clone_3); });\n        if (node[\"x-mode\"]) {\n            clone_3[\"x-mode\"] = node[\"x-mode\"];\n        }\n        result = clone_3;\n    }\n    else if (isDirective(node)) {\n        var instruction = new ProcessingInstruction(node.name, node.data);\n        if (node[\"x-name\"] != null) {\n            instruction[\"x-name\"] = node[\"x-name\"];\n            instruction[\"x-publicId\"] = node[\"x-publicId\"];\n            instruction[\"x-systemId\"] = node[\"x-systemId\"];\n        }\n        result = instruction;\n    }\n    else {\n        throw new Error(\"Not implemented yet: \".concat(node.type));\n    }\n    result.startIndex = node.startIndex;\n    result.endIndex = node.endIndex;\n    if (node.sourceCodeLocation != null) {\n        result.sourceCodeLocation = node.sourceCodeLocation;\n    }\n    return result;\n}\nexports.cloneNode = cloneNode;\nfunction cloneChildren(childs) {\n    var children = childs.map(function (child) { return cloneNode(child, true); });\n    for (var i = 1; i < children.length; i++) {\n        children[i].prev = children[i - 1];\n        children[i - 1].next = children[i];\n    }\n    return children;\n}\n","var domToReact = require('./lib/dom-to-react');\nvar attributesToProps = require('./lib/attributes-to-props');\nvar htmlToDOM = require('html-dom-parser');\n\n// support backwards compatibility for ES Module\nhtmlToDOM =\n  /* istanbul ignore next */\n  typeof htmlToDOM.default === 'function' ? htmlToDOM.default : htmlToDOM;\n\nvar domParserOptions = { lowerCaseAttributeNames: false };\n\n/**\n * Converts HTML string to React elements.\n *\n * @param {string} html - HTML string.\n * @param {object} [options] - Parser options.\n * @param {object} [options.htmlparser2] - htmlparser2 options.\n * @param {object} [options.library] - Library for React, Preact, etc.\n * @param {Function} [options.replace] - Replace method.\n * @returns {JSX.Element|JSX.Element[]|string} - React element(s), empty array, or string.\n */\nfunction HTMLReactParser(html, options) {\n  if (typeof html !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n  if (html === '') {\n    return [];\n  }\n  options = options || {};\n  return domToReact(\n    htmlToDOM(html, options.htmlparser2 || domParserOptions),\n    options\n  );\n}\n\nHTMLReactParser.domToReact = domToReact;\nHTMLReactParser.htmlToDOM = htmlToDOM;\nHTMLReactParser.attributesToProps = attributesToProps;\nHTMLReactParser.Element = require('domhandler').Element;\n\n// support CommonJS and ES Modules\nmodule.exports = HTMLReactParser;\nmodule.exports.default = HTMLReactParser;\n","var reactProperty = require('react-property');\nvar utilities = require('./utilities');\n\n/**\n * Converts HTML/SVG DOM attributes to React props.\n *\n * @param {object} [attributes={}] - HTML/SVG DOM attributes.\n * @returns - React props.\n */\nmodule.exports = function attributesToProps(attributes) {\n  attributes = attributes || {};\n\n  var valueOnlyInputs = {\n    reset: true,\n    submit: true\n  };\n\n  var attributeName;\n  var attributeNameLowerCased;\n  var attributeValue;\n  var propName;\n  var propertyInfo;\n  var props = {};\n  var inputIsValueOnly = attributes.type && valueOnlyInputs[attributes.type];\n\n  for (attributeName in attributes) {\n    attributeValue = attributes[attributeName];\n\n    // ARIA (aria-*) or custom data (data-*) attribute\n    if (reactProperty.isCustomAttribute(attributeName)) {\n      props[attributeName] = attributeValue;\n      continue;\n    }\n\n    // convert HTML/SVG attribute to React prop\n    attributeNameLowerCased = attributeName.toLowerCase();\n    propName = getPropName(attributeNameLowerCased);\n\n    if (propName) {\n      propertyInfo = reactProperty.getPropertyInfo(propName);\n\n      // convert attribute to uncontrolled component prop (e.g., `value` to `defaultValue`)\n      // https://reactjs.org/docs/uncontrolled-components.html\n      if (\n        (propName === 'checked' || propName === 'value') &&\n        !inputIsValueOnly\n      ) {\n        propName = getPropName('default' + attributeNameLowerCased);\n      }\n\n      props[propName] = attributeValue;\n\n      switch (propertyInfo && propertyInfo.type) {\n        case reactProperty.BOOLEAN:\n          props[propName] = true;\n          break;\n        case reactProperty.OVERLOADED_BOOLEAN:\n          if (attributeValue === '') {\n            props[propName] = true;\n          }\n          break;\n      }\n      continue;\n    }\n\n    // preserve custom attribute if React >=16\n    if (utilities.PRESERVE_CUSTOM_ATTRIBUTES) {\n      props[attributeName] = attributeValue;\n    }\n  }\n\n  // transform inline style to object\n  utilities.setStyleProp(attributes.style, props);\n\n  return props;\n};\n\n/**\n * Gets prop name from lowercased attribute name.\n *\n * @param {string} attributeName - Lowercased attribute name.\n * @returns - Prop name.\n */\nfunction getPropName(attributeName) {\n  return reactProperty.possibleStandardNames[attributeName];\n}\n","var React = require('react');\nvar attributesToProps = require('./attributes-to-props');\nvar utilities = require('./utilities');\n\nvar setStyleProp = utilities.setStyleProp;\nvar canTextBeChildOfNode = utilities.canTextBeChildOfNode;\n\n/**\n * Converts DOM nodes to JSX element(s).\n *\n * @param {DomElement[]} nodes - DOM nodes.\n * @param {object} [options={}] - Options.\n * @param {Function} [options.replace] - Replacer.\n * @param {object} [options.library] - Library (React, Preact, etc.).\n * @returns - String or JSX element(s).\n */\nfunction domToReact(nodes, options) {\n  options = options || {};\n\n  var library = options.library || React;\n  var cloneElement = library.cloneElement;\n  var createElement = library.createElement;\n  var isValidElement = library.isValidElement;\n\n  var result = [];\n  var node;\n  var isWhitespace;\n  var hasReplace = typeof options.replace === 'function';\n  var replaceElement;\n  var props;\n  var children;\n  var trim = options.trim;\n\n  for (var i = 0, len = nodes.length; i < len; i++) {\n    node = nodes[i];\n\n    // replace with custom React element (if present)\n    if (hasReplace) {\n      replaceElement = options.replace(node);\n\n      if (isValidElement(replaceElement)) {\n        // set \"key\" prop for sibling elements\n        // https://fb.me/react-warning-keys\n        if (len > 1) {\n          replaceElement = cloneElement(replaceElement, {\n            key: replaceElement.key || i\n          });\n        }\n        result.push(replaceElement);\n        continue;\n      }\n    }\n\n    if (node.type === 'text') {\n      isWhitespace = !node.data.trim().length;\n\n      if (isWhitespace && node.parent && !canTextBeChildOfNode(node.parent)) {\n        // We have a whitespace node that can't be nested in its parent\n        // so skip it\n        continue;\n      }\n\n      if (trim && isWhitespace) {\n        // Trim is enabled and we have a whitespace node\n        // so skip it\n        continue;\n      }\n\n      // We have a text node that's not whitespace and it can be nested\n      // in its parent so add it to the results\n      result.push(node.data);\n      continue;\n    }\n\n    props = node.attribs;\n    if (skipAttributesToProps(node)) {\n      setStyleProp(props.style, props);\n    } else if (props) {\n      props = attributesToProps(props);\n    }\n\n    children = null;\n\n    switch (node.type) {\n      case 'script':\n      case 'style':\n        // prevent text in <script> or <style> from being escaped\n        // https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml\n        if (node.children[0]) {\n          props.dangerouslySetInnerHTML = {\n            __html: node.children[0].data\n          };\n        }\n        break;\n\n      case 'tag':\n        // setting textarea value in children is an antipattern in React\n        // https://reactjs.org/docs/forms.html#the-textarea-tag\n        if (node.name === 'textarea' && node.children[0]) {\n          props.defaultValue = node.children[0].data;\n        } else if (node.children && node.children.length) {\n          // continue recursion of creating React elements (if applicable)\n          children = domToReact(node.children, options);\n        }\n        break;\n\n      // skip all other cases (e.g., comment)\n      default:\n        continue;\n    }\n\n    // set \"key\" prop for sibling elements\n    // https://fb.me/react-warning-keys\n    if (len > 1) {\n      props.key = i;\n    }\n\n    result.push(createElement(node.name, props, children));\n  }\n\n  return result.length === 1 ? result[0] : result;\n}\n\n/**\n * Determines whether DOM element attributes should be transformed to props.\n * Web Components should not have their attributes transformed except for `style`.\n *\n * @param {DomElement} node\n * @returns - Whether node attributes should be converted to props.\n */\nfunction skipAttributesToProps(node) {\n  return (\n    utilities.PRESERVE_CUSTOM_ATTRIBUTES &&\n    node.type === 'tag' &&\n    utilities.isCustomComponent(node.name, node.attribs)\n  );\n}\n\nmodule.exports = domToReact;\n","var React = require('react');\nvar styleToJS = require('style-to-js').default;\n\n/**\n * Swap key with value in an object.\n *\n * @param {object} obj - The object.\n * @param {Function} [override] - The override method.\n * @returns - The inverted object.\n */\nfunction invertObject(obj, override) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('First argument must be an object');\n  }\n\n  var key;\n  var value;\n  var isOverridePresent = typeof override === 'function';\n  var overrides = {};\n  var result = {};\n\n  for (key in obj) {\n    value = obj[key];\n\n    if (isOverridePresent) {\n      overrides = override(key, value);\n      if (overrides && overrides.length === 2) {\n        result[overrides[0]] = overrides[1];\n        continue;\n      }\n    }\n\n    if (typeof value === 'string') {\n      result[value] = key;\n    }\n  }\n\n  return result;\n}\n\n/**\n * Check if a given tag is a custom component.\n *\n * @see {@link https://github.com/facebook/react/blob/v16.6.3/packages/react-dom/src/shared/isCustomComponent.js}\n *\n * @param {string} tagName - The name of the html tag.\n * @param {object} props - The props being passed to the element.\n * @returns - Whether tag is custom component.\n */\nfunction isCustomComponent(tagName, props) {\n  if (tagName.indexOf('-') === -1) {\n    return props && typeof props.is === 'string';\n  }\n\n  switch (tagName) {\n    // These are reserved SVG and MathML elements.\n    // We don't mind this whitelist too much because we expect it to never grow.\n    // The alternative is to track the namespace in a few places which is convoluted.\n    // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n    case 'annotation-xml':\n    case 'color-profile':\n    case 'font-face':\n    case 'font-face-src':\n    case 'font-face-uri':\n    case 'font-face-format':\n    case 'font-face-name':\n    case 'missing-glyph':\n      return false;\n    default:\n      return true;\n  }\n}\n\nvar styleToJSOptions = { reactCompat: true };\n\n/**\n * Sets style prop.\n *\n * @param {null|undefined|string} style\n * @param {object} props\n */\nfunction setStyleProp(style, props) {\n  if (style === null || style === undefined) {\n    return;\n  }\n  try {\n    props.style = styleToJS(style, styleToJSOptions);\n  } catch (err) {\n    props.style = {};\n  }\n}\n\n/**\n * @constant {boolean}\n * @see {@link https://reactjs.org/blog/2017/09/08/dom-attributes-in-react-16.html}\n */\nvar PRESERVE_CUSTOM_ATTRIBUTES = React.version.split('.')[0] >= 16;\n\n// Taken from\n// https://github.com/facebook/react/blob/cae635054e17a6f107a39d328649137b83f25972/packages/react-dom/src/client/validateDOMNesting.js#L213\nvar elementsWithNoTextChildren = new Set([\n  'tr',\n  'tbody',\n  'thead',\n  'tfoot',\n  'colgroup',\n  'table',\n  'head',\n  'html',\n  'frameset'\n]);\n\n/**\n * Checks if the given node can contain text nodes\n *\n * @param {DomElement} node - Node.\n * @returns - Whether node can contain text nodes.\n */\nfunction canTextBeChildOfNode(node) {\n  return !elementsWithNoTextChildren.has(node.name);\n}\n\nmodule.exports = {\n  PRESERVE_CUSTOM_ATTRIBUTES: PRESERVE_CUSTOM_ATTRIBUTES,\n  invertObject: invertObject,\n  isCustomComponent: isCustomComponent,\n  setStyleProp: setStyleProp,\n  canTextBeChildOfNode: canTextBeChildOfNode,\n  elementsWithNoTextChildren: elementsWithNoTextChildren\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Doctype = exports.CDATA = exports.Tag = exports.Style = exports.Script = exports.Comment = exports.Directive = exports.Text = exports.Root = exports.isTag = exports.ElementType = void 0;\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType;\n(function (ElementType) {\n    /** Type for the root element of a document */\n    ElementType[\"Root\"] = \"root\";\n    /** Type for Text */\n    ElementType[\"Text\"] = \"text\";\n    /** Type for <? ... ?> */\n    ElementType[\"Directive\"] = \"directive\";\n    /** Type for <!-- ... --> */\n    ElementType[\"Comment\"] = \"comment\";\n    /** Type for <script> tags */\n    ElementType[\"Script\"] = \"script\";\n    /** Type for <style> tags */\n    ElementType[\"Style\"] = \"style\";\n    /** Type for Any tag */\n    ElementType[\"Tag\"] = \"tag\";\n    /** Type for <![CDATA[ ... ]]> */\n    ElementType[\"CDATA\"] = \"cdata\";\n    /** Type for <!doctype ...> */\n    ElementType[\"Doctype\"] = \"doctype\";\n})(ElementType = exports.ElementType || (exports.ElementType = {}));\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nfunction isTag(elem) {\n    return (elem.type === ElementType.Tag ||\n        elem.type === ElementType.Script ||\n        elem.type === ElementType.Style);\n}\nexports.isTag = isTag;\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nexports.Root = ElementType.Root;\n/** Type for Text */\nexports.Text = ElementType.Text;\n/** Type for <? ... ?> */\nexports.Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nexports.Comment = ElementType.Comment;\n/** Type for <script> tags */\nexports.Script = ElementType.Script;\n/** Type for <style> tags */\nexports.Style = ElementType.Style;\n/** Type for Any tag */\nexports.Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nexports.CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nexports.Doctype = ElementType.Doctype;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    var desc = Object.getOwnPropertyDescriptor(m, k);\n    if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n    }\n    Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n    if (k2 === undefined) k2 = k;\n    o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n    for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DomHandler = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\nvar node_1 = require(\"./node\");\n__exportStar(require(\"./node\"), exports);\nvar reWhitespace = /\\s+/g;\n// Default options\nvar defaultOpts = {\n    normalizeWhitespace: false,\n    withStartIndices: false,\n    withEndIndices: false,\n    xmlMode: false,\n};\nvar DomHandler = /** @class */ (function () {\n    /**\n     * @param callback Called once parsing has completed.\n     * @param options Settings for the handler.\n     * @param elementCB Callback whenever a tag is closed.\n     */\n    function DomHandler(callback, options, elementCB) {\n        /** The elements of the DOM */\n        this.dom = [];\n        /** The root element for the DOM */\n        this.root = new node_1.Document(this.dom);\n        /** Indicated whether parsing has been completed. */\n        this.done = false;\n        /** Stack of open tags. */\n        this.tagStack = [this.root];\n        /** A data node that is still being written to. */\n        this.lastNode = null;\n        /** Reference to the parser instance. Used for location information. */\n        this.parser = null;\n        // Make it possible to skip arguments, for backwards-compatibility\n        if (typeof options === \"function\") {\n            elementCB = options;\n            options = defaultOpts;\n        }\n        if (typeof callback === \"object\") {\n            options = callback;\n            callback = undefined;\n        }\n        this.callback = callback !== null && callback !== void 0 ? callback : null;\n        this.options = options !== null && options !== void 0 ? options : defaultOpts;\n        this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n    }\n    DomHandler.prototype.onparserinit = function (parser) {\n        this.parser = parser;\n    };\n    // Resets the handler back to starting state\n    DomHandler.prototype.onreset = function () {\n        this.dom = [];\n        this.root = new node_1.Document(this.dom);\n        this.done = false;\n        this.tagStack = [this.root];\n        this.lastNode = null;\n        this.parser = null;\n    };\n    // Signals the handler that parsing is done\n    DomHandler.prototype.onend = function () {\n        if (this.done)\n            return;\n        this.done = true;\n        this.parser = null;\n        this.handleCallback(null);\n    };\n    DomHandler.prototype.onerror = function (error) {\n        this.handleCallback(error);\n    };\n    DomHandler.prototype.onclosetag = function () {\n        this.lastNode = null;\n        var elem = this.tagStack.pop();\n        if (this.options.withEndIndices) {\n            elem.endIndex = this.parser.endIndex;\n        }\n        if (this.elementCB)\n            this.elementCB(elem);\n    };\n    DomHandler.prototype.onopentag = function (name, attribs) {\n        var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;\n        var element = new node_1.Element(name, attribs, undefined, type);\n        this.addNode(element);\n        this.tagStack.push(element);\n    };\n    DomHandler.prototype.ontext = function (data) {\n        var normalizeWhitespace = this.options.normalizeWhitespace;\n        var lastNode = this.lastNode;\n        if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {\n            if (normalizeWhitespace) {\n                lastNode.data = (lastNode.data + data).replace(reWhitespace, \" \");\n            }\n            else {\n                lastNode.data += data;\n            }\n            if (this.options.withEndIndices) {\n                lastNode.endIndex = this.parser.endIndex;\n            }\n        }\n        else {\n            if (normalizeWhitespace) {\n                data = data.replace(reWhitespace, \" \");\n            }\n            var node = new node_1.Text(data);\n            this.addNode(node);\n            this.lastNode = node;\n        }\n    };\n    DomHandler.prototype.oncomment = function (data) {\n        if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {\n            this.lastNode.data += data;\n            return;\n        }\n        var node = new node_1.Comment(data);\n        this.addNode(node);\n        this.lastNode = node;\n    };\n    DomHandler.prototype.oncommentend = function () {\n        this.lastNode = null;\n    };\n    DomHandler.prototype.oncdatastart = function () {\n        var text = new node_1.Text(\"\");\n        var node = new node_1.NodeWithChildren(domelementtype_1.ElementType.CDATA, [text]);\n        this.addNode(node);\n        text.parent = node;\n        this.lastNode = text;\n    };\n    DomHandler.prototype.oncdataend = function () {\n        this.lastNode = null;\n    };\n    DomHandler.prototype.onprocessinginstruction = function (name, data) {\n        var node = new node_1.ProcessingInstruction(name, data);\n        this.addNode(node);\n    };\n    DomHandler.prototype.handleCallback = function (error) {\n        if (typeof this.callback === \"function\") {\n            this.callback(error, this.dom);\n        }\n        else if (error) {\n            throw error;\n        }\n    };\n    DomHandler.prototype.addNode = function (node) {\n        var parent = this.tagStack[this.tagStack.length - 1];\n        var previousSibling = parent.children[parent.children.length - 1];\n        if (this.options.withStartIndices) {\n            node.startIndex = this.parser.startIndex;\n        }\n        if (this.options.withEndIndices) {\n            node.endIndex = this.parser.endIndex;\n        }\n        parent.children.push(node);\n        if (previousSibling) {\n            node.prev = previousSibling;\n            previousSibling.next = node;\n        }\n        node.parent = parent;\n        this.lastNode = null;\n    };\n    return DomHandler;\n}());\nexports.DomHandler = DomHandler;\nexports.default = DomHandler;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = void 0;\nvar domelementtype_1 = require(\"domelementtype\");\nvar nodeTypes = new Map([\n    [domelementtype_1.ElementType.Tag, 1],\n    [domelementtype_1.ElementType.Script, 1],\n    [domelementtype_1.ElementType.Style, 1],\n    [domelementtype_1.ElementType.Directive, 1],\n    [domelementtype_1.ElementType.Text, 3],\n    [domelementtype_1.ElementType.CDATA, 4],\n    [domelementtype_1.ElementType.Comment, 8],\n    [domelementtype_1.ElementType.Root, 9],\n]);\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nvar Node = /** @class */ (function () {\n    /**\n     *\n     * @param type The type of the node.\n     */\n    function Node(type) {\n        this.type = type;\n        /** Parent of the node */\n        this.parent = null;\n        /** Previous sibling */\n        this.prev = null;\n        /** Next sibling */\n        this.next = null;\n        /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n        this.startIndex = null;\n        /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n        this.endIndex = null;\n    }\n    Object.defineProperty(Node.prototype, \"nodeType\", {\n        // Read-only aliases\n        /**\n         * [DOM spec](https://dom.spec.whatwg.org/#dom-node-nodetype)-compatible\n         * node {@link type}.\n         */\n        get: function () {\n            var _a;\n            return (_a = nodeTypes.get(this.type)) !== null && _a !== void 0 ? _a : 1;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"parentNode\", {\n        // Read-write aliases for properties\n        /**\n         * Same as {@link parent}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.parent;\n        },\n        set: function (parent) {\n            this.parent = parent;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"previousSibling\", {\n        /**\n         * Same as {@link prev}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.prev;\n        },\n        set: function (prev) {\n            this.prev = prev;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Node.prototype, \"nextSibling\", {\n        /**\n         * Same as {@link next}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.next;\n        },\n        set: function (next) {\n            this.next = next;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    /**\n     * Clone this node, and optionally its children.\n     *\n     * @param recursive Clone child nodes as well.\n     * @returns A clone of the node.\n     */\n    Node.prototype.cloneNode = function (recursive) {\n        if (recursive === void 0) { recursive = false; }\n        return cloneNode(this, recursive);\n    };\n    return Node;\n}());\nexports.Node = Node;\n/**\n * A node that contains some data.\n */\nvar DataNode = /** @class */ (function (_super) {\n    __extends(DataNode, _super);\n    /**\n     * @param type The type of the node\n     * @param data The content of the data node\n     */\n    function DataNode(type, data) {\n        var _this = _super.call(this, type) || this;\n        _this.data = data;\n        return _this;\n    }\n    Object.defineProperty(DataNode.prototype, \"nodeValue\", {\n        /**\n         * Same as {@link data}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.data;\n        },\n        set: function (data) {\n            this.data = data;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return DataNode;\n}(Node));\nexports.DataNode = DataNode;\n/**\n * Text within the document.\n */\nvar Text = /** @class */ (function (_super) {\n    __extends(Text, _super);\n    function Text(data) {\n        return _super.call(this, domelementtype_1.ElementType.Text, data) || this;\n    }\n    return Text;\n}(DataNode));\nexports.Text = Text;\n/**\n * Comments within the document.\n */\nvar Comment = /** @class */ (function (_super) {\n    __extends(Comment, _super);\n    function Comment(data) {\n        return _super.call(this, domelementtype_1.ElementType.Comment, data) || this;\n    }\n    return Comment;\n}(DataNode));\nexports.Comment = Comment;\n/**\n * Processing instructions, including doc types.\n */\nvar ProcessingInstruction = /** @class */ (function (_super) {\n    __extends(ProcessingInstruction, _super);\n    function ProcessingInstruction(name, data) {\n        var _this = _super.call(this, domelementtype_1.ElementType.Directive, data) || this;\n        _this.name = name;\n        return _this;\n    }\n    return ProcessingInstruction;\n}(DataNode));\nexports.ProcessingInstruction = ProcessingInstruction;\n/**\n * A `Node` that can have children.\n */\nvar NodeWithChildren = /** @class */ (function (_super) {\n    __extends(NodeWithChildren, _super);\n    /**\n     * @param type Type of the node.\n     * @param children Children of the node. Only certain node types can have children.\n     */\n    function NodeWithChildren(type, children) {\n        var _this = _super.call(this, type) || this;\n        _this.children = children;\n        return _this;\n    }\n    Object.defineProperty(NodeWithChildren.prototype, \"firstChild\", {\n        // Aliases\n        /** First child of the node. */\n        get: function () {\n            var _a;\n            return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NodeWithChildren.prototype, \"lastChild\", {\n        /** Last child of the node. */\n        get: function () {\n            return this.children.length > 0\n                ? this.children[this.children.length - 1]\n                : null;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(NodeWithChildren.prototype, \"childNodes\", {\n        /**\n         * Same as {@link children}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.children;\n        },\n        set: function (children) {\n            this.children = children;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return NodeWithChildren;\n}(Node));\nexports.NodeWithChildren = NodeWithChildren;\n/**\n * The root node of the document.\n */\nvar Document = /** @class */ (function (_super) {\n    __extends(Document, _super);\n    function Document(children) {\n        return _super.call(this, domelementtype_1.ElementType.Root, children) || this;\n    }\n    return Document;\n}(NodeWithChildren));\nexports.Document = Document;\n/**\n * An element within the DOM.\n */\nvar Element = /** @class */ (function (_super) {\n    __extends(Element, _super);\n    /**\n     * @param name Name of the tag, eg. `div`, `span`.\n     * @param attribs Object mapping attribute names to attribute values.\n     * @param children Children of the node.\n     */\n    function Element(name, attribs, children, type) {\n        if (children === void 0) { children = []; }\n        if (type === void 0) { type = name === \"script\"\n            ? domelementtype_1.ElementType.Script\n            : name === \"style\"\n                ? domelementtype_1.ElementType.Style\n                : domelementtype_1.ElementType.Tag; }\n        var _this = _super.call(this, type, children) || this;\n        _this.name = name;\n        _this.attribs = attribs;\n        return _this;\n    }\n    Object.defineProperty(Element.prototype, \"tagName\", {\n        // DOM Level 1 aliases\n        /**\n         * Same as {@link name}.\n         * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n         */\n        get: function () {\n            return this.name;\n        },\n        set: function (name) {\n            this.name = name;\n        },\n        enumerable: false,\n        configurable: true\n    });\n    Object.defineProperty(Element.prototype, \"attributes\", {\n        get: function () {\n            var _this = this;\n            return Object.keys(this.attribs).map(function (name) {\n                var _a, _b;\n                return ({\n                    name: name,\n                    value: _this.attribs[name],\n                    namespace: (_a = _this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n                    prefix: (_b = _this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name],\n                });\n            });\n        },\n        enumerable: false,\n        configurable: true\n    });\n    return Element;\n}(NodeWithChildren));\nexports.Element = Element;\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nfunction isTag(node) {\n    return (0, domelementtype_1.isTag)(node);\n}\nexports.isTag = isTag;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nfunction isCDATA(node) {\n    return node.type === domelementtype_1.ElementType.CDATA;\n}\nexports.isCDATA = isCDATA;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nfunction isText(node) {\n    return node.type === domelementtype_1.ElementType.Text;\n}\nexports.isText = isText;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nfunction isComment(node) {\n    return node.type === domelementtype_1.ElementType.Comment;\n}\nexports.isComment = isComment;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDirective(node) {\n    return node.type === domelementtype_1.ElementType.Directive;\n}\nexports.isDirective = isDirective;\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDocument(node) {\n    return node.type === domelementtype_1.ElementType.Root;\n}\nexports.isDocument = isDocument;\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `NodeWithChildren` (has children), `false` otherwise.\n */\nfunction hasChildren(node) {\n    return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\nexports.hasChildren = hasChildren;\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nfunction cloneNode(node, recursive) {\n    if (recursive === void 0) { recursive = false; }\n    var result;\n    if (isText(node)) {\n        result = new Text(node.data);\n    }\n    else if (isComment(node)) {\n        result = new Comment(node.data);\n    }\n    else if (isTag(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_1 = new Element(node.name, __assign({}, node.attribs), children);\n        children.forEach(function (child) { return (child.parent = clone_1); });\n        if (node.namespace != null) {\n            clone_1.namespace = node.namespace;\n        }\n        if (node[\"x-attribsNamespace\"]) {\n            clone_1[\"x-attribsNamespace\"] = __assign({}, node[\"x-attribsNamespace\"]);\n        }\n        if (node[\"x-attribsPrefix\"]) {\n            clone_1[\"x-attribsPrefix\"] = __assign({}, node[\"x-attribsPrefix\"]);\n        }\n        result = clone_1;\n    }\n    else if (isCDATA(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_2 = new NodeWithChildren(domelementtype_1.ElementType.CDATA, children);\n        children.forEach(function (child) { return (child.parent = clone_2); });\n        result = clone_2;\n    }\n    else if (isDocument(node)) {\n        var children = recursive ? cloneChildren(node.children) : [];\n        var clone_3 = new Document(children);\n        children.forEach(function (child) { return (child.parent = clone_3); });\n        if (node[\"x-mode\"]) {\n            clone_3[\"x-mode\"] = node[\"x-mode\"];\n        }\n        result = clone_3;\n    }\n    else if (isDirective(node)) {\n        var instruction = new ProcessingInstruction(node.name, node.data);\n        if (node[\"x-name\"] != null) {\n            instruction[\"x-name\"] = node[\"x-name\"];\n            instruction[\"x-publicId\"] = node[\"x-publicId\"];\n            instruction[\"x-systemId\"] = node[\"x-systemId\"];\n        }\n        result = instruction;\n    }\n    else {\n        throw new Error(\"Not implemented yet: \".concat(node.type));\n    }\n    result.startIndex = node.startIndex;\n    result.endIndex = node.endIndex;\n    if (node.sourceCodeLocation != null) {\n        result.sourceCodeLocation = node.sourceCodeLocation;\n    }\n    return result;\n}\nexports.cloneNode = cloneNode;\nfunction cloneChildren(childs) {\n    var children = childs.map(function (child) { return cloneNode(child, true); });\n    for (var i = 1; i < children.length; i++) {\n        children[i].prev = children[i - 1];\n        children[i - 1].next = children[i];\n    }\n    return children;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nfunction stringifiable(obj) {\n    // Safely stringify Object.create(null)\n    /* istanbul ignore next */\n    return typeof obj === 'object' && !('toString' in obj) ?\n        Object.prototype.toString.call(obj).slice(8, -1) :\n        obj;\n}\nvar isProduction = typeof process === 'object' && process.env.NODE_ENV === 'production';\nfunction invariant(condition, message) {\n    if (!condition) {\n        /* istanbul ignore next */\n        if (isProduction) {\n            throw new Error('Invariant failed');\n        }\n        throw new Error(message());\n    }\n}\nexports.invariant = invariant;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar splice = Array.prototype.splice;\nvar toString = Object.prototype.toString;\nfunction type(obj) {\n    return toString.call(obj).slice(8, -1);\n}\nvar assign = Object.assign || /* istanbul ignore next */ (function (target, source) {\n    getAllKeys(source).forEach(function (key) {\n        if (hasOwnProperty.call(source, key)) {\n            target[key] = source[key];\n        }\n    });\n    return target;\n});\nvar getAllKeys = typeof Object.getOwnPropertySymbols === 'function'\n    ? function (obj) { return Object.keys(obj).concat(Object.getOwnPropertySymbols(obj)); }\n    /* istanbul ignore next */\n    : function (obj) { return Object.keys(obj); };\nfunction copy(object) {\n    return Array.isArray(object)\n        ? assign(object.constructor(object.length), object)\n        : (type(object) === 'Map')\n            ? new Map(object)\n            : (type(object) === 'Set')\n                ? new Set(object)\n                : (object && typeof object === 'object')\n                    ? assign(Object.create(Object.getPrototypeOf(object)), object)\n                    /* istanbul ignore next */\n                    : object;\n}\nvar Context = /** @class */ (function () {\n    function Context() {\n        this.commands = assign({}, defaultCommands);\n        this.update = this.update.bind(this);\n        // Deprecated: update.extend, update.isEquals and update.newContext\n        this.update.extend = this.extend = this.extend.bind(this);\n        this.update.isEquals = function (x, y) { return x === y; };\n        this.update.newContext = function () { return new Context().update; };\n    }\n    Object.defineProperty(Context.prototype, \"isEquals\", {\n        get: function () {\n            return this.update.isEquals;\n        },\n        set: function (value) {\n            this.update.isEquals = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Context.prototype.extend = function (directive, fn) {\n        this.commands[directive] = fn;\n    };\n    Context.prototype.update = function (object, $spec) {\n        var _this = this;\n        var spec = (typeof $spec === 'function') ? { $apply: $spec } : $spec;\n        if (!(Array.isArray(object) && Array.isArray(spec))) {\n            invariant(!Array.isArray(spec), function () { return \"update(): You provided an invalid spec to update(). The spec may \" +\n                \"not contain an array except as the value of $set, $push, $unshift, \" +\n                \"$splice or any custom command allowing an array value.\"; });\n        }\n        invariant(typeof spec === 'object' && spec !== null, function () { return \"update(): You provided an invalid spec to update(). The spec and \" +\n            \"every included key path must be plain objects containing one of the \" +\n            (\"following commands: \" + Object.keys(_this.commands).join(', ') + \".\"); });\n        var nextObject = object;\n        getAllKeys(spec).forEach(function (key) {\n            if (hasOwnProperty.call(_this.commands, key)) {\n                var objectWasNextObject = object === nextObject;\n                nextObject = _this.commands[key](spec[key], nextObject, spec, object);\n                if (objectWasNextObject && _this.isEquals(nextObject, object)) {\n                    nextObject = object;\n                }\n            }\n            else {\n                var nextValueForKey = type(object) === 'Map'\n                    ? _this.update(object.get(key), spec[key])\n                    : _this.update(object[key], spec[key]);\n                var nextObjectValue = type(nextObject) === 'Map'\n                    ? nextObject.get(key)\n                    : nextObject[key];\n                if (!_this.isEquals(nextValueForKey, nextObjectValue)\n                    || typeof nextValueForKey === 'undefined'\n                        && !hasOwnProperty.call(object, key)) {\n                    if (nextObject === object) {\n                        nextObject = copy(object);\n                    }\n                    if (type(nextObject) === 'Map') {\n                        nextObject.set(key, nextValueForKey);\n                    }\n                    else {\n                        nextObject[key] = nextValueForKey;\n                    }\n                }\n            }\n        });\n        return nextObject;\n    };\n    return Context;\n}());\nexports.Context = Context;\nvar defaultCommands = {\n    $push: function (value, nextObject, spec) {\n        invariantPushAndUnshift(nextObject, spec, '$push');\n        return value.length ? nextObject.concat(value) : nextObject;\n    },\n    $unshift: function (value, nextObject, spec) {\n        invariantPushAndUnshift(nextObject, spec, '$unshift');\n        return value.length ? value.concat(nextObject) : nextObject;\n    },\n    $splice: function (value, nextObject, spec, originalObject) {\n        invariantSplices(nextObject, spec);\n        value.forEach(function (args) {\n            invariantSplice(args);\n            if (nextObject === originalObject && args.length) {\n                nextObject = copy(originalObject);\n            }\n            splice.apply(nextObject, args);\n        });\n        return nextObject;\n    },\n    $set: function (value, _nextObject, spec) {\n        invariantSet(spec);\n        return value;\n    },\n    $toggle: function (targets, nextObject) {\n        invariantSpecArray(targets, '$toggle');\n        var nextObjectCopy = targets.length ? copy(nextObject) : nextObject;\n        targets.forEach(function (target) {\n            nextObjectCopy[target] = !nextObject[target];\n        });\n        return nextObjectCopy;\n    },\n    $unset: function (value, nextObject, _spec, originalObject) {\n        invariantSpecArray(value, '$unset');\n        value.forEach(function (key) {\n            if (Object.hasOwnProperty.call(nextObject, key)) {\n                if (nextObject === originalObject) {\n                    nextObject = copy(originalObject);\n                }\n                delete nextObject[key];\n            }\n        });\n        return nextObject;\n    },\n    $add: function (values, nextObject, _spec, originalObject) {\n        invariantMapOrSet(nextObject, '$add');\n        invariantSpecArray(values, '$add');\n        if (type(nextObject) === 'Map') {\n            values.forEach(function (_a) {\n                var key = _a[0], value = _a[1];\n                if (nextObject === originalObject && nextObject.get(key) !== value) {\n                    nextObject = copy(originalObject);\n                }\n                nextObject.set(key, value);\n            });\n        }\n        else {\n            values.forEach(function (value) {\n                if (nextObject === originalObject && !nextObject.has(value)) {\n                    nextObject = copy(originalObject);\n                }\n                nextObject.add(value);\n            });\n        }\n        return nextObject;\n    },\n    $remove: function (value, nextObject, _spec, originalObject) {\n        invariantMapOrSet(nextObject, '$remove');\n        invariantSpecArray(value, '$remove');\n        value.forEach(function (key) {\n            if (nextObject === originalObject && nextObject.has(key)) {\n                nextObject = copy(originalObject);\n            }\n            nextObject.delete(key);\n        });\n        return nextObject;\n    },\n    $merge: function (value, nextObject, _spec, originalObject) {\n        invariantMerge(nextObject, value);\n        getAllKeys(value).forEach(function (key) {\n            if (value[key] !== nextObject[key]) {\n                if (nextObject === originalObject) {\n                    nextObject = copy(originalObject);\n                }\n                nextObject[key] = value[key];\n            }\n        });\n        return nextObject;\n    },\n    $apply: function (value, original) {\n        invariantApply(value);\n        return value(original);\n    },\n};\nvar defaultContext = new Context();\nexports.isEquals = defaultContext.update.isEquals;\nexports.extend = defaultContext.extend;\nexports.default = defaultContext.update;\n// @ts-ignore\nexports.default.default = module.exports = assign(exports.default, exports);\n// invariants\nfunction invariantPushAndUnshift(value, spec, command) {\n    invariant(Array.isArray(value), function () { return \"update(): expected target of \" + stringifiable(command) + \" to be an array; got \" + stringifiable(value) + \".\"; });\n    invariantSpecArray(spec[command], command);\n}\nfunction invariantSpecArray(spec, command) {\n    invariant(Array.isArray(spec), function () { return \"update(): expected spec of \" + stringifiable(command) + \" to be an array; got \" + stringifiable(spec) + \". \" +\n        \"Did you forget to wrap your parameter in an array?\"; });\n}\nfunction invariantSplices(value, spec) {\n    invariant(Array.isArray(value), function () { return \"Expected $splice target to be an array; got \" + stringifiable(value); });\n    invariantSplice(spec.$splice);\n}\nfunction invariantSplice(value) {\n    invariant(Array.isArray(value), function () { return \"update(): expected spec of $splice to be an array of arrays; got \" + stringifiable(value) + \". \" +\n        \"Did you forget to wrap your parameters in an array?\"; });\n}\nfunction invariantApply(fn) {\n    invariant(typeof fn === 'function', function () { return \"update(): expected spec of $apply to be a function; got \" + stringifiable(fn) + \".\"; });\n}\nfunction invariantSet(spec) {\n    invariant(Object.keys(spec).length === 1, function () { return \"Cannot have more than one key in an object with $set\"; });\n}\nfunction invariantMerge(target, specValue) {\n    invariant(specValue && typeof specValue === 'object', function () { return \"update(): $merge expects a spec of type 'object'; got \" + stringifiable(specValue); });\n    invariant(target && typeof target === 'object', function () { return \"update(): $merge expects a target of type 'object'; got \" + stringifiable(target); });\n}\nfunction invariantMapOrSet(target, command) {\n    var typeOfTarget = type(target);\n    invariant(typeOfTarget === 'Map' || typeOfTarget === 'Set', function () { return \"update(): \" + stringifiable(command) + \" expects a target of type Set or Map; got \" + stringifiable(typeOfTarget); });\n}\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function(style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function(node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  var errorsList = [];\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n *  https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n(function() {\n'use strict';\n\n// Exit early if we're not running in a browser.\nif (typeof window !== 'object') {\n  return;\n}\n\n// Exit early if all IntersectionObserver and IntersectionObserverEntry\n// features are natively supported.\nif ('IntersectionObserver' in window &&\n    'IntersectionObserverEntry' in window &&\n    'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n  // Minimal polyfill for Edge 15's lack of `isIntersecting`\n  // See: https://github.com/w3c/IntersectionObserver/issues/211\n  if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n    Object.defineProperty(window.IntersectionObserverEntry.prototype,\n      'isIntersecting', {\n      get: function () {\n        return this.intersectionRatio > 0;\n      }\n    });\n  }\n  return;\n}\n\n\n/**\n * A local reference to the document.\n */\nvar document = window.document;\n\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n  this.time = entry.time;\n  this.target = entry.target;\n  this.rootBounds = entry.rootBounds;\n  this.boundingClientRect = entry.boundingClientRect;\n  this.intersectionRect = entry.intersectionRect || getEmptyRect();\n  this.isIntersecting = !!entry.intersectionRect;\n\n  // Calculates the intersection ratio.\n  var targetRect = this.boundingClientRect;\n  var targetArea = targetRect.width * targetRect.height;\n  var intersectionRect = this.intersectionRect;\n  var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n  // Sets intersection ratio.\n  if (targetArea) {\n    // Round the intersection ratio to avoid floating point math issues:\n    // https://github.com/w3c/IntersectionObserver/issues/324\n    this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n  } else {\n    // If area is zero and is intersecting, sets to 1, otherwise to 0\n    this.intersectionRatio = this.isIntersecting ? 1 : 0;\n  }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n *     changes have queued. The function is not invoked if the queue has\n *     been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n  var options = opt_options || {};\n\n  if (typeof callback != 'function') {\n    throw new Error('callback must be a function');\n  }\n\n  if (options.root && options.root.nodeType != 1) {\n    throw new Error('root must be an Element');\n  }\n\n  // Binds and throttles `this._checkForIntersections`.\n  this._checkForIntersections = throttle(\n      this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n  // Private properties.\n  this._callback = callback;\n  this._observationTargets = [];\n  this._queuedEntries = [];\n  this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n  // Public properties.\n  this.thresholds = this._initThresholds(options.threshold);\n  this.root = options.root || null;\n  this.rootMargin = this._rootMarginValues.map(function(margin) {\n    return margin.value + margin.unit;\n  }).join(' ');\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n  var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n    return item.element == target;\n  });\n\n  if (isTargetAlreadyObserved) {\n    return;\n  }\n\n  if (!(target && target.nodeType == 1)) {\n    throw new Error('target must be an Element');\n  }\n\n  this._registerInstance();\n  this._observationTargets.push({element: target, entry: null});\n  this._monitorIntersections();\n  this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n  this._observationTargets =\n      this._observationTargets.filter(function(item) {\n\n    return item.element != target;\n  });\n  if (!this._observationTargets.length) {\n    this._unmonitorIntersections();\n    this._unregisterInstance();\n  }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n  this._observationTargets = [];\n  this._unmonitorIntersections();\n  this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n  var records = this._queuedEntries.slice();\n  this._queuedEntries = [];\n  return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n *     a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n  var threshold = opt_threshold || [0];\n  if (!Array.isArray(threshold)) threshold = [threshold];\n\n  return threshold.sort().filter(function(t, i, a) {\n    if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n      throw new Error('threshold must be a number between 0 and 1 inclusively');\n    }\n    return t !== a[i - 1];\n  });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n *     defaulting to '0px'.\n * @return {Array<Object>} An array of margin objects with the keys\n *     value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n  var marginString = opt_rootMargin || '0px';\n  var margins = marginString.split(/\\s+/).map(function(margin) {\n    var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n    if (!parts) {\n      throw new Error('rootMargin must be specified in pixels or percent');\n    }\n    return {value: parseFloat(parts[1]), unit: parts[2]};\n  });\n\n  // Handles shorthand.\n  margins[1] = margins[1] || margins[0];\n  margins[2] = margins[2] || margins[0];\n  margins[3] = margins[3] || margins[1];\n\n  return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function() {\n  if (!this._monitoringIntersections) {\n    this._monitoringIntersections = true;\n\n    // If a poll interval is set, use polling instead of listening to\n    // resize and scroll events or DOM mutations.\n    if (this.POLL_INTERVAL) {\n      this._monitoringInterval = setInterval(\n          this._checkForIntersections, this.POLL_INTERVAL);\n    }\n    else {\n      addEvent(window, 'resize', this._checkForIntersections, true);\n      addEvent(document, 'scroll', this._checkForIntersections, true);\n\n      if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in window) {\n        this._domObserver = new MutationObserver(this._checkForIntersections);\n        this._domObserver.observe(document, {\n          attributes: true,\n          childList: true,\n          characterData: true,\n          subtree: true\n        });\n      }\n    }\n  }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function() {\n  if (this._monitoringIntersections) {\n    this._monitoringIntersections = false;\n\n    clearInterval(this._monitoringInterval);\n    this._monitoringInterval = null;\n\n    removeEvent(window, 'resize', this._checkForIntersections, true);\n    removeEvent(document, 'scroll', this._checkForIntersections, true);\n\n    if (this._domObserver) {\n      this._domObserver.disconnect();\n      this._domObserver = null;\n    }\n  }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n  var rootIsInDom = this._rootIsInDom();\n  var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n  this._observationTargets.forEach(function(item) {\n    var target = item.element;\n    var targetRect = getBoundingClientRect(target);\n    var rootContainsTarget = this._rootContainsTarget(target);\n    var oldEntry = item.entry;\n    var intersectionRect = rootIsInDom && rootContainsTarget &&\n        this._computeTargetAndRootIntersection(target, rootRect);\n\n    var newEntry = item.entry = new IntersectionObserverEntry({\n      time: now(),\n      target: target,\n      boundingClientRect: targetRect,\n      rootBounds: rootRect,\n      intersectionRect: intersectionRect\n    });\n\n    if (!oldEntry) {\n      this._queuedEntries.push(newEntry);\n    } else if (rootIsInDom && rootContainsTarget) {\n      // If the new entry intersection ratio has crossed any of the\n      // thresholds, add a new entry.\n      if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n        this._queuedEntries.push(newEntry);\n      }\n    } else {\n      // If the root is not in the DOM or target is not contained within\n      // root but the previous entry for this target had an intersection,\n      // add a new record indicating removal.\n      if (oldEntry && oldEntry.isIntersecting) {\n        this._queuedEntries.push(newEntry);\n      }\n    }\n  }, this);\n\n  if (this._queuedEntries.length) {\n    this._callback(this.takeRecords(), this);\n  }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} rootRect The bounding rect of the root after being\n *     expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n *     intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n    function(target, rootRect) {\n\n  // If the element isn't displayed, an intersection can't happen.\n  if (window.getComputedStyle(target).display == 'none') return;\n\n  var targetRect = getBoundingClientRect(target);\n  var intersectionRect = targetRect;\n  var parent = getParentNode(target);\n  var atRoot = false;\n\n  while (!atRoot) {\n    var parentRect = null;\n    var parentComputedStyle = parent.nodeType == 1 ?\n        window.getComputedStyle(parent) : {};\n\n    // If the parent isn't displayed, an intersection can't happen.\n    if (parentComputedStyle.display == 'none') return;\n\n    if (parent == this.root || parent == document) {\n      atRoot = true;\n      parentRect = rootRect;\n    } else {\n      // If the element has a non-visible overflow, and it's not the <body>\n      // or <html> element, update the intersection rect.\n      // Note: <body> and <html> cannot be clipped to a rect that's not also\n      // the document rect, so no need to compute a new intersection.\n      if (parent != document.body &&\n          parent != document.documentElement &&\n          parentComputedStyle.overflow != 'visible') {\n        parentRect = getBoundingClientRect(parent);\n      }\n    }\n\n    // If either of the above conditionals set a new parentRect,\n    // calculate new intersection data.\n    if (parentRect) {\n      intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n\n      if (!intersectionRect) break;\n    }\n    parent = getParentNode(parent);\n  }\n  return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {Object} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n  var rootRect;\n  if (this.root) {\n    rootRect = getBoundingClientRect(this.root);\n  } else {\n    // Use <html>/<body> instead of window since scroll bars affect size.\n    var html = document.documentElement;\n    var body = document.body;\n    rootRect = {\n      top: 0,\n      left: 0,\n      right: html.clientWidth || body.clientWidth,\n      width: html.clientWidth || body.clientWidth,\n      bottom: html.clientHeight || body.clientHeight,\n      height: html.clientHeight || body.clientHeight\n    };\n  }\n  return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {Object} rect The rect object to expand.\n * @return {Object} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n  var margins = this._rootMarginValues.map(function(margin, i) {\n    return margin.unit == 'px' ? margin.value :\n        margin.value * (i % 2 ? rect.width : rect.height) / 100;\n  });\n  var newRect = {\n    top: rect.top - margins[0],\n    right: rect.right + margins[1],\n    bottom: rect.bottom + margins[2],\n    left: rect.left - margins[3]\n  };\n  newRect.width = newRect.right - newRect.left;\n  newRect.height = newRect.bottom - newRect.top;\n\n  return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n *    particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n *    particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n    function(oldEntry, newEntry) {\n\n  // To make comparing easier, an entry that has a ratio of 0\n  // but does not actually intersect is given a value of -1\n  var oldRatio = oldEntry && oldEntry.isIntersecting ?\n      oldEntry.intersectionRatio || 0 : -1;\n  var newRatio = newEntry.isIntersecting ?\n      newEntry.intersectionRatio || 0 : -1;\n\n  // Ignore unchanged ratios\n  if (oldRatio === newRatio) return;\n\n  for (var i = 0; i < this.thresholds.length; i++) {\n    var threshold = this.thresholds[i];\n\n    // Return true if an entry matches a threshold or if the new ratio\n    // and the old ratio are on the opposite sides of a threshold.\n    if (threshold == oldRatio || threshold == newRatio ||\n        threshold < oldRatio !== threshold < newRatio) {\n      return true;\n    }\n  }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n  return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n  return containsDeep(this.root || document, target);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n  if (registry.indexOf(this) < 0) {\n    registry.push(this);\n  }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n  var index = registry.indexOf(this);\n  if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n  return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n *     function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n  var timer = null;\n  return function () {\n    if (!timer) {\n      timer = setTimeout(function() {\n        fn();\n        timer = null;\n      }, timeout);\n    }\n  };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n *     phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n  if (typeof node.addEventListener == 'function') {\n    node.addEventListener(event, fn, opt_useCapture || false);\n  }\n  else if (typeof node.attachEvent == 'function') {\n    node.attachEvent('on' + event, fn);\n  }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n *     flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n  if (typeof node.removeEventListener == 'function') {\n    node.removeEventListener(event, fn, opt_useCapture || false);\n  }\n  else if (typeof node.detatchEvent == 'function') {\n    node.detatchEvent('on' + event, fn);\n  }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object} The intersection rect or undefined if no intersection\n *     is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n  var top = Math.max(rect1.top, rect2.top);\n  var bottom = Math.min(rect1.bottom, rect2.bottom);\n  var left = Math.max(rect1.left, rect2.left);\n  var right = Math.min(rect1.right, rect2.right);\n  var width = right - left;\n  var height = bottom - top;\n\n  return (width >= 0 && height >= 0) && {\n    top: top,\n    bottom: bottom,\n    left: left,\n    right: right,\n    width: width,\n    height: height\n  };\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {Object} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n  var rect;\n\n  try {\n    rect = el.getBoundingClientRect();\n  } catch (err) {\n    // Ignore Windows 7 IE11 \"Unspecified error\"\n    // https://github.com/w3c/IntersectionObserver/pull/205\n  }\n\n  if (!rect) return getEmptyRect();\n\n  // Older IE\n  if (!(rect.width && rect.height)) {\n    rect = {\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      width: rect.right - rect.left,\n      height: rect.bottom - rect.top\n    };\n  }\n  return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {Object} The empty rect.\n */\nfunction getEmptyRect() {\n  return {\n    top: 0,\n    bottom: 0,\n    left: 0,\n    right: 0,\n    width: 0,\n    height: 0\n  };\n}\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n  var node = child;\n  while (node) {\n    if (node == parent) return true;\n\n    node = getParentNode(node);\n  }\n  return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n  var parent = node.parentNode;\n\n  if (parent && parent.nodeType == 11 && parent.host) {\n    // If the parent is a shadow root, return the host element.\n    return parent.host;\n  }\n\n  if (parent && parent.assignedSlot) {\n    // If the parent is distributed in a <slot>, return the parent of a slot.\n    return parent.assignedSlot.parentNode;\n  }\n\n  return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}());\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","/**\r\n * Returns the object type of the given payload\r\n *\r\n * @param {*} payload\r\n * @returns {string}\r\n */\r\nfunction getType(payload) {\r\n    return Object.prototype.toString.call(payload).slice(8, -1);\r\n}\r\n/**\r\n * Returns whether the payload is undefined\r\n *\r\n * @param {*} payload\r\n * @returns {payload is undefined}\r\n */\r\nfunction isUndefined(payload) {\r\n    return getType(payload) === 'Undefined';\r\n}\r\n/**\r\n * Returns whether the payload is null\r\n *\r\n * @param {*} payload\r\n * @returns {payload is null}\r\n */\r\nfunction isNull(payload) {\r\n    return getType(payload) === 'Null';\r\n}\r\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isPlainObject(payload) {\r\n    if (getType(payload) !== 'Object')\r\n        return false;\r\n    return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype;\r\n}\r\n/**\r\n * Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isObject(payload) {\r\n    return isPlainObject(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is { [K in any]: never }}\r\n */\r\nfunction isEmptyObject(payload) {\r\n    return isPlainObject(payload) && Object.keys(payload).length === 0;\r\n}\r\n/**\r\n * Returns whether the payload is a an empty object (excluding special classes or objects with other prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isFullObject(payload) {\r\n    return isPlainObject(payload) && Object.keys(payload).length > 0;\r\n}\r\n/**\r\n * Returns whether the payload is an any kind of object (including special classes or objects with different prototypes)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is PlainObject}\r\n */\r\nfunction isAnyObject(payload) {\r\n    return getType(payload) === 'Object';\r\n}\r\n/**\r\n * Returns whether the payload is an object like a type passed in < >\r\n *\r\n * Usage: isObjectLike<{id: any}>(payload) // will make sure it's an object and has an `id` prop.\r\n *\r\n * @template T this must be passed in < >\r\n * @param {*} payload\r\n * @returns {payload is T}\r\n */\r\nfunction isObjectLike(payload) {\r\n    return isAnyObject(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a function (regular or async)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is AnyFunction}\r\n */\r\nfunction isFunction(payload) {\r\n    return typeof payload === 'function';\r\n}\r\n/**\r\n * Returns whether the payload is an array\r\n *\r\n * @param {any} payload\r\n * @returns {payload is any[]}\r\n */\r\nfunction isArray(payload) {\r\n    return getType(payload) === 'Array';\r\n}\r\n/**\r\n * Returns whether the payload is a an array with at least 1 item\r\n *\r\n * @param {*} payload\r\n * @returns {payload is any[]}\r\n */\r\nfunction isFullArray(payload) {\r\n    return isArray(payload) && payload.length > 0;\r\n}\r\n/**\r\n * Returns whether the payload is a an empty array\r\n *\r\n * @param {*} payload\r\n * @returns {payload is []}\r\n */\r\nfunction isEmptyArray(payload) {\r\n    return isArray(payload) && payload.length === 0;\r\n}\r\n/**\r\n * Returns whether the payload is a string\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isString(payload) {\r\n    return getType(payload) === 'String';\r\n}\r\n/**\r\n * Returns whether the payload is a string, BUT returns false for ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isFullString(payload) {\r\n    return isString(payload) && payload !== '';\r\n}\r\n/**\r\n * Returns whether the payload is ''\r\n *\r\n * @param {*} payload\r\n * @returns {payload is string}\r\n */\r\nfunction isEmptyString(payload) {\r\n    return payload === '';\r\n}\r\n/**\r\n * Returns whether the payload is a number (but not NaN)\r\n *\r\n * This will return `false` for `NaN`!!\r\n *\r\n * @param {*} payload\r\n * @returns {payload is number}\r\n */\r\nfunction isNumber(payload) {\r\n    return getType(payload) === 'Number' && !isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a boolean\r\n *\r\n * @param {*} payload\r\n * @returns {payload is boolean}\r\n */\r\nfunction isBoolean(payload) {\r\n    return getType(payload) === 'Boolean';\r\n}\r\n/**\r\n * Returns whether the payload is a regular expression (RegExp)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is RegExp}\r\n */\r\nfunction isRegExp(payload) {\r\n    return getType(payload) === 'RegExp';\r\n}\r\n/**\r\n * Returns whether the payload is a Map\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Map<any, any>}\r\n */\r\nfunction isMap(payload) {\r\n    return getType(payload) === 'Map';\r\n}\r\n/**\r\n * Returns whether the payload is a WeakMap\r\n *\r\n * @param {*} payload\r\n * @returns {payload is WeakMap<any, any>}\r\n */\r\nfunction isWeakMap(payload) {\r\n    return getType(payload) === 'WeakMap';\r\n}\r\n/**\r\n * Returns whether the payload is a Set\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Set<any>}\r\n */\r\nfunction isSet(payload) {\r\n    return getType(payload) === 'Set';\r\n}\r\n/**\r\n * Returns whether the payload is a WeakSet\r\n *\r\n * @param {*} payload\r\n * @returns {payload is WeakSet<any>}\r\n */\r\nfunction isWeakSet(payload) {\r\n    return getType(payload) === 'WeakSet';\r\n}\r\n/**\r\n * Returns whether the payload is a Symbol\r\n *\r\n * @param {*} payload\r\n * @returns {payload is symbol}\r\n */\r\nfunction isSymbol(payload) {\r\n    return getType(payload) === 'Symbol';\r\n}\r\n/**\r\n * Returns whether the payload is a Date, and that the date is valid\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Date}\r\n */\r\nfunction isDate(payload) {\r\n    return getType(payload) === 'Date' && !isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a Blob\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Blob}\r\n */\r\nfunction isBlob(payload) {\r\n    return getType(payload) === 'Blob';\r\n}\r\n/**\r\n * Returns whether the payload is a File\r\n *\r\n * @param {*} payload\r\n * @returns {payload is File}\r\n */\r\nfunction isFile(payload) {\r\n    return getType(payload) === 'File';\r\n}\r\n/**\r\n * Returns whether the payload is a Promise\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Promise<any>}\r\n */\r\nfunction isPromise(payload) {\r\n    return getType(payload) === 'Promise';\r\n}\r\n/**\r\n * Returns whether the payload is an Error\r\n *\r\n * @param {*} payload\r\n * @returns {payload is Error}\r\n */\r\nfunction isError(payload) {\r\n    return getType(payload) === 'Error';\r\n}\r\n/**\r\n * Returns whether the payload is literally the value `NaN` (it's `NaN` and also a `number`)\r\n *\r\n * @param {*} payload\r\n * @returns {payload is typeof NaN}\r\n */\r\nfunction isNaNValue(payload) {\r\n    return getType(payload) === 'Number' && isNaN(payload);\r\n}\r\n/**\r\n * Returns whether the payload is a primitive type (eg. Boolean | Null | Undefined | Number | String | Symbol)\r\n *\r\n * @param {*} payload\r\n * @returns {(payload is boolean | null | undefined | number | string | symbol)}\r\n */\r\nfunction isPrimitive(payload) {\r\n    return (isBoolean(payload) ||\r\n        isNull(payload) ||\r\n        isUndefined(payload) ||\r\n        isNumber(payload) ||\r\n        isString(payload) ||\r\n        isSymbol(payload));\r\n}\r\n/**\r\n * Returns true whether the payload is null or undefined\r\n *\r\n * @param {*} payload\r\n * @returns {(payload is null | undefined)}\r\n */\r\nvar isNullOrUndefined = isOneOf(isNull, isUndefined);\r\nfunction isOneOf(a, b, c, d, e) {\r\n    return function (value) {\r\n        return a(value) || b(value) || (!!c && c(value)) || (!!d && d(value)) || (!!e && e(value));\r\n    };\r\n}\r\n/**\r\n * Does a generic check to check that the given payload is of a given type.\r\n * In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);\r\n * It will, however, differentiate between object and null\r\n *\r\n * @template T\r\n * @param {*} payload\r\n * @param {T} type\r\n * @throws {TypeError} Will throw type error if type is an invalid type\r\n * @returns {payload is T}\r\n */\r\nfunction isType(payload, type) {\r\n    if (!(type instanceof Function)) {\r\n        throw new TypeError('Type must be a function');\r\n    }\r\n    if (!Object.prototype.hasOwnProperty.call(type, 'prototype')) {\r\n        throw new TypeError('Type is not a class');\r\n    }\r\n    // Classes usually have names (as functions usually have names)\r\n    var name = type.name;\r\n    return getType(payload) === name || Boolean(payload && payload.constructor === type);\r\n}\n\nexport { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isMap, isNaNValue, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };\n","module.exports = self.fetch || (self.fetch = require('unfetch').default || require('unfetch'));\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.loop = exports.conditional = exports.parse = void 0;\n\nvar parse = function parse(stream, schema) {\n  var result = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n  var parent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : result;\n\n  if (Array.isArray(schema)) {\n    schema.forEach(function (partSchema) {\n      return parse(stream, partSchema, result, parent);\n    });\n  } else if (typeof schema === 'function') {\n    schema(stream, result, parent, parse);\n  } else {\n    var key = Object.keys(schema)[0];\n\n    if (Array.isArray(schema[key])) {\n      parent[key] = {};\n      parse(stream, schema[key], result, parent[key]);\n    } else {\n      parent[key] = schema[key](stream, result, parent, parse);\n    }\n  }\n\n  return result;\n};\n\nexports.parse = parse;\n\nvar conditional = function conditional(schema, conditionFunc) {\n  return function (stream, result, parent, parse) {\n    if (conditionFunc(stream, result, parent)) {\n      parse(stream, schema, result, parent);\n    }\n  };\n};\n\nexports.conditional = conditional;\n\nvar loop = function loop(schema, continueFunc) {\n  return function (stream, result, parent, parse) {\n    var arr = [];\n    var lastStreamPos = stream.pos;\n\n    while (continueFunc(stream, result, parent)) {\n      var newParent = {};\n      parse(stream, schema, result, newParent); // cases when whole file is parsed but no termination is there and stream position is not getting updated as well\n      // it falls into infinite recursion, null check to avoid the same\n\n      if (stream.pos === lastStreamPos) {\n        break;\n      }\n\n      lastStreamPos = stream.pos;\n      arr.push(newParent);\n    }\n\n    return arr;\n  };\n};\n\nexports.loop = loop;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.readBits = exports.readArray = exports.readUnsigned = exports.readString = exports.peekBytes = exports.readBytes = exports.peekByte = exports.readByte = exports.buildStream = void 0;\n\n// Default stream and parsers for Uint8TypedArray data type\nvar buildStream = function buildStream(uint8Data) {\n  return {\n    data: uint8Data,\n    pos: 0\n  };\n};\n\nexports.buildStream = buildStream;\n\nvar readByte = function readByte() {\n  return function (stream) {\n    return stream.data[stream.pos++];\n  };\n};\n\nexports.readByte = readByte;\n\nvar peekByte = function peekByte() {\n  var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n  return function (stream) {\n    return stream.data[stream.pos + offset];\n  };\n};\n\nexports.peekByte = peekByte;\n\nvar readBytes = function readBytes(length) {\n  return function (stream) {\n    return stream.data.subarray(stream.pos, stream.pos += length);\n  };\n};\n\nexports.readBytes = readBytes;\n\nvar peekBytes = function peekBytes(length) {\n  return function (stream) {\n    return stream.data.subarray(stream.pos, stream.pos + length);\n  };\n};\n\nexports.peekBytes = peekBytes;\n\nvar readString = function readString(length) {\n  return function (stream) {\n    return Array.from(readBytes(length)(stream)).map(function (value) {\n      return String.fromCharCode(value);\n    }).join('');\n  };\n};\n\nexports.readString = readString;\n\nvar readUnsigned = function readUnsigned(littleEndian) {\n  return function (stream) {\n    var bytes = readBytes(2)(stream);\n    return littleEndian ? (bytes[1] << 8) + bytes[0] : (bytes[0] << 8) + bytes[1];\n  };\n};\n\nexports.readUnsigned = readUnsigned;\n\nvar readArray = function readArray(byteSize, totalOrFunc) {\n  return function (stream, result, parent) {\n    var total = typeof totalOrFunc === 'function' ? totalOrFunc(stream, result, parent) : totalOrFunc;\n    var parser = readBytes(byteSize);\n    var arr = new Array(total);\n\n    for (var i = 0; i < total; i++) {\n      arr[i] = parser(stream);\n    }\n\n    return arr;\n  };\n};\n\nexports.readArray = readArray;\n\nvar subBitsTotal = function subBitsTotal(bits, startIndex, length) {\n  var result = 0;\n\n  for (var i = 0; i < length; i++) {\n    result += bits[startIndex + i] && Math.pow(2, length - i - 1);\n  }\n\n  return result;\n};\n\nvar readBits = function readBits(schema) {\n  return function (stream) {\n    var _byte = readByte()(stream); // convert the byte to bit array\n\n\n    var bits = new Array(8);\n\n    for (var i = 0; i < 8; i++) {\n      bits[7 - i] = !!(_byte & 1 << i);\n    } // convert the bit array to values based on the schema\n\n\n    return Object.keys(schema).reduce(function (res, key) {\n      var def = schema[key];\n\n      if (def.length) {\n        res[key] = subBitsTotal(bits, def.index, def.length);\n      } else {\n        res[key] = bits[def.index];\n      }\n\n      return res;\n    }, {});\n  };\n};\n\nexports.readBits = readBits;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _ = require(\"../\");\n\nvar _uint = require(\"../parsers/uint8\");\n\n// a set of 0x00 terminated subblocks\nvar subBlocksSchema = {\n  blocks: function blocks(stream) {\n    var terminator = 0x00;\n    var chunks = [];\n    var streamSize = stream.data.length;\n    var total = 0;\n\n    for (var size = (0, _uint.readByte)()(stream); size !== terminator; size = (0, _uint.readByte)()(stream)) {\n      // size becomes undefined for some case when file is corrupted and  terminator is not proper \n      // null check to avoid recursion\n      if (!size) break; // catch corrupted files with no terminator\n\n      if (stream.pos + size >= streamSize) {\n        var availableSize = streamSize - stream.pos;\n        chunks.push((0, _uint.readBytes)(availableSize)(stream));\n        total += availableSize;\n        break;\n      }\n\n      chunks.push((0, _uint.readBytes)(size)(stream));\n      total += size;\n    }\n\n    var result = new Uint8Array(total);\n    var offset = 0;\n\n    for (var i = 0; i < chunks.length; i++) {\n      result.set(chunks[i], offset);\n      offset += chunks[i].length;\n    }\n\n    return result;\n  }\n}; // global control extension\n\nvar gceSchema = (0, _.conditional)({\n  gce: [{\n    codes: (0, _uint.readBytes)(2)\n  }, {\n    byteSize: (0, _uint.readByte)()\n  }, {\n    extras: (0, _uint.readBits)({\n      future: {\n        index: 0,\n        length: 3\n      },\n      disposal: {\n        index: 3,\n        length: 3\n      },\n      userInput: {\n        index: 6\n      },\n      transparentColorGiven: {\n        index: 7\n      }\n    })\n  }, {\n    delay: (0, _uint.readUnsigned)(true)\n  }, {\n    transparentColorIndex: (0, _uint.readByte)()\n  }, {\n    terminator: (0, _uint.readByte)()\n  }]\n}, function (stream) {\n  var codes = (0, _uint.peekBytes)(2)(stream);\n  return codes[0] === 0x21 && codes[1] === 0xf9;\n}); // image pipeline block\n\nvar imageSchema = (0, _.conditional)({\n  image: [{\n    code: (0, _uint.readByte)()\n  }, {\n    descriptor: [{\n      left: (0, _uint.readUnsigned)(true)\n    }, {\n      top: (0, _uint.readUnsigned)(true)\n    }, {\n      width: (0, _uint.readUnsigned)(true)\n    }, {\n      height: (0, _uint.readUnsigned)(true)\n    }, {\n      lct: (0, _uint.readBits)({\n        exists: {\n          index: 0\n        },\n        interlaced: {\n          index: 1\n        },\n        sort: {\n          index: 2\n        },\n        future: {\n          index: 3,\n          length: 2\n        },\n        size: {\n          index: 5,\n          length: 3\n        }\n      })\n    }]\n  }, (0, _.conditional)({\n    lct: (0, _uint.readArray)(3, function (stream, result, parent) {\n      return Math.pow(2, parent.descriptor.lct.size + 1);\n    })\n  }, function (stream, result, parent) {\n    return parent.descriptor.lct.exists;\n  }), {\n    data: [{\n      minCodeSize: (0, _uint.readByte)()\n    }, subBlocksSchema]\n  }]\n}, function (stream) {\n  return (0, _uint.peekByte)()(stream) === 0x2c;\n}); // plain text block\n\nvar textSchema = (0, _.conditional)({\n  text: [{\n    codes: (0, _uint.readBytes)(2)\n  }, {\n    blockSize: (0, _uint.readByte)()\n  }, {\n    preData: function preData(stream, result, parent) {\n      return (0, _uint.readBytes)(parent.text.blockSize)(stream);\n    }\n  }, subBlocksSchema]\n}, function (stream) {\n  var codes = (0, _uint.peekBytes)(2)(stream);\n  return codes[0] === 0x21 && codes[1] === 0x01;\n}); // application block\n\nvar applicationSchema = (0, _.conditional)({\n  application: [{\n    codes: (0, _uint.readBytes)(2)\n  }, {\n    blockSize: (0, _uint.readByte)()\n  }, {\n    id: function id(stream, result, parent) {\n      return (0, _uint.readString)(parent.blockSize)(stream);\n    }\n  }, subBlocksSchema]\n}, function (stream) {\n  var codes = (0, _uint.peekBytes)(2)(stream);\n  return codes[0] === 0x21 && codes[1] === 0xff;\n}); // comment block\n\nvar commentSchema = (0, _.conditional)({\n  comment: [{\n    codes: (0, _uint.readBytes)(2)\n  }, subBlocksSchema]\n}, function (stream) {\n  var codes = (0, _uint.peekBytes)(2)(stream);\n  return codes[0] === 0x21 && codes[1] === 0xfe;\n});\nvar schema = [{\n  header: [{\n    signature: (0, _uint.readString)(3)\n  }, {\n    version: (0, _uint.readString)(3)\n  }]\n}, {\n  lsd: [{\n    width: (0, _uint.readUnsigned)(true)\n  }, {\n    height: (0, _uint.readUnsigned)(true)\n  }, {\n    gct: (0, _uint.readBits)({\n      exists: {\n        index: 0\n      },\n      resolution: {\n        index: 1,\n        length: 3\n      },\n      sort: {\n        index: 4\n      },\n      size: {\n        index: 5,\n        length: 3\n      }\n    })\n  }, {\n    backgroundColorIndex: (0, _uint.readByte)()\n  }, {\n    pixelAspectRatio: (0, _uint.readByte)()\n  }]\n}, (0, _.conditional)({\n  gct: (0, _uint.readArray)(3, function (stream, result) {\n    return Math.pow(2, result.lsd.gct.size + 1);\n  })\n}, function (stream, result) {\n  return result.lsd.gct.exists;\n}), // content frames\n{\n  frames: (0, _.loop)([gceSchema, applicationSchema, commentSchema, imageSchema, textSchema], function (stream) {\n    var nextCode = (0, _uint.peekByte)()(stream); // rather than check for a terminator, we should check for the existence\n    // of an ext or image block to avoid infinite loops\n    //var terminator = 0x3B;\n    //return nextCode !== terminator;\n\n    return nextCode === 0x21 || nextCode === 0x2c;\n  })\n}];\nvar _default = schema;\nexports[\"default\"] = _default;","module.exports = require('./lib/linkify-html').default;\n","'use strict';\n\nexports.__esModule = true;\nexports.default = linkifyHtml;\n\nvar _simpleHtmlTokenizer = require('./simple-html-tokenizer');\n\nvar _simpleHtmlTokenizer2 = _interopRequireDefault(_simpleHtmlTokenizer);\n\nvar _linkify = require('./linkify');\n\nvar linkify = _interopRequireWildcard(_linkify);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar options = linkify.options;\nvar Options = options.Options;\n\n\nvar StartTag = 'StartTag';\nvar EndTag = 'EndTag';\nvar Chars = 'Chars';\nvar Comment = 'Comment';\n\n/**\n\t`tokens` and `token` in this section refer to tokens generated by the HTML\n\tparser.\n*/\nfunction linkifyHtml(str) {\n\tvar opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\tvar tokens = _simpleHtmlTokenizer2.default.tokenize(str);\n\tvar linkifiedTokens = [];\n\tvar linkified = [];\n\tvar i;\n\n\topts = new Options(opts);\n\n\t// Linkify the tokens given by the parser\n\tfor (i = 0; i < tokens.length; i++) {\n\t\tvar token = tokens[i];\n\n\t\tif (token.type === StartTag) {\n\t\t\tlinkifiedTokens.push(token);\n\n\t\t\t// Ignore all the contents of ignored tags\n\t\t\tvar tagName = token.tagName.toUpperCase();\n\t\t\tvar isIgnored = tagName === 'A' || options.contains(opts.ignoreTags, tagName);\n\t\t\tif (!isIgnored) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar preskipLen = linkifiedTokens.length;\n\t\t\tskipTagTokens(tagName, tokens, ++i, linkifiedTokens);\n\t\t\ti += linkifiedTokens.length - preskipLen - 1;\n\t\t\tcontinue;\n\t\t} else if (token.type !== Chars) {\n\t\t\t// Skip this token, it's not important\n\t\t\tlinkifiedTokens.push(token);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Valid text token, linkify it!\n\t\tvar linkifedChars = linkifyChars(token.chars, opts);\n\t\tlinkifiedTokens.push.apply(linkifiedTokens, linkifedChars);\n\t}\n\n\t// Convert the tokens back into a string\n\tfor (i = 0; i < linkifiedTokens.length; i++) {\n\t\tvar _token = linkifiedTokens[i];\n\t\tswitch (_token.type) {\n\t\t\tcase StartTag:\n\t\t\t\t{\n\t\t\t\t\tvar link = '<' + _token.tagName;\n\t\t\t\t\tif (_token.attributes.length > 0) {\n\t\t\t\t\t\tvar attrs = attrsToStrings(_token.attributes);\n\t\t\t\t\t\tlink += ' ' + attrs.join(' ');\n\t\t\t\t\t}\n\t\t\t\t\tlink += '>';\n\t\t\t\t\tlinkified.push(link);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tcase EndTag:\n\t\t\t\tlinkified.push('</' + _token.tagName + '>');\n\t\t\t\tbreak;\n\t\t\tcase Chars:\n\t\t\t\tlinkified.push(escapeText(_token.chars));\n\t\t\t\tbreak;\n\t\t\tcase Comment:\n\t\t\t\tlinkified.push('<!--' + escapeText(_token.chars) + '-->');\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn linkified.join('');\n}\n\n/**\n\t`tokens` and `token` in this section referes to tokens returned by\n\t`linkify.tokenize`. `linkified` will contain HTML Parser-style tokens\n*/\nfunction linkifyChars(str, opts) {\n\tvar tokens = linkify.tokenize(str);\n\tvar result = [];\n\n\tfor (var i = 0; i < tokens.length; i++) {\n\t\tvar token = tokens[i];\n\n\t\tif (token.type === 'nl' && opts.nl2br) {\n\t\t\tresult.push({\n\t\t\t\ttype: StartTag,\n\t\t\t\ttagName: 'br',\n\t\t\t\tattributes: [],\n\t\t\t\tselfClosing: true\n\t\t\t});\n\t\t\tcontinue;\n\t\t} else if (!token.isLink || !opts.check(token)) {\n\t\t\tresult.push({ type: Chars, chars: token.toString() });\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar _opts$resolve = opts.resolve(token),\n\t\t    formatted = _opts$resolve.formatted,\n\t\t    formattedHref = _opts$resolve.formattedHref,\n\t\t    tagName = _opts$resolve.tagName,\n\t\t    className = _opts$resolve.className,\n\t\t    target = _opts$resolve.target,\n\t\t    attributes = _opts$resolve.attributes;\n\n\t\t// Build up attributes\n\n\n\t\tvar attributeArray = [['href', formattedHref]];\n\n\t\tif (className) {\n\t\t\tattributeArray.push(['class', className]);\n\t\t}\n\n\t\tif (target) {\n\t\t\tattributeArray.push(['target', target]);\n\t\t}\n\n\t\tfor (var attr in attributes) {\n\t\t\tattributeArray.push([attr, attributes[attr]]);\n\t\t}\n\n\t\t// Add the required tokens\n\t\tresult.push({\n\t\t\ttype: StartTag,\n\t\t\ttagName: tagName,\n\t\t\tattributes: attributeArray,\n\t\t\tselfClosing: false\n\t\t});\n\t\tresult.push({ type: Chars, chars: formatted });\n\t\tresult.push({ type: EndTag, tagName: tagName });\n\t}\n\n\treturn result;\n}\n\n/**\n\tReturns a list of tokens skipped until the closing tag of tagName.\n\n\t* `tagName` is the closing tag which will prompt us to stop skipping\n\t* `tokens` is the array of tokens generated by HTML5Tokenizer which\n\t* `i` is the index immediately after the opening tag to skip\n\t* `skippedTokens` is an array which skipped tokens are being pushed into\n\n\tCaveats\n\n\t* Assumes that i is the first token after the given opening tagName\n\t* The closing tag will be skipped, but nothing after it\n\t* Will track whether there is a nested tag of the same type\n*/\nfunction skipTagTokens(tagName, tokens, i, skippedTokens) {\n\n\t// number of tokens of this type on the [fictional] stack\n\tvar stackCount = 1;\n\n\twhile (i < tokens.length && stackCount > 0) {\n\t\tvar token = tokens[i];\n\n\t\tif (token.type === StartTag && token.tagName.toUpperCase() === tagName) {\n\t\t\t// Nested tag of the same type, \"add to stack\"\n\t\t\tstackCount++;\n\t\t} else if (token.type === EndTag && token.tagName.toUpperCase() === tagName) {\n\t\t\t// Closing tag\n\t\t\tstackCount--;\n\t\t}\n\n\t\tskippedTokens.push(token);\n\t\ti++;\n\t}\n\n\t// Note that if stackCount > 0 here, the HTML is probably invalid\n\treturn skippedTokens;\n}\n\nfunction escapeText(text) {\n\t// Not required, HTML tokenizer ensures this occurs properly\n\treturn text;\n}\n\nfunction escapeAttr(attr) {\n\treturn attr.replace(/\"/g, '&quot;');\n}\n\nfunction attrsToStrings(attrs) {\n\tvar attrStrs = [];\n\tfor (var i = 0; i < attrs.length; i++) {\n\t\tvar _attrs$i = attrs[i],\n\t\t    name = _attrs$i[0],\n\t\t    value = _attrs$i[1];\n\n\t\tattrStrs.push(name + '=\"' + escapeAttr(value) + '\"');\n\t}\n\treturn attrStrs;\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _linkify = require('./linkify');\n\nvar linkify = _interopRequireWildcard(_linkify);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar options = linkify.options;\nvar Options = options.Options;\n\n// Given a string, converts to an array of valid React components\n// (which may include strings)\n\nfunction stringToElements(str, opts) {\n\n\tvar tokens = linkify.tokenize(str);\n\tvar elements = [];\n\tvar linkId = 0;\n\n\tfor (var i = 0; i < tokens.length; i++) {\n\t\tvar token = tokens[i];\n\n\t\tif (token.type === 'nl' && opts.nl2br) {\n\t\t\telements.push(_react2.default.createElement('br', { key: 'linkified-' + ++linkId }));\n\t\t\tcontinue;\n\t\t} else if (!token.isLink || !opts.check(token)) {\n\t\t\t// Regular text\n\t\t\telements.push(token.toString());\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar _opts$resolve = opts.resolve(token),\n\t\t    formatted = _opts$resolve.formatted,\n\t\t    formattedHref = _opts$resolve.formattedHref,\n\t\t    tagName = _opts$resolve.tagName,\n\t\t    className = _opts$resolve.className,\n\t\t    target = _opts$resolve.target,\n\t\t    attributes = _opts$resolve.attributes;\n\n\t\tvar props = {\n\t\t\tkey: 'linkified-' + ++linkId,\n\t\t\thref: formattedHref\n\t\t};\n\n\t\tif (className) {\n\t\t\tprops.className = className;\n\t\t}\n\n\t\tif (target) {\n\t\t\tprops.target = target;\n\t\t}\n\n\t\t// Build up additional attributes\n\t\t// Support for events via attributes hash\n\t\tif (attributes) {\n\t\t\tfor (var attr in attributes) {\n\t\t\t\tprops[attr] = attributes[attr];\n\t\t\t}\n\t\t}\n\n\t\telements.push(_react2.default.createElement(tagName, props, formatted));\n\t}\n\n\treturn elements;\n}\n\n// Recursively linkify the contents of the given React Element instance\nfunction linkifyReactElement(element, opts) {\n\tvar elementId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n\tif (_react2.default.Children.count(element.props.children) === 0) {\n\t\t// No need to clone if the element had no children\n\t\treturn element;\n\t}\n\n\tvar children = [];\n\n\t_react2.default.Children.forEach(element.props.children, function (child) {\n\t\tif (typeof child === 'string') {\n\t\t\t// ensure that we always generate unique element IDs for keys\n\t\t\telementId = elementId + 1;\n\t\t\tchildren.push.apply(children, stringToElements(child, opts));\n\t\t} else if (_react2.default.isValidElement(child)) {\n\t\t\tif (typeof child.type === 'string' && options.contains(opts.ignoreTags, child.type.toUpperCase())) {\n\t\t\t\t// Don't linkify this element\n\t\t\t\tchildren.push(child);\n\t\t\t} else {\n\t\t\t\tchildren.push(linkifyReactElement(child, opts, ++elementId));\n\t\t\t}\n\t\t} else {\n\t\t\t// Unknown element type, just push\n\t\t\tchildren.push(child);\n\t\t}\n\t});\n\n\t// Set a default unique key, copy over remaining props\n\tvar newProps = { key: 'linkified-element-' + elementId };\n\tfor (var prop in element.props) {\n\t\tnewProps[prop] = element.props[prop];\n\t}\n\n\treturn _react2.default.cloneElement(element, newProps, children);\n}\n\nvar Linkify = function (_React$Component) {\n\t_inherits(Linkify, _React$Component);\n\n\tfunction Linkify() {\n\t\t_classCallCheck(this, Linkify);\n\n\t\treturn _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n\t}\n\n\tLinkify.prototype.render = function render() {\n\t\t// Copy over all non-linkify-specific props\n\t\tvar newProps = { key: 'linkified-element-0' };\n\t\tfor (var prop in this.props) {\n\t\t\tif (prop !== 'options' && prop !== 'tagName') {\n\t\t\t\tnewProps[prop] = this.props[prop];\n\t\t\t}\n\t\t}\n\n\t\tvar opts = new Options(this.props.options);\n\t\tvar tagName = this.props.tagName || 'span';\n\t\tvar element = _react2.default.createElement(tagName, newProps);\n\n\t\treturn linkifyReactElement(element, opts, 0);\n\t};\n\n\treturn Linkify;\n}(_react2.default.Component);\n\nexports.default = Linkify;","'use strict';\n\nexports.__esModule = true;\nexports.tokenize = exports.test = exports.scanner = exports.parser = exports.options = exports.inherits = exports.find = undefined;\n\nvar _class = require('./linkify/utils/class');\n\nvar _options = require('./linkify/utils/options');\n\nvar options = _interopRequireWildcard(_options);\n\nvar _scanner = require('./linkify/core/scanner');\n\nvar scanner = _interopRequireWildcard(_scanner);\n\nvar _parser = require('./linkify/core/parser');\n\nvar parser = _interopRequireWildcard(_parser);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nif (!Array.isArray) {\n\tArray.isArray = function (arg) {\n\t\treturn Object.prototype.toString.call(arg) === '[object Array]';\n\t};\n}\n\n/**\n\tConverts a string into tokens that represent linkable and non-linkable bits\n\t@method tokenize\n\t@param {String} str\n\t@return {Array} tokens\n*/\nvar tokenize = function tokenize(str) {\n\treturn parser.run(scanner.run(str));\n};\n\n/**\n\tReturns a list of linkable items in the given string.\n*/\nvar find = function find(str) {\n\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\tvar tokens = tokenize(str);\n\tvar filtered = [];\n\n\tfor (var i = 0; i < tokens.length; i++) {\n\t\tvar token = tokens[i];\n\t\tif (token.isLink && (!type || token.type === type)) {\n\t\t\tfiltered.push(token.toObject());\n\t\t}\n\t}\n\n\treturn filtered;\n};\n\n/**\n\tIs the given string valid linkable text of some sort\n\tNote that this does not trim the text for you.\n\n\tOptionally pass in a second `type` param, which is the type of link to test\n\tfor.\n\n\tFor example,\n\n\t\ttest(str, 'email');\n\n\tWill return `true` if str is a valid email.\n*/\nvar test = function test(str) {\n\tvar type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\tvar tokens = tokenize(str);\n\treturn tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].type === type);\n};\n\n// Scanner and parser provide states and tokens for the lexicographic stage\n// (will be used to add additional link types)\nexports.find = find;\nexports.inherits = _class.inherits;\nexports.options = options;\nexports.parser = parser;\nexports.scanner = scanner;\nexports.test = test;\nexports.tokenize = tokenize;","'use strict';\n\nexports.__esModule = true;\nexports.start = exports.run = exports.TOKENS = exports.State = undefined;\n\nvar _state = require('./state');\n\nvar _multi = require('./tokens/multi');\n\nvar MULTI_TOKENS = _interopRequireWildcard(_multi);\n\nvar _text = require('./tokens/text');\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n/**\n\tNot exactly parser, more like the second-stage scanner (although we can\n\ttheoretically hotswap the code here with a real parser in the future... but\n\tfor a little URL-finding utility abstract syntax trees may be a little\n\toverkill).\n\n\tURL format: http://en.wikipedia.org/wiki/URI_scheme\n\tEmail format: http://en.wikipedia.org/wiki/Email_address (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main parser\n*/\n\nvar makeState = function makeState(tokenClass) {\n\treturn new _state.TokenState(tokenClass);\n};\n\n// The universal starting state.\nvar S_START = makeState();\n\n// Intermediate states for URLs. Note that domains that begin with a protocol\n// are treated slighly differently from those that don't.\nvar S_PROTOCOL = makeState(); // e.g., 'http:'\nvar S_MAILTO = makeState(); // 'mailto:'\nvar S_PROTOCOL_SLASH = makeState(); // e.g., '/', 'http:/''\nvar S_PROTOCOL_SLASH_SLASH = makeState(); // e.g., '//', 'http://'\nvar S_DOMAIN = makeState(); // parsed string ends with a potential domain name (A)\nvar S_DOMAIN_DOT = makeState(); // (A) domain followed by DOT\nvar S_TLD = makeState(_multi.URL); // (A) Simplest possible URL with no query string\nvar S_TLD_COLON = makeState(); // (A) URL followed by colon (potential port number here)\nvar S_TLD_PORT = makeState(_multi.URL); // TLD followed by a port number\nvar S_URL = makeState(_multi.URL); // Long URL with optional port and maybe query string\nvar S_URL_NON_ACCEPTING = makeState(); // URL followed by some symbols (will not be part of the final URL)\nvar S_URL_OPENBRACE = makeState(); // URL followed by {\nvar S_URL_OPENBRACKET = makeState(); // URL followed by [\nvar S_URL_OPENANGLEBRACKET = makeState(); // URL followed by <\nvar S_URL_OPENPAREN = makeState(); // URL followed by (\nvar S_URL_OPENBRACE_Q = makeState(_multi.URL); // URL followed by { and some symbols that the URL can end it\nvar S_URL_OPENBRACKET_Q = makeState(_multi.URL); // URL followed by [ and some symbols that the URL can end it\nvar S_URL_OPENANGLEBRACKET_Q = makeState(_multi.URL); // URL followed by < and some symbols that the URL can end it\nvar S_URL_OPENPAREN_Q = makeState(_multi.URL); // URL followed by ( and some symbols that the URL can end it\nvar S_URL_OPENBRACE_SYMS = makeState(); // S_URL_OPENBRACE_Q followed by some symbols it cannot end it\nvar S_URL_OPENBRACKET_SYMS = makeState(); // S_URL_OPENBRACKET_Q followed by some symbols it cannot end it\nvar S_URL_OPENANGLEBRACKET_SYMS = makeState(); // S_URL_OPENANGLEBRACKET_Q followed by some symbols it cannot end it\nvar S_URL_OPENPAREN_SYMS = makeState(); // S_URL_OPENPAREN_Q followed by some symbols it cannot end it\nvar S_EMAIL_DOMAIN = makeState(); // parsed string starts with local email info + @ with a potential domain name (C)\nvar S_EMAIL_DOMAIN_DOT = makeState(); // (C) domain followed by DOT\nvar S_EMAIL = makeState(_multi.EMAIL); // (C) Possible email address (could have more tlds)\nvar S_EMAIL_COLON = makeState(); // (C) URL followed by colon (potential port number here)\nvar S_EMAIL_PORT = makeState(_multi.EMAIL); // (C) Email address with a port\nvar S_MAILTO_EMAIL = makeState(_multi.MAILTOEMAIL); // Email that begins with the mailto prefix (D)\nvar S_MAILTO_EMAIL_NON_ACCEPTING = makeState(); // (D) Followed by some non-query string chars\nvar S_LOCALPART = makeState(); // Local part of the email address\nvar S_LOCALPART_AT = makeState(); // Local part of the email address plus @\nvar S_LOCALPART_DOT = makeState(); // Local part of the email address plus '.' (localpart cannot end in .)\nvar S_NL = makeState(_multi.NL); // single new line\n\n// Make path from start to protocol (with '//')\nS_START.on(_text.NL, S_NL).on(_text.PROTOCOL, S_PROTOCOL).on(_text.MAILTO, S_MAILTO).on(_text.SLASH, S_PROTOCOL_SLASH);\n\nS_PROTOCOL.on(_text.SLASH, S_PROTOCOL_SLASH);\nS_PROTOCOL_SLASH.on(_text.SLASH, S_PROTOCOL_SLASH_SLASH);\n\n// The very first potential domain name\nS_START.on(_text.TLD, S_DOMAIN).on(_text.DOMAIN, S_DOMAIN).on(_text.LOCALHOST, S_TLD).on(_text.NUM, S_DOMAIN);\n\n// Force URL for protocol followed by anything sane\nS_PROTOCOL_SLASH_SLASH.on(_text.TLD, S_URL).on(_text.DOMAIN, S_URL).on(_text.NUM, S_URL).on(_text.LOCALHOST, S_URL);\n\n// Account for dots and hyphens\n// hyphens are usually parts of domain names\nS_DOMAIN.on(_text.DOT, S_DOMAIN_DOT);\nS_EMAIL_DOMAIN.on(_text.DOT, S_EMAIL_DOMAIN_DOT);\n\n// Hyphen can jump back to a domain name\n\n// After the first domain and a dot, we can find either a URL or another domain\nS_DOMAIN_DOT.on(_text.TLD, S_TLD).on(_text.DOMAIN, S_DOMAIN).on(_text.NUM, S_DOMAIN).on(_text.LOCALHOST, S_DOMAIN);\n\nS_EMAIL_DOMAIN_DOT.on(_text.TLD, S_EMAIL).on(_text.DOMAIN, S_EMAIL_DOMAIN).on(_text.NUM, S_EMAIL_DOMAIN).on(_text.LOCALHOST, S_EMAIL_DOMAIN);\n\n// S_TLD accepts! But the URL could be longer, try to find a match greedily\n// The `run` function should be able to \"rollback\" to the accepting state\nS_TLD.on(_text.DOT, S_DOMAIN_DOT);\nS_EMAIL.on(_text.DOT, S_EMAIL_DOMAIN_DOT);\n\n// Become real URLs after `SLASH` or `COLON NUM SLASH`\n// Here PSS and non-PSS converge\nS_TLD.on(_text.COLON, S_TLD_COLON).on(_text.SLASH, S_URL);\nS_TLD_COLON.on(_text.NUM, S_TLD_PORT);\nS_TLD_PORT.on(_text.SLASH, S_URL);\nS_EMAIL.on(_text.COLON, S_EMAIL_COLON);\nS_EMAIL_COLON.on(_text.NUM, S_EMAIL_PORT);\n\n// Types of characters the URL can definitely end in\nvar qsAccepting = [_text.DOMAIN, _text.AT, _text.LOCALHOST, _text.NUM, _text.PLUS, _text.POUND, _text.PROTOCOL, _text.SLASH, _text.TLD, _text.UNDERSCORE, _text.SYM, _text.AMPERSAND];\n\n// Types of tokens that can follow a URL and be part of the query string\n// but cannot be the very last characters\n// Characters that cannot appear in the URL at all should be excluded\nvar qsNonAccepting = [_text.COLON, _text.DOT, _text.QUERY, _text.PUNCTUATION, _text.CLOSEBRACE, _text.CLOSEBRACKET, _text.CLOSEANGLEBRACKET, _text.CLOSEPAREN, _text.OPENBRACE, _text.OPENBRACKET, _text.OPENANGLEBRACKET, _text.OPENPAREN];\n\n// These states are responsible primarily for determining whether or not to\n// include the final round bracket.\n\n// URL, followed by an opening bracket\nS_URL.on(_text.OPENBRACE, S_URL_OPENBRACE).on(_text.OPENBRACKET, S_URL_OPENBRACKET).on(_text.OPENANGLEBRACKET, S_URL_OPENANGLEBRACKET).on(_text.OPENPAREN, S_URL_OPENPAREN);\n\n// URL with extra symbols at the end, followed by an opening bracket\nS_URL_NON_ACCEPTING.on(_text.OPENBRACE, S_URL_OPENBRACE).on(_text.OPENBRACKET, S_URL_OPENBRACKET).on(_text.OPENANGLEBRACKET, S_URL_OPENANGLEBRACKET).on(_text.OPENPAREN, S_URL_OPENPAREN);\n\n// Closing bracket component. This character WILL be included in the URL\nS_URL_OPENBRACE.on(_text.CLOSEBRACE, S_URL);\nS_URL_OPENBRACKET.on(_text.CLOSEBRACKET, S_URL);\nS_URL_OPENANGLEBRACKET.on(_text.CLOSEANGLEBRACKET, S_URL);\nS_URL_OPENPAREN.on(_text.CLOSEPAREN, S_URL);\nS_URL_OPENBRACE_Q.on(_text.CLOSEBRACE, S_URL);\nS_URL_OPENBRACKET_Q.on(_text.CLOSEBRACKET, S_URL);\nS_URL_OPENANGLEBRACKET_Q.on(_text.CLOSEANGLEBRACKET, S_URL);\nS_URL_OPENPAREN_Q.on(_text.CLOSEPAREN, S_URL);\nS_URL_OPENBRACE_SYMS.on(_text.CLOSEBRACE, S_URL);\nS_URL_OPENBRACKET_SYMS.on(_text.CLOSEBRACKET, S_URL);\nS_URL_OPENANGLEBRACKET_SYMS.on(_text.CLOSEANGLEBRACKET, S_URL);\nS_URL_OPENPAREN_SYMS.on(_text.CLOSEPAREN, S_URL);\n\n// URL that beings with an opening bracket, followed by a symbols.\n// Note that the final state can still be `S_URL_OPENBRACE_Q` (if the URL only\n// has a single opening bracket for some reason).\nS_URL_OPENBRACE.on(qsAccepting, S_URL_OPENBRACE_Q);\nS_URL_OPENBRACKET.on(qsAccepting, S_URL_OPENBRACKET_Q);\nS_URL_OPENANGLEBRACKET.on(qsAccepting, S_URL_OPENANGLEBRACKET_Q);\nS_URL_OPENPAREN.on(qsAccepting, S_URL_OPENPAREN_Q);\nS_URL_OPENBRACE.on(qsNonAccepting, S_URL_OPENBRACE_SYMS);\nS_URL_OPENBRACKET.on(qsNonAccepting, S_URL_OPENBRACKET_SYMS);\nS_URL_OPENANGLEBRACKET.on(qsNonAccepting, S_URL_OPENANGLEBRACKET_SYMS);\nS_URL_OPENPAREN.on(qsNonAccepting, S_URL_OPENPAREN_SYMS);\n\n// URL that begins with an opening bracket, followed by some symbols\nS_URL_OPENBRACE_Q.on(qsAccepting, S_URL_OPENBRACE_Q);\nS_URL_OPENBRACKET_Q.on(qsAccepting, S_URL_OPENBRACKET_Q);\nS_URL_OPENANGLEBRACKET_Q.on(qsAccepting, S_URL_OPENANGLEBRACKET_Q);\nS_URL_OPENPAREN_Q.on(qsAccepting, S_URL_OPENPAREN_Q);\nS_URL_OPENBRACE_Q.on(qsNonAccepting, S_URL_OPENBRACE_Q);\nS_URL_OPENBRACKET_Q.on(qsNonAccepting, S_URL_OPENBRACKET_Q);\nS_URL_OPENANGLEBRACKET_Q.on(qsNonAccepting, S_URL_OPENANGLEBRACKET_Q);\nS_URL_OPENPAREN_Q.on(qsNonAccepting, S_URL_OPENPAREN_Q);\n\nS_URL_OPENBRACE_SYMS.on(qsAccepting, S_URL_OPENBRACE_Q);\nS_URL_OPENBRACKET_SYMS.on(qsAccepting, S_URL_OPENBRACKET_Q);\nS_URL_OPENANGLEBRACKET_SYMS.on(qsAccepting, S_URL_OPENANGLEBRACKET_Q);\nS_URL_OPENPAREN_SYMS.on(qsAccepting, S_URL_OPENPAREN_Q);\nS_URL_OPENBRACE_SYMS.on(qsNonAccepting, S_URL_OPENBRACE_SYMS);\nS_URL_OPENBRACKET_SYMS.on(qsNonAccepting, S_URL_OPENBRACKET_SYMS);\nS_URL_OPENANGLEBRACKET_SYMS.on(qsNonAccepting, S_URL_OPENANGLEBRACKET_SYMS);\nS_URL_OPENPAREN_SYMS.on(qsNonAccepting, S_URL_OPENPAREN_SYMS);\n\n// Account for the query string\nS_URL.on(qsAccepting, S_URL);\nS_URL_NON_ACCEPTING.on(qsAccepting, S_URL);\n\nS_URL.on(qsNonAccepting, S_URL_NON_ACCEPTING);\nS_URL_NON_ACCEPTING.on(qsNonAccepting, S_URL_NON_ACCEPTING);\n\n// Email address-specific state definitions\n// Note: We are not allowing '/' in email addresses since this would interfere\n// with real URLs\n\n// For addresses with the mailto prefix\n// 'mailto:' followed by anything sane is a valid email\nS_MAILTO.on(_text.TLD, S_MAILTO_EMAIL).on(_text.DOMAIN, S_MAILTO_EMAIL).on(_text.NUM, S_MAILTO_EMAIL).on(_text.LOCALHOST, S_MAILTO_EMAIL);\n\n// Greedily get more potential valid email values\nS_MAILTO_EMAIL.on(qsAccepting, S_MAILTO_EMAIL).on(qsNonAccepting, S_MAILTO_EMAIL_NON_ACCEPTING);\nS_MAILTO_EMAIL_NON_ACCEPTING.on(qsAccepting, S_MAILTO_EMAIL).on(qsNonAccepting, S_MAILTO_EMAIL_NON_ACCEPTING);\n\n// For addresses without the mailto prefix\n// Tokens allowed in the localpart of the email\nvar localpartAccepting = [_text.DOMAIN, _text.NUM, _text.PLUS, _text.POUND, _text.QUERY, _text.UNDERSCORE, _text.SYM, _text.AMPERSAND, _text.TLD];\n\n// Some of the tokens in `localpartAccepting` are already accounted for here and\n// will not be overwritten (don't worry)\nS_DOMAIN.on(localpartAccepting, S_LOCALPART).on(_text.AT, S_LOCALPART_AT);\nS_TLD.on(localpartAccepting, S_LOCALPART).on(_text.AT, S_LOCALPART_AT);\nS_DOMAIN_DOT.on(localpartAccepting, S_LOCALPART);\n\n// Okay we're on a localpart. Now what?\n// TODO: IP addresses and what if the email starts with numbers?\nS_LOCALPART.on(localpartAccepting, S_LOCALPART).on(_text.AT, S_LOCALPART_AT) // close to an email address now\n.on(_text.DOT, S_LOCALPART_DOT);\nS_LOCALPART_DOT.on(localpartAccepting, S_LOCALPART);\nS_LOCALPART_AT.on(_text.TLD, S_EMAIL_DOMAIN).on(_text.DOMAIN, S_EMAIL_DOMAIN).on(_text.LOCALHOST, S_EMAIL);\n// States following `@` defined above\n\nvar run = function run(tokens) {\n\tvar len = tokens.length;\n\tvar cursor = 0;\n\tvar multis = [];\n\tvar textTokens = [];\n\n\twhile (cursor < len) {\n\t\tvar state = S_START;\n\t\tvar secondState = null;\n\t\tvar nextState = null;\n\t\tvar multiLength = 0;\n\t\tvar latestAccepting = null;\n\t\tvar sinceAccepts = -1;\n\n\t\twhile (cursor < len && !(secondState = state.next(tokens[cursor]))) {\n\t\t\t// Starting tokens with nowhere to jump to.\n\t\t\t// Consider these to be just plain text\n\t\t\ttextTokens.push(tokens[cursor++]);\n\t\t}\n\n\t\twhile (cursor < len && (nextState = secondState || state.next(tokens[cursor]))) {\n\n\t\t\t// Get the next state\n\t\t\tsecondState = null;\n\t\t\tstate = nextState;\n\n\t\t\t// Keep track of the latest accepting state\n\t\t\tif (state.accepts()) {\n\t\t\t\tsinceAccepts = 0;\n\t\t\t\tlatestAccepting = state;\n\t\t\t} else if (sinceAccepts >= 0) {\n\t\t\t\tsinceAccepts++;\n\t\t\t}\n\n\t\t\tcursor++;\n\t\t\tmultiLength++;\n\t\t}\n\n\t\tif (sinceAccepts < 0) {\n\n\t\t\t// No accepting state was found, part of a regular text token\n\t\t\t// Add all the tokens we looked at to the text tokens array\n\t\t\tfor (var i = cursor - multiLength; i < cursor; i++) {\n\t\t\t\ttextTokens.push(tokens[i]);\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Accepting state!\n\n\t\t\t// First close off the textTokens (if available)\n\t\t\tif (textTokens.length > 0) {\n\t\t\t\tmultis.push(new _multi.TEXT(textTokens));\n\t\t\t\ttextTokens = [];\n\t\t\t}\n\n\t\t\t// Roll back to the latest accepting state\n\t\t\tcursor -= sinceAccepts;\n\t\t\tmultiLength -= sinceAccepts;\n\n\t\t\t// Create a new multitoken\n\t\t\tvar MULTI = latestAccepting.emit();\n\t\t\tmultis.push(new MULTI(tokens.slice(cursor - multiLength, cursor)));\n\t\t}\n\t}\n\n\t// Finally close off the textTokens (if available)\n\tif (textTokens.length > 0) {\n\t\tmultis.push(new _multi.TEXT(textTokens));\n\t}\n\n\treturn multis;\n};\n\nexports.State = _state.TokenState;\nexports.TOKENS = MULTI_TOKENS;\nexports.run = run;\nexports.start = S_START;","'use strict';\n\nexports.__esModule = true;\nexports.start = exports.run = exports.TOKENS = exports.State = undefined;\n\nvar _state = require('./state');\n\nvar _text = require('./tokens/text');\n\nvar TOKENS = _interopRequireWildcard(_text);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar tlds = 'aaa|aarp|abarth|abb|abbott|abbvie|abc|able|abogado|abudhabi|ac|academy|accenture|accountant|accountants|aco|active|actor|ad|adac|ads|adult|ae|aeg|aero|aetna|af|afamilycompany|afl|africa|ag|agakhan|agency|ai|aig|aigo|airbus|airforce|airtel|akdn|al|alfaromeo|alibaba|alipay|allfinanz|allstate|ally|alsace|alstom|am|americanexpress|americanfamily|amex|amfam|amica|amsterdam|analytics|android|anquan|anz|ao|aol|apartments|app|apple|aq|aquarelle|ar|arab|aramco|archi|army|arpa|art|arte|as|asda|asia|associates|at|athleta|attorney|au|auction|audi|audible|audio|auspost|author|auto|autos|avianca|aw|aws|ax|axa|az|azure|ba|baby|baidu|banamex|bananarepublic|band|bank|bar|barcelona|barclaycard|barclays|barefoot|bargains|baseball|basketball|bauhaus|bayern|bb|bbc|bbt|bbva|bcg|bcn|bd|be|beats|beauty|beer|bentley|berlin|best|bestbuy|bet|bf|bg|bh|bharti|bi|bible|bid|bike|bing|bingo|bio|biz|bj|black|blackfriday|blanco|blockbuster|blog|bloomberg|blue|bm|bms|bmw|bn|bnl|bnpparibas|bo|boats|boehringer|bofa|bom|bond|boo|book|booking|boots|bosch|bostik|boston|bot|boutique|box|br|bradesco|bridgestone|broadway|broker|brother|brussels|bs|bt|budapest|bugatti|build|builders|business|buy|buzz|bv|bw|by|bz|bzh|ca|cab|cafe|cal|call|calvinklein|cam|camera|camp|cancerresearch|canon|capetown|capital|capitalone|car|caravan|cards|care|career|careers|cars|cartier|casa|case|caseih|cash|casino|cat|catering|catholic|cba|cbn|cbre|cbs|cc|cd|ceb|center|ceo|cern|cf|cfa|cfd|cg|ch|chanel|channel|chase|chat|cheap|chintai|chloe|christmas|chrome|chrysler|church|ci|cipriani|circle|cisco|citadel|citi|citic|city|cityeats|ck|cl|claims|cleaning|click|clinic|clinique|clothing|cloud|club|clubmed|cm|cn|co|coach|codes|coffee|college|cologne|com|comcast|commbank|community|company|compare|computer|comsec|condos|construction|consulting|contact|contractors|cooking|cookingchannel|cool|coop|corsica|country|coupon|coupons|courses|cr|credit|creditcard|creditunion|cricket|crown|crs|cruise|cruises|csc|cu|cuisinella|cv|cw|cx|cy|cymru|cyou|cz|dabur|dad|dance|data|date|dating|datsun|day|dclk|dds|de|deal|dealer|deals|degree|delivery|dell|deloitte|delta|democrat|dental|dentist|desi|design|dev|dhl|diamonds|diet|digital|direct|directory|discount|discover|dish|diy|dj|dk|dm|dnp|do|docs|doctor|dodge|dog|doha|domains|dot|download|drive|dtv|dubai|duck|dunlop|duns|dupont|durban|dvag|dvr|dz|earth|eat|ec|eco|edeka|edu|education|ee|eg|email|emerck|energy|engineer|engineering|enterprises|epost|epson|equipment|er|ericsson|erni|es|esq|estate|esurance|et|etisalat|eu|eurovision|eus|events|everbank|exchange|expert|exposed|express|extraspace|fage|fail|fairwinds|faith|family|fan|fans|farm|farmers|fashion|fast|fedex|feedback|ferrari|ferrero|fi|fiat|fidelity|fido|film|final|finance|financial|fire|firestone|firmdale|fish|fishing|fit|fitness|fj|fk|flickr|flights|flir|florist|flowers|fly|fm|fo|foo|food|foodnetwork|football|ford|forex|forsale|forum|foundation|fox|fr|free|fresenius|frl|frogans|frontdoor|frontier|ftr|fujitsu|fujixerox|fun|fund|furniture|futbol|fyi|ga|gal|gallery|gallo|gallup|game|games|gap|garden|gb|gbiz|gd|gdn|ge|gea|gent|genting|george|gf|gg|ggee|gh|gi|gift|gifts|gives|giving|gl|glade|glass|gle|global|globo|gm|gmail|gmbh|gmo|gmx|gn|godaddy|gold|goldpoint|golf|goo|goodhands|goodyear|goog|google|gop|got|gov|gp|gq|gr|grainger|graphics|gratis|green|gripe|grocery|group|gs|gt|gu|guardian|gucci|guge|guide|guitars|guru|gw|gy|hair|hamburg|hangout|haus|hbo|hdfc|hdfcbank|health|healthcare|help|helsinki|here|hermes|hgtv|hiphop|hisamitsu|hitachi|hiv|hk|hkt|hm|hn|hockey|holdings|holiday|homedepot|homegoods|homes|homesense|honda|honeywell|horse|hospital|host|hosting|hot|hoteles|hotels|hotmail|house|how|hr|hsbc|ht|htc|hu|hughes|hyatt|hyundai|ibm|icbc|ice|icu|id|ie|ieee|ifm|ikano|il|im|imamat|imdb|immo|immobilien|in|industries|infiniti|info|ing|ink|institute|insurance|insure|int|intel|international|intuit|investments|io|ipiranga|iq|ir|irish|is|iselect|ismaili|ist|istanbul|it|itau|itv|iveco|iwc|jaguar|java|jcb|jcp|je|jeep|jetzt|jewelry|jio|jlc|jll|jm|jmp|jnj|jo|jobs|joburg|jot|joy|jp|jpmorgan|jprs|juegos|juniper|kaufen|kddi|ke|kerryhotels|kerrylogistics|kerryproperties|kfh|kg|kh|ki|kia|kim|kinder|kindle|kitchen|kiwi|km|kn|koeln|komatsu|kosher|kp|kpmg|kpn|kr|krd|kred|kuokgroup|kw|ky|kyoto|kz|la|lacaixa|ladbrokes|lamborghini|lamer|lancaster|lancia|lancome|land|landrover|lanxess|lasalle|lat|latino|latrobe|law|lawyer|lb|lc|lds|lease|leclerc|lefrak|legal|lego|lexus|lgbt|li|liaison|lidl|life|lifeinsurance|lifestyle|lighting|like|lilly|limited|limo|lincoln|linde|link|lipsy|live|living|lixil|lk|loan|loans|locker|locus|loft|lol|london|lotte|lotto|love|lpl|lplfinancial|lr|ls|lt|ltd|ltda|lu|lundbeck|lupin|luxe|luxury|lv|ly|ma|macys|madrid|maif|maison|makeup|man|management|mango|map|market|marketing|markets|marriott|marshalls|maserati|mattel|mba|mc|mckinsey|md|me|med|media|meet|melbourne|meme|memorial|men|menu|meo|merckmsd|metlife|mg|mh|miami|microsoft|mil|mini|mint|mit|mitsubishi|mk|ml|mlb|mls|mm|mma|mn|mo|mobi|mobile|mobily|moda|moe|moi|mom|monash|money|monster|mopar|mormon|mortgage|moscow|moto|motorcycles|mov|movie|movistar|mp|mq|mr|ms|msd|mt|mtn|mtr|mu|museum|mutual|mv|mw|mx|my|mz|na|nab|nadex|nagoya|name|nationwide|natura|navy|nba|nc|ne|nec|net|netbank|netflix|network|neustar|new|newholland|news|next|nextdirect|nexus|nf|nfl|ng|ngo|nhk|ni|nico|nike|nikon|ninja|nissan|nissay|nl|no|nokia|northwesternmutual|norton|now|nowruz|nowtv|np|nr|nra|nrw|ntt|nu|nyc|nz|obi|observer|off|office|okinawa|olayan|olayangroup|oldnavy|ollo|om|omega|one|ong|onl|online|onyourside|ooo|open|oracle|orange|org|organic|origins|osaka|otsuka|ott|ovh|pa|page|panasonic|panerai|paris|pars|partners|parts|party|passagens|pay|pccw|pe|pet|pf|pfizer|pg|ph|pharmacy|phd|philips|phone|photo|photography|photos|physio|piaget|pics|pictet|pictures|pid|pin|ping|pink|pioneer|pizza|pk|pl|place|play|playstation|plumbing|plus|pm|pn|pnc|pohl|poker|politie|porn|post|pr|pramerica|praxi|press|prime|pro|prod|productions|prof|progressive|promo|properties|property|protection|pru|prudential|ps|pt|pub|pw|pwc|py|qa|qpon|quebec|quest|qvc|racing|radio|raid|re|read|realestate|realtor|realty|recipes|red|redstone|redumbrella|rehab|reise|reisen|reit|reliance|ren|rent|rentals|repair|report|republican|rest|restaurant|review|reviews|rexroth|rich|richardli|ricoh|rightathome|ril|rio|rip|rmit|ro|rocher|rocks|rodeo|rogers|room|rs|rsvp|ru|rugby|ruhr|run|rw|rwe|ryukyu|sa|saarland|safe|safety|sakura|sale|salon|samsclub|samsung|sandvik|sandvikcoromant|sanofi|sap|sapo|sarl|sas|save|saxo|sb|sbi|sbs|sc|sca|scb|schaeffler|schmidt|scholarships|school|schule|schwarz|science|scjohnson|scor|scot|sd|se|search|seat|secure|security|seek|select|sener|services|ses|seven|sew|sex|sexy|sfr|sg|sh|shangrila|sharp|shaw|shell|shia|shiksha|shoes|shop|shopping|shouji|show|showtime|shriram|si|silk|sina|singles|site|sj|sk|ski|skin|sky|skype|sl|sling|sm|smart|smile|sn|sncf|so|soccer|social|softbank|software|sohu|solar|solutions|song|sony|soy|space|spiegel|spot|spreadbetting|sr|srl|srt|st|stada|staples|star|starhub|statebank|statefarm|statoil|stc|stcgroup|stockholm|storage|store|stream|studio|study|style|su|sucks|supplies|supply|support|surf|surgery|suzuki|sv|swatch|swiftcover|swiss|sx|sy|sydney|symantec|systems|sz|tab|taipei|talk|taobao|target|tatamotors|tatar|tattoo|tax|taxi|tc|tci|td|tdk|team|tech|technology|tel|telecity|telefonica|temasek|tennis|teva|tf|tg|th|thd|theater|theatre|tiaa|tickets|tienda|tiffany|tips|tires|tirol|tj|tjmaxx|tjx|tk|tkmaxx|tl|tm|tmall|tn|to|today|tokyo|tools|top|toray|toshiba|total|tours|town|toyota|toys|tr|trade|trading|training|travel|travelchannel|travelers|travelersinsurance|trust|trv|tt|tube|tui|tunes|tushu|tv|tvs|tw|tz|ua|ubank|ubs|uconnect|ug|uk|unicom|university|uno|uol|ups|us|uy|uz|va|vacations|vana|vanguard|vc|ve|vegas|ventures|verisign|versicherung|vet|vg|vi|viajes|video|vig|viking|villas|vin|vip|virgin|visa|vision|vista|vistaprint|viva|vivo|vlaanderen|vn|vodka|volkswagen|volvo|vote|voting|voto|voyage|vu|vuelos|wales|walmart|walter|wang|wanggou|warman|watch|watches|weather|weatherchannel|webcam|weber|website|wed|wedding|weibo|weir|wf|whoswho|wien|wiki|williamhill|win|windows|wine|winners|wme|wolterskluwer|woodside|work|works|world|wow|ws|wtc|wtf|xbox|xerox|xfinity|xihuan|xin|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--30rr7y|xn--3bst00m|xn--3ds443g|xn--3e0b707e|xn--3hcrj9c|xn--3oq18vl8pn36a|xn--3pxu8k|xn--42c2d9a|xn--45br5cyl|xn--45brj9c|xn--45q11c|xn--4gbrim|xn--54b7fta0cc|xn--55qw42g|xn--55qx5d|xn--5su34j936bgsg|xn--5tzm5g|xn--6frz82g|xn--6qq986b3xl|xn--80adxhks|xn--80ao21a|xn--80aqecdr1a|xn--80asehdb|xn--80aswg|xn--8y0a063a|xn--90a3ac|xn--90ae|xn--90ais|xn--9dbq2a|xn--9et52u|xn--9krt00a|xn--b4w605ferd|xn--bck1b9a5dre4c|xn--c1avg|xn--c2br7g|xn--cck2b3b|xn--cg4bki|xn--clchc0ea0b2g2a9gcd|xn--czr694b|xn--czrs0t|xn--czru2d|xn--d1acj3b|xn--d1alf|xn--e1a4c|xn--eckvdtc9d|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fhbei|xn--fiq228c5hs|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--fjq720a|xn--flw351e|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--fzys8d69uvgm|xn--g2xx48c|xn--gckr3f0f|xn--gecrj9c|xn--gk3at1e|xn--h2breg3eve|xn--h2brj9c|xn--h2brj9c8c|xn--hxt814e|xn--i1b6b1a6a2e|xn--imr513n|xn--io0a7i|xn--j1aef|xn--j1amh|xn--j6w193g|xn--jlq61u9w7b|xn--jvr189m|xn--kcrx77d1x4a|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--kput3i|xn--l1acc|xn--lgbbat1ad8j|xn--mgb9awbf|xn--mgba3a3ejt|xn--mgba3a4f16a|xn--mgba7c0bbn0a|xn--mgbaakc7dvf|xn--mgbaam7a8h|xn--mgbab2bd|xn--mgbai9azgqp6j|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a|xn--mgbbh1a71e|xn--mgbc0a9azcg|xn--mgbca7dzdo|xn--mgberp4a5d4ar|xn--mgbgu82a|xn--mgbi4ecexp|xn--mgbpl2fh|xn--mgbt3dhd|xn--mgbtx2b|xn--mgbx4cd0ab|xn--mix891f|xn--mk1bu44c|xn--mxtq1m|xn--ngbc5azd|xn--ngbe9e0a|xn--ngbrx|xn--node|xn--nqv7f|xn--nqv7fs00ema|xn--nyqy26a|xn--o3cw4h|xn--ogbpf8fl|xn--p1acf|xn--p1ai|xn--pbt977c|xn--pgbs0dh|xn--pssy2u|xn--q9jyb4c|xn--qcka1pmc|xn--qxam|xn--rhqv96g|xn--rovu88b|xn--rvc1e0am3e|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--tckwe|xn--tiq49xqyj|xn--unup4y|xn--vermgensberater-ctb|xn--vermgensberatung-pwb|xn--vhquv|xn--vuq861b|xn--w4r85el8fhu5dnra|xn--w4rs40l|xn--wgbh1c|xn--wgbl6a|xn--xhq521b|xn--xkc2al3hye2a|xn--xkc2dl3a5ee0h|xn--y9a3aq|xn--yfro4i67o|xn--ygbi2ammx|xn--zfr164b|xperia|xxx|xyz|yachts|yahoo|yamaxun|yandex|ye|yodobashi|yoga|yokohama|you|youtube|yt|yun|za|zappos|zara|zero|zip|zippo|zm|zone|zuerich|zw'.split('|'); // macro, see gulpfile.js\n\n/**\n\tThe scanner provides an interface that takes a string of text as input, and\n\toutputs an array of tokens instances that can be used for easy URL parsing.\n\n\t@module linkify\n\t@submodule scanner\n\t@main scanner\n*/\n\nvar NUMBERS = '0123456789'.split('');\nvar ALPHANUM = '0123456789abcdefghijklmnopqrstuvwxyz'.split('');\nvar WHITESPACE = [' ', '\\f', '\\r', '\\t', '\\v', '\\xA0', '\\u1680', '\\u180E']; // excluding line breaks\n\nvar domainStates = []; // states that jump to DOMAIN on /[a-z0-9]/\nvar makeState = function makeState(tokenClass) {\n\treturn new _state.CharacterState(tokenClass);\n};\n\n// Frequently used states\nvar S_START = makeState();\nvar S_NUM = makeState(_text.NUM);\nvar S_DOMAIN = makeState(_text.DOMAIN);\nvar S_DOMAIN_HYPHEN = makeState(); // domain followed by 1 or more hyphen characters\nvar S_WS = makeState(_text.WS);\n\n// States for special URL symbols\nS_START.on('@', makeState(_text.AT)).on('.', makeState(_text.DOT)).on('+', makeState(_text.PLUS)).on('#', makeState(_text.POUND)).on('?', makeState(_text.QUERY)).on('/', makeState(_text.SLASH)).on('_', makeState(_text.UNDERSCORE)).on(':', makeState(_text.COLON)).on('{', makeState(_text.OPENBRACE)).on('[', makeState(_text.OPENBRACKET)).on('<', makeState(_text.OPENANGLEBRACKET)).on('(', makeState(_text.OPENPAREN)).on('}', makeState(_text.CLOSEBRACE)).on(']', makeState(_text.CLOSEBRACKET)).on('>', makeState(_text.CLOSEANGLEBRACKET)).on(')', makeState(_text.CLOSEPAREN)).on('&', makeState(_text.AMPERSAND)).on([',', ';', '!', '\"', '\\''], makeState(_text.PUNCTUATION));\n\n// Whitespace jumps\n// Tokens of only non-newline whitespace are arbitrarily long\nS_START.on('\\n', makeState(_text.NL)).on(WHITESPACE, S_WS);\n\n// If any whitespace except newline, more whitespace!\nS_WS.on(WHITESPACE, S_WS);\n\n// Generates states for top-level domains\n// Note that this is most accurate when tlds are in alphabetical order\nfor (var i = 0; i < tlds.length; i++) {\n\tvar newStates = (0, _state.stateify)(tlds[i], S_START, _text.TLD, _text.DOMAIN);\n\tdomainStates.push.apply(domainStates, newStates);\n}\n\n// Collect the states generated by different protocls\nvar partialProtocolFileStates = (0, _state.stateify)('file', S_START, _text.DOMAIN, _text.DOMAIN);\nvar partialProtocolFtpStates = (0, _state.stateify)('ftp', S_START, _text.DOMAIN, _text.DOMAIN);\nvar partialProtocolHttpStates = (0, _state.stateify)('http', S_START, _text.DOMAIN, _text.DOMAIN);\nvar partialProtocolMailtoStates = (0, _state.stateify)('mailto', S_START, _text.DOMAIN, _text.DOMAIN);\n\n// Add the states to the array of DOMAINeric states\ndomainStates.push.apply(domainStates, partialProtocolFileStates);\ndomainStates.push.apply(domainStates, partialProtocolFtpStates);\ndomainStates.push.apply(domainStates, partialProtocolHttpStates);\ndomainStates.push.apply(domainStates, partialProtocolMailtoStates);\n\n// Protocol states\nvar S_PROTOCOL_FILE = partialProtocolFileStates.pop();\nvar S_PROTOCOL_FTP = partialProtocolFtpStates.pop();\nvar S_PROTOCOL_HTTP = partialProtocolHttpStates.pop();\nvar S_MAILTO = partialProtocolMailtoStates.pop();\nvar S_PROTOCOL_SECURE = makeState(_text.DOMAIN);\nvar S_FULL_PROTOCOL = makeState(_text.PROTOCOL); // Full protocol ends with COLON\nvar S_FULL_MAILTO = makeState(_text.MAILTO); // Mailto ends with COLON\n\n// Secure protocols (end with 's')\nS_PROTOCOL_FTP.on('s', S_PROTOCOL_SECURE).on(':', S_FULL_PROTOCOL);\n\nS_PROTOCOL_HTTP.on('s', S_PROTOCOL_SECURE).on(':', S_FULL_PROTOCOL);\n\ndomainStates.push(S_PROTOCOL_SECURE);\n\n// Become protocol tokens after a COLON\nS_PROTOCOL_FILE.on(':', S_FULL_PROTOCOL);\nS_PROTOCOL_SECURE.on(':', S_FULL_PROTOCOL);\nS_MAILTO.on(':', S_FULL_MAILTO);\n\n// Localhost\nvar partialLocalhostStates = (0, _state.stateify)('localhost', S_START, _text.LOCALHOST, _text.DOMAIN);\ndomainStates.push.apply(domainStates, partialLocalhostStates);\n\n// Everything else\n// DOMAINs make more DOMAINs\n// Number and character transitions\nS_START.on(NUMBERS, S_NUM);\nS_NUM.on('-', S_DOMAIN_HYPHEN).on(NUMBERS, S_NUM).on(ALPHANUM, S_DOMAIN); // number becomes DOMAIN\n\nS_DOMAIN.on('-', S_DOMAIN_HYPHEN).on(ALPHANUM, S_DOMAIN);\n\n// All the generated states should have a jump to DOMAIN\nfor (var _i = 0; _i < domainStates.length; _i++) {\n\tdomainStates[_i].on('-', S_DOMAIN_HYPHEN).on(ALPHANUM, S_DOMAIN);\n}\n\nS_DOMAIN_HYPHEN.on('-', S_DOMAIN_HYPHEN).on(NUMBERS, S_DOMAIN).on(ALPHANUM, S_DOMAIN);\n\n// Set default transition\nS_START.defaultTransition = makeState(_text.SYM);\n\n/**\n\tGiven a string, returns an array of TOKEN instances representing the\n\tcomposition of that string.\n\n\t@method run\n\t@param {String} str Input string to scan\n\t@return {Array} Array of TOKEN instances\n*/\nvar run = function run(str) {\n\n\t// The state machine only looks at lowercase strings.\n\t// This selective `toLowerCase` is used because lowercasing the entire\n\t// string causes the length and character position to vary in some in some\n\t// non-English strings. This happens only on V8-based runtimes.\n\tvar lowerStr = str.replace(/[A-Z]/g, function (c) {\n\t\treturn c.toLowerCase();\n\t});\n\tvar len = str.length;\n\tvar tokens = []; // return value\n\n\tvar cursor = 0;\n\n\t// Tokenize the string\n\twhile (cursor < len) {\n\t\tvar state = S_START;\n\t\tvar nextState = null;\n\t\tvar tokenLength = 0;\n\t\tvar latestAccepting = null;\n\t\tvar sinceAccepts = -1;\n\n\t\twhile (cursor < len && (nextState = state.next(lowerStr[cursor]))) {\n\t\t\tstate = nextState;\n\n\t\t\t// Keep track of the latest accepting state\n\t\t\tif (state.accepts()) {\n\t\t\t\tsinceAccepts = 0;\n\t\t\t\tlatestAccepting = state;\n\t\t\t} else if (sinceAccepts >= 0) {\n\t\t\t\tsinceAccepts++;\n\t\t\t}\n\n\t\t\ttokenLength++;\n\t\t\tcursor++;\n\t\t}\n\n\t\tif (sinceAccepts < 0) {\n\t\t\tcontinue;\n\t\t} // Should never happen\n\n\t\t// Roll back to the latest accepting state\n\t\tcursor -= sinceAccepts;\n\t\ttokenLength -= sinceAccepts;\n\n\t\t// Get the class for the new token\n\t\tvar TOKEN = latestAccepting.emit(); // Current token class\n\n\t\t// No more jumps, just make a new token\n\t\ttokens.push(new TOKEN(str.substr(cursor - tokenLength, tokenLength)));\n\t}\n\n\treturn tokens;\n};\n\nvar start = S_START;\nexports.State = _state.CharacterState;\nexports.TOKENS = TOKENS;\nexports.run = run;\nexports.start = start;","'use strict';\n\nexports.__esModule = true;\nexports.stateify = exports.TokenState = exports.CharacterState = undefined;\n\nvar _class = require('../utils/class');\n\nfunction createStateClass() {\n\treturn function (tClass) {\n\t\tthis.j = [];\n\t\tthis.T = tClass || null;\n\t};\n}\n\n/**\n\tA simple state machine that can emit token classes\n\n\tThe `j` property in this class refers to state jumps. It's a\n\tmultidimensional array where for each element:\n\n\t* index [0] is a symbol or class of symbols to transition to.\n\t* index [1] is a State instance which matches\n\n\tThe type of symbol will depend on the target implementation for this class.\n\tIn Linkify, we have a two-stage scanner. Each stage uses this state machine\n\tbut with a slighly different (polymorphic) implementation.\n\n\tThe `T` property refers to the token class.\n\n\tTODO: Can the `on` and `next` methods be combined?\n\n\t@class BaseState\n*/\nvar BaseState = createStateClass();\nBaseState.prototype = {\n\tdefaultTransition: false,\n\n\t/**\n \t@method constructor\n \t@param {Class} tClass Pass in the kind of token to emit if there are\n \t\tno jumps after this state and the state is accepting.\n */\n\n\t/**\n \tOn the given symbol(s), this machine should go to the given state\n \t\t@method on\n \t@param {Array|Mixed} symbol\n \t@param {BaseState} state Note that the type of this state should be the\n \t\tsame as the current instance (i.e., don't pass in a different\n \t\tsubclass)\n */\n\ton: function on(symbol, state) {\n\t\tif (symbol instanceof Array) {\n\t\t\tfor (var i = 0; i < symbol.length; i++) {\n\t\t\t\tthis.j.push([symbol[i], state]);\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tthis.j.push([symbol, state]);\n\t\treturn this;\n\t},\n\n\n\t/**\n \tGiven the next item, returns next state for that item\n \t@method next\n \t@param {Mixed} item Should be an instance of the symbols handled by\n \t\tthis particular machine.\n \t@return {State} state Returns false if no jumps are available\n */\n\tnext: function next(item) {\n\t\tfor (var i = 0; i < this.j.length; i++) {\n\t\t\tvar jump = this.j[i];\n\t\t\tvar symbol = jump[0]; // Next item to check for\n\t\t\tvar state = jump[1]; // State to jump to if items match\n\n\t\t\t// compare item with symbol\n\t\t\tif (this.test(item, symbol)) {\n\t\t\t\treturn state;\n\t\t\t}\n\t\t}\n\n\t\t// Nowhere left to jump!\n\t\treturn this.defaultTransition;\n\t},\n\n\n\t/**\n \tDoes this state accept?\n \t`true` only of `this.T` exists\n \t\t@method accepts\n \t@return {Boolean}\n */\n\taccepts: function accepts() {\n\t\treturn !!this.T;\n\t},\n\n\n\t/**\n \tDetermine whether a given item \"symbolizes\" the symbol, where symbol is\n \ta class of items handled by this state machine.\n \t\tThis method should be overriden in extended classes.\n \t\t@method test\n \t@param {Mixed} item Does this item match the given symbol?\n \t@param {Mixed} symbol\n \t@return {Boolean}\n */\n\ttest: function test(item, symbol) {\n\t\treturn item === symbol;\n\t},\n\n\n\t/**\n \tEmit the token for this State (just return it in this case)\n \tIf this emits a token, this instance is an accepting state\n \t@method emit\n \t@return {Class} T\n */\n\temit: function emit() {\n\t\treturn this.T;\n\t}\n};\n\n/**\n\tState machine for string-based input\n\n\t@class CharacterState\n\t@extends BaseState\n*/\nvar CharacterState = (0, _class.inherits)(BaseState, createStateClass(), {\n\t/**\n \tDoes the given character match the given character or regular\n \texpression?\n \t\t@method test\n \t@param {String} char\n \t@param {String|RegExp} charOrRegExp\n \t@return {Boolean}\n */\n\ttest: function test(character, charOrRegExp) {\n\t\treturn character === charOrRegExp || charOrRegExp instanceof RegExp && charOrRegExp.test(character);\n\t}\n});\n\n/**\n\tState machine for input in the form of TextTokens\n\n\t@class TokenState\n\t@extends BaseState\n*/\nvar TokenState = (0, _class.inherits)(BaseState, createStateClass(), {\n\n\t/**\n  * Similar to `on`, but returns the state the results in the transition from\n  * the given item\n  * @method jump\n  * @param {Mixed} item\n  * @param {Token} [token]\n  * @return state\n  */\n\tjump: function jump(token) {\n\t\tvar tClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n\t\tvar state = this.next(new token('')); // dummy temp token\n\t\tif (state === this.defaultTransition) {\n\t\t\t// Make a new state!\n\t\t\tstate = new this.constructor(tClass);\n\t\t\tthis.on(token, state);\n\t\t} else if (tClass) {\n\t\t\tstate.T = tClass;\n\t\t}\n\t\treturn state;\n\t},\n\n\n\t/**\n \tIs the given token an instance of the given token class?\n \t\t@method test\n \t@param {TextToken} token\n \t@param {Class} tokenClass\n \t@return {Boolean}\n */\n\ttest: function test(token, tokenClass) {\n\t\treturn token instanceof tokenClass;\n\t}\n});\n\n/**\n\tGiven a non-empty target string, generates states (if required) for each\n\tconsecutive substring of characters in str starting from the beginning of\n\tthe string. The final state will have a special value, as specified in\n\toptions. All other \"in between\" substrings will have a default end state.\n\n\tThis turns the state machine into a Trie-like data structure (rather than a\n\tintelligently-designed DFA).\n\n\tNote that I haven't really tried these with any strings other than\n\tDOMAIN.\n\n\t@param {String} str\n\t@param {CharacterState} start State to jump from the first character\n\t@param {Class} endToken Token class to emit when the given string has been\n\t\tmatched and no more jumps exist.\n\t@param {Class} defaultToken \"Filler token\", or which token type to emit when\n\t\twe don't have a full match\n\t@return {Array} list of newly-created states\n*/\nfunction stateify(str, start, endToken, defaultToken) {\n\tvar i = 0,\n\t    len = str.length,\n\t    state = start,\n\t    newStates = [],\n\t    nextState = void 0;\n\n\t// Find the next state without a jump to the next character\n\twhile (i < len && (nextState = state.next(str[i]))) {\n\t\tstate = nextState;\n\t\ti++;\n\t}\n\n\tif (i >= len) {\n\t\treturn [];\n\t} // no new tokens were added\n\n\twhile (i < len - 1) {\n\t\tnextState = new CharacterState(defaultToken);\n\t\tnewStates.push(nextState);\n\t\tstate.on(str[i], nextState);\n\t\tstate = nextState;\n\t\ti++;\n\t}\n\n\tnextState = new CharacterState(endToken);\n\tnewStates.push(nextState);\n\tstate.on(str[len - 1], nextState);\n\n\treturn newStates;\n}\n\nexports.CharacterState = CharacterState;\nexports.TokenState = TokenState;\nexports.stateify = stateify;","\"use strict\";\n\nexports.__esModule = true;\nfunction createTokenClass() {\n\treturn function (value) {\n\t\tif (value) {\n\t\t\tthis.v = value;\n\t\t}\n\t};\n}\n\nexports.createTokenClass = createTokenClass;","'use strict';\n\nexports.__esModule = true;\nexports.URL = exports.TEXT = exports.NL = exports.EMAIL = exports.MAILTOEMAIL = exports.Base = undefined;\n\nvar _createTokenClass = require('./create-token-class');\n\nvar _class = require('../../utils/class');\n\nvar _text = require('./text');\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\n// Is the given token a valid domain token?\n// Should nums be included here?\nfunction isDomainToken(token) {\n\treturn token instanceof _text.DOMAIN || token instanceof _text.TLD;\n}\n\n/**\n\tAbstract class used for manufacturing tokens of text tokens. That is rather\n\tthan the value for a token being a small string of text, it's value an array\n\tof text tokens.\n\n\tUsed for grouping together URLs, emails, hashtags, and other potential\n\tcreations.\n\n\t@class MultiToken\n\t@abstract\n*/\nvar MultiToken = (0, _createTokenClass.createTokenClass)();\n\nMultiToken.prototype = {\n\t/**\n \tString representing the type for this token\n \t@property type\n \t@default 'TOKEN'\n */\n\ttype: 'token',\n\n\t/**\n \tIs this multitoken a link?\n \t@property isLink\n \t@default false\n */\n\tisLink: false,\n\n\t/**\n \tReturn the string this token represents.\n \t@method toString\n \t@return {String}\n */\n\ttoString: function toString() {\n\t\tvar result = [];\n\t\tfor (var i = 0; i < this.v.length; i++) {\n\t\t\tresult.push(this.v[i].toString());\n\t\t}\n\t\treturn result.join('');\n\t},\n\n\n\t/**\n \tWhat should the value for this token be in the `href` HTML attribute?\n \tReturns the `.toString` value by default.\n \t\t@method toHref\n \t@return {String}\n */\n\ttoHref: function toHref() {\n\t\treturn this.toString();\n\t},\n\n\n\t/**\n \tReturns a hash of relevant values for this token, which includes keys\n \t* type - Kind of token ('url', 'email', etc.)\n \t* value - Original text\n \t* href - The value that should be added to the anchor tag's href\n \t\tattribute\n \t\t@method toObject\n \t@param {String} [protocol] `'http'` by default\n \t@return {Object}\n */\n\ttoObject: function toObject() {\n\t\tvar protocol = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'http';\n\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tvalue: this.toString(),\n\t\t\thref: this.toHref(protocol)\n\t\t};\n\t}\n};\n\n/**\n\tRepresents an arbitrarily mailto email address with the prefix included\n\t@class MAILTO\n\t@extends MultiToken\n*/\nvar MAILTOEMAIL = (0, _class.inherits)(MultiToken, (0, _createTokenClass.createTokenClass)(), {\n\ttype: 'email',\n\tisLink: true\n});\n\n/**\n\tRepresents a list of tokens making up a valid email address\n\t@class EMAIL\n\t@extends MultiToken\n*/\nvar EMAIL = (0, _class.inherits)(MultiToken, (0, _createTokenClass.createTokenClass)(), {\n\ttype: 'email',\n\tisLink: true,\n\ttoHref: function toHref() {\n\t\treturn 'mailto:' + this.toString();\n\t}\n});\n\n/**\n\tRepresents some plain text\n\t@class TEXT\n\t@extends MultiToken\n*/\nvar TEXT = (0, _class.inherits)(MultiToken, (0, _createTokenClass.createTokenClass)(), { type: 'text' });\n\n/**\n\tMulti-linebreak token - represents a line break\n\t@class NL\n\t@extends MultiToken\n*/\nvar NL = (0, _class.inherits)(MultiToken, (0, _createTokenClass.createTokenClass)(), { type: 'nl' });\n\n/**\n\tRepresents a list of tokens making up a valid URL\n\t@class URL\n\t@extends MultiToken\n*/\nvar URL = (0, _class.inherits)(MultiToken, (0, _createTokenClass.createTokenClass)(), {\n\ttype: 'url',\n\tisLink: true,\n\n\t/**\n \tLowercases relevant parts of the domain and adds the protocol if\n \trequired. Note that this will not escape unsafe HTML characters in the\n \tURL.\n \t\t@method href\n \t@param {String} protocol\n \t@return {String}\n */\n\ttoHref: function toHref() {\n\t\tvar protocol = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'http';\n\n\t\tvar hasProtocol = false;\n\t\tvar hasSlashSlash = false;\n\t\tvar tokens = this.v;\n\t\tvar result = [];\n\t\tvar i = 0;\n\n\t\t// Make the first part of the domain lowercase\n\t\t// Lowercase protocol\n\t\twhile (tokens[i] instanceof _text.PROTOCOL) {\n\t\t\thasProtocol = true;\n\t\t\tresult.push(tokens[i].toString().toLowerCase());\n\t\t\ti++;\n\t\t}\n\n\t\t// Skip slash-slash\n\t\twhile (tokens[i] instanceof _text.SLASH) {\n\t\t\thasSlashSlash = true;\n\t\t\tresult.push(tokens[i].toString());\n\t\t\ti++;\n\t\t}\n\n\t\t// Lowercase all other characters in the domain\n\t\twhile (isDomainToken(tokens[i])) {\n\t\t\tresult.push(tokens[i].toString().toLowerCase());\n\t\t\ti++;\n\t\t}\n\n\t\t// Leave all other characters as they were written\n\t\tfor (; i < tokens.length; i++) {\n\t\t\tresult.push(tokens[i].toString());\n\t\t}\n\n\t\tresult = result.join('');\n\n\t\tif (!(hasProtocol || hasSlashSlash)) {\n\t\t\tresult = protocol + '://' + result;\n\t\t}\n\n\t\treturn result;\n\t},\n\thasProtocol: function hasProtocol() {\n\t\treturn this.v[0] instanceof _text.PROTOCOL;\n\t}\n});\n\nexports.Base = MultiToken;\nexports.MAILTOEMAIL = MAILTOEMAIL;\nexports.EMAIL = EMAIL;\nexports.NL = NL;\nexports.TEXT = TEXT;\nexports.URL = URL;","'use strict';\n\nexports.__esModule = true;\nexports.AMPERSAND = exports.CLOSEPAREN = exports.CLOSEANGLEBRACKET = exports.CLOSEBRACKET = exports.CLOSEBRACE = exports.OPENPAREN = exports.OPENANGLEBRACKET = exports.OPENBRACKET = exports.OPENBRACE = exports.WS = exports.TLD = exports.SYM = exports.UNDERSCORE = exports.SLASH = exports.MAILTO = exports.PROTOCOL = exports.QUERY = exports.POUND = exports.PLUS = exports.NUM = exports.NL = exports.LOCALHOST = exports.PUNCTUATION = exports.DOT = exports.COLON = exports.AT = exports.DOMAIN = exports.Base = undefined;\n\nvar _createTokenClass = require('./create-token-class');\n\nvar _class = require('../../utils/class');\n\n/******************************************************************************\n\tText Tokens\n\tTokens composed of strings\n******************************************************************************/\n\n/**\n\tAbstract class used for manufacturing text tokens.\n\tPass in the value this token represents\n\n\t@class TextToken\n\t@abstract\n*/\nvar TextToken = (0, _createTokenClass.createTokenClass)();\nTextToken.prototype = {\n\ttoString: function toString() {\n\t\treturn this.v + '';\n\t}\n};\n\nfunction inheritsToken(value) {\n\tvar props = value ? { v: value } : {};\n\treturn (0, _class.inherits)(TextToken, (0, _createTokenClass.createTokenClass)(), props);\n}\n\n/**\n\tA valid domain token\n\t@class DOMAIN\n\t@extends TextToken\n*/\nvar DOMAIN = inheritsToken();\n\n/**\n\t@class AT\n\t@extends TextToken\n*/\nvar AT = inheritsToken('@');\n\n/**\n\tRepresents a single colon `:` character\n\n\t@class COLON\n\t@extends TextToken\n*/\nvar COLON = inheritsToken(':');\n\n/**\n\t@class DOT\n\t@extends TextToken\n*/\nvar DOT = inheritsToken('.');\n\n/**\n\tA character class that can surround the URL, but which the URL cannot begin\n\tor end with. Does not include certain English punctuation like parentheses.\n\n\t@class PUNCTUATION\n\t@extends TextToken\n*/\nvar PUNCTUATION = inheritsToken();\n\n/**\n\tThe word localhost (by itself)\n\t@class LOCALHOST\n\t@extends TextToken\n*/\nvar LOCALHOST = inheritsToken();\n\n/**\n\tNewline token\n\t@class NL\n\t@extends TextToken\n*/\nvar NL = inheritsToken('\\n');\n\n/**\n\t@class NUM\n\t@extends TextToken\n*/\nvar NUM = inheritsToken();\n\n/**\n\t@class PLUS\n\t@extends TextToken\n*/\nvar PLUS = inheritsToken('+');\n\n/**\n\t@class POUND\n\t@extends TextToken\n*/\nvar POUND = inheritsToken('#');\n\n/**\n\tRepresents a web URL protocol. Supported types include\n\n\t* `http:`\n\t* `https:`\n\t* `ftp:`\n\t* `ftps:`\n\n\t@class PROTOCOL\n\t@extends TextToken\n*/\nvar PROTOCOL = inheritsToken();\n\n/**\n\tRepresents the start of the email URI protocol\n\n\t@class MAILTO\n\t@extends TextToken\n*/\nvar MAILTO = inheritsToken('mailto:');\n\n/**\n\t@class QUERY\n\t@extends TextToken\n*/\nvar QUERY = inheritsToken('?');\n\n/**\n\t@class SLASH\n\t@extends TextToken\n*/\nvar SLASH = inheritsToken('/');\n\n/**\n\t@class UNDERSCORE\n\t@extends TextToken\n*/\nvar UNDERSCORE = inheritsToken('_');\n\n/**\n\tOne ore more non-whitespace symbol.\n\t@class SYM\n\t@extends TextToken\n*/\nvar SYM = inheritsToken();\n\n/**\n\t@class TLD\n\t@extends TextToken\n*/\nvar TLD = inheritsToken();\n\n/**\n\tRepresents a string of consecutive whitespace characters\n\n\t@class WS\n\t@extends TextToken\n*/\nvar WS = inheritsToken();\n\n/**\n\tOpening/closing bracket classes\n*/\n\nvar OPENBRACE = inheritsToken('{');\nvar OPENBRACKET = inheritsToken('[');\nvar OPENANGLEBRACKET = inheritsToken('<');\nvar OPENPAREN = inheritsToken('(');\nvar CLOSEBRACE = inheritsToken('}');\nvar CLOSEBRACKET = inheritsToken(']');\nvar CLOSEANGLEBRACKET = inheritsToken('>');\nvar CLOSEPAREN = inheritsToken(')');\n\nvar AMPERSAND = inheritsToken('&');\n\nexports.Base = TextToken;\nexports.DOMAIN = DOMAIN;\nexports.AT = AT;\nexports.COLON = COLON;\nexports.DOT = DOT;\nexports.PUNCTUATION = PUNCTUATION;\nexports.LOCALHOST = LOCALHOST;\nexports.NL = NL;\nexports.NUM = NUM;\nexports.PLUS = PLUS;\nexports.POUND = POUND;\nexports.QUERY = QUERY;\nexports.PROTOCOL = PROTOCOL;\nexports.MAILTO = MAILTO;\nexports.SLASH = SLASH;\nexports.UNDERSCORE = UNDERSCORE;\nexports.SYM = SYM;\nexports.TLD = TLD;\nexports.WS = WS;\nexports.OPENBRACE = OPENBRACE;\nexports.OPENBRACKET = OPENBRACKET;\nexports.OPENANGLEBRACKET = OPENANGLEBRACKET;\nexports.OPENPAREN = OPENPAREN;\nexports.CLOSEBRACE = CLOSEBRACE;\nexports.CLOSEBRACKET = CLOSEBRACKET;\nexports.CLOSEANGLEBRACKET = CLOSEANGLEBRACKET;\nexports.CLOSEPAREN = CLOSEPAREN;\nexports.AMPERSAND = AMPERSAND;","\"use strict\";\n\nexports.__esModule = true;\nexports.inherits = inherits;\nfunction inherits(parent, child) {\n\tvar props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n\tvar extended = Object.create(parent.prototype);\n\tfor (var p in props) {\n\t\textended[p] = props[p];\n\t}\n\textended.constructor = child;\n\tchild.prototype = extended;\n\treturn child;\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar defaults = {\n\tdefaultProtocol: 'http',\n\tevents: null,\n\tformat: noop,\n\tformatHref: noop,\n\tnl2br: false,\n\ttagName: 'a',\n\ttarget: typeToTarget,\n\tvalidate: true,\n\tignoreTags: [],\n\tattributes: null,\n\tclassName: 'linkified' // Deprecated value - no default class will be provided in the future\n};\n\nexports.defaults = defaults;\nexports.Options = Options;\nexports.contains = contains;\n\n\nfunction Options(opts) {\n\topts = opts || {};\n\n\tthis.defaultProtocol = opts.hasOwnProperty('defaultProtocol') ? opts.defaultProtocol : defaults.defaultProtocol;\n\tthis.events = opts.hasOwnProperty('events') ? opts.events : defaults.events;\n\tthis.format = opts.hasOwnProperty('format') ? opts.format : defaults.format;\n\tthis.formatHref = opts.hasOwnProperty('formatHref') ? opts.formatHref : defaults.formatHref;\n\tthis.nl2br = opts.hasOwnProperty('nl2br') ? opts.nl2br : defaults.nl2br;\n\tthis.tagName = opts.hasOwnProperty('tagName') ? opts.tagName : defaults.tagName;\n\tthis.target = opts.hasOwnProperty('target') ? opts.target : defaults.target;\n\tthis.validate = opts.hasOwnProperty('validate') ? opts.validate : defaults.validate;\n\tthis.ignoreTags = [];\n\n\t// linkAttributes and linkClass is deprecated\n\tthis.attributes = opts.attributes || opts.linkAttributes || defaults.attributes;\n\tthis.className = opts.hasOwnProperty('className') ? opts.className : opts.linkClass || defaults.className;\n\n\t// Make all tags names upper case\n\tvar ignoredTags = opts.hasOwnProperty('ignoreTags') ? opts.ignoreTags : defaults.ignoreTags;\n\tfor (var i = 0; i < ignoredTags.length; i++) {\n\t\tthis.ignoreTags.push(ignoredTags[i].toUpperCase());\n\t}\n}\n\nOptions.prototype = {\n\t/**\n  * Given the token, return all options for how it should be displayed\n  */\n\tresolve: function resolve(token) {\n\t\tvar href = token.toHref(this.defaultProtocol);\n\t\treturn {\n\t\t\tformatted: this.get('format', token.toString(), token),\n\t\t\tformattedHref: this.get('formatHref', href, token),\n\t\t\ttagName: this.get('tagName', href, token),\n\t\t\tclassName: this.get('className', href, token),\n\t\t\ttarget: this.get('target', href, token),\n\t\t\tevents: this.getObject('events', href, token),\n\t\t\tattributes: this.getObject('attributes', href, token)\n\t\t};\n\t},\n\n\n\t/**\n  * Returns true or false based on whether a token should be displayed as a\n  * link based on the user options. By default,\n  */\n\tcheck: function check(token) {\n\t\treturn this.get('validate', token.toString(), token);\n\t},\n\n\n\t// Private methods\n\n\t/**\n  * Resolve an option's value based on the value of the option and the given\n  * params.\n  * @param {String} key Name of option to use\n  * @param operator will be passed to the target option if it's method\n  * @param {MultiToken} token The token from linkify.tokenize\n  */\n\tget: function get(key, operator, token) {\n\t\tvar optionValue = void 0,\n\t\t    option = this[key];\n\t\tif (!option) {\n\t\t\treturn option;\n\t\t}\n\n\t\tswitch (typeof option === 'undefined' ? 'undefined' : _typeof(option)) {\n\t\t\tcase 'function':\n\t\t\t\treturn option(operator, token.type);\n\t\t\tcase 'object':\n\t\t\t\toptionValue = option.hasOwnProperty(token.type) ? option[token.type] : defaults[key];\n\t\t\t\treturn typeof optionValue === 'function' ? optionValue(operator, token.type) : optionValue;\n\t\t}\n\n\t\treturn option;\n\t},\n\tgetObject: function getObject(key, operator, token) {\n\t\tvar option = this[key];\n\t\treturn typeof option === 'function' ? option(operator, token.type) : option;\n\t}\n};\n\n/**\n * Quick indexOf replacement for checking the ignoreTags option\n */\nfunction contains(arr, value) {\n\tfor (var i = 0; i < arr.length; i++) {\n\t\tif (arr[i] === value) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction noop(val) {\n\treturn val;\n}\n\nfunction typeToTarget(href, type) {\n\treturn type === 'url' ? '_blank' : null;\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _html5NamedCharRefs = require('./simple-html-tokenizer/html5-named-char-refs');\n\nvar _html5NamedCharRefs2 = _interopRequireDefault(_html5NamedCharRefs);\n\nvar _entityParser = require('./simple-html-tokenizer/entity-parser');\n\nvar _entityParser2 = _interopRequireDefault(_entityParser);\n\nvar _eventedTokenizer = require('./simple-html-tokenizer/evented-tokenizer');\n\nvar _eventedTokenizer2 = _interopRequireDefault(_eventedTokenizer);\n\nvar _tokenizer = require('./simple-html-tokenizer/tokenizer');\n\nvar _tokenizer2 = _interopRequireDefault(_tokenizer);\n\nvar _tokenize = require('./simple-html-tokenizer/tokenize');\n\nvar _tokenize2 = _interopRequireDefault(_tokenize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar HTML5Tokenizer = {\n\tHTML5NamedCharRefs: _html5NamedCharRefs2.default,\n\tEntityParser: _entityParser2.default,\n\tEventedTokenizer: _eventedTokenizer2.default,\n\tTokenizer: _tokenizer2.default,\n\ttokenize: _tokenize2.default\n};\n\nexports.default = HTML5Tokenizer;","\"use strict\";\n\nexports.__esModule = true;\nfunction EntityParser(named) {\n  this.named = named;\n}\n\nvar HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;\nvar CHARCODE = /^#([0-9]+)$/;\nvar NAMED = /^([A-Za-z0-9]+)$/;\n\nEntityParser.prototype.parse = function (entity) {\n  if (!entity) {\n    return;\n  }\n  var matches = entity.match(HEXCHARCODE);\n  if (matches) {\n    return \"&#x\" + matches[1] + \";\";\n  }\n  matches = entity.match(CHARCODE);\n  if (matches) {\n    return \"&#\" + matches[1] + \";\";\n  }\n  matches = entity.match(NAMED);\n  if (matches) {\n    return this.named[matches[1]] || \"&\" + matches[1] + \";\";\n  }\n};\n\nexports.default = EntityParser;","'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nfunction EventedTokenizer(delegate, entityParser) {\n  this.delegate = delegate;\n  this.entityParser = entityParser;\n\n  this.state = null;\n  this.input = null;\n\n  this.index = -1;\n  this.line = -1;\n  this.column = -1;\n  this.tagLine = -1;\n  this.tagColumn = -1;\n\n  this.reset();\n}\n\nEventedTokenizer.prototype = {\n  reset: function reset() {\n    this.state = 'beforeData';\n    this.input = '';\n\n    this.index = 0;\n    this.line = 1;\n    this.column = 0;\n\n    this.tagLine = -1;\n    this.tagColumn = -1;\n\n    this.delegate.reset();\n  },\n\n  tokenize: function tokenize(input) {\n    this.reset();\n    this.tokenizePart(input);\n    this.tokenizeEOF();\n  },\n\n  tokenizePart: function tokenizePart(input) {\n    this.input += (0, _utils.preprocessInput)(input);\n\n    while (this.index < this.input.length) {\n      this.states[this.state].call(this);\n    }\n  },\n\n  tokenizeEOF: function tokenizeEOF() {\n    this.flushData();\n  },\n\n  flushData: function flushData() {\n    if (this.state === 'data') {\n      this.delegate.finishData();\n      this.state = 'beforeData';\n    }\n  },\n\n  peek: function peek() {\n    return this.input.charAt(this.index);\n  },\n\n  consume: function consume() {\n    var char = this.peek();\n\n    this.index++;\n\n    if (char === \"\\n\") {\n      this.line++;\n      this.column = 0;\n    } else {\n      this.column++;\n    }\n\n    return char;\n  },\n\n  consumeCharRef: function consumeCharRef() {\n    var endIndex = this.input.indexOf(';', this.index);\n    if (endIndex === -1) {\n      return;\n    }\n    var entity = this.input.slice(this.index, endIndex);\n    var chars = this.entityParser.parse(entity);\n    if (chars) {\n      var count = entity.length;\n      // consume the entity chars\n      while (count) {\n        this.consume();\n        count--;\n      }\n      // consume the `;`\n      this.consume();\n\n      return chars;\n    }\n  },\n\n  markTagStart: function markTagStart() {\n    // these properties to be removed in next major bump\n    this.tagLine = this.line;\n    this.tagColumn = this.column;\n\n    if (this.delegate.tagOpen) {\n      this.delegate.tagOpen();\n    }\n  },\n\n  states: {\n    beforeData: function beforeData() {\n      var char = this.peek();\n\n      if (char === \"<\") {\n        this.state = 'tagOpen';\n        this.markTagStart();\n        this.consume();\n      } else {\n        this.state = 'data';\n        this.delegate.beginData();\n      }\n    },\n\n    data: function data() {\n      var char = this.peek();\n\n      if (char === \"<\") {\n        this.delegate.finishData();\n        this.state = 'tagOpen';\n        this.markTagStart();\n        this.consume();\n      } else if (char === \"&\") {\n        this.consume();\n        this.delegate.appendToData(this.consumeCharRef() || \"&\");\n      } else {\n        this.consume();\n        this.delegate.appendToData(char);\n      }\n    },\n\n    tagOpen: function tagOpen() {\n      var char = this.consume();\n\n      if (char === \"!\") {\n        this.state = 'markupDeclaration';\n      } else if (char === \"/\") {\n        this.state = 'endTagOpen';\n      } else if ((0, _utils.isAlpha)(char)) {\n        this.state = 'tagName';\n        this.delegate.beginStartTag();\n        this.delegate.appendToTagName(char.toLowerCase());\n      }\n    },\n\n    markupDeclaration: function markupDeclaration() {\n      var char = this.consume();\n\n      if (char === \"-\" && this.input.charAt(this.index) === \"-\") {\n        this.consume();\n        this.state = 'commentStart';\n        this.delegate.beginComment();\n      }\n    },\n\n    commentStart: function commentStart() {\n      var char = this.consume();\n\n      if (char === \"-\") {\n        this.state = 'commentStartDash';\n      } else if (char === \">\") {\n        this.delegate.finishComment();\n        this.state = 'beforeData';\n      } else {\n        this.delegate.appendToCommentData(char);\n        this.state = 'comment';\n      }\n    },\n\n    commentStartDash: function commentStartDash() {\n      var char = this.consume();\n\n      if (char === \"-\") {\n        this.state = 'commentEnd';\n      } else if (char === \">\") {\n        this.delegate.finishComment();\n        this.state = 'beforeData';\n      } else {\n        this.delegate.appendToCommentData(\"-\");\n        this.state = 'comment';\n      }\n    },\n\n    comment: function comment() {\n      var char = this.consume();\n\n      if (char === \"-\") {\n        this.state = 'commentEndDash';\n      } else {\n        this.delegate.appendToCommentData(char);\n      }\n    },\n\n    commentEndDash: function commentEndDash() {\n      var char = this.consume();\n\n      if (char === \"-\") {\n        this.state = 'commentEnd';\n      } else {\n        this.delegate.appendToCommentData(\"-\" + char);\n        this.state = 'comment';\n      }\n    },\n\n    commentEnd: function commentEnd() {\n      var char = this.consume();\n\n      if (char === \">\") {\n        this.delegate.finishComment();\n        this.state = 'beforeData';\n      } else {\n        this.delegate.appendToCommentData(\"--\" + char);\n        this.state = 'comment';\n      }\n    },\n\n    tagName: function tagName() {\n      var char = this.consume();\n\n      if ((0, _utils.isSpace)(char)) {\n        this.state = 'beforeAttributeName';\n      } else if (char === \"/\") {\n        this.state = 'selfClosingStartTag';\n      } else if (char === \">\") {\n        this.delegate.finishTag();\n        this.state = 'beforeData';\n      } else {\n        this.delegate.appendToTagName(char);\n      }\n    },\n\n    beforeAttributeName: function beforeAttributeName() {\n      var char = this.peek();\n\n      if ((0, _utils.isSpace)(char)) {\n        this.consume();\n        return;\n      } else if (char === \"/\") {\n        this.state = 'selfClosingStartTag';\n        this.consume();\n      } else if (char === \">\") {\n        this.consume();\n        this.delegate.finishTag();\n        this.state = 'beforeData';\n      } else {\n        this.state = 'attributeName';\n        this.delegate.beginAttribute();\n        this.consume();\n        this.delegate.appendToAttributeName(char);\n      }\n    },\n\n    attributeName: function attributeName() {\n      var char = this.peek();\n\n      if ((0, _utils.isSpace)(char)) {\n        this.state = 'afterAttributeName';\n        this.consume();\n      } else if (char === \"/\") {\n        this.delegate.beginAttributeValue(false);\n        this.delegate.finishAttributeValue();\n        this.consume();\n        this.state = 'selfClosingStartTag';\n      } else if (char === \"=\") {\n        this.state = 'beforeAttributeValue';\n        this.consume();\n      } else if (char === \">\") {\n        this.delegate.beginAttributeValue(false);\n        this.delegate.finishAttributeValue();\n        this.consume();\n        this.delegate.finishTag();\n        this.state = 'beforeData';\n      } else {\n        this.consume();\n        this.delegate.appendToAttributeName(char);\n      }\n    },\n\n    afterAttributeName: function afterAttributeName() {\n      var char = this.peek();\n\n      if ((0, _utils.isSpace)(char)) {\n        this.consume();\n        return;\n      } else if (char === \"/\") {\n        this.delegate.beginAttributeValue(false);\n        this.delegate.finishAttributeValue();\n        this.consume();\n        this.state = 'selfClosingStartTag';\n      } else if (char === \"=\") {\n        this.consume();\n        this.state = 'beforeAttributeValue';\n      } else if (char === \">\") {\n        this.delegate.beginAttributeValue(false);\n        this.delegate.finishAttributeValue();\n        this.consume();\n        this.delegate.finishTag();\n        this.state = 'beforeData';\n      } else {\n        this.delegate.beginAttributeValue(false);\n        this.delegate.finishAttributeValue();\n        this.consume();\n        this.state = 'attributeName';\n        this.delegate.beginAttribute();\n        this.delegate.appendToAttributeName(char);\n      }\n    },\n\n    beforeAttributeValue: function beforeAttributeValue() {\n      var char = this.peek();\n\n      if ((0, _utils.isSpace)(char)) {\n        this.consume();\n      } else if (char === '\"') {\n        this.state = 'attributeValueDoubleQuoted';\n        this.delegate.beginAttributeValue(true);\n        this.consume();\n      } else if (char === \"'\") {\n        this.state = 'attributeValueSingleQuoted';\n        this.delegate.beginAttributeValue(true);\n        this.consume();\n      } else if (char === \">\") {\n        this.delegate.beginAttributeValue(false);\n        this.delegate.finishAttributeValue();\n        this.consume();\n        this.delegate.finishTag();\n        this.state = 'beforeData';\n      } else {\n        this.state = 'attributeValueUnquoted';\n        this.delegate.beginAttributeValue(false);\n        this.consume();\n        this.delegate.appendToAttributeValue(char);\n      }\n    },\n\n    attributeValueDoubleQuoted: function attributeValueDoubleQuoted() {\n      var char = this.consume();\n\n      if (char === '\"') {\n        this.delegate.finishAttributeValue();\n        this.state = 'afterAttributeValueQuoted';\n      } else if (char === \"&\") {\n        this.delegate.appendToAttributeValue(this.consumeCharRef('\"') || \"&\");\n      } else {\n        this.delegate.appendToAttributeValue(char);\n      }\n    },\n\n    attributeValueSingleQuoted: function attributeValueSingleQuoted() {\n      var char = this.consume();\n\n      if (char === \"'\") {\n        this.delegate.finishAttributeValue();\n        this.state = 'afterAttributeValueQuoted';\n      } else if (char === \"&\") {\n        this.delegate.appendToAttributeValue(this.consumeCharRef(\"'\") || \"&\");\n      } else {\n        this.delegate.appendToAttributeValue(char);\n      }\n    },\n\n    attributeValueUnquoted: function attributeValueUnquoted() {\n      var char = this.peek();\n\n      if ((0, _utils.isSpace)(char)) {\n        this.delegate.finishAttributeValue();\n        this.consume();\n        this.state = 'beforeAttributeName';\n      } else if (char === \"&\") {\n        this.consume();\n        this.delegate.appendToAttributeValue(this.consumeCharRef(\">\") || \"&\");\n      } else if (char === \">\") {\n        this.delegate.finishAttributeValue();\n        this.consume();\n        this.delegate.finishTag();\n        this.state = 'beforeData';\n      } else {\n        this.consume();\n        this.delegate.appendToAttributeValue(char);\n      }\n    },\n\n    afterAttributeValueQuoted: function afterAttributeValueQuoted() {\n      var char = this.peek();\n\n      if ((0, _utils.isSpace)(char)) {\n        this.consume();\n        this.state = 'beforeAttributeName';\n      } else if (char === \"/\") {\n        this.consume();\n        this.state = 'selfClosingStartTag';\n      } else if (char === \">\") {\n        this.consume();\n        this.delegate.finishTag();\n        this.state = 'beforeData';\n      } else {\n        this.state = 'beforeAttributeName';\n      }\n    },\n\n    selfClosingStartTag: function selfClosingStartTag() {\n      var char = this.peek();\n\n      if (char === \">\") {\n        this.consume();\n        this.delegate.markTagAsSelfClosing();\n        this.delegate.finishTag();\n        this.state = 'beforeData';\n      } else {\n        this.state = 'beforeAttributeName';\n      }\n    },\n\n    endTagOpen: function endTagOpen() {\n      var char = this.consume();\n\n      if ((0, _utils.isAlpha)(char)) {\n        this.state = 'tagName';\n        this.delegate.beginEndTag();\n        this.delegate.appendToTagName(char.toLowerCase());\n      }\n    }\n  }\n};\n\nexports.default = EventedTokenizer;","\"use strict\";\n\nexports.__esModule = true;\nvar HTML5NamedCharRefs = {\n    // We don't need the complete named character reference because linkifyHtml\n    // does not modify the escape sequences. We do need &nbsp; so that\n    // whitespace is parsed properly. Other types of whitespace should already\n    // be accounted for\n    nbsp: \"\\xA0\"\n};\nexports.default = HTML5NamedCharRefs;","'use strict';\n\nexports.__esModule = true;\nexports.default = tokenize;\n\nvar _tokenizer = require('./tokenizer');\n\nvar _tokenizer2 = _interopRequireDefault(_tokenizer);\n\nvar _entityParser = require('./entity-parser');\n\nvar _entityParser2 = _interopRequireDefault(_entityParser);\n\nvar _html5NamedCharRefs = require('./html5-named-char-refs');\n\nvar _html5NamedCharRefs2 = _interopRequireDefault(_html5NamedCharRefs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction tokenize(input, options) {\n  var tokenizer = new _tokenizer2.default(new _entityParser2.default(_html5NamedCharRefs2.default), options);\n  return tokenizer.tokenize(input);\n}","'use strict';\n\nexports.__esModule = true;\n\nvar _eventedTokenizer = require('./evented-tokenizer');\n\nvar _eventedTokenizer2 = _interopRequireDefault(_eventedTokenizer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction Tokenizer(entityParser, options) {\n  this.token = null;\n  this.startLine = 1;\n  this.startColumn = 0;\n  this.options = options || {};\n  this.tokenizer = new _eventedTokenizer2.default(this, entityParser);\n}\n\nTokenizer.prototype = {\n  tokenize: function tokenize(input) {\n    this.tokens = [];\n    this.tokenizer.tokenize(input);\n    return this.tokens;\n  },\n\n  tokenizePart: function tokenizePart(input) {\n    this.tokens = [];\n    this.tokenizer.tokenizePart(input);\n    return this.tokens;\n  },\n\n  tokenizeEOF: function tokenizeEOF() {\n    this.tokens = [];\n    this.tokenizer.tokenizeEOF();\n    return this.tokens[0];\n  },\n\n  reset: function reset() {\n    this.token = null;\n    this.startLine = 1;\n    this.startColumn = 0;\n  },\n\n  addLocInfo: function addLocInfo() {\n    if (this.options.loc) {\n      this.token.loc = {\n        start: {\n          line: this.startLine,\n          column: this.startColumn\n        },\n        end: {\n          line: this.tokenizer.line,\n          column: this.tokenizer.column\n        }\n      };\n    }\n    this.startLine = this.tokenizer.line;\n    this.startColumn = this.tokenizer.column;\n  },\n\n  // Data\n\n  beginData: function beginData() {\n    this.token = {\n      type: 'Chars',\n      chars: ''\n    };\n    this.tokens.push(this.token);\n  },\n\n  appendToData: function appendToData(char) {\n    this.token.chars += char;\n  },\n\n  finishData: function finishData() {\n    this.addLocInfo();\n  },\n\n  // Comment\n\n  beginComment: function beginComment() {\n    this.token = {\n      type: 'Comment',\n      chars: ''\n    };\n    this.tokens.push(this.token);\n  },\n\n  appendToCommentData: function appendToCommentData(char) {\n    this.token.chars += char;\n  },\n\n  finishComment: function finishComment() {\n    this.addLocInfo();\n  },\n\n  // Tags - basic\n\n  beginStartTag: function beginStartTag() {\n    this.token = {\n      type: 'StartTag',\n      tagName: '',\n      attributes: [],\n      selfClosing: false\n    };\n    this.tokens.push(this.token);\n  },\n\n  beginEndTag: function beginEndTag() {\n    this.token = {\n      type: 'EndTag',\n      tagName: ''\n    };\n    this.tokens.push(this.token);\n  },\n\n  finishTag: function finishTag() {\n    this.addLocInfo();\n  },\n\n  markTagAsSelfClosing: function markTagAsSelfClosing() {\n    this.token.selfClosing = true;\n  },\n\n  // Tags - name\n\n  appendToTagName: function appendToTagName(char) {\n    this.token.tagName += char;\n  },\n\n  // Tags - attributes\n\n  beginAttribute: function beginAttribute() {\n    this._currentAttribute = [\"\", \"\", null];\n    this.token.attributes.push(this._currentAttribute);\n  },\n\n  appendToAttributeName: function appendToAttributeName(char) {\n    this._currentAttribute[0] += char;\n  },\n\n  beginAttributeValue: function beginAttributeValue(isQuoted) {\n    this._currentAttribute[2] = isQuoted;\n  },\n\n  appendToAttributeValue: function appendToAttributeValue(char) {\n    this._currentAttribute[1] = this._currentAttribute[1] || \"\";\n    this._currentAttribute[1] += char;\n  },\n\n  finishAttributeValue: function finishAttributeValue() {}\n};\n\nexports.default = Tokenizer;","\"use strict\";\n\nexports.__esModule = true;\nexports.isSpace = isSpace;\nexports.isAlpha = isAlpha;\nexports.preprocessInput = preprocessInput;\nvar WSP = /[\\t\\n\\f ]/;\nvar ALPHA = /[A-Za-z]/;\nvar CRLF = /\\r\\n?/g;\n\nfunction isSpace(char) {\n  return WSP.test(char);\n}\n\nfunction isAlpha(char) {\n  return ALPHA.test(char);\n}\n\nfunction preprocessInput(input) {\n  return input.replace(CRLF, \"\\n\");\n}","module.exports = require('./lib/linkify-react').default;\n","\nmodule.exports = function load (src, opts, cb) {\n  var head = document.head || document.getElementsByTagName('head')[0]\n  var script = document.createElement('script')\n\n  if (typeof opts === 'function') {\n    cb = opts\n    opts = {}\n  }\n\n  opts = opts || {}\n  cb = cb || function() {}\n\n  script.type = opts.type || 'text/javascript'\n  script.charset = opts.charset || 'utf8';\n  script.async = 'async' in opts ? !!opts.async : true\n  script.src = src\n\n  if (opts.attrs) {\n    setAttributes(script, opts.attrs)\n  }\n\n  if (opts.text) {\n    script.text = '' + opts.text\n  }\n\n  var onend = 'onload' in script ? stdOnEnd : ieOnEnd\n  onend(script, cb)\n\n  // some good legacy browsers (firefox) fail the 'in' detection above\n  // so as a fallback we always set onload\n  // old IE will ignore this and new IE will set onload\n  if (!script.onload) {\n    stdOnEnd(script, cb);\n  }\n\n  head.appendChild(script)\n}\n\nfunction setAttributes(script, attrs) {\n  for (var attr in attrs) {\n    script.setAttribute(attr, attrs[attr]);\n  }\n}\n\nfunction stdOnEnd (script, cb) {\n  script.onload = function () {\n    this.onerror = this.onload = null\n    cb(null, script)\n  }\n  script.onerror = function () {\n    // this.onload = null here is necessary\n    // because even IE9 works not like others\n    this.onerror = this.onload = null\n    cb(new Error('Failed to load ' + this.src), script)\n  }\n}\n\nfunction ieOnEnd (script, cb) {\n  script.onreadystatechange = function () {\n    if (this.readyState != 'complete' && this.readyState != 'loaded') return\n    this.onreadystatechange = null\n    cb(null, script) // there is no way to catch loading errors in IE8\n  }\n}\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var MapCache = require('./_MapCache'),\n    setCacheAdd = require('./_setCacheAdd'),\n    setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values == null ? 0 : values.length;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      resIndex = 0,\n      result = [];\n\n  while (++index < length) {\n    var value = array[index];\n    if (predicate(value, index, array)) {\n      result[resIndex++] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayFilter;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\nmodule.exports = arrayPush;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nmodule.exports = arraySome;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var copyObject = require('./_copyObject'),\n    keys = require('./keys');\n\n/**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssign(object, source) {\n  return object && copyObject(source, keys(source), object);\n}\n\nmodule.exports = baseAssign;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\nfunction baseAssignIn(object, source) {\n  return object && copyObject(source, keysIn(source), object);\n}\n\nmodule.exports = baseAssignIn;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var Stack = require('./_Stack'),\n    arrayEach = require('./_arrayEach'),\n    assignValue = require('./_assignValue'),\n    baseAssign = require('./_baseAssign'),\n    baseAssignIn = require('./_baseAssignIn'),\n    cloneBuffer = require('./_cloneBuffer'),\n    copyArray = require('./_copyArray'),\n    copySymbols = require('./_copySymbols'),\n    copySymbolsIn = require('./_copySymbolsIn'),\n    getAllKeys = require('./_getAllKeys'),\n    getAllKeysIn = require('./_getAllKeysIn'),\n    getTag = require('./_getTag'),\n    initCloneArray = require('./_initCloneArray'),\n    initCloneByTag = require('./_initCloneByTag'),\n    initCloneObject = require('./_initCloneObject'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isMap = require('./isMap'),\n    isObject = require('./isObject'),\n    isSet = require('./isSet'),\n    keys = require('./keys'),\n    keysIn = require('./keysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Deep clone\n *  2 - Flatten inherited properties\n *  4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\nfunction baseClone(value, bitmask, customizer, key, object, stack) {\n  var result,\n      isDeep = bitmask & CLONE_DEEP_FLAG,\n      isFlat = bitmask & CLONE_FLAT_FLAG,\n      isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n  if (customizer) {\n    result = object ? customizer(value, key, object, stack) : customizer(value);\n  }\n  if (result !== undefined) {\n    return result;\n  }\n  if (!isObject(value)) {\n    return value;\n  }\n  var isArr = isArray(value);\n  if (isArr) {\n    result = initCloneArray(value);\n    if (!isDeep) {\n      return copyArray(value, result);\n    }\n  } else {\n    var tag = getTag(value),\n        isFunc = tag == funcTag || tag == genTag;\n\n    if (isBuffer(value)) {\n      return cloneBuffer(value, isDeep);\n    }\n    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n      result = (isFlat || isFunc) ? {} : initCloneObject(value);\n      if (!isDeep) {\n        return isFlat\n          ? copySymbolsIn(value, baseAssignIn(result, value))\n          : copySymbols(value, baseAssign(result, value));\n      }\n    } else {\n      if (!cloneableTags[tag]) {\n        return object ? value : {};\n      }\n      result = initCloneByTag(value, tag, isDeep);\n    }\n  }\n  // Check for circular references and return its corresponding clone.\n  stack || (stack = new Stack);\n  var stacked = stack.get(value);\n  if (stacked) {\n    return stacked;\n  }\n  stack.set(value, result);\n\n  if (isSet(value)) {\n    value.forEach(function(subValue) {\n      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n    });\n  } else if (isMap(value)) {\n    value.forEach(function(subValue, key) {\n      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n    });\n  }\n\n  var keysFunc = isFull\n    ? (isFlat ? getAllKeysIn : getAllKeys)\n    : (isFlat ? keysIn : keys);\n\n  var props = isArr ? undefined : keysFunc(value);\n  arrayEach(props || value, function(subValue, key) {\n    if (props) {\n      key = subValue;\n      subValue = value[key];\n    }\n    // Recursively populate clone (susceptible to call stack limits).\n    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n  });\n  return result;\n}\n\nmodule.exports = baseClone;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","var arrayPush = require('./_arrayPush'),\n    isFlattenable = require('./_isFlattenable');\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseFlatten;\n","var castPath = require('./_castPath'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = castPath(path, object);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n","var arrayPush = require('./_arrayPush'),\n    isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n  var result = keysFunc(object);\n  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n *  1 - Unordered comparison\n *  2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n    equalArrays = require('./_equalArrays'),\n    equalByTag = require('./_equalByTag'),\n    equalObjects = require('./_equalObjects'),\n    getTag = require('./_getTag'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = objIsArr ? arrayTag : getTag(object),\n      othTag = othIsArr ? arrayTag : getTag(other);\n\n  objTag = objTag == argsTag ? objectTag : objTag;\n  othTag = othTag == argsTag ? objectTag : othTag;\n\n  var objIsObj = objTag == objectTag,\n      othIsObj = othTag == objectTag,\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && isBuffer(object)) {\n    if (!isBuffer(other)) {\n      return false;\n    }\n    objIsArr = true;\n    objIsObj = false;\n  }\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n  }\n  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\n\n/**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\nfunction baseIsMap(value) {\n  return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nmodule.exports = baseIsMap;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var getTag = require('./_getTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\n\n/**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\nfunction baseIsSet(value) {\n  return isObjectLike(value) && getTag(value) == setTag;\n}\n\nmodule.exports = baseIsSet;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","var isPrototype = require('./_isPrototype'),\n    nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeys;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\nmodule.exports = baseSlice;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var castPath = require('./_castPath'),\n    last = require('./last'),\n    parent = require('./_parent'),\n    toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\nfunction baseUnset(object, path) {\n  path = castPath(path, object);\n  object = parent(object, path);\n  return object == null || delete object[toKey(last(path))];\n}\n\nmodule.exports = baseUnset;\n","var arrayMap = require('./_arrayMap');\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n  return arrayMap(props, function(key) {\n    return object[key];\n  });\n}\n\nmodule.exports = baseValues;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n  return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var isArray = require('./isArray'),\n    isKey = require('./_isKey'),\n    stringToPath = require('./_stringToPath'),\n    toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n  if (isArray(value)) {\n    return value;\n  }\n  return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\nfunction cloneDataView(dataView, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nmodule.exports = cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\n\n/**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\nfunction cloneRegExp(regexp) {\n  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n  result.lastIndex = regexp.lastIndex;\n  return result;\n}\n\nmodule.exports = cloneRegExp;\n","var Symbol = require('./_Symbol');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\nfunction cloneSymbol(symbol) {\n  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nmodule.exports = cloneSymbol;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","var copyObject = require('./_copyObject'),\n    getSymbols = require('./_getSymbols');\n\n/**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbols(source, object) {\n  return copyObject(source, getSymbols(source), object);\n}\n\nmodule.exports = copySymbols;\n","var copyObject = require('./_copyObject'),\n    getSymbolsIn = require('./_getSymbolsIn');\n\n/**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\nfunction copySymbolsIn(source, object) {\n  return copyObject(source, getSymbolsIn(source), object);\n}\n\nmodule.exports = copySymbolsIn;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var isPlainObject = require('./isPlainObject');\n\n/**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\nfunction customOmitClone(value) {\n  return isPlainObject(value) ? undefined : value;\n}\n\nmodule.exports = customOmitClone;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var SetCache = require('./_SetCache'),\n    arraySome = require('./_arraySome'),\n    cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Check that cyclic values are equal.\n  var arrStacked = stack.get(array);\n  var othStacked = stack.get(other);\n  if (arrStacked && othStacked) {\n    return arrStacked == other && othStacked == array;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, bitmask, customizer, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalArrays;\n","var Symbol = require('./_Symbol'),\n    Uint8Array = require('./_Uint8Array'),\n    eq = require('./eq'),\n    equalArrays = require('./_equalArrays'),\n    mapToArray = require('./_mapToArray'),\n    setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n    COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= COMPARE_UNORDERED_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\nmodule.exports = equalByTag;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n      objProps = getAllKeys(object),\n      objLength = objProps.length,\n      othProps = getAllKeys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Check that cyclic values are equal.\n  var objStacked = stack.get(object);\n  var othStacked = stack.get(other);\n  if (objStacked && othStacked) {\n    return objStacked == other && othStacked == object;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\nmodule.exports = equalObjects;\n","var flatten = require('./flatten'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\nfunction flatRest(func) {\n  return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nmodule.exports = flatRest;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbols = require('./_getSymbols'),\n    keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n  return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n    getSymbolsIn = require('./_getSymbolsIn'),\n    keysIn = require('./keysIn');\n\n/**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeysIn(object) {\n  return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nmodule.exports = getAllKeysIn;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","var arrayFilter = require('./_arrayFilter'),\n    stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n  if (object == null) {\n    return [];\n  }\n  object = Object(object);\n  return arrayFilter(nativeGetSymbols(object), function(symbol) {\n    return propertyIsEnumerable.call(object, symbol);\n  });\n};\n\nmodule.exports = getSymbols;\n","var arrayPush = require('./_arrayPush'),\n    getPrototype = require('./_getPrototype'),\n    getSymbols = require('./_getSymbols'),\n    stubArray = require('./stubArray');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n  var result = [];\n  while (object) {\n    arrayPush(result, getSymbols(object));\n    object = getPrototype(object);\n  }\n  return result;\n};\n\nmodule.exports = getSymbolsIn;\n","var DataView = require('./_DataView'),\n    Map = require('./_Map'),\n    Promise = require('./_Promise'),\n    Set = require('./_Set'),\n    WeakMap = require('./_WeakMap'),\n    baseGetTag = require('./_baseGetTag'),\n    toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    setTag = '[object Set]',\n    weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = baseGetTag(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : '';\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\nmodule.exports = getTag;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\nfunction initCloneArray(array) {\n  var length = array.length,\n      result = new array.constructor(length);\n\n  // Add properties assigned by `RegExp#exec`.\n  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n    result.index = array.index;\n    result.input = array.input;\n  }\n  return result;\n}\n\nmodule.exports = initCloneArray;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer'),\n    cloneDataView = require('./_cloneDataView'),\n    cloneRegExp = require('./_cloneRegExp'),\n    cloneSymbol = require('./_cloneSymbol'),\n    cloneTypedArray = require('./_cloneTypedArray');\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneByTag(object, tag, isDeep) {\n  var Ctor = object.constructor;\n  switch (tag) {\n    case arrayBufferTag:\n      return cloneArrayBuffer(object);\n\n    case boolTag:\n    case dateTag:\n      return new Ctor(+object);\n\n    case dataViewTag:\n      return cloneDataView(object, isDeep);\n\n    case float32Tag: case float64Tag:\n    case int8Tag: case int16Tag: case int32Tag:\n    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n      return cloneTypedArray(object, isDeep);\n\n    case mapTag:\n      return new Ctor;\n\n    case numberTag:\n    case stringTag:\n      return new Ctor(object);\n\n    case regexpTag:\n      return cloneRegExp(object);\n\n    case setTag:\n      return new Ctor;\n\n    case symbolTag:\n      return cloneSymbol(object);\n  }\n}\n\nmodule.exports = initCloneByTag;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","var Symbol = require('./_Symbol'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray');\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nmodule.exports = isFlattenable;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\nmodule.exports = mapToArray;\n","var memoize = require('./memoize');\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n  var result = memoize(func, function(key) {\n    if (cache.size === MAX_MEMOIZE_SIZE) {\n      cache.clear();\n    }\n    return key;\n  });\n\n  var cache = result.cache;\n  return result;\n}\n\nmodule.exports = memoizeCapped;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","var baseGet = require('./_baseGet'),\n    baseSlice = require('./_baseSlice');\n\n/**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\nfunction parent(object, path) {\n  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n}\n\nmodule.exports = parent;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\nmodule.exports = setToArray;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var memoizeCapped = require('./_memoizeCapped');\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n  var result = [];\n  if (string.charCodeAt(0) === 46 /* . */) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, subString) {\n    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\nmodule.exports = stringToPath;\n","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseFlatten = require('./_baseFlatten');\n\n/**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\nfunction flatten(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? baseFlatten(array, 1) : [];\n}\n\nmodule.exports = flatten;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n  return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var root = require('./_root');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsFinite = root.isFinite;\n\n/**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\nfunction isFinite(value) {\n  return typeof value == 'number' && nativeIsFinite(value);\n}\n\nmodule.exports = isFinite;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var baseIsMap = require('./_baseIsMap'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\n\n/**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nmodule.exports = isMap;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n  return typeof value == 'number' ||\n    (isObjectLike(value) && baseGetTag(value) == numberTag);\n}\n\nmodule.exports = isNumber;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseIsSet = require('./_baseIsSet'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\n\n/**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nmodule.exports = isSet;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeys = require('./_baseKeys'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","/**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\nfunction last(array) {\n  var length = array == null ? 0 : array.length;\n  return length ? array[length - 1] : undefined;\n}\n\nmodule.exports = last;\n","var MapCache = require('./_MapCache');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result) || cache;\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nmodule.exports = memoize;\n","var arrayMap = require('./_arrayMap'),\n    baseClone = require('./_baseClone'),\n    baseUnset = require('./_baseUnset'),\n    castPath = require('./_castPath'),\n    copyObject = require('./_copyObject'),\n    customOmitClone = require('./_customOmitClone'),\n    flatRest = require('./_flatRest'),\n    getAllKeysIn = require('./_getAllKeysIn');\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n    CLONE_FLAT_FLAG = 2,\n    CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\nvar omit = flatRest(function(object, paths) {\n  var result = {};\n  if (object == null) {\n    return result;\n  }\n  var isDeep = false;\n  paths = arrayMap(paths, function(path) {\n    path = castPath(path, object);\n    isDeep || (isDeep = path.length > 1);\n    return path;\n  });\n  copyObject(object, getAllKeysIn(object), result);\n  if (isDeep) {\n    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n  }\n  var length = paths.length;\n  while (length--) {\n    baseUnset(result, paths[length]);\n  }\n  return result;\n});\n\nmodule.exports = omit;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n  return [];\n}\n\nmodule.exports = stubArray;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var baseValues = require('./_baseValues'),\n    keys = require('./keys');\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n  return object == null ? [] : baseValues(object, keys(object));\n}\n\nmodule.exports = values;\n","(typeof navigator !== \"undefined\") && (function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.lottie = factory());\n})(this, (function () { 'use strict';\n\n  var svgNS = 'http://www.w3.org/2000/svg';\n  var locationHref = '';\n  var _useWebWorker = false;\n  var initialDefaultFrame = -999999;\n\n  var setWebWorker = function setWebWorker(flag) {\n    _useWebWorker = !!flag;\n  };\n\n  var getWebWorker = function getWebWorker() {\n    return _useWebWorker;\n  };\n\n  var setLocationHref = function setLocationHref(value) {\n    locationHref = value;\n  };\n\n  var getLocationHref = function getLocationHref() {\n    return locationHref;\n  };\n\n  function createTag(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElement(type);\n  }\n\n  function extendPrototype(sources, destination) {\n    var i;\n    var len = sources.length;\n    var sourcePrototype;\n\n    for (i = 0; i < len; i += 1) {\n      sourcePrototype = sources[i].prototype;\n\n      for (var attr in sourcePrototype) {\n        if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr];\n      }\n    }\n  }\n\n  function getDescriptor(object, prop) {\n    return Object.getOwnPropertyDescriptor(object, prop);\n  }\n\n  function createProxyFunction(prototype) {\n    function ProxyFunction() {}\n\n    ProxyFunction.prototype = prototype;\n    return ProxyFunction;\n  }\n\n  // import Howl from '../../3rd_party/howler';\n  var audioControllerFactory = function () {\n    function AudioController(audioFactory) {\n      this.audios = [];\n      this.audioFactory = audioFactory;\n      this._volume = 1;\n      this._isMuted = false;\n    }\n\n    AudioController.prototype = {\n      addAudio: function addAudio(audio) {\n        this.audios.push(audio);\n      },\n      pause: function pause() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].pause();\n        }\n      },\n      resume: function resume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].resume();\n        }\n      },\n      setRate: function setRate(rateValue) {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].setRate(rateValue);\n        }\n      },\n      createAudio: function createAudio(assetPath) {\n        if (this.audioFactory) {\n          return this.audioFactory(assetPath);\n        }\n\n        if (window.Howl) {\n          return new window.Howl({\n            src: [assetPath]\n          });\n        }\n\n        return {\n          isPlaying: false,\n          play: function play() {\n            this.isPlaying = true;\n          },\n          seek: function seek() {\n            this.isPlaying = false;\n          },\n          playing: function playing() {},\n          rate: function rate() {},\n          setVolume: function setVolume() {}\n        };\n      },\n      setAudioFactory: function setAudioFactory(audioFactory) {\n        this.audioFactory = audioFactory;\n      },\n      setVolume: function setVolume(value) {\n        this._volume = value;\n\n        this._updateVolume();\n      },\n      mute: function mute() {\n        this._isMuted = true;\n\n        this._updateVolume();\n      },\n      unmute: function unmute() {\n        this._isMuted = false;\n\n        this._updateVolume();\n      },\n      getVolume: function getVolume() {\n        return this._volume;\n      },\n      _updateVolume: function _updateVolume() {\n        var i;\n        var len = this.audios.length;\n\n        for (i = 0; i < len; i += 1) {\n          this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n        }\n      }\n    };\n    return function () {\n      return new AudioController();\n    };\n  }();\n\n  var createTypedArray = function () {\n    function createRegularArray(type, len) {\n      var i = 0;\n      var arr = [];\n      var value;\n\n      switch (type) {\n        case 'int16':\n        case 'uint8c':\n          value = 1;\n          break;\n\n        default:\n          value = 1.1;\n          break;\n      }\n\n      for (i = 0; i < len; i += 1) {\n        arr.push(value);\n      }\n\n      return arr;\n    }\n\n    function createTypedArrayFactory(type, len) {\n      if (type === 'float32') {\n        return new Float32Array(len);\n      }\n\n      if (type === 'int16') {\n        return new Int16Array(len);\n      }\n\n      if (type === 'uint8c') {\n        return new Uint8ClampedArray(len);\n      }\n\n      return createRegularArray(type, len);\n    }\n\n    if (typeof Uint8ClampedArray === 'function' && typeof Float32Array === 'function') {\n      return createTypedArrayFactory;\n    }\n\n    return createRegularArray;\n  }();\n\n  function createSizedArray(len) {\n    return Array.apply(null, {\n      length: len\n    });\n  }\n\n  function _typeof$6(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$6 = function _typeof(obj) { return typeof obj; }; } else { _typeof$6 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$6(obj); }\n  var subframeEnabled = true;\n  var expressionsPlugin = null;\n  var idPrefix$1 = '';\n  var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  var _shouldRoundValues = false;\n  var bmPow = Math.pow;\n  var bmSqrt = Math.sqrt;\n  var bmFloor = Math.floor;\n  var bmMax = Math.max;\n  var bmMin = Math.min;\n  var BMMath = {};\n\n  (function () {\n    var propertyNames = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'atan2', 'ceil', 'cbrt', 'expm1', 'clz32', 'cos', 'cosh', 'exp', 'floor', 'fround', 'hypot', 'imul', 'log', 'log1p', 'log2', 'log10', 'max', 'min', 'pow', 'random', 'round', 'sign', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc', 'E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2'];\n    var i;\n    var len = propertyNames.length;\n\n    for (i = 0; i < len; i += 1) {\n      BMMath[propertyNames[i]] = Math[propertyNames[i]];\n    }\n  })();\n\n  function ProjectInterface$1() {\n    return {};\n  }\n\n  BMMath.random = Math.random;\n\n  BMMath.abs = function (val) {\n    var tOfVal = _typeof$6(val);\n\n    if (tOfVal === 'object' && val.length) {\n      var absArr = createSizedArray(val.length);\n      var i;\n      var len = val.length;\n\n      for (i = 0; i < len; i += 1) {\n        absArr[i] = Math.abs(val[i]);\n      }\n\n      return absArr;\n    }\n\n    return Math.abs(val);\n  };\n\n  var defaultCurveSegments = 150;\n  var degToRads = Math.PI / 180;\n  var roundCorner = 0.5519;\n\n  function roundValues(flag) {\n    _shouldRoundValues = !!flag;\n  }\n\n  function bmRnd(value) {\n    if (_shouldRoundValues) {\n      return Math.round(value);\n    }\n\n    return value;\n  }\n\n  function styleDiv(element) {\n    element.style.position = 'absolute';\n    element.style.top = 0;\n    element.style.left = 0;\n    element.style.display = 'block';\n    element.style.transformOrigin = '0 0';\n    element.style.webkitTransformOrigin = '0 0';\n    element.style.backfaceVisibility = 'visible';\n    element.style.webkitBackfaceVisibility = 'visible';\n    element.style.transformStyle = 'preserve-3d';\n    element.style.webkitTransformStyle = 'preserve-3d';\n    element.style.mozTransformStyle = 'preserve-3d';\n  }\n\n  function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n    this.type = type;\n    this.currentTime = currentTime;\n    this.totalTime = totalTime;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteEvent(type, frameMultiplier) {\n    this.type = type;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n    this.type = type;\n    this.currentLoop = currentLoop;\n    this.totalLoops = totalLoops;\n    this.direction = frameMultiplier < 0 ? -1 : 1;\n  }\n\n  function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n    this.type = type;\n    this.firstFrame = firstFrame;\n    this.totalFrames = totalFrames;\n  }\n\n  function BMDestroyEvent(type, target) {\n    this.type = type;\n    this.target = target;\n  }\n\n  function BMRenderFrameErrorEvent(nativeError, currentTime) {\n    this.type = 'renderFrameError';\n    this.nativeError = nativeError;\n    this.currentTime = currentTime;\n  }\n\n  function BMConfigErrorEvent(nativeError) {\n    this.type = 'configError';\n    this.nativeError = nativeError;\n  }\n\n  function BMAnimationConfigErrorEvent(type, nativeError) {\n    this.type = type;\n    this.nativeError = nativeError;\n  }\n\n  var createElementID = function () {\n    var _count = 0;\n    return function createID() {\n      _count += 1;\n      return idPrefix$1 + '__lottie_element_' + _count;\n    };\n  }();\n\n  function HSVtoRGB(h, s, v) {\n    var r;\n    var g;\n    var b;\n    var i;\n    var f;\n    var p;\n    var q;\n    var t;\n    i = Math.floor(h * 6);\n    f = h * 6 - i;\n    p = v * (1 - s);\n    q = v * (1 - f * s);\n    t = v * (1 - (1 - f) * s);\n\n    switch (i % 6) {\n      case 0:\n        r = v;\n        g = t;\n        b = p;\n        break;\n\n      case 1:\n        r = q;\n        g = v;\n        b = p;\n        break;\n\n      case 2:\n        r = p;\n        g = v;\n        b = t;\n        break;\n\n      case 3:\n        r = p;\n        g = q;\n        b = v;\n        break;\n\n      case 4:\n        r = t;\n        g = p;\n        b = v;\n        break;\n\n      case 5:\n        r = v;\n        g = p;\n        b = q;\n        break;\n\n      default:\n        break;\n    }\n\n    return [r, g, b];\n  }\n\n  function RGBtoHSV(r, g, b) {\n    var max = Math.max(r, g, b);\n    var min = Math.min(r, g, b);\n    var d = max - min;\n    var h;\n    var s = max === 0 ? 0 : d / max;\n    var v = max / 255;\n\n    switch (max) {\n      case min:\n        h = 0;\n        break;\n\n      case r:\n        h = g - b + d * (g < b ? 6 : 0);\n        h /= 6 * d;\n        break;\n\n      case g:\n        h = b - r + d * 2;\n        h /= 6 * d;\n        break;\n\n      case b:\n        h = r - g + d * 4;\n        h /= 6 * d;\n        break;\n\n      default:\n        break;\n    }\n\n    return [h, s, v];\n  }\n\n  function addSaturationToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[1] += offset;\n\n    if (hsv[1] > 1) {\n      hsv[1] = 1;\n    } else if (hsv[1] <= 0) {\n      hsv[1] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addBrightnessToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[2] += offset;\n\n    if (hsv[2] > 1) {\n      hsv[2] = 1;\n    } else if (hsv[2] < 0) {\n      hsv[2] = 0;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  function addHueToRGB(color, offset) {\n    var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n    hsv[0] += offset / 360;\n\n    if (hsv[0] > 1) {\n      hsv[0] -= 1;\n    } else if (hsv[0] < 0) {\n      hsv[0] += 1;\n    }\n\n    return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n  }\n\n  var rgbToHex = function () {\n    var colorMap = [];\n    var i;\n    var hex;\n\n    for (i = 0; i < 256; i += 1) {\n      hex = i.toString(16);\n      colorMap[i] = hex.length === 1 ? '0' + hex : hex;\n    }\n\n    return function (r, g, b) {\n      if (r < 0) {\n        r = 0;\n      }\n\n      if (g < 0) {\n        g = 0;\n      }\n\n      if (b < 0) {\n        b = 0;\n      }\n\n      return '#' + colorMap[r] + colorMap[g] + colorMap[b];\n    };\n  }();\n\n  var setSubframeEnabled = function setSubframeEnabled(flag) {\n    subframeEnabled = !!flag;\n  };\n\n  var getSubframeEnabled = function getSubframeEnabled() {\n    return subframeEnabled;\n  };\n\n  var setExpressionsPlugin = function setExpressionsPlugin(value) {\n    expressionsPlugin = value;\n  };\n\n  var getExpressionsPlugin = function getExpressionsPlugin() {\n    return expressionsPlugin;\n  };\n\n  var setDefaultCurveSegments = function setDefaultCurveSegments(value) {\n    defaultCurveSegments = value;\n  };\n\n  var getDefaultCurveSegments = function getDefaultCurveSegments() {\n    return defaultCurveSegments;\n  };\n\n  var setIdPrefix = function setIdPrefix(value) {\n    idPrefix$1 = value;\n  };\n\n  var getIdPrefix = function getIdPrefix() {\n    return idPrefix$1;\n  };\n\n  function createNS(type) {\n    // return {appendChild:function(){},setAttribute:function(){},style:{}}\n    return document.createElementNS(svgNS, type);\n  }\n\n  function _typeof$5(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$5 = function _typeof(obj) { return typeof obj; }; } else { _typeof$5 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$5(obj); }\n\n  var dataManager = function () {\n    var _counterId = 1;\n    var processes = [];\n    var workerFn;\n    var workerInstance;\n    var workerProxy = {\n      onmessage: function onmessage() {},\n      postMessage: function postMessage(path) {\n        workerFn({\n          data: path\n        });\n      }\n    };\n    var _workerSelf = {\n      postMessage: function postMessage(data) {\n        workerProxy.onmessage({\n          data: data\n        });\n      }\n    };\n\n    function createWorker(fn) {\n      if (window.Worker && window.Blob && getWebWorker()) {\n        var blob = new Blob(['var _workerSelf = self; self.onmessage = ', fn.toString()], {\n          type: 'text/javascript'\n        }); // var blob = new Blob(['self.onmessage = ', fn.toString()], { type: 'text/javascript' });\n\n        var url = URL.createObjectURL(blob);\n        return new Worker(url);\n      }\n\n      workerFn = fn;\n      return workerProxy;\n    }\n\n    function setupWorker() {\n      if (!workerInstance) {\n        workerInstance = createWorker(function workerStart(e) {\n          function dataFunctionManager() {\n            function completeLayers(layers, comps) {\n              var layerData;\n              var i;\n              var len = layers.length;\n              var j;\n              var jLen;\n              var k;\n              var kLen;\n\n              for (i = 0; i < len; i += 1) {\n                layerData = layers[i];\n\n                if ('ks' in layerData && !layerData.completed) {\n                  layerData.completed = true;\n\n                  if (layerData.tt) {\n                    layers[i - 1].td = layerData.tt;\n                  }\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        convertPathsToAbsoluteValues(maskProps[j].pt.k);\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 0) {\n                    layerData.layers = findCompLayers(layerData.refId, comps);\n                    completeLayers(layerData.layers, comps);\n                  } else if (layerData.ty === 4) {\n                    completeShapes(layerData.shapes);\n                  } else if (layerData.ty === 5) {\n                    completeText(layerData);\n                  }\n                }\n              }\n            }\n\n            function completeChars(chars, assets) {\n              if (chars) {\n                var i = 0;\n                var len = chars.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (chars[i].t === 1) {\n                    // var compData = findComp(chars[i].data.refId, assets);\n                    chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); // chars[i].data.ip = 0;\n                    // chars[i].data.op = 99999;\n                    // chars[i].data.st = 0;\n                    // chars[i].data.sr = 1;\n                    // chars[i].w = compData.w;\n                    // chars[i].data.ks = {\n                    //   a: { k: [0, 0, 0], a: 0 },\n                    //   p: { k: [0, -compData.h, 0], a: 0 },\n                    //   r: { k: 0, a: 0 },\n                    //   s: { k: [100, 100], a: 0 },\n                    //   o: { k: 100, a: 0 },\n                    // };\n\n                    completeLayers(chars[i].data.layers, assets);\n                  }\n                }\n              }\n            }\n\n            function findComp(id, comps) {\n              var i = 0;\n              var len = comps.length;\n\n              while (i < len) {\n                if (comps[i].id === id) {\n                  return comps[i];\n                }\n\n                i += 1;\n              }\n\n              return null;\n            }\n\n            function findCompLayers(id, comps) {\n              var comp = findComp(id, comps);\n\n              if (comp) {\n                if (!comp.layers.__used) {\n                  comp.layers.__used = true;\n                  return comp.layers;\n                }\n\n                return JSON.parse(JSON.stringify(comp.layers));\n              }\n\n              return null;\n            }\n\n            function completeShapes(arr) {\n              var i;\n              var len = arr.length;\n              var j;\n              var jLen;\n\n              for (i = len - 1; i >= 0; i -= 1) {\n                if (arr[i].ty === 'sh') {\n                  if (arr[i].ks.k.i) {\n                    convertPathsToAbsoluteValues(arr[i].ks.k);\n                  } else {\n                    jLen = arr[i].ks.k.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (arr[i].ks.k[j].s) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n                      }\n\n                      if (arr[i].ks.k[j].e) {\n                        convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n                      }\n                    }\n                  }\n                } else if (arr[i].ty === 'gr') {\n                  completeShapes(arr[i].it);\n                }\n              }\n            }\n\n            function convertPathsToAbsoluteValues(path) {\n              var i;\n              var len = path.i.length;\n\n              for (i = 0; i < len; i += 1) {\n                path.i[i][0] += path.v[i][0];\n                path.i[i][1] += path.v[i][1];\n                path.o[i][0] += path.v[i][0];\n                path.o[i][1] += path.v[i][1];\n              }\n            }\n\n            function checkVersion(minimum, animVersionString) {\n              var animVersion = animVersionString ? animVersionString.split('.') : [100, 100, 100];\n\n              if (minimum[0] > animVersion[0]) {\n                return true;\n              }\n\n              if (animVersion[0] > minimum[0]) {\n                return false;\n              }\n\n              if (minimum[1] > animVersion[1]) {\n                return true;\n              }\n\n              if (animVersion[1] > minimum[1]) {\n                return false;\n              }\n\n              if (minimum[2] > animVersion[2]) {\n                return true;\n              }\n\n              if (animVersion[2] > minimum[2]) {\n                return false;\n              }\n\n              return null;\n            }\n\n            var checkText = function () {\n              var minimumVersion = [4, 4, 14];\n\n              function updateTextLayer(textLayer) {\n                var documentData = textLayer.t.d;\n                textLayer.t.d = {\n                  k: [{\n                    s: documentData,\n                    t: 0\n                  }]\n                };\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkChars = function () {\n              var minimumVersion = [4, 7, 99];\n              return function (animationData) {\n                if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n                  var i;\n                  var len = animationData.chars.length;\n\n                  for (i = 0; i < len; i += 1) {\n                    var charData = animationData.chars[i];\n\n                    if (charData.data && charData.data.shapes) {\n                      completeShapes(charData.data.shapes);\n                      charData.data.ip = 0;\n                      charData.data.op = 99999;\n                      charData.data.st = 0;\n                      charData.data.sr = 1;\n                      charData.data.ks = {\n                        p: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        s: {\n                          k: [100, 100],\n                          a: 0\n                        },\n                        a: {\n                          k: [0, 0],\n                          a: 0\n                        },\n                        r: {\n                          k: 0,\n                          a: 0\n                        },\n                        o: {\n                          k: 100,\n                          a: 0\n                        }\n                      };\n\n                      if (!animationData.chars[i].t) {\n                        charData.data.shapes.push({\n                          ty: 'no'\n                        });\n                        charData.data.shapes[0].it.push({\n                          p: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          s: {\n                            k: [100, 100],\n                            a: 0\n                          },\n                          a: {\n                            k: [0, 0],\n                            a: 0\n                          },\n                          r: {\n                            k: 0,\n                            a: 0\n                          },\n                          o: {\n                            k: 100,\n                            a: 0\n                          },\n                          sk: {\n                            k: 0,\n                            a: 0\n                          },\n                          sa: {\n                            k: 0,\n                            a: 0\n                          },\n                          ty: 'tr'\n                        });\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkPathProperties = function () {\n              var minimumVersion = [5, 7, 15];\n\n              function updateTextLayer(textLayer) {\n                var pathData = textLayer.t.p;\n\n                if (typeof pathData.a === 'number') {\n                  pathData.a = {\n                    a: 0,\n                    k: pathData.a\n                  };\n                }\n\n                if (typeof pathData.p === 'number') {\n                  pathData.p = {\n                    a: 0,\n                    k: pathData.p\n                  };\n                }\n\n                if (typeof pathData.r === 'number') {\n                  pathData.r = {\n                    a: 0,\n                    k: pathData.r\n                  };\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 5) {\n                    updateTextLayer(layers[i]);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkColors = function () {\n              var minimumVersion = [4, 1, 9];\n\n              function iterateShapes(shapes) {\n                var i;\n                var len = shapes.length;\n                var j;\n                var jLen;\n\n                for (i = 0; i < len; i += 1) {\n                  if (shapes[i].ty === 'gr') {\n                    iterateShapes(shapes[i].it);\n                  } else if (shapes[i].ty === 'fl' || shapes[i].ty === 'st') {\n                    if (shapes[i].c.k && shapes[i].c.k[0].i) {\n                      jLen = shapes[i].c.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (shapes[i].c.k[j].s) {\n                          shapes[i].c.k[j].s[0] /= 255;\n                          shapes[i].c.k[j].s[1] /= 255;\n                          shapes[i].c.k[j].s[2] /= 255;\n                          shapes[i].c.k[j].s[3] /= 255;\n                        }\n\n                        if (shapes[i].c.k[j].e) {\n                          shapes[i].c.k[j].e[0] /= 255;\n                          shapes[i].c.k[j].e[1] /= 255;\n                          shapes[i].c.k[j].e[2] /= 255;\n                          shapes[i].c.k[j].e[3] /= 255;\n                        }\n                      }\n                    } else {\n                      shapes[i].c.k[0] /= 255;\n                      shapes[i].c.k[1] /= 255;\n                      shapes[i].c.k[2] /= 255;\n                      shapes[i].c.k[3] /= 255;\n                    }\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var i;\n                var len = layers.length;\n\n                for (i = 0; i < len; i += 1) {\n                  if (layers[i].ty === 4) {\n                    iterateShapes(layers[i].shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            var checkShapes = function () {\n              var minimumVersion = [4, 4, 18];\n\n              function completeClosingShapes(arr) {\n                var i;\n                var len = arr.length;\n                var j;\n                var jLen;\n\n                for (i = len - 1; i >= 0; i -= 1) {\n                  if (arr[i].ty === 'sh') {\n                    if (arr[i].ks.k.i) {\n                      arr[i].ks.k.c = arr[i].closed;\n                    } else {\n                      jLen = arr[i].ks.k.length;\n\n                      for (j = 0; j < jLen; j += 1) {\n                        if (arr[i].ks.k[j].s) {\n                          arr[i].ks.k[j].s[0].c = arr[i].closed;\n                        }\n\n                        if (arr[i].ks.k[j].e) {\n                          arr[i].ks.k[j].e[0].c = arr[i].closed;\n                        }\n                      }\n                    }\n                  } else if (arr[i].ty === 'gr') {\n                    completeClosingShapes(arr[i].it);\n                  }\n                }\n              }\n\n              function iterateLayers(layers) {\n                var layerData;\n                var i;\n                var len = layers.length;\n                var j;\n                var jLen;\n                var k;\n                var kLen;\n\n                for (i = 0; i < len; i += 1) {\n                  layerData = layers[i];\n\n                  if (layerData.hasMask) {\n                    var maskProps = layerData.masksProperties;\n                    jLen = maskProps.length;\n\n                    for (j = 0; j < jLen; j += 1) {\n                      if (maskProps[j].pt.k.i) {\n                        maskProps[j].pt.k.c = maskProps[j].cl;\n                      } else {\n                        kLen = maskProps[j].pt.k.length;\n\n                        for (k = 0; k < kLen; k += 1) {\n                          if (maskProps[j].pt.k[k].s) {\n                            maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n                          }\n\n                          if (maskProps[j].pt.k[k].e) {\n                            maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n                          }\n                        }\n                      }\n                    }\n                  }\n\n                  if (layerData.ty === 4) {\n                    completeClosingShapes(layerData.shapes);\n                  }\n                }\n              }\n\n              return function (animationData) {\n                if (checkVersion(minimumVersion, animationData.v)) {\n                  iterateLayers(animationData.layers);\n\n                  if (animationData.assets) {\n                    var i;\n                    var len = animationData.assets.length;\n\n                    for (i = 0; i < len; i += 1) {\n                      if (animationData.assets[i].layers) {\n                        iterateLayers(animationData.assets[i].layers);\n                      }\n                    }\n                  }\n                }\n              };\n            }();\n\n            function completeData(animationData) {\n              if (animationData.__complete) {\n                return;\n              }\n\n              checkColors(animationData);\n              checkText(animationData);\n              checkChars(animationData);\n              checkPathProperties(animationData);\n              checkShapes(animationData);\n              completeLayers(animationData.layers, animationData.assets);\n              completeChars(animationData.chars, animationData.assets);\n              animationData.__complete = true;\n            }\n\n            function completeText(data) {\n              if (data.t.a.length === 0 && !('m' in data.t.p)) {// data.singleShape = true;\n              }\n            }\n\n            var moduleOb = {};\n            moduleOb.completeData = completeData;\n            moduleOb.checkColors = checkColors;\n            moduleOb.checkChars = checkChars;\n            moduleOb.checkPathProperties = checkPathProperties;\n            moduleOb.checkShapes = checkShapes;\n            moduleOb.completeLayers = completeLayers;\n            return moduleOb;\n          }\n\n          if (!_workerSelf.dataManager) {\n            _workerSelf.dataManager = dataFunctionManager();\n          }\n\n          if (!_workerSelf.assetLoader) {\n            _workerSelf.assetLoader = function () {\n              function formatResponse(xhr) {\n                // using typeof doubles the time of execution of this method,\n                // so if available, it's better to use the header to validate the type\n                var contentTypeHeader = xhr.getResponseHeader('content-type');\n\n                if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {\n                  return xhr.response;\n                }\n\n                if (xhr.response && _typeof$5(xhr.response) === 'object') {\n                  return xhr.response;\n                }\n\n                if (xhr.response && typeof xhr.response === 'string') {\n                  return JSON.parse(xhr.response);\n                }\n\n                if (xhr.responseText) {\n                  return JSON.parse(xhr.responseText);\n                }\n\n                return null;\n              }\n\n              function loadAsset(path, fullPath, callback, errorCallback) {\n                var response;\n                var xhr = new XMLHttpRequest(); // set responseType after calling open or IE will break.\n\n                try {\n                  // This crashes on Android WebView prior to KitKat\n                  xhr.responseType = 'json';\n                } catch (err) {} // eslint-disable-line no-empty\n\n\n                xhr.onreadystatechange = function () {\n                  if (xhr.readyState === 4) {\n                    if (xhr.status === 200) {\n                      response = formatResponse(xhr);\n                      callback(response);\n                    } else {\n                      try {\n                        response = formatResponse(xhr);\n                        callback(response);\n                      } catch (err) {\n                        if (errorCallback) {\n                          errorCallback(err);\n                        }\n                      }\n                    }\n                  }\n                };\n\n                try {\n                  xhr.open('GET', path, true);\n                } catch (error) {\n                  xhr.open('GET', fullPath + '/' + path, true);\n                }\n\n                xhr.send();\n              }\n\n              return {\n                load: loadAsset\n              };\n            }();\n          }\n\n          if (e.data.type === 'loadAnimation') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.dataManager.completeData(data);\n\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          } else if (e.data.type === 'complete') {\n            var animation = e.data.animation;\n\n            _workerSelf.dataManager.completeData(animation);\n\n            _workerSelf.postMessage({\n              id: e.data.id,\n              payload: animation,\n              status: 'success'\n            });\n          } else if (e.data.type === 'loadData') {\n            _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function (data) {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                payload: data,\n                status: 'success'\n              });\n            }, function () {\n              _workerSelf.postMessage({\n                id: e.data.id,\n                status: 'error'\n              });\n            });\n          }\n        });\n\n        workerInstance.onmessage = function (event) {\n          var data = event.data;\n          var id = data.id;\n          var process = processes[id];\n          processes[id] = null;\n\n          if (data.status === 'success') {\n            process.onComplete(data.payload);\n          } else if (process.onError) {\n            process.onError();\n          }\n        };\n      }\n    }\n\n    function createProcess(onComplete, onError) {\n      _counterId += 1;\n      var id = 'processId_' + _counterId;\n      processes[id] = {\n        onComplete: onComplete,\n        onError: onError\n      };\n      return id;\n    }\n\n    function loadAnimation(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadAnimation',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function loadData(path, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'loadData',\n        path: path,\n        fullPath: window.location.origin + window.location.pathname,\n        id: processId\n      });\n    }\n\n    function completeAnimation(anim, onComplete, onError) {\n      setupWorker();\n      var processId = createProcess(onComplete, onError);\n      workerInstance.postMessage({\n        type: 'complete',\n        animation: anim,\n        id: processId\n      });\n    }\n\n    return {\n      loadAnimation: loadAnimation,\n      loadData: loadData,\n      completeAnimation: completeAnimation\n    };\n  }();\n\n  var ImagePreloader = function () {\n    var proxyImage = function () {\n      var canvas = createTag('canvas');\n      canvas.width = 1;\n      canvas.height = 1;\n      var ctx = canvas.getContext('2d');\n      ctx.fillStyle = 'rgba(0,0,0,0)';\n      ctx.fillRect(0, 0, 1, 1);\n      return canvas;\n    }();\n\n    function imageLoaded() {\n      this.loadedAssets += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function footageLoaded() {\n      this.loadedFootagesCount += 1;\n\n      if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n        if (this.imagesLoadedCb) {\n          this.imagesLoadedCb(null);\n        }\n      }\n    }\n\n    function getAssetsPath(assetData, assetsPath, originalPath) {\n      var path = '';\n\n      if (assetData.e) {\n        path = assetData.p;\n      } else if (assetsPath) {\n        var imagePath = assetData.p;\n\n        if (imagePath.indexOf('images/') !== -1) {\n          imagePath = imagePath.split('/')[1];\n        }\n\n        path = assetsPath + imagePath;\n      } else {\n        path = originalPath;\n        path += assetData.u ? assetData.u : '';\n        path += assetData.p;\n      }\n\n      return path;\n    }\n\n    function testImageLoaded(img) {\n      var _count = 0;\n      var intervalId = setInterval(function () {\n        var box = img.getBBox();\n\n        if (box.width || _count > 500) {\n          this._imageLoaded();\n\n          clearInterval(intervalId);\n        }\n\n        _count += 1;\n      }.bind(this), 50);\n    }\n\n    function createImageData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createNS('image');\n\n      if (isSafari) {\n        this.testImageLoaded(img);\n      } else {\n        img.addEventListener('load', this._imageLoaded, false);\n      }\n\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n\n      if (this._elementHelper.append) {\n        this._elementHelper.append(img);\n      } else {\n        this._elementHelper.appendChild(img);\n      }\n\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createImgData(assetData) {\n      var path = getAssetsPath(assetData, this.assetsPath, this.path);\n      var img = createTag('img');\n      img.crossOrigin = 'anonymous';\n      img.addEventListener('load', this._imageLoaded, false);\n      img.addEventListener('error', function () {\n        ob.img = proxyImage;\n\n        this._imageLoaded();\n      }.bind(this), false);\n      img.src = path;\n      var ob = {\n        img: img,\n        assetData: assetData\n      };\n      return ob;\n    }\n\n    function createFootageData(data) {\n      var ob = {\n        assetData: data\n      };\n      var path = getAssetsPath(data, this.assetsPath, this.path);\n      dataManager.loadData(path, function (footageData) {\n        ob.img = footageData;\n\n        this._footageLoaded();\n      }.bind(this), function () {\n        ob.img = {};\n\n        this._footageLoaded();\n      }.bind(this));\n      return ob;\n    }\n\n    function loadAssets(assets, cb) {\n      this.imagesLoadedCb = cb;\n      var i;\n      var len = assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (!assets[i].layers) {\n          if (!assets[i].t || assets[i].t === 'seq') {\n            this.totalImages += 1;\n            this.images.push(this._createImageData(assets[i]));\n          } else if (assets[i].t === 3) {\n            this.totalFootages += 1;\n            this.images.push(this.createFootageData(assets[i]));\n          }\n        }\n      }\n    }\n\n    function setPath(path) {\n      this.path = path || '';\n    }\n\n    function setAssetsPath(path) {\n      this.assetsPath = path || '';\n    }\n\n    function getAsset(assetData) {\n      var i = 0;\n      var len = this.images.length;\n\n      while (i < len) {\n        if (this.images[i].assetData === assetData) {\n          return this.images[i].img;\n        }\n\n        i += 1;\n      }\n\n      return null;\n    }\n\n    function destroy() {\n      this.imagesLoadedCb = null;\n      this.images.length = 0;\n    }\n\n    function loadedImages() {\n      return this.totalImages === this.loadedAssets;\n    }\n\n    function loadedFootages() {\n      return this.totalFootages === this.loadedFootagesCount;\n    }\n\n    function setCacheType(type, elementHelper) {\n      if (type === 'svg') {\n        this._elementHelper = elementHelper;\n        this._createImageData = this.createImageData.bind(this);\n      } else {\n        this._createImageData = this.createImgData.bind(this);\n      }\n    }\n\n    function ImagePreloaderFactory() {\n      this._imageLoaded = imageLoaded.bind(this);\n      this._footageLoaded = footageLoaded.bind(this);\n      this.testImageLoaded = testImageLoaded.bind(this);\n      this.createFootageData = createFootageData.bind(this);\n      this.assetsPath = '';\n      this.path = '';\n      this.totalImages = 0;\n      this.totalFootages = 0;\n      this.loadedAssets = 0;\n      this.loadedFootagesCount = 0;\n      this.imagesLoadedCb = null;\n      this.images = [];\n    }\n\n    ImagePreloaderFactory.prototype = {\n      loadAssets: loadAssets,\n      setAssetsPath: setAssetsPath,\n      setPath: setPath,\n      loadedImages: loadedImages,\n      loadedFootages: loadedFootages,\n      destroy: destroy,\n      getAsset: getAsset,\n      createImgData: createImgData,\n      createImageData: createImageData,\n      imageLoaded: imageLoaded,\n      footageLoaded: footageLoaded,\n      setCacheType: setCacheType\n    };\n    return ImagePreloaderFactory;\n  }();\n\n  function BaseEvent() {}\n\n  BaseEvent.prototype = {\n    triggerEvent: function triggerEvent(eventName, args) {\n      if (this._cbs[eventName]) {\n        var callbacks = this._cbs[eventName];\n\n        for (var i = 0; i < callbacks.length; i += 1) {\n          callbacks[i](args);\n        }\n      }\n    },\n    addEventListener: function addEventListener(eventName, callback) {\n      if (!this._cbs[eventName]) {\n        this._cbs[eventName] = [];\n      }\n\n      this._cbs[eventName].push(callback);\n\n      return function () {\n        this.removeEventListener(eventName, callback);\n      }.bind(this);\n    },\n    removeEventListener: function removeEventListener(eventName, callback) {\n      if (!callback) {\n        this._cbs[eventName] = null;\n      } else if (this._cbs[eventName]) {\n        var i = 0;\n        var len = this._cbs[eventName].length;\n\n        while (i < len) {\n          if (this._cbs[eventName][i] === callback) {\n            this._cbs[eventName].splice(i, 1);\n\n            i -= 1;\n            len -= 1;\n          }\n\n          i += 1;\n        }\n\n        if (!this._cbs[eventName].length) {\n          this._cbs[eventName] = null;\n        }\n      }\n    }\n  };\n\n  var markerParser = function () {\n    function parsePayloadLines(payload) {\n      var lines = payload.split('\\r\\n');\n      var keys = {};\n      var line;\n      var keysCount = 0;\n\n      for (var i = 0; i < lines.length; i += 1) {\n        line = lines[i].split(':');\n\n        if (line.length === 2) {\n          keys[line[0]] = line[1].trim();\n          keysCount += 1;\n        }\n      }\n\n      if (keysCount === 0) {\n        throw new Error();\n      }\n\n      return keys;\n    }\n\n    return function (_markers) {\n      var markers = [];\n\n      for (var i = 0; i < _markers.length; i += 1) {\n        var _marker = _markers[i];\n        var markerData = {\n          time: _marker.tm,\n          duration: _marker.dr\n        };\n\n        try {\n          markerData.payload = JSON.parse(_markers[i].cm);\n        } catch (_) {\n          try {\n            markerData.payload = parsePayloadLines(_markers[i].cm);\n          } catch (__) {\n            markerData.payload = {\n              name: _markers[i].cm\n            };\n          }\n        }\n\n        markers.push(markerData);\n      }\n\n      return markers;\n    };\n  }();\n\n  var ProjectInterface = function () {\n    function registerComposition(comp) {\n      this.compositions.push(comp);\n    }\n\n    return function () {\n      function _thisProjectFunction(name) {\n        var i = 0;\n        var len = this.compositions.length;\n\n        while (i < len) {\n          if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n            if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n              this.compositions[i].prepareFrame(this.currentFrame);\n            }\n\n            return this.compositions[i].compInterface;\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      _thisProjectFunction.compositions = [];\n      _thisProjectFunction.currentFrame = 0;\n      _thisProjectFunction.registerComposition = registerComposition;\n      return _thisProjectFunction;\n    };\n  }();\n\n  var renderers = {};\n\n  var registerRenderer = function registerRenderer(key, value) {\n    renderers[key] = value;\n  };\n\n  function getRenderer(key) {\n    return renderers[key];\n  }\n\n  function _typeof$4(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$4 = function _typeof(obj) { return typeof obj; }; } else { _typeof$4 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$4(obj); }\n\n  var AnimationItem = function AnimationItem() {\n    this._cbs = [];\n    this.name = '';\n    this.path = '';\n    this.isLoaded = false;\n    this.currentFrame = 0;\n    this.currentRawFrame = 0;\n    this.firstFrame = 0;\n    this.totalFrames = 0;\n    this.frameRate = 0;\n    this.frameMult = 0;\n    this.playSpeed = 1;\n    this.playDirection = 1;\n    this.playCount = 0;\n    this.animationData = {};\n    this.assets = [];\n    this.isPaused = true;\n    this.autoplay = false;\n    this.loop = true;\n    this.renderer = null;\n    this.animationID = createElementID();\n    this.assetsPath = '';\n    this.timeCompleted = 0;\n    this.segmentPos = 0;\n    this.isSubframeEnabled = getSubframeEnabled();\n    this.segments = [];\n    this._idle = true;\n    this._completedLoop = false;\n    this.projectInterface = ProjectInterface();\n    this.imagePreloader = new ImagePreloader();\n    this.audioController = audioControllerFactory();\n    this.markers = [];\n    this.configAnimation = this.configAnimation.bind(this);\n    this.onSetupError = this.onSetupError.bind(this);\n    this.onSegmentComplete = this.onSegmentComplete.bind(this);\n    this.drawnFrameEvent = new BMEnterFrameEvent('drawnFrame', 0, 0, 0);\n  };\n\n  extendPrototype([BaseEvent], AnimationItem);\n\n  AnimationItem.prototype.setParams = function (params) {\n    if (params.wrapper || params.container) {\n      this.wrapper = params.wrapper || params.container;\n    }\n\n    var animType = 'svg';\n\n    if (params.animType) {\n      animType = params.animType;\n    } else if (params.renderer) {\n      animType = params.renderer;\n    }\n\n    var RendererClass = getRenderer(animType);\n    this.renderer = new RendererClass(this, params.rendererSettings);\n    this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n    this.renderer.setProjectInterface(this.projectInterface);\n    this.animType = animType;\n\n    if (params.loop === '' || params.loop === null || params.loop === undefined || params.loop === true) {\n      this.loop = true;\n    } else if (params.loop === false) {\n      this.loop = false;\n    } else {\n      this.loop = parseInt(params.loop, 10);\n    }\n\n    this.autoplay = 'autoplay' in params ? params.autoplay : true;\n    this.name = params.name ? params.name : '';\n    this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, 'autoloadSegments') ? params.autoloadSegments : true;\n    this.assetsPath = params.assetsPath;\n    this.initialSegment = params.initialSegment;\n\n    if (params.audioFactory) {\n      this.audioController.setAudioFactory(params.audioFactory);\n    }\n\n    if (params.animationData) {\n      this.setupAnimation(params.animationData);\n    } else if (params.path) {\n      if (params.path.lastIndexOf('\\\\') !== -1) {\n        this.path = params.path.substr(0, params.path.lastIndexOf('\\\\') + 1);\n      } else {\n        this.path = params.path.substr(0, params.path.lastIndexOf('/') + 1);\n      }\n\n      this.fileName = params.path.substr(params.path.lastIndexOf('/') + 1);\n      this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf('.json'));\n      dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n    }\n  };\n\n  AnimationItem.prototype.onSetupError = function () {\n    this.trigger('data_failed');\n  };\n\n  AnimationItem.prototype.setupAnimation = function (data) {\n    dataManager.completeAnimation(data, this.configAnimation);\n  };\n\n  AnimationItem.prototype.setData = function (wrapper, animationData) {\n    if (animationData) {\n      if (_typeof$4(animationData) !== 'object') {\n        animationData = JSON.parse(animationData);\n      }\n    }\n\n    var params = {\n      wrapper: wrapper,\n      animationData: animationData\n    };\n    var wrapperAttributes = wrapper.attributes;\n    params.path = wrapperAttributes.getNamedItem('data-animation-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-animation-path').value : wrapperAttributes.getNamedItem('data-bm-path') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-path').value : wrapperAttributes.getNamedItem('bm-path') ? wrapperAttributes.getNamedItem('bm-path').value : '';\n    params.animType = wrapperAttributes.getNamedItem('data-anim-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-type').value : wrapperAttributes.getNamedItem('data-bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-type').value : wrapperAttributes.getNamedItem('bm-type') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('bm-type').value : wrapperAttributes.getNamedItem('data-bm-renderer') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-renderer').value : wrapperAttributes.getNamedItem('bm-renderer') ? wrapperAttributes.getNamedItem('bm-renderer').value : 'canvas';\n    var loop = wrapperAttributes.getNamedItem('data-anim-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-loop').value : wrapperAttributes.getNamedItem('data-bm-loop') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-loop').value : wrapperAttributes.getNamedItem('bm-loop') ? wrapperAttributes.getNamedItem('bm-loop').value : '';\n\n    if (loop === 'false') {\n      params.loop = false;\n    } else if (loop === 'true') {\n      params.loop = true;\n    } else if (loop !== '') {\n      params.loop = parseInt(loop, 10);\n    }\n\n    var autoplay = wrapperAttributes.getNamedItem('data-anim-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-autoplay').value : wrapperAttributes.getNamedItem('data-bm-autoplay') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-autoplay').value : wrapperAttributes.getNamedItem('bm-autoplay') ? wrapperAttributes.getNamedItem('bm-autoplay').value : true;\n    params.autoplay = autoplay !== 'false';\n    params.name = wrapperAttributes.getNamedItem('data-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-name').value : wrapperAttributes.getNamedItem('data-bm-name') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-name').value : wrapperAttributes.getNamedItem('bm-name') ? wrapperAttributes.getNamedItem('bm-name').value : '';\n    var prerender = wrapperAttributes.getNamedItem('data-anim-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-anim-prerender').value : wrapperAttributes.getNamedItem('data-bm-prerender') // eslint-disable-line no-nested-ternary\n    ? wrapperAttributes.getNamedItem('data-bm-prerender').value : wrapperAttributes.getNamedItem('bm-prerender') ? wrapperAttributes.getNamedItem('bm-prerender').value : '';\n\n    if (prerender === 'false') {\n      params.prerender = false;\n    }\n\n    this.setParams(params);\n  };\n\n  AnimationItem.prototype.includeLayers = function (data) {\n    if (data.op > this.animationData.op) {\n      this.animationData.op = data.op;\n      this.totalFrames = Math.floor(data.op - this.animationData.ip);\n    }\n\n    var layers = this.animationData.layers;\n    var i;\n    var len = layers.length;\n    var newLayers = data.layers;\n    var j;\n    var jLen = newLayers.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      i = 0;\n\n      while (i < len) {\n        if (layers[i].id === newLayers[j].id) {\n          layers[i] = newLayers[j];\n          break;\n        }\n\n        i += 1;\n      }\n    }\n\n    if (data.chars || data.fonts) {\n      this.renderer.globalData.fontManager.addChars(data.chars);\n      this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n    }\n\n    if (data.assets) {\n      len = data.assets.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.animationData.assets.push(data.assets[i]);\n      }\n    }\n\n    this.animationData.__complete = false;\n    dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n  };\n\n  AnimationItem.prototype.onSegmentComplete = function (data) {\n    this.animationData = data;\n    var expressionsPlugin = getExpressionsPlugin();\n\n    if (expressionsPlugin) {\n      expressionsPlugin.initExpressions(this);\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.loadNextSegment = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments || segments.length === 0 || !this.autoloadSegments) {\n      this.trigger('data_ready');\n      this.timeCompleted = this.totalFrames;\n      return;\n    }\n\n    var segment = segments.shift();\n    this.timeCompleted = segment.time * this.frameRate;\n    var segmentPath = this.path + this.fileName + '_' + this.segmentPos + '.json';\n    this.segmentPos += 1;\n    dataManager.loadData(segmentPath, this.includeLayers.bind(this), function () {\n      this.trigger('data_failed');\n    }.bind(this));\n  };\n\n  AnimationItem.prototype.loadSegments = function () {\n    var segments = this.animationData.segments;\n\n    if (!segments) {\n      this.timeCompleted = this.totalFrames;\n    }\n\n    this.loadNextSegment();\n  };\n\n  AnimationItem.prototype.imagesLoaded = function () {\n    this.trigger('loaded_images');\n    this.checkLoaded();\n  };\n\n  AnimationItem.prototype.preloadImages = function () {\n    this.imagePreloader.setAssetsPath(this.assetsPath);\n    this.imagePreloader.setPath(this.path);\n    this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n  };\n\n  AnimationItem.prototype.configAnimation = function (animData) {\n    if (!this.renderer) {\n      return;\n    }\n\n    try {\n      this.animationData = animData;\n\n      if (this.initialSegment) {\n        this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n        this.firstFrame = Math.round(this.initialSegment[0]);\n      } else {\n        this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n        this.firstFrame = Math.round(this.animationData.ip);\n      }\n\n      this.renderer.configAnimation(animData);\n\n      if (!animData.assets) {\n        animData.assets = [];\n      }\n\n      this.assets = this.animationData.assets;\n      this.frameRate = this.animationData.fr;\n      this.frameMult = this.animationData.fr / 1000;\n      this.renderer.searchExtraCompositions(animData.assets);\n      this.markers = markerParser(animData.markers || []);\n      this.trigger('config_ready');\n      this.preloadImages();\n      this.loadSegments();\n      this.updaFrameModifier();\n      this.waitForFontsLoaded();\n\n      if (this.isPaused) {\n        this.audioController.pause();\n      }\n    } catch (error) {\n      this.triggerConfigError(error);\n    }\n  };\n\n  AnimationItem.prototype.waitForFontsLoaded = function () {\n    if (!this.renderer) {\n      return;\n    }\n\n    if (this.renderer.globalData.fontManager.isLoaded) {\n      this.checkLoaded();\n    } else {\n      setTimeout(this.waitForFontsLoaded.bind(this), 20);\n    }\n  };\n\n  AnimationItem.prototype.checkLoaded = function () {\n    if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== 'canvas') && this.imagePreloader.loadedFootages()) {\n      this.isLoaded = true;\n      var expressionsPlugin = getExpressionsPlugin();\n\n      if (expressionsPlugin) {\n        expressionsPlugin.initExpressions(this);\n      }\n\n      this.renderer.initItems();\n      setTimeout(function () {\n        this.trigger('DOMLoaded');\n      }.bind(this), 0);\n      this.gotoFrame();\n\n      if (this.autoplay) {\n        this.play();\n      }\n    }\n  };\n\n  AnimationItem.prototype.resize = function () {\n    this.renderer.updateContainerSize();\n  };\n\n  AnimationItem.prototype.setSubframe = function (flag) {\n    this.isSubframeEnabled = !!flag;\n  };\n\n  AnimationItem.prototype.gotoFrame = function () {\n    this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; // eslint-disable-line no-bitwise\n\n    if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n      this.currentFrame = this.timeCompleted;\n    }\n\n    this.trigger('enterFrame');\n    this.renderFrame();\n    this.trigger('drawnFrame');\n  };\n\n  AnimationItem.prototype.renderFrame = function () {\n    if (this.isLoaded === false || !this.renderer) {\n      return;\n    }\n\n    try {\n      this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n    } catch (error) {\n      this.triggerRenderFrameError(error);\n    }\n  };\n\n  AnimationItem.prototype.play = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.isPaused = false;\n      this.trigger('_pause');\n      this.audioController.resume();\n\n      if (this._idle) {\n        this._idle = false;\n        this.trigger('_active');\n      }\n    }\n  };\n\n  AnimationItem.prototype.pause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === false) {\n      this.isPaused = true;\n      this.trigger('_play');\n      this._idle = true;\n      this.trigger('_idle');\n      this.audioController.pause();\n    }\n  };\n\n  AnimationItem.prototype.togglePause = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    if (this.isPaused === true) {\n      this.play();\n    } else {\n      this.pause();\n    }\n  };\n\n  AnimationItem.prototype.stop = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.pause();\n    this.playCount = 0;\n    this._completedLoop = false;\n    this.setCurrentRawFrameValue(0);\n  };\n\n  AnimationItem.prototype.getMarkerData = function (markerName) {\n    var marker;\n\n    for (var i = 0; i < this.markers.length; i += 1) {\n      marker = this.markers[i];\n\n      if (marker.payload && marker.payload.name === markerName) {\n        return marker;\n      }\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        this.goToAndStop(marker.time, true);\n      }\n    } else if (isFrame) {\n      this.setCurrentRawFrameValue(value);\n    } else {\n      this.setCurrentRawFrameValue(value * this.frameModifier);\n    }\n\n    this.pause();\n  };\n\n  AnimationItem.prototype.goToAndPlay = function (value, isFrame, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    var numValue = Number(value);\n\n    if (isNaN(numValue)) {\n      var marker = this.getMarkerData(value);\n\n      if (marker) {\n        if (!marker.duration) {\n          this.goToAndStop(marker.time, true);\n        } else {\n          this.playSegments([marker.time, marker.time + marker.duration], true);\n        }\n      }\n    } else {\n      this.goToAndStop(numValue, isFrame, name);\n    }\n\n    this.play();\n  };\n\n  AnimationItem.prototype.advanceTime = function (value) {\n    if (this.isPaused === true || this.isLoaded === false) {\n      return;\n    }\n\n    var nextValue = this.currentRawFrame + value * this.frameModifier;\n    var _isComplete = false; // Checking if nextValue > totalFrames - 1 for addressing non looping and looping animations.\n    // If animation won't loop, it should stop at totalFrames - 1. If it will loop it should complete the last frame and then loop.\n\n    if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n      if (!this.loop || this.playCount === this.loop) {\n        if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n          _isComplete = true;\n          nextValue = this.totalFrames - 1;\n        }\n      } else if (nextValue >= this.totalFrames) {\n        this.playCount += 1;\n\n        if (!this.checkSegments(nextValue % this.totalFrames)) {\n          this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n          this._completedLoop = true;\n          this.trigger('loopComplete');\n        }\n      } else {\n        this.setCurrentRawFrameValue(nextValue);\n      }\n    } else if (nextValue < 0) {\n      if (!this.checkSegments(nextValue % this.totalFrames)) {\n        if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n          // eslint-disable-line no-plusplus\n          this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n\n          if (!this._completedLoop) {\n            this._completedLoop = true;\n          } else {\n            this.trigger('loopComplete');\n          }\n        } else {\n          _isComplete = true;\n          nextValue = 0;\n        }\n      }\n    } else {\n      this.setCurrentRawFrameValue(nextValue);\n    }\n\n    if (_isComplete) {\n      this.setCurrentRawFrameValue(nextValue);\n      this.pause();\n      this.trigger('complete');\n    }\n  };\n\n  AnimationItem.prototype.adjustSegment = function (arr, offset) {\n    this.playCount = 0;\n\n    if (arr[1] < arr[0]) {\n      if (this.frameModifier > 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(-1);\n        }\n      }\n\n      this.totalFrames = arr[0] - arr[1];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[1];\n      this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);\n    } else if (arr[1] > arr[0]) {\n      if (this.frameModifier < 0) {\n        if (this.playSpeed < 0) {\n          this.setSpeed(-this.playSpeed);\n        } else {\n          this.setDirection(1);\n        }\n      }\n\n      this.totalFrames = arr[1] - arr[0];\n      this.timeCompleted = this.totalFrames;\n      this.firstFrame = arr[0];\n      this.setCurrentRawFrameValue(0.001 + offset);\n    }\n\n    this.trigger('segmentStart');\n  };\n\n  AnimationItem.prototype.setSegment = function (init, end) {\n    var pendingFrame = -1;\n\n    if (this.isPaused) {\n      if (this.currentRawFrame + this.firstFrame < init) {\n        pendingFrame = init;\n      } else if (this.currentRawFrame + this.firstFrame > end) {\n        pendingFrame = end - init;\n      }\n    }\n\n    this.firstFrame = init;\n    this.totalFrames = end - init;\n    this.timeCompleted = this.totalFrames;\n\n    if (pendingFrame !== -1) {\n      this.goToAndStop(pendingFrame, true);\n    }\n  };\n\n  AnimationItem.prototype.playSegments = function (arr, forceFlag) {\n    if (forceFlag) {\n      this.segments.length = 0;\n    }\n\n    if (_typeof$4(arr[0]) === 'object') {\n      var i;\n      var len = arr.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.segments.push(arr[i]);\n      }\n    } else {\n      this.segments.push(arr);\n    }\n\n    if (this.segments.length && forceFlag) {\n      this.adjustSegment(this.segments.shift(), 0);\n    }\n\n    if (this.isPaused) {\n      this.play();\n    }\n  };\n\n  AnimationItem.prototype.resetSegments = function (forceFlag) {\n    this.segments.length = 0;\n    this.segments.push([this.animationData.ip, this.animationData.op]);\n\n    if (forceFlag) {\n      this.checkSegments(0);\n    }\n  };\n\n  AnimationItem.prototype.checkSegments = function (offset) {\n    if (this.segments.length) {\n      this.adjustSegment(this.segments.shift(), offset);\n      return true;\n    }\n\n    return false;\n  };\n\n  AnimationItem.prototype.destroy = function (name) {\n    if (name && this.name !== name || !this.renderer) {\n      return;\n    }\n\n    this.renderer.destroy();\n    this.imagePreloader.destroy();\n    this.trigger('destroy');\n    this._cbs = null;\n    this.onEnterFrame = null;\n    this.onLoopComplete = null;\n    this.onComplete = null;\n    this.onSegmentStart = null;\n    this.onDestroy = null;\n    this.renderer = null;\n    this.renderer = null;\n    this.imagePreloader = null;\n    this.projectInterface = null;\n  };\n\n  AnimationItem.prototype.setCurrentRawFrameValue = function (value) {\n    this.currentRawFrame = value;\n    this.gotoFrame();\n  };\n\n  AnimationItem.prototype.setSpeed = function (val) {\n    this.playSpeed = val;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setDirection = function (val) {\n    this.playDirection = val < 0 ? -1 : 1;\n    this.updaFrameModifier();\n  };\n\n  AnimationItem.prototype.setVolume = function (val, name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.setVolume(val);\n  };\n\n  AnimationItem.prototype.getVolume = function () {\n    return this.audioController.getVolume();\n  };\n\n  AnimationItem.prototype.mute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.mute();\n  };\n\n  AnimationItem.prototype.unmute = function (name) {\n    if (name && this.name !== name) {\n      return;\n    }\n\n    this.audioController.unmute();\n  };\n\n  AnimationItem.prototype.updaFrameModifier = function () {\n    this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n    this.audioController.setRate(this.playSpeed * this.playDirection);\n  };\n\n  AnimationItem.prototype.getPath = function () {\n    return this.path;\n  };\n\n  AnimationItem.prototype.getAssetsPath = function (assetData) {\n    var path = '';\n\n    if (assetData.e) {\n      path = assetData.p;\n    } else if (this.assetsPath) {\n      var imagePath = assetData.p;\n\n      if (imagePath.indexOf('images/') !== -1) {\n        imagePath = imagePath.split('/')[1];\n      }\n\n      path = this.assetsPath + imagePath;\n    } else {\n      path = this.path;\n      path += assetData.u ? assetData.u : '';\n      path += assetData.p;\n    }\n\n    return path;\n  };\n\n  AnimationItem.prototype.getAssetData = function (id) {\n    var i = 0;\n    var len = this.assets.length;\n\n    while (i < len) {\n      if (id === this.assets[i].id) {\n        return this.assets[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  AnimationItem.prototype.hide = function () {\n    this.renderer.hide();\n  };\n\n  AnimationItem.prototype.show = function () {\n    this.renderer.show();\n  };\n\n  AnimationItem.prototype.getDuration = function (isFrame) {\n    return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n  };\n\n  AnimationItem.prototype.updateDocumentData = function (path, documentData, index) {\n    try {\n      var element = this.renderer.getElementByPath(path);\n      element.updateDocumentData(documentData, index);\n    } catch (error) {// TODO: decide how to handle catch case\n    }\n  };\n\n  AnimationItem.prototype.trigger = function (name) {\n    if (this._cbs && this._cbs[name]) {\n      switch (name) {\n        case 'enterFrame':\n          this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n          break;\n\n        case 'drawnFrame':\n          this.drawnFrameEvent.currentTime = this.currentFrame;\n          this.drawnFrameEvent.totalTime = this.totalFrames;\n          this.drawnFrameEvent.direction = this.frameModifier;\n          this.triggerEvent(name, this.drawnFrameEvent);\n          break;\n\n        case 'loopComplete':\n          this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n          break;\n\n        case 'complete':\n          this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n          break;\n\n        case 'segmentStart':\n          this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n          break;\n\n        case 'destroy':\n          this.triggerEvent(name, new BMDestroyEvent(name, this));\n          break;\n\n        default:\n          this.triggerEvent(name);\n      }\n    }\n\n    if (name === 'enterFrame' && this.onEnterFrame) {\n      this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n    }\n\n    if (name === 'loopComplete' && this.onLoopComplete) {\n      this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n    }\n\n    if (name === 'complete' && this.onComplete) {\n      this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n    }\n\n    if (name === 'segmentStart' && this.onSegmentStart) {\n      this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n    }\n\n    if (name === 'destroy' && this.onDestroy) {\n      this.onDestroy.call(this, new BMDestroyEvent(name, this));\n    }\n  };\n\n  AnimationItem.prototype.triggerRenderFrameError = function (nativeError) {\n    var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  AnimationItem.prototype.triggerConfigError = function (nativeError) {\n    var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n    this.triggerEvent('error', error);\n\n    if (this.onError) {\n      this.onError.call(this, error);\n    }\n  };\n\n  var animationManager = function () {\n    var moduleOb = {};\n    var registeredAnimations = [];\n    var initTime = 0;\n    var len = 0;\n    var playingAnimationsNum = 0;\n    var _stopped = true;\n    var _isFrozen = false;\n\n    function removeElement(ev) {\n      var i = 0;\n      var animItem = ev.target;\n\n      while (i < len) {\n        if (registeredAnimations[i].animation === animItem) {\n          registeredAnimations.splice(i, 1);\n          i -= 1;\n          len -= 1;\n\n          if (!animItem.isPaused) {\n            subtractPlayingCount();\n          }\n        }\n\n        i += 1;\n      }\n    }\n\n    function registerAnimation(element, animationData) {\n      if (!element) {\n        return null;\n      }\n\n      var i = 0;\n\n      while (i < len) {\n        if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n          return registeredAnimations[i].animation;\n        }\n\n        i += 1;\n      }\n\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, element);\n      animItem.setData(element, animationData);\n      return animItem;\n    }\n\n    function getRegisteredAnimations() {\n      var i;\n      var lenAnims = registeredAnimations.length;\n      var animations = [];\n\n      for (i = 0; i < lenAnims; i += 1) {\n        animations.push(registeredAnimations[i].animation);\n      }\n\n      return animations;\n    }\n\n    function addPlayingCount() {\n      playingAnimationsNum += 1;\n      activate();\n    }\n\n    function subtractPlayingCount() {\n      playingAnimationsNum -= 1;\n    }\n\n    function setupAnimation(animItem, element) {\n      animItem.addEventListener('destroy', removeElement);\n      animItem.addEventListener('_active', addPlayingCount);\n      animItem.addEventListener('_idle', subtractPlayingCount);\n      registeredAnimations.push({\n        elem: element,\n        animation: animItem\n      });\n      len += 1;\n    }\n\n    function loadAnimation(params) {\n      var animItem = new AnimationItem();\n      setupAnimation(animItem, null);\n      animItem.setParams(params);\n      return animItem;\n    }\n\n    function setSpeed(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setSpeed(val, animation);\n      }\n    }\n\n    function setDirection(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setDirection(val, animation);\n      }\n    }\n\n    function play(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.play(animation);\n      }\n    }\n\n    function resume(nowTime) {\n      var elapsedTime = nowTime - initTime;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.advanceTime(elapsedTime);\n      }\n\n      initTime = nowTime;\n\n      if (playingAnimationsNum && !_isFrozen) {\n        window.requestAnimationFrame(resume);\n      } else {\n        _stopped = true;\n      }\n    }\n\n    function first(nowTime) {\n      initTime = nowTime;\n      window.requestAnimationFrame(resume);\n    }\n\n    function pause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.pause(animation);\n      }\n    }\n\n    function goToAndStop(value, isFrame, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n      }\n    }\n\n    function stop(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.stop(animation);\n      }\n    }\n\n    function togglePause(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.togglePause(animation);\n      }\n    }\n\n    function destroy(animation) {\n      var i;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        registeredAnimations[i].animation.destroy(animation);\n      }\n    }\n\n    function searchAnimations(animationData, standalone, renderer) {\n      var animElements = [].concat([].slice.call(document.getElementsByClassName('lottie')), [].slice.call(document.getElementsByClassName('bodymovin')));\n      var i;\n      var lenAnims = animElements.length;\n\n      for (i = 0; i < lenAnims; i += 1) {\n        if (renderer) {\n          animElements[i].setAttribute('data-bm-type', renderer);\n        }\n\n        registerAnimation(animElements[i], animationData);\n      }\n\n      if (standalone && lenAnims === 0) {\n        if (!renderer) {\n          renderer = 'svg';\n        }\n\n        var body = document.getElementsByTagName('body')[0];\n        body.innerText = '';\n        var div = createTag('div');\n        div.style.width = '100%';\n        div.style.height = '100%';\n        div.setAttribute('data-bm-type', renderer);\n        body.appendChild(div);\n        registerAnimation(div, animationData);\n      }\n    }\n\n    function resize() {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.resize();\n      }\n    }\n\n    function activate() {\n      if (!_isFrozen && playingAnimationsNum) {\n        if (_stopped) {\n          window.requestAnimationFrame(first);\n          _stopped = false;\n        }\n      }\n    }\n\n    function freeze() {\n      _isFrozen = true;\n    }\n\n    function unfreeze() {\n      _isFrozen = false;\n      activate();\n    }\n\n    function setVolume(val, animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.setVolume(val, animation);\n      }\n    }\n\n    function mute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.mute(animation);\n      }\n    }\n\n    function unmute(animation) {\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        registeredAnimations[i].animation.unmute(animation);\n      }\n    }\n\n    moduleOb.registerAnimation = registerAnimation;\n    moduleOb.loadAnimation = loadAnimation;\n    moduleOb.setSpeed = setSpeed;\n    moduleOb.setDirection = setDirection;\n    moduleOb.play = play;\n    moduleOb.pause = pause;\n    moduleOb.stop = stop;\n    moduleOb.togglePause = togglePause;\n    moduleOb.searchAnimations = searchAnimations;\n    moduleOb.resize = resize; // moduleOb.start = start;\n\n    moduleOb.goToAndStop = goToAndStop;\n    moduleOb.destroy = destroy;\n    moduleOb.freeze = freeze;\n    moduleOb.unfreeze = unfreeze;\n    moduleOb.setVolume = setVolume;\n    moduleOb.mute = mute;\n    moduleOb.unmute = unmute;\n    moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n    return moduleOb;\n  }();\n\n  /* eslint-disable */\n  var BezierFactory = function () {\n    /**\r\n       * BezierEasing - use bezier curve for transition easing function\r\n       * by Gaëtan Renaudeau 2014 - 2015 – MIT License\r\n       *\r\n       * Credits: is based on Firefox's nsSMILKeySpline.cpp\r\n       * Usage:\r\n       * var spline = BezierEasing([ 0.25, 0.1, 0.25, 1.0 ])\r\n       * spline.get(x) => returns the easing value | x must be in [0, 1] range\r\n       *\r\n       */\n    var ob = {};\n    ob.getBezierEasing = getBezierEasing;\n    var beziers = {};\n\n    function getBezierEasing(a, b, c, d, nm) {\n      var str = nm || ('bez_' + a + '_' + b + '_' + c + '_' + d).replace(/\\./g, 'p');\n\n      if (beziers[str]) {\n        return beziers[str];\n      }\n\n      var bezEasing = new BezierEasing([a, b, c, d]);\n      beziers[str] = bezEasing;\n      return bezEasing;\n    } // These values are established by empiricism with tests (tradeoff: performance VS precision)\n\n\n    var NEWTON_ITERATIONS = 4;\n    var NEWTON_MIN_SLOPE = 0.001;\n    var SUBDIVISION_PRECISION = 0.0000001;\n    var SUBDIVISION_MAX_ITERATIONS = 10;\n    var kSplineTableSize = 11;\n    var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n    var float32ArraySupported = typeof Float32Array === 'function';\n\n    function A(aA1, aA2) {\n      return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n    }\n\n    function B(aA1, aA2) {\n      return 3.0 * aA2 - 6.0 * aA1;\n    }\n\n    function C(aA1) {\n      return 3.0 * aA1;\n    } // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\n\n\n    function calcBezier(aT, aA1, aA2) {\n      return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n    } // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\n\n\n    function getSlope(aT, aA1, aA2) {\n      return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n    }\n\n    function binarySubdivide(aX, aA, aB, mX1, mX2) {\n      var currentX,\n          currentT,\n          i = 0;\n\n      do {\n        currentT = aA + (aB - aA) / 2.0;\n        currentX = calcBezier(currentT, mX1, mX2) - aX;\n\n        if (currentX > 0.0) {\n          aB = currentT;\n        } else {\n          aA = currentT;\n        }\n      } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n\n      return currentT;\n    }\n\n    function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n      for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n        var currentSlope = getSlope(aGuessT, mX1, mX2);\n        if (currentSlope === 0.0) return aGuessT;\n        var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n        aGuessT -= currentX / currentSlope;\n      }\n\n      return aGuessT;\n    }\n    /**\r\n       * points is an array of [ mX1, mY1, mX2, mY2 ]\r\n       */\n\n\n    function BezierEasing(points) {\n      this._p = points;\n      this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n      this._precomputed = false;\n      this.get = this.get.bind(this);\n    }\n\n    BezierEasing.prototype = {\n      get: function get(x) {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        if (!this._precomputed) this._precompute();\n        if (mX1 === mY1 && mX2 === mY2) return x; // linear\n        // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n\n        if (x === 0) return 0;\n        if (x === 1) return 1;\n        return calcBezier(this._getTForX(x), mY1, mY2);\n      },\n      // Private part\n      _precompute: function _precompute() {\n        var mX1 = this._p[0],\n            mY1 = this._p[1],\n            mX2 = this._p[2],\n            mY2 = this._p[3];\n        this._precomputed = true;\n\n        if (mX1 !== mY1 || mX2 !== mY2) {\n          this._calcSampleValues();\n        }\n      },\n      _calcSampleValues: function _calcSampleValues() {\n        var mX1 = this._p[0],\n            mX2 = this._p[2];\n\n        for (var i = 0; i < kSplineTableSize; ++i) {\n          this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n        }\n      },\n\n      /**\r\n           * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\r\n           */\n      _getTForX: function _getTForX(aX) {\n        var mX1 = this._p[0],\n            mX2 = this._p[2],\n            mSampleValues = this._mSampleValues;\n        var intervalStart = 0.0;\n        var currentSample = 1;\n        var lastSample = kSplineTableSize - 1;\n\n        for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n          intervalStart += kSampleStepSize;\n        }\n\n        --currentSample; // Interpolate to provide an initial guess for t\n\n        var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n        var guessForT = intervalStart + dist * kSampleStepSize;\n        var initialSlope = getSlope(guessForT, mX1, mX2);\n\n        if (initialSlope >= NEWTON_MIN_SLOPE) {\n          return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n        }\n\n        if (initialSlope === 0.0) {\n          return guessForT;\n        }\n\n        return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n      }\n    };\n    return ob;\n  }();\n\n  var pooling = function () {\n    function _double(arr) {\n      return arr.concat(createSizedArray(arr.length));\n    }\n\n    return {\n      \"double\": _double\n    };\n  }();\n\n  var poolFactory = function () {\n    return function (initialLength, _create, _release) {\n      var _length = 0;\n      var _maxLength = initialLength;\n      var pool = createSizedArray(_maxLength);\n      var ob = {\n        newElement: newElement,\n        release: release\n      };\n\n      function newElement() {\n        var element;\n\n        if (_length) {\n          _length -= 1;\n          element = pool[_length];\n        } else {\n          element = _create();\n        }\n\n        return element;\n      }\n\n      function release(element) {\n        if (_length === _maxLength) {\n          pool = pooling[\"double\"](pool);\n          _maxLength *= 2;\n        }\n\n        if (_release) {\n          _release(element);\n        }\n\n        pool[_length] = element;\n        _length += 1;\n      }\n\n      return ob;\n    };\n  }();\n\n  var bezierLengthPool = function () {\n    function create() {\n      return {\n        addedLength: 0,\n        percents: createTypedArray('float32', getDefaultCurveSegments()),\n        lengths: createTypedArray('float32', getDefaultCurveSegments())\n      };\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  var segmentsLengthPool = function () {\n    function create() {\n      return {\n        lengths: [],\n        totalLength: 0\n      };\n    }\n\n    function release(element) {\n      var i;\n      var len = element.lengths.length;\n\n      for (i = 0; i < len; i += 1) {\n        bezierLengthPool.release(element.lengths[i]);\n      }\n\n      element.lengths.length = 0;\n    }\n\n    return poolFactory(8, create, release);\n  }();\n\n  function bezFunction() {\n    var math = Math;\n\n    function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n      var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n      return det1 > -0.001 && det1 < 0.001;\n    }\n\n    function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n      if (z1 === 0 && z2 === 0 && z3 === 0) {\n        return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n      }\n\n      var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n      var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n      var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n      var diffDist;\n\n      if (dist1 > dist2) {\n        if (dist1 > dist3) {\n          diffDist = dist1 - dist2 - dist3;\n        } else {\n          diffDist = dist3 - dist2 - dist1;\n        }\n      } else if (dist3 > dist2) {\n        diffDist = dist3 - dist2 - dist1;\n      } else {\n        diffDist = dist2 - dist1 - dist3;\n      }\n\n      return diffDist > -0.0001 && diffDist < 0.0001;\n    }\n\n    var getBezierLength = function () {\n      return function (pt1, pt2, pt3, pt4) {\n        var curveSegments = getDefaultCurveSegments();\n        var k;\n        var i;\n        var len;\n        var ptCoord;\n        var perc;\n        var addedLength = 0;\n        var ptDistance;\n        var point = [];\n        var lastPoint = [];\n        var lengthData = bezierLengthPool.newElement();\n        len = pt3.length;\n\n        for (k = 0; k < curveSegments; k += 1) {\n          perc = k / (curveSegments - 1);\n          ptDistance = 0;\n\n          for (i = 0; i < len; i += 1) {\n            ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n            point[i] = ptCoord;\n\n            if (lastPoint[i] !== null) {\n              ptDistance += bmPow(point[i] - lastPoint[i], 2);\n            }\n\n            lastPoint[i] = point[i];\n          }\n\n          if (ptDistance) {\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n          }\n\n          lengthData.percents[k] = perc;\n          lengthData.lengths[k] = addedLength;\n        }\n\n        lengthData.addedLength = addedLength;\n        return lengthData;\n      };\n    }();\n\n    function getSegmentsLength(shapeData) {\n      var segmentsLength = segmentsLengthPool.newElement();\n      var closed = shapeData.c;\n      var pathV = shapeData.v;\n      var pathO = shapeData.o;\n      var pathI = shapeData.i;\n      var i;\n      var len = shapeData._length;\n      var lengths = segmentsLength.lengths;\n      var totalLength = 0;\n\n      for (i = 0; i < len - 1; i += 1) {\n        lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      if (closed && len) {\n        lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n        totalLength += lengths[i].addedLength;\n      }\n\n      segmentsLength.totalLength = totalLength;\n      return segmentsLength;\n    }\n\n    function BezierData(length) {\n      this.segmentLength = 0;\n      this.points = new Array(length);\n    }\n\n    function PointData(partial, point) {\n      this.partialLength = partial;\n      this.point = point;\n    }\n\n    var buildBezierData = function () {\n      var storedData = {};\n      return function (pt1, pt2, pt3, pt4) {\n        var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\\./g, 'p');\n\n        if (!storedData[bezierName]) {\n          var curveSegments = getDefaultCurveSegments();\n          var k;\n          var i;\n          var len;\n          var ptCoord;\n          var perc;\n          var addedLength = 0;\n          var ptDistance;\n          var point;\n          var lastPoint = null;\n\n          if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n            curveSegments = 2;\n          }\n\n          var bezierData = new BezierData(curveSegments);\n          len = pt3.length;\n\n          for (k = 0; k < curveSegments; k += 1) {\n            point = createSizedArray(len);\n            perc = k / (curveSegments - 1);\n            ptDistance = 0;\n\n            for (i = 0; i < len; i += 1) {\n              ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n              point[i] = ptCoord;\n\n              if (lastPoint !== null) {\n                ptDistance += bmPow(point[i] - lastPoint[i], 2);\n              }\n            }\n\n            ptDistance = bmSqrt(ptDistance);\n            addedLength += ptDistance;\n            bezierData.points[k] = new PointData(ptDistance, point);\n            lastPoint = point;\n          }\n\n          bezierData.segmentLength = addedLength;\n          storedData[bezierName] = bezierData;\n        }\n\n        return storedData[bezierName];\n      };\n    }();\n\n    function getDistancePerc(perc, bezierData) {\n      var percents = bezierData.percents;\n      var lengths = bezierData.lengths;\n      var len = percents.length;\n      var initPos = bmFloor((len - 1) * perc);\n      var lengthPos = perc * bezierData.addedLength;\n      var lPerc = 0;\n\n      if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n        return percents[initPos];\n      }\n\n      var dir = lengths[initPos] > lengthPos ? -1 : 1;\n      var flag = true;\n\n      while (flag) {\n        if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n          lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n          flag = false;\n        } else {\n          initPos += dir;\n        }\n\n        if (initPos < 0 || initPos >= len - 1) {\n          // FIX for TypedArrays that don't store floating point values with enough accuracy\n          if (initPos === len - 1) {\n            return percents[initPos];\n          }\n\n          flag = false;\n        }\n      }\n\n      return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n    }\n\n    function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n      var t1 = getDistancePerc(percent, bezierData);\n      var u1 = 1 - t1;\n      var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;\n      var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;\n      return [ptX, ptY];\n    }\n\n    var bezierSegmentPoints = createTypedArray('float32', 8);\n\n    function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n      if (startPerc < 0) {\n        startPerc = 0;\n      } else if (startPerc > 1) {\n        startPerc = 1;\n      }\n\n      var t0 = getDistancePerc(startPerc, bezierData);\n      endPerc = endPerc > 1 ? 1 : endPerc;\n      var t1 = getDistancePerc(endPerc, bezierData);\n      var i;\n      var len = pt1.length;\n      var u0 = 1 - t0;\n      var u1 = 1 - t1;\n      var u0u0u0 = u0 * u0 * u0;\n      var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase\n\n      var t0t0t0 = t0 * t0 * t0; //\n\n      var u0u0u1 = u0 * u0 * u1;\n      var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase\n\n      var t0t0t1 = t0 * t0 * t1; //\n\n      var u0u1u1 = u0 * u1 * u1;\n      var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase\n\n      var t0t1t1 = t0 * t1 * t1; //\n\n      var u1u1u1 = u1 * u1 * u1;\n      var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase\n\n      var t1t1t1 = t1 * t1 * t1;\n\n      for (i = 0; i < len; i += 1) {\n        bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n\n        bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase\n      }\n\n      return bezierSegmentPoints;\n    }\n\n    return {\n      getSegmentsLength: getSegmentsLength,\n      getNewSegment: getNewSegment,\n      getPointInSegment: getPointInSegment,\n      buildBezierData: buildBezierData,\n      pointOnLine2D: pointOnLine2D,\n      pointOnLine3D: pointOnLine3D\n    };\n  }\n\n  var bez = bezFunction();\n\n  var PropertyFactory = function () {\n    var initFrame = initialDefaultFrame;\n    var mathAbs = Math.abs;\n\n    function interpolateValue(frameNum, caching) {\n      var offsetTime = this.offsetTime;\n      var newValue;\n\n      if (this.propType === 'multidimensional') {\n        newValue = createTypedArray('float32', this.pv.length);\n      }\n\n      var iterationIndex = caching.lastIndex;\n      var i = iterationIndex;\n      var len = this.keyframes.length - 1;\n      var flag = true;\n      var keyData;\n      var nextKeyData;\n      var keyframeMetadata;\n\n      while (flag) {\n        keyData = this.keyframes[i];\n        nextKeyData = this.keyframes[i + 1];\n\n        if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n          if (keyData.h) {\n            keyData = nextKeyData;\n          }\n\n          iterationIndex = 0;\n          break;\n        }\n\n        if (nextKeyData.t - offsetTime > frameNum) {\n          iterationIndex = i;\n          break;\n        }\n\n        if (i < len - 1) {\n          i += 1;\n        } else {\n          iterationIndex = 0;\n          flag = false;\n        }\n      }\n\n      keyframeMetadata = this.keyframesMetadata[i] || {};\n      var k;\n      var kLen;\n      var perc;\n      var jLen;\n      var j;\n      var fnc;\n      var nextKeyTime = nextKeyData.t - offsetTime;\n      var keyTime = keyData.t - offsetTime;\n      var endValue;\n\n      if (keyData.to) {\n        if (!keyframeMetadata.bezierData) {\n          keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti);\n        }\n\n        var bezierData = keyframeMetadata.bezierData;\n\n        if (frameNum >= nextKeyTime || frameNum < keyTime) {\n          var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n          kLen = bezierData.points[ind].point.length;\n\n          for (k = 0; k < kLen; k += 1) {\n            newValue[k] = bezierData.points[ind].point[k];\n          } // caching._lastKeyframeIndex = -1;\n\n        } else {\n          if (keyframeMetadata.__fnct) {\n            fnc = keyframeMetadata.__fnct;\n          } else {\n            fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n            keyframeMetadata.__fnct = fnc;\n          }\n\n          perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n          var distanceInLine = bezierData.segmentLength * perc;\n          var segmentPerc;\n          var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n          j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n          flag = true;\n          jLen = bezierData.points.length;\n\n          while (flag) {\n            addedLength += bezierData.points[j].partialLength;\n\n            if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n              kLen = bezierData.points[j].point.length;\n\n              for (k = 0; k < kLen; k += 1) {\n                newValue[k] = bezierData.points[j].point[k];\n              }\n\n              break;\n            } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n              segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n              kLen = bezierData.points[j].point.length;\n\n              for (k = 0; k < kLen; k += 1) {\n                newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n              }\n\n              break;\n            }\n\n            if (j < jLen - 1) {\n              j += 1;\n            } else {\n              flag = false;\n            }\n          }\n\n          caching._lastPoint = j;\n          caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n          caching._lastKeyframeIndex = i;\n        }\n      } else {\n        var outX;\n        var outY;\n        var inX;\n        var inY;\n        var keyValue;\n        len = keyData.s.length;\n        endValue = nextKeyData.s || keyData.e;\n\n        if (this.sh && keyData.h !== 1) {\n          if (frameNum >= nextKeyTime) {\n            newValue[0] = endValue[0];\n            newValue[1] = endValue[1];\n            newValue[2] = endValue[2];\n          } else if (frameNum <= keyTime) {\n            newValue[0] = keyData.s[0];\n            newValue[1] = keyData.s[1];\n            newValue[2] = keyData.s[2];\n          } else {\n            var quatStart = createQuaternion(keyData.s);\n            var quatEnd = createQuaternion(endValue);\n            var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n            quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n          }\n        } else {\n          for (i = 0; i < len; i += 1) {\n            if (keyData.h !== 1) {\n              if (frameNum >= nextKeyTime) {\n                perc = 1;\n              } else if (frameNum < keyTime) {\n                perc = 0;\n              } else {\n                if (keyData.o.x.constructor === Array) {\n                  if (!keyframeMetadata.__fnct) {\n                    keyframeMetadata.__fnct = [];\n                  }\n\n                  if (!keyframeMetadata.__fnct[i]) {\n                    outX = keyData.o.x[i] === undefined ? keyData.o.x[0] : keyData.o.x[i];\n                    outY = keyData.o.y[i] === undefined ? keyData.o.y[0] : keyData.o.y[i];\n                    inX = keyData.i.x[i] === undefined ? keyData.i.x[0] : keyData.i.x[i];\n                    inY = keyData.i.y[i] === undefined ? keyData.i.y[0] : keyData.i.y[i];\n                    fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                    keyframeMetadata.__fnct[i] = fnc;\n                  } else {\n                    fnc = keyframeMetadata.__fnct[i];\n                  }\n                } else if (!keyframeMetadata.__fnct) {\n                  outX = keyData.o.x;\n                  outY = keyData.o.y;\n                  inX = keyData.i.x;\n                  inY = keyData.i.y;\n                  fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n                  keyData.keyframeMetadata = fnc;\n                } else {\n                  fnc = keyframeMetadata.__fnct;\n                }\n\n                perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n              }\n            }\n\n            endValue = nextKeyData.s || keyData.e;\n            keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n\n            if (this.propType === 'multidimensional') {\n              newValue[i] = keyValue;\n            } else {\n              newValue = keyValue;\n            }\n          }\n        }\n      }\n\n      caching.lastIndex = iterationIndex;\n      return newValue;\n    } // based on @Toji's https://github.com/toji/gl-matrix/\n\n\n    function slerp(a, b, t) {\n      var out = [];\n      var ax = a[0];\n      var ay = a[1];\n      var az = a[2];\n      var aw = a[3];\n      var bx = b[0];\n      var by = b[1];\n      var bz = b[2];\n      var bw = b[3];\n      var omega;\n      var cosom;\n      var sinom;\n      var scale0;\n      var scale1;\n      cosom = ax * bx + ay * by + az * bz + aw * bw;\n\n      if (cosom < 0.0) {\n        cosom = -cosom;\n        bx = -bx;\n        by = -by;\n        bz = -bz;\n        bw = -bw;\n      }\n\n      if (1.0 - cosom > 0.000001) {\n        omega = Math.acos(cosom);\n        sinom = Math.sin(omega);\n        scale0 = Math.sin((1.0 - t) * omega) / sinom;\n        scale1 = Math.sin(t * omega) / sinom;\n      } else {\n        scale0 = 1.0 - t;\n        scale1 = t;\n      }\n\n      out[0] = scale0 * ax + scale1 * bx;\n      out[1] = scale0 * ay + scale1 * by;\n      out[2] = scale0 * az + scale1 * bz;\n      out[3] = scale0 * aw + scale1 * bw;\n      return out;\n    }\n\n    function quaternionToEuler(out, quat) {\n      var qx = quat[0];\n      var qy = quat[1];\n      var qz = quat[2];\n      var qw = quat[3];\n      var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n      var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n      var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n      out[0] = heading / degToRads;\n      out[1] = attitude / degToRads;\n      out[2] = bank / degToRads;\n    }\n\n    function createQuaternion(values) {\n      var heading = values[0] * degToRads;\n      var attitude = values[1] * degToRads;\n      var bank = values[2] * degToRads;\n      var c1 = Math.cos(heading / 2);\n      var c2 = Math.cos(attitude / 2);\n      var c3 = Math.cos(bank / 2);\n      var s1 = Math.sin(heading / 2);\n      var s2 = Math.sin(attitude / 2);\n      var s3 = Math.sin(bank / 2);\n      var w = c1 * c2 * c3 - s1 * s2 * s3;\n      var x = s1 * s2 * c3 + c1 * c2 * s3;\n      var y = s1 * c2 * c3 + c1 * s2 * s3;\n      var z = c1 * s2 * c3 - s1 * c2 * s3;\n      return [x, y, z, w];\n    }\n\n    function getValueAtCurrentTime() {\n      var frameNum = this.comp.renderedFrame - this.offsetTime;\n      var initTime = this.keyframes[0].t - this.offsetTime;\n      var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n\n      if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n        if (this._caching.lastFrame >= frameNum) {\n          this._caching._lastKeyframeIndex = -1;\n          this._caching.lastIndex = 0;\n        }\n\n        var renderResult = this.interpolateValue(frameNum, this._caching);\n        this.pv = renderResult;\n      }\n\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n\n    function setVValue(val) {\n      var multipliedValue;\n\n      if (this.propType === 'unidimensional') {\n        multipliedValue = val * this.mult;\n\n        if (mathAbs(this.v - multipliedValue) > 0.00001) {\n          this.v = multipliedValue;\n          this._mdf = true;\n        }\n      } else {\n        var i = 0;\n        var len = this.v.length;\n\n        while (i < len) {\n          multipliedValue = val[i] * this.mult;\n\n          if (mathAbs(this.v[i] - multipliedValue) > 0.00001) {\n            this.v[i] = multipliedValue;\n            this._mdf = true;\n          }\n\n          i += 1;\n        }\n      }\n    }\n\n    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n        return;\n      }\n\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n\n      this.lock = true;\n      this._mdf = this._isFirstFrame;\n      var i;\n      var len = this.effectsSequence.length;\n      var finalValue = this.kf ? this.pv : this.data.k;\n\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n\n      this.setVValue(finalValue);\n      this._isFirstFrame = false;\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n\n    function ValueProperty(elem, data, mult, container) {\n      this.propType = 'unidimensional';\n      this.mult = mult || 1;\n      this.data = data;\n      this.v = mult ? data.k * mult : data.k;\n      this.pv = data.k;\n      this._mdf = false;\n      this.elem = elem;\n      this.container = container;\n      this.comp = elem.comp;\n      this.k = false;\n      this.kf = false;\n      this.vel = 0;\n      this.effectsSequence = [];\n      this._isFirstFrame = true;\n      this.getValue = processEffectsSequence;\n      this.setVValue = setVValue;\n      this.addEffect = addEffect;\n    }\n\n    function MultiDimensionalProperty(elem, data, mult, container) {\n      this.propType = 'multidimensional';\n      this.mult = mult || 1;\n      this.data = data;\n      this._mdf = false;\n      this.elem = elem;\n      this.container = container;\n      this.comp = elem.comp;\n      this.k = false;\n      this.kf = false;\n      this.frameId = -1;\n      var i;\n      var len = data.k.length;\n      this.v = createTypedArray('float32', len);\n      this.pv = createTypedArray('float32', len);\n      this.vel = createTypedArray('float32', len);\n\n      for (i = 0; i < len; i += 1) {\n        this.v[i] = data.k[i] * this.mult;\n        this.pv[i] = data.k[i];\n      }\n\n      this._isFirstFrame = true;\n      this.effectsSequence = [];\n      this.getValue = processEffectsSequence;\n      this.setVValue = setVValue;\n      this.addEffect = addEffect;\n    }\n\n    function KeyframedValueProperty(elem, data, mult, container) {\n      this.propType = 'unidimensional';\n      this.keyframes = data.k;\n      this.keyframesMetadata = [];\n      this.offsetTime = elem.data.st;\n      this.frameId = -1;\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0,\n        value: 0,\n        _lastKeyframeIndex: -1\n      };\n      this.k = true;\n      this.kf = true;\n      this.data = data;\n      this.mult = mult || 1;\n      this.elem = elem;\n      this.container = container;\n      this.comp = elem.comp;\n      this.v = initFrame;\n      this.pv = initFrame;\n      this._isFirstFrame = true;\n      this.getValue = processEffectsSequence;\n      this.setVValue = setVValue;\n      this.interpolateValue = interpolateValue;\n      this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n      this.addEffect = addEffect;\n    }\n\n    function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n      this.propType = 'multidimensional';\n      var i;\n      var len = data.k.length;\n      var s;\n      var e;\n      var to;\n      var ti;\n\n      for (i = 0; i < len - 1; i += 1) {\n        if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n          s = data.k[i].s;\n          e = data.k[i + 1].s;\n          to = data.k[i].to;\n          ti = data.k[i].ti;\n\n          if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n            data.k[i].to = null;\n            data.k[i].ti = null;\n          }\n\n          if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n            if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n              data.k[i].to = null;\n              data.k[i].ti = null;\n            }\n          }\n        }\n      }\n\n      this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n      this.data = data;\n      this.keyframes = data.k;\n      this.keyframesMetadata = [];\n      this.offsetTime = elem.data.st;\n      this.k = true;\n      this.kf = true;\n      this._isFirstFrame = true;\n      this.mult = mult || 1;\n      this.elem = elem;\n      this.container = container;\n      this.comp = elem.comp;\n      this.getValue = processEffectsSequence;\n      this.setVValue = setVValue;\n      this.interpolateValue = interpolateValue;\n      this.frameId = -1;\n      var arrLen = data.k[0].s.length;\n      this.v = createTypedArray('float32', arrLen);\n      this.pv = createTypedArray('float32', arrLen);\n\n      for (i = 0; i < arrLen; i += 1) {\n        this.v[i] = initFrame;\n        this.pv[i] = initFrame;\n      }\n\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0,\n        value: createTypedArray('float32', arrLen)\n      };\n      this.addEffect = addEffect;\n    }\n\n    function getProp(elem, data, type, mult, container) {\n      var p;\n\n      if (!data.k.length) {\n        p = new ValueProperty(elem, data, mult, container);\n      } else if (typeof data.k[0] === 'number') {\n        p = new MultiDimensionalProperty(elem, data, mult, container);\n      } else {\n        switch (type) {\n          case 0:\n            p = new KeyframedValueProperty(elem, data, mult, container);\n            break;\n\n          case 1:\n            p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n            break;\n\n          default:\n            break;\n        }\n      }\n\n      if (p.effectsSequence.length) {\n        container.addDynamicProperty(p);\n      }\n\n      return p;\n    }\n\n    var ob = {\n      getProp: getProp\n    };\n    return ob;\n  }();\n\n  function DynamicPropertyContainer() {}\n\n  DynamicPropertyContainer.prototype = {\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n        this.container.addDynamicProperty(this);\n        this._isAnimated = true;\n      }\n    },\n    iterateDynamicProperties: function iterateDynamicProperties() {\n      this._mdf = false;\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.dynamicProperties[i].getValue();\n\n        if (this.dynamicProperties[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    },\n    initDynamicPropertyContainer: function initDynamicPropertyContainer(container) {\n      this.container = container;\n      this.dynamicProperties = [];\n      this._mdf = false;\n      this._isAnimated = false;\n    }\n  };\n\n  var pointPool = function () {\n    function create() {\n      return createTypedArray('float32', 2);\n    }\n\n    return poolFactory(8, create);\n  }();\n\n  function ShapePath() {\n    this.c = false;\n    this._length = 0;\n    this._maxLength = 8;\n    this.v = createSizedArray(this._maxLength);\n    this.o = createSizedArray(this._maxLength);\n    this.i = createSizedArray(this._maxLength);\n  }\n\n  ShapePath.prototype.setPathData = function (closed, len) {\n    this.c = closed;\n    this.setLength(len);\n    var i = 0;\n\n    while (i < len) {\n      this.v[i] = pointPool.newElement();\n      this.o[i] = pointPool.newElement();\n      this.i[i] = pointPool.newElement();\n      i += 1;\n    }\n  };\n\n  ShapePath.prototype.setLength = function (len) {\n    while (this._maxLength < len) {\n      this.doubleArrayLength();\n    }\n\n    this._length = len;\n  };\n\n  ShapePath.prototype.doubleArrayLength = function () {\n    this.v = this.v.concat(createSizedArray(this._maxLength));\n    this.i = this.i.concat(createSizedArray(this._maxLength));\n    this.o = this.o.concat(createSizedArray(this._maxLength));\n    this._maxLength *= 2;\n  };\n\n  ShapePath.prototype.setXYAt = function (x, y, type, pos, replace) {\n    var arr;\n    this._length = Math.max(this._length, pos + 1);\n\n    if (this._length >= this._maxLength) {\n      this.doubleArrayLength();\n    }\n\n    switch (type) {\n      case 'v':\n        arr = this.v;\n        break;\n\n      case 'i':\n        arr = this.i;\n        break;\n\n      case 'o':\n        arr = this.o;\n        break;\n\n      default:\n        arr = [];\n        break;\n    }\n\n    if (!arr[pos] || arr[pos] && !replace) {\n      arr[pos] = pointPool.newElement();\n    }\n\n    arr[pos][0] = x;\n    arr[pos][1] = y;\n  };\n\n  ShapePath.prototype.setTripleAt = function (vX, vY, oX, oY, iX, iY, pos, replace) {\n    this.setXYAt(vX, vY, 'v', pos, replace);\n    this.setXYAt(oX, oY, 'o', pos, replace);\n    this.setXYAt(iX, iY, 'i', pos, replace);\n  };\n\n  ShapePath.prototype.reverse = function () {\n    var newPath = new ShapePath();\n    newPath.setPathData(this.c, this._length);\n    var vertices = this.v;\n    var outPoints = this.o;\n    var inPoints = this.i;\n    var init = 0;\n\n    if (this.c) {\n      newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false);\n      init = 1;\n    }\n\n    var cnt = this._length - 1;\n    var len = this._length;\n    var i;\n\n    for (i = init; i < len; i += 1) {\n      newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false);\n      cnt -= 1;\n    }\n\n    return newPath;\n  };\n\n  var shapePool = function () {\n    function create() {\n      return new ShapePath();\n    }\n\n    function release(shapePath) {\n      var len = shapePath._length;\n      var i;\n\n      for (i = 0; i < len; i += 1) {\n        pointPool.release(shapePath.v[i]);\n        pointPool.release(shapePath.i[i]);\n        pointPool.release(shapePath.o[i]);\n        shapePath.v[i] = null;\n        shapePath.i[i] = null;\n        shapePath.o[i] = null;\n      }\n\n      shapePath._length = 0;\n      shapePath.c = false;\n    }\n\n    function clone(shape) {\n      var cloned = factory.newElement();\n      var i;\n      var len = shape._length === undefined ? shape.v.length : shape._length;\n      cloned.setLength(len);\n      cloned.c = shape.c;\n\n      for (i = 0; i < len; i += 1) {\n        cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n      }\n\n      return cloned;\n    }\n\n    var factory = poolFactory(4, create, release);\n    factory.clone = clone;\n    return factory;\n  }();\n\n  function ShapeCollection() {\n    this._length = 0;\n    this._maxLength = 4;\n    this.shapes = createSizedArray(this._maxLength);\n  }\n\n  ShapeCollection.prototype.addShape = function (shapeData) {\n    if (this._length === this._maxLength) {\n      this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n      this._maxLength *= 2;\n    }\n\n    this.shapes[this._length] = shapeData;\n    this._length += 1;\n  };\n\n  ShapeCollection.prototype.releaseShapes = function () {\n    var i;\n\n    for (i = 0; i < this._length; i += 1) {\n      shapePool.release(this.shapes[i]);\n    }\n\n    this._length = 0;\n  };\n\n  var shapeCollectionPool = function () {\n    var ob = {\n      newShapeCollection: newShapeCollection,\n      release: release\n    };\n    var _length = 0;\n    var _maxLength = 4;\n    var pool = createSizedArray(_maxLength);\n\n    function newShapeCollection() {\n      var shapeCollection;\n\n      if (_length) {\n        _length -= 1;\n        shapeCollection = pool[_length];\n      } else {\n        shapeCollection = new ShapeCollection();\n      }\n\n      return shapeCollection;\n    }\n\n    function release(shapeCollection) {\n      var i;\n      var len = shapeCollection._length;\n\n      for (i = 0; i < len; i += 1) {\n        shapePool.release(shapeCollection.shapes[i]);\n      }\n\n      shapeCollection._length = 0;\n\n      if (_length === _maxLength) {\n        pool = pooling[\"double\"](pool);\n        _maxLength *= 2;\n      }\n\n      pool[_length] = shapeCollection;\n      _length += 1;\n    }\n\n    return ob;\n  }();\n\n  var ShapePropertyFactory = function () {\n    var initFrame = -999999;\n\n    function interpolateShape(frameNum, previousValue, caching) {\n      var iterationIndex = caching.lastIndex;\n      var keyPropS;\n      var keyPropE;\n      var isHold;\n      var j;\n      var k;\n      var jLen;\n      var kLen;\n      var perc;\n      var vertexValue;\n      var kf = this.keyframes;\n\n      if (frameNum < kf[0].t - this.offsetTime) {\n        keyPropS = kf[0].s[0];\n        isHold = true;\n        iterationIndex = 0;\n      } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n        keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n        /* if(kf[kf.length - 1].s){\r\n                  keyPropS = kf[kf.length - 1].s[0];\r\n              }else{\r\n                  keyPropS = kf[kf.length - 2].e[0];\r\n              } */\n\n        isHold = true;\n      } else {\n        var i = iterationIndex;\n        var len = kf.length - 1;\n        var flag = true;\n        var keyData;\n        var nextKeyData;\n        var keyframeMetadata;\n\n        while (flag) {\n          keyData = kf[i];\n          nextKeyData = kf[i + 1];\n\n          if (nextKeyData.t - this.offsetTime > frameNum) {\n            break;\n          }\n\n          if (i < len - 1) {\n            i += 1;\n          } else {\n            flag = false;\n          }\n        }\n\n        keyframeMetadata = this.keyframesMetadata[i] || {};\n        isHold = keyData.h === 1;\n        iterationIndex = i;\n\n        if (!isHold) {\n          if (frameNum >= nextKeyData.t - this.offsetTime) {\n            perc = 1;\n          } else if (frameNum < keyData.t - this.offsetTime) {\n            perc = 0;\n          } else {\n            var fnc;\n\n            if (keyframeMetadata.__fnct) {\n              fnc = keyframeMetadata.__fnct;\n            } else {\n              fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n              keyframeMetadata.__fnct = fnc;\n            }\n\n            perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime)));\n          }\n\n          keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n        }\n\n        keyPropS = keyData.s[0];\n      }\n\n      jLen = previousValue._length;\n      kLen = keyPropS.i[0].length;\n      caching.lastIndex = iterationIndex;\n\n      for (j = 0; j < jLen; j += 1) {\n        for (k = 0; k < kLen; k += 1) {\n          vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n          previousValue.i[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n          previousValue.o[j][k] = vertexValue;\n          vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n          previousValue.v[j][k] = vertexValue;\n        }\n      }\n    }\n\n    function interpolateShapeCurrentTime() {\n      var frameNum = this.comp.renderedFrame - this.offsetTime;\n      var initTime = this.keyframes[0].t - this.offsetTime;\n      var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n      var lastFrame = this._caching.lastFrame;\n\n      if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n        /// /\n        this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n        this.interpolateShape(frameNum, this.pv, this._caching); /// /\n      }\n\n      this._caching.lastFrame = frameNum;\n      return this.pv;\n    }\n\n    function resetShape() {\n      this.paths = this.localShapeCollection;\n    }\n\n    function shapesEqual(shape1, shape2) {\n      if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n        return false;\n      }\n\n      var i;\n      var len = shape1._length;\n\n      for (i = 0; i < len; i += 1) {\n        if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n\n    function setVValue(newPath) {\n      if (!shapesEqual(this.v, newPath)) {\n        this.v = shapePool.clone(newPath);\n        this.localShapeCollection.releaseShapes();\n        this.localShapeCollection.addShape(this.v);\n        this._mdf = true;\n        this.paths = this.localShapeCollection;\n      }\n    }\n\n    function processEffectsSequence() {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (!this.effectsSequence.length) {\n        this._mdf = false;\n        return;\n      }\n\n      if (this.lock) {\n        this.setVValue(this.pv);\n        return;\n      }\n\n      this.lock = true;\n      this._mdf = false;\n      var finalValue;\n\n      if (this.kf) {\n        finalValue = this.pv;\n      } else if (this.data.ks) {\n        finalValue = this.data.ks.k;\n      } else {\n        finalValue = this.data.pt.k;\n      }\n\n      var i;\n      var len = this.effectsSequence.length;\n\n      for (i = 0; i < len; i += 1) {\n        finalValue = this.effectsSequence[i](finalValue);\n      }\n\n      this.setVValue(finalValue);\n      this.lock = false;\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function ShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.container = elem;\n      this.elem = elem;\n      this.data = data;\n      this.k = false;\n      this.kf = false;\n      this._mdf = false;\n      var pathData = type === 3 ? data.pt.k : data.ks.k;\n      this.v = shapePool.clone(pathData);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.reset = resetShape;\n      this.effectsSequence = [];\n    }\n\n    function addEffect(effectFunction) {\n      this.effectsSequence.push(effectFunction);\n      this.container.addDynamicProperty(this);\n    }\n\n    ShapeProperty.prototype.interpolateShape = interpolateShape;\n    ShapeProperty.prototype.getValue = processEffectsSequence;\n    ShapeProperty.prototype.setVValue = setVValue;\n    ShapeProperty.prototype.addEffect = addEffect;\n\n    function KeyframedShapeProperty(elem, data, type) {\n      this.propType = 'shape';\n      this.comp = elem.comp;\n      this.elem = elem;\n      this.container = elem;\n      this.offsetTime = elem.data.st;\n      this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n      this.keyframesMetadata = [];\n      this.k = true;\n      this.kf = true;\n      var len = this.keyframes[0].s[0].i.length;\n      this.v = shapePool.newElement();\n      this.v.setPathData(this.keyframes[0].s[0].c, len);\n      this.pv = shapePool.clone(this.v);\n      this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n      this.paths = this.localShapeCollection;\n      this.paths.addShape(this.v);\n      this.lastFrame = initFrame;\n      this.reset = resetShape;\n      this._caching = {\n        lastFrame: initFrame,\n        lastIndex: 0\n      };\n      this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n    }\n\n    KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n    KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n    KeyframedShapeProperty.prototype.setVValue = setVValue;\n    KeyframedShapeProperty.prototype.addEffect = addEffect;\n\n    var EllShapeProperty = function () {\n      var cPoint = roundCorner;\n\n      function EllShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 4);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.paths = this.localShapeCollection;\n        this.localShapeCollection.addShape(this.v);\n        this.d = data.d;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertEllToPath();\n        }\n      }\n\n      EllShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertEllToPath();\n          }\n        },\n        convertEllToPath: function convertEllToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var s0 = this.s.v[0] / 2;\n          var s1 = this.s.v[1] / 2;\n\n          var _cw = this.d !== 3;\n\n          var _v = this.v;\n          _v.v[0][0] = p0;\n          _v.v[0][1] = p1 - s1;\n          _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.v[1][1] = p1;\n          _v.v[2][0] = p0;\n          _v.v[2][1] = p1 + s1;\n          _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.v[3][1] = p1;\n          _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.i[0][1] = p1 - s1;\n          _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.i[1][1] = p1 - s1 * cPoint;\n          _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.i[2][1] = p1 + s1;\n          _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.i[3][1] = p1 + s1 * cPoint;\n          _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n          _v.o[0][1] = p1 - s1;\n          _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n          _v.o[1][1] = p1 + s1 * cPoint;\n          _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n          _v.o[2][1] = p1 + s1;\n          _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n          _v.o[3][1] = p1 - s1 * cPoint;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n      return EllShapePropertyFactory;\n    }();\n\n    var StarShapeProperty = function () {\n      function StarShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.setPathData(true, 0);\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.data = data;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n\n        if (data.sy === 1) {\n          this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n          this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n          this.convertToPath = this.convertStarToPath;\n        } else {\n          this.convertToPath = this.convertPolygonToPath;\n        }\n\n        this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n        this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n        this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertToPath();\n        }\n      }\n\n      StarShapePropertyFactory.prototype = {\n        reset: resetShape,\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertToPath();\n          }\n        },\n        convertStarToPath: function convertStarToPath() {\n          var numPts = Math.floor(this.pt.v) * 2;\n          var angle = Math.PI * 2 / numPts;\n          /* this.v.v.length = numPts;\r\n                  this.v.i.length = numPts;\r\n                  this.v.o.length = numPts; */\n\n          var longFlag = true;\n          var longRad = this.or.v;\n          var shortRad = this.ir.v;\n          var longRound = this.os.v;\n          var shortRound = this.is.v;\n          var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n          var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n          var i;\n          var rad;\n          var roundness;\n          var perimSegment;\n          var currentAng = -Math.PI / 2;\n          currentAng += this.r.v;\n          var dir = this.data.d === 3 ? -1 : 1;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            rad = longFlag ? longRad : shortRad;\n            roundness = longFlag ? longRound : shortRound;\n            perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            /* this.v.v[i] = [x,y];\r\n                      this.v.i[i] = [x+ox*perimSegment*roundness*dir,y+oy*perimSegment*roundness*dir];\r\n                      this.v.o[i] = [x-ox*perimSegment*roundness*dir,y-oy*perimSegment*roundness*dir];\r\n                      this.v._length = numPts; */\n\n            longFlag = !longFlag;\n            currentAng += angle * dir;\n          }\n        },\n        convertPolygonToPath: function convertPolygonToPath() {\n          var numPts = Math.floor(this.pt.v);\n          var angle = Math.PI * 2 / numPts;\n          var rad = this.or.v;\n          var roundness = this.os.v;\n          var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n          var i;\n          var currentAng = -Math.PI * 0.5;\n          var dir = this.data.d === 3 ? -1 : 1;\n          currentAng += this.r.v;\n          this.v._length = 0;\n\n          for (i = 0; i < numPts; i += 1) {\n            var x = rad * Math.cos(currentAng);\n            var y = rad * Math.sin(currentAng);\n            var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n            var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n            x += +this.p.v[0];\n            y += +this.p.v[1];\n            this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true);\n            currentAng += angle * dir;\n          }\n\n          this.paths.length = 0;\n          this.paths[0] = this.v;\n        }\n      };\n      extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n      return StarShapePropertyFactory;\n    }();\n\n    var RectShapeProperty = function () {\n      function RectShapePropertyFactory(elem, data) {\n        this.v = shapePool.newElement();\n        this.v.c = true;\n        this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n        this.localShapeCollection.addShape(this.v);\n        this.paths = this.localShapeCollection;\n        this.elem = elem;\n        this.comp = elem.comp;\n        this.frameId = -1;\n        this.d = data.d;\n        this.initDynamicPropertyContainer(elem);\n        this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n        this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n        this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n\n        if (this.dynamicProperties.length) {\n          this.k = true;\n        } else {\n          this.k = false;\n          this.convertRectToPath();\n        }\n      }\n\n      RectShapePropertyFactory.prototype = {\n        convertRectToPath: function convertRectToPath() {\n          var p0 = this.p.v[0];\n          var p1 = this.p.v[1];\n          var v0 = this.s.v[0] / 2;\n          var v1 = this.s.v[1] / 2;\n          var round = bmMin(v0, v1, this.r.v);\n          var cPoint = round * (1 - roundCorner);\n          this.v._length = 0;\n\n          if (this.d === 2 || this.d === 1) {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n            this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n            }\n          } else {\n            this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n\n            if (round !== 0) {\n              this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n              this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n              this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n              this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n            } else {\n              this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n              this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n              this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n            }\n          }\n        },\n        getValue: function getValue() {\n          if (this.elem.globalData.frameId === this.frameId) {\n            return;\n          }\n\n          this.frameId = this.elem.globalData.frameId;\n          this.iterateDynamicProperties();\n\n          if (this._mdf) {\n            this.convertRectToPath();\n          }\n        },\n        reset: resetShape\n      };\n      extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n      return RectShapePropertyFactory;\n    }();\n\n    function getShapeProp(elem, data, type) {\n      var prop;\n\n      if (type === 3 || type === 4) {\n        var dataProp = type === 3 ? data.pt : data.ks;\n        var keys = dataProp.k;\n\n        if (keys.length) {\n          prop = new KeyframedShapeProperty(elem, data, type);\n        } else {\n          prop = new ShapeProperty(elem, data, type);\n        }\n      } else if (type === 5) {\n        prop = new RectShapeProperty(elem, data);\n      } else if (type === 6) {\n        prop = new EllShapeProperty(elem, data);\n      } else if (type === 7) {\n        prop = new StarShapeProperty(elem, data);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    }\n\n    function getConstructorFunction() {\n      return ShapeProperty;\n    }\n\n    function getKeyframedConstructorFunction() {\n      return KeyframedShapeProperty;\n    }\n\n    var ob = {};\n    ob.getShapeProp = getShapeProp;\n    ob.getConstructorFunction = getConstructorFunction;\n    ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n    return ob;\n  }();\n\n  /*!\r\n   Transformation Matrix v2.0\r\n   (c) Epistemex 2014-2015\r\n   www.epistemex.com\r\n   By Ken Fyrstenberg\r\n   Contributions by leeoniya.\r\n   License: MIT, header required.\r\n   */\n\n  /**\r\n   * 2D transformation matrix object initialized with identity matrix.\r\n   *\r\n   * The matrix can synchronize a canvas context by supplying the context\r\n   * as an argument, or later apply current absolute transform to an\r\n   * existing context.\r\n   *\r\n   * All values are handled as floating point values.\r\n   *\r\n   * @param {CanvasRenderingContext2D} [context] - Optional context to sync with Matrix\r\n   * @prop {number} a - scale x\r\n   * @prop {number} b - shear y\r\n   * @prop {number} c - shear x\r\n   * @prop {number} d - scale y\r\n   * @prop {number} e - translate x\r\n   * @prop {number} f - translate y\r\n   * @prop {CanvasRenderingContext2D|null} [context=null] - set or get current canvas context\r\n   * @constructor\r\n   */\n\n  var Matrix = function () {\n    var _cos = Math.cos;\n    var _sin = Math.sin;\n    var _tan = Math.tan;\n    var _rnd = Math.round;\n\n    function reset() {\n      this.props[0] = 1;\n      this.props[1] = 0;\n      this.props[2] = 0;\n      this.props[3] = 0;\n      this.props[4] = 0;\n      this.props[5] = 1;\n      this.props[6] = 0;\n      this.props[7] = 0;\n      this.props[8] = 0;\n      this.props[9] = 0;\n      this.props[10] = 1;\n      this.props[11] = 0;\n      this.props[12] = 0;\n      this.props[13] = 0;\n      this.props[14] = 0;\n      this.props[15] = 1;\n      return this;\n    }\n\n    function rotate(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function rotateX(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateY(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n    }\n\n    function rotateZ(angle) {\n      if (angle === 0) {\n        return this;\n      }\n\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n    }\n\n    function shear(sx, sy) {\n      return this._t(1, sy, sx, 1, 0, 0);\n    }\n\n    function skew(ax, ay) {\n      return this.shear(_tan(ax), _tan(ay));\n    }\n\n    function skewFromAxis(ax, angle) {\n      var mCos = _cos(angle);\n\n      var mSin = _sin(angle);\n\n      return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); // return this._t(mCos, mSin, -mSin, mCos, 0, 0)._t(1, 0, _tan(ax), 1, 0, 0)._t(mCos, -mSin, mSin, mCos, 0, 0);\n    }\n\n    function scale(sx, sy, sz) {\n      if (!sz && sz !== 0) {\n        sz = 1;\n      }\n\n      if (sx === 1 && sy === 1 && sz === 1) {\n        return this;\n      }\n\n      return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n    }\n\n    function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n      this.props[0] = a;\n      this.props[1] = b;\n      this.props[2] = c;\n      this.props[3] = d;\n      this.props[4] = e;\n      this.props[5] = f;\n      this.props[6] = g;\n      this.props[7] = h;\n      this.props[8] = i;\n      this.props[9] = j;\n      this.props[10] = k;\n      this.props[11] = l;\n      this.props[12] = m;\n      this.props[13] = n;\n      this.props[14] = o;\n      this.props[15] = p;\n      return this;\n    }\n\n    function translate(tx, ty, tz) {\n      tz = tz || 0;\n\n      if (tx !== 0 || ty !== 0 || tz !== 0) {\n        return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n      }\n\n      return this;\n    }\n\n    function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n      var _p = this.props;\n\n      if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n        // NOTE: commenting this condition because TurboFan deoptimizes code when present\n        // if(m2 !== 0 || n2 !== 0 || o2 !== 0){\n        _p[12] = _p[12] * a2 + _p[15] * m2;\n        _p[13] = _p[13] * f2 + _p[15] * n2;\n        _p[14] = _p[14] * k2 + _p[15] * o2;\n        _p[15] *= p2; // }\n\n        this._identityCalculated = false;\n        return this;\n      }\n\n      var a1 = _p[0];\n      var b1 = _p[1];\n      var c1 = _p[2];\n      var d1 = _p[3];\n      var e1 = _p[4];\n      var f1 = _p[5];\n      var g1 = _p[6];\n      var h1 = _p[7];\n      var i1 = _p[8];\n      var j1 = _p[9];\n      var k1 = _p[10];\n      var l1 = _p[11];\n      var m1 = _p[12];\n      var n1 = _p[13];\n      var o1 = _p[14];\n      var p1 = _p[15];\n      /* matrix order (canvas compatible):\r\n           * ace\r\n           * bdf\r\n           * 001\r\n           */\n\n      _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n      _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n      _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n      _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n      _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n      _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n      _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n      _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n      _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n      _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n      _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n      _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n      _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n      _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n      _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n      _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n      this._identityCalculated = false;\n      return this;\n    }\n\n    function isIdentity() {\n      if (!this._identityCalculated) {\n        this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n        this._identityCalculated = true;\n      }\n\n      return this._identity;\n    }\n\n    function equals(matr) {\n      var i = 0;\n\n      while (i < 16) {\n        if (matr.props[i] !== this.props[i]) {\n          return false;\n        }\n\n        i += 1;\n      }\n\n      return true;\n    }\n\n    function clone(matr) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        matr.props[i] = this.props[i];\n      }\n\n      return matr;\n    }\n\n    function cloneFromProps(props) {\n      var i;\n\n      for (i = 0; i < 16; i += 1) {\n        this.props[i] = props[i];\n      }\n    }\n\n    function applyToPoint(x, y, z) {\n      return {\n        x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n        y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n        z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n      };\n      /* return {\r\n           x: x * me.a + y * me.c + me.e,\r\n           y: x * me.b + y * me.d + me.f\r\n           }; */\n    }\n\n    function applyToX(x, y, z) {\n      return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n    }\n\n    function applyToY(x, y, z) {\n      return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n    }\n\n    function applyToZ(x, y, z) {\n      return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n    }\n\n    function getInverseMatrix() {\n      var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n      var a = this.props[5] / determinant;\n      var b = -this.props[1] / determinant;\n      var c = -this.props[4] / determinant;\n      var d = this.props[0] / determinant;\n      var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n      var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n      var inverseMatrix = new Matrix();\n      inverseMatrix.props[0] = a;\n      inverseMatrix.props[1] = b;\n      inverseMatrix.props[4] = c;\n      inverseMatrix.props[5] = d;\n      inverseMatrix.props[12] = e;\n      inverseMatrix.props[13] = f;\n      return inverseMatrix;\n    }\n\n    function inversePoint(pt) {\n      var inverseMatrix = this.getInverseMatrix();\n      return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n    }\n\n    function inversePoints(pts) {\n      var i;\n      var len = pts.length;\n      var retPts = [];\n\n      for (i = 0; i < len; i += 1) {\n        retPts[i] = inversePoint(pts[i]);\n      }\n\n      return retPts;\n    }\n\n    function applyToTriplePoints(pt1, pt2, pt3) {\n      var arr = createTypedArray('float32', 6);\n\n      if (this.isIdentity()) {\n        arr[0] = pt1[0];\n        arr[1] = pt1[1];\n        arr[2] = pt2[0];\n        arr[3] = pt2[1];\n        arr[4] = pt3[0];\n        arr[5] = pt3[1];\n      } else {\n        var p0 = this.props[0];\n        var p1 = this.props[1];\n        var p4 = this.props[4];\n        var p5 = this.props[5];\n        var p12 = this.props[12];\n        var p13 = this.props[13];\n        arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n        arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n        arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n        arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n        arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n        arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n      }\n\n      return arr;\n    }\n\n    function applyToPointArray(x, y, z) {\n      var arr;\n\n      if (this.isIdentity()) {\n        arr = [x, y, z];\n      } else {\n        arr = [x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]];\n      }\n\n      return arr;\n    }\n\n    function applyToPointStringified(x, y) {\n      if (this.isIdentity()) {\n        return x + ',' + y;\n      }\n\n      var _p = this.props;\n      return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + ',' + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n    }\n\n    function toCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var i = 0;\n      var props = this.props;\n      var cssValue = 'matrix3d(';\n      var v = 10000;\n\n      while (i < 16) {\n        cssValue += _rnd(props[i] * v) / v;\n        cssValue += i === 15 ? ')' : ',';\n        i += 1;\n      }\n\n      return cssValue;\n    }\n\n    function roundMatrixProperty(val) {\n      var v = 10000;\n\n      if (val < 0.000001 && val > 0 || val > -0.000001 && val < 0) {\n        return _rnd(val * v) / v;\n      }\n\n      return val;\n    }\n\n    function to2dCSS() {\n      // Doesn't make much sense to add this optimization. If it is an identity matrix, it's very likely this will get called only once since it won't be keyframed.\n\n      /* if(this.isIdentity()) {\r\n              return '';\r\n          } */\n      var props = this.props;\n\n      var _a = roundMatrixProperty(props[0]);\n\n      var _b = roundMatrixProperty(props[1]);\n\n      var _c = roundMatrixProperty(props[4]);\n\n      var _d = roundMatrixProperty(props[5]);\n\n      var _e = roundMatrixProperty(props[12]);\n\n      var _f = roundMatrixProperty(props[13]);\n\n      return 'matrix(' + _a + ',' + _b + ',' + _c + ',' + _d + ',' + _e + ',' + _f + ')';\n    }\n\n    return function () {\n      this.reset = reset;\n      this.rotate = rotate;\n      this.rotateX = rotateX;\n      this.rotateY = rotateY;\n      this.rotateZ = rotateZ;\n      this.skew = skew;\n      this.skewFromAxis = skewFromAxis;\n      this.shear = shear;\n      this.scale = scale;\n      this.setTransform = setTransform;\n      this.translate = translate;\n      this.transform = transform;\n      this.applyToPoint = applyToPoint;\n      this.applyToX = applyToX;\n      this.applyToY = applyToY;\n      this.applyToZ = applyToZ;\n      this.applyToPointArray = applyToPointArray;\n      this.applyToTriplePoints = applyToTriplePoints;\n      this.applyToPointStringified = applyToPointStringified;\n      this.toCSS = toCSS;\n      this.to2dCSS = to2dCSS;\n      this.clone = clone;\n      this.cloneFromProps = cloneFromProps;\n      this.equals = equals;\n      this.inversePoints = inversePoints;\n      this.inversePoint = inversePoint;\n      this.getInverseMatrix = getInverseMatrix;\n      this._t = this.transform;\n      this.isIdentity = isIdentity;\n      this._identity = true;\n      this._identityCalculated = false;\n      this.props = createTypedArray('float32', 16);\n      this.reset();\n    };\n  }();\n\n  function _typeof$3(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$3 = function _typeof(obj) { return typeof obj; }; } else { _typeof$3 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$3(obj); }\n  var lottie = {};\n  var standalone = '__[STANDALONE]__';\n  var animationData = '__[ANIMATIONDATA]__';\n  var renderer = '';\n\n  function setLocation(href) {\n    setLocationHref(href);\n  }\n\n  function searchAnimations() {\n    if (standalone === true) {\n      animationManager.searchAnimations(animationData, standalone, renderer);\n    } else {\n      animationManager.searchAnimations();\n    }\n  }\n\n  function setSubframeRendering(flag) {\n    setSubframeEnabled(flag);\n  }\n\n  function setPrefix(prefix) {\n    setIdPrefix(prefix);\n  }\n\n  function loadAnimation(params) {\n    if (standalone === true) {\n      params.animationData = JSON.parse(animationData);\n    }\n\n    return animationManager.loadAnimation(params);\n  }\n\n  function setQuality(value) {\n    if (typeof value === 'string') {\n      switch (value) {\n        case 'high':\n          setDefaultCurveSegments(200);\n          break;\n\n        default:\n        case 'medium':\n          setDefaultCurveSegments(50);\n          break;\n\n        case 'low':\n          setDefaultCurveSegments(10);\n          break;\n      }\n    } else if (!isNaN(value) && value > 1) {\n      setDefaultCurveSegments(value);\n    }\n\n    if (getDefaultCurveSegments() >= 50) {\n      roundValues(false);\n    } else {\n      roundValues(true);\n    }\n  }\n\n  function inBrowser() {\n    return typeof navigator !== 'undefined';\n  }\n\n  function installPlugin(type, plugin) {\n    if (type === 'expressions') {\n      setExpressionsPlugin(plugin);\n    }\n  }\n\n  function getFactory(name) {\n    switch (name) {\n      case 'propertyFactory':\n        return PropertyFactory;\n\n      case 'shapePropertyFactory':\n        return ShapePropertyFactory;\n\n      case 'matrix':\n        return Matrix;\n\n      default:\n        return null;\n    }\n  }\n\n  lottie.play = animationManager.play;\n  lottie.pause = animationManager.pause;\n  lottie.setLocationHref = setLocation;\n  lottie.togglePause = animationManager.togglePause;\n  lottie.setSpeed = animationManager.setSpeed;\n  lottie.setDirection = animationManager.setDirection;\n  lottie.stop = animationManager.stop;\n  lottie.searchAnimations = searchAnimations;\n  lottie.registerAnimation = animationManager.registerAnimation;\n  lottie.loadAnimation = loadAnimation;\n  lottie.setSubframeRendering = setSubframeRendering;\n  lottie.resize = animationManager.resize; // lottie.start = start;\n\n  lottie.goToAndStop = animationManager.goToAndStop;\n  lottie.destroy = animationManager.destroy;\n  lottie.setQuality = setQuality;\n  lottie.inBrowser = inBrowser;\n  lottie.installPlugin = installPlugin;\n  lottie.freeze = animationManager.freeze;\n  lottie.unfreeze = animationManager.unfreeze;\n  lottie.setVolume = animationManager.setVolume;\n  lottie.mute = animationManager.mute;\n  lottie.unmute = animationManager.unmute;\n  lottie.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n  lottie.useWebWorker = setWebWorker;\n  lottie.setIDPrefix = setPrefix;\n  lottie.__getFactory = getFactory;\n  lottie.version = '5.9.6';\n\n  function checkReady() {\n    if (document.readyState === 'complete') {\n      clearInterval(readyStateCheckInterval);\n      searchAnimations();\n    }\n  }\n\n  function getQueryVariable(variable) {\n    var vars = queryString.split('&');\n\n    for (var i = 0; i < vars.length; i += 1) {\n      var pair = vars[i].split('=');\n\n      if (decodeURIComponent(pair[0]) == variable) {\n        // eslint-disable-line eqeqeq\n        return decodeURIComponent(pair[1]);\n      }\n    }\n\n    return null;\n  }\n\n  var queryString = '';\n\n  if (standalone) {\n    var scripts = document.getElementsByTagName('script');\n    var index = scripts.length - 1;\n    var myScript = scripts[index] || {\n      src: ''\n    };\n    queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, '') : ''; // eslint-disable-line no-useless-escape\n\n    renderer = getQueryVariable('renderer');\n  }\n\n  var readyStateCheckInterval = setInterval(checkReady, 100); // this adds bodymovin to the window object for backwards compatibility\n\n  try {\n    if (!((typeof exports === \"undefined\" ? \"undefined\" : _typeof$3(exports)) === 'object' && typeof module !== 'undefined') && !(typeof define === 'function' && define.amd) // eslint-disable-line no-undef\n    ) {\n      window.bodymovin = lottie;\n    }\n  } catch (err) {//\n  }\n\n  var ShapeModifiers = function () {\n    var ob = {};\n    var modifiers = {};\n    ob.registerModifier = registerModifier;\n    ob.getModifier = getModifier;\n\n    function registerModifier(nm, factory) {\n      if (!modifiers[nm]) {\n        modifiers[nm] = factory;\n      }\n    }\n\n    function getModifier(nm, elem, data) {\n      return new modifiers[nm](elem, data);\n    }\n\n    return ob;\n  }();\n\n  function ShapeModifier() {}\n\n  ShapeModifier.prototype.initModifierProperties = function () {};\n\n  ShapeModifier.prototype.addShapeToModifier = function () {};\n\n  ShapeModifier.prototype.addShape = function (data) {\n    if (!this.closed) {\n      // Adding shape to dynamic properties. It covers the case where a shape has no effects applied, to reset it's _mdf state on every tick.\n      data.sh.container.addDynamicProperty(data.sh);\n      var shapeData = {\n        shape: data.sh,\n        data: data,\n        localShapeCollection: shapeCollectionPool.newShapeCollection()\n      };\n      this.shapes.push(shapeData);\n      this.addShapeToModifier(shapeData);\n\n      if (this._isAnimated) {\n        data.setAsAnimated();\n      }\n    }\n  };\n\n  ShapeModifier.prototype.init = function (elem, data) {\n    this.shapes = [];\n    this.elem = elem;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, data);\n    this.frameId = initialDefaultFrame;\n    this.closed = false;\n    this.k = false;\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  ShapeModifier.prototype.processKeys = function () {\n    if (this.elem.globalData.frameId === this.frameId) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  extendPrototype([DynamicPropertyContainer], ShapeModifier);\n\n  function TrimModifier() {}\n\n  extendPrototype([ShapeModifier], TrimModifier);\n\n  TrimModifier.prototype.initModifierProperties = function (elem, data) {\n    this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n    this.sValue = 0;\n    this.eValue = 0;\n    this.getValue = this.processKeys;\n    this.m = data.m;\n    this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n  };\n\n  TrimModifier.prototype.addShapeToModifier = function (shapeData) {\n    shapeData.pathsData = [];\n  };\n\n  TrimModifier.prototype.calculateShapeEdges = function (s, e, shapeLength, addedLength, totalModifierLength) {\n    var segments = [];\n\n    if (e <= 1) {\n      segments.push({\n        s: s,\n        e: e\n      });\n    } else if (s >= 1) {\n      segments.push({\n        s: s - 1,\n        e: e - 1\n      });\n    } else {\n      segments.push({\n        s: s,\n        e: 1\n      });\n      segments.push({\n        s: 0,\n        e: e - 1\n      });\n    }\n\n    var shapeSegments = [];\n    var i;\n    var len = segments.length;\n    var segmentOb;\n\n    for (i = 0; i < len; i += 1) {\n      segmentOb = segments[i];\n\n      if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n        var shapeS;\n        var shapeE;\n\n        if (segmentOb.s * totalModifierLength <= addedLength) {\n          shapeS = 0;\n        } else {\n          shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n          shapeE = 1;\n        } else {\n          shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n        }\n\n        shapeSegments.push([shapeS, shapeE]);\n      }\n    }\n\n    if (!shapeSegments.length) {\n      shapeSegments.push([0, 0]);\n    }\n\n    return shapeSegments;\n  };\n\n  TrimModifier.prototype.releasePathsData = function (pathsData) {\n    var i;\n    var len = pathsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      segmentsLengthPool.release(pathsData[i]);\n    }\n\n    pathsData.length = 0;\n    return pathsData;\n  };\n\n  TrimModifier.prototype.processShapes = function (_isFirstFrame) {\n    var s;\n    var e;\n\n    if (this._mdf || _isFirstFrame) {\n      var o = this.o.v % 360 / 360;\n\n      if (o < 0) {\n        o += 1;\n      }\n\n      if (this.s.v > 1) {\n        s = 1 + o;\n      } else if (this.s.v < 0) {\n        s = 0 + o;\n      } else {\n        s = this.s.v + o;\n      }\n\n      if (this.e.v > 1) {\n        e = 1 + o;\n      } else if (this.e.v < 0) {\n        e = 0 + o;\n      } else {\n        e = this.e.v + o;\n      }\n\n      if (s > e) {\n        var _s = s;\n        s = e;\n        e = _s;\n      }\n\n      s = Math.round(s * 10000) * 0.0001;\n      e = Math.round(e * 10000) * 0.0001;\n      this.sValue = s;\n      this.eValue = e;\n    } else {\n      s = this.sValue;\n      e = this.eValue;\n    }\n\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var pathsData;\n    var pathData;\n    var totalShapeLength;\n    var totalModifierLength = 0;\n\n    if (e === s) {\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].localShapeCollection.releaseShapes();\n        this.shapes[i].shape._mdf = true;\n        this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n\n        if (this._mdf) {\n          this.shapes[i].pathsData.length = 0;\n        }\n      }\n    } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n      var segments = [];\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i]; // if shape hasn't changed and trim properties haven't changed, cached previous path can be used\n\n        if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n          shapeData.shape.paths = shapeData.localShapeCollection;\n        } else {\n          shapePaths = shapeData.shape.paths;\n          jLen = shapePaths._length;\n          totalShapeLength = 0;\n\n          if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n            totalShapeLength = shapeData.totalShapeLength;\n          } else {\n            pathsData = this.releasePathsData(shapeData.pathsData);\n\n            for (j = 0; j < jLen; j += 1) {\n              pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n              pathsData.push(pathData);\n              totalShapeLength += pathData.totalLength;\n            }\n\n            shapeData.totalShapeLength = totalShapeLength;\n            shapeData.pathsData = pathsData;\n          }\n\n          totalModifierLength += totalShapeLength;\n          shapeData.shape._mdf = true;\n        }\n      }\n\n      var shapeS = s;\n      var shapeE = e;\n      var addedLength = 0;\n      var edges;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shapeData = this.shapes[i];\n\n        if (shapeData.shape._mdf) {\n          localShapeCollection = shapeData.localShapeCollection;\n          localShapeCollection.releaseShapes(); // if m === 2 means paths are trimmed individually so edges need to be found for this specific shape relative to whoel group\n\n          if (this.m === 2 && len > 1) {\n            edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n            addedLength += shapeData.totalShapeLength;\n          } else {\n            edges = [[shapeS, shapeE]];\n          }\n\n          jLen = edges.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            shapeS = edges[j][0];\n            shapeE = edges[j][1];\n            segments.length = 0;\n\n            if (shapeE <= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength * shapeE\n              });\n            } else if (shapeS >= 1) {\n              segments.push({\n                s: shapeData.totalShapeLength * (shapeS - 1),\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            } else {\n              segments.push({\n                s: shapeData.totalShapeLength * shapeS,\n                e: shapeData.totalShapeLength\n              });\n              segments.push({\n                s: 0,\n                e: shapeData.totalShapeLength * (shapeE - 1)\n              });\n            }\n\n            var newShapesData = this.addShapes(shapeData, segments[0]);\n\n            if (segments[0].s !== segments[0].e) {\n              if (segments.length > 1) {\n                var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n\n                if (lastShapeInCollection.c) {\n                  var lastShape = newShapesData.pop();\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n                } else {\n                  this.addPaths(newShapesData, localShapeCollection);\n                  newShapesData = this.addShapes(shapeData, segments[1]);\n                }\n              }\n\n              this.addPaths(newShapesData, localShapeCollection);\n            }\n          }\n\n          shapeData.shape.paths = localShapeCollection;\n        }\n      }\n    } else if (this._mdf) {\n      for (i = 0; i < len; i += 1) {\n        // Releasign Trim Cached paths data when no trim applied in case shapes are modified inbetween.\n        // Don't remove this even if it's losing cached info.\n        this.shapes[i].pathsData.length = 0;\n        this.shapes[i].shape._mdf = true;\n      }\n    }\n  };\n\n  TrimModifier.prototype.addPaths = function (newPaths, localShapeCollection) {\n    var i;\n    var len = newPaths.length;\n\n    for (i = 0; i < len; i += 1) {\n      localShapeCollection.addShape(newPaths[i]);\n    }\n  };\n\n  TrimModifier.prototype.addSegment = function (pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n    shapePath.setXYAt(pt2[0], pt2[1], 'o', pos);\n    shapePath.setXYAt(pt3[0], pt3[1], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(pt1[0], pt1[1], 'v', pos);\n    }\n\n    shapePath.setXYAt(pt4[0], pt4[1], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addSegmentFromArray = function (points, shapePath, pos, newShape) {\n    shapePath.setXYAt(points[1], points[5], 'o', pos);\n    shapePath.setXYAt(points[2], points[6], 'i', pos + 1);\n\n    if (newShape) {\n      shapePath.setXYAt(points[0], points[4], 'v', pos);\n    }\n\n    shapePath.setXYAt(points[3], points[7], 'v', pos + 1);\n  };\n\n  TrimModifier.prototype.addShapes = function (shapeData, shapeSegment, shapePath) {\n    var pathsData = shapeData.pathsData;\n    var shapePaths = shapeData.shape.paths.shapes;\n    var i;\n    var len = shapeData.shape.paths._length;\n    var j;\n    var jLen;\n    var addedLength = 0;\n    var currentLengthData;\n    var segmentCount;\n    var lengths;\n    var segment;\n    var shapes = [];\n    var initPos;\n    var newShape = true;\n\n    if (!shapePath) {\n      shapePath = shapePool.newElement();\n      segmentCount = 0;\n      initPos = 0;\n    } else {\n      segmentCount = shapePath._length;\n      initPos = shapePath._length;\n    }\n\n    shapes.push(shapePath);\n\n    for (i = 0; i < len; i += 1) {\n      lengths = pathsData[i].lengths;\n      shapePath.c = shapePaths[i].c;\n      jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n\n      for (j = 1; j < jLen; j += 1) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n          addedLength += currentLengthData.addedLength;\n          shapePath.c = false;\n        } else if (addedLength > shapeSegment.e) {\n          shapePath.c = false;\n          break;\n        } else {\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n\n          addedLength += currentLengthData.addedLength;\n          segmentCount += 1;\n        }\n      }\n\n      if (shapePaths[i].c && lengths.length) {\n        currentLengthData = lengths[j - 1];\n\n        if (addedLength <= shapeSegment.e) {\n          var segmentLength = lengths[j - 1].addedLength;\n\n          if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n            this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape);\n            newShape = false;\n          } else {\n            segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]);\n            this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); // this.addSegment(segment.pt1, segment.pt3, segment.pt4, segment.pt2, shapePath, segmentCount, newShape);\n\n            newShape = false;\n            shapePath.c = false;\n          }\n        } else {\n          shapePath.c = false;\n        }\n\n        addedLength += currentLengthData.addedLength;\n        segmentCount += 1;\n      }\n\n      if (shapePath._length) {\n        shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], 'i', initPos);\n        shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], 'o', shapePath._length - 1);\n      }\n\n      if (addedLength > shapeSegment.e) {\n        break;\n      }\n\n      if (i < len - 1) {\n        shapePath = shapePool.newElement();\n        newShape = true;\n        shapes.push(shapePath);\n        segmentCount = 0;\n      }\n    }\n\n    return shapes;\n  };\n\n  function PuckerAndBloatModifier() {}\n\n  extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n\n  PuckerAndBloatModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n    this._isAnimated = !!this.amount.effectsSequence.length;\n  };\n\n  PuckerAndBloatModifier.prototype.processPath = function (path, amount) {\n    var percent = amount / 100;\n    var centerPoint = [0, 0];\n    var pathLength = path._length;\n    var i = 0;\n\n    for (i = 0; i < pathLength; i += 1) {\n      centerPoint[0] += path.v[i][0];\n      centerPoint[1] += path.v[i][1];\n    }\n\n    centerPoint[0] /= pathLength;\n    centerPoint[1] /= pathLength;\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < pathLength; i += 1) {\n      vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n      vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n      oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n      oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n      iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n      iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n      clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n    }\n\n    return clonedPath;\n  };\n\n  PuckerAndBloatModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var amount = this.amount.v;\n\n    if (amount !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  var TransformPropertyFactory = function () {\n    var defaultVector = [0, 0];\n\n    function applyToMatrix(mat) {\n      var _mdf = this._mdf;\n      this.iterateDynamicProperties();\n      this._mdf = this._mdf || _mdf;\n\n      if (this.a) {\n        mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n      }\n\n      if (this.s) {\n        mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n      }\n\n      if (this.sk) {\n        mat.skewFromAxis(-this.sk.v, this.sa.v);\n      }\n\n      if (this.r) {\n        mat.rotate(-this.r.v);\n      } else {\n        mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n      }\n\n      if (this.data.p.s) {\n        if (this.data.p.z) {\n          mat.translate(this.px.v, this.py.v, -this.pz.v);\n        } else {\n          mat.translate(this.px.v, this.py.v, 0);\n        }\n      } else {\n        mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n      }\n    }\n\n    function processKeys(forceRender) {\n      if (this.elem.globalData.frameId === this.frameId) {\n        return;\n      }\n\n      if (this._isDirty) {\n        this.precalculateMatrix();\n        this._isDirty = false;\n      }\n\n      this.iterateDynamicProperties();\n\n      if (this._mdf || forceRender) {\n        var frameRate;\n        this.v.cloneFromProps(this.pre.props);\n\n        if (this.appliedTransformations < 1) {\n          this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        }\n\n        if (this.appliedTransformations < 2) {\n          this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        }\n\n        if (this.sk && this.appliedTransformations < 3) {\n          this.v.skewFromAxis(-this.sk.v, this.sa.v);\n        }\n\n        if (this.r && this.appliedTransformations < 4) {\n          this.v.rotate(-this.r.v);\n        } else if (!this.r && this.appliedTransformations < 4) {\n          this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        }\n\n        if (this.autoOriented) {\n          var v1;\n          var v2;\n          frameRate = this.elem.globalData.frameRate;\n\n          if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n            if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n              v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n              v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n            } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n              v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n              v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n            } else {\n              v1 = this.p.pv;\n              v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);\n            }\n          } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n            v1 = [];\n            v2 = [];\n            var px = this.px;\n            var py = this.py;\n\n            if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n              v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n              v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n              v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n              v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n            } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n              v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n              v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n              v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n              v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n            } else {\n              v1 = [px.pv, py.pv];\n              v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n              v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n            }\n          } else {\n            v2 = defaultVector;\n            v1 = v2;\n          }\n\n          this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n        }\n\n        if (this.data.p && this.data.p.s) {\n          if (this.data.p.z) {\n            this.v.translate(this.px.v, this.py.v, -this.pz.v);\n          } else {\n            this.v.translate(this.px.v, this.py.v, 0);\n          }\n        } else {\n          this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n        }\n      }\n\n      this.frameId = this.elem.globalData.frameId;\n    }\n\n    function precalculateMatrix() {\n      if (!this.a.k) {\n        this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n        this.appliedTransformations = 1;\n      } else {\n        return;\n      }\n\n      if (!this.s.effectsSequence.length) {\n        this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n        this.appliedTransformations = 2;\n      } else {\n        return;\n      }\n\n      if (this.sk) {\n        if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n          this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n          this.appliedTransformations = 3;\n        } else {\n          return;\n        }\n      }\n\n      if (this.r) {\n        if (!this.r.effectsSequence.length) {\n          this.pre.rotate(-this.r.v);\n          this.appliedTransformations = 4;\n        }\n      } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n        this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n        this.appliedTransformations = 4;\n      }\n    }\n\n    function autoOrient() {//\n      // var prevP = this.getValueAtTime();\n    }\n\n    function addDynamicProperty(prop) {\n      this._addDynamicProperty(prop);\n\n      this.elem.addDynamicProperty(prop);\n      this._isDirty = true;\n    }\n\n    function TransformProperty(elem, data, container) {\n      this.elem = elem;\n      this.frameId = -1;\n      this.propType = 'transform';\n      this.data = data;\n      this.v = new Matrix(); // Precalculated matrix with non animated properties\n\n      this.pre = new Matrix();\n      this.appliedTransformations = 0;\n      this.initDynamicPropertyContainer(container || elem);\n\n      if (data.p && data.p.s) {\n        this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n        this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n\n        if (data.p.z) {\n          this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n        }\n      } else {\n        this.p = PropertyFactory.getProp(elem, data.p || {\n          k: [0, 0, 0]\n        }, 1, 0, this);\n      }\n\n      if (data.rx) {\n        this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n        this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n        this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n\n        if (data.or.k[0].ti) {\n          var i;\n          var len = data.or.k.length;\n\n          for (i = 0; i < len; i += 1) {\n            data.or.k[i].to = null;\n            data.or.k[i].ti = null;\n          }\n        }\n\n        this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); // sh Indicates it needs to be capped between -180 and 180\n\n        this.or.sh = true;\n      } else {\n        this.r = PropertyFactory.getProp(elem, data.r || {\n          k: 0\n        }, 0, degToRads, this);\n      }\n\n      if (data.sk) {\n        this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n        this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n      }\n\n      this.a = PropertyFactory.getProp(elem, data.a || {\n        k: [0, 0, 0]\n      }, 1, 0, this);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: [100, 100, 100]\n      }, 1, 0.01, this); // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.\n\n      if (data.o) {\n        this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n      } else {\n        this.o = {\n          _mdf: false,\n          v: 1\n        };\n      }\n\n      this._isDirty = true;\n\n      if (!this.dynamicProperties.length) {\n        this.getValue(true);\n      }\n    }\n\n    TransformProperty.prototype = {\n      applyToMatrix: applyToMatrix,\n      getValue: processKeys,\n      precalculateMatrix: precalculateMatrix,\n      autoOrient: autoOrient\n    };\n    extendPrototype([DynamicPropertyContainer], TransformProperty);\n    TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n    TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n\n    function getTransformProperty(elem, data, container) {\n      return new TransformProperty(elem, data, container);\n    }\n\n    return {\n      getTransformProperty: getTransformProperty\n    };\n  }();\n\n  function RepeaterModifier() {}\n\n  extendPrototype([ShapeModifier], RepeaterModifier);\n\n  RepeaterModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n    this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n    this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n    this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n    this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n    this.data = data;\n\n    if (!this.dynamicProperties.length) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = !!this.dynamicProperties.length;\n    this.pMatrix = new Matrix();\n    this.rMatrix = new Matrix();\n    this.sMatrix = new Matrix();\n    this.tMatrix = new Matrix();\n    this.matrix = new Matrix();\n  };\n\n  RepeaterModifier.prototype.applyTransforms = function (pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n    var dir = inv ? -1 : 1;\n    var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n    var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n    pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n    rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    rMatrix.rotate(-transform.r.v * dir * perc);\n    rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n    sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n    sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n    sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n  };\n\n  RepeaterModifier.prototype.init = function (elem, arr, pos, elemsData) {\n    this.elem = elem;\n    this.arr = arr;\n    this.pos = pos;\n    this.elemsData = elemsData;\n    this._currentCopies = 0;\n    this._elements = [];\n    this._groups = [];\n    this.frameId = -1;\n    this.initDynamicPropertyContainer(elem);\n    this.initModifierProperties(elem, arr[pos]);\n\n    while (pos > 0) {\n      pos -= 1; // this._elements.unshift(arr.splice(pos,1)[0]);\n\n      this._elements.unshift(arr[pos]);\n    }\n\n    if (this.dynamicProperties.length) {\n      this.k = true;\n    } else {\n      this.getValue(true);\n    }\n  };\n\n  RepeaterModifier.prototype.resetElements = function (elements) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._processed = false;\n\n      if (elements[i].ty === 'gr') {\n        this.resetElements(elements[i].it);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.cloneElements = function (elements) {\n    var newElements = JSON.parse(JSON.stringify(elements));\n    this.resetElements(newElements);\n    return newElements;\n  };\n\n  RepeaterModifier.prototype.changeGroupRender = function (elements, renderFlag) {\n    var i;\n    var len = elements.length;\n\n    for (i = 0; i < len; i += 1) {\n      elements[i]._render = renderFlag;\n\n      if (elements[i].ty === 'gr') {\n        this.changeGroupRender(elements[i].it, renderFlag);\n      }\n    }\n  };\n\n  RepeaterModifier.prototype.processShapes = function (_isFirstFrame) {\n    var items;\n    var itemsTransform;\n    var i;\n    var dir;\n    var cont;\n    var hasReloaded = false;\n\n    if (this._mdf || _isFirstFrame) {\n      var copies = Math.ceil(this.c.v);\n\n      if (this._groups.length < copies) {\n        while (this._groups.length < copies) {\n          var group = {\n            it: this.cloneElements(this._elements),\n            ty: 'gr'\n          };\n          group.it.push({\n            a: {\n              a: 0,\n              ix: 1,\n              k: [0, 0]\n            },\n            nm: 'Transform',\n            o: {\n              a: 0,\n              ix: 7,\n              k: 100\n            },\n            p: {\n              a: 0,\n              ix: 2,\n              k: [0, 0]\n            },\n            r: {\n              a: 1,\n              ix: 6,\n              k: [{\n                s: 0,\n                e: 0,\n                t: 0\n              }, {\n                s: 0,\n                e: 0,\n                t: 1\n              }]\n            },\n            s: {\n              a: 0,\n              ix: 3,\n              k: [100, 100]\n            },\n            sa: {\n              a: 0,\n              ix: 5,\n              k: 0\n            },\n            sk: {\n              a: 0,\n              ix: 4,\n              k: 0\n            },\n            ty: 'tr'\n          });\n          this.arr.splice(0, 0, group);\n\n          this._groups.splice(0, 0, group);\n\n          this._currentCopies += 1;\n        }\n\n        this.elem.reloadShapes();\n        hasReloaded = true;\n      }\n\n      cont = 0;\n      var renderFlag;\n\n      for (i = 0; i <= this._groups.length - 1; i += 1) {\n        renderFlag = cont < copies;\n        this._groups[i]._render = renderFlag;\n        this.changeGroupRender(this._groups[i].it, renderFlag);\n\n        if (!renderFlag) {\n          var elems = this.elemsData[i].it;\n          var transformData = elems[elems.length - 1];\n\n          if (transformData.transform.op.v !== 0) {\n            transformData.transform.op._mdf = true;\n            transformData.transform.op.v = 0;\n          } else {\n            transformData.transform.op._mdf = false;\n          }\n        }\n\n        cont += 1;\n      }\n\n      this._currentCopies = copies; /// /\n\n      var offset = this.o.v;\n      var offsetModulo = offset % 1;\n      var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n      var pProps = this.pMatrix.props;\n      var rProps = this.rMatrix.props;\n      var sProps = this.sMatrix.props;\n      this.pMatrix.reset();\n      this.rMatrix.reset();\n      this.sMatrix.reset();\n      this.tMatrix.reset();\n      this.matrix.reset();\n      var iteration = 0;\n\n      if (offset > 0) {\n        while (iteration < roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          iteration += 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n          iteration += offsetModulo;\n        }\n      } else if (offset < 0) {\n        while (iteration > roundOffset) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n          iteration -= 1;\n        }\n\n        if (offsetModulo) {\n          this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n          iteration -= offsetModulo;\n        }\n      }\n\n      i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n      dir = this.data.m === 1 ? 1 : -1;\n      cont = this._currentCopies;\n      var j;\n      var jLen;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        jLen = itemsTransform.length;\n        items[items.length - 1].transform.mProps._mdf = true;\n        items[items.length - 1].transform.op._mdf = true;\n        items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n\n        if (iteration !== 0) {\n          if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n            this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n          }\n\n          this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]);\n          this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]);\n          this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]);\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n\n          this.matrix.reset();\n        } else {\n          this.matrix.reset();\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsTransform[j] = this.matrix.props[j];\n          }\n        }\n\n        iteration += 1;\n        cont -= 1;\n        i += dir;\n      }\n    } else {\n      cont = this._currentCopies;\n      i = 0;\n      dir = 1;\n\n      while (cont) {\n        items = this.elemsData[i].it;\n        itemsTransform = items[items.length - 1].transform.mProps.v.props;\n        items[items.length - 1].transform.mProps._mdf = false;\n        items[items.length - 1].transform.op._mdf = false;\n        cont -= 1;\n        i += dir;\n      }\n    }\n\n    return hasReloaded;\n  };\n\n  RepeaterModifier.prototype.addShape = function () {};\n\n  function RoundCornersModifier() {}\n\n  extendPrototype([ShapeModifier], RoundCornersModifier);\n\n  RoundCornersModifier.prototype.initModifierProperties = function (elem, data) {\n    this.getValue = this.processKeys;\n    this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n    this._isAnimated = !!this.rd.effectsSequence.length;\n  };\n\n  RoundCornersModifier.prototype.processPath = function (path, round) {\n    var clonedPath = shapePool.newElement();\n    clonedPath.c = path.c;\n    var i;\n    var len = path._length;\n    var currentV;\n    var currentI;\n    var currentO;\n    var closerV;\n    var distance;\n    var newPosPerc;\n    var index = 0;\n    var vX;\n    var vY;\n    var oX;\n    var oY;\n    var iX;\n    var iY;\n\n    for (i = 0; i < len; i += 1) {\n      currentV = path.v[i];\n      currentO = path.o[i];\n      currentI = path.i[i];\n\n      if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n        if ((i === 0 || i === len - 1) && !path.c) {\n          clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index);\n          /* clonedPath.v[index] = currentV;\r\n                  clonedPath.o[index] = currentO;\r\n                  clonedPath.i[index] = currentI; */\n\n          index += 1;\n        } else {\n          if (i === 0) {\n            closerV = path.v[len - 1];\n          } else {\n            closerV = path.v[i - 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = iX;\n          iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n          vY = iY;\n          oX = vX - (vX - currentV[0]) * roundCorner;\n          oY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n\n          if (i === len - 1) {\n            closerV = path.v[0];\n          } else {\n            closerV = path.v[i + 1];\n          }\n\n          distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n          newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n          oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n          vX = oX;\n          oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n          vY = oY;\n          iX = vX - (vX - currentV[0]) * roundCorner;\n          iY = vY - (vY - currentV[1]) * roundCorner;\n          clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index);\n          index += 1;\n        }\n      } else {\n        clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index);\n        index += 1;\n      }\n    }\n\n    return clonedPath;\n  };\n\n  RoundCornersModifier.prototype.processShapes = function (_isFirstFrame) {\n    var shapePaths;\n    var i;\n    var len = this.shapes.length;\n    var j;\n    var jLen;\n    var rd = this.rd.v;\n\n    if (rd !== 0) {\n      var shapeData;\n      var localShapeCollection;\n\n      for (i = 0; i < len; i += 1) {\n        shapeData = this.shapes[i];\n        localShapeCollection = shapeData.localShapeCollection;\n\n        if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n          localShapeCollection.releaseShapes();\n          shapeData.shape._mdf = true;\n          shapePaths = shapeData.shape.paths.shapes;\n          jLen = shapeData.shape.paths._length;\n\n          for (j = 0; j < jLen; j += 1) {\n            localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n          }\n        }\n\n        shapeData.shape.paths = shapeData.localShapeCollection;\n      }\n    }\n\n    if (!this.dynamicProperties.length) {\n      this._mdf = false;\n    }\n  };\n\n  function getFontProperties(fontData) {\n    var styles = fontData.fStyle ? fontData.fStyle.split(' ') : [];\n    var fWeight = 'normal';\n    var fStyle = 'normal';\n    var len = styles.length;\n    var styleName;\n\n    for (var i = 0; i < len; i += 1) {\n      styleName = styles[i].toLowerCase();\n\n      switch (styleName) {\n        case 'italic':\n          fStyle = 'italic';\n          break;\n\n        case 'bold':\n          fWeight = '700';\n          break;\n\n        case 'black':\n          fWeight = '900';\n          break;\n\n        case 'medium':\n          fWeight = '500';\n          break;\n\n        case 'regular':\n        case 'normal':\n          fWeight = '400';\n          break;\n\n        case 'light':\n        case 'thin':\n          fWeight = '200';\n          break;\n\n        default:\n          break;\n      }\n    }\n\n    return {\n      style: fStyle,\n      weight: fontData.fWeight || fWeight\n    };\n  }\n\n  var FontManager = function () {\n    var maxWaitingTime = 5000;\n    var emptyChar = {\n      w: 0,\n      size: 0,\n      shapes: [],\n      data: {\n        shapes: []\n      }\n    };\n    var combinedCharacters = []; // Hindi characters\n\n    combinedCharacters = combinedCharacters.concat([2304, 2305, 2306, 2307, 2362, 2363, 2364, 2364, 2366, 2367, 2368, 2369, 2370, 2371, 2372, 2373, 2374, 2375, 2376, 2377, 2378, 2379, 2380, 2381, 2382, 2383, 2387, 2388, 2389, 2390, 2391, 2402, 2403]);\n    var surrogateModifiers = ['d83cdffb', 'd83cdffc', 'd83cdffd', 'd83cdffe', 'd83cdfff'];\n    var zeroWidthJoiner = [65039, 8205];\n\n    function trimFontOptions(font) {\n      var familyArray = font.split(',');\n      var i;\n      var len = familyArray.length;\n      var enabledFamilies = [];\n\n      for (i = 0; i < len; i += 1) {\n        if (familyArray[i] !== 'sans-serif' && familyArray[i] !== 'monospace') {\n          enabledFamilies.push(familyArray[i]);\n        }\n      }\n\n      return enabledFamilies.join(',');\n    }\n\n    function setUpNode(font, family) {\n      var parentNode = createTag('span'); // Node is invisible to screen readers.\n\n      parentNode.setAttribute('aria-hidden', true);\n      parentNode.style.fontFamily = family;\n      var node = createTag('span'); // Characters that vary significantly among different fonts\n\n      node.innerText = 'giItT1WQy@!-/#'; // Visible - so we can measure it - but not on the screen\n\n      parentNode.style.position = 'absolute';\n      parentNode.style.left = '-10000px';\n      parentNode.style.top = '-10000px'; // Large font size makes even subtle changes obvious\n\n      parentNode.style.fontSize = '300px'; // Reset any font properties\n\n      parentNode.style.fontVariant = 'normal';\n      parentNode.style.fontStyle = 'normal';\n      parentNode.style.fontWeight = 'normal';\n      parentNode.style.letterSpacing = '0';\n      parentNode.appendChild(node);\n      document.body.appendChild(parentNode); // Remember width with no applied web font\n\n      var width = node.offsetWidth;\n      node.style.fontFamily = trimFontOptions(font) + ', ' + family;\n      return {\n        node: node,\n        w: width,\n        parent: parentNode\n      };\n    }\n\n    function checkLoadedFonts() {\n      var i;\n      var len = this.fonts.length;\n      var node;\n      var w;\n      var loadedCount = len;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.fonts[i].loaded) {\n          loadedCount -= 1;\n        } else if (this.fonts[i].fOrigin === 'n' || this.fonts[i].origin === 0) {\n          this.fonts[i].loaded = true;\n        } else {\n          node = this.fonts[i].monoCase.node;\n          w = this.fonts[i].monoCase.w;\n\n          if (node.offsetWidth !== w) {\n            loadedCount -= 1;\n            this.fonts[i].loaded = true;\n          } else {\n            node = this.fonts[i].sansCase.node;\n            w = this.fonts[i].sansCase.w;\n\n            if (node.offsetWidth !== w) {\n              loadedCount -= 1;\n              this.fonts[i].loaded = true;\n            }\n          }\n\n          if (this.fonts[i].loaded) {\n            this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n            this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n          }\n        }\n      }\n\n      if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n        setTimeout(this.checkLoadedFontsBinded, 20);\n      } else {\n        setTimeout(this.setIsLoadedBinded, 10);\n      }\n    }\n\n    function createHelper(fontData, def) {\n      var engine = document.body && def ? 'svg' : 'canvas';\n      var helper;\n      var fontProps = getFontProperties(fontData);\n\n      if (engine === 'svg') {\n        var tHelper = createNS('text');\n        tHelper.style.fontSize = '100px'; // tHelper.style.fontFamily = fontData.fFamily;\n\n        tHelper.setAttribute('font-family', fontData.fFamily);\n        tHelper.setAttribute('font-style', fontProps.style);\n        tHelper.setAttribute('font-weight', fontProps.weight);\n        tHelper.textContent = '1';\n\n        if (fontData.fClass) {\n          tHelper.style.fontFamily = 'inherit';\n          tHelper.setAttribute('class', fontData.fClass);\n        } else {\n          tHelper.style.fontFamily = fontData.fFamily;\n        }\n\n        def.appendChild(tHelper);\n        helper = tHelper;\n      } else {\n        var tCanvasHelper = new OffscreenCanvas(500, 500).getContext('2d');\n        tCanvasHelper.font = fontProps.style + ' ' + fontProps.weight + ' 100px ' + fontData.fFamily;\n        helper = tCanvasHelper;\n      }\n\n      function measure(text) {\n        if (engine === 'svg') {\n          helper.textContent = text;\n          return helper.getComputedTextLength();\n        }\n\n        return helper.measureText(text).width;\n      }\n\n      return {\n        measureText: measure\n      };\n    }\n\n    function addFonts(fontData, defs) {\n      if (!fontData) {\n        this.isLoaded = true;\n        return;\n      }\n\n      if (this.chars) {\n        this.isLoaded = true;\n        this.fonts = fontData.list;\n        return;\n      }\n\n      if (!document.body) {\n        this.isLoaded = true;\n        fontData.list.forEach(function (data) {\n          data.helper = createHelper(data);\n          data.cache = {};\n        });\n        this.fonts = fontData.list;\n        return;\n      }\n\n      var fontArr = fontData.list;\n      var i;\n      var len = fontArr.length;\n      var _pendingFonts = len;\n\n      for (i = 0; i < len; i += 1) {\n        var shouldLoadFont = true;\n        var loadedSelector;\n        var j;\n        fontArr[i].loaded = false;\n        fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, 'monospace');\n        fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, 'sans-serif');\n\n        if (!fontArr[i].fPath) {\n          fontArr[i].loaded = true;\n          _pendingFonts -= 1;\n        } else if (fontArr[i].fOrigin === 'p' || fontArr[i].origin === 3) {\n          loadedSelector = document.querySelectorAll('style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]');\n\n          if (loadedSelector.length > 0) {\n            shouldLoadFont = false;\n          }\n\n          if (shouldLoadFont) {\n            var s = createTag('style');\n            s.setAttribute('f-forigin', fontArr[i].fOrigin);\n            s.setAttribute('f-origin', fontArr[i].origin);\n            s.setAttribute('f-family', fontArr[i].fFamily);\n            s.type = 'text/css';\n            s.innerText = '@font-face {font-family: ' + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n            defs.appendChild(s);\n          }\n        } else if (fontArr[i].fOrigin === 'g' || fontArr[i].origin === 1) {\n          loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var l = createTag('link');\n            l.setAttribute('f-forigin', fontArr[i].fOrigin);\n            l.setAttribute('f-origin', fontArr[i].origin);\n            l.type = 'text/css';\n            l.rel = 'stylesheet';\n            l.href = fontArr[i].fPath;\n            document.body.appendChild(l);\n          }\n        } else if (fontArr[i].fOrigin === 't' || fontArr[i].origin === 2) {\n          loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n\n          for (j = 0; j < loadedSelector.length; j += 1) {\n            if (fontArr[i].fPath === loadedSelector[j].src) {\n              // Font is already loaded\n              shouldLoadFont = false;\n            }\n          }\n\n          if (shouldLoadFont) {\n            var sc = createTag('link');\n            sc.setAttribute('f-forigin', fontArr[i].fOrigin);\n            sc.setAttribute('f-origin', fontArr[i].origin);\n            sc.setAttribute('rel', 'stylesheet');\n            sc.setAttribute('href', fontArr[i].fPath);\n            defs.appendChild(sc);\n          }\n        }\n\n        fontArr[i].helper = createHelper(fontArr[i], defs);\n        fontArr[i].cache = {};\n        this.fonts.push(fontArr[i]);\n      }\n\n      if (_pendingFonts === 0) {\n        this.isLoaded = true;\n      } else {\n        // On some cases even if the font is loaded, it won't load correctly when measuring text on canvas.\n        // Adding this timeout seems to fix it\n        setTimeout(this.checkLoadedFonts.bind(this), 100);\n      }\n    }\n\n    function addChars(chars) {\n      if (!chars) {\n        return;\n      }\n\n      if (!this.chars) {\n        this.chars = [];\n      }\n\n      var i;\n      var len = chars.length;\n      var j;\n      var jLen = this.chars.length;\n      var found;\n\n      for (i = 0; i < len; i += 1) {\n        j = 0;\n        found = false;\n\n        while (j < jLen) {\n          if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n            found = true;\n          }\n\n          j += 1;\n        }\n\n        if (!found) {\n          this.chars.push(chars[i]);\n          jLen += 1;\n        }\n      }\n    }\n\n    function getCharData(_char, style, font) {\n      var i = 0;\n      var len = this.chars.length;\n\n      while (i < len) {\n        if (this.chars[i].ch === _char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n          return this.chars[i];\n        }\n\n        i += 1;\n      }\n\n      if ((typeof _char === 'string' && _char.charCodeAt(0) !== 13 || !_char) && console && console.warn // eslint-disable-line no-console\n      && !this._warned) {\n        this._warned = true;\n        console.warn('Missing character from exported characters list: ', _char, style, font); // eslint-disable-line no-console\n      }\n\n      return emptyChar;\n    }\n\n    function measureText(_char2, fontName, size) {\n      var fontData = this.getFontByName(fontName);\n\n      var index = _char2.charCodeAt(0);\n\n      if (!fontData.cache[index + 1]) {\n        var tHelper = fontData.helper;\n\n        if (_char2 === ' ') {\n          var doubleSize = tHelper.measureText('|' + _char2 + '|');\n          var singleSize = tHelper.measureText('||');\n          fontData.cache[index + 1] = (doubleSize - singleSize) / 100;\n        } else {\n          fontData.cache[index + 1] = tHelper.measureText(_char2) / 100;\n        }\n      }\n\n      return fontData.cache[index + 1] * size;\n    }\n\n    function getFontByName(name) {\n      var i = 0;\n      var len = this.fonts.length;\n\n      while (i < len) {\n        if (this.fonts[i].fName === name) {\n          return this.fonts[i];\n        }\n\n        i += 1;\n      }\n\n      return this.fonts[0];\n    }\n\n    function isModifier(firstCharCode, secondCharCode) {\n      var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n      return surrogateModifiers.indexOf(sum) !== -1;\n    }\n\n    function isZeroWidthJoiner(firstCharCode, secondCharCode) {\n      if (!secondCharCode) {\n        return firstCharCode === zeroWidthJoiner[1];\n      }\n\n      return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\n    }\n\n    function isCombinedCharacter(_char3) {\n      return combinedCharacters.indexOf(_char3) !== -1;\n    }\n\n    function setIsLoaded() {\n      this.isLoaded = true;\n    }\n\n    var Font = function Font() {\n      this.fonts = [];\n      this.chars = null;\n      this.typekitLoaded = 0;\n      this.isLoaded = false;\n      this._warned = false;\n      this.initTime = Date.now();\n      this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n      this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n    };\n\n    Font.isModifier = isModifier;\n    Font.isZeroWidthJoiner = isZeroWidthJoiner;\n    Font.isCombinedCharacter = isCombinedCharacter;\n    var fontPrototype = {\n      addChars: addChars,\n      addFonts: addFonts,\n      getCharData: getCharData,\n      getFontByName: getFontByName,\n      measureText: measureText,\n      checkLoadedFonts: checkLoadedFonts,\n      setIsLoaded: setIsLoaded\n    };\n    Font.prototype = fontPrototype;\n    return Font;\n  }();\n\n  function RenderableElement() {}\n\n  RenderableElement.prototype = {\n    initRenderable: function initRenderable() {\n      // layer's visibility related to inpoint and outpoint. Rename isVisible to isInRange\n      this.isInRange = false; // layer's display state\n\n      this.hidden = false; // If layer's transparency equals 0, it can be hidden\n\n      this.isTransparent = false; // list of animated components\n\n      this.renderableComponents = [];\n    },\n    addRenderableComponent: function addRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) === -1) {\n        this.renderableComponents.push(component);\n      }\n    },\n    removeRenderableComponent: function removeRenderableComponent(component) {\n      if (this.renderableComponents.indexOf(component) !== -1) {\n        this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n      }\n    },\n    prepareRenderableFrame: function prepareRenderableFrame(num) {\n      this.checkLayerLimits(num);\n    },\n    checkTransparency: function checkTransparency() {\n      if (this.finalTransform.mProp.o.v <= 0) {\n        if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n          this.isTransparent = true;\n          this.hide();\n        }\n      } else if (this.isTransparent) {\n        this.isTransparent = false;\n        this.show();\n      }\n    },\n\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       *\r\n       */\n    checkLayerLimits: function checkLayerLimits(num) {\n      if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n        if (this.isInRange !== true) {\n          this.globalData._mdf = true;\n          this._mdf = true;\n          this.isInRange = true;\n          this.show();\n        }\n      } else if (this.isInRange !== false) {\n        this.globalData._mdf = true;\n        this.isInRange = false;\n        this.hide();\n      }\n    },\n    renderRenderable: function renderRenderable() {\n      var i;\n      var len = this.renderableComponents.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderableComponents[i].renderFrame(this._isFirstFrame);\n      }\n      /* this.maskManager.renderFrame(this.finalTransform.mat);\r\n          this.renderableEffectsManager.renderFrame(this._isFirstFrame); */\n\n    },\n    sourceRectAtTime: function sourceRectAtTime() {\n      return {\n        top: 0,\n        left: 0,\n        width: 100,\n        height: 100\n      };\n    },\n    getLayerSize: function getLayerSize() {\n      if (this.data.ty === 5) {\n        return {\n          w: this.data.textData.width,\n          h: this.data.textData.height\n        };\n      }\n\n      return {\n        w: this.data.width,\n        h: this.data.height\n      };\n    }\n  };\n\n  var MaskManagerInterface = function () {\n    function MaskInterface(mask, data) {\n      this._mask = mask;\n      this._data = data;\n    }\n\n    Object.defineProperty(MaskInterface.prototype, 'maskPath', {\n      get: function get() {\n        if (this._mask.prop.k) {\n          this._mask.prop.getValue();\n        }\n\n        return this._mask.prop;\n      }\n    });\n    Object.defineProperty(MaskInterface.prototype, 'maskOpacity', {\n      get: function get() {\n        if (this._mask.op.k) {\n          this._mask.op.getValue();\n        }\n\n        return this._mask.op.v * 100;\n      }\n    });\n\n    var MaskManager = function MaskManager(maskManager) {\n      var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n\n      var i;\n      var len = maskManager.viewData.length;\n\n      for (i = 0; i < len; i += 1) {\n        _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n      }\n\n      var maskFunction = function maskFunction(name) {\n        i = 0;\n\n        while (i < len) {\n          if (maskManager.masksProperties[i].nm === name) {\n            return _masksInterfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      };\n\n      return maskFunction;\n    };\n\n    return MaskManager;\n  }();\n\n  var ExpressionPropertyInterface = function () {\n    var defaultUnidimensionalValue = {\n      pv: 0,\n      v: 0,\n      mult: 1\n    };\n    var defaultMultidimensionalValue = {\n      pv: [0, 0, 0],\n      v: [0, 0, 0],\n      mult: 1\n    };\n\n    function completeProperty(expressionValue, property, type) {\n      Object.defineProperty(expressionValue, 'velocity', {\n        get: function get() {\n          return property.getVelocityAtTime(property.comp.currentFrame);\n        }\n      });\n      expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n\n      expressionValue.key = function (pos) {\n        if (!expressionValue.numKeys) {\n          return 0;\n        }\n\n        var value = '';\n\n        if ('s' in property.keyframes[pos - 1]) {\n          value = property.keyframes[pos - 1].s;\n        } else if ('e' in property.keyframes[pos - 2]) {\n          value = property.keyframes[pos - 2].e;\n        } else {\n          value = property.keyframes[pos - 2].s;\n        }\n\n        var valueProp = type === 'unidimensional' ? new Number(value) : Object.assign({}, value); // eslint-disable-line no-new-wrappers\n\n        valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n        valueProp.value = type === 'unidimensional' ? value[0] : value;\n        return valueProp;\n      };\n\n      expressionValue.valueAtTime = property.getValueAtTime;\n      expressionValue.speedAtTime = property.getSpeedAtTime;\n      expressionValue.velocityAtTime = property.getVelocityAtTime;\n      expressionValue.propertyGroup = property.propertyGroup;\n    }\n\n    function UnidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultUnidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var val = property.pv * mult;\n      var expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n      expressionValue.value = val;\n      completeProperty(expressionValue, property, 'unidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        val = property.v * mult;\n\n        if (expressionValue.value !== val) {\n          expressionValue = new Number(val); // eslint-disable-line no-new-wrappers\n\n          expressionValue.value = val;\n          completeProperty(expressionValue, property, 'unidimensional');\n        }\n\n        return expressionValue;\n      };\n    }\n\n    function MultidimensionalPropertyInterface(property) {\n      if (!property || !('pv' in property)) {\n        property = defaultMultidimensionalValue;\n      }\n\n      var mult = 1 / property.mult;\n      var len = property.data && property.data.l || property.pv.length;\n      var expressionValue = createTypedArray('float32', len);\n      var arrValue = createTypedArray('float32', len);\n      expressionValue.value = arrValue;\n      completeProperty(expressionValue, property, 'multidimensional');\n      return function () {\n        if (property.k) {\n          property.getValue();\n        }\n\n        for (var i = 0; i < len; i += 1) {\n          arrValue[i] = property.v[i] * mult;\n          expressionValue[i] = arrValue[i];\n        }\n\n        return expressionValue;\n      };\n    } // TODO: try to avoid using this getter\n\n\n    function defaultGetter() {\n      return defaultUnidimensionalValue;\n    }\n\n    return function (property) {\n      if (!property) {\n        return defaultGetter;\n      }\n\n      if (property.propType === 'unidimensional') {\n        return UnidimensionalPropertyInterface(property);\n      }\n\n      return MultidimensionalPropertyInterface(property);\n    };\n  }();\n\n  var TransformExpressionInterface = function () {\n    return function (transform) {\n      function _thisFunction(name) {\n        switch (name) {\n          case 'scale':\n          case 'Scale':\n          case 'ADBE Scale':\n          case 6:\n            return _thisFunction.scale;\n\n          case 'rotation':\n          case 'Rotation':\n          case 'ADBE Rotation':\n          case 'ADBE Rotate Z':\n          case 10:\n            return _thisFunction.rotation;\n\n          case 'ADBE Rotate X':\n            return _thisFunction.xRotation;\n\n          case 'ADBE Rotate Y':\n            return _thisFunction.yRotation;\n\n          case 'position':\n          case 'Position':\n          case 'ADBE Position':\n          case 2:\n            return _thisFunction.position;\n\n          case 'ADBE Position_0':\n            return _thisFunction.xPosition;\n\n          case 'ADBE Position_1':\n            return _thisFunction.yPosition;\n\n          case 'ADBE Position_2':\n            return _thisFunction.zPosition;\n\n          case 'anchorPoint':\n          case 'AnchorPoint':\n          case 'Anchor Point':\n          case 'ADBE AnchorPoint':\n          case 1:\n            return _thisFunction.anchorPoint;\n\n          case 'opacity':\n          case 'Opacity':\n          case 11:\n            return _thisFunction.opacity;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'rotation', {\n        get: ExpressionPropertyInterface(transform.r || transform.rz)\n      });\n      Object.defineProperty(_thisFunction, 'zRotation', {\n        get: ExpressionPropertyInterface(transform.rz || transform.r)\n      });\n      Object.defineProperty(_thisFunction, 'xRotation', {\n        get: ExpressionPropertyInterface(transform.rx)\n      });\n      Object.defineProperty(_thisFunction, 'yRotation', {\n        get: ExpressionPropertyInterface(transform.ry)\n      });\n      Object.defineProperty(_thisFunction, 'scale', {\n        get: ExpressionPropertyInterface(transform.s)\n      });\n\n      var _px;\n\n      var _py;\n\n      var _pz;\n\n      var _transformFactory;\n\n      if (transform.p) {\n        _transformFactory = ExpressionPropertyInterface(transform.p);\n      } else {\n        _px = ExpressionPropertyInterface(transform.px);\n        _py = ExpressionPropertyInterface(transform.py);\n\n        if (transform.pz) {\n          _pz = ExpressionPropertyInterface(transform.pz);\n        }\n      }\n\n      Object.defineProperty(_thisFunction, 'position', {\n        get: function get() {\n          if (transform.p) {\n            return _transformFactory();\n          }\n\n          return [_px(), _py(), _pz ? _pz() : 0];\n        }\n      });\n      Object.defineProperty(_thisFunction, 'xPosition', {\n        get: ExpressionPropertyInterface(transform.px)\n      });\n      Object.defineProperty(_thisFunction, 'yPosition', {\n        get: ExpressionPropertyInterface(transform.py)\n      });\n      Object.defineProperty(_thisFunction, 'zPosition', {\n        get: ExpressionPropertyInterface(transform.pz)\n      });\n      Object.defineProperty(_thisFunction, 'anchorPoint', {\n        get: ExpressionPropertyInterface(transform.a)\n      });\n      Object.defineProperty(_thisFunction, 'opacity', {\n        get: ExpressionPropertyInterface(transform.o)\n      });\n      Object.defineProperty(_thisFunction, 'skew', {\n        get: ExpressionPropertyInterface(transform.sk)\n      });\n      Object.defineProperty(_thisFunction, 'skewAxis', {\n        get: ExpressionPropertyInterface(transform.sa)\n      });\n      Object.defineProperty(_thisFunction, 'orientation', {\n        get: ExpressionPropertyInterface(transform.or)\n      });\n      return _thisFunction;\n    };\n  }();\n\n  var LayerExpressionInterface = function () {\n    function getMatrix(time) {\n      var toWorldMat = new Matrix();\n\n      if (time !== undefined) {\n        var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n\n        propMatrix.clone(toWorldMat);\n      } else {\n        var transformMat = this._elem.finalTransform.mProp;\n        transformMat.applyToMatrix(toWorldMat);\n      }\n\n      return toWorldMat;\n    }\n\n    function toWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function toWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.applyPoint(toWorldMat, arr);\n    }\n\n    function fromWorldVec(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      toWorldMat.props[12] = 0;\n      toWorldMat.props[13] = 0;\n      toWorldMat.props[14] = 0;\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function fromWorld(arr, time) {\n      var toWorldMat = this.getMatrix(time);\n      return this.invertPoint(toWorldMat, arr);\n    }\n\n    function applyPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n    }\n\n    function invertPoint(matrix, arr) {\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n        }\n      }\n\n      return matrix.inversePoint(arr);\n    }\n\n    function fromComp(arr) {\n      var toWorldMat = new Matrix();\n      toWorldMat.reset();\n\n      this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n\n      if (this._elem.hierarchy && this._elem.hierarchy.length) {\n        var i;\n        var len = this._elem.hierarchy.length;\n\n        for (i = 0; i < len; i += 1) {\n          this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n        }\n\n        return toWorldMat.inversePoint(arr);\n      }\n\n      return toWorldMat.inversePoint(arr);\n    }\n\n    function sampleImage() {\n      return [1, 1, 1, 1];\n    }\n\n    return function (elem) {\n      var transformInterface;\n\n      function _registerMaskInterface(maskManager) {\n        _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n      }\n\n      function _registerEffectsInterface(effects) {\n        _thisLayerFunction.effect = effects;\n      }\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Root Vectors Group':\n          case 'Contents':\n          case 2:\n            return _thisLayerFunction.shapeInterface;\n\n          case 1:\n          case 6:\n          case 'Transform':\n          case 'transform':\n          case 'ADBE Transform Group':\n            return transformInterface;\n\n          case 4:\n          case 'ADBE Effect Parade':\n          case 'effects':\n          case 'Effects':\n            return _thisLayerFunction.effect;\n\n          case 'ADBE Text Properties':\n            return _thisLayerFunction.textInterface;\n\n          default:\n            return null;\n        }\n      }\n\n      _thisLayerFunction.getMatrix = getMatrix;\n      _thisLayerFunction.invertPoint = invertPoint;\n      _thisLayerFunction.applyPoint = applyPoint;\n      _thisLayerFunction.toWorld = toWorld;\n      _thisLayerFunction.toWorldVec = toWorldVec;\n      _thisLayerFunction.fromWorld = fromWorld;\n      _thisLayerFunction.fromWorldVec = fromWorldVec;\n      _thisLayerFunction.toComp = toWorld;\n      _thisLayerFunction.fromComp = fromComp;\n      _thisLayerFunction.sampleImage = sampleImage;\n      _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n      _thisLayerFunction._elem = elem;\n      transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n      var anchorPointDescriptor = getDescriptor(transformInterface, 'anchorPoint');\n      Object.defineProperties(_thisLayerFunction, {\n        hasParent: {\n          get: function get() {\n            return elem.hierarchy.length;\n          }\n        },\n        parent: {\n          get: function get() {\n            return elem.hierarchy[0].layerInterface;\n          }\n        },\n        rotation: getDescriptor(transformInterface, 'rotation'),\n        scale: getDescriptor(transformInterface, 'scale'),\n        position: getDescriptor(transformInterface, 'position'),\n        opacity: getDescriptor(transformInterface, 'opacity'),\n        anchorPoint: anchorPointDescriptor,\n        anchor_point: anchorPointDescriptor,\n        transform: {\n          get: function get() {\n            return transformInterface;\n          }\n        },\n        active: {\n          get: function get() {\n            return elem.isInRange;\n          }\n        }\n      });\n      _thisLayerFunction.startTime = elem.data.st;\n      _thisLayerFunction.index = elem.data.ind;\n      _thisLayerFunction.source = elem.data.refId;\n      _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n      _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n      _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      _thisLayerFunction._name = elem.data.nm;\n      _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n      _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n      return _thisLayerFunction;\n    };\n  }();\n\n  var propertyGroupFactory = function () {\n    return function (interfaceFunction, parentPropertyGroup) {\n      return function (val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return parentPropertyGroup(val - 1);\n      };\n    };\n  }();\n\n  var PropertyInterface = function () {\n    return function (propertyName, propertyGroup) {\n      var interfaceFunction = {\n        _name: propertyName\n      };\n\n      function _propertyGroup(val) {\n        val = val === undefined ? 1 : val;\n\n        if (val <= 0) {\n          return interfaceFunction;\n        }\n\n        return propertyGroup(val - 1);\n      }\n\n      return _propertyGroup;\n    };\n  }();\n\n  var EffectsExpressionInterface = function () {\n    var ob = {\n      createEffectsInterface: createEffectsInterface\n    };\n\n    function createEffectsInterface(elem, propertyGroup) {\n      if (elem.effectsManager) {\n        var effectElements = [];\n        var effectsData = elem.data.ef;\n        var i;\n        var len = elem.effectsManager.effectElements.length;\n\n        for (i = 0; i < len; i += 1) {\n          effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem));\n        }\n\n        var effects = elem.data.ef || [];\n\n        var groupInterface = function groupInterface(name) {\n          i = 0;\n          len = effects.length;\n\n          while (i < len) {\n            if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n              return effectElements[i];\n            }\n\n            i += 1;\n          }\n\n          return null;\n        };\n\n        Object.defineProperty(groupInterface, 'numProperties', {\n          get: function get() {\n            return effects.length;\n          }\n        });\n        return groupInterface;\n      }\n\n      return null;\n    }\n\n    function createGroupInterface(data, elements, propertyGroup, elem) {\n      function groupInterface(name) {\n        var effects = data.ef;\n        var i = 0;\n        var len = effects.length;\n\n        while (i < len) {\n          if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n            if (effects[i].ty === 5) {\n              return effectElements[i];\n            }\n\n            return effectElements[i]();\n          }\n\n          i += 1;\n        }\n\n        throw new Error();\n      }\n\n      var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n\n      var effectElements = [];\n      var i;\n      var len = data.ef.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (data.ef[i].ty === 5) {\n          effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem));\n        } else {\n          effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n        }\n      }\n\n      if (data.mn === 'ADBE Color Control') {\n        Object.defineProperty(groupInterface, 'color', {\n          get: function get() {\n            return effectElements[0]();\n          }\n        });\n      }\n\n      Object.defineProperties(groupInterface, {\n        numProperties: {\n          get: function get() {\n            return data.np;\n          }\n        },\n        _name: {\n          value: data.nm\n        },\n        propertyGroup: {\n          value: _propertyGroup\n        }\n      });\n      groupInterface.enabled = data.en !== 0;\n      groupInterface.active = groupInterface.enabled;\n      return groupInterface;\n    }\n\n    function createValueInterface(element, type, elem, propertyGroup) {\n      var expressionProperty = ExpressionPropertyInterface(element.p);\n\n      function interfaceFunction() {\n        if (type === 10) {\n          return elem.comp.compInterface(element.p.v);\n        }\n\n        return expressionProperty();\n      }\n\n      if (element.p.setGroupProperty) {\n        element.p.setGroupProperty(PropertyInterface('', propertyGroup));\n      }\n\n      return interfaceFunction;\n    }\n\n    return ob;\n  }();\n\n  var CompExpressionInterface = function () {\n    return function (comp) {\n      function _thisLayerFunction(name) {\n        var i = 0;\n        var len = comp.layers.length;\n\n        while (i < len) {\n          if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n            return comp.elements[i].layerInterface;\n          }\n\n          i += 1;\n        }\n\n        return null; // return {active:false};\n      }\n\n      Object.defineProperty(_thisLayerFunction, '_name', {\n        value: comp.data.nm\n      });\n      _thisLayerFunction.layer = _thisLayerFunction;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n      _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n      _thisLayerFunction.pixelAspect = 1;\n      _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n      _thisLayerFunction.displayStartTime = 0;\n      _thisLayerFunction.numLayers = comp.layers.length;\n      return _thisLayerFunction;\n    };\n  }();\n\n  var ShapePathInterface = function () {\n    return function pathInterfaceFactory(shape, view, propertyGroup) {\n      var prop = view.sh;\n\n      function interfaceFunction(val) {\n        if (val === 'Shape' || val === 'shape' || val === 'Path' || val === 'path' || val === 'ADBE Vector Shape' || val === 2) {\n          return interfaceFunction.path;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      prop.setGroupProperty(PropertyInterface('Path', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        path: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        shape: {\n          get: function get() {\n            if (prop.k) {\n              prop.getValue();\n            }\n\n            return prop;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        ix: {\n          value: shape.ix\n        },\n        propertyIndex: {\n          value: shape.ix\n        },\n        mn: {\n          value: shape.mn\n        },\n        propertyGroup: {\n          value: propertyGroup\n        }\n      });\n      return interfaceFunction;\n    };\n  }();\n\n  var ShapeExpressionInterface = function () {\n    function iterateElements(shapes, view, propertyGroup) {\n      var arr = [];\n      var i;\n      var len = shapes ? shapes.length : 0;\n\n      for (i = 0; i < len; i += 1) {\n        if (shapes[i].ty === 'gr') {\n          arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'fl') {\n          arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'st') {\n          arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tm') {\n          arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'tr') {// arr.push(transformInterfaceFactory(shapes[i],view[i],propertyGroup));\n        } else if (shapes[i].ty === 'el') {\n          arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sr') {\n          arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'sh') {\n          arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rc') {\n          arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rd') {\n          arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'rp') {\n          arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else if (shapes[i].ty === 'gf') {\n          arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n        } else {\n          arr.push(defaultInterfaceFactory(shapes[i], view[i], propertyGroup));\n        }\n      }\n\n      return arr;\n    }\n\n    function contentsInterfaceFactory(shape, view, propertyGroup) {\n      var interfaces;\n\n      var interfaceFunction = function _interfaceFunction(value) {\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        if (typeof value === 'number') {\n          return interfaces[value - 1];\n        }\n\n        return null;\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n      interfaceFunction.numProperties = interfaces.length;\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.transform = transformInterface;\n      interfaceFunction.propertyIndex = shape.cix;\n      interfaceFunction._name = shape.nm;\n      return interfaceFunction;\n    }\n\n    function groupInterfaceFactory(shape, view, propertyGroup) {\n      var interfaceFunction = function _interfaceFunction(value) {\n        switch (value) {\n          case 'ADBE Vectors Group':\n          case 'Contents':\n          case 2:\n            return interfaceFunction.content;\n          // Not necessary for now. Keeping them here in case a new case appears\n          // case 'ADBE Vector Transform Group':\n          // case 3:\n\n          default:\n            return interfaceFunction.transform;\n        }\n      };\n\n      interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n      var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n      var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup);\n      interfaceFunction.content = content;\n      interfaceFunction.transform = transformInterface;\n      Object.defineProperty(interfaceFunction, '_name', {\n        get: function get() {\n          return shape.nm;\n        }\n      }); // interfaceFunction.content = interfaceFunction;\n\n      interfaceFunction.numProperties = shape.np;\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.nm = shape.nm;\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function fillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === 'Start Point' || val === 'start point') {\n          return interfaceFunction.startPoint;\n        }\n\n        if (val === 'End Point' || val === 'end point') {\n          return interfaceFunction.endPoint;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        startPoint: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        endPoint: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        type: {\n          get: function get() {\n            return 'a';\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.s.setGroupProperty(PropertyInterface('Start Point', propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End Point', propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', propertyGroup));\n      return interfaceFunction;\n    }\n\n    function defaultInterfaceFactory() {\n      function interfaceFunction() {\n        return null;\n      }\n\n      return interfaceFunction;\n    }\n\n    function strokeInterfaceFactory(shape, view, propertyGroup) {\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n\n      function addPropertyToDashOb(i) {\n        Object.defineProperty(dashOb, shape.d[i].nm, {\n          get: ExpressionPropertyInterface(view.d.dataProps[i].p)\n        });\n      }\n\n      var i;\n      var len = shape.d ? shape.d.length : 0;\n      var dashOb = {};\n\n      for (i = 0; i < len; i += 1) {\n        addPropertyToDashOb(i);\n        view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n      }\n\n      function interfaceFunction(val) {\n        if (val === 'Color' || val === 'color') {\n          return interfaceFunction.color;\n        }\n\n        if (val === 'Opacity' || val === 'opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (val === 'Stroke Width' || val === 'stroke width') {\n          return interfaceFunction.strokeWidth;\n        }\n\n        return null;\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        color: {\n          get: ExpressionPropertyInterface(view.c)\n        },\n        opacity: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        strokeWidth: {\n          get: ExpressionPropertyInterface(view.w)\n        },\n        dash: {\n          get: function get() {\n            return dashOb;\n          }\n        },\n        _name: {\n          value: shape.nm\n        },\n        mn: {\n          value: shape.mn\n        }\n      });\n      view.c.setGroupProperty(PropertyInterface('Color', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.w.setGroupProperty(PropertyInterface('Stroke Width', _propertyGroup));\n      return interfaceFunction;\n    }\n\n    function trimInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(val) {\n        if (val === shape.e.ix || val === 'End' || val === 'end') {\n          return interfaceFunction.end;\n        }\n\n        if (val === shape.s.ix) {\n          return interfaceFunction.start;\n        }\n\n        if (val === shape.o.ix) {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      view.s.setGroupProperty(PropertyInterface('Start', _propertyGroup));\n      view.e.setGroupProperty(PropertyInterface('End', _propertyGroup));\n      view.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      interfaceFunction.propertyIndex = shape.ix;\n      interfaceFunction.propertyGroup = propertyGroup;\n      Object.defineProperties(interfaceFunction, {\n        start: {\n          get: ExpressionPropertyInterface(view.s)\n        },\n        end: {\n          get: ExpressionPropertyInterface(view.e)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(view.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function transformInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.a.ix === value || value === 'Anchor Point') {\n          return interfaceFunction.anchorPoint;\n        }\n\n        if (shape.o.ix === value || value === 'Opacity') {\n          return interfaceFunction.opacity;\n        }\n\n        if (shape.p.ix === value || value === 'Position') {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value || value === 'Rotation' || value === 'ADBE Vector Rotation') {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.s.ix === value || value === 'Scale') {\n          return interfaceFunction.scale;\n        }\n\n        if (shape.sk && shape.sk.ix === value || value === 'Skew') {\n          return interfaceFunction.skew;\n        }\n\n        if (shape.sa && shape.sa.ix === value || value === 'Skew Axis') {\n          return interfaceFunction.skewAxis;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      view.transform.mProps.o.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      view.transform.mProps.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      view.transform.mProps.a.setGroupProperty(PropertyInterface('Anchor Point', _propertyGroup));\n      view.transform.mProps.s.setGroupProperty(PropertyInterface('Scale', _propertyGroup));\n      view.transform.mProps.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (view.transform.mProps.sk) {\n        view.transform.mProps.sk.setGroupProperty(PropertyInterface('Skew', _propertyGroup));\n        view.transform.mProps.sa.setGroupProperty(PropertyInterface('Skew Angle', _propertyGroup));\n      }\n\n      view.transform.op.setGroupProperty(PropertyInterface('Opacity', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        opacity: {\n          get: ExpressionPropertyInterface(view.transform.mProps.o)\n        },\n        position: {\n          get: ExpressionPropertyInterface(view.transform.mProps.p)\n        },\n        anchorPoint: {\n          get: ExpressionPropertyInterface(view.transform.mProps.a)\n        },\n        scale: {\n          get: ExpressionPropertyInterface(view.transform.mProps.s)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(view.transform.mProps.r)\n        },\n        skew: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sk)\n        },\n        skewAxis: {\n          get: ExpressionPropertyInterface(view.transform.mProps.sa)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.ty = 'tr';\n      interfaceFunction.mn = shape.mn;\n      interfaceFunction.propertyGroup = propertyGroup;\n      return interfaceFunction;\n    }\n\n    function ellipseInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.s.ix === value) {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      interfaceFunction.propertyIndex = shape.ix;\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function starInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.rotation;\n        }\n\n        if (shape.pt.ix === value) {\n          return interfaceFunction.points;\n        }\n\n        if (shape.or.ix === value || value === 'ADBE Vector Star Outer Radius') {\n          return interfaceFunction.outerRadius;\n        }\n\n        if (shape.os.ix === value) {\n          return interfaceFunction.outerRoundness;\n        }\n\n        if (shape.ir && (shape.ir.ix === value || value === 'ADBE Vector Star Inner Radius')) {\n          return interfaceFunction.innerRadius;\n        }\n\n        if (shape.is && shape.is.ix === value) {\n          return interfaceFunction.innerRoundness;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.or.setGroupProperty(PropertyInterface('Outer Radius', _propertyGroup));\n      prop.os.setGroupProperty(PropertyInterface('Outer Roundness', _propertyGroup));\n      prop.pt.setGroupProperty(PropertyInterface('Points', _propertyGroup));\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n\n      if (shape.ir) {\n        prop.ir.setGroupProperty(PropertyInterface('Inner Radius', _propertyGroup));\n        prop.is.setGroupProperty(PropertyInterface('Inner Roundness', _propertyGroup));\n      }\n\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        rotation: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        points: {\n          get: ExpressionPropertyInterface(prop.pt)\n        },\n        outerRadius: {\n          get: ExpressionPropertyInterface(prop.or)\n        },\n        outerRoundness: {\n          get: ExpressionPropertyInterface(prop.os)\n        },\n        innerRadius: {\n          get: ExpressionPropertyInterface(prop.ir)\n        },\n        innerRoundness: {\n          get: ExpressionPropertyInterface(prop.is)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function rectInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.p.ix === value) {\n          return interfaceFunction.position;\n        }\n\n        if (shape.r.ix === value) {\n          return interfaceFunction.roundness;\n        }\n\n        if (shape.s.ix === value || value === 'Size' || value === 'ADBE Vector Rect Size') {\n          return interfaceFunction.size;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view.sh.ty === 'tm' ? view.sh.prop : view.sh;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.p.setGroupProperty(PropertyInterface('Position', _propertyGroup));\n      prop.s.setGroupProperty(PropertyInterface('Size', _propertyGroup));\n      prop.r.setGroupProperty(PropertyInterface('Rotation', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        position: {\n          get: ExpressionPropertyInterface(prop.p)\n        },\n        roundness: {\n          get: ExpressionPropertyInterface(prop.r)\n        },\n        size: {\n          get: ExpressionPropertyInterface(prop.s)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function roundedInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.r.ix === value || value === 'Round Corners 1') {\n          return interfaceFunction.radius;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.rd.setGroupProperty(PropertyInterface('Radius', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        radius: {\n          get: ExpressionPropertyInterface(prop.rd)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    function repeaterInterfaceFactory(shape, view, propertyGroup) {\n      function interfaceFunction(value) {\n        if (shape.c.ix === value || value === 'Copies') {\n          return interfaceFunction.copies;\n        }\n\n        if (shape.o.ix === value || value === 'Offset') {\n          return interfaceFunction.offset;\n        }\n\n        return null;\n      }\n\n      var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n\n      var prop = view;\n      interfaceFunction.propertyIndex = shape.ix;\n      prop.c.setGroupProperty(PropertyInterface('Copies', _propertyGroup));\n      prop.o.setGroupProperty(PropertyInterface('Offset', _propertyGroup));\n      Object.defineProperties(interfaceFunction, {\n        copies: {\n          get: ExpressionPropertyInterface(prop.c)\n        },\n        offset: {\n          get: ExpressionPropertyInterface(prop.o)\n        },\n        _name: {\n          value: shape.nm\n        }\n      });\n      interfaceFunction.mn = shape.mn;\n      return interfaceFunction;\n    }\n\n    return function (shapes, view, propertyGroup) {\n      var interfaces;\n\n      function _interfaceFunction(value) {\n        if (typeof value === 'number') {\n          value = value === undefined ? 1 : value;\n\n          if (value === 0) {\n            return propertyGroup;\n          }\n\n          return interfaces[value - 1];\n        }\n\n        var i = 0;\n        var len = interfaces.length;\n\n        while (i < len) {\n          if (interfaces[i]._name === value) {\n            return interfaces[i];\n          }\n\n          i += 1;\n        }\n\n        return null;\n      }\n\n      function parentGroupWrapper() {\n        return propertyGroup;\n      }\n\n      _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n      interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n      _interfaceFunction.numProperties = interfaces.length;\n      _interfaceFunction._name = 'Contents';\n      return _interfaceFunction;\n    };\n  }();\n\n  var TextExpressionInterface = function () {\n    return function (elem) {\n      var _prevValue;\n\n      var _sourceText;\n\n      function _thisLayerFunction(name) {\n        switch (name) {\n          case 'ADBE Text Document':\n            return _thisLayerFunction.sourceText;\n\n          default:\n            return null;\n        }\n      }\n\n      Object.defineProperty(_thisLayerFunction, 'sourceText', {\n        get: function get() {\n          elem.textProperty.getValue();\n          var stringValue = elem.textProperty.currentData.t;\n\n          if (stringValue !== _prevValue) {\n            elem.textProperty.currentData.t = _prevValue;\n            _sourceText = new String(stringValue); // eslint-disable-line no-new-wrappers\n            // If stringValue is an empty string, eval returns undefined, so it has to be returned as a String primitive\n\n            _sourceText.value = stringValue || new String(stringValue); // eslint-disable-line no-new-wrappers\n          }\n\n          return _sourceText;\n        }\n      });\n      return _thisLayerFunction;\n    };\n  }();\n\n  var getBlendMode = function () {\n    var blendModeEnums = {\n      0: 'source-over',\n      1: 'multiply',\n      2: 'screen',\n      3: 'overlay',\n      4: 'darken',\n      5: 'lighten',\n      6: 'color-dodge',\n      7: 'color-burn',\n      8: 'hard-light',\n      9: 'soft-light',\n      10: 'difference',\n      11: 'exclusion',\n      12: 'hue',\n      13: 'saturation',\n      14: 'color',\n      15: 'luminosity'\n    };\n    return function (mode) {\n      return blendModeEnums[mode] || '';\n    };\n  }();\n\n  function SliderEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function AngleEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function ColorEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function PointEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n  }\n\n  function LayerIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function MaskIndexEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function CheckboxEffect(data, elem, container) {\n    this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n  }\n\n  function NoValueEffect() {\n    this.p = {};\n  }\n\n  function EffectsManager(data, element) {\n    var effects = data.ef || [];\n    this.effectElements = [];\n    var i;\n    var len = effects.length;\n    var effectItem;\n\n    for (i = 0; i < len; i += 1) {\n      effectItem = new GroupEffect(effects[i], element);\n      this.effectElements.push(effectItem);\n    }\n  }\n\n  function GroupEffect(data, element) {\n    this.init(data, element);\n  }\n\n  extendPrototype([DynamicPropertyContainer], GroupEffect);\n  GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n\n  GroupEffect.prototype.init = function (data, element) {\n    this.data = data;\n    this.effectElements = [];\n    this.initDynamicPropertyContainer(element);\n    var i;\n    var len = this.data.ef.length;\n    var eff;\n    var effects = this.data.ef;\n\n    for (i = 0; i < len; i += 1) {\n      eff = null;\n\n      switch (effects[i].ty) {\n        case 0:\n          eff = new SliderEffect(effects[i], element, this);\n          break;\n\n        case 1:\n          eff = new AngleEffect(effects[i], element, this);\n          break;\n\n        case 2:\n          eff = new ColorEffect(effects[i], element, this);\n          break;\n\n        case 3:\n          eff = new PointEffect(effects[i], element, this);\n          break;\n\n        case 4:\n        case 7:\n          eff = new CheckboxEffect(effects[i], element, this);\n          break;\n\n        case 10:\n          eff = new LayerIndexEffect(effects[i], element, this);\n          break;\n\n        case 11:\n          eff = new MaskIndexEffect(effects[i], element, this);\n          break;\n\n        case 5:\n          eff = new EffectsManager(effects[i], element, this);\n          break;\n        // case 6:\n\n        default:\n          eff = new NoValueEffect(effects[i], element, this);\n          break;\n      }\n\n      if (eff) {\n        this.effectElements.push(eff);\n      }\n    }\n  };\n\n  function BaseElement() {}\n\n  BaseElement.prototype = {\n    checkMasks: function checkMasks() {\n      if (!this.data.hasMask) {\n        return false;\n      }\n\n      var i = 0;\n      var len = this.data.masksProperties.length;\n\n      while (i < len) {\n        if (this.data.masksProperties[i].mode !== 'n' && this.data.masksProperties[i].cl !== false) {\n          return true;\n        }\n\n        i += 1;\n      }\n\n      return false;\n    },\n    initExpressions: function initExpressions() {\n      this.layerInterface = LayerExpressionInterface(this);\n\n      if (this.data.hasMask && this.maskManager) {\n        this.layerInterface.registerMaskInterface(this.maskManager);\n      }\n\n      var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n      this.layerInterface.registerEffectsInterface(effectsInterface);\n\n      if (this.data.ty === 0 || this.data.xt) {\n        this.compInterface = CompExpressionInterface(this);\n      } else if (this.data.ty === 4) {\n        this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface);\n        this.layerInterface.content = this.layerInterface.shapeInterface;\n      } else if (this.data.ty === 5) {\n        this.layerInterface.textInterface = TextExpressionInterface(this);\n        this.layerInterface.text = this.layerInterface.textInterface;\n      }\n    },\n    setBlendMode: function setBlendMode() {\n      var blendModeValue = getBlendMode(this.data.bm);\n      var elem = this.baseElement || this.layerElement;\n      elem.style['mix-blend-mode'] = blendModeValue;\n    },\n    initBaseData: function initBaseData(data, globalData, comp) {\n      this.globalData = globalData;\n      this.comp = comp;\n      this.data = data;\n      this.layerId = createElementID(); // Stretch factor for old animations missing this property.\n\n      if (!this.data.sr) {\n        this.data.sr = 1;\n      } // effects manager\n\n\n      this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n    },\n    getType: function getType() {\n      return this.type;\n    },\n    sourceRectAtTime: function sourceRectAtTime() {}\n  };\n\n  /**\r\n   * @file\r\n   * Handles element's layer frame update.\r\n   * Checks layer in point and out point\r\n   *\r\n   */\n  function FrameElement() {}\n\n  FrameElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes frame related properties.\r\n       *\r\n       */\n    initFrame: function initFrame() {\n      // set to true when inpoint is rendered\n      this._isFirstFrame = false; // list of animated properties\n\n      this.dynamicProperties = []; // If layer has been modified in current tick this will be true\n\n      this._mdf = false;\n    },\n\n    /**\r\n       * @function\r\n       * Calculates all dynamic values\r\n       *\r\n       * @param {number} num\r\n       * current frame number in Layer's time\r\n       * @param {boolean} isVisible\r\n       * if layers is currently in range\r\n       *\r\n       */\n    prepareProperties: function prepareProperties(num, isVisible) {\n      var i;\n      var len = this.dynamicProperties.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (isVisible || this._isParent && this.dynamicProperties[i].propType === 'transform') {\n          this.dynamicProperties[i].getValue();\n\n          if (this.dynamicProperties[i]._mdf) {\n            this.globalData._mdf = true;\n            this._mdf = true;\n          }\n        }\n      }\n    },\n    addDynamicProperty: function addDynamicProperty(prop) {\n      if (this.dynamicProperties.indexOf(prop) === -1) {\n        this.dynamicProperties.push(prop);\n      }\n    }\n  };\n\n  function _typeof$2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$2 = function _typeof(obj) { return typeof obj; }; } else { _typeof$2 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$2(obj); }\n\n  var FootageInterface = function () {\n    var outlineInterfaceFactory = function outlineInterfaceFactory(elem) {\n      var currentPropertyName = '';\n      var currentProperty = elem.getFootageData();\n\n      function init() {\n        currentPropertyName = '';\n        currentProperty = elem.getFootageData();\n        return searchProperty;\n      }\n\n      function searchProperty(value) {\n        if (currentProperty[value]) {\n          currentPropertyName = value;\n          currentProperty = currentProperty[value];\n\n          if (_typeof$2(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        var propertyNameIndex = value.indexOf(currentPropertyName);\n\n        if (propertyNameIndex !== -1) {\n          var index = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n          currentProperty = currentProperty[index];\n\n          if (_typeof$2(currentProperty) === 'object') {\n            return searchProperty;\n          }\n\n          return currentProperty;\n        }\n\n        return '';\n      }\n\n      return init;\n    };\n\n    var dataInterfaceFactory = function dataInterfaceFactory(elem) {\n      function interfaceFunction(value) {\n        if (value === 'Outline') {\n          return interfaceFunction.outlineInterface();\n        }\n\n        return null;\n      }\n\n      interfaceFunction._name = 'Outline';\n      interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n      return interfaceFunction;\n    };\n\n    return function (elem) {\n      function _interfaceFunction(value) {\n        if (value === 'Data') {\n          return _interfaceFunction.dataInterface;\n        }\n\n        return null;\n      }\n\n      _interfaceFunction._name = 'Data';\n      _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n      return _interfaceFunction;\n    };\n  }();\n\n  function FootageElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.footageData = globalData.imageLoader.getAsset(this.assetData);\n    this.initBaseData(data, globalData, comp);\n  }\n\n  FootageElement.prototype.prepareFrame = function () {};\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n\n  FootageElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  FootageElement.prototype.renderFrame = function () {};\n\n  FootageElement.prototype.destroy = function () {};\n\n  FootageElement.prototype.initExpressions = function () {\n    this.layerInterface = FootageInterface(this);\n  };\n\n  FootageElement.prototype.getFootageData = function () {\n    return this.footageData;\n  };\n\n  function AudioElement(data, globalData, comp) {\n    this.initFrame();\n    this.initRenderable();\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initBaseData(data, globalData, comp);\n    this._isPlaying = false;\n    this._canPlay = false;\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.audio = this.globalData.audioController.createAudio(assetPath);\n    this._currentTime = 0;\n    this.globalData.audioController.addAudio(this);\n    this._volumeMultiplier = 1;\n    this._volume = 1;\n    this._previousVolume = null;\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n    this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : {\n      k: [100]\n    }, 1, 0.01, this);\n  }\n\n  AudioElement.prototype.prepareFrame = function (num) {\n    this.prepareRenderableFrame(num, true);\n    this.prepareProperties(num, true);\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n      this._currentTime = timeRemapped;\n    } else {\n      this._currentTime = num / this.data.sr;\n    }\n\n    this._volume = this.lv.v[0];\n    var totalVolume = this._volume * this._volumeMultiplier;\n\n    if (this._previousVolume !== totalVolume) {\n      this._previousVolume = totalVolume;\n      this.audio.volume(totalVolume);\n    }\n  };\n\n  extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n\n  AudioElement.prototype.renderFrame = function () {\n    if (this.isInRange && this._canPlay) {\n      if (!this._isPlaying) {\n        this.audio.play();\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n        this._isPlaying = true;\n      } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n        this.audio.seek(this._currentTime / this.globalData.frameRate);\n      }\n    }\n  };\n\n  AudioElement.prototype.show = function () {// this.audio.play()\n  };\n\n  AudioElement.prototype.hide = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n  };\n\n  AudioElement.prototype.pause = function () {\n    this.audio.pause();\n    this._isPlaying = false;\n    this._canPlay = false;\n  };\n\n  AudioElement.prototype.resume = function () {\n    this._canPlay = true;\n  };\n\n  AudioElement.prototype.setRate = function (rateValue) {\n    this.audio.rate(rateValue);\n  };\n\n  AudioElement.prototype.volume = function (volumeValue) {\n    this._volumeMultiplier = volumeValue;\n    this._previousVolume = volumeValue * this._volume;\n    this.audio.volume(this._previousVolume);\n  };\n\n  AudioElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  AudioElement.prototype.destroy = function () {};\n\n  AudioElement.prototype.sourceRectAtTime = function () {};\n\n  AudioElement.prototype.initExpressions = function () {};\n\n  function BaseRenderer() {}\n\n  BaseRenderer.prototype.checkLayers = function (num) {\n    var i;\n    var len = this.layers.length;\n    var data;\n    this.completeLayers = true;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (!this.elements[i]) {\n        data = this.layers[i];\n\n        if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n          this.buildItem(i);\n        }\n      }\n\n      this.completeLayers = this.elements[i] ? this.completeLayers : false;\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.createItem = function (layer) {\n    switch (layer.ty) {\n      case 2:\n        return this.createImage(layer);\n\n      case 0:\n        return this.createComp(layer);\n\n      case 1:\n        return this.createSolid(layer);\n\n      case 3:\n        return this.createNull(layer);\n\n      case 4:\n        return this.createShape(layer);\n\n      case 5:\n        return this.createText(layer);\n\n      case 6:\n        return this.createAudio(layer);\n\n      case 13:\n        return this.createCamera(layer);\n\n      case 15:\n        return this.createFootage(layer);\n\n      default:\n        return this.createNull(layer);\n    }\n  };\n\n  BaseRenderer.prototype.createCamera = function () {\n    throw new Error('You\\'re using a 3d camera. Try the html renderer.');\n  };\n\n  BaseRenderer.prototype.createAudio = function (data) {\n    return new AudioElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.createFootage = function (data) {\n    return new FootageElement(data, this.globalData, this);\n  };\n\n  BaseRenderer.prototype.buildAllItems = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.buildItem(i);\n    }\n\n    this.checkPendingElements();\n  };\n\n  BaseRenderer.prototype.includeLayers = function (newLayers) {\n    this.completeLayers = false;\n    var i;\n    var len = newLayers.length;\n    var j;\n    var jLen = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      j = 0;\n\n      while (j < jLen) {\n        if (this.layers[j].id === newLayers[i].id) {\n          this.layers[j] = newLayers[i];\n          break;\n        }\n\n        j += 1;\n      }\n    }\n  };\n\n  BaseRenderer.prototype.setProjectInterface = function (pInterface) {\n    this.globalData.projectInterface = pInterface;\n  };\n\n  BaseRenderer.prototype.initItems = function () {\n    if (!this.globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n  };\n\n  BaseRenderer.prototype.buildElementParenting = function (element, parentName, hierarchy) {\n    var elements = this.elements;\n    var layers = this.layers;\n    var i = 0;\n    var len = layers.length;\n\n    while (i < len) {\n      if (layers[i].ind == parentName) {\n        // eslint-disable-line eqeqeq\n        if (!elements[i] || elements[i] === true) {\n          this.buildItem(i);\n          this.addPendingElement(element);\n        } else {\n          hierarchy.push(elements[i]);\n          elements[i].setAsParent();\n\n          if (layers[i].parent !== undefined) {\n            this.buildElementParenting(element, layers[i].parent, hierarchy);\n          } else {\n            element.setHierarchy(hierarchy);\n          }\n        }\n      }\n\n      i += 1;\n    }\n  };\n\n  BaseRenderer.prototype.addPendingElement = function (element) {\n    this.pendingElements.push(element);\n  };\n\n  BaseRenderer.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i]);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  BaseRenderer.prototype.getElementByPath = function (path) {\n    var pathValue = path.shift();\n    var element;\n\n    if (typeof pathValue === 'number') {\n      element = this.elements[pathValue];\n    } else {\n      var i;\n      var len = this.elements.length;\n\n      for (i = 0; i < len; i += 1) {\n        if (this.elements[i].data.nm === pathValue) {\n          element = this.elements[i];\n          break;\n        }\n      }\n    }\n\n    if (path.length === 0) {\n      return element;\n    }\n\n    return element.getElementByPath(path);\n  };\n\n  BaseRenderer.prototype.setupGlobalData = function (animData, fontsContainer) {\n    this.globalData.fontManager = new FontManager();\n    this.globalData.fontManager.addChars(animData.chars);\n    this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n    this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n    this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n    this.globalData.imageLoader = this.animationItem.imagePreloader;\n    this.globalData.audioController = this.animationItem.audioController;\n    this.globalData.frameId = 0;\n    this.globalData.frameRate = animData.fr;\n    this.globalData.nm = animData.nm;\n    this.globalData.compSize = {\n      w: animData.w,\n      h: animData.h\n    };\n  };\n\n  function TransformElement() {}\n\n  TransformElement.prototype = {\n    initTransform: function initTransform() {\n      this.finalTransform = {\n        mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : {\n          o: 0\n        },\n        _matMdf: false,\n        _opMdf: false,\n        mat: new Matrix()\n      };\n\n      if (this.data.ao) {\n        this.finalTransform.mProp.autoOriented = true;\n      } // TODO: check TYPE 11: Guided elements\n\n\n      if (this.data.ty !== 11) {// this.createElements();\n      }\n    },\n    renderTransform: function renderTransform() {\n      this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n      this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n\n      if (this.hierarchy) {\n        var mat;\n        var finalMat = this.finalTransform.mat;\n        var i = 0;\n        var len = this.hierarchy.length; // Checking if any of the transformation matrices in the hierarchy chain has changed.\n\n        if (!this.finalTransform._matMdf) {\n          while (i < len) {\n            if (this.hierarchy[i].finalTransform.mProp._mdf) {\n              this.finalTransform._matMdf = true;\n              break;\n            }\n\n            i += 1;\n          }\n        }\n\n        if (this.finalTransform._matMdf) {\n          mat = this.finalTransform.mProp.v.props;\n          finalMat.cloneFromProps(mat);\n\n          for (i = 0; i < len; i += 1) {\n            mat = this.hierarchy[i].finalTransform.mProp.v.props;\n            finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]);\n          }\n        }\n      }\n    },\n    globalToLocal: function globalToLocal(pt) {\n      var transforms = [];\n      transforms.push(this.finalTransform);\n      var flag = true;\n      var comp = this.comp;\n\n      while (flag) {\n        if (comp.finalTransform) {\n          if (comp.data.hasMask) {\n            transforms.splice(0, 0, comp.finalTransform);\n          }\n\n          comp = comp.comp;\n        } else {\n          flag = false;\n        }\n      }\n\n      var i;\n      var len = transforms.length;\n      var ptNew;\n\n      for (i = 0; i < len; i += 1) {\n        ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); // ptNew = transforms[i].mat.applyToPointArray(pt[0],pt[1],pt[2]);\n\n        pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n      }\n\n      return pt;\n    },\n    mHelper: new Matrix()\n  };\n\n  function MaskElement(data, element, globalData) {\n    this.data = data;\n    this.element = element;\n    this.globalData = globalData;\n    this.storedData = [];\n    this.masksProperties = this.data.masksProperties || [];\n    this.maskElement = null;\n    var defs = this.globalData.defs;\n    var i;\n    var len = this.masksProperties ? this.masksProperties.length : 0;\n    this.viewData = createSizedArray(len);\n    this.solidPath = '';\n    var path;\n    var properties = this.masksProperties;\n    var count = 0;\n    var currentMasks = [];\n    var j;\n    var jLen;\n    var layerId = createElementID();\n    var rect;\n    var expansor;\n    var feMorph;\n    var x;\n    var maskType = 'clipPath';\n    var maskRef = 'clip-path';\n\n    for (i = 0; i < len; i += 1) {\n      if (properties[i].mode !== 'a' && properties[i].mode !== 'n' || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n        maskType = 'mask';\n        maskRef = 'mask';\n      }\n\n      if ((properties[i].mode === 's' || properties[i].mode === 'i') && count === 0) {\n        rect = createNS('rect');\n        rect.setAttribute('fill', '#ffffff');\n        rect.setAttribute('width', this.element.comp.data.w || 0);\n        rect.setAttribute('height', this.element.comp.data.h || 0);\n        currentMasks.push(rect);\n      } else {\n        rect = null;\n      }\n\n      path = createNS('path');\n\n      if (properties[i].mode === 'n') {\n        // TODO move this to a factory or to a constructor\n        this.viewData[i] = {\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          elem: path,\n          lastPath: ''\n        };\n        defs.appendChild(path);\n      } else {\n        count += 1;\n        path.setAttribute('fill', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        path.setAttribute('clip-rule', 'nonzero');\n        var filterID;\n\n        if (properties[i].x.k !== 0) {\n          maskType = 'mask';\n          maskRef = 'mask';\n          x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n          filterID = createElementID();\n          expansor = createNS('filter');\n          expansor.setAttribute('id', filterID);\n          feMorph = createNS('feMorphology');\n          feMorph.setAttribute('operator', 'erode');\n          feMorph.setAttribute('in', 'SourceGraphic');\n          feMorph.setAttribute('radius', '0');\n          expansor.appendChild(feMorph);\n          defs.appendChild(expansor);\n          path.setAttribute('stroke', properties[i].mode === 's' ? '#000000' : '#ffffff');\n        } else {\n          feMorph = null;\n          x = null;\n        } // TODO move this to a factory or to a constructor\n\n\n        this.storedData[i] = {\n          elem: path,\n          x: x,\n          expan: feMorph,\n          lastPath: '',\n          lastOperator: '',\n          filterId: filterID,\n          lastRadius: 0\n        };\n\n        if (properties[i].mode === 'i') {\n          jLen = currentMasks.length;\n          var g = createNS('g');\n\n          for (j = 0; j < jLen; j += 1) {\n            g.appendChild(currentMasks[j]);\n          }\n\n          var mask = createNS('mask');\n          mask.setAttribute('mask-type', 'alpha');\n          mask.setAttribute('id', layerId + '_' + count);\n          mask.appendChild(path);\n          defs.appendChild(mask);\n          g.setAttribute('mask', 'url(' + getLocationHref() + '#' + layerId + '_' + count + ')');\n          currentMasks.length = 0;\n          currentMasks.push(g);\n        } else {\n          currentMasks.push(path);\n        }\n\n        if (properties[i].inv && !this.solidPath) {\n          this.solidPath = this.createLayerSolidPath();\n        } // TODO move this to a factory or to a constructor\n\n\n        this.viewData[i] = {\n          elem: path,\n          lastPath: '',\n          op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n          prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n          invRect: rect\n        };\n\n        if (!this.viewData[i].prop.k) {\n          this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n        }\n      }\n    }\n\n    this.maskElement = createNS(maskType);\n    len = currentMasks.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.maskElement.appendChild(currentMasks[i]);\n    }\n\n    if (count > 0) {\n      this.maskElement.setAttribute('id', layerId);\n      this.element.maskedElement.setAttribute(maskRef, 'url(' + getLocationHref() + '#' + layerId + ')');\n      defs.appendChild(this.maskElement);\n    }\n\n    if (this.viewData.length) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  MaskElement.prototype.getMaskProperty = function (pos) {\n    return this.viewData[pos].prop;\n  };\n\n  MaskElement.prototype.renderFrame = function (isFirstFrame) {\n    var finalMat = this.element.finalTransform.mat;\n    var i;\n    var len = this.masksProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.viewData[i].prop._mdf || isFirstFrame) {\n        this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n      }\n\n      if (this.viewData[i].op._mdf || isFirstFrame) {\n        this.viewData[i].elem.setAttribute('fill-opacity', this.viewData[i].op.v);\n      }\n\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n          this.viewData[i].invRect.setAttribute('transform', finalMat.getInverseMatrix().to2dCSS());\n        }\n\n        if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n          var feMorph = this.storedData[i].expan;\n\n          if (this.storedData[i].x.v < 0) {\n            if (this.storedData[i].lastOperator !== 'erode') {\n              this.storedData[i].lastOperator = 'erode';\n              this.storedData[i].elem.setAttribute('filter', 'url(' + getLocationHref() + '#' + this.storedData[i].filterId + ')');\n            }\n\n            feMorph.setAttribute('radius', -this.storedData[i].x.v);\n          } else {\n            if (this.storedData[i].lastOperator !== 'dilate') {\n              this.storedData[i].lastOperator = 'dilate';\n              this.storedData[i].elem.setAttribute('filter', null);\n            }\n\n            this.storedData[i].elem.setAttribute('stroke-width', this.storedData[i].x.v * 2);\n          }\n        }\n      }\n    }\n  };\n\n  MaskElement.prototype.getMaskelement = function () {\n    return this.maskElement;\n  };\n\n  MaskElement.prototype.createLayerSolidPath = function () {\n    var path = 'M0,0 ';\n    path += ' h' + this.globalData.compSize.w;\n    path += ' v' + this.globalData.compSize.h;\n    path += ' h-' + this.globalData.compSize.w;\n    path += ' v-' + this.globalData.compSize.h + ' ';\n    return path;\n  };\n\n  MaskElement.prototype.drawPath = function (pathData, pathNodes, viewData) {\n    var pathString = ' M' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    var i;\n    var len;\n    len = pathNodes._length;\n\n    for (i = 1; i < len; i += 1) {\n      // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[i][0]+','+pathNodes.i[i][1] + \" \"+pathNodes.v[i][0]+','+pathNodes.v[i][1];\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[i][0] + ',' + pathNodes.i[i][1] + ' ' + pathNodes.v[i][0] + ',' + pathNodes.v[i][1];\n    } // pathString += \" C\"+pathNodes.o[i-1][0]+','+pathNodes.o[i-1][1] + \" \"+pathNodes.i[0][0]+','+pathNodes.i[0][1] + \" \"+pathNodes.v[0][0]+','+pathNodes.v[0][1];\n\n\n    if (pathNodes.c && len > 1) {\n      pathString += ' C' + pathNodes.o[i - 1][0] + ',' + pathNodes.o[i - 1][1] + ' ' + pathNodes.i[0][0] + ',' + pathNodes.i[0][1] + ' ' + pathNodes.v[0][0] + ',' + pathNodes.v[0][1];\n    } // pathNodes.__renderedString = pathString;\n\n\n    if (viewData.lastPath !== pathString) {\n      var pathShapeValue = '';\n\n      if (viewData.elem) {\n        if (pathNodes.c) {\n          pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n        }\n\n        viewData.elem.setAttribute('d', pathShapeValue);\n      }\n\n      viewData.lastPath = pathString;\n    }\n  };\n\n  MaskElement.prototype.destroy = function () {\n    this.element = null;\n    this.globalData = null;\n    this.maskElement = null;\n    this.data = null;\n    this.masksProperties = null;\n  };\n\n  var filtersFactory = function () {\n    var ob = {};\n    ob.createFilter = createFilter;\n    ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n\n    function createFilter(filId, skipCoordinates) {\n      var fil = createNS('filter');\n      fil.setAttribute('id', filId);\n\n      if (skipCoordinates !== true) {\n        fil.setAttribute('filterUnits', 'objectBoundingBox');\n        fil.setAttribute('x', '0%');\n        fil.setAttribute('y', '0%');\n        fil.setAttribute('width', '100%');\n        fil.setAttribute('height', '100%');\n      }\n\n      return fil;\n    }\n\n    function createAlphaToLuminanceFilter() {\n      var feColorMatrix = createNS('feColorMatrix');\n      feColorMatrix.setAttribute('type', 'matrix');\n      feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n      feColorMatrix.setAttribute('values', '0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 1 1');\n      return feColorMatrix;\n    }\n\n    return ob;\n  }();\n\n  var featureSupport = function () {\n    var ob = {\n      maskType: true\n    };\n\n    if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n      ob.maskType = false;\n    }\n\n    return ob;\n  }();\n\n  var registeredEffects = {};\n  var idPrefix = 'filter_result_';\n\n  function SVGEffects(elem) {\n    var i;\n    var source = 'SourceGraphic';\n    var len = elem.data.ef ? elem.data.ef.length : 0;\n    var filId = createElementID();\n    var fil = filtersFactory.createFilter(filId, true);\n    var count = 0;\n    this.filters = [];\n    var filterManager;\n\n    for (i = 0; i < len; i += 1) {\n      filterManager = null;\n      var type = elem.data.ef[i].ty;\n\n      if (registeredEffects[type]) {\n        var Effect = registeredEffects[type].effect;\n        filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n        source = idPrefix + count;\n\n        if (registeredEffects[type].countsAsEffect) {\n          count += 1;\n        }\n      }\n\n      if (filterManager) {\n        this.filters.push(filterManager);\n      }\n    }\n\n    if (count) {\n      elem.globalData.defs.appendChild(fil);\n      elem.layerElement.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n    }\n\n    if (this.filters.length) {\n      elem.addRenderableComponent(this);\n    }\n  }\n\n  SVGEffects.prototype.renderFrame = function (_isFirstFrame) {\n    var i;\n    var len = this.filters.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.filters[i].renderFrame(_isFirstFrame);\n    }\n  };\n\n  function registerEffect(id, effect, countsAsEffect) {\n    registeredEffects[id] = {\n      effect: effect,\n      countsAsEffect: countsAsEffect\n    };\n  }\n\n  function SVGBaseElement() {}\n\n  SVGBaseElement.prototype = {\n    initRendererElement: function initRendererElement() {\n      this.layerElement = createNS('g');\n    },\n    createContainerElements: function createContainerElements() {\n      this.matteElement = createNS('g');\n      this.transformedElement = this.layerElement;\n      this.maskedElement = this.layerElement;\n      this._sizeChanged = false;\n      var layerElementParent = null; // If this layer acts as a mask for the following layer\n\n      var filId;\n      var fil;\n      var gg;\n\n      if (this.data.td) {\n        if (this.data.td == 3 || this.data.td == 1) {\n          // eslint-disable-line eqeqeq\n          var masker = createNS('mask');\n          masker.setAttribute('id', this.layerId);\n          masker.setAttribute('mask-type', this.data.td == 3 ? 'luminance' : 'alpha'); // eslint-disable-line eqeqeq\n\n          masker.appendChild(this.layerElement);\n          layerElementParent = masker;\n          this.globalData.defs.appendChild(masker); // This is only for IE and Edge when mask if of type alpha\n\n          if (!featureSupport.maskType && this.data.td == 1) {\n            // eslint-disable-line eqeqeq\n            masker.setAttribute('mask-type', 'luminance');\n            filId = createElementID();\n            fil = filtersFactory.createFilter(filId);\n            this.globalData.defs.appendChild(fil);\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            gg.appendChild(this.layerElement);\n            layerElementParent = gg;\n            masker.appendChild(gg);\n            gg.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          }\n        } else if (this.data.td == 2) {\n          // eslint-disable-line eqeqeq\n          var maskGroup = createNS('mask');\n          maskGroup.setAttribute('id', this.layerId);\n          maskGroup.setAttribute('mask-type', 'alpha');\n          var maskGrouper = createNS('g');\n          maskGroup.appendChild(maskGrouper);\n          filId = createElementID();\n          fil = filtersFactory.createFilter(filId); /// /\n          // This solution doesn't work on Android when meta tag with viewport attribute is set\n\n          /* var feColorMatrix = createNS('feColorMatrix');\r\n                  feColorMatrix.setAttribute('type', 'matrix');\r\n                  feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\r\n                  feColorMatrix.setAttribute('values','1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 -1 1');\r\n                  fil.appendChild(feColorMatrix); */\n          /// /\n\n          var feCTr = createNS('feComponentTransfer');\n          feCTr.setAttribute('in', 'SourceGraphic');\n          fil.appendChild(feCTr);\n          var feFunc = createNS('feFuncA');\n          feFunc.setAttribute('type', 'table');\n          feFunc.setAttribute('tableValues', '1.0 0.0');\n          feCTr.appendChild(feFunc); /// /\n\n          this.globalData.defs.appendChild(fil);\n          var alphaRect = createNS('rect');\n          alphaRect.setAttribute('width', this.comp.data.w);\n          alphaRect.setAttribute('height', this.comp.data.h);\n          alphaRect.setAttribute('x', '0');\n          alphaRect.setAttribute('y', '0');\n          alphaRect.setAttribute('fill', '#ffffff');\n          alphaRect.setAttribute('opacity', '0');\n          maskGrouper.setAttribute('filter', 'url(' + getLocationHref() + '#' + filId + ')');\n          maskGrouper.appendChild(alphaRect);\n          maskGrouper.appendChild(this.layerElement);\n          layerElementParent = maskGrouper;\n\n          if (!featureSupport.maskType) {\n            maskGroup.setAttribute('mask-type', 'luminance');\n            fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n            gg = createNS('g');\n            maskGrouper.appendChild(alphaRect);\n            gg.appendChild(this.layerElement);\n            layerElementParent = gg;\n            maskGrouper.appendChild(gg);\n          }\n\n          this.globalData.defs.appendChild(maskGroup);\n        }\n      } else if (this.data.tt) {\n        this.matteElement.appendChild(this.layerElement);\n        layerElementParent = this.matteElement;\n        this.baseElement = this.matteElement;\n      } else {\n        this.baseElement = this.layerElement;\n      }\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      } // Clipping compositions to hide content that exceeds boundaries. If collapsed transformations is on, component should not be clipped\n\n\n      if (this.data.ty === 0 && !this.data.hd) {\n        var cp = createNS('clipPath');\n        var pt = createNS('path');\n        pt.setAttribute('d', 'M0,0 L' + this.data.w + ',0 L' + this.data.w + ',' + this.data.h + ' L0,' + this.data.h + 'z');\n        var clipId = createElementID();\n        cp.setAttribute('id', clipId);\n        cp.appendChild(pt);\n        this.globalData.defs.appendChild(cp);\n\n        if (this.checkMasks()) {\n          var cpGroup = createNS('g');\n          cpGroup.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n          cpGroup.appendChild(this.layerElement);\n          this.transformedElement = cpGroup;\n\n          if (layerElementParent) {\n            layerElementParent.appendChild(this.transformedElement);\n          } else {\n            this.baseElement = this.transformedElement;\n          }\n        } else {\n          this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + clipId + ')');\n        }\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      if (this.finalTransform._matMdf) {\n        this.transformedElement.setAttribute('transform', this.finalTransform.mat.to2dCSS());\n      }\n\n      if (this.finalTransform._opMdf) {\n        this.transformedElement.setAttribute('opacity', this.finalTransform.mProp.o.v);\n      }\n    },\n    destroyBaseElement: function destroyBaseElement() {\n      this.layerElement = null;\n      this.matteElement = null;\n      this.maskManager.destroy();\n    },\n    getBaseElement: function getBaseElement() {\n      if (this.data.hd) {\n        return null;\n      }\n\n      return this.baseElement;\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n      this.renderableEffectsManager = new SVGEffects(this);\n    },\n    setMatte: function setMatte(id) {\n      if (!this.matteElement) {\n        return;\n      }\n\n      this.matteElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n    }\n  };\n\n  /**\r\n   * @file\r\n   * Handles AE's layer parenting property.\r\n   *\r\n   */\n  function HierarchyElement() {}\n\n  HierarchyElement.prototype = {\n    /**\r\n       * @function\r\n       * Initializes hierarchy properties\r\n       *\r\n       */\n    initHierarchy: function initHierarchy() {\n      // element's parent list\n      this.hierarchy = []; // if element is parent of another layer _isParent will be true\n\n      this._isParent = false;\n      this.checkParenting();\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer's hierarchy.\r\n       * @param {array} hierarch\r\n       * layer's parent list\r\n       *\r\n       */\n    setHierarchy: function setHierarchy(hierarchy) {\n      this.hierarchy = hierarchy;\n    },\n\n    /**\r\n       * @function\r\n       * Sets layer as parent.\r\n       *\r\n       */\n    setAsParent: function setAsParent() {\n      this._isParent = true;\n    },\n\n    /**\r\n       * @function\r\n       * Searches layer's parenting chain\r\n       *\r\n       */\n    checkParenting: function checkParenting() {\n      if (this.data.parent !== undefined) {\n        this.comp.buildElementParenting(this, this.data.parent, []);\n      }\n    }\n  };\n\n  function RenderableDOMElement() {}\n\n  (function () {\n    var _prototype = {\n      initElement: function initElement(data, globalData, comp) {\n        this.initFrame();\n        this.initBaseData(data, globalData, comp);\n        this.initTransform(data, globalData, comp);\n        this.initHierarchy();\n        this.initRenderable();\n        this.initRendererElement();\n        this.createContainerElements();\n        this.createRenderableComponents();\n        this.createContent();\n        this.hide();\n      },\n      hide: function hide() {\n        // console.log('HIDE', this);\n        if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n          var elem = this.baseElement || this.layerElement;\n          elem.style.display = 'none';\n          this.hidden = true;\n        }\n      },\n      show: function show() {\n        // console.log('SHOW', this);\n        if (this.isInRange && !this.isTransparent) {\n          if (!this.data.hd) {\n            var elem = this.baseElement || this.layerElement;\n            elem.style.display = 'block';\n          }\n\n          this.hidden = false;\n          this._isFirstFrame = true;\n        }\n      },\n      renderFrame: function renderFrame() {\n        // If it is exported as hidden (data.hd === true) no need to render\n        // If it is not visible no need to render\n        if (this.data.hd || this.hidden) {\n          return;\n        }\n\n        this.renderTransform();\n        this.renderRenderable();\n        this.renderElement();\n        this.renderInnerContent();\n\n        if (this._isFirstFrame) {\n          this._isFirstFrame = false;\n        }\n      },\n      renderInnerContent: function renderInnerContent() {},\n      prepareFrame: function prepareFrame(num) {\n        this._mdf = false;\n        this.prepareRenderableFrame(num);\n        this.prepareProperties(num, this.isInRange);\n        this.checkTransparency();\n      },\n      destroy: function destroy() {\n        this.innerElem = null;\n        this.destroyBaseElement();\n      }\n    };\n    extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n  })();\n\n  function IImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initElement(data, globalData, comp);\n    this.sourceRect = {\n      top: 0,\n      left: 0,\n      width: this.assetData.w,\n      height: this.assetData.h\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], IImageElement);\n\n  IImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    this.innerElem = createNS('image');\n    this.innerElem.setAttribute('width', this.assetData.w + 'px');\n    this.innerElem.setAttribute('height', this.assetData.h + 'px');\n    this.innerElem.setAttribute('preserveAspectRatio', this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio);\n    this.innerElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n    this.layerElement.appendChild(this.innerElem);\n  };\n\n  IImageElement.prototype.sourceRectAtTime = function () {\n    return this.sourceRect;\n  };\n\n  function ProcessedElement(element, position) {\n    this.elem = element;\n    this.pos = position;\n  }\n\n  function IShapeElement() {}\n\n  IShapeElement.prototype = {\n    addShapeToModifiers: function addShapeToModifiers(data) {\n      var i;\n      var len = this.shapeModifiers.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapeModifiers[i].addShape(data);\n      }\n    },\n    isShapeInAnimatedModifiers: function isShapeInAnimatedModifiers(data) {\n      var i = 0;\n      var len = this.shapeModifiers.length;\n\n      while (i < len) {\n        if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n          return true;\n        }\n      }\n\n      return false;\n    },\n    renderModifiers: function renderModifiers() {\n      if (!this.shapeModifiers.length) {\n        return;\n      }\n\n      var i;\n      var len = this.shapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.shapes[i].sh.reset();\n      }\n\n      len = this.shapeModifiers.length;\n      var shouldBreakProcess;\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); // workaround to fix cases where a repeater resets the shape so the following processes get called twice\n        // TODO: find a better solution for this\n\n        if (shouldBreakProcess) {\n          break;\n        }\n      }\n    },\n    searchProcessedElement: function searchProcessedElement(elem) {\n      var elements = this.processedElements;\n      var i = 0;\n      var len = elements.length;\n\n      while (i < len) {\n        if (elements[i].elem === elem) {\n          return elements[i].pos;\n        }\n\n        i += 1;\n      }\n\n      return 0;\n    },\n    addProcessedElement: function addProcessedElement(elem, pos) {\n      var elements = this.processedElements;\n      var i = elements.length;\n\n      while (i) {\n        i -= 1;\n\n        if (elements[i].elem === elem) {\n          elements[i].pos = pos;\n          return;\n        }\n      }\n\n      elements.push(new ProcessedElement(elem, pos));\n    },\n    prepareFrame: function prepareFrame(num) {\n      this.prepareRenderableFrame(num);\n      this.prepareProperties(num, this.isInRange);\n    }\n  };\n\n  var lineCapEnum = {\n    1: 'butt',\n    2: 'round',\n    3: 'square'\n  };\n  var lineJoinEnum = {\n    1: 'miter',\n    2: 'round',\n    3: 'bevel'\n  };\n\n  function SVGShapeData(transformers, level, shape) {\n    this.caches = [];\n    this.styles = [];\n    this.transformers = transformers;\n    this.lStr = '';\n    this.sh = shape;\n    this.lvl = level; // TODO find if there are some cases where _isAnimated can be false.\n    // For now, since shapes add up with other shapes. They have to be calculated every time.\n    // One way of finding out is checking if all styles associated to this shape depend only of this shape\n\n    this._isAnimated = !!shape.k; // TODO: commenting this for now since all shapes are animated\n\n    var i = 0;\n    var len = transformers.length;\n\n    while (i < len) {\n      if (transformers[i].mProps.dynamicProperties.length) {\n        this._isAnimated = true;\n        break;\n      }\n\n      i += 1;\n    }\n  }\n\n  SVGShapeData.prototype.setAsAnimated = function () {\n    this._isAnimated = true;\n  };\n\n  function SVGStyleData(data, level) {\n    this.data = data;\n    this.type = data.ty;\n    this.d = '';\n    this.lvl = level;\n    this._mdf = false;\n    this.closed = data.hd === true;\n    this.pElem = createNS('path');\n    this.msElem = null;\n  }\n\n  SVGStyleData.prototype.reset = function () {\n    this.d = '';\n    this._mdf = false;\n  };\n\n  function DashProperty(elem, data, renderer, container) {\n    this.elem = elem;\n    this.frameId = -1;\n    this.dataProps = createSizedArray(data.length);\n    this.renderer = renderer;\n    this.k = false;\n    this.dashStr = '';\n    this.dashArray = createTypedArray('float32', data.length ? data.length - 1 : 0);\n    this.dashoffset = createTypedArray('float32', 1);\n    this.initDynamicPropertyContainer(container);\n    var i;\n    var len = data.length || 0;\n    var prop;\n\n    for (i = 0; i < len; i += 1) {\n      prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n      this.k = prop.k || this.k;\n      this.dataProps[i] = {\n        n: data[i].n,\n        p: prop\n      };\n    }\n\n    if (!this.k) {\n      this.getValue(true);\n    }\n\n    this._isAnimated = this.k;\n  }\n\n  DashProperty.prototype.getValue = function (forceRender) {\n    if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n      return;\n    }\n\n    this.frameId = this.elem.globalData.frameId;\n    this.iterateDynamicProperties();\n    this._mdf = this._mdf || forceRender;\n\n    if (this._mdf) {\n      var i = 0;\n      var len = this.dataProps.length;\n\n      if (this.renderer === 'svg') {\n        this.dashStr = '';\n      }\n\n      for (i = 0; i < len; i += 1) {\n        if (this.dataProps[i].n !== 'o') {\n          if (this.renderer === 'svg') {\n            this.dashStr += ' ' + this.dataProps[i].p.v;\n          } else {\n            this.dashArray[i] = this.dataProps[i].p.v;\n          }\n        } else {\n          this.dashoffset[0] = this.dataProps[i].p.v;\n        }\n      }\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], DashProperty);\n\n  function SVGStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n\n  function SVGFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n\n  function SVGNoStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.style = styleOb;\n  }\n\n  extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n\n  function GradientProperty(elem, data, container) {\n    this.data = data;\n    this.c = createTypedArray('uint8c', data.p * 4);\n    var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n    this.o = createTypedArray('float32', cLength);\n    this._cmdf = false;\n    this._omdf = false;\n    this._collapsable = this.checkCollapsable();\n    this._hasOpacity = cLength;\n    this.initDynamicPropertyContainer(container);\n    this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n    this.k = this.prop.k;\n    this.getValue(true);\n  }\n\n  GradientProperty.prototype.comparePoints = function (values, points) {\n    var i = 0;\n    var len = this.o.length / 2;\n    var diff;\n\n    while (i < len) {\n      diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n\n      if (diff > 0.01) {\n        return false;\n      }\n\n      i += 1;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.checkCollapsable = function () {\n    if (this.o.length / 2 !== this.c.length / 4) {\n      return false;\n    }\n\n    if (this.data.k.k[0].s) {\n      var i = 0;\n      var len = this.data.k.k.length;\n\n      while (i < len) {\n        if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n          return false;\n        }\n\n        i += 1;\n      }\n    } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n      return false;\n    }\n\n    return true;\n  };\n\n  GradientProperty.prototype.getValue = function (forceRender) {\n    this.prop.getValue();\n    this._mdf = false;\n    this._cmdf = false;\n    this._omdf = false;\n\n    if (this.prop._mdf || forceRender) {\n      var i;\n      var len = this.data.p * 4;\n      var mult;\n      var val;\n\n      for (i = 0; i < len; i += 1) {\n        mult = i % 4 === 0 ? 100 : 255;\n        val = Math.round(this.prop.v[i] * mult);\n\n        if (this.c[i] !== val) {\n          this.c[i] = val;\n          this._cmdf = !forceRender;\n        }\n      }\n\n      if (this.o.length) {\n        len = this.prop.v.length;\n\n        for (i = this.data.p * 4; i < len; i += 1) {\n          mult = i % 2 === 0 ? 100 : 1;\n          val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n\n          if (this.o[i - this.data.p * 4] !== val) {\n            this.o[i - this.data.p * 4] = val;\n            this._omdf = !forceRender;\n          }\n        }\n      }\n\n      this._mdf = !forceRender;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], GradientProperty);\n\n  function SVGGradientFillStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.initGradientData(elem, data, styleOb);\n  }\n\n  SVGGradientFillStyleData.prototype.initGradientData = function (elem, data, styleOb) {\n    this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n    this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n    this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n    this.h = PropertyFactory.getProp(elem, data.h || {\n      k: 0\n    }, 0, 0.01, this);\n    this.a = PropertyFactory.getProp(elem, data.a || {\n      k: 0\n    }, 0, degToRads, this);\n    this.g = new GradientProperty(elem, data.g, this);\n    this.style = styleOb;\n    this.stops = [];\n    this.setGradientData(styleOb.pElem, data);\n    this.setGradientOpacity(data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientData = function (pathElement, data) {\n    var gradientId = createElementID();\n    var gfill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n    gfill.setAttribute('id', gradientId);\n    gfill.setAttribute('spreadMethod', 'pad');\n    gfill.setAttribute('gradientUnits', 'userSpaceOnUse');\n    var stops = [];\n    var stop;\n    var j;\n    var jLen;\n    jLen = data.g.p * 4;\n\n    for (j = 0; j < jLen; j += 4) {\n      stop = createNS('stop');\n      gfill.appendChild(stop);\n      stops.push(stop);\n    }\n\n    pathElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + gradientId + ')');\n    this.gf = gfill;\n    this.cst = stops;\n  };\n\n  SVGGradientFillStyleData.prototype.setGradientOpacity = function (data, styleOb) {\n    if (this.g._hasOpacity && !this.g._collapsable) {\n      var stop;\n      var j;\n      var jLen;\n      var mask = createNS('mask');\n      var maskElement = createNS('path');\n      mask.appendChild(maskElement);\n      var opacityId = createElementID();\n      var maskId = createElementID();\n      mask.setAttribute('id', maskId);\n      var opFill = createNS(data.t === 1 ? 'linearGradient' : 'radialGradient');\n      opFill.setAttribute('id', opacityId);\n      opFill.setAttribute('spreadMethod', 'pad');\n      opFill.setAttribute('gradientUnits', 'userSpaceOnUse');\n      jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n      var stops = this.stops;\n\n      for (j = data.g.p * 4; j < jLen; j += 2) {\n        stop = createNS('stop');\n        stop.setAttribute('stop-color', 'rgb(255,255,255)');\n        opFill.appendChild(stop);\n        stops.push(stop);\n      }\n\n      maskElement.setAttribute(data.ty === 'gf' ? 'fill' : 'stroke', 'url(' + getLocationHref() + '#' + opacityId + ')');\n\n      if (data.ty === 'gs') {\n        maskElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n        maskElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n\n        if (data.lj === 1) {\n          maskElement.setAttribute('stroke-miterlimit', data.ml);\n        }\n      }\n\n      this.of = opFill;\n      this.ms = mask;\n      this.ost = stops;\n      this.maskId = maskId;\n      styleOb.msElem = maskElement;\n    }\n  };\n\n  extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n\n  function SVGGradientStrokeStyleData(elem, data, styleOb) {\n    this.initDynamicPropertyContainer(elem);\n    this.getValue = this.iterateDynamicProperties;\n    this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n    this.d = new DashProperty(elem, data.d || {}, 'svg', this);\n    this.initGradientData(elem, data, styleOb);\n    this._isAnimated = !!this._isAnimated;\n  }\n\n  extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n\n  function ShapeGroupData() {\n    this.it = [];\n    this.prevViewData = [];\n    this.gr = createNS('g');\n  }\n\n  function SVGTransformData(mProps, op, container) {\n    this.transform = {\n      mProps: mProps,\n      op: op,\n      container: container\n    };\n    this.elements = [];\n    this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n  }\n\n  var buildShapeString = function buildShapeString(pathNodes, length, closed, mat) {\n    if (length === 0) {\n      return '';\n    }\n\n    var _o = pathNodes.o;\n    var _i = pathNodes.i;\n    var _v = pathNodes.v;\n    var i;\n    var shapeString = ' M' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n\n    for (i = 1; i < length; i += 1) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[i][0], _i[i][1]) + ' ' + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n    }\n\n    if (closed && length) {\n      shapeString += ' C' + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + ' ' + mat.applyToPointStringified(_i[0][0], _i[0][1]) + ' ' + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n      shapeString += 'z';\n    }\n\n    return shapeString;\n  };\n\n  var SVGElementsRenderer = function () {\n    var _identityMatrix = new Matrix();\n\n    var _matrixHelper = new Matrix();\n\n    var ob = {\n      createRenderFunction: createRenderFunction\n    };\n\n    function createRenderFunction(data) {\n      switch (data.ty) {\n        case 'fl':\n          return renderFill;\n\n        case 'gf':\n          return renderGradient;\n\n        case 'gs':\n          return renderGradientStroke;\n\n        case 'st':\n          return renderStroke;\n\n        case 'sh':\n        case 'el':\n        case 'rc':\n        case 'sr':\n          return renderPath;\n\n        case 'tr':\n          return renderContentTransform;\n\n        case 'no':\n          return renderNoop;\n\n        default:\n          return null;\n      }\n    }\n\n    function renderContentTransform(styleData, itemData, isFirstFrame) {\n      if (isFirstFrame || itemData.transform.op._mdf) {\n        itemData.transform.container.setAttribute('opacity', itemData.transform.op.v);\n      }\n\n      if (isFirstFrame || itemData.transform.mProps._mdf) {\n        itemData.transform.container.setAttribute('transform', itemData.transform.mProps.v.to2dCSS());\n      }\n    }\n\n    function renderNoop() {}\n\n    function renderPath(styleData, itemData, isFirstFrame) {\n      var j;\n      var jLen;\n      var pathStringTransformed;\n      var redraw;\n      var pathNodes;\n      var l;\n      var lLen = itemData.styles.length;\n      var lvl = itemData.lvl;\n      var paths;\n      var mat;\n      var props;\n      var iterations;\n      var k;\n\n      for (l = 0; l < lLen; l += 1) {\n        redraw = itemData.sh._mdf || isFirstFrame;\n\n        if (itemData.styles[l].lvl < lvl) {\n          mat = _matrixHelper.reset();\n          iterations = lvl - itemData.styles[l].lvl;\n          k = itemData.transformers.length - 1;\n\n          while (!redraw && iterations > 0) {\n            redraw = itemData.transformers[k].mProps._mdf || redraw;\n            iterations -= 1;\n            k -= 1;\n          }\n\n          if (redraw) {\n            iterations = lvl - itemData.styles[l].lvl;\n            k = itemData.transformers.length - 1;\n\n            while (iterations > 0) {\n              props = itemData.transformers[k].mProps.v.props;\n              mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n              iterations -= 1;\n              k -= 1;\n            }\n          }\n        } else {\n          mat = _identityMatrix;\n        }\n\n        paths = itemData.sh.paths;\n        jLen = paths._length;\n\n        if (redraw) {\n          pathStringTransformed = '';\n\n          for (j = 0; j < jLen; j += 1) {\n            pathNodes = paths.shapes[j];\n\n            if (pathNodes && pathNodes._length) {\n              pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n            }\n          }\n\n          itemData.caches[l] = pathStringTransformed;\n        } else {\n          pathStringTransformed = itemData.caches[l];\n        }\n\n        itemData.styles[l].d += styleData.hd === true ? '' : pathStringTransformed;\n        itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n      }\n    }\n\n    function renderFill(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n\n      if (itemData.c._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('fill-opacity', itemData.o.v);\n      }\n    }\n\n    function renderGradientStroke(styleData, itemData, isFirstFrame) {\n      renderGradient(styleData, itemData, isFirstFrame);\n      renderStroke(styleData, itemData, isFirstFrame);\n    }\n\n    function renderGradient(styleData, itemData, isFirstFrame) {\n      var gfill = itemData.gf;\n      var hasOpacity = itemData.g._hasOpacity;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (itemData.o._mdf || isFirstFrame) {\n        var attr = styleData.ty === 'gf' ? 'fill-opacity' : 'stroke-opacity';\n        itemData.style.pElem.setAttribute(attr, itemData.o.v);\n      }\n\n      if (itemData.s._mdf || isFirstFrame) {\n        var attr1 = styleData.t === 1 ? 'x1' : 'cx';\n        var attr2 = attr1 === 'x1' ? 'y1' : 'cy';\n        gfill.setAttribute(attr1, pt1[0]);\n        gfill.setAttribute(attr2, pt1[1]);\n\n        if (hasOpacity && !itemData.g._collapsable) {\n          itemData.of.setAttribute(attr1, pt1[0]);\n          itemData.of.setAttribute(attr2, pt1[1]);\n        }\n      }\n\n      var stops;\n      var i;\n      var len;\n      var stop;\n\n      if (itemData.g._cmdf || isFirstFrame) {\n        stops = itemData.cst;\n        var cValues = itemData.g.c;\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n          stop.setAttribute('offset', cValues[i * 4] + '%');\n          stop.setAttribute('stop-color', 'rgb(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ')');\n        }\n      }\n\n      if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n        var oValues = itemData.g.o;\n\n        if (itemData.g._collapsable) {\n          stops = itemData.cst;\n        } else {\n          stops = itemData.ost;\n        }\n\n        len = stops.length;\n\n        for (i = 0; i < len; i += 1) {\n          stop = stops[i];\n\n          if (!itemData.g._collapsable) {\n            stop.setAttribute('offset', oValues[i * 2] + '%');\n          }\n\n          stop.setAttribute('stop-opacity', oValues[i * 2 + 1]);\n        }\n      }\n\n      if (styleData.t === 1) {\n        if (itemData.e._mdf || isFirstFrame) {\n          gfill.setAttribute('x2', pt2[0]);\n          gfill.setAttribute('y2', pt2[1]);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('x2', pt2[0]);\n            itemData.of.setAttribute('y2', pt2[1]);\n          }\n        }\n      } else {\n        var rad;\n\n        if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n          rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          gfill.setAttribute('r', rad);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('r', rad);\n          }\n        }\n\n        if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n          if (!rad) {\n            rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n          }\n\n          var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n          var percent = itemData.h.v;\n\n          if (percent >= 1) {\n            percent = 0.99;\n          } else if (percent <= -1) {\n            percent = -0.99;\n          }\n\n          var dist = rad * percent;\n          var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n          var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n          gfill.setAttribute('fx', x);\n          gfill.setAttribute('fy', y);\n\n          if (hasOpacity && !itemData.g._collapsable) {\n            itemData.of.setAttribute('fx', x);\n            itemData.of.setAttribute('fy', y);\n          }\n        } // gfill.setAttribute('fy','200');\n\n      }\n    }\n\n    function renderStroke(styleData, itemData, isFirstFrame) {\n      var styleElem = itemData.style;\n      var d = itemData.d;\n\n      if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n        styleElem.pElem.setAttribute('stroke-dasharray', d.dashStr);\n        styleElem.pElem.setAttribute('stroke-dashoffset', d.dashoffset[0]);\n      }\n\n      if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n        styleElem.pElem.setAttribute('stroke', 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')');\n      }\n\n      if (itemData.o._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-opacity', itemData.o.v);\n      }\n\n      if (itemData.w._mdf || isFirstFrame) {\n        styleElem.pElem.setAttribute('stroke-width', itemData.w.v);\n\n        if (styleElem.msElem) {\n          styleElem.msElem.setAttribute('stroke-width', itemData.w.v);\n        }\n      }\n    }\n\n    return ob;\n  }();\n\n  function SVGShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = []; // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableDOMElement], SVGShapeElement);\n\n  SVGShapeElement.prototype.initSecondaryElement = function () {};\n\n  SVGShapeElement.prototype.identityMatrix = new Matrix();\n\n  SVGShapeElement.prototype.buildExpressionInterface = function () {};\n\n  SVGShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n  };\n  /*\r\n  This method searches for multiple shapes that affect a single element and one of them is animated\r\n  */\n\n\n  SVGShapeElement.prototype.filterUniqueShapes = function () {\n    var i;\n    var len = this.shapes.length;\n    var shape;\n    var j;\n    var jLen = this.stylesList.length;\n    var style;\n    var tempShapes = [];\n    var areAnimated = false;\n\n    for (j = 0; j < jLen; j += 1) {\n      style = this.stylesList[j];\n      areAnimated = false;\n      tempShapes.length = 0;\n\n      for (i = 0; i < len; i += 1) {\n        shape = this.shapes[i];\n\n        if (shape.styles.indexOf(style) !== -1) {\n          tempShapes.push(shape);\n          areAnimated = shape._isAnimated || areAnimated;\n        }\n      }\n\n      if (tempShapes.length > 1 && areAnimated) {\n        this.setShapesAsAnimated(tempShapes);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.setShapesAsAnimated = function (shapes) {\n    var i;\n    var len = shapes.length;\n\n    for (i = 0; i < len; i += 1) {\n      shapes[i].setAsAnimated();\n    }\n  };\n\n  SVGShapeElement.prototype.createStyleElement = function (data, level) {\n    // TODO: prevent drawing of hidden styles\n    var elementData;\n    var styleOb = new SVGStyleData(data, level);\n    var pathElement = styleOb.pElem;\n\n    if (data.ty === 'st') {\n      elementData = new SVGStrokeStyleData(this, data, styleOb);\n    } else if (data.ty === 'fl') {\n      elementData = new SVGFillStyleData(this, data, styleOb);\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      var GradientConstructor = data.ty === 'gf' ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n      elementData = new GradientConstructor(this, data, styleOb);\n      this.globalData.defs.appendChild(elementData.gf);\n\n      if (elementData.maskId) {\n        this.globalData.defs.appendChild(elementData.ms);\n        this.globalData.defs.appendChild(elementData.of);\n        pathElement.setAttribute('mask', 'url(' + getLocationHref() + '#' + elementData.maskId + ')');\n      }\n    } else if (data.ty === 'no') {\n      elementData = new SVGNoStyleData(this, data, styleOb);\n    }\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      pathElement.setAttribute('stroke-linecap', lineCapEnum[data.lc || 2]);\n      pathElement.setAttribute('stroke-linejoin', lineJoinEnum[data.lj || 2]);\n      pathElement.setAttribute('fill-opacity', '0');\n\n      if (data.lj === 1) {\n        pathElement.setAttribute('stroke-miterlimit', data.ml);\n      }\n    }\n\n    if (data.r === 2) {\n      pathElement.setAttribute('fill-rule', 'evenodd');\n    }\n\n    if (data.ln) {\n      pathElement.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      pathElement.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      pathElement.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    this.stylesList.push(styleOb);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createGroupElement = function (data) {\n    var elementData = new ShapeGroupData();\n\n    if (data.ln) {\n      elementData.gr.setAttribute('id', data.ln);\n    }\n\n    if (data.cl) {\n      elementData.gr.setAttribute('class', data.cl);\n    }\n\n    if (data.bm) {\n      elementData.gr.style['mix-blend-mode'] = getBlendMode(data.bm);\n    }\n\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createTransformElement = function (data, container) {\n    var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n    var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.createShapeElement = function (data, ownTransformers, level) {\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n    var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    this.addToAnimatedContents(data, elementData);\n    return elementData;\n  };\n\n  SVGShapeElement.prototype.addToAnimatedContents = function (data, element) {\n    var i = 0;\n    var len = this.animatedContents.length;\n\n    while (i < len) {\n      if (this.animatedContents[i].element === element) {\n        return;\n      }\n\n      i += 1;\n    }\n\n    this.animatedContents.push({\n      fn: SVGElementsRenderer.createRenderFunction(data),\n      element: element,\n      data: data\n    });\n  };\n\n  SVGShapeElement.prototype.setElementStyles = function (elementData) {\n    var arr = elementData.styles;\n    var j;\n    var jLen = this.stylesList.length;\n\n    for (j = 0; j < jLen; j += 1) {\n      if (!this.stylesList[j].closed) {\n        arr.push(this.stylesList[j]);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n    this.filterUniqueShapes();\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n  };\n\n  SVGShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, container, level, transformers, render) {\n    var ownTransformers = [].concat(transformers);\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var currentTransform;\n    var modifier;\n    var processedPos;\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._render = render;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs' || arr[i].ty === 'no') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], level);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        if (arr[i]._render) {\n          if (itemsData[i].style.pElem.parentNode !== container) {\n            container.appendChild(itemsData[i].style.pElem);\n          }\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render);\n\n        if (arr[i]._render) {\n          if (itemsData[i].gr.parentNode !== container) {\n            container.appendChild(itemsData[i].gr);\n          }\n        }\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          itemsData[i] = this.createTransformElement(arr[i], container);\n        }\n\n        currentTransform = itemsData[i].transform;\n        ownTransformers.push(currentTransform);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n        }\n\n        this.setElementStyles(itemsData[i]);\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'ms' || arr[i].ty === 'pb') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          render = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    len = ownStyles.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownStyles[i].closed = true;\n    }\n\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  SVGShapeElement.prototype.renderInnerContent = function () {\n    this.renderModifiers();\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.stylesList[i].reset();\n    }\n\n    this.renderShape();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.stylesList[i]._mdf || this._isFirstFrame) {\n        if (this.stylesList[i].msElem) {\n          this.stylesList[i].msElem.setAttribute('d', this.stylesList[i].d); // Adding M0 0 fixes same mask bug on all browsers\n\n          this.stylesList[i].d = 'M0 0' + this.stylesList[i].d;\n        }\n\n        this.stylesList[i].pElem.setAttribute('d', this.stylesList[i].d || 'M0 0');\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.renderShape = function () {\n    var i;\n    var len = this.animatedContents.length;\n    var animatedContent;\n\n    for (i = 0; i < len; i += 1) {\n      animatedContent = this.animatedContents[i];\n\n      if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n        animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n      }\n    }\n  };\n\n  SVGShapeElement.prototype.destroy = function () {\n    this.destroyBaseElement();\n    this.shapesData = null;\n    this.itemsData = null;\n  };\n\n  function LetterProps(o, sw, sc, fc, m, p) {\n    this.o = o;\n    this.sw = sw;\n    this.sc = sc;\n    this.fc = fc;\n    this.m = m;\n    this.p = p;\n    this._mdf = {\n      o: true,\n      sw: !!sw,\n      sc: !!sc,\n      fc: !!fc,\n      m: true,\n      p: true\n    };\n  }\n\n  LetterProps.prototype.update = function (o, sw, sc, fc, m, p) {\n    this._mdf.o = false;\n    this._mdf.sw = false;\n    this._mdf.sc = false;\n    this._mdf.fc = false;\n    this._mdf.m = false;\n    this._mdf.p = false;\n    var updated = false;\n\n    if (this.o !== o) {\n      this.o = o;\n      this._mdf.o = true;\n      updated = true;\n    }\n\n    if (this.sw !== sw) {\n      this.sw = sw;\n      this._mdf.sw = true;\n      updated = true;\n    }\n\n    if (this.sc !== sc) {\n      this.sc = sc;\n      this._mdf.sc = true;\n      updated = true;\n    }\n\n    if (this.fc !== fc) {\n      this.fc = fc;\n      this._mdf.fc = true;\n      updated = true;\n    }\n\n    if (this.m !== m) {\n      this.m = m;\n      this._mdf.m = true;\n      updated = true;\n    }\n\n    if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n      this.p = p;\n      this._mdf.p = true;\n      updated = true;\n    }\n\n    return updated;\n  };\n\n  function TextProperty(elem, data) {\n    this._frameId = initialDefaultFrame;\n    this.pv = '';\n    this.v = '';\n    this.kf = false;\n    this._isFirstFrame = true;\n    this._mdf = false;\n    this.data = data;\n    this.elem = elem;\n    this.comp = this.elem.comp;\n    this.keysIndex = 0;\n    this.canResize = false;\n    this.minimumFontSize = 1;\n    this.effectsSequence = [];\n    this.currentData = {\n      ascent: 0,\n      boxWidth: this.defaultBoxWidth,\n      f: '',\n      fStyle: '',\n      fWeight: '',\n      fc: '',\n      j: '',\n      justifyOffset: '',\n      l: [],\n      lh: 0,\n      lineWidths: [],\n      ls: '',\n      of: '',\n      s: '',\n      sc: '',\n      sw: 0,\n      t: 0,\n      tr: 0,\n      sz: 0,\n      ps: null,\n      fillColorAnim: false,\n      strokeColorAnim: false,\n      strokeWidthAnim: false,\n      yOffset: 0,\n      finalSize: 0,\n      finalText: [],\n      finalLineHeight: 0,\n      __complete: false\n    };\n    this.copyData(this.currentData, this.data.d.k[0].s);\n\n    if (!this.searchProperty()) {\n      this.completeTextData(this.currentData);\n    }\n  }\n\n  TextProperty.prototype.defaultBoxWidth = [0, 0];\n\n  TextProperty.prototype.copyData = function (obj, data) {\n    for (var s in data) {\n      if (Object.prototype.hasOwnProperty.call(data, s)) {\n        obj[s] = data[s];\n      }\n    }\n\n    return obj;\n  };\n\n  TextProperty.prototype.setCurrentData = function (data) {\n    if (!data.__complete) {\n      this.completeTextData(data);\n    }\n\n    this.currentData = data;\n    this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n    this._mdf = true;\n  };\n\n  TextProperty.prototype.searchProperty = function () {\n    return this.searchKeyframes();\n  };\n\n  TextProperty.prototype.searchKeyframes = function () {\n    this.kf = this.data.d.k.length > 1;\n\n    if (this.kf) {\n      this.addEffect(this.getKeyframeValue.bind(this));\n    }\n\n    return this.kf;\n  };\n\n  TextProperty.prototype.addEffect = function (effectFunction) {\n    this.effectsSequence.push(effectFunction);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.getValue = function (_finalValue) {\n    if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n      return;\n    }\n\n    this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n    var currentValue = this.currentData;\n    var currentIndex = this.keysIndex;\n\n    if (this.lock) {\n      this.setCurrentData(this.currentData);\n      return;\n    }\n\n    this.lock = true;\n    this._mdf = false;\n    var i;\n    var len = this.effectsSequence.length;\n    var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n\n    for (i = 0; i < len; i += 1) {\n      // Checking if index changed to prevent creating a new object every time the expression updates.\n      if (currentIndex !== this.keysIndex) {\n        finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n      } else {\n        finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n      }\n    }\n\n    if (currentValue !== finalValue) {\n      this.setCurrentData(finalValue);\n    }\n\n    this.v = this.currentData;\n    this.pv = this.v;\n    this.lock = false;\n    this.frameId = this.elem.globalData.frameId;\n  };\n\n  TextProperty.prototype.getKeyframeValue = function () {\n    var textKeys = this.data.d.k;\n    var frameNum = this.elem.comp.renderedFrame;\n    var i = 0;\n    var len = textKeys.length;\n\n    while (i <= len - 1) {\n      if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    if (this.keysIndex !== i) {\n      this.keysIndex = i;\n    }\n\n    return this.data.d.k[this.keysIndex].s;\n  };\n\n  TextProperty.prototype.buildFinalText = function (text) {\n    var charactersArray = [];\n    var i = 0;\n    var len = text.length;\n    var charCode;\n    var secondCharCode;\n    var shouldCombine = false;\n\n    while (i < len) {\n      charCode = text.charCodeAt(i);\n\n      if (FontManager.isCombinedCharacter(charCode)) {\n        charactersArray[charactersArray.length - 1] += text.charAt(i);\n      } else if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n        secondCharCode = text.charCodeAt(i + 1);\n\n        if (secondCharCode >= 0xDC00 && secondCharCode <= 0xDFFF) {\n          if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\n            charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n            shouldCombine = false;\n          } else {\n            charactersArray.push(text.substr(i, 2));\n          }\n\n          i += 1;\n        } else {\n          charactersArray.push(text.charAt(i));\n        }\n      } else if (charCode > 0xDBFF) {\n        secondCharCode = text.charCodeAt(i + 1);\n\n        if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\n          shouldCombine = true;\n          charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n          i += 1;\n        } else {\n          charactersArray.push(text.charAt(i));\n        }\n      } else if (FontManager.isZeroWidthJoiner(charCode)) {\n        charactersArray[charactersArray.length - 1] += text.charAt(i);\n        shouldCombine = true;\n      } else {\n        charactersArray.push(text.charAt(i));\n      }\n\n      i += 1;\n    }\n\n    return charactersArray;\n  };\n\n  TextProperty.prototype.completeTextData = function (documentData) {\n    documentData.__complete = true;\n    var fontManager = this.elem.globalData.fontManager;\n    var data = this.data;\n    var letters = [];\n    var i;\n    var len;\n    var newLineFlag;\n    var index = 0;\n    var val;\n    var anchorGrouping = data.m.g;\n    var currentSize = 0;\n    var currentPos = 0;\n    var currentLine = 0;\n    var lineWidths = [];\n    var lineWidth = 0;\n    var maxLineWidth = 0;\n    var j;\n    var jLen;\n    var fontData = fontManager.getFontByName(documentData.f);\n    var charData;\n    var cLength = 0;\n    var fontProps = getFontProperties(fontData);\n    documentData.fWeight = fontProps.weight;\n    documentData.fStyle = fontProps.style;\n    documentData.finalSize = documentData.s;\n    documentData.finalText = this.buildFinalText(documentData.t);\n    len = documentData.finalText.length;\n    documentData.finalLineHeight = documentData.lh;\n    var trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n    var charCode;\n\n    if (documentData.sz) {\n      var flag = true;\n      var boxWidth = documentData.sz[0];\n      var boxHeight = documentData.sz[1];\n      var currentHeight;\n      var finalText;\n\n      while (flag) {\n        finalText = this.buildFinalText(documentData.t);\n        currentHeight = 0;\n        lineWidth = 0;\n        len = finalText.length;\n        trackingOffset = documentData.tr / 1000 * documentData.finalSize;\n        var lastSpaceIndex = -1;\n\n        for (i = 0; i < len; i += 1) {\n          charCode = finalText[i].charCodeAt(0);\n          newLineFlag = false;\n\n          if (finalText[i] === ' ') {\n            lastSpaceIndex = i;\n          } else if (charCode === 13 || charCode === 3) {\n            lineWidth = 0;\n            newLineFlag = true;\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n          }\n\n          if (fontManager.chars) {\n            charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n            cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n          } else {\n            // tCanvasHelper.font = documentData.s + 'px '+ fontData.fFamily;\n            cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n          }\n\n          if (lineWidth + cLength > boxWidth && finalText[i] !== ' ') {\n            if (lastSpaceIndex === -1) {\n              len += 1;\n            } else {\n              i = lastSpaceIndex;\n            }\n\n            currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n            finalText.splice(i, lastSpaceIndex === i ? 1 : 0, '\\r'); // finalText = finalText.substr(0,i) + \"\\r\" + finalText.substr(i === lastSpaceIndex ? i + 1 : i);\n\n            lastSpaceIndex = -1;\n            lineWidth = 0;\n          } else {\n            lineWidth += cLength;\n            lineWidth += trackingOffset;\n          }\n        }\n\n        currentHeight += fontData.ascent * documentData.finalSize / 100;\n\n        if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n          documentData.finalSize -= 1;\n          documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n        } else {\n          documentData.finalText = finalText;\n          len = documentData.finalText.length;\n          flag = false;\n        }\n      }\n    }\n\n    lineWidth = -trackingOffset;\n    cLength = 0;\n    var uncollapsedSpaces = 0;\n    var currentChar;\n\n    for (i = 0; i < len; i += 1) {\n      newLineFlag = false;\n      currentChar = documentData.finalText[i];\n      charCode = currentChar.charCodeAt(0);\n\n      if (charCode === 13 || charCode === 3) {\n        uncollapsedSpaces = 0;\n        lineWidths.push(lineWidth);\n        maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n        lineWidth = -2 * trackingOffset;\n        val = '';\n        newLineFlag = true;\n        currentLine += 1;\n      } else {\n        val = currentChar;\n      }\n\n      if (fontManager.chars) {\n        charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily);\n        cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n      } else {\n        // var charWidth = fontManager.measureText(val, documentData.f, documentData.finalSize);\n        // tCanvasHelper.font = documentData.finalSize + 'px '+ fontManager.getFontByName(documentData.f).fFamily;\n        cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n      } //\n\n\n      if (currentChar === ' ') {\n        uncollapsedSpaces += cLength + trackingOffset;\n      } else {\n        lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n        uncollapsedSpaces = 0;\n      }\n\n      letters.push({\n        l: cLength,\n        an: cLength,\n        add: currentSize,\n        n: newLineFlag,\n        anIndexes: [],\n        val: val,\n        line: currentLine,\n        animatorJustifyOffset: 0\n      });\n\n      if (anchorGrouping == 2) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || val === ' ' || i === len - 1) {\n          if (val === '' || val === ' ') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          index += 1;\n          currentSize = 0;\n        }\n      } else if (anchorGrouping == 3) {\n        // eslint-disable-line eqeqeq\n        currentSize += cLength;\n\n        if (val === '' || i === len - 1) {\n          if (val === '') {\n            currentSize -= cLength;\n          }\n\n          while (currentPos <= i) {\n            letters[currentPos].an = currentSize;\n            letters[currentPos].ind = index;\n            letters[currentPos].extra = cLength;\n            currentPos += 1;\n          }\n\n          currentSize = 0;\n          index += 1;\n        }\n      } else {\n        letters[index].ind = index;\n        letters[index].extra = 0;\n        index += 1;\n      }\n    }\n\n    documentData.l = letters;\n    maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n    lineWidths.push(lineWidth);\n\n    if (documentData.sz) {\n      documentData.boxWidth = documentData.sz[0];\n      documentData.justifyOffset = 0;\n    } else {\n      documentData.boxWidth = maxLineWidth;\n\n      switch (documentData.j) {\n        case 1:\n          documentData.justifyOffset = -documentData.boxWidth;\n          break;\n\n        case 2:\n          documentData.justifyOffset = -documentData.boxWidth / 2;\n          break;\n\n        default:\n          documentData.justifyOffset = 0;\n      }\n    }\n\n    documentData.lineWidths = lineWidths;\n    var animators = data.a;\n    var animatorData;\n    var letterData;\n    jLen = animators.length;\n    var based;\n    var ind;\n    var indexes = [];\n\n    for (j = 0; j < jLen; j += 1) {\n      animatorData = animators[j];\n\n      if (animatorData.a.sc) {\n        documentData.strokeColorAnim = true;\n      }\n\n      if (animatorData.a.sw) {\n        documentData.strokeWidthAnim = true;\n      }\n\n      if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n        documentData.fillColorAnim = true;\n      }\n\n      ind = 0;\n      based = animatorData.s.b;\n\n      for (i = 0; i < len; i += 1) {\n        letterData = letters[i];\n        letterData.anIndexes[j] = ind;\n\n        if (based == 1 && letterData.val !== '' || based == 2 && letterData.val !== '' && letterData.val !== ' ' || based == 3 && (letterData.n || letterData.val == ' ' || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n          // eslint-disable-line eqeqeq\n          if (animatorData.s.rn === 1) {\n            indexes.push(ind);\n          }\n\n          ind += 1;\n        }\n      }\n\n      data.a[j].s.totalChars = ind;\n      var currentInd = -1;\n      var newInd;\n\n      if (animatorData.s.rn === 1) {\n        for (i = 0; i < len; i += 1) {\n          letterData = letters[i];\n\n          if (currentInd != letterData.anIndexes[j]) {\n            // eslint-disable-line eqeqeq\n            currentInd = letterData.anIndexes[j];\n            newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n          }\n\n          letterData.anIndexes[j] = newInd;\n        }\n      }\n    }\n\n    documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n    documentData.ls = documentData.ls || 0;\n    documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n  };\n\n  TextProperty.prototype.updateDocumentData = function (newData, index) {\n    index = index === undefined ? this.keysIndex : index;\n    var dData = this.copyData({}, this.data.d.k[index].s);\n    dData = this.copyData(dData, newData);\n    this.data.d.k[index].s = dData;\n    this.recalculate(index);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.recalculate = function (index) {\n    var dData = this.data.d.k[index].s;\n    dData.__complete = false;\n    this.keysIndex = 0;\n    this._isFirstFrame = true;\n    this.getValue(dData);\n  };\n\n  TextProperty.prototype.canResizeFont = function (_canResize) {\n    this.canResize = _canResize;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  TextProperty.prototype.setMinimumFontSize = function (_fontValue) {\n    this.minimumFontSize = Math.floor(_fontValue) || 1;\n    this.recalculate(this.keysIndex);\n    this.elem.addDynamicProperty(this);\n  };\n\n  var TextSelectorProp = function () {\n    var max = Math.max;\n    var min = Math.min;\n    var floor = Math.floor;\n\n    function TextSelectorPropFactory(elem, data) {\n      this._currentTextLength = -1;\n      this.k = false;\n      this.data = data;\n      this.elem = elem;\n      this.comp = elem.comp;\n      this.finalS = 0;\n      this.finalE = 0;\n      this.initDynamicPropertyContainer(elem);\n      this.s = PropertyFactory.getProp(elem, data.s || {\n        k: 0\n      }, 0, 0, this);\n\n      if ('e' in data) {\n        this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n      } else {\n        this.e = {\n          v: 100\n        };\n      }\n\n      this.o = PropertyFactory.getProp(elem, data.o || {\n        k: 0\n      }, 0, 0, this);\n      this.xe = PropertyFactory.getProp(elem, data.xe || {\n        k: 0\n      }, 0, 0, this);\n      this.ne = PropertyFactory.getProp(elem, data.ne || {\n        k: 0\n      }, 0, 0, this);\n      this.sm = PropertyFactory.getProp(elem, data.sm || {\n        k: 100\n      }, 0, 0, this);\n      this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n\n      if (!this.dynamicProperties.length) {\n        this.getValue();\n      }\n    }\n\n    TextSelectorPropFactory.prototype = {\n      getMult: function getMult(ind) {\n        if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n          this.getValue();\n        }\n\n        var x1 = 0;\n        var y1 = 0;\n        var x2 = 1;\n        var y2 = 1;\n\n        if (this.ne.v > 0) {\n          x1 = this.ne.v / 100.0;\n        } else {\n          y1 = -this.ne.v / 100.0;\n        }\n\n        if (this.xe.v > 0) {\n          x2 = 1.0 - this.xe.v / 100.0;\n        } else {\n          y2 = 1.0 + this.xe.v / 100.0;\n        }\n\n        var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n        var mult = 0;\n        var s = this.finalS;\n        var e = this.finalE;\n        var type = this.data.sh;\n\n        if (type === 2) {\n          if (e === s) {\n            mult = ind >= e ? 1 : 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 3) {\n          if (e === s) {\n            mult = ind >= e ? 0 : 1;\n          } else {\n            mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n          }\n\n          mult = easer(mult);\n        } else if (type === 4) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n\n            if (mult < 0.5) {\n              mult *= 2;\n            } else {\n              mult = 1 - 2 * (mult - 0.5);\n            }\n          }\n\n          mult = easer(mult);\n        } else if (type === 5) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            var tot = e - s;\n            /* ind += 0.5;\r\n                      mult = -4/(tot*tot)*(ind*ind)+(4/tot)*ind; */\n\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            var x = -tot / 2 + ind;\n            var a = tot / 2;\n            mult = Math.sqrt(1 - x * x / (a * a));\n          }\n\n          mult = easer(mult);\n        } else if (type === 6) {\n          if (e === s) {\n            mult = 0;\n          } else {\n            ind = min(max(0, ind + 0.5 - s), e - s);\n            mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; // eslint-disable-line\n          }\n\n          mult = easer(mult);\n        } else {\n          if (ind >= floor(s)) {\n            if (ind - s < 0) {\n              mult = max(0, min(min(e, 1) - (s - ind), 1));\n            } else {\n              mult = max(0, min(e - ind, 1));\n            }\n          }\n\n          mult = easer(mult);\n        } // Smoothness implementation.\n        // The smoothness represents a reduced range of the original [0; 1] range.\n        // if smoothness is 25%, the new range will be [0.375; 0.625]\n        // Steps are:\n        // - find the lower value of the new range (threshold)\n        // - if multiplier is smaller than that value, floor it to 0\n        // - if it is larger,\n        //     - subtract the threshold\n        //     - divide it by the smoothness (this will return the range to [0; 1])\n        // Note: If it doesn't work on some scenarios, consider applying it before the easer.\n\n\n        if (this.sm.v !== 100) {\n          var smoothness = this.sm.v * 0.01;\n\n          if (smoothness === 0) {\n            smoothness = 0.00000001;\n          }\n\n          var threshold = 0.5 - smoothness * 0.5;\n\n          if (mult < threshold) {\n            mult = 0;\n          } else {\n            mult = (mult - threshold) / smoothness;\n\n            if (mult > 1) {\n              mult = 1;\n            }\n          }\n        }\n\n        return mult * this.a.v;\n      },\n      getValue: function getValue(newCharsFlag) {\n        this.iterateDynamicProperties();\n        this._mdf = newCharsFlag || this._mdf;\n        this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n\n        if (newCharsFlag && this.data.r === 2) {\n          this.e.v = this._currentTextLength;\n        }\n\n        var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n        var o = this.o.v / divisor;\n        var s = this.s.v / divisor + o;\n        var e = this.e.v / divisor + o;\n\n        if (s > e) {\n          var _s = s;\n          s = e;\n          e = _s;\n        }\n\n        this.finalS = s;\n        this.finalE = e;\n      }\n    };\n    extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n\n    function getTextSelectorProp(elem, data, arr) {\n      return new TextSelectorPropFactory(elem, data, arr);\n    }\n\n    return {\n      getTextSelectorProp: getTextSelectorProp\n    };\n  }();\n\n  function TextAnimatorDataProperty(elem, animatorProps, container) {\n    var defaultData = {\n      propType: false\n    };\n    var getProp = PropertyFactory.getProp;\n    var textAnimatorAnimatables = animatorProps.a;\n    this.a = {\n      r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n      rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n      ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n      sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n      sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n      s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n      a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n      o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n      p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n      sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n      sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n      fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n      fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n      fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n      fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n      t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n    };\n    this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n    this.s.t = animatorProps.s.t;\n  }\n\n  function TextAnimatorProperty(textData, renderType, elem) {\n    this._isFirstFrame = true;\n    this._hasMaskedPath = false;\n    this._frameId = -1;\n    this._textData = textData;\n    this._renderType = renderType;\n    this._elem = elem;\n    this._animatorsData = createSizedArray(this._textData.a.length);\n    this._pathData = {};\n    this._moreOptions = {\n      alignment: {}\n    };\n    this.renderedLetters = [];\n    this.lettersChangedFlag = false;\n    this.initDynamicPropertyContainer(elem);\n  }\n\n  TextAnimatorProperty.prototype.searchProperties = function () {\n    var i;\n    var len = this._textData.a.length;\n    var animatorProps;\n    var getProp = PropertyFactory.getProp;\n\n    for (i = 0; i < len; i += 1) {\n      animatorProps = this._textData.a[i];\n      this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n    }\n\n    if (this._textData.p && 'm' in this._textData.p) {\n      this._pathData = {\n        a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n        f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n        l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n        r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n        p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n        m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n      };\n      this._hasMaskedPath = true;\n    } else {\n      this._hasMaskedPath = false;\n    }\n\n    this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n  };\n\n  TextAnimatorProperty.prototype.getMeasures = function (documentData, lettersChangedFlag) {\n    this.lettersChangedFlag = lettersChangedFlag;\n\n    if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n      return;\n    }\n\n    this._isFirstFrame = false;\n    var alignment = this._moreOptions.alignment.v;\n    var animators = this._animatorsData;\n    var textData = this._textData;\n    var matrixHelper = this.mHelper;\n    var renderType = this._renderType;\n    var renderedLettersCount = this.renderedLetters.length;\n    var xPos;\n    var yPos;\n    var i;\n    var len;\n    var letters = documentData.l;\n    var pathInfo;\n    var currentLength;\n    var currentPoint;\n    var segmentLength;\n    var flag;\n    var pointInd;\n    var segmentInd;\n    var prevPoint;\n    var points;\n    var segments;\n    var partialLength;\n    var totalLength;\n    var perc;\n    var tanAngle;\n    var mask;\n\n    if (this._hasMaskedPath) {\n      mask = this._pathData.m;\n\n      if (!this._pathData.n || this._pathData._mdf) {\n        var paths = mask.v;\n\n        if (this._pathData.r.v) {\n          paths = paths.reverse();\n        } // TODO: release bezier data cached from previous pathInfo: this._pathData.pi\n\n\n        pathInfo = {\n          tLength: 0,\n          segments: []\n        };\n        len = paths._length - 1;\n        var bezierData;\n        totalLength = 0;\n\n        for (i = 0; i < len; i += 1) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        i = len;\n\n        if (mask.v.c) {\n          bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]);\n          pathInfo.tLength += bezierData.segmentLength;\n          pathInfo.segments.push(bezierData);\n          totalLength += bezierData.segmentLength;\n        }\n\n        this._pathData.pi = pathInfo;\n      }\n\n      pathInfo = this._pathData.pi;\n      currentLength = this._pathData.f.v;\n      segmentInd = 0;\n      pointInd = 1;\n      segmentLength = 0;\n      flag = true;\n      segments = pathInfo.segments;\n\n      if (currentLength < 0 && mask.v.c) {\n        if (pathInfo.tLength < Math.abs(currentLength)) {\n          currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n        }\n\n        segmentInd = segments.length - 1;\n        points = segments[segmentInd].points;\n        pointInd = points.length - 1;\n\n        while (currentLength < 0) {\n          currentLength += points[pointInd].partialLength;\n          pointInd -= 1;\n\n          if (pointInd < 0) {\n            segmentInd -= 1;\n            points = segments[segmentInd].points;\n            pointInd = points.length - 1;\n          }\n        }\n      }\n\n      points = segments[segmentInd].points;\n      prevPoint = points[pointInd - 1];\n      currentPoint = points[pointInd];\n      partialLength = currentPoint.partialLength;\n    }\n\n    len = letters.length;\n    xPos = 0;\n    yPos = 0;\n    var yOff = documentData.finalSize * 1.2 * 0.714;\n    var firstLine = true;\n    var animatorProps;\n    var animatorSelector;\n    var j;\n    var jLen;\n    var letterValue;\n    jLen = animators.length;\n    var mult;\n    var ind = -1;\n    var offf;\n    var xPathPos;\n    var yPathPos;\n    var initPathPos = currentLength;\n    var initSegmentInd = segmentInd;\n    var initPointInd = pointInd;\n    var currentLine = -1;\n    var elemOpacity;\n    var sc;\n    var sw;\n    var fc;\n    var k;\n    var letterSw;\n    var letterSc;\n    var letterFc;\n    var letterM = '';\n    var letterP = this.defaultPropsArray;\n    var letterO; //\n\n    if (documentData.j === 2 || documentData.j === 1) {\n      var animatorJustifyOffset = 0;\n      var animatorFirstCharOffset = 0;\n      var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n      var lastIndex = 0;\n      var isNewLine = true;\n\n      for (i = 0; i < len; i += 1) {\n        if (letters[i].n) {\n          if (animatorJustifyOffset) {\n            animatorJustifyOffset += animatorFirstCharOffset;\n          }\n\n          while (lastIndex < i) {\n            letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n            lastIndex += 1;\n          }\n\n          animatorJustifyOffset = 0;\n          isNewLine = true;\n        } else {\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.t.propType) {\n              if (isNewLine && documentData.j === 2) {\n                animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n              }\n\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n              } else {\n                animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n              }\n            }\n          }\n\n          isNewLine = false;\n        }\n      }\n\n      if (animatorJustifyOffset) {\n        animatorJustifyOffset += animatorFirstCharOffset;\n      }\n\n      while (lastIndex < i) {\n        letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n        lastIndex += 1;\n      }\n    } //\n\n\n    for (i = 0; i < len; i += 1) {\n      matrixHelper.reset();\n      elemOpacity = 1;\n\n      if (letters[i].n) {\n        xPos = 0;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        currentLength = initPathPos;\n        firstLine = false;\n\n        if (this._hasMaskedPath) {\n          segmentInd = initSegmentInd;\n          pointInd = initPointInd;\n          points = segments[segmentInd].points;\n          prevPoint = points[pointInd - 1];\n          currentPoint = points[pointInd];\n          partialLength = currentPoint.partialLength;\n          segmentLength = 0;\n        }\n\n        letterM = '';\n        letterFc = '';\n        letterSw = '';\n        letterO = '';\n        letterP = this.defaultPropsArray;\n      } else {\n        if (this._hasMaskedPath) {\n          if (currentLine !== letters[i].line) {\n            switch (documentData.j) {\n              case 1:\n                currentLength += totalLength - documentData.lineWidths[letters[i].line];\n                break;\n\n              case 2:\n                currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n                break;\n\n              default:\n                break;\n            }\n\n            currentLine = letters[i].line;\n          }\n\n          if (ind !== letters[i].ind) {\n            if (letters[ind]) {\n              currentLength += letters[ind].extra;\n            }\n\n            currentLength += letters[i].an / 2;\n            ind = letters[i].ind;\n          }\n\n          currentLength += alignment[0] * letters[i].an * 0.005;\n          var animatorOffset = 0;\n\n          for (j = 0; j < jLen; j += 1) {\n            animatorProps = animators[j].a;\n\n            if (animatorProps.p.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.p.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.p.v[0] * mult;\n              }\n            }\n\n            if (animatorProps.a.propType) {\n              animatorSelector = animators[j].s;\n              mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n              if (mult.length) {\n                animatorOffset += animatorProps.a.v[0] * mult[0];\n              } else {\n                animatorOffset += animatorProps.a.v[0] * mult;\n              }\n            }\n          }\n\n          flag = true; // Force alignment only works with a single line for now\n\n          if (this._pathData.a.v) {\n            currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n            currentLength += this._pathData.f.v;\n          }\n\n          while (flag) {\n            if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n              perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n              xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n              yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n              matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -(alignment[1] * yOff) * 0.01);\n              flag = false;\n            } else if (points) {\n              segmentLength += currentPoint.partialLength;\n              pointInd += 1;\n\n              if (pointInd >= points.length) {\n                pointInd = 0;\n                segmentInd += 1;\n\n                if (!segments[segmentInd]) {\n                  if (mask.v.c) {\n                    pointInd = 0;\n                    segmentInd = 0;\n                    points = segments[segmentInd].points;\n                  } else {\n                    segmentLength -= currentPoint.partialLength;\n                    points = null;\n                  }\n                } else {\n                  points = segments[segmentInd].points;\n                }\n              }\n\n              if (points) {\n                prevPoint = currentPoint;\n                currentPoint = points[pointInd];\n                partialLength = currentPoint.partialLength;\n              }\n            }\n          }\n\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0);\n        } else {\n          offf = letters[i].an / 2 - letters[i].add;\n          matrixHelper.translate(-offf, 0, 0); // Grouping alignment\n\n          matrixHelper.translate(-alignment[0] * letters[i].an * 0.005, -alignment[1] * yOff * 0.01, 0);\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.t.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); // This condition is to prevent applying tracking to first character in each line. Might be better to use a boolean \"isNewLine\"\n\n            if (xPos !== 0 || documentData.j !== 0) {\n              if (this._hasMaskedPath) {\n                if (mult.length) {\n                  currentLength += animatorProps.t.v * mult[0];\n                } else {\n                  currentLength += animatorProps.t.v * mult;\n                }\n              } else if (mult.length) {\n                xPos += animatorProps.t.v * mult[0];\n              } else {\n                xPos += animatorProps.t.v * mult;\n              }\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          sw = documentData.sw || 0;\n        }\n\n        if (documentData.strokeColorAnim) {\n          if (documentData.sc) {\n            sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n          } else {\n            sc = [0, 0, 0];\n          }\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.a.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.s.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (mult.length) {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n            } else {\n              matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n          animatorSelector = animators[j].s;\n          mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n          if (animatorProps.sk.propType) {\n            if (mult.length) {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n            } else {\n              matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n            }\n          }\n\n          if (animatorProps.r.propType) {\n            if (mult.length) {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n            } else {\n              matrixHelper.rotateZ(-animatorProps.r.v * mult);\n            }\n          }\n\n          if (animatorProps.ry.propType) {\n            if (mult.length) {\n              matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n            } else {\n              matrixHelper.rotateY(animatorProps.ry.v * mult);\n            }\n          }\n\n          if (animatorProps.rx.propType) {\n            if (mult.length) {\n              matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n            } else {\n              matrixHelper.rotateX(animatorProps.rx.v * mult);\n            }\n          }\n\n          if (animatorProps.o.propType) {\n            if (mult.length) {\n              elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n            } else {\n              elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n            }\n          }\n\n          if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n            if (mult.length) {\n              sw += animatorProps.sw.v * mult[0];\n            } else {\n              sw += animatorProps.sw.v * mult;\n            }\n          }\n\n          if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n            for (k = 0; k < 3; k += 1) {\n              if (mult.length) {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n              } else {\n                sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n              }\n            }\n          }\n\n          if (documentData.fillColorAnim && documentData.fc) {\n            if (animatorProps.fc.propType) {\n              for (k = 0; k < 3; k += 1) {\n                if (mult.length) {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n                } else {\n                  fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n                }\n              }\n            }\n\n            if (animatorProps.fh.propType) {\n              if (mult.length) {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n              } else {\n                fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n              }\n            }\n\n            if (animatorProps.fs.propType) {\n              if (mult.length) {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n              } else {\n                fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n              }\n            }\n\n            if (animatorProps.fb.propType) {\n              if (mult.length) {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n              } else {\n                fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n              }\n            }\n          }\n        }\n\n        for (j = 0; j < jLen; j += 1) {\n          animatorProps = animators[j].a;\n\n          if (animatorProps.p.propType) {\n            animatorSelector = animators[j].s;\n            mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n\n            if (this._hasMaskedPath) {\n              if (mult.length) {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n              } else {\n                matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n              }\n            } else if (mult.length) {\n              matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]);\n            } else {\n              matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n            }\n          }\n        }\n\n        if (documentData.strokeWidthAnim) {\n          letterSw = sw < 0 ? 0 : sw;\n        }\n\n        if (documentData.strokeColorAnim) {\n          letterSc = 'rgb(' + Math.round(sc[0] * 255) + ',' + Math.round(sc[1] * 255) + ',' + Math.round(sc[2] * 255) + ')';\n        }\n\n        if (documentData.fillColorAnim && documentData.fc) {\n          letterFc = 'rgb(' + Math.round(fc[0] * 255) + ',' + Math.round(fc[1] * 255) + ',' + Math.round(fc[2] * 255) + ')';\n        }\n\n        if (this._hasMaskedPath) {\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n\n          if (this._pathData.p.v) {\n            tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n            var rot = Math.atan(tanAngle) * 180 / Math.PI;\n\n            if (currentPoint.point[0] < prevPoint.point[0]) {\n              rot += 180;\n            }\n\n            matrixHelper.rotate(-rot * Math.PI / 180);\n          }\n\n          matrixHelper.translate(xPathPos, yPathPos, 0);\n          currentLength -= alignment[0] * letters[i].an * 0.005;\n\n          if (letters[i + 1] && ind !== letters[i + 1].ind) {\n            currentLength += letters[i].an / 2;\n            currentLength += documentData.tr * 0.001 * documentData.finalSize;\n          }\n        } else {\n          matrixHelper.translate(xPos, yPos, 0);\n\n          if (documentData.ps) {\n            // matrixHelper.translate(documentData.ps[0],documentData.ps[1],0);\n            matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n          }\n\n          switch (documentData.j) {\n            case 1:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0);\n              break;\n\n            case 2:\n              matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0);\n              break;\n\n            default:\n              break;\n          }\n\n          matrixHelper.translate(0, -documentData.ls);\n          matrixHelper.translate(offf, 0, 0);\n          matrixHelper.translate(alignment[0] * letters[i].an * 0.005, alignment[1] * yOff * 0.01, 0);\n          xPos += letters[i].l + documentData.tr * 0.001 * documentData.finalSize;\n        }\n\n        if (renderType === 'html') {\n          letterM = matrixHelper.toCSS();\n        } else if (renderType === 'svg') {\n          letterM = matrixHelper.to2dCSS();\n        } else {\n          letterP = [matrixHelper.props[0], matrixHelper.props[1], matrixHelper.props[2], matrixHelper.props[3], matrixHelper.props[4], matrixHelper.props[5], matrixHelper.props[6], matrixHelper.props[7], matrixHelper.props[8], matrixHelper.props[9], matrixHelper.props[10], matrixHelper.props[11], matrixHelper.props[12], matrixHelper.props[13], matrixHelper.props[14], matrixHelper.props[15]];\n        }\n\n        letterO = elemOpacity;\n      }\n\n      if (renderedLettersCount <= i) {\n        letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n        this.renderedLetters.push(letterValue);\n        renderedLettersCount += 1;\n        this.lettersChangedFlag = true;\n      } else {\n        letterValue = this.renderedLetters[i];\n        this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n      }\n    }\n  };\n\n  TextAnimatorProperty.prototype.getValue = function () {\n    if (this._elem.globalData.frameId === this._frameId) {\n      return;\n    }\n\n    this._frameId = this._elem.globalData.frameId;\n    this.iterateDynamicProperties();\n  };\n\n  TextAnimatorProperty.prototype.mHelper = new Matrix();\n  TextAnimatorProperty.prototype.defaultPropsArray = [];\n  extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n\n  function ITextElement() {}\n\n  ITextElement.prototype.initElement = function (data, globalData, comp) {\n    this.lettersChangedFlag = true;\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n    this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n    this.initRenderable();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n    this.createContent();\n    this.hide();\n    this.textAnimator.searchProperties(this.dynamicProperties);\n  };\n\n  ITextElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n\n    if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n      this.buildNewText();\n      this.textProperty._isFirstFrame = false;\n      this.textProperty._mdf = false;\n    }\n  };\n\n  ITextElement.prototype.createPathShape = function (matrixHelper, shapes) {\n    var j;\n    var jLen = shapes.length;\n    var pathNodes;\n    var shapeStr = '';\n\n    for (j = 0; j < jLen; j += 1) {\n      if (shapes[j].ty === 'sh') {\n        pathNodes = shapes[j].ks.k;\n        shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n      }\n    }\n\n    return shapeStr;\n  };\n\n  ITextElement.prototype.updateDocumentData = function (newData, index) {\n    this.textProperty.updateDocumentData(newData, index);\n  };\n\n  ITextElement.prototype.canResizeFont = function (_canResize) {\n    this.textProperty.canResizeFont(_canResize);\n  };\n\n  ITextElement.prototype.setMinimumFontSize = function (_fontSize) {\n    this.textProperty.setMinimumFontSize(_fontSize);\n  };\n\n  ITextElement.prototype.applyTextPropertiesToMatrix = function (documentData, matrixHelper, lineNumber, xPos, yPos) {\n    if (documentData.ps) {\n      matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n    }\n\n    matrixHelper.translate(0, -documentData.ls, 0);\n\n    switch (documentData.j) {\n      case 1:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0);\n        break;\n\n      case 2:\n        matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0);\n        break;\n\n      default:\n        break;\n    }\n\n    matrixHelper.translate(xPos, yPos, 0);\n  };\n\n  ITextElement.prototype.buildColor = function (colorData) {\n    return 'rgb(' + Math.round(colorData[0] * 255) + ',' + Math.round(colorData[1] * 255) + ',' + Math.round(colorData[2] * 255) + ')';\n  };\n\n  ITextElement.prototype.emptyProp = new LetterProps();\n\n  ITextElement.prototype.destroy = function () {};\n\n  var emptyShapeData = {\n    shapes: []\n  };\n\n  function SVGTextLottieElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.renderType = 'svg';\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], SVGTextLottieElement);\n\n  SVGTextLottieElement.prototype.createContent = function () {\n    if (this.data.singleShape && !this.globalData.fontManager.chars) {\n      this.textContainer = createNS('text');\n    }\n  };\n\n  SVGTextLottieElement.prototype.buildTextContents = function (textArray) {\n    var i = 0;\n    var len = textArray.length;\n    var textContents = [];\n    var currentTextContent = '';\n\n    while (i < len) {\n      if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n        textContents.push(currentTextContent);\n        currentTextContent = '';\n      } else {\n        currentTextContent += textArray[i];\n      }\n\n      i += 1;\n    }\n\n    textContents.push(currentTextContent);\n    return textContents;\n  };\n\n  SVGTextLottieElement.prototype.buildShapeData = function (data, scale) {\n    // data should probably be cloned to apply scale separately to each instance of a text on different layers\n    // but since text internal content gets only rendered once and then it's never rerendered,\n    // it's probably safe not to clone data and reuse always the same instance even if the object is mutated.\n    // Avoiding cloning is preferred since cloning each character shape data is expensive\n    if (data.shapes && data.shapes.length) {\n      var shape = data.shapes[0];\n\n      if (shape.it) {\n        var shapeItem = shape.it[shape.it.length - 1];\n\n        if (shapeItem.s) {\n          shapeItem.s.k[0] = scale;\n          shapeItem.s.k[1] = scale;\n        }\n      }\n    }\n\n    return data;\n  };\n\n  SVGTextLottieElement.prototype.buildNewText = function () {\n    this.addDynamicProperty(this);\n    var i;\n    var len;\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n\n    if (documentData.fc) {\n      this.layerElement.setAttribute('fill', this.buildColor(documentData.fc));\n    } else {\n      this.layerElement.setAttribute('fill', 'rgba(0,0,0,0)');\n    }\n\n    if (documentData.sc) {\n      this.layerElement.setAttribute('stroke', this.buildColor(documentData.sc));\n      this.layerElement.setAttribute('stroke-width', documentData.sw);\n    }\n\n    this.layerElement.setAttribute('font-size', documentData.finalSize);\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (fontData.fClass) {\n      this.layerElement.setAttribute('class', fontData.fClass);\n    } else {\n      this.layerElement.setAttribute('font-family', fontData.fFamily);\n      var fWeight = documentData.fWeight;\n      var fStyle = documentData.fStyle;\n      this.layerElement.setAttribute('font-style', fStyle);\n      this.layerElement.setAttribute('font-weight', fWeight);\n    }\n\n    this.layerElement.setAttribute('aria-label', documentData.t);\n    var letters = documentData.l || [];\n    var usesGlyphs = !!this.globalData.fontManager.chars;\n    len = letters.length;\n    var tSpan;\n    var matrixHelper = this.mHelper;\n    var shapeStr = '';\n    var singleShape = this.data.singleShape;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n\n    if (singleShape && !usesGlyphs && !documentData.sz) {\n      var tElement = this.textContainer;\n      var justify = 'start';\n\n      switch (documentData.j) {\n        case 1:\n          justify = 'end';\n          break;\n\n        case 2:\n          justify = 'middle';\n          break;\n\n        default:\n          justify = 'start';\n          break;\n      }\n\n      tElement.setAttribute('text-anchor', justify);\n      tElement.setAttribute('letter-spacing', trackingOffset);\n      var textContent = this.buildTextContents(documentData.finalText);\n      len = textContent.length;\n      yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n\n      for (i = 0; i < len; i += 1) {\n        tSpan = this.textSpans[i].span || createNS('tspan');\n        tSpan.textContent = textContent[i];\n        tSpan.setAttribute('x', 0);\n        tSpan.setAttribute('y', yPos);\n        tSpan.style.display = 'inherit';\n        tElement.appendChild(tSpan);\n\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            glyph: null\n          };\n        }\n\n        this.textSpans[i].span = tSpan;\n        yPos += documentData.finalLineHeight;\n      }\n\n      this.layerElement.appendChild(tElement);\n    } else {\n      var cachedSpansLength = this.textSpans.length;\n      var charData;\n\n      for (i = 0; i < len; i += 1) {\n        if (!this.textSpans[i]) {\n          this.textSpans[i] = {\n            span: null,\n            childSpan: null,\n            glyph: null\n          };\n        }\n\n        if (!usesGlyphs || !singleShape || i === 0) {\n          tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? 'g' : 'text');\n\n          if (cachedSpansLength <= i) {\n            tSpan.setAttribute('stroke-linecap', 'butt');\n            tSpan.setAttribute('stroke-linejoin', 'round');\n            tSpan.setAttribute('stroke-miterlimit', '4');\n            this.textSpans[i].span = tSpan;\n\n            if (usesGlyphs) {\n              var childSpan = createNS('g');\n              tSpan.appendChild(childSpan);\n              this.textSpans[i].childSpan = childSpan;\n            }\n\n            this.textSpans[i].span = tSpan;\n            this.layerElement.appendChild(tSpan);\n          }\n\n          tSpan.style.display = 'inherit';\n        }\n\n        matrixHelper.reset();\n\n        if (singleShape) {\n          if (letters[i].n) {\n            xPos = -trackingOffset;\n            yPos += documentData.yOffset;\n            yPos += firstLine ? 1 : 0;\n            firstLine = false;\n          }\n\n          this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n          xPos += letters[i].l || 0; // xPos += letters[i].val === ' ' ? 0 : trackingOffset;\n\n          xPos += trackingOffset;\n        }\n\n        if (usesGlyphs) {\n          charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n          var glyphElement; // t === 1 means the character has been replaced with an animated shaped\n\n          if (charData.t === 1) {\n            glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n          } else {\n            var data = emptyShapeData;\n\n            if (charData.data && charData.data.shapes) {\n              data = this.buildShapeData(charData.data, documentData.finalSize);\n            }\n\n            glyphElement = new SVGShapeElement(data, this.globalData, this);\n          }\n\n          if (this.textSpans[i].glyph) {\n            var glyph = this.textSpans[i].glyph;\n            this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n            glyph.destroy();\n          }\n\n          this.textSpans[i].glyph = glyphElement;\n          glyphElement._debug = true;\n          glyphElement.prepareFrame(0);\n          glyphElement.renderFrame();\n          this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); // when using animated shapes, the layer will be scaled instead of replacing the internal scale\n          // this might have issues with strokes and might need a different solution\n\n          if (charData.t === 1) {\n            this.textSpans[i].childSpan.setAttribute('transform', 'scale(' + documentData.finalSize / 100 + ',' + documentData.finalSize / 100 + ')');\n          }\n        } else {\n          if (singleShape) {\n            tSpan.setAttribute('transform', 'translate(' + matrixHelper.props[12] + ',' + matrixHelper.props[13] + ')');\n          }\n\n          tSpan.textContent = letters[i].val;\n          tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n        } //\n\n      }\n\n      if (singleShape && tSpan) {\n        tSpan.setAttribute('d', shapeStr);\n      }\n    }\n\n    while (i < this.textSpans.length) {\n      this.textSpans[i].span.style.display = 'none';\n      i += 1;\n    }\n\n    this._sizeChanged = true;\n  };\n\n  SVGTextLottieElement.prototype.sourceRectAtTime = function () {\n    this.prepareFrame(this.comp.renderedFrame - this.data.st);\n    this.renderInnerContent();\n\n    if (this._sizeChanged) {\n      this._sizeChanged = false;\n      var textBox = this.layerElement.getBBox();\n      this.bbox = {\n        top: textBox.y,\n        left: textBox.x,\n        width: textBox.width,\n        height: textBox.height\n      };\n    }\n\n    return this.bbox;\n  };\n\n  SVGTextLottieElement.prototype.getValue = function () {\n    var i;\n    var len = this.textSpans.length;\n    var glyphElement;\n    this.renderedFrame = this.comp.renderedFrame;\n\n    for (i = 0; i < len; i += 1) {\n      glyphElement = this.textSpans[i].glyph;\n\n      if (glyphElement) {\n        glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n\n        if (glyphElement._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  SVGTextLottieElement.prototype.renderInnerContent = function () {\n    if (!this.data.singleShape || this._mdf) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n      if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n        this._sizeChanged = true;\n        var i;\n        var len;\n        var renderedLetters = this.textAnimator.renderedLetters;\n        var letters = this.textProperty.currentData.l;\n        len = letters.length;\n        var renderedLetter;\n        var textSpan;\n        var glyphElement;\n\n        for (i = 0; i < len; i += 1) {\n          if (!letters[i].n) {\n            renderedLetter = renderedLetters[i];\n            textSpan = this.textSpans[i].span;\n            glyphElement = this.textSpans[i].glyph;\n\n            if (glyphElement) {\n              glyphElement.renderFrame();\n            }\n\n            if (renderedLetter._mdf.m) {\n              textSpan.setAttribute('transform', renderedLetter.m);\n            }\n\n            if (renderedLetter._mdf.o) {\n              textSpan.setAttribute('opacity', renderedLetter.o);\n            }\n\n            if (renderedLetter._mdf.sw) {\n              textSpan.setAttribute('stroke-width', renderedLetter.sw);\n            }\n\n            if (renderedLetter._mdf.sc) {\n              textSpan.setAttribute('stroke', renderedLetter.sc);\n            }\n\n            if (renderedLetter._mdf.fc) {\n              textSpan.setAttribute('fill', renderedLetter.fc);\n            }\n          }\n        }\n      }\n    }\n  };\n\n  function ISolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([IImageElement], ISolidElement);\n\n  ISolidElement.prototype.createContent = function () {\n    var rect = createNS('rect'); /// /rect.style.width = this.data.sw;\n    /// /rect.style.height = this.data.sh;\n    /// /rect.style.fill = this.data.sc;\n\n    rect.setAttribute('width', this.data.sw);\n    rect.setAttribute('height', this.data.sh);\n    rect.setAttribute('fill', this.data.sc);\n    this.layerElement.appendChild(rect);\n  };\n\n  function NullElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initFrame();\n    this.initTransform(data, globalData, comp);\n    this.initHierarchy();\n  }\n\n  NullElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  NullElement.prototype.renderFrame = function () {};\n\n  NullElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  NullElement.prototype.destroy = function () {};\n\n  NullElement.prototype.sourceRectAtTime = function () {};\n\n  NullElement.prototype.hide = function () {};\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n\n  function SVGRendererBase() {}\n\n  extendPrototype([BaseRenderer], SVGRendererBase);\n\n  SVGRendererBase.prototype.createNull = function (data) {\n    return new NullElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createShape = function (data) {\n    return new SVGShapeElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createText = function (data) {\n    return new SVGTextLottieElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createImage = function (data) {\n    return new IImageElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.createSolid = function (data) {\n    return new ISolidElement(data, this.globalData, this);\n  };\n\n  SVGRendererBase.prototype.configAnimation = function (animData) {\n    this.svgElement.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n    if (this.renderConfig.viewBoxSize) {\n      this.svgElement.setAttribute('viewBox', this.renderConfig.viewBoxSize);\n    } else {\n      this.svgElement.setAttribute('viewBox', '0 0 ' + animData.w + ' ' + animData.h);\n    }\n\n    if (!this.renderConfig.viewBoxOnly) {\n      this.svgElement.setAttribute('width', animData.w);\n      this.svgElement.setAttribute('height', animData.h);\n      this.svgElement.style.width = '100%';\n      this.svgElement.style.height = '100%';\n      this.svgElement.style.transform = 'translate3d(0,0,0)';\n      this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n    }\n\n    if (this.renderConfig.width) {\n      this.svgElement.setAttribute('width', this.renderConfig.width);\n    }\n\n    if (this.renderConfig.height) {\n      this.svgElement.setAttribute('height', this.renderConfig.height);\n    }\n\n    if (this.renderConfig.className) {\n      this.svgElement.setAttribute('class', this.renderConfig.className);\n    }\n\n    if (this.renderConfig.id) {\n      this.svgElement.setAttribute('id', this.renderConfig.id);\n    }\n\n    if (this.renderConfig.focusable !== undefined) {\n      this.svgElement.setAttribute('focusable', this.renderConfig.focusable);\n    }\n\n    this.svgElement.setAttribute('preserveAspectRatio', this.renderConfig.preserveAspectRatio); // this.layerElement.style.transform = 'translate3d(0,0,0)';\n    // this.layerElement.style.transformOrigin = this.layerElement.style.mozTransformOrigin = this.layerElement.style.webkitTransformOrigin = this.layerElement.style['-webkit-transform'] = \"0px 0px 0px\";\n\n    this.animationItem.wrapper.appendChild(this.svgElement); // Mask animation\n\n    var defs = this.globalData.defs;\n    this.setupGlobalData(animData, defs);\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.data = animData;\n    var maskElement = createNS('clipPath');\n    var rect = createNS('rect');\n    rect.setAttribute('width', animData.w);\n    rect.setAttribute('height', animData.h);\n    rect.setAttribute('x', 0);\n    rect.setAttribute('y', 0);\n    var maskId = createElementID();\n    maskElement.setAttribute('id', maskId);\n    maskElement.appendChild(rect);\n    this.layerElement.setAttribute('clip-path', 'url(' + getLocationHref() + '#' + maskId + ')');\n    defs.appendChild(maskElement);\n    this.layers = animData.layers;\n    this.elements = createSizedArray(animData.layers.length);\n  };\n\n  SVGRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.layerElement = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  SVGRendererBase.prototype.updateContainerSize = function () {};\n\n  SVGRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    elements[pos] = true;\n    var element = this.createItem(this.layers[pos]);\n    elements[pos] = element;\n\n    if (getExpressionsPlugin()) {\n      if (this.layers[pos].ty === 0) {\n        this.globalData.projectInterface.registerComposition(element);\n      }\n\n      element.initExpressions();\n    }\n\n    this.appendElementInPos(element, pos);\n\n    if (this.layers[pos].tt) {\n      if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n        this.buildItem(pos - 1);\n        this.addPendingElement(element);\n      } else {\n        element.setMatte(elements[pos - 1].layerId);\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n\n      if (element.data.tt) {\n        var i = 0;\n        var len = this.elements.length;\n\n        while (i < len) {\n          if (this.elements[i] === element) {\n            element.setMatte(this.elements[i - 1].layerId);\n            break;\n          }\n\n          i += 1;\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.renderFrame = function (num) {\n    if (this.renderedFrame === num || this.destroyed) {\n      return;\n    }\n\n    if (num === null) {\n      num = this.renderedFrame;\n    } else {\n      this.renderedFrame = num;\n    } // console.log('-------');\n    // console.log('FRAME ',num);\n\n\n    this.globalData.frameNum = num;\n    this.globalData.frameId += 1;\n    this.globalData.projectInterface.currentFrame = num;\n    this.globalData._mdf = false;\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      for (i = 0; i < len; i += 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n    }\n  };\n\n  SVGRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newElement = element.getBaseElement();\n\n    if (!newElement) {\n      return;\n    }\n\n    var i = 0;\n    var nextElement;\n\n    while (i < pos) {\n      if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n        nextElement = this.elements[i].getBaseElement();\n      }\n\n      i += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(newElement, nextElement);\n    } else {\n      this.layerElement.appendChild(newElement);\n    }\n  };\n\n  SVGRendererBase.prototype.hide = function () {\n    this.layerElement.style.display = 'none';\n  };\n\n  SVGRendererBase.prototype.show = function () {\n    this.layerElement.style.display = 'block';\n  };\n\n  function ICompElement() {}\n\n  extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n\n  ICompElement.prototype.initElement = function (data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initTransform(data, globalData, comp);\n    this.initRenderable();\n    this.initHierarchy();\n    this.initRendererElement();\n    this.createContainerElements();\n    this.createRenderableComponents();\n\n    if (this.data.xt || !globalData.progressiveLoad) {\n      this.buildAllItems();\n    }\n\n    this.hide();\n  };\n  /* ICompElement.prototype.hide = function(){\r\n      if(!this.hidden){\r\n          this.hideElement();\r\n          var i,len = this.elements.length;\r\n          for( i = 0; i < len; i+=1 ){\r\n              if(this.elements[i]){\r\n                  this.elements[i].hide();\r\n              }\r\n          }\r\n      }\r\n  }; */\n\n\n  ICompElement.prototype.prepareFrame = function (num) {\n    this._mdf = false;\n    this.prepareRenderableFrame(num);\n    this.prepareProperties(num, this.isInRange);\n\n    if (!this.isInRange && !this.data.xt) {\n      return;\n    }\n\n    if (!this.tm._placeholder) {\n      var timeRemapped = this.tm.v;\n\n      if (timeRemapped === this.data.op) {\n        timeRemapped = this.data.op - 1;\n      }\n\n      this.renderedFrame = timeRemapped;\n    } else {\n      this.renderedFrame = num / this.data.sr;\n    }\n\n    var i;\n    var len = this.elements.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(this.renderedFrame);\n    } // This iteration needs to be backwards because of how expressions connect between each other\n\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n\n        if (this.elements[i]._mdf) {\n          this._mdf = true;\n        }\n      }\n    }\n  };\n\n  ICompElement.prototype.renderInnerContent = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  ICompElement.prototype.setElements = function (elems) {\n    this.elements = elems;\n  };\n\n  ICompElement.prototype.getElements = function () {\n    return this.elements;\n  };\n\n  ICompElement.prototype.destroyElements = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n  };\n\n  ICompElement.prototype.destroy = function () {\n    this.destroyElements();\n    this.destroyBaseElement();\n  };\n\n  function SVGCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = true;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n\n  SVGCompElement.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function SVGRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.svgElement = createNS('svg');\n    var ariaLabel = '';\n\n    if (config && config.title) {\n      var titleElement = createNS('title');\n      var titleId = createElementID();\n      titleElement.setAttribute('id', titleId);\n      titleElement.textContent = config.title;\n      this.svgElement.appendChild(titleElement);\n      ariaLabel += titleId;\n    }\n\n    if (config && config.description) {\n      var descElement = createNS('desc');\n      var descId = createElementID();\n      descElement.setAttribute('id', descId);\n      descElement.textContent = config.description;\n      this.svgElement.appendChild(descElement);\n      ariaLabel += ' ' + descId;\n    }\n\n    if (ariaLabel) {\n      this.svgElement.setAttribute('aria-labelledby', ariaLabel);\n    }\n\n    var defs = createNS('defs');\n    this.svgElement.appendChild(defs);\n    var maskElement = createNS('g');\n    this.svgElement.appendChild(maskElement);\n    this.layerElement = maskElement;\n    this.renderConfig = {\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      progressiveLoad: config && config.progressiveLoad || false,\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      viewBoxOnly: config && config.viewBoxOnly || false,\n      viewBoxSize: config && config.viewBoxSize || false,\n      className: config && config.className || '',\n      id: config && config.id || '',\n      focusable: config && config.focusable,\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '100%',\n        height: config && config.filterSize && config.filterSize.height || '100%',\n        x: config && config.filterSize && config.filterSize.x || '0%',\n        y: config && config.filterSize && config.filterSize.y || '0%'\n      },\n      width: config && config.width,\n      height: config && config.height\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      defs: defs,\n      renderConfig: this.renderConfig\n    };\n    this.elements = [];\n    this.pendingElements = [];\n    this.destroyed = false;\n    this.rendererType = 'svg';\n  }\n\n  extendPrototype([SVGRendererBase], SVGRenderer);\n\n  SVGRenderer.prototype.createComp = function (data) {\n    return new SVGCompElement(data, this.globalData, this);\n  };\n\n  function CVContextData() {\n    this.saved = [];\n    this.cArrPos = 0;\n    this.cTr = new Matrix();\n    this.cO = 1;\n    var i;\n    var len = 15;\n    this.savedOp = createTypedArray('float32', len);\n\n    for (i = 0; i < len; i += 1) {\n      this.saved[i] = createTypedArray('float32', 16);\n    }\n\n    this._length = len;\n  }\n\n  CVContextData.prototype.duplicate = function () {\n    var newLength = this._length * 2;\n    var currentSavedOp = this.savedOp;\n    this.savedOp = createTypedArray('float32', newLength);\n    this.savedOp.set(currentSavedOp);\n    var i = 0;\n\n    for (i = this._length; i < newLength; i += 1) {\n      this.saved[i] = createTypedArray('float32', 16);\n    }\n\n    this._length = newLength;\n  };\n\n  CVContextData.prototype.reset = function () {\n    this.cArrPos = 0;\n    this.cTr.reset();\n    this.cO = 1;\n  };\n\n  function ShapeTransformManager() {\n    this.sequences = {};\n    this.sequenceList = [];\n    this.transform_key_count = 0;\n  }\n\n  ShapeTransformManager.prototype = {\n    addTransformSequence: function addTransformSequence(transforms) {\n      var i;\n      var len = transforms.length;\n      var key = '_';\n\n      for (i = 0; i < len; i += 1) {\n        key += transforms[i].transform.key + '_';\n      }\n\n      var sequence = this.sequences[key];\n\n      if (!sequence) {\n        sequence = {\n          transforms: [].concat(transforms),\n          finalTransform: new Matrix(),\n          _mdf: false\n        };\n        this.sequences[key] = sequence;\n        this.sequenceList.push(sequence);\n      }\n\n      return sequence;\n    },\n    processSequence: function processSequence(sequence, isFirstFrame) {\n      var i = 0;\n      var len = sequence.transforms.length;\n      var _mdf = isFirstFrame;\n\n      while (i < len && !isFirstFrame) {\n        if (sequence.transforms[i].transform.mProps._mdf) {\n          _mdf = true;\n          break;\n        }\n\n        i += 1;\n      }\n\n      if (_mdf) {\n        var props;\n        sequence.finalTransform.reset();\n\n        for (i = len - 1; i >= 0; i -= 1) {\n          props = sequence.transforms[i].transform.mProps.v.props;\n          sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]);\n        }\n      }\n\n      sequence._mdf = _mdf;\n    },\n    processSequences: function processSequences(isFirstFrame) {\n      var i;\n      var len = this.sequenceList.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.processSequence(this.sequenceList[i], isFirstFrame);\n      }\n    },\n    getNewKey: function getNewKey() {\n      this.transform_key_count += 1;\n      return '_' + this.transform_key_count;\n    }\n  };\n\n  function CVEffects() {}\n\n  CVEffects.prototype.renderFrame = function () {};\n\n  function CVMaskElement(data, element) {\n    this.data = data;\n    this.element = element;\n    this.masksProperties = this.data.masksProperties || [];\n    this.viewData = createSizedArray(this.masksProperties.length);\n    var i;\n    var len = this.masksProperties.length;\n    var hasMasks = false;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        hasMasks = true;\n      }\n\n      this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n    }\n\n    this.hasMasks = hasMasks;\n\n    if (hasMasks) {\n      this.element.addRenderableComponent(this);\n    }\n  }\n\n  CVMaskElement.prototype.renderFrame = function () {\n    if (!this.hasMasks) {\n      return;\n    }\n\n    var transform = this.element.finalTransform.mat;\n    var ctx = this.element.canvasContext;\n    var i;\n    var len = this.masksProperties.length;\n    var pt;\n    var pts;\n    var data;\n    ctx.beginPath();\n\n    for (i = 0; i < len; i += 1) {\n      if (this.masksProperties[i].mode !== 'n') {\n        if (this.masksProperties[i].inv) {\n          ctx.moveTo(0, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, 0);\n          ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n          ctx.lineTo(0, this.element.globalData.compSize.h);\n          ctx.lineTo(0, 0);\n        }\n\n        data = this.viewData[i].v;\n        pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n        ctx.moveTo(pt[0], pt[1]);\n        var j;\n        var jLen = data._length;\n\n        for (j = 1; j < jLen; j += 1) {\n          pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n          ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n        }\n\n        pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n        ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n      }\n    }\n\n    this.element.globalData.renderer.save(true);\n    ctx.clip();\n  };\n\n  CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n\n  CVMaskElement.prototype.destroy = function () {\n    this.element = null;\n  };\n\n  function CVBaseElement() {}\n\n  CVBaseElement.prototype = {\n    createElements: function createElements() {},\n    initRendererElement: function initRendererElement() {},\n    createContainerElements: function createContainerElements() {\n      this.canvasContext = this.globalData.canvasContext;\n      this.renderableEffectsManager = new CVEffects(this);\n    },\n    createContent: function createContent() {},\n    setBlendMode: function setBlendMode() {\n      var globalData = this.globalData;\n\n      if (globalData.blendMode !== this.data.bm) {\n        globalData.blendMode = this.data.bm;\n        var blendModeValue = getBlendMode(this.data.bm);\n        globalData.canvasContext.globalCompositeOperation = blendModeValue;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new CVMaskElement(this.data, this);\n    },\n    hideElement: function hideElement() {\n      if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n        this.hidden = true;\n      }\n    },\n    showElement: function showElement() {\n      if (this.isInRange && !this.isTransparent) {\n        this.hidden = false;\n        this._isFirstFrame = true;\n        this.maskManager._isFirstFrame = true;\n      }\n    },\n    renderFrame: function renderFrame() {\n      if (this.hidden || this.data.hd) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.setBlendMode();\n      var forceRealStack = this.data.ty === 0;\n      this.globalData.renderer.save(forceRealStack);\n      this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n      this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n      this.renderInnerContent();\n      this.globalData.renderer.restore(forceRealStack);\n\n      if (this.maskManager.hasMasks) {\n        this.globalData.renderer.restore(true);\n      }\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.canvasContext = null;\n      this.data = null;\n      this.globalData = null;\n      this.maskManager.destroy();\n    },\n    mHelper: new Matrix()\n  };\n  CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n  CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n\n  function CVShapeData(element, data, styles, transformsManager) {\n    this.styledShapes = [];\n    this.tr = [0, 0, 0, 0, 0, 0];\n    var ty = 4;\n\n    if (data.ty === 'rc') {\n      ty = 5;\n    } else if (data.ty === 'el') {\n      ty = 6;\n    } else if (data.ty === 'sr') {\n      ty = 7;\n    }\n\n    this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n    var i;\n    var len = styles.length;\n    var styledShape;\n\n    for (i = 0; i < len; i += 1) {\n      if (!styles[i].closed) {\n        styledShape = {\n          transforms: transformsManager.addTransformSequence(styles[i].transforms),\n          trNodes: []\n        };\n        this.styledShapes.push(styledShape);\n        styles[i].elements.push(styledShape);\n      }\n    }\n  }\n\n  CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n\n  function CVShapeElement(data, globalData, comp) {\n    this.shapes = [];\n    this.shapesData = data.shapes;\n    this.stylesList = [];\n    this.itemsData = [];\n    this.prevViewData = [];\n    this.shapeModifiers = [];\n    this.processedElements = [];\n    this.transformsManager = new ShapeTransformManager();\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);\n  CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n  CVShapeElement.prototype.transformHelper = {\n    opacity: 1,\n    _opMdf: false\n  };\n  CVShapeElement.prototype.dashResetter = [];\n\n  CVShapeElement.prototype.createContent = function () {\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n  };\n\n  CVShapeElement.prototype.createStyleElement = function (data, transforms) {\n    var styleElem = {\n      data: data,\n      type: data.ty,\n      preTransforms: this.transformsManager.addTransformSequence(transforms),\n      transforms: [],\n      elements: [],\n      closed: data.hd === true\n    };\n    var elementData = {};\n\n    if (data.ty === 'fl' || data.ty === 'st') {\n      elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n\n      if (!elementData.c.k) {\n        styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';\n      }\n    } else if (data.ty === 'gf' || data.ty === 'gs') {\n      elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n      elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n      elementData.h = PropertyFactory.getProp(this, data.h || {\n        k: 0\n      }, 0, 0.01, this);\n      elementData.a = PropertyFactory.getProp(this, data.a || {\n        k: 0\n      }, 0, degToRads, this);\n      elementData.g = new GradientProperty(this, data.g, this);\n    }\n\n    elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n\n    if (data.ty === 'st' || data.ty === 'gs') {\n      styleElem.lc = lineCapEnum[data.lc || 2];\n      styleElem.lj = lineJoinEnum[data.lj || 2];\n\n      if (data.lj == 1) {\n        // eslint-disable-line eqeqeq\n        styleElem.ml = data.ml;\n      }\n\n      elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n\n      if (!elementData.w.k) {\n        styleElem.wi = elementData.w.v;\n      }\n\n      if (data.d) {\n        var d = new DashProperty(this, data.d, 'canvas', this);\n        elementData.d = d;\n\n        if (!elementData.d.k) {\n          styleElem.da = elementData.d.dashArray;\n          styleElem[\"do\"] = elementData.d.dashoffset[0];\n        }\n      }\n    } else {\n      styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';\n    }\n\n    this.stylesList.push(styleElem);\n    elementData.style = styleElem;\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createGroupElement = function () {\n    var elementData = {\n      it: [],\n      prevViewData: []\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createTransformElement = function (data) {\n    var elementData = {\n      transform: {\n        opacity: 1,\n        _opMdf: false,\n        key: this.transformsManager.getNewKey(),\n        op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n        mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n      }\n    };\n    return elementData;\n  };\n\n  CVShapeElement.prototype.createShapeElement = function (data) {\n    var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n    this.shapes.push(elementData);\n    this.addShapeToModifiers(elementData);\n    return elementData;\n  };\n\n  CVShapeElement.prototype.reloadShapes = function () {\n    this._isFirstFrame = true;\n    var i;\n    var len = this.itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.prevViewData[i] = this.itemsData[i];\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n    len = this.dynamicProperties.length;\n\n    for (i = 0; i < len; i += 1) {\n      this.dynamicProperties[i].getValue();\n    }\n\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n  };\n\n  CVShapeElement.prototype.addTransformToStyleList = function (transform) {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.push(transform);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.removeTransformFromStyleList = function () {\n    var i;\n    var len = this.stylesList.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (!this.stylesList[i].closed) {\n        this.stylesList[i].transforms.pop();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.closeStyles = function (styles) {\n    var i;\n    var len = styles.length;\n\n    for (i = 0; i < len; i += 1) {\n      styles[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {\n    var i;\n    var len = arr.length - 1;\n    var j;\n    var jLen;\n    var ownStyles = [];\n    var ownModifiers = [];\n    var processedPos;\n    var modifier;\n    var currentTransform;\n    var ownTransforms = [].concat(transforms);\n\n    for (i = len; i >= 0; i -= 1) {\n      processedPos = this.searchProcessedElement(arr[i]);\n\n      if (!processedPos) {\n        arr[i]._shouldRender = shouldRender;\n      } else {\n        itemsData[i] = prevViewData[processedPos - 1];\n      }\n\n      if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {\n        if (!processedPos) {\n          itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n        } else {\n          itemsData[i].style.closed = false;\n        }\n\n        ownStyles.push(itemsData[i].style);\n      } else if (arr[i].ty === 'gr') {\n        if (!processedPos) {\n          itemsData[i] = this.createGroupElement(arr[i]);\n        } else {\n          jLen = itemsData[i].it.length;\n\n          for (j = 0; j < jLen; j += 1) {\n            itemsData[i].prevViewData[j] = itemsData[i].it[j];\n          }\n        }\n\n        this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n      } else if (arr[i].ty === 'tr') {\n        if (!processedPos) {\n          currentTransform = this.createTransformElement(arr[i]);\n          itemsData[i] = currentTransform;\n        }\n\n        ownTransforms.push(itemsData[i]);\n        this.addTransformToStyleList(itemsData[i]);\n      } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {\n        if (!processedPos) {\n          itemsData[i] = this.createShapeElement(arr[i]);\n        }\n      } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          modifier.init(this, arr[i]);\n          itemsData[i] = modifier;\n          this.shapeModifiers.push(modifier);\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = false;\n        }\n\n        ownModifiers.push(modifier);\n      } else if (arr[i].ty === 'rp') {\n        if (!processedPos) {\n          modifier = ShapeModifiers.getModifier(arr[i].ty);\n          itemsData[i] = modifier;\n          modifier.init(this, arr, i, itemsData);\n          this.shapeModifiers.push(modifier);\n          shouldRender = false;\n        } else {\n          modifier = itemsData[i];\n          modifier.closed = true;\n        }\n\n        ownModifiers.push(modifier);\n      }\n\n      this.addProcessedElement(arr[i], i + 1);\n    }\n\n    this.removeTransformFromStyleList();\n    this.closeStyles(ownStyles);\n    len = ownModifiers.length;\n\n    for (i = 0; i < len; i += 1) {\n      ownModifiers[i].closed = true;\n    }\n  };\n\n  CVShapeElement.prototype.renderInnerContent = function () {\n    this.transformHelper.opacity = 1;\n    this.transformHelper._opMdf = false;\n    this.renderModifiers();\n    this.transformsManager.processSequences(this._isFirstFrame);\n    this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n  };\n\n  CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {\n    if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n      groupTransform.opacity = parentTransform.opacity;\n      groupTransform.opacity *= groupTransform.op.v;\n      groupTransform._opMdf = true;\n    }\n  };\n\n  CVShapeElement.prototype.drawLayer = function () {\n    var i;\n    var len = this.stylesList.length;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var elems;\n    var nodes;\n    var renderer = this.globalData.renderer;\n    var ctx = this.globalData.canvasContext;\n    var type;\n    var currentStyle;\n\n    for (i = 0; i < len; i += 1) {\n      currentStyle = this.stylesList[i];\n      type = currentStyle.type; // Skipping style when\n      // Stroke width equals 0\n      // style should not be rendered (extra unused repeaters)\n      // current opacity equals 0\n      // global opacity equals 0\n\n      if (!((type === 'st' || type === 'gs') && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n        renderer.save();\n        elems = currentStyle.elements;\n\n        if (type === 'st' || type === 'gs') {\n          ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;\n          ctx.lineWidth = currentStyle.wi;\n          ctx.lineCap = currentStyle.lc;\n          ctx.lineJoin = currentStyle.lj;\n          ctx.miterLimit = currentStyle.ml || 0;\n        } else {\n          ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;\n        }\n\n        renderer.ctxOpacity(currentStyle.coOp);\n\n        if (type !== 'st' && type !== 'gs') {\n          ctx.beginPath();\n        }\n\n        renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n        jLen = elems.length;\n\n        for (j = 0; j < jLen; j += 1) {\n          if (type === 'st' || type === 'gs') {\n            ctx.beginPath();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(currentStyle.da);\n              ctx.lineDashOffset = currentStyle[\"do\"];\n            }\n          }\n\n          nodes = elems[j].trNodes;\n          kLen = nodes.length;\n\n          for (k = 0; k < kLen; k += 1) {\n            if (nodes[k].t === 'm') {\n              ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n            } else if (nodes[k].t === 'c') {\n              ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);\n            } else {\n              ctx.closePath();\n            }\n          }\n\n          if (type === 'st' || type === 'gs') {\n            ctx.stroke();\n\n            if (currentStyle.da) {\n              ctx.setLineDash(this.dashResetter);\n            }\n          }\n        }\n\n        if (type !== 'st' && type !== 'gs') {\n          ctx.fill(currentStyle.r);\n        }\n\n        renderer.restore();\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {\n    var i;\n    var len = items.length - 1;\n    var groupTransform;\n    groupTransform = parentTransform;\n\n    for (i = len; i >= 0; i -= 1) {\n      if (items[i].ty === 'tr') {\n        groupTransform = data[i].transform;\n        this.renderShapeTransform(parentTransform, groupTransform);\n      } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {\n        this.renderPath(items[i], data[i]);\n      } else if (items[i].ty === 'fl') {\n        this.renderFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'st') {\n        this.renderStroke(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {\n        this.renderGradientFill(items[i], data[i], groupTransform);\n      } else if (items[i].ty === 'gr') {\n        this.renderShape(groupTransform, items[i].it, data[i].it);\n      } else if (items[i].ty === 'tm') {//\n      }\n    }\n\n    if (isMain) {\n      this.drawLayer();\n    }\n  };\n\n  CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {\n    if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n      var shapeNodes = styledShape.trNodes;\n      var paths = shape.paths;\n      var i;\n      var len;\n      var j;\n      var jLen = paths._length;\n      shapeNodes.length = 0;\n      var groupTransformMat = styledShape.transforms.finalTransform;\n\n      for (j = 0; j < jLen; j += 1) {\n        var pathNodes = paths.shapes[j];\n\n        if (pathNodes && pathNodes.v) {\n          len = pathNodes._length;\n\n          for (i = 1; i < len; i += 1) {\n            if (i === 1) {\n              shapeNodes.push({\n                t: 'm',\n                p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n              });\n            }\n\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n            });\n          }\n\n          if (len === 1) {\n            shapeNodes.push({\n              t: 'm',\n              p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n            });\n          }\n\n          if (pathNodes.c && len) {\n            shapeNodes.push({\n              t: 'c',\n              pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n            });\n            shapeNodes.push({\n              t: 'z'\n            });\n          }\n        }\n      }\n\n      styledShape.trNodes = shapeNodes;\n    }\n  };\n\n  CVShapeElement.prototype.renderPath = function (pathData, itemData) {\n    if (pathData.hd !== true && pathData._shouldRender) {\n      var i;\n      var len = itemData.styledShapes.length;\n\n      for (i = 0; i < len; i += 1) {\n        this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n      }\n    }\n  };\n\n  CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n  };\n\n  CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var grd;\n\n    if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n      var ctx = this.globalData.canvasContext;\n      var pt1 = itemData.s.v;\n      var pt2 = itemData.e.v;\n\n      if (styleData.t === 1) {\n        grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n      } else {\n        var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n        var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n        var percent = itemData.h.v;\n\n        if (percent >= 1) {\n          percent = 0.99;\n        } else if (percent <= -1) {\n          percent = -0.99;\n        }\n\n        var dist = rad * percent;\n        var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n        var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n        grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n      }\n\n      var i;\n      var len = styleData.g.p;\n      var cValues = itemData.g.c;\n      var opacity = 1;\n\n      for (i = 0; i < len; i += 1) {\n        if (itemData.g._hasOpacity && itemData.g._collapsable) {\n          opacity = itemData.g.o[i * 2 + 1];\n        }\n\n        grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');\n      }\n\n      styleElem.grd = grd;\n    }\n\n    styleElem.coOp = itemData.o.v * groupTransform.opacity;\n  };\n\n  CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {\n    var styleElem = itemData.style;\n    var d = itemData.d;\n\n    if (d && (d._mdf || this._isFirstFrame)) {\n      styleElem.da = d.dashArray;\n      styleElem[\"do\"] = d.dashoffset[0];\n    }\n\n    if (itemData.c._mdf || this._isFirstFrame) {\n      styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';\n    }\n\n    if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n      styleElem.coOp = itemData.o.v * groupTransform.opacity;\n    }\n\n    if (itemData.w._mdf || this._isFirstFrame) {\n      styleElem.wi = itemData.w.v;\n    }\n  };\n\n  CVShapeElement.prototype.destroy = function () {\n    this.shapesData = null;\n    this.globalData = null;\n    this.canvasContext = null;\n    this.stylesList.length = 0;\n    this.itemsData.length = 0;\n  };\n\n  function CVTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.yOffset = 0;\n    this.fillColorAnim = false;\n    this.strokeColorAnim = false;\n    this.strokeWidthAnim = false;\n    this.stroke = false;\n    this.fill = false;\n    this.justifyOffset = 0;\n    this.currentRender = null;\n    this.renderType = 'canvas';\n    this.values = {\n      fill: 'rgba(0,0,0,0)',\n      stroke: 'rgba(0,0,0,0)',\n      sWidth: 0,\n      fValue: ''\n    };\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement], CVTextElement);\n  CVTextElement.prototype.tHelper = createTag('canvas').getContext('2d');\n\n  CVTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var hasFill = false;\n\n    if (documentData.fc) {\n      hasFill = true;\n      this.values.fill = this.buildColor(documentData.fc);\n    } else {\n      this.values.fill = 'rgba(0,0,0,0)';\n    }\n\n    this.fill = hasFill;\n    var hasStroke = false;\n\n    if (documentData.sc) {\n      hasStroke = true;\n      this.values.stroke = this.buildColor(documentData.sc);\n      this.values.sWidth = documentData.sw;\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n    var i;\n    var len;\n    var letters = documentData.l;\n    var matrixHelper = this.mHelper;\n    this.stroke = hasStroke;\n    this.values.fValue = documentData.finalSize + 'px ' + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n    len = documentData.finalText.length; // this.tHelper.font = this.values.fValue;\n\n    var charData;\n    var shapeData;\n    var k;\n    var kLen;\n    var shapes;\n    var j;\n    var jLen;\n    var pathNodes;\n    var commands;\n    var pathArr;\n    var singleShape = this.data.singleShape;\n    var trackingOffset = documentData.tr * 0.001 * documentData.finalSize;\n    var xPos = 0;\n    var yPos = 0;\n    var firstLine = true;\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n      shapeData = charData && charData.data || {};\n      matrixHelper.reset();\n\n      if (singleShape && letters[i].n) {\n        xPos = -trackingOffset;\n        yPos += documentData.yOffset;\n        yPos += firstLine ? 1 : 0;\n        firstLine = false;\n      }\n\n      shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n      jLen = shapes.length;\n      matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n\n      if (singleShape) {\n        this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n      }\n\n      commands = createSizedArray(jLen - 1);\n      var commandsCounter = 0;\n\n      for (j = 0; j < jLen; j += 1) {\n        if (shapes[j].ty === 'sh') {\n          kLen = shapes[j].ks.k.i.length;\n          pathNodes = shapes[j].ks.k;\n          pathArr = [];\n\n          for (k = 1; k < kLen; k += 1) {\n            if (k === 1) {\n              pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n            }\n\n            pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0));\n          }\n\n          pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0));\n          commands[commandsCounter] = pathArr;\n          commandsCounter += 1;\n        }\n      }\n\n      if (singleShape) {\n        xPos += letters[i].l;\n        xPos += trackingOffset;\n      }\n\n      if (this.textSpans[cnt]) {\n        this.textSpans[cnt].elem = commands;\n      } else {\n        this.textSpans[cnt] = {\n          elem: commands\n        };\n      }\n\n      cnt += 1;\n    }\n  };\n\n  CVTextElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.font = this.values.fValue;\n    ctx.lineCap = 'butt';\n    ctx.lineJoin = 'miter';\n    ctx.miterLimit = 4;\n\n    if (!this.data.singleShape) {\n      this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n    }\n\n    var i;\n    var len;\n    var j;\n    var jLen;\n    var k;\n    var kLen;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var lastFill = null;\n    var lastStroke = null;\n    var lastStrokeW = null;\n    var commands;\n    var pathArr;\n\n    for (i = 0; i < len; i += 1) {\n      if (!letters[i].n) {\n        renderedLetter = renderedLetters[i];\n\n        if (renderedLetter) {\n          this.globalData.renderer.save();\n          this.globalData.renderer.ctxTransform(renderedLetter.p);\n          this.globalData.renderer.ctxOpacity(renderedLetter.o);\n        }\n\n        if (this.fill) {\n          if (renderedLetter && renderedLetter.fc) {\n            if (lastFill !== renderedLetter.fc) {\n              lastFill = renderedLetter.fc;\n              ctx.fillStyle = renderedLetter.fc;\n            }\n          } else if (lastFill !== this.values.fill) {\n            lastFill = this.values.fill;\n            ctx.fillStyle = this.values.fill;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          this.globalData.canvasContext.fill(); /// ctx.fillText(this.textSpans[i].val,0,0);\n        }\n\n        if (this.stroke) {\n          if (renderedLetter && renderedLetter.sw) {\n            if (lastStrokeW !== renderedLetter.sw) {\n              lastStrokeW = renderedLetter.sw;\n              ctx.lineWidth = renderedLetter.sw;\n            }\n          } else if (lastStrokeW !== this.values.sWidth) {\n            lastStrokeW = this.values.sWidth;\n            ctx.lineWidth = this.values.sWidth;\n          }\n\n          if (renderedLetter && renderedLetter.sc) {\n            if (lastStroke !== renderedLetter.sc) {\n              lastStroke = renderedLetter.sc;\n              ctx.strokeStyle = renderedLetter.sc;\n            }\n          } else if (lastStroke !== this.values.stroke) {\n            lastStroke = this.values.stroke;\n            ctx.strokeStyle = this.values.stroke;\n          }\n\n          commands = this.textSpans[i].elem;\n          jLen = commands.length;\n          this.globalData.canvasContext.beginPath();\n\n          for (j = 0; j < jLen; j += 1) {\n            pathArr = commands[j];\n            kLen = pathArr.length;\n            this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n\n            for (k = 2; k < kLen; k += 6) {\n              this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]);\n            }\n          }\n\n          this.globalData.canvasContext.closePath();\n          this.globalData.canvasContext.stroke(); /// ctx.strokeText(letters[i].val,0,0);\n        }\n\n        if (renderedLetter) {\n          this.globalData.renderer.restore();\n        }\n      }\n    }\n  };\n\n  function CVImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.img = globalData.imageLoader.getAsset(this.assetData);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVImageElement);\n  CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVImageElement.prototype.createContent = function () {\n    if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n      var canvas = createTag('canvas');\n      canvas.width = this.assetData.w;\n      canvas.height = this.assetData.h;\n      var ctx = canvas.getContext('2d');\n      var imgW = this.img.width;\n      var imgH = this.img.height;\n      var imgRel = imgW / imgH;\n      var canvasRel = this.assetData.w / this.assetData.h;\n      var widthCrop;\n      var heightCrop;\n      var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n\n      if (imgRel > canvasRel && par === 'xMidYMid slice' || imgRel < canvasRel && par !== 'xMidYMid slice') {\n        heightCrop = imgH;\n        widthCrop = heightCrop * canvasRel;\n      } else {\n        widthCrop = imgW;\n        heightCrop = widthCrop / canvasRel;\n      }\n\n      ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h);\n      this.img = canvas;\n    }\n  };\n\n  CVImageElement.prototype.renderInnerContent = function () {\n    this.canvasContext.drawImage(this.img, 0, 0);\n  };\n\n  CVImageElement.prototype.destroy = function () {\n    this.img = null;\n  };\n\n  function CVSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);\n  CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n  CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n\n  CVSolidElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.fillStyle = this.data.sc;\n    ctx.fillRect(0, 0, this.data.sw, this.data.sh); //\n  };\n\n  function CanvasRendererBase(animationItem, config) {\n    this.animationItem = animationItem;\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: config && config.context || null,\n      progressiveLoad: config && config.progressiveLoad || false,\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      className: config && config.className || '',\n      id: config && config.id || ''\n    };\n    this.renderConfig.dpr = config && config.dpr || 1;\n\n    if (this.animationItem.wrapper) {\n      this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n    }\n\n    this.renderedFrame = -1;\n    this.globalData = {\n      frameNum: -1,\n      _mdf: false,\n      renderConfig: this.renderConfig,\n      currentGlobalAlpha: -1\n    };\n    this.contextData = new CVContextData();\n    this.elements = [];\n    this.pendingElements = [];\n    this.transformMat = new Matrix();\n    this.completeLayers = false;\n    this.rendererType = 'canvas';\n  }\n\n  extendPrototype([BaseRenderer], CanvasRendererBase);\n\n  CanvasRendererBase.prototype.createShape = function (data) {\n    return new CVShapeElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createText = function (data) {\n    return new CVTextElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createImage = function (data) {\n    return new CVImageElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createSolid = function (data) {\n    return new CVSolidElement(data, this.globalData, this);\n  };\n\n  CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  CanvasRendererBase.prototype.ctxTransform = function (props) {\n    if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n      return;\n    }\n\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n      return;\n    }\n\n    this.transformMat.cloneFromProps(props);\n    var cProps = this.contextData.cTr.props;\n    this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]); // this.contextData.cTr.transform(props[0],props[1],props[2],props[3],props[4],props[5],props[6],props[7],props[8],props[9],props[10],props[11],props[12],props[13],props[14],props[15]);\n\n    this.contextData.cTr.cloneFromProps(this.transformMat.props);\n    var trProps = this.contextData.cTr.props;\n    this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n  };\n\n  CanvasRendererBase.prototype.ctxOpacity = function (op) {\n    /* if(op === 1){\r\n          return;\r\n      } */\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n      this.globalData.currentGlobalAlpha = this.contextData.cO;\n      return;\n    }\n\n    this.contextData.cO *= op < 0 ? 0 : op;\n\n    if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n      this.canvasContext.globalAlpha = this.contextData.cO;\n      this.globalData.currentGlobalAlpha = this.contextData.cO;\n    }\n  };\n\n  CanvasRendererBase.prototype.reset = function () {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    this.contextData.reset();\n  };\n\n  CanvasRendererBase.prototype.save = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.save();\n      return;\n    }\n\n    if (actionFlag) {\n      this.canvasContext.save();\n    }\n\n    var props = this.contextData.cTr.props;\n\n    if (this.contextData._length <= this.contextData.cArrPos) {\n      this.contextData.duplicate();\n    }\n\n    var i;\n    var arr = this.contextData.saved[this.contextData.cArrPos];\n\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = props[i];\n    }\n\n    this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n    this.contextData.cArrPos += 1;\n  };\n\n  CanvasRendererBase.prototype.restore = function (actionFlag) {\n    if (!this.renderConfig.clearCanvas) {\n      this.canvasContext.restore();\n      return;\n    }\n\n    if (actionFlag) {\n      this.canvasContext.restore();\n      this.globalData.blendMode = 'source-over';\n    }\n\n    this.contextData.cArrPos -= 1;\n    var popped = this.contextData.saved[this.contextData.cArrPos];\n    var i;\n    var arr = this.contextData.cTr.props;\n\n    for (i = 0; i < 16; i += 1) {\n      arr[i] = popped[i];\n    }\n\n    this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n    popped = this.contextData.savedOp[this.contextData.cArrPos];\n    this.contextData.cO = popped;\n\n    if (this.globalData.currentGlobalAlpha !== popped) {\n      this.canvasContext.globalAlpha = popped;\n      this.globalData.currentGlobalAlpha = popped;\n    }\n  };\n\n  CanvasRendererBase.prototype.configAnimation = function (animData) {\n    if (this.animationItem.wrapper) {\n      this.animationItem.container = createTag('canvas');\n      var containerStyle = this.animationItem.container.style;\n      containerStyle.width = '100%';\n      containerStyle.height = '100%';\n      var origin = '0px 0px 0px';\n      containerStyle.transformOrigin = origin;\n      containerStyle.mozTransformOrigin = origin;\n      containerStyle.webkitTransformOrigin = origin;\n      containerStyle['-webkit-transform'] = origin;\n      containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n      this.animationItem.wrapper.appendChild(this.animationItem.container);\n      this.canvasContext = this.animationItem.container.getContext('2d');\n\n      if (this.renderConfig.className) {\n        this.animationItem.container.setAttribute('class', this.renderConfig.className);\n      }\n\n      if (this.renderConfig.id) {\n        this.animationItem.container.setAttribute('id', this.renderConfig.id);\n      }\n    } else {\n      this.canvasContext = this.renderConfig.context;\n    }\n\n    this.data = animData;\n    this.layers = animData.layers;\n    this.transformCanvas = {\n      w: animData.w,\n      h: animData.h,\n      sx: 0,\n      sy: 0,\n      tx: 0,\n      ty: 0\n    };\n    this.setupGlobalData(animData, document.body);\n    this.globalData.canvasContext = this.canvasContext;\n    this.globalData.renderer = this;\n    this.globalData.isDashed = false;\n    this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n    this.globalData.transformCanvas = this.transformCanvas;\n    this.elements = createSizedArray(animData.layers.length);\n    this.updateContainerSize();\n  };\n\n  CanvasRendererBase.prototype.updateContainerSize = function () {\n    this.reset();\n    var elementWidth;\n    var elementHeight;\n\n    if (this.animationItem.wrapper && this.animationItem.container) {\n      elementWidth = this.animationItem.wrapper.offsetWidth;\n      elementHeight = this.animationItem.wrapper.offsetHeight;\n      this.animationItem.container.setAttribute('width', elementWidth * this.renderConfig.dpr);\n      this.animationItem.container.setAttribute('height', elementHeight * this.renderConfig.dpr);\n    } else {\n      elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n      elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n    }\n\n    var elementRel;\n    var animationRel;\n\n    if (this.renderConfig.preserveAspectRatio.indexOf('meet') !== -1 || this.renderConfig.preserveAspectRatio.indexOf('slice') !== -1) {\n      var par = this.renderConfig.preserveAspectRatio.split(' ');\n      var fillType = par[1] || 'meet';\n      var pos = par[0] || 'xMidYMid';\n      var xPos = pos.substr(0, 4);\n      var yPos = pos.substr(4);\n      elementRel = elementWidth / elementHeight;\n      animationRel = this.transformCanvas.w / this.transformCanvas.h;\n\n      if (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice') {\n        this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      } else {\n        this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n        this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      }\n\n      if (xPos === 'xMid' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n      } else if (xPos === 'xMax' && (animationRel < elementRel && fillType === 'meet' || animationRel > elementRel && fillType === 'slice')) {\n        this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.tx = 0;\n      }\n\n      if (yPos === 'YMid' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n      } else if (yPos === 'YMax' && (animationRel > elementRel && fillType === 'meet' || animationRel < elementRel && fillType === 'slice')) {\n        this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n      } else {\n        this.transformCanvas.ty = 0;\n      }\n    } else if (this.renderConfig.preserveAspectRatio === 'none') {\n      this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n      this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    } else {\n      this.transformCanvas.sx = this.renderConfig.dpr;\n      this.transformCanvas.sy = this.renderConfig.dpr;\n      this.transformCanvas.tx = 0;\n      this.transformCanvas.ty = 0;\n    }\n\n    this.transformCanvas.props = [this.transformCanvas.sx, 0, 0, 0, 0, this.transformCanvas.sy, 0, 0, 0, 0, 1, 0, this.transformCanvas.tx, this.transformCanvas.ty, 0, 1];\n    /* var i, len = this.elements.length;\r\n      for(i=0;i<len;i+=1){\r\n          if(this.elements[i] && this.elements[i].data.ty === 0){\r\n              this.elements[i].resize(this.globalData.transformCanvas);\r\n          }\r\n      } */\n\n    this.ctxTransform(this.transformCanvas.props);\n    this.canvasContext.beginPath();\n    this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n    this.canvasContext.closePath();\n    this.canvasContext.clip();\n    this.renderFrame(this.renderedFrame, true);\n  };\n\n  CanvasRendererBase.prototype.destroy = function () {\n    if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.elements.length = 0;\n    this.globalData.canvasContext = null;\n    this.animationItem.container = null;\n    this.destroyed = true;\n  };\n\n  CanvasRendererBase.prototype.renderFrame = function (num, forceRender) {\n    if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n      return;\n    }\n\n    this.renderedFrame = num;\n    this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n    this.globalData.frameId += 1;\n    this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n    this.globalData.projectInterface.currentFrame = num; // console.log('--------');\n    // console.log('NEW: ',num);\n\n    var i;\n    var len = this.layers.length;\n\n    if (!this.completeLayers) {\n      this.checkLayers(num);\n    }\n\n    for (i = 0; i < len; i += 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].prepareFrame(num - this.layers[i].st);\n      }\n    }\n\n    if (this.globalData._mdf) {\n      if (this.renderConfig.clearCanvas === true) {\n        this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n      } else {\n        this.save();\n      }\n\n      for (i = len - 1; i >= 0; i -= 1) {\n        if (this.completeLayers || this.elements[i]) {\n          this.elements[i].renderFrame();\n        }\n      }\n\n      if (this.renderConfig.clearCanvas !== true) {\n        this.restore();\n      }\n    }\n  };\n\n  CanvasRendererBase.prototype.buildItem = function (pos) {\n    var elements = this.elements;\n\n    if (elements[pos] || this.layers[pos].ty === 99) {\n      return;\n    }\n\n    var element = this.createItem(this.layers[pos], this, this.globalData);\n    elements[pos] = element;\n    element.initExpressions();\n    /* if(this.layers[pos].ty === 0){\r\n          element.resize(this.globalData.transformCanvas);\r\n      } */\n  };\n\n  CanvasRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  CanvasRendererBase.prototype.hide = function () {\n    this.animationItem.container.style.display = 'none';\n  };\n\n  CanvasRendererBase.prototype.show = function () {\n    this.animationItem.container.style.display = 'block';\n  };\n\n  function CVCompElement(data, globalData, comp) {\n    this.completeLayers = false;\n    this.layers = data.layers;\n    this.pendingElements = [];\n    this.elements = createSizedArray(this.layers.length);\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n\n  CVCompElement.prototype.renderInnerContent = function () {\n    var ctx = this.canvasContext;\n    ctx.beginPath();\n    ctx.moveTo(0, 0);\n    ctx.lineTo(this.data.w, 0);\n    ctx.lineTo(this.data.w, this.data.h);\n    ctx.lineTo(0, this.data.h);\n    ctx.lineTo(0, 0);\n    ctx.clip();\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.completeLayers || this.elements[i]) {\n        this.elements[i].renderFrame();\n      }\n    }\n  };\n\n  CVCompElement.prototype.destroy = function () {\n    var i;\n    var len = this.layers.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      if (this.elements[i]) {\n        this.elements[i].destroy();\n      }\n    }\n\n    this.layers = null;\n    this.elements = null;\n  };\n\n  CVCompElement.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function CanvasRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.renderConfig = {\n      clearCanvas: config && config.clearCanvas !== undefined ? config.clearCanvas : true,\n      context: config && config.context || null,\n      progressiveLoad: config && config.progressiveLoad || false,\n      preserveAspectRatio: config && config.preserveAspectRatio || 'xMidYMid meet',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      contentVisibility: config && config.contentVisibility || 'visible',\n      className: config && config.className || '',\n      id: config && config.id || ''\n    };\n    this.renderConfig.dpr = config && config.dpr || 1;\n\n    if (this.animationItem.wrapper) {\n      this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n    }\n\n    this.renderedFrame = -1;\n    this.globalData = {\n      frameNum: -1,\n      _mdf: false,\n      renderConfig: this.renderConfig,\n      currentGlobalAlpha: -1\n    };\n    this.contextData = new CVContextData();\n    this.elements = [];\n    this.pendingElements = [];\n    this.transformMat = new Matrix();\n    this.completeLayers = false;\n    this.rendererType = 'canvas';\n  }\n\n  extendPrototype([CanvasRendererBase], CanvasRenderer);\n\n  CanvasRenderer.prototype.createComp = function (data) {\n    return new CVCompElement(data, this.globalData, this);\n  };\n\n  function HBaseElement() {}\n\n  HBaseElement.prototype = {\n    checkBlendMode: function checkBlendMode() {},\n    initRendererElement: function initRendererElement() {\n      this.baseElement = createTag(this.data.tg || 'div');\n\n      if (this.data.hasMask) {\n        this.svgElement = createNS('svg');\n        this.layerElement = createNS('g');\n        this.maskedElement = this.layerElement;\n        this.svgElement.appendChild(this.layerElement);\n        this.baseElement.appendChild(this.svgElement);\n      } else {\n        this.layerElement = this.baseElement;\n      }\n\n      styleDiv(this.baseElement);\n    },\n    createContainerElements: function createContainerElements() {\n      this.renderableEffectsManager = new CVEffects(this);\n      this.transformedElement = this.baseElement;\n      this.maskedElement = this.layerElement;\n\n      if (this.data.ln) {\n        this.layerElement.setAttribute('id', this.data.ln);\n      }\n\n      if (this.data.cl) {\n        this.layerElement.setAttribute('class', this.data.cl);\n      }\n\n      if (this.data.bm !== 0) {\n        this.setBlendMode();\n      }\n    },\n    renderElement: function renderElement() {\n      var transformedElementStyle = this.transformedElement ? this.transformedElement.style : {};\n\n      if (this.finalTransform._matMdf) {\n        var matrixValue = this.finalTransform.mat.toCSS();\n        transformedElementStyle.transform = matrixValue;\n        transformedElementStyle.webkitTransform = matrixValue;\n      }\n\n      if (this.finalTransform._opMdf) {\n        transformedElementStyle.opacity = this.finalTransform.mProp.o.v;\n      }\n    },\n    renderFrame: function renderFrame() {\n      // If it is exported as hidden (data.hd === true) no need to render\n      // If it is not visible no need to render\n      if (this.data.hd || this.hidden) {\n        return;\n      }\n\n      this.renderTransform();\n      this.renderRenderable();\n      this.renderElement();\n      this.renderInnerContent();\n\n      if (this._isFirstFrame) {\n        this._isFirstFrame = false;\n      }\n    },\n    destroy: function destroy() {\n      this.layerElement = null;\n      this.transformedElement = null;\n\n      if (this.matteElement) {\n        this.matteElement = null;\n      }\n\n      if (this.maskManager) {\n        this.maskManager.destroy();\n        this.maskManager = null;\n      }\n    },\n    createRenderableComponents: function createRenderableComponents() {\n      this.maskManager = new MaskElement(this.data, this, this.globalData);\n    },\n    addEffects: function addEffects() {},\n    setMatte: function setMatte() {}\n  };\n  HBaseElement.prototype.getBaseElement = SVGBaseElement.prototype.getBaseElement;\n  HBaseElement.prototype.destroyBaseElement = HBaseElement.prototype.destroy;\n  HBaseElement.prototype.buildElementParenting = BaseRenderer.prototype.buildElementParenting;\n\n  function HSolidElement(data, globalData, comp) {\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement], HSolidElement);\n\n  HSolidElement.prototype.createContent = function () {\n    var rect;\n\n    if (this.data.hasMask) {\n      rect = createNS('rect');\n      rect.setAttribute('width', this.data.sw);\n      rect.setAttribute('height', this.data.sh);\n      rect.setAttribute('fill', this.data.sc);\n      this.svgElement.setAttribute('width', this.data.sw);\n      this.svgElement.setAttribute('height', this.data.sh);\n    } else {\n      rect = createTag('div');\n      rect.style.width = this.data.sw + 'px';\n      rect.style.height = this.data.sh + 'px';\n      rect.style.backgroundColor = this.data.sc;\n    }\n\n    this.layerElement.appendChild(rect);\n  };\n\n  function HShapeElement(data, globalData, comp) {\n    // List of drawable elements\n    this.shapes = []; // Full shape data\n\n    this.shapesData = data.shapes; // List of styles that will be applied to shapes\n\n    this.stylesList = []; // List of modifiers that will be applied to shapes\n\n    this.shapeModifiers = []; // List of items in shape tree\n\n    this.itemsData = []; // List of items in previous shape tree\n\n    this.processedElements = []; // List of animated components\n\n    this.animatedContents = [];\n    this.shapesContainer = createNS('g');\n    this.initElement(data, globalData, comp); // Moving any property that doesn't get too much access after initialization because of v8 way of handling more than 10 properties.\n    // List of elements that have been created\n\n    this.prevViewData = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n  }\n\n  extendPrototype([BaseElement, TransformElement, HSolidElement, SVGShapeElement, HBaseElement, HierarchyElement, FrameElement, RenderableElement], HShapeElement);\n  HShapeElement.prototype._renderShapeFrame = HShapeElement.prototype.renderInnerContent;\n\n  HShapeElement.prototype.createContent = function () {\n    var cont;\n    this.baseElement.style.fontSize = 0;\n\n    if (this.data.hasMask) {\n      this.layerElement.appendChild(this.shapesContainer);\n      cont = this.svgElement;\n    } else {\n      cont = createNS('svg');\n      var size = this.comp.data ? this.comp.data : this.globalData.compSize;\n      cont.setAttribute('width', size.w);\n      cont.setAttribute('height', size.h);\n      cont.appendChild(this.shapesContainer);\n      this.layerElement.appendChild(cont);\n    }\n\n    this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.shapesContainer, 0, [], true);\n    this.filterUniqueShapes();\n    this.shapeCont = cont;\n  };\n\n  HShapeElement.prototype.getTransformedPoint = function (transformers, point) {\n    var i;\n    var len = transformers.length;\n\n    for (i = 0; i < len; i += 1) {\n      point = transformers[i].mProps.v.applyToPointArray(point[0], point[1], 0);\n    }\n\n    return point;\n  };\n\n  HShapeElement.prototype.calculateShapeBoundingBox = function (item, boundingBox) {\n    var shape = item.sh.v;\n    var transformers = item.transformers;\n    var i;\n    var len = shape._length;\n    var vPoint;\n    var oPoint;\n    var nextIPoint;\n    var nextVPoint;\n\n    if (len <= 1) {\n      return;\n    }\n\n    for (i = 0; i < len - 1; i += 1) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[i + 1]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[i + 1]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n\n    if (shape.c) {\n      vPoint = this.getTransformedPoint(transformers, shape.v[i]);\n      oPoint = this.getTransformedPoint(transformers, shape.o[i]);\n      nextIPoint = this.getTransformedPoint(transformers, shape.i[0]);\n      nextVPoint = this.getTransformedPoint(transformers, shape.v[0]);\n      this.checkBounds(vPoint, oPoint, nextIPoint, nextVPoint, boundingBox);\n    }\n  };\n\n  HShapeElement.prototype.checkBounds = function (vPoint, oPoint, nextIPoint, nextVPoint, boundingBox) {\n    this.getBoundsOfCurve(vPoint, oPoint, nextIPoint, nextVPoint);\n    var bounds = this.shapeBoundingBox;\n    boundingBox.x = bmMin(bounds.left, boundingBox.x);\n    boundingBox.xMax = bmMax(bounds.right, boundingBox.xMax);\n    boundingBox.y = bmMin(bounds.top, boundingBox.y);\n    boundingBox.yMax = bmMax(bounds.bottom, boundingBox.yMax);\n  };\n\n  HShapeElement.prototype.shapeBoundingBox = {\n    left: 0,\n    right: 0,\n    top: 0,\n    bottom: 0\n  };\n  HShapeElement.prototype.tempBoundingBox = {\n    x: 0,\n    xMax: 0,\n    y: 0,\n    yMax: 0,\n    width: 0,\n    height: 0\n  };\n\n  HShapeElement.prototype.getBoundsOfCurve = function (p0, p1, p2, p3) {\n    var bounds = [[p0[0], p3[0]], [p0[1], p3[1]]];\n\n    for (var a, b, c, t, b2ac, t1, t2, i = 0; i < 2; ++i) {\n      // eslint-disable-line no-plusplus\n      b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n      a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n      c = 3 * p1[i] - 3 * p0[i];\n      b |= 0; // eslint-disable-line no-bitwise\n\n      a |= 0; // eslint-disable-line no-bitwise\n\n      c |= 0; // eslint-disable-line no-bitwise\n\n      if (a === 0 && b === 0) {//\n      } else if (a === 0) {\n        t = -c / b;\n\n        if (t > 0 && t < 1) {\n          bounds[i].push(this.calculateF(t, p0, p1, p2, p3, i));\n        }\n      } else {\n        b2ac = b * b - 4 * c * a;\n\n        if (b2ac >= 0) {\n          t1 = (-b + bmSqrt(b2ac)) / (2 * a);\n          if (t1 > 0 && t1 < 1) bounds[i].push(this.calculateF(t1, p0, p1, p2, p3, i));\n          t2 = (-b - bmSqrt(b2ac)) / (2 * a);\n          if (t2 > 0 && t2 < 1) bounds[i].push(this.calculateF(t2, p0, p1, p2, p3, i));\n        }\n      }\n    }\n\n    this.shapeBoundingBox.left = bmMin.apply(null, bounds[0]);\n    this.shapeBoundingBox.top = bmMin.apply(null, bounds[1]);\n    this.shapeBoundingBox.right = bmMax.apply(null, bounds[0]);\n    this.shapeBoundingBox.bottom = bmMax.apply(null, bounds[1]);\n  };\n\n  HShapeElement.prototype.calculateF = function (t, p0, p1, p2, p3, i) {\n    return bmPow(1 - t, 3) * p0[i] + 3 * bmPow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * bmPow(t, 2) * p2[i] + bmPow(t, 3) * p3[i];\n  };\n\n  HShapeElement.prototype.calculateBoundingBox = function (itemsData, boundingBox) {\n    var i;\n    var len = itemsData.length;\n\n    for (i = 0; i < len; i += 1) {\n      if (itemsData[i] && itemsData[i].sh) {\n        this.calculateShapeBoundingBox(itemsData[i], boundingBox);\n      } else if (itemsData[i] && itemsData[i].it) {\n        this.calculateBoundingBox(itemsData[i].it, boundingBox);\n      } else if (itemsData[i] && itemsData[i].style && itemsData[i].w) {\n        this.expandStrokeBoundingBox(itemsData[i].w, boundingBox);\n      }\n    }\n  };\n\n  HShapeElement.prototype.expandStrokeBoundingBox = function (widthProperty, boundingBox) {\n    var width = 0;\n\n    if (widthProperty.keyframes) {\n      for (var i = 0; i < widthProperty.keyframes.length; i += 1) {\n        var kfw = widthProperty.keyframes[i].s;\n\n        if (kfw > width) {\n          width = kfw;\n        }\n      }\n\n      width *= widthProperty.mult;\n    } else {\n      width = widthProperty.v * widthProperty.mult;\n    }\n\n    boundingBox.x -= width;\n    boundingBox.xMax += width;\n    boundingBox.y -= width;\n    boundingBox.yMax += width;\n  };\n\n  HShapeElement.prototype.currentBoxContains = function (box) {\n    return this.currentBBox.x <= box.x && this.currentBBox.y <= box.y && this.currentBBox.width + this.currentBBox.x >= box.x + box.width && this.currentBBox.height + this.currentBBox.y >= box.y + box.height;\n  };\n\n  HShapeElement.prototype.renderInnerContent = function () {\n    this._renderShapeFrame();\n\n    if (!this.hidden && (this._isFirstFrame || this._mdf)) {\n      var tempBoundingBox = this.tempBoundingBox;\n      var max = 999999;\n      tempBoundingBox.x = max;\n      tempBoundingBox.xMax = -max;\n      tempBoundingBox.y = max;\n      tempBoundingBox.yMax = -max;\n      this.calculateBoundingBox(this.itemsData, tempBoundingBox);\n      tempBoundingBox.width = tempBoundingBox.xMax < tempBoundingBox.x ? 0 : tempBoundingBox.xMax - tempBoundingBox.x;\n      tempBoundingBox.height = tempBoundingBox.yMax < tempBoundingBox.y ? 0 : tempBoundingBox.yMax - tempBoundingBox.y; // var tempBoundingBox = this.shapeCont.getBBox();\n\n      if (this.currentBoxContains(tempBoundingBox)) {\n        return;\n      }\n\n      var changed = false;\n\n      if (this.currentBBox.w !== tempBoundingBox.width) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.shapeCont.setAttribute('width', tempBoundingBox.width);\n        changed = true;\n      }\n\n      if (this.currentBBox.h !== tempBoundingBox.height) {\n        this.currentBBox.h = tempBoundingBox.height;\n        this.shapeCont.setAttribute('height', tempBoundingBox.height);\n        changed = true;\n      }\n\n      if (changed || this.currentBBox.x !== tempBoundingBox.x || this.currentBBox.y !== tempBoundingBox.y) {\n        this.currentBBox.w = tempBoundingBox.width;\n        this.currentBBox.h = tempBoundingBox.height;\n        this.currentBBox.x = tempBoundingBox.x;\n        this.currentBBox.y = tempBoundingBox.y;\n        this.shapeCont.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        var shapeStyle = this.shapeCont.style;\n        var shapeTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        shapeStyle.transform = shapeTransform;\n        shapeStyle.webkitTransform = shapeTransform;\n      }\n    }\n  };\n\n  function HTextElement(data, globalData, comp) {\n    this.textSpans = [];\n    this.textPaths = [];\n    this.currentBBox = {\n      x: 999999,\n      y: -999999,\n      h: 0,\n      w: 0\n    };\n    this.renderType = 'svg';\n    this.isMasked = false;\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement], HTextElement);\n\n  HTextElement.prototype.createContent = function () {\n    this.isMasked = this.checkMasks();\n\n    if (this.isMasked) {\n      this.renderType = 'svg';\n      this.compW = this.comp.data.w;\n      this.compH = this.comp.data.h;\n      this.svgElement.setAttribute('width', this.compW);\n      this.svgElement.setAttribute('height', this.compH);\n      var g = createNS('g');\n      this.maskedElement.appendChild(g);\n      this.innerElem = g;\n    } else {\n      this.renderType = 'html';\n      this.innerElem = this.layerElement;\n    }\n\n    this.checkParenting();\n  };\n\n  HTextElement.prototype.buildNewText = function () {\n    var documentData = this.textProperty.currentData;\n    this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n    var innerElemStyle = this.innerElem.style;\n    var textColor = documentData.fc ? this.buildColor(documentData.fc) : 'rgba(0,0,0,0)';\n    innerElemStyle.fill = textColor;\n    innerElemStyle.color = textColor;\n\n    if (documentData.sc) {\n      innerElemStyle.stroke = this.buildColor(documentData.sc);\n      innerElemStyle.strokeWidth = documentData.sw + 'px';\n    }\n\n    var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n\n    if (!this.globalData.fontManager.chars) {\n      innerElemStyle.fontSize = documentData.finalSize + 'px';\n      innerElemStyle.lineHeight = documentData.finalSize + 'px';\n\n      if (fontData.fClass) {\n        this.innerElem.className = fontData.fClass;\n      } else {\n        innerElemStyle.fontFamily = fontData.fFamily;\n        var fWeight = documentData.fWeight;\n        var fStyle = documentData.fStyle;\n        innerElemStyle.fontStyle = fStyle;\n        innerElemStyle.fontWeight = fWeight;\n      }\n    }\n\n    var i;\n    var len;\n    var letters = documentData.l;\n    len = letters.length;\n    var tSpan;\n    var tParent;\n    var tCont;\n    var matrixHelper = this.mHelper;\n    var shapes;\n    var shapeStr = '';\n    var cnt = 0;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.globalData.fontManager.chars) {\n        if (!this.textPaths[cnt]) {\n          tSpan = createNS('path');\n          tSpan.setAttribute('stroke-linecap', lineCapEnum[1]);\n          tSpan.setAttribute('stroke-linejoin', lineJoinEnum[2]);\n          tSpan.setAttribute('stroke-miterlimit', '4');\n        } else {\n          tSpan = this.textPaths[cnt];\n        }\n\n        if (!this.isMasked) {\n          if (this.textSpans[cnt]) {\n            tParent = this.textSpans[cnt];\n            tCont = tParent.children[0];\n          } else {\n            tParent = createTag('div');\n            tParent.style.lineHeight = 0;\n            tCont = createNS('svg');\n            tCont.appendChild(tSpan);\n            styleDiv(tParent);\n          }\n        }\n      } else if (!this.isMasked) {\n        if (this.textSpans[cnt]) {\n          tParent = this.textSpans[cnt];\n          tSpan = this.textPaths[cnt];\n        } else {\n          tParent = createTag('span');\n          styleDiv(tParent);\n          tSpan = createTag('span');\n          styleDiv(tSpan);\n          tParent.appendChild(tSpan);\n        }\n      } else {\n        tSpan = this.textPaths[cnt] ? this.textPaths[cnt] : createNS('text');\n      } // tSpan.setAttribute('visibility', 'hidden');\n\n\n      if (this.globalData.fontManager.chars) {\n        var charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily);\n        var shapeData;\n\n        if (charData) {\n          shapeData = charData.data;\n        } else {\n          shapeData = null;\n        }\n\n        matrixHelper.reset();\n\n        if (shapeData && shapeData.shapes && shapeData.shapes.length) {\n          shapes = shapeData.shapes[0].it;\n          matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n          shapeStr = this.createPathShape(matrixHelper, shapes);\n          tSpan.setAttribute('d', shapeStr);\n        }\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent);\n\n          if (shapeData && shapeData.shapes) {\n            // document.body.appendChild is needed to get exact measure of shape\n            document.body.appendChild(tCont);\n            var boundingBox = tCont.getBBox();\n            tCont.setAttribute('width', boundingBox.width + 2);\n            tCont.setAttribute('height', boundingBox.height + 2);\n            tCont.setAttribute('viewBox', boundingBox.x - 1 + ' ' + (boundingBox.y - 1) + ' ' + (boundingBox.width + 2) + ' ' + (boundingBox.height + 2));\n            var tContStyle = tCont.style;\n            var tContTranslation = 'translate(' + (boundingBox.x - 1) + 'px,' + (boundingBox.y - 1) + 'px)';\n            tContStyle.transform = tContTranslation;\n            tContStyle.webkitTransform = tContTranslation;\n            letters[i].yOffset = boundingBox.y - 1;\n          } else {\n            tCont.setAttribute('width', 1);\n            tCont.setAttribute('height', 1);\n          }\n\n          tParent.appendChild(tCont);\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } else {\n        tSpan.textContent = letters[i].val;\n        tSpan.setAttributeNS('http://www.w3.org/XML/1998/namespace', 'xml:space', 'preserve');\n\n        if (!this.isMasked) {\n          this.innerElem.appendChild(tParent); //\n\n          var tStyle = tSpan.style;\n          var tSpanTranslation = 'translate3d(0,' + -documentData.finalSize / 1.2 + 'px,0)';\n          tStyle.transform = tSpanTranslation;\n          tStyle.webkitTransform = tSpanTranslation;\n        } else {\n          this.innerElem.appendChild(tSpan);\n        }\n      } //\n\n\n      if (!this.isMasked) {\n        this.textSpans[cnt] = tParent;\n      } else {\n        this.textSpans[cnt] = tSpan;\n      }\n\n      this.textSpans[cnt].style.display = 'block';\n      this.textPaths[cnt] = tSpan;\n      cnt += 1;\n    }\n\n    while (cnt < this.textSpans.length) {\n      this.textSpans[cnt].style.display = 'none';\n      cnt += 1;\n    }\n  };\n\n  HTextElement.prototype.renderInnerContent = function () {\n    var svgStyle;\n\n    if (this.data.singleShape) {\n      if (!this._isFirstFrame && !this.lettersChangedFlag) {\n        return;\n      }\n\n      if (this.isMasked && this.finalTransform._matMdf) {\n        // Todo Benchmark if using this is better than getBBox\n        this.svgElement.setAttribute('viewBox', -this.finalTransform.mProp.p.v[0] + ' ' + -this.finalTransform.mProp.p.v[1] + ' ' + this.compW + ' ' + this.compH);\n        svgStyle = this.svgElement.style;\n        var translation = 'translate(' + -this.finalTransform.mProp.p.v[0] + 'px,' + -this.finalTransform.mProp.p.v[1] + 'px)';\n        svgStyle.transform = translation;\n        svgStyle.webkitTransform = translation;\n      }\n    }\n\n    this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n\n    if (!this.lettersChangedFlag && !this.textAnimator.lettersChangedFlag) {\n      return;\n    }\n\n    var i;\n    var len;\n    var count = 0;\n    var renderedLetters = this.textAnimator.renderedLetters;\n    var letters = this.textProperty.currentData.l;\n    len = letters.length;\n    var renderedLetter;\n    var textSpan;\n    var textPath;\n\n    for (i = 0; i < len; i += 1) {\n      if (letters[i].n) {\n        count += 1;\n      } else {\n        textSpan = this.textSpans[i];\n        textPath = this.textPaths[i];\n        renderedLetter = renderedLetters[count];\n        count += 1;\n\n        if (renderedLetter._mdf.m) {\n          if (!this.isMasked) {\n            textSpan.style.webkitTransform = renderedLetter.m;\n            textSpan.style.transform = renderedLetter.m;\n          } else {\n            textSpan.setAttribute('transform', renderedLetter.m);\n          }\n        } /// /textSpan.setAttribute('opacity',renderedLetter.o);\n\n\n        textSpan.style.opacity = renderedLetter.o;\n\n        if (renderedLetter.sw && renderedLetter._mdf.sw) {\n          textPath.setAttribute('stroke-width', renderedLetter.sw);\n        }\n\n        if (renderedLetter.sc && renderedLetter._mdf.sc) {\n          textPath.setAttribute('stroke', renderedLetter.sc);\n        }\n\n        if (renderedLetter.fc && renderedLetter._mdf.fc) {\n          textPath.setAttribute('fill', renderedLetter.fc);\n          textPath.style.color = renderedLetter.fc;\n        }\n      }\n    }\n\n    if (this.innerElem.getBBox && !this.hidden && (this._isFirstFrame || this._mdf)) {\n      var boundingBox = this.innerElem.getBBox();\n\n      if (this.currentBBox.w !== boundingBox.width) {\n        this.currentBBox.w = boundingBox.width;\n        this.svgElement.setAttribute('width', boundingBox.width);\n      }\n\n      if (this.currentBBox.h !== boundingBox.height) {\n        this.currentBBox.h = boundingBox.height;\n        this.svgElement.setAttribute('height', boundingBox.height);\n      }\n\n      var margin = 1;\n\n      if (this.currentBBox.w !== boundingBox.width + margin * 2 || this.currentBBox.h !== boundingBox.height + margin * 2 || this.currentBBox.x !== boundingBox.x - margin || this.currentBBox.y !== boundingBox.y - margin) {\n        this.currentBBox.w = boundingBox.width + margin * 2;\n        this.currentBBox.h = boundingBox.height + margin * 2;\n        this.currentBBox.x = boundingBox.x - margin;\n        this.currentBBox.y = boundingBox.y - margin;\n        this.svgElement.setAttribute('viewBox', this.currentBBox.x + ' ' + this.currentBBox.y + ' ' + this.currentBBox.w + ' ' + this.currentBBox.h);\n        svgStyle = this.svgElement.style;\n        var svgTransform = 'translate(' + this.currentBBox.x + 'px,' + this.currentBBox.y + 'px)';\n        svgStyle.transform = svgTransform;\n        svgStyle.webkitTransform = svgTransform;\n      }\n    }\n  };\n\n  function HCameraElement(data, globalData, comp) {\n    this.initFrame();\n    this.initBaseData(data, globalData, comp);\n    this.initHierarchy();\n    var getProp = PropertyFactory.getProp;\n    this.pe = getProp(this, data.pe, 0, 0, this);\n\n    if (data.ks.p.s) {\n      this.px = getProp(this, data.ks.p.x, 1, 0, this);\n      this.py = getProp(this, data.ks.p.y, 1, 0, this);\n      this.pz = getProp(this, data.ks.p.z, 1, 0, this);\n    } else {\n      this.p = getProp(this, data.ks.p, 1, 0, this);\n    }\n\n    if (data.ks.a) {\n      this.a = getProp(this, data.ks.a, 1, 0, this);\n    }\n\n    if (data.ks.or.k.length && data.ks.or.k[0].to) {\n      var i;\n      var len = data.ks.or.k.length;\n\n      for (i = 0; i < len; i += 1) {\n        data.ks.or.k[i].to = null;\n        data.ks.or.k[i].ti = null;\n      }\n    }\n\n    this.or = getProp(this, data.ks.or, 1, degToRads, this);\n    this.or.sh = true;\n    this.rx = getProp(this, data.ks.rx, 0, degToRads, this);\n    this.ry = getProp(this, data.ks.ry, 0, degToRads, this);\n    this.rz = getProp(this, data.ks.rz, 0, degToRads, this);\n    this.mat = new Matrix();\n    this._prevMat = new Matrix();\n    this._isFirstFrame = true; // TODO: find a better way to make the HCamera element to be compatible with the LayerInterface and TransformInterface.\n\n    this.finalTransform = {\n      mProp: this\n    };\n  }\n\n  extendPrototype([BaseElement, FrameElement, HierarchyElement], HCameraElement);\n\n  HCameraElement.prototype.setup = function () {\n    var i;\n    var len = this.comp.threeDElements.length;\n    var comp;\n    var perspectiveStyle;\n    var containerStyle;\n\n    for (i = 0; i < len; i += 1) {\n      // [perspectiveElem,container]\n      comp = this.comp.threeDElements[i];\n\n      if (comp.type === '3d') {\n        perspectiveStyle = comp.perspectiveElem.style;\n        containerStyle = comp.container.style;\n        var perspective = this.pe.v + 'px';\n        var origin = '0px 0px 0px';\n        var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n        perspectiveStyle.perspective = perspective;\n        perspectiveStyle.webkitPerspective = perspective;\n        containerStyle.transformOrigin = origin;\n        containerStyle.mozTransformOrigin = origin;\n        containerStyle.webkitTransformOrigin = origin;\n        perspectiveStyle.transform = matrix;\n        perspectiveStyle.webkitTransform = matrix;\n      }\n    }\n  };\n\n  HCameraElement.prototype.createElements = function () {};\n\n  HCameraElement.prototype.hide = function () {};\n\n  HCameraElement.prototype.renderFrame = function () {\n    var _mdf = this._isFirstFrame;\n    var i;\n    var len;\n\n    if (this.hierarchy) {\n      len = this.hierarchy.length;\n\n      for (i = 0; i < len; i += 1) {\n        _mdf = this.hierarchy[i].finalTransform.mProp._mdf || _mdf;\n      }\n    }\n\n    if (_mdf || this.pe._mdf || this.p && this.p._mdf || this.px && (this.px._mdf || this.py._mdf || this.pz._mdf) || this.rx._mdf || this.ry._mdf || this.rz._mdf || this.or._mdf || this.a && this.a._mdf) {\n      this.mat.reset();\n\n      if (this.hierarchy) {\n        len = this.hierarchy.length - 1;\n\n        for (i = len; i >= 0; i -= 1) {\n          var mTransf = this.hierarchy[i].finalTransform.mProp;\n          this.mat.translate(-mTransf.p.v[0], -mTransf.p.v[1], mTransf.p.v[2]);\n          this.mat.rotateX(-mTransf.or.v[0]).rotateY(-mTransf.or.v[1]).rotateZ(mTransf.or.v[2]);\n          this.mat.rotateX(-mTransf.rx.v).rotateY(-mTransf.ry.v).rotateZ(mTransf.rz.v);\n          this.mat.scale(1 / mTransf.s.v[0], 1 / mTransf.s.v[1], 1 / mTransf.s.v[2]);\n          this.mat.translate(mTransf.a.v[0], mTransf.a.v[1], mTransf.a.v[2]);\n        }\n      }\n\n      if (this.p) {\n        this.mat.translate(-this.p.v[0], -this.p.v[1], this.p.v[2]);\n      } else {\n        this.mat.translate(-this.px.v, -this.py.v, this.pz.v);\n      }\n\n      if (this.a) {\n        var diffVector;\n\n        if (this.p) {\n          diffVector = [this.p.v[0] - this.a.v[0], this.p.v[1] - this.a.v[1], this.p.v[2] - this.a.v[2]];\n        } else {\n          diffVector = [this.px.v - this.a.v[0], this.py.v - this.a.v[1], this.pz.v - this.a.v[2]];\n        }\n\n        var mag = Math.sqrt(Math.pow(diffVector[0], 2) + Math.pow(diffVector[1], 2) + Math.pow(diffVector[2], 2)); // var lookDir = getNormalizedPoint(getDiffVector(this.a.v,this.p.v));\n\n        var lookDir = [diffVector[0] / mag, diffVector[1] / mag, diffVector[2] / mag];\n        var lookLengthOnXZ = Math.sqrt(lookDir[2] * lookDir[2] + lookDir[0] * lookDir[0]);\n        var mRotationX = Math.atan2(lookDir[1], lookLengthOnXZ);\n        var mRotationY = Math.atan2(lookDir[0], -lookDir[2]);\n        this.mat.rotateY(mRotationY).rotateX(-mRotationX);\n      }\n\n      this.mat.rotateX(-this.rx.v).rotateY(-this.ry.v).rotateZ(this.rz.v);\n      this.mat.rotateX(-this.or.v[0]).rotateY(-this.or.v[1]).rotateZ(this.or.v[2]);\n      this.mat.translate(this.globalData.compSize.w / 2, this.globalData.compSize.h / 2, 0);\n      this.mat.translate(0, 0, this.pe.v);\n      var hasMatrixChanged = !this._prevMat.equals(this.mat);\n\n      if ((hasMatrixChanged || this.pe._mdf) && this.comp.threeDElements) {\n        len = this.comp.threeDElements.length;\n        var comp;\n        var perspectiveStyle;\n        var containerStyle;\n\n        for (i = 0; i < len; i += 1) {\n          comp = this.comp.threeDElements[i];\n\n          if (comp.type === '3d') {\n            if (hasMatrixChanged) {\n              var matValue = this.mat.toCSS();\n              containerStyle = comp.container.style;\n              containerStyle.transform = matValue;\n              containerStyle.webkitTransform = matValue;\n            }\n\n            if (this.pe._mdf) {\n              perspectiveStyle = comp.perspectiveElem.style;\n              perspectiveStyle.perspective = this.pe.v + 'px';\n              perspectiveStyle.webkitPerspective = this.pe.v + 'px';\n            }\n          }\n        }\n\n        this.mat.clone(this._prevMat);\n      }\n    }\n\n    this._isFirstFrame = false;\n  };\n\n  HCameraElement.prototype.prepareFrame = function (num) {\n    this.prepareProperties(num, true);\n  };\n\n  HCameraElement.prototype.destroy = function () {};\n\n  HCameraElement.prototype.getBaseElement = function () {\n    return null;\n  };\n\n  function HImageElement(data, globalData, comp) {\n    this.assetData = globalData.getAssetData(data.refId);\n    this.initElement(data, globalData, comp);\n  }\n\n  extendPrototype([BaseElement, TransformElement, HBaseElement, HSolidElement, HierarchyElement, FrameElement, RenderableElement], HImageElement);\n\n  HImageElement.prototype.createContent = function () {\n    var assetPath = this.globalData.getAssetsPath(this.assetData);\n    var img = new Image();\n\n    if (this.data.hasMask) {\n      this.imageElem = createNS('image');\n      this.imageElem.setAttribute('width', this.assetData.w + 'px');\n      this.imageElem.setAttribute('height', this.assetData.h + 'px');\n      this.imageElem.setAttributeNS('http://www.w3.org/1999/xlink', 'href', assetPath);\n      this.layerElement.appendChild(this.imageElem);\n      this.baseElement.setAttribute('width', this.assetData.w);\n      this.baseElement.setAttribute('height', this.assetData.h);\n    } else {\n      this.layerElement.appendChild(img);\n    }\n\n    img.crossOrigin = 'anonymous';\n    img.src = assetPath;\n\n    if (this.data.ln) {\n      this.baseElement.setAttribute('id', this.data.ln);\n    }\n  };\n\n  function HybridRendererBase(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      }\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([BaseRenderer], HybridRendererBase);\n  HybridRendererBase.prototype.buildItem = SVGRenderer.prototype.buildItem;\n\n  HybridRendererBase.prototype.checkPendingElements = function () {\n    while (this.pendingElements.length) {\n      var element = this.pendingElements.pop();\n      element.checkParenting();\n    }\n  };\n\n  HybridRendererBase.prototype.appendElementInPos = function (element, pos) {\n    var newDOMElement = element.getBaseElement();\n\n    if (!newDOMElement) {\n      return;\n    }\n\n    var layer = this.layers[pos];\n\n    if (!layer.ddd || !this.supports3d) {\n      if (this.threeDElements) {\n        this.addTo3dContainer(newDOMElement, pos);\n      } else {\n        var i = 0;\n        var nextDOMElement;\n        var nextLayer;\n        var tmpDOMElement;\n\n        while (i < pos) {\n          if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement) {\n            nextLayer = this.elements[i];\n            tmpDOMElement = this.layers[i].ddd ? this.getThreeDContainerByPos(i) : nextLayer.getBaseElement();\n            nextDOMElement = tmpDOMElement || nextDOMElement;\n          }\n\n          i += 1;\n        }\n\n        if (nextDOMElement) {\n          if (!layer.ddd || !this.supports3d) {\n            this.layerElement.insertBefore(newDOMElement, nextDOMElement);\n          }\n        } else if (!layer.ddd || !this.supports3d) {\n          this.layerElement.appendChild(newDOMElement);\n        }\n      }\n    } else {\n      this.addTo3dContainer(newDOMElement, pos);\n    }\n  };\n\n  HybridRendererBase.prototype.createShape = function (data) {\n    if (!this.supports3d) {\n      return new SVGShapeElement(data, this.globalData, this);\n    }\n\n    return new HShapeElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createText = function (data) {\n    if (!this.supports3d) {\n      return new SVGTextLottieElement(data, this.globalData, this);\n    }\n\n    return new HTextElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createCamera = function (data) {\n    this.camera = new HCameraElement(data, this.globalData, this);\n    return this.camera;\n  };\n\n  HybridRendererBase.prototype.createImage = function (data) {\n    if (!this.supports3d) {\n      return new IImageElement(data, this.globalData, this);\n    }\n\n    return new HImageElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createSolid = function (data) {\n    if (!this.supports3d) {\n      return new ISolidElement(data, this.globalData, this);\n    }\n\n    return new HSolidElement(data, this.globalData, this);\n  };\n\n  HybridRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n\n  HybridRendererBase.prototype.getThreeDContainerByPos = function (pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (this.threeDElements[i].startPos <= pos && this.threeDElements[i].endPos >= pos) {\n        return this.threeDElements[i].perspectiveElem;\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  HybridRendererBase.prototype.createThreeDContainer = function (pos, type) {\n    var perspectiveElem = createTag('div');\n    var style;\n    var containerStyle;\n    styleDiv(perspectiveElem);\n    var container = createTag('div');\n    styleDiv(container);\n\n    if (type === '3d') {\n      style = perspectiveElem.style;\n      style.width = this.globalData.compSize.w + 'px';\n      style.height = this.globalData.compSize.h + 'px';\n      var center = '50% 50%';\n      style.webkitTransformOrigin = center;\n      style.mozTransformOrigin = center;\n      style.transformOrigin = center;\n      containerStyle = container.style;\n      var matrix = 'matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)';\n      containerStyle.transform = matrix;\n      containerStyle.webkitTransform = matrix;\n    }\n\n    perspectiveElem.appendChild(container); // this.resizerElem.appendChild(perspectiveElem);\n\n    var threeDContainerData = {\n      container: container,\n      perspectiveElem: perspectiveElem,\n      startPos: pos,\n      endPos: pos,\n      type: type\n    };\n    this.threeDElements.push(threeDContainerData);\n    return threeDContainerData;\n  };\n\n  HybridRendererBase.prototype.build3dContainers = function () {\n    var i;\n    var len = this.layers.length;\n    var lastThreeDContainerData;\n    var currentContainer = '';\n\n    for (i = 0; i < len; i += 1) {\n      if (this.layers[i].ddd && this.layers[i].ty !== 3) {\n        if (currentContainer !== '3d') {\n          currentContainer = '3d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '3d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      } else {\n        if (currentContainer !== '2d') {\n          currentContainer = '2d';\n          lastThreeDContainerData = this.createThreeDContainer(i, '2d');\n        }\n\n        lastThreeDContainerData.endPos = Math.max(lastThreeDContainerData.endPos, i);\n      }\n    }\n\n    len = this.threeDElements.length;\n\n    for (i = len - 1; i >= 0; i -= 1) {\n      this.resizerElem.appendChild(this.threeDElements[i].perspectiveElem);\n    }\n  };\n\n  HybridRendererBase.prototype.addTo3dContainer = function (elem, pos) {\n    var i = 0;\n    var len = this.threeDElements.length;\n\n    while (i < len) {\n      if (pos <= this.threeDElements[i].endPos) {\n        var j = this.threeDElements[i].startPos;\n        var nextElement;\n\n        while (j < pos) {\n          if (this.elements[j] && this.elements[j].getBaseElement) {\n            nextElement = this.elements[j].getBaseElement();\n          }\n\n          j += 1;\n        }\n\n        if (nextElement) {\n          this.threeDElements[i].container.insertBefore(elem, nextElement);\n        } else {\n          this.threeDElements[i].container.appendChild(elem);\n        }\n\n        break;\n      }\n\n      i += 1;\n    }\n  };\n\n  HybridRendererBase.prototype.configAnimation = function (animData) {\n    var resizerElem = createTag('div');\n    var wrapper = this.animationItem.wrapper;\n    var style = resizerElem.style;\n    style.width = animData.w + 'px';\n    style.height = animData.h + 'px';\n    this.resizerElem = resizerElem;\n    styleDiv(resizerElem);\n    style.transformStyle = 'flat';\n    style.mozTransformStyle = 'flat';\n    style.webkitTransformStyle = 'flat';\n\n    if (this.renderConfig.className) {\n      resizerElem.setAttribute('class', this.renderConfig.className);\n    }\n\n    wrapper.appendChild(resizerElem);\n    style.overflow = 'hidden';\n    var svg = createNS('svg');\n    svg.setAttribute('width', '1');\n    svg.setAttribute('height', '1');\n    styleDiv(svg);\n    this.resizerElem.appendChild(svg);\n    var defs = createNS('defs');\n    svg.appendChild(defs);\n    this.data = animData; // Mask animation\n\n    this.setupGlobalData(animData, svg);\n    this.globalData.defs = defs;\n    this.layers = animData.layers;\n    this.layerElement = this.resizerElem;\n    this.build3dContainers();\n    this.updateContainerSize();\n  };\n\n  HybridRendererBase.prototype.destroy = function () {\n    if (this.animationItem.wrapper) {\n      this.animationItem.wrapper.innerText = '';\n    }\n\n    this.animationItem.container = null;\n    this.globalData.defs = null;\n    var i;\n    var len = this.layers ? this.layers.length : 0;\n\n    for (i = 0; i < len; i += 1) {\n      this.elements[i].destroy();\n    }\n\n    this.elements.length = 0;\n    this.destroyed = true;\n    this.animationItem = null;\n  };\n\n  HybridRendererBase.prototype.updateContainerSize = function () {\n    var elementWidth = this.animationItem.wrapper.offsetWidth;\n    var elementHeight = this.animationItem.wrapper.offsetHeight;\n    var elementRel = elementWidth / elementHeight;\n    var animationRel = this.globalData.compSize.w / this.globalData.compSize.h;\n    var sx;\n    var sy;\n    var tx;\n    var ty;\n\n    if (animationRel > elementRel) {\n      sx = elementWidth / this.globalData.compSize.w;\n      sy = elementWidth / this.globalData.compSize.w;\n      tx = 0;\n      ty = (elementHeight - this.globalData.compSize.h * (elementWidth / this.globalData.compSize.w)) / 2;\n    } else {\n      sx = elementHeight / this.globalData.compSize.h;\n      sy = elementHeight / this.globalData.compSize.h;\n      tx = (elementWidth - this.globalData.compSize.w * (elementHeight / this.globalData.compSize.h)) / 2;\n      ty = 0;\n    }\n\n    var style = this.resizerElem.style;\n    style.webkitTransform = 'matrix3d(' + sx + ',0,0,0,0,' + sy + ',0,0,0,0,1,0,' + tx + ',' + ty + ',0,1)';\n    style.transform = style.webkitTransform;\n  };\n\n  HybridRendererBase.prototype.renderFrame = SVGRenderer.prototype.renderFrame;\n\n  HybridRendererBase.prototype.hide = function () {\n    this.resizerElem.style.display = 'none';\n  };\n\n  HybridRendererBase.prototype.show = function () {\n    this.resizerElem.style.display = 'block';\n  };\n\n  HybridRendererBase.prototype.initItems = function () {\n    this.buildAllItems();\n\n    if (this.camera) {\n      this.camera.setup();\n    } else {\n      var cWidth = this.globalData.compSize.w;\n      var cHeight = this.globalData.compSize.h;\n      var i;\n      var len = this.threeDElements.length;\n\n      for (i = 0; i < len; i += 1) {\n        var style = this.threeDElements[i].perspectiveElem.style;\n        style.webkitPerspective = Math.sqrt(Math.pow(cWidth, 2) + Math.pow(cHeight, 2)) + 'px';\n        style.perspective = style.webkitPerspective;\n      }\n    }\n  };\n\n  HybridRendererBase.prototype.searchExtraCompositions = function (assets) {\n    var i;\n    var len = assets.length;\n    var floatingContainer = createTag('div');\n\n    for (i = 0; i < len; i += 1) {\n      if (assets[i].xt) {\n        var comp = this.createComp(assets[i], floatingContainer, this.globalData.comp, null);\n        comp.initExpressions();\n        this.globalData.projectInterface.registerComposition(comp);\n      }\n    }\n  };\n\n  function HCompElement(data, globalData, comp) {\n    this.layers = data.layers;\n    this.supports3d = !data.hasMask;\n    this.completeLayers = false;\n    this.pendingElements = [];\n    this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n    this.initElement(data, globalData, comp);\n    this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : {\n      _placeholder: true\n    };\n  }\n\n  extendPrototype([HybridRendererBase, ICompElement, HBaseElement], HCompElement);\n  HCompElement.prototype._createBaseContainerElements = HCompElement.prototype.createContainerElements;\n\n  HCompElement.prototype.createContainerElements = function () {\n    this._createBaseContainerElements(); // divElement.style.clip = 'rect(0px, '+this.data.w+'px, '+this.data.h+'px, 0px)';\n\n\n    if (this.data.hasMask) {\n      this.svgElement.setAttribute('width', this.data.w);\n      this.svgElement.setAttribute('height', this.data.h);\n      this.transformedElement = this.baseElement;\n    } else {\n      this.transformedElement = this.layerElement;\n    }\n  };\n\n  HCompElement.prototype.addTo3dContainer = function (elem, pos) {\n    var j = 0;\n    var nextElement;\n\n    while (j < pos) {\n      if (this.elements[j] && this.elements[j].getBaseElement) {\n        nextElement = this.elements[j].getBaseElement();\n      }\n\n      j += 1;\n    }\n\n    if (nextElement) {\n      this.layerElement.insertBefore(elem, nextElement);\n    } else {\n      this.layerElement.appendChild(elem);\n    }\n  };\n\n  HCompElement.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  function HybridRenderer(animationItem, config) {\n    this.animationItem = animationItem;\n    this.layers = null;\n    this.renderedFrame = -1;\n    this.renderConfig = {\n      className: config && config.className || '',\n      imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || 'xMidYMid slice',\n      hideOnTransparent: !(config && config.hideOnTransparent === false),\n      filterSize: {\n        width: config && config.filterSize && config.filterSize.width || '400%',\n        height: config && config.filterSize && config.filterSize.height || '400%',\n        x: config && config.filterSize && config.filterSize.x || '-100%',\n        y: config && config.filterSize && config.filterSize.y || '-100%'\n      }\n    };\n    this.globalData = {\n      _mdf: false,\n      frameNum: -1,\n      renderConfig: this.renderConfig\n    };\n    this.pendingElements = [];\n    this.elements = [];\n    this.threeDElements = [];\n    this.destroyed = false;\n    this.camera = null;\n    this.supports3d = true;\n    this.rendererType = 'html';\n  }\n\n  extendPrototype([HybridRendererBase], HybridRenderer);\n\n  HybridRenderer.prototype.createComp = function (data) {\n    if (!this.supports3d) {\n      return new SVGCompElement(data, this.globalData, this);\n    }\n\n    return new HCompElement(data, this.globalData, this);\n  };\n\n  var Expressions = function () {\n    var ob = {};\n    ob.initExpressions = initExpressions;\n\n    function initExpressions(animation) {\n      var stackCount = 0;\n      var registers = [];\n\n      function pushExpression() {\n        stackCount += 1;\n      }\n\n      function popExpression() {\n        stackCount -= 1;\n\n        if (stackCount === 0) {\n          releaseInstances();\n        }\n      }\n\n      function registerExpressionProperty(expression) {\n        if (registers.indexOf(expression) === -1) {\n          registers.push(expression);\n        }\n      }\n\n      function releaseInstances() {\n        var i;\n        var len = registers.length;\n\n        for (i = 0; i < len; i += 1) {\n          registers[i].release();\n        }\n\n        registers.length = 0;\n      }\n\n      animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n      animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n      animation.renderer.globalData.pushExpression = pushExpression;\n      animation.renderer.globalData.popExpression = popExpression;\n      animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n    }\n\n    return ob;\n  }();\n\n  function _typeof$1(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof$1 = function _typeof(obj) { return typeof obj; }; } else { _typeof$1 = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof$1(obj); }\n\n  /* eslint-disable */\n\n  /*\r\n   Copyright 2014 David Bau.\r\n\r\n   Permission is hereby granted, free of charge, to any person obtaining\r\n   a copy of this software and associated documentation files (the\r\n   \"Software\"), to deal in the Software without restriction, including\r\n   without limitation the rights to use, copy, modify, merge, publish,\r\n   distribute, sublicense, and/or sell copies of the Software, and to\r\n   permit persons to whom the Software is furnished to do so, subject to\r\n   the following conditions:\r\n\r\n   The above copyright notice and this permission notice shall be\r\n   included in all copies or substantial portions of the Software.\r\n\r\n   THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\n   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\n   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n   */\n  function seedRandom(pool, math) {\n    //\n    // The following constants are related to IEEE 754 limits.\n    //\n    var global = this,\n        width = 256,\n        // each RC4 output is 0 <= x < 256\n    chunks = 6,\n        // at least six RC4 outputs for each double\n    digits = 52,\n        // there are 52 significant digits in a double\n    rngname = 'random',\n        // rngname: name for Math.random and Math.seedrandom\n    startdenom = math.pow(width, chunks),\n        significance = math.pow(2, digits),\n        overflow = significance * 2,\n        mask = width - 1,\n        nodecrypto; // node.js crypto module, initialized at the bottom.\n    //\n    // seedrandom()\n    // This is the seedrandom function described above.\n    //\n\n    function seedrandom(seed, options, callback) {\n      var key = [];\n      options = options === true ? {\n        entropy: true\n      } : options || {}; // Flatten the seed string or build one from local entropy if needed.\n\n      var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); // Use the seed to initialize an ARC4 generator.\n\n      var arc4 = new ARC4(key); // This function returns a random double in [0, 1) that contains\n      // randomness in every bit of the mantissa of the IEEE 754 value.\n\n      var prng = function prng() {\n        var n = arc4.g(chunks),\n            // Start with a numerator n < 2 ^ 48\n        d = startdenom,\n            //   and denominator d = 2 ^ 48.\n        x = 0; //   and no 'extra last byte'.\n\n        while (n < significance) {\n          // Fill up all significant digits by\n          n = (n + x) * width; //   shifting numerator and\n\n          d *= width; //   denominator and generating a\n\n          x = arc4.g(1); //   new least-significant-byte.\n        }\n\n        while (n >= overflow) {\n          // To avoid rounding up, before adding\n          n /= 2; //   last byte, shift everything\n\n          d /= 2; //   right using integer math until\n\n          x >>>= 1; //   we have exactly the desired bits.\n        }\n\n        return (n + x) / d; // Form the number within [0, 1).\n      };\n\n      prng.int32 = function () {\n        return arc4.g(4) | 0;\n      };\n\n      prng.quick = function () {\n        return arc4.g(4) / 0x100000000;\n      };\n\n      prng[\"double\"] = prng; // Mix the randomness into accumulated entropy.\n\n      mixkey(tostring(arc4.S), pool); // Calling convention: what to return as a function of prng, seed, is_math.\n\n      return (options.pass || callback || function (prng, seed, is_math_call, state) {\n        if (state) {\n          // Load the arc4 state from the given state if it has an S array.\n          if (state.S) {\n            copy(state, arc4);\n          } // Only provide the .state method if requested via options.state.\n\n\n          prng.state = function () {\n            return copy(arc4, {});\n          };\n        } // If called as a method of Math (Math.seedrandom()), mutate\n        // Math.random because that is how seedrandom.js has worked since v1.0.\n\n\n        if (is_math_call) {\n          math[rngname] = prng;\n          return seed;\n        } // Otherwise, it is a newer calling convention, so return the\n        // prng directly.\n        else return prng;\n      })(prng, shortseed, 'global' in options ? options.global : this == math, options.state);\n    }\n\n    math['seed' + rngname] = seedrandom; //\n    // ARC4\n    //\n    // An ARC4 implementation.  The constructor takes a key in the form of\n    // an array of at most (width) integers that should be 0 <= x < (width).\n    //\n    // The g(count) method returns a pseudorandom integer that concatenates\n    // the next (count) outputs from ARC4.  Its return value is a number x\n    // that is in the range 0 <= x < (width ^ count).\n    //\n\n    function ARC4(key) {\n      var t,\n          keylen = key.length,\n          me = this,\n          i = 0,\n          j = me.i = me.j = 0,\n          s = me.S = []; // The empty key [] is treated as [0].\n\n      if (!keylen) {\n        key = [keylen++];\n      } // Set up S using the standard key scheduling algorithm.\n\n\n      while (i < width) {\n        s[i] = i++;\n      }\n\n      for (i = 0; i < width; i++) {\n        s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n        s[j] = t;\n      } // The \"g\" method returns the next (count) outputs as one number.\n\n\n      me.g = function (count) {\n        // Using instance members instead of closure state nearly doubles speed.\n        var t,\n            r = 0,\n            i = me.i,\n            j = me.j,\n            s = me.S;\n\n        while (count--) {\n          t = s[i = mask & i + 1];\n          r = r * width + s[mask & (s[i] = s[j = mask & j + t]) + (s[j] = t)];\n        }\n\n        me.i = i;\n        me.j = j;\n        return r; // For robust unpredictability, the function call below automatically\n        // discards an initial batch of values.  This is called RC4-drop[256].\n        // See http://google.com/search?q=rsa+fluhrer+response&btnI\n      };\n    } //\n    // copy()\n    // Copies internal state of ARC4 to or from a plain object.\n    //\n\n\n    function copy(f, t) {\n      t.i = f.i;\n      t.j = f.j;\n      t.S = f.S.slice();\n      return t;\n    } //\n    // flatten()\n    // Converts an object tree to nested arrays of strings.\n    //\n\n\n    function flatten(obj, depth) {\n      var result = [],\n          typ = _typeof$1(obj),\n          prop;\n\n      if (depth && typ == 'object') {\n        for (prop in obj) {\n          try {\n            result.push(flatten(obj[prop], depth - 1));\n          } catch (e) {}\n        }\n      }\n\n      return result.length ? result : typ == 'string' ? obj : obj + '\\0';\n    } //\n    // mixkey()\n    // Mixes a string seed into a key that is an array of integers, and\n    // returns a shortened string seed that is equivalent to the result key.\n    //\n\n\n    function mixkey(seed, key) {\n      var stringseed = seed + '',\n          smear,\n          j = 0;\n\n      while (j < stringseed.length) {\n        key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n      }\n\n      return tostring(key);\n    } //\n    // autoseed()\n    // Returns an object for autoseeding, using window.crypto and Node crypto\n    // module if available.\n    //\n\n\n    function autoseed() {\n      try {\n        if (nodecrypto) {\n          return tostring(nodecrypto.randomBytes(width));\n        }\n\n        var out = new Uint8Array(width);\n        (global.crypto || global.msCrypto).getRandomValues(out);\n        return tostring(out);\n      } catch (e) {\n        var browser = global.navigator,\n            plugins = browser && browser.plugins;\n        return [+new Date(), global, plugins, global.screen, tostring(pool)];\n      }\n    } //\n    // tostring()\n    // Converts an array of charcodes to a string\n    //\n\n\n    function tostring(a) {\n      return String.fromCharCode.apply(0, a);\n    } //\n    // When seedrandom.js is loaded, we immediately mix a few bits\n    // from the built-in RNG into the entropy pool.  Because we do\n    // not want to interfere with deterministic PRNG state later,\n    // seedrandom will not call math.random on its own again after\n    // initialization.\n    //\n\n\n    mixkey(math.random(), pool); //\n    // Nodejs and AMD support: export the implementation as a module using\n    // either convention.\n    //\n    // End anonymous scope, and pass initial values.\n  }\n\n  ;\n\n  function initialize$2(BMMath) {\n    seedRandom([], BMMath);\n  }\n\n  var propTypes = {\n    SHAPE: 'shape'\n  };\n\n  function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n  var ExpressionManager = function () {\n    'use strict';\n\n    var ob = {};\n    var Math = BMMath;\n    var window = null;\n    var document = null;\n    var XMLHttpRequest = null;\n    var fetch = null;\n    var frames = null;\n    initialize$2(BMMath);\n\n    function $bm_isInstanceOfArray(arr) {\n      return arr.constructor === Array || arr.constructor === Float32Array;\n    }\n\n    function isNumerable(tOfV, v) {\n      return tOfV === 'number' || tOfV === 'boolean' || tOfV === 'string' || v instanceof Number;\n    }\n\n    function $bm_neg(a) {\n      var tOfA = _typeof(a);\n\n      if (tOfA === 'number' || tOfA === 'boolean' || a instanceof Number) {\n        return -a;\n      }\n\n      if ($bm_isInstanceOfArray(a)) {\n        var i;\n        var lenA = a.length;\n        var retArr = [];\n\n        for (i = 0; i < lenA; i += 1) {\n          retArr[i] = -a[i];\n        }\n\n        return retArr;\n      }\n\n      if (a.propType) {\n        return a.v;\n      }\n\n      return -a;\n    }\n\n    var easeInBez = BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, 'easeIn').get;\n    var easeOutBez = BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, 'easeOut').get;\n    var easeInOutBez = BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, 'easeInOut').get;\n\n    function sum(a, b) {\n      var tOfA = _typeof(a);\n\n      var tOfB = _typeof(b);\n\n      if (tOfA === 'string' || tOfB === 'string') {\n        return a + b;\n      }\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a + b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] += b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a + b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] + b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    var add = sum;\n\n    function sub(a, b) {\n      var tOfA = _typeof(a);\n\n      var tOfB = _typeof(b);\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        if (tOfA === 'string') {\n          a = parseInt(a, 10);\n        }\n\n        if (tOfB === 'string') {\n          b = parseInt(b, 10);\n        }\n\n        return a - b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        a = a.slice(0);\n        a[0] -= b;\n        return a;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        b = b.slice(0);\n        b[0] = a - b[0];\n        return b;\n      }\n\n      if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n        var i = 0;\n        var lenA = a.length;\n        var lenB = b.length;\n        var retArr = [];\n\n        while (i < lenA || i < lenB) {\n          if ((typeof a[i] === 'number' || a[i] instanceof Number) && (typeof b[i] === 'number' || b[i] instanceof Number)) {\n            retArr[i] = a[i] - b[i];\n          } else {\n            retArr[i] = b[i] === undefined ? a[i] : a[i] || b[i];\n          }\n\n          i += 1;\n        }\n\n        return retArr;\n      }\n\n      return 0;\n    }\n\n    function mul(a, b) {\n      var tOfA = _typeof(a);\n\n      var tOfB = _typeof(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a * b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] * b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a * b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function div(a, b) {\n      var tOfA = _typeof(a);\n\n      var tOfB = _typeof(b);\n\n      var arr;\n\n      if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n        return a / b;\n      }\n\n      var i;\n      var len;\n\n      if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n        len = a.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a[i] / b;\n        }\n\n        return arr;\n      }\n\n      if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n        len = b.length;\n        arr = createTypedArray('float32', len);\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = a / b[i];\n        }\n\n        return arr;\n      }\n\n      return 0;\n    }\n\n    function mod(a, b) {\n      if (typeof a === 'string') {\n        a = parseInt(a, 10);\n      }\n\n      if (typeof b === 'string') {\n        b = parseInt(b, 10);\n      }\n\n      return a % b;\n    }\n\n    var $bm_sum = sum;\n    var $bm_sub = sub;\n    var $bm_mul = mul;\n    var $bm_div = div;\n    var $bm_mod = mod;\n\n    function clamp(num, min, max) {\n      if (min > max) {\n        var mm = max;\n        max = min;\n        min = mm;\n      }\n\n      return Math.min(Math.max(num, min), max);\n    }\n\n    function radiansToDegrees(val) {\n      return val / degToRads;\n    }\n\n    var radians_to_degrees = radiansToDegrees;\n\n    function degreesToRadians(val) {\n      return val * degToRads;\n    }\n\n    var degrees_to_radians = radiansToDegrees;\n    var helperLengthArray = [0, 0, 0, 0, 0, 0];\n\n    function length(arr1, arr2) {\n      if (typeof arr1 === 'number' || arr1 instanceof Number) {\n        arr2 = arr2 || 0;\n        return Math.abs(arr1 - arr2);\n      }\n\n      if (!arr2) {\n        arr2 = helperLengthArray;\n      }\n\n      var i;\n      var len = Math.min(arr1.length, arr2.length);\n      var addedLength = 0;\n\n      for (i = 0; i < len; i += 1) {\n        addedLength += Math.pow(arr2[i] - arr1[i], 2);\n      }\n\n      return Math.sqrt(addedLength);\n    }\n\n    function normalize(vec) {\n      return div(vec, length(vec));\n    }\n\n    function rgbToHsl(val) {\n      var r = val[0];\n      var g = val[1];\n      var b = val[2];\n      var max = Math.max(r, g, b);\n      var min = Math.min(r, g, b);\n      var h;\n      var s;\n      var l = (max + min) / 2;\n\n      if (max === min) {\n        h = 0; // achromatic\n\n        s = 0; // achromatic\n      } else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n        switch (max) {\n          case r:\n            h = (g - b) / d + (g < b ? 6 : 0);\n            break;\n\n          case g:\n            h = (b - r) / d + 2;\n            break;\n\n          case b:\n            h = (r - g) / d + 4;\n            break;\n\n          default:\n            break;\n        }\n\n        h /= 6;\n      }\n\n      return [h, s, l, val[3]];\n    }\n\n    function hue2rgb(p, q, t) {\n      if (t < 0) t += 1;\n      if (t > 1) t -= 1;\n      if (t < 1 / 6) return p + (q - p) * 6 * t;\n      if (t < 1 / 2) return q;\n      if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n      return p;\n    }\n\n    function hslToRgb(val) {\n      var h = val[0];\n      var s = val[1];\n      var l = val[2];\n      var r;\n      var g;\n      var b;\n\n      if (s === 0) {\n        r = l; // achromatic\n\n        b = l; // achromatic\n\n        g = l; // achromatic\n      } else {\n        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        var p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1 / 3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1 / 3);\n      }\n\n      return [r, g, b, val[3]];\n    }\n\n    function linear(t, tMin, tMax, value1, value2) {\n      if (value1 === undefined || value2 === undefined) {\n        value1 = tMin;\n        value2 = tMax;\n        tMin = 0;\n        tMax = 1;\n      }\n\n      if (tMax < tMin) {\n        var _tMin = tMax;\n        tMax = tMin;\n        tMin = _tMin;\n      }\n\n      if (t <= tMin) {\n        return value1;\n      }\n\n      if (t >= tMax) {\n        return value2;\n      }\n\n      var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n\n      if (!value1.length) {\n        return value1 + (value2 - value1) * perc;\n      }\n\n      var i;\n      var len = value1.length;\n      var arr = createTypedArray('float32', len);\n\n      for (i = 0; i < len; i += 1) {\n        arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n      }\n\n      return arr;\n    }\n\n    function random(min, max) {\n      if (max === undefined) {\n        if (min === undefined) {\n          min = 0;\n          max = 1;\n        } else {\n          max = min;\n          min = undefined;\n        }\n      }\n\n      if (max.length) {\n        var i;\n        var len = max.length;\n\n        if (!min) {\n          min = createTypedArray('float32', len);\n        }\n\n        var arr = createTypedArray('float32', len);\n        var rnd = BMMath.random();\n\n        for (i = 0; i < len; i += 1) {\n          arr[i] = min[i] + rnd * (max[i] - min[i]);\n        }\n\n        return arr;\n      }\n\n      if (min === undefined) {\n        min = 0;\n      }\n\n      var rndm = BMMath.random();\n      return min + rndm * (max - min);\n    }\n\n    function createPath(points, inTangents, outTangents, closed) {\n      var i;\n      var len = points.length;\n      var path = shapePool.newElement();\n      path.setPathData(!!closed, len);\n      var arrPlaceholder = [0, 0];\n      var inVertexPoint;\n      var outVertexPoint;\n\n      for (i = 0; i < len; i += 1) {\n        inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n        outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n        path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true);\n      }\n\n      return path;\n    }\n\n    function initiateExpression(elem, data, property) {\n      var val = data.x;\n      var needsVelocity = /velocity(?![\\w\\d])/.test(val);\n\n      var _needsRandom = val.indexOf('random') !== -1;\n\n      var elemType = elem.data.ty;\n      var transform;\n      var $bm_transform;\n      var content;\n      var effect;\n      var thisProperty = property;\n      thisProperty.valueAtTime = thisProperty.getValueAtTime;\n      Object.defineProperty(thisProperty, 'value', {\n        get: function get() {\n          return thisProperty.v;\n        }\n      });\n      elem.comp.frameDuration = 1 / elem.comp.globalData.frameRate;\n      elem.comp.displayStartTime = 0;\n      var inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n      var outPoint = elem.data.op / elem.comp.globalData.frameRate;\n      var width = elem.data.sw ? elem.data.sw : 0;\n      var height = elem.data.sh ? elem.data.sh : 0;\n      var name = elem.data.nm;\n      var loopIn;\n      var loop_in;\n      var loopOut;\n      var loop_out;\n      var smooth;\n      var toWorld;\n      var fromWorld;\n      var fromComp;\n      var toComp;\n      var fromCompToSurface;\n      var position;\n      var rotation;\n      var anchorPoint;\n      var scale;\n      var thisLayer;\n      var thisComp;\n      var mask;\n      var valueAtTime;\n      var velocityAtTime;\n      var scoped_bm_rt; // val = val.replace(/(\\\\?\"|')((http)(s)?(:\\/))?\\/.*?(\\\\?\"|')/g, \"\\\"\\\"\"); // deter potential network calls\n\n      var expression_function = eval('[function _expression_function(){' + val + ';scoped_bm_rt=$bm_rt}]')[0]; // eslint-disable-line no-eval\n\n      var numKeys = property.kf ? data.k.length : 0;\n      var active = !this.data || this.data.hd !== true;\n\n      var wiggle = function wiggle(freq, amp) {\n        var iWiggle;\n        var j;\n        var lenWiggle = this.pv.length ? this.pv.length : 1;\n        var addedAmps = createTypedArray('float32', lenWiggle);\n        freq = 5;\n        var iterations = Math.floor(time * freq);\n        iWiggle = 0;\n        j = 0;\n\n        while (iWiggle < iterations) {\n          // var rnd = BMMath.random();\n          for (j = 0; j < lenWiggle; j += 1) {\n            addedAmps[j] += -amp + amp * 2 * BMMath.random(); // addedAmps[j] += -amp + amp*2*rnd;\n          }\n\n          iWiggle += 1;\n        } // var rnd2 = BMMath.random();\n\n\n        var periods = time * freq;\n        var perc = periods - Math.floor(periods);\n        var arr = createTypedArray('float32', lenWiggle);\n\n        if (lenWiggle > 1) {\n          for (j = 0; j < lenWiggle; j += 1) {\n            arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp * 2 * BMMath.random()) * perc; // arr[j] = this.pv[j] + addedAmps[j] + (-amp + amp*2*rnd)*perc;\n            // arr[i] = this.pv[i] + addedAmp + amp1*perc + amp2*(1-perc);\n          }\n\n          return arr;\n        }\n\n        return this.pv + addedAmps[0] + (-amp + amp * 2 * BMMath.random()) * perc;\n      }.bind(this);\n\n      if (thisProperty.loopIn) {\n        loopIn = thisProperty.loopIn.bind(thisProperty);\n        loop_in = loopIn;\n      }\n\n      if (thisProperty.loopOut) {\n        loopOut = thisProperty.loopOut.bind(thisProperty);\n        loop_out = loopOut;\n      }\n\n      if (thisProperty.smooth) {\n        smooth = thisProperty.smooth.bind(thisProperty);\n      }\n\n      function loopInDuration(type, duration) {\n        return loopIn(type, duration, true);\n      }\n\n      function loopOutDuration(type, duration) {\n        return loopOut(type, duration, true);\n      }\n\n      if (this.getValueAtTime) {\n        valueAtTime = this.getValueAtTime.bind(this);\n      }\n\n      if (this.getVelocityAtTime) {\n        velocityAtTime = this.getVelocityAtTime.bind(this);\n      }\n\n      var comp = elem.comp.globalData.projectInterface.bind(elem.comp.globalData.projectInterface);\n\n      function lookAt(elem1, elem2) {\n        var fVec = [elem2[0] - elem1[0], elem2[1] - elem1[1], elem2[2] - elem1[2]];\n        var pitch = Math.atan2(fVec[0], Math.sqrt(fVec[1] * fVec[1] + fVec[2] * fVec[2])) / degToRads;\n        var yaw = -Math.atan2(fVec[1], fVec[2]) / degToRads;\n        return [yaw, pitch, 0];\n      }\n\n      function easeOut(t, tMin, tMax, val1, val2) {\n        return applyEase(easeOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function easeIn(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInBez, t, tMin, tMax, val1, val2);\n      }\n\n      function ease(t, tMin, tMax, val1, val2) {\n        return applyEase(easeInOutBez, t, tMin, tMax, val1, val2);\n      }\n\n      function applyEase(fn, t, tMin, tMax, val1, val2) {\n        if (val1 === undefined) {\n          val1 = tMin;\n          val2 = tMax;\n        } else {\n          t = (t - tMin) / (tMax - tMin);\n        }\n\n        if (t > 1) {\n          t = 1;\n        } else if (t < 0) {\n          t = 0;\n        }\n\n        var mult = fn(t);\n\n        if ($bm_isInstanceOfArray(val1)) {\n          var iKey;\n          var lenKey = val1.length;\n          var arr = createTypedArray('float32', lenKey);\n\n          for (iKey = 0; iKey < lenKey; iKey += 1) {\n            arr[iKey] = (val2[iKey] - val1[iKey]) * mult + val1[iKey];\n          }\n\n          return arr;\n        }\n\n        return (val2 - val1) * mult + val1;\n      }\n\n      function nearestKey(time) {\n        var iKey;\n        var lenKey = data.k.length;\n        var index;\n        var keyTime;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          index = 0;\n          keyTime = 0;\n        } else {\n          index = -1;\n          time *= elem.comp.globalData.frameRate;\n\n          if (time < data.k[0].t) {\n            index = 1;\n            keyTime = data.k[0].t;\n          } else {\n            for (iKey = 0; iKey < lenKey - 1; iKey += 1) {\n              if (time === data.k[iKey].t) {\n                index = iKey + 1;\n                keyTime = data.k[iKey].t;\n                break;\n              } else if (time > data.k[iKey].t && time < data.k[iKey + 1].t) {\n                if (time - data.k[iKey].t > data.k[iKey + 1].t - time) {\n                  index = iKey + 2;\n                  keyTime = data.k[iKey + 1].t;\n                } else {\n                  index = iKey + 1;\n                  keyTime = data.k[iKey].t;\n                }\n\n                break;\n              }\n            }\n\n            if (index === -1) {\n              index = iKey + 1;\n              keyTime = data.k[iKey].t;\n            }\n          }\n        }\n\n        var obKey = {};\n        obKey.index = index;\n        obKey.time = keyTime / elem.comp.globalData.frameRate;\n        return obKey;\n      }\n\n      function key(ind) {\n        var obKey;\n        var iKey;\n        var lenKey;\n\n        if (!data.k.length || typeof data.k[0] === 'number') {\n          throw new Error('The property has no keyframe at index ' + ind);\n        }\n\n        ind -= 1;\n        obKey = {\n          time: data.k[ind].t / elem.comp.globalData.frameRate,\n          value: []\n        };\n        var arr = Object.prototype.hasOwnProperty.call(data.k[ind], 's') ? data.k[ind].s : data.k[ind - 1].e;\n        lenKey = arr.length;\n\n        for (iKey = 0; iKey < lenKey; iKey += 1) {\n          obKey[iKey] = arr[iKey];\n          obKey.value[iKey] = arr[iKey];\n        }\n\n        return obKey;\n      }\n\n      function framesToTime(fr, fps) {\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return fr / fps;\n      }\n\n      function timeToFrames(t, fps) {\n        if (!t && t !== 0) {\n          t = time;\n        }\n\n        if (!fps) {\n          fps = elem.comp.globalData.frameRate;\n        }\n\n        return t * fps;\n      }\n\n      function seedRandom(seed) {\n        BMMath.seedrandom(randSeed + seed);\n      }\n\n      function sourceRectAtTime() {\n        return elem.sourceRectAtTime();\n      }\n\n      function substring(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substring(init);\n          }\n\n          return value.substring(init, end);\n        }\n\n        return '';\n      }\n\n      function substr(init, end) {\n        if (typeof value === 'string') {\n          if (end === undefined) {\n            return value.substr(init);\n          }\n\n          return value.substr(init, end);\n        }\n\n        return '';\n      }\n\n      function posterizeTime(framesPerSecond) {\n        time = framesPerSecond === 0 ? 0 : Math.floor(time * framesPerSecond) / framesPerSecond;\n        value = valueAtTime(time);\n      }\n\n      var time;\n      var velocity;\n      var value;\n      var text;\n      var textIndex;\n      var textTotal;\n      var selectorValue;\n      var index = elem.data.ind;\n      var hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n      var parent;\n      var randSeed = Math.floor(Math.random() * 1000000);\n      var globalData = elem.globalData;\n\n      function executeExpression(_value) {\n        // globalData.pushExpression();\n        value = _value;\n\n        if (this.frameExpressionId === elem.globalData.frameId && this.propType !== 'textSelector') {\n          return value;\n        }\n\n        if (this.propType === 'textSelector') {\n          textIndex = this.textIndex;\n          textTotal = this.textTotal;\n          selectorValue = this.selectorValue;\n        }\n\n        if (!thisLayer) {\n          text = elem.layerInterface.text;\n          thisLayer = elem.layerInterface;\n          thisComp = elem.comp.compInterface;\n          toWorld = thisLayer.toWorld.bind(thisLayer);\n          fromWorld = thisLayer.fromWorld.bind(thisLayer);\n          fromComp = thisLayer.fromComp.bind(thisLayer);\n          toComp = thisLayer.toComp.bind(thisLayer);\n          mask = thisLayer.mask ? thisLayer.mask.bind(thisLayer) : null;\n          fromCompToSurface = fromComp;\n        }\n\n        if (!transform) {\n          transform = elem.layerInterface('ADBE Transform Group');\n          $bm_transform = transform;\n\n          if (transform) {\n            anchorPoint = transform.anchorPoint;\n            /* position = transform.position;\r\n                      rotation = transform.rotation;\r\n                      scale = transform.scale; */\n          }\n        }\n\n        if (elemType === 4 && !content) {\n          content = thisLayer('ADBE Root Vectors Group');\n        }\n\n        if (!effect) {\n          effect = thisLayer(4);\n        }\n\n        hasParent = !!(elem.hierarchy && elem.hierarchy.length);\n\n        if (hasParent && !parent) {\n          parent = elem.hierarchy[0].layerInterface;\n        }\n\n        time = this.comp.renderedFrame / this.comp.globalData.frameRate;\n\n        if (_needsRandom) {\n          seedRandom(randSeed + time);\n        }\n\n        if (needsVelocity) {\n          velocity = velocityAtTime(time);\n        }\n\n        expression_function();\n        this.frameExpressionId = elem.globalData.frameId; // TODO: Check if it's possible to return on ShapeInterface the .v value\n        // Changed this to a ternary operation because Rollup failed compiling it correctly\n\n        scoped_bm_rt = scoped_bm_rt.propType === propTypes.SHAPE ? scoped_bm_rt.v : scoped_bm_rt;\n        return scoped_bm_rt;\n      } // Bundlers will see these as dead code and unless we reference them\n\n\n      executeExpression.__preventDeadCodeRemoval = [$bm_transform, anchorPoint, time, velocity, inPoint, outPoint, width, height, name, loop_in, loop_out, smooth, toComp, fromCompToSurface, toWorld, fromWorld, mask, position, rotation, scale, thisComp, numKeys, active, wiggle, loopInDuration, loopOutDuration, comp, lookAt, easeOut, easeIn, ease, nearestKey, key, text, textIndex, textTotal, selectorValue, framesToTime, timeToFrames, sourceRectAtTime, substring, substr, posterizeTime, index, globalData];\n      return executeExpression;\n    }\n\n    ob.initiateExpression = initiateExpression;\n    ob.__preventDeadCodeRemoval = [window, document, XMLHttpRequest, fetch, frames, $bm_neg, add, $bm_sum, $bm_sub, $bm_mul, $bm_div, $bm_mod, clamp, radians_to_degrees, degreesToRadians, degrees_to_radians, normalize, rgbToHsl, hslToRgb, linear, random, createPath];\n    return ob;\n  }();\n\n  var expressionHelpers = function () {\n    function searchExpressions(elem, data, prop) {\n      if (data.x) {\n        prop.k = true;\n        prop.x = true;\n        prop.initiateExpression = ExpressionManager.initiateExpression;\n        prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n      }\n    }\n\n    function getValueAtTime(frameNum) {\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastFrame) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n        this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n        this._cachingAtTime.lastFrame = frameNum;\n      }\n\n      return this._cachingAtTime.value;\n    }\n\n    function getSpeedAtTime(frameNum) {\n      var delta = -0.01;\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var speed = 0;\n\n      if (v1.length) {\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          speed += Math.pow(v2[i] - v1[i], 2);\n        }\n\n        speed = Math.sqrt(speed) * 100;\n      } else {\n        speed = 0;\n      }\n\n      return speed;\n    }\n\n    function getVelocityAtTime(frameNum) {\n      if (this.vel !== undefined) {\n        return this.vel;\n      }\n\n      var delta = -0.001; // frameNum += this.elem.data.st;\n\n      var v1 = this.getValueAtTime(frameNum);\n      var v2 = this.getValueAtTime(frameNum + delta);\n      var velocity;\n\n      if (v1.length) {\n        velocity = createTypedArray('float32', v1.length);\n        var i;\n\n        for (i = 0; i < v1.length; i += 1) {\n          // removing frameRate\n          // if needed, don't add it here\n          // velocity[i] = this.elem.globalData.frameRate*((v2[i] - v1[i])/delta);\n          velocity[i] = (v2[i] - v1[i]) / delta;\n        }\n      } else {\n        velocity = (v2 - v1) / delta;\n      }\n\n      return velocity;\n    }\n\n    function getStaticValueAtTime() {\n      return this.pv;\n    }\n\n    function setGroupProperty(propertyGroup) {\n      this.propertyGroup = propertyGroup;\n    }\n\n    return {\n      searchExpressions: searchExpressions,\n      getSpeedAtTime: getSpeedAtTime,\n      getVelocityAtTime: getVelocityAtTime,\n      getValueAtTime: getValueAtTime,\n      getStaticValueAtTime: getStaticValueAtTime,\n      setGroupProperty: setGroupProperty\n    };\n  }();\n\n  function addPropertyDecorator() {\n    function loopOut(type, duration, durationFlag) {\n      if (!this.k || !this.keyframes) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var lastKeyFrame = keyframes[keyframes.length - 1].t;\n\n      if (currentFrame <= lastKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var firstKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n        } else {\n          cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n        }\n\n        firstKeyFrame = lastKeyFrame - cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (iterations % 2 !== 0) {\n          return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n\n        var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n          }\n\n          return ret;\n        }\n\n        return (endV - initV) * repeats + current;\n      } else if (type === 'continue') {\n        var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextLastValue = this.getValueAtTime((lastKeyFrame - 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(lastValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 0.0005; // eslint-disable-line\n          }\n\n          return ret;\n        }\n\n        return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 0.001);\n      }\n\n      return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function loopIn(type, duration, durationFlag) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      type = type ? type.toLowerCase() : '';\n      var currentFrame = this.comp.renderedFrame;\n      var keyframes = this.keyframes;\n      var firstKeyFrame = keyframes[0].t;\n\n      if (currentFrame >= firstKeyFrame) {\n        return this.pv;\n      }\n\n      var cycleDuration;\n      var lastKeyFrame;\n\n      if (!durationFlag) {\n        if (!duration || duration > keyframes.length - 1) {\n          duration = keyframes.length - 1;\n        }\n\n        lastKeyFrame = keyframes[duration].t;\n        cycleDuration = lastKeyFrame - firstKeyFrame;\n      } else {\n        if (!duration) {\n          cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n        } else {\n          cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n        }\n\n        lastKeyFrame = firstKeyFrame + cycleDuration;\n      }\n\n      var i;\n      var len;\n      var ret;\n\n      if (type === 'pingpong') {\n        var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n\n        if (iterations % 2 === 0) {\n          return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n        }\n      } else if (type === 'offset') {\n        var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n        var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0);\n        var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n\n        if (this.pv.length) {\n          ret = new Array(initV.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n          }\n\n          return ret;\n        }\n\n        return current - (endV - initV) * repeats;\n      } else if (type === 'continue') {\n        var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n        var nextFirstValue = this.getValueAtTime((firstKeyFrame + 0.001) / this.comp.globalData.frameRate, 0);\n\n        if (this.pv.length) {\n          ret = new Array(firstValue.length);\n          len = ret.length;\n\n          for (i = 0; i < len; i += 1) {\n            ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 0.001;\n          }\n\n          return ret;\n        }\n\n        return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 0.001;\n      }\n\n      return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); // eslint-disable-line\n    }\n\n    function smooth(width, samples) {\n      if (!this.k) {\n        return this.pv;\n      }\n\n      width = (width || 0.4) * 0.5;\n      samples = Math.floor(samples || 5);\n\n      if (samples <= 1) {\n        return this.pv;\n      }\n\n      var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n      var initFrame = currentTime - width;\n      var endFrame = currentTime + width;\n      var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n      var i = 0;\n      var j = 0;\n      var value;\n\n      if (this.pv.length) {\n        value = createTypedArray('float32', this.pv.length);\n      } else {\n        value = 0;\n      }\n\n      var sampleValue;\n\n      while (i < samples) {\n        sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n\n        if (this.pv.length) {\n          for (j = 0; j < this.pv.length; j += 1) {\n            value[j] += sampleValue[j];\n          }\n        } else {\n          value += sampleValue;\n        }\n\n        i += 1;\n      }\n\n      if (this.pv.length) {\n        for (j = 0; j < this.pv.length; j += 1) {\n          value[j] /= samples;\n        }\n      } else {\n        value /= samples;\n      }\n\n      return value;\n    }\n\n    function getTransformValueAtTime(time) {\n      if (!this._transformCachingAtTime) {\n        this._transformCachingAtTime = {\n          v: new Matrix()\n        };\n      } /// /\n\n\n      var matrix = this._transformCachingAtTime.v;\n      matrix.cloneFromProps(this.pre.props);\n\n      if (this.appliedTransformations < 1) {\n        var anchor = this.a.getValueAtTime(time);\n        matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n      }\n\n      if (this.appliedTransformations < 2) {\n        var scale = this.s.getValueAtTime(time);\n        matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n      }\n\n      if (this.sk && this.appliedTransformations < 3) {\n        var skew = this.sk.getValueAtTime(time);\n        var skewAxis = this.sa.getValueAtTime(time);\n        matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n      }\n\n      if (this.r && this.appliedTransformations < 4) {\n        var rotation = this.r.getValueAtTime(time);\n        matrix.rotate(-rotation * this.r.mult);\n      } else if (!this.r && this.appliedTransformations < 4) {\n        var rotationZ = this.rz.getValueAtTime(time);\n        var rotationY = this.ry.getValueAtTime(time);\n        var rotationX = this.rx.getValueAtTime(time);\n        var orientation = this.or.getValueAtTime(time);\n        matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n      }\n\n      if (this.data.p && this.data.p.s) {\n        var positionX = this.px.getValueAtTime(time);\n        var positionY = this.py.getValueAtTime(time);\n\n        if (this.data.p.z) {\n          var positionZ = this.pz.getValueAtTime(time);\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n        } else {\n          matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n        }\n      } else {\n        var position = this.p.getValueAtTime(time);\n        matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n      }\n\n      return matrix; /// /\n    }\n\n    function getTransformStaticValueAtTime() {\n      return this.v.clone(new Matrix());\n    }\n\n    var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n\n    TransformPropertyFactory.getTransformProperty = function (elem, data, container) {\n      var prop = getTransformProperty(elem, data, container);\n\n      if (prop.dynamicProperties.length) {\n        prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      return prop;\n    };\n\n    var propertyGetProp = PropertyFactory.getProp;\n\n    PropertyFactory.getProp = function (elem, data, type, mult, container) {\n      var prop = propertyGetProp(elem, data, type, mult, container); // prop.getVelocityAtTime = getVelocityAtTime;\n      // prop.loopOut = loopOut;\n      // prop.loopIn = loopIn;\n\n      if (prop.kf) {\n        prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n      } else {\n        prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n      }\n\n      prop.setGroupProperty = expressionHelpers.setGroupProperty;\n      prop.loopOut = loopOut;\n      prop.loopIn = loopIn;\n      prop.smooth = smooth;\n      prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n      prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n      prop.numKeys = data.a === 1 ? data.k.length : 0;\n      prop.propertyIndex = data.ix;\n      var value = 0;\n\n      if (type !== 0) {\n        value = createTypedArray('float32', data.a === 1 ? data.k[0].s.length : data.k.length);\n      }\n\n      prop._cachingAtTime = {\n        lastFrame: initialDefaultFrame,\n        lastIndex: 0,\n        value: value\n      };\n      expressionHelpers.searchExpressions(elem, data, prop);\n\n      if (prop.k) {\n        container.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n\n    function getShapeValueAtTime(frameNum) {\n      // For now this caching object is created only when needed instead of creating it when the shape is initialized.\n      if (!this._cachingAtTime) {\n        this._cachingAtTime = {\n          shapeValue: shapePool.clone(this.pv),\n          lastIndex: 0,\n          lastTime: initialDefaultFrame\n        };\n      }\n\n      frameNum *= this.elem.globalData.frameRate;\n      frameNum -= this.offsetTime;\n\n      if (frameNum !== this._cachingAtTime.lastTime) {\n        this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n        this._cachingAtTime.lastTime = frameNum;\n        this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n      }\n\n      return this._cachingAtTime.shapeValue;\n    }\n\n    var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n    var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n\n    function ShapeExpressions() {}\n\n    ShapeExpressions.prototype = {\n      vertices: function vertices(prop, time) {\n        if (this.k) {\n          this.getValue();\n        }\n\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        var i;\n        var len = shapePath._length;\n        var vertices = shapePath[prop];\n        var points = shapePath.v;\n        var arr = createSizedArray(len);\n\n        for (i = 0; i < len; i += 1) {\n          if (prop === 'i' || prop === 'o') {\n            arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n          } else {\n            arr[i] = [vertices[i][0], vertices[i][1]];\n          }\n        }\n\n        return arr;\n      },\n      points: function points(time) {\n        return this.vertices('v', time);\n      },\n      inTangents: function inTangents(time) {\n        return this.vertices('i', time);\n      },\n      outTangents: function outTangents(time) {\n        return this.vertices('o', time);\n      },\n      isClosed: function isClosed() {\n        return this.v.c;\n      },\n      pointOnPath: function pointOnPath(perc, time) {\n        var shapePath = this.v;\n\n        if (time !== undefined) {\n          shapePath = this.getValueAtTime(time, 0);\n        }\n\n        if (!this._segmentsLength) {\n          this._segmentsLength = bez.getSegmentsLength(shapePath);\n        }\n\n        var segmentsLength = this._segmentsLength;\n        var lengths = segmentsLength.lengths;\n        var lengthPos = segmentsLength.totalLength * perc;\n        var i = 0;\n        var len = lengths.length;\n        var accumulatedLength = 0;\n        var pt;\n\n        while (i < len) {\n          if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n            var initIndex = i;\n            var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n            var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n            pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]);\n            break;\n          } else {\n            accumulatedLength += lengths[i].addedLength;\n          }\n\n          i += 1;\n        }\n\n        if (!pt) {\n          pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n        }\n\n        return pt;\n      },\n      vectorOnPath: function vectorOnPath(perc, time, vectorType) {\n        // perc doesn't use triple equality because it can be a Number object as well as a primitive.\n        if (perc == 1) {\n          // eslint-disable-line eqeqeq\n          perc = this.v.c;\n        } else if (perc == 0) {\n          // eslint-disable-line eqeqeq\n          perc = 0.999;\n        }\n\n        var pt1 = this.pointOnPath(perc, time);\n        var pt2 = this.pointOnPath(perc + 0.001, time);\n        var xLength = pt2[0] - pt1[0];\n        var yLength = pt2[1] - pt1[1];\n        var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n\n        if (magnitude === 0) {\n          return [0, 0];\n        }\n\n        var unitVector = vectorType === 'tangent' ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n        return unitVector;\n      },\n      tangentOnPath: function tangentOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'tangent');\n      },\n      normalOnPath: function normalOnPath(perc, time) {\n        return this.vectorOnPath(perc, time, 'normal');\n      },\n      setGroupProperty: expressionHelpers.setGroupProperty,\n      getValueAtTime: expressionHelpers.getStaticValueAtTime\n    };\n    extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n    extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n    KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n    KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n    var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n\n    ShapePropertyFactory.getShapeProp = function (elem, data, type, arr, trims) {\n      var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n      prop.propertyIndex = data.ix;\n      prop.lock = false;\n\n      if (type === 3) {\n        expressionHelpers.searchExpressions(elem, data.pt, prop);\n      } else if (type === 4) {\n        expressionHelpers.searchExpressions(elem, data.ks, prop);\n      }\n\n      if (prop.k) {\n        elem.addDynamicProperty(prop);\n      }\n\n      return prop;\n    };\n  }\n\n  function initialize$1() {\n    addPropertyDecorator();\n  }\n\n  function addDecorator() {\n    function searchExpressions() {\n      if (this.data.d.x) {\n        this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n        this.addEffect(this.getExpressionValue.bind(this));\n        return true;\n      }\n\n      return null;\n    }\n\n    TextProperty.prototype.getExpressionValue = function (currentValue, text) {\n      var newValue = this.calculateExpression(text);\n\n      if (currentValue.t !== newValue) {\n        var newData = {};\n        this.copyData(newData, currentValue);\n        newData.t = newValue.toString();\n        newData.__complete = false;\n        return newData;\n      }\n\n      return currentValue;\n    };\n\n    TextProperty.prototype.searchProperty = function () {\n      var isKeyframed = this.searchKeyframes();\n      var hasExpressions = this.searchExpressions();\n      this.kf = isKeyframed || hasExpressions;\n      return this.kf;\n    };\n\n    TextProperty.prototype.searchExpressions = searchExpressions;\n  }\n\n  function initialize() {\n    addDecorator();\n  }\n\n  function SVGComposableEffect() {}\n\n  SVGComposableEffect.prototype = {\n    createMergeNode: function createMergeNode(resultId, ins) {\n      var feMerge = createNS('feMerge');\n      feMerge.setAttribute('result', resultId);\n      var feMergeNode;\n      var i;\n\n      for (i = 0; i < ins.length; i += 1) {\n        feMergeNode = createNS('feMergeNode');\n        feMergeNode.setAttribute('in', ins[i]);\n        feMerge.appendChild(feMergeNode);\n        feMerge.appendChild(feMergeNode);\n      }\n\n      return feMerge;\n    }\n  };\n\n  function SVGTintFilter(filter, filterManager, elem, id, source) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id + '_tint_1');\n    filter.appendChild(feColorMatrix);\n    feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id + '_tint_2');\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n    var feMerge = this.createMergeNode(id, [source, id + '_tint_1', id + '_tint_2']);\n    filter.appendChild(feMerge);\n  }\n\n  extendPrototype([SVGComposableEffect], SVGTintFilter);\n\n  SVGTintFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var colorBlack = this.filterManager.effectElements[0].p.v;\n      var colorWhite = this.filterManager.effectElements[1].p.v;\n      var opacity = this.filterManager.effectElements[2].p.v / 100;\n      this.matrixFilter.setAttribute('values', colorWhite[0] - colorBlack[0] + ' 0 0 0 ' + colorBlack[0] + ' ' + (colorWhite[1] - colorBlack[1]) + ' 0 0 0 ' + colorBlack[1] + ' ' + (colorWhite[2] - colorBlack[2]) + ' 0 0 0 ' + colorBlack[2] + ' 0 0 0 ' + opacity + ' 0');\n    }\n  };\n\n  function SVGFillFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'sRGB');\n    feColorMatrix.setAttribute('values', '1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0');\n    feColorMatrix.setAttribute('result', id);\n    filter.appendChild(feColorMatrix);\n    this.matrixFilter = feColorMatrix;\n  }\n\n  SVGFillFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color = this.filterManager.effectElements[2].p.v;\n      var opacity = this.filterManager.effectElements[6].p.v;\n      this.matrixFilter.setAttribute('values', '0 0 0 0 ' + color[0] + ' 0 0 0 0 ' + color[1] + ' 0 0 0 0 ' + color[2] + ' 0 0 0 ' + opacity + ' 0');\n    }\n  };\n\n  function SVGStrokeEffect(fil, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.elem = elem;\n    this.paths = [];\n  }\n\n  SVGStrokeEffect.prototype.initialize = function () {\n    var elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n    var path;\n    var groupPath;\n    var i;\n    var len;\n\n    if (this.filterManager.effectElements[1].p.v === 1) {\n      len = this.elem.maskManager.masksProperties.length;\n      i = 0;\n    } else {\n      i = this.filterManager.effectElements[0].p.v - 1;\n      len = i + 1;\n    }\n\n    groupPath = createNS('g');\n    groupPath.setAttribute('fill', 'none');\n    groupPath.setAttribute('stroke-linecap', 'round');\n    groupPath.setAttribute('stroke-dashoffset', 1);\n\n    for (i; i < len; i += 1) {\n      path = createNS('path');\n      groupPath.appendChild(path);\n      this.paths.push({\n        p: path,\n        m: i\n      });\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 3) {\n      var mask = createNS('mask');\n      var id = createElementID();\n      mask.setAttribute('id', id);\n      mask.setAttribute('mask-type', 'alpha');\n      mask.appendChild(groupPath);\n      this.elem.globalData.defs.appendChild(mask);\n      var g = createNS('g');\n      g.setAttribute('mask', 'url(' + getLocationHref() + '#' + id + ')');\n\n      while (elemChildren[0]) {\n        g.appendChild(elemChildren[0]);\n      }\n\n      this.elem.layerElement.appendChild(g);\n      this.masker = mask;\n      groupPath.setAttribute('stroke', '#fff');\n    } else if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (this.filterManager.effectElements[10].p.v === 2) {\n        elemChildren = this.elem.layerElement.children || this.elem.layerElement.childNodes;\n\n        while (elemChildren.length) {\n          this.elem.layerElement.removeChild(elemChildren[0]);\n        }\n      }\n\n      this.elem.layerElement.appendChild(groupPath);\n      this.elem.layerElement.removeAttribute('mask');\n      groupPath.setAttribute('stroke', '#fff');\n    }\n\n    this.initialized = true;\n    this.pathMasker = groupPath;\n  };\n\n  SVGStrokeEffect.prototype.renderFrame = function (forceRender) {\n    if (!this.initialized) {\n      this.initialize();\n    }\n\n    var i;\n    var len = this.paths.length;\n    var mask;\n    var path;\n\n    for (i = 0; i < len; i += 1) {\n      if (this.paths[i].m !== -1) {\n        mask = this.elem.maskManager.viewData[this.paths[i].m];\n        path = this.paths[i].p;\n\n        if (forceRender || this.filterManager._mdf || mask.prop._mdf) {\n          path.setAttribute('d', mask.lastPath);\n        }\n\n        if (forceRender || this.filterManager.effectElements[9].p._mdf || this.filterManager.effectElements[4].p._mdf || this.filterManager.effectElements[7].p._mdf || this.filterManager.effectElements[8].p._mdf || mask.prop._mdf) {\n          var dasharrayValue;\n\n          if (this.filterManager.effectElements[7].p.v !== 0 || this.filterManager.effectElements[8].p.v !== 100) {\n            var s = Math.min(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var e = Math.max(this.filterManager.effectElements[7].p.v, this.filterManager.effectElements[8].p.v) * 0.01;\n            var l = path.getTotalLength();\n            dasharrayValue = '0 0 0 ' + l * s + ' ';\n            var lineLength = l * (e - s);\n            var segment = 1 + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n            var units = Math.floor(lineLength / segment);\n            var j;\n\n            for (j = 0; j < units; j += 1) {\n              dasharrayValue += '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01 + ' ';\n            }\n\n            dasharrayValue += '0 ' + l * 10 + ' 0 0';\n          } else {\n            dasharrayValue = '1 ' + this.filterManager.effectElements[4].p.v * 2 * this.filterManager.effectElements[9].p.v * 0.01;\n          }\n\n          path.setAttribute('stroke-dasharray', dasharrayValue);\n        }\n      }\n    }\n\n    if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n      this.pathMasker.setAttribute('stroke-width', this.filterManager.effectElements[4].p.v * 2);\n    }\n\n    if (forceRender || this.filterManager.effectElements[6].p._mdf) {\n      this.pathMasker.setAttribute('opacity', this.filterManager.effectElements[6].p.v);\n    }\n\n    if (this.filterManager.effectElements[10].p.v === 1 || this.filterManager.effectElements[10].p.v === 2) {\n      if (forceRender || this.filterManager.effectElements[3].p._mdf) {\n        var color = this.filterManager.effectElements[3].p.v;\n        this.pathMasker.setAttribute('stroke', 'rgb(' + bmFloor(color[0] * 255) + ',' + bmFloor(color[1] * 255) + ',' + bmFloor(color[2] * 255) + ')');\n      }\n    }\n  };\n\n  function SVGTritoneFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var feColorMatrix = createNS('feColorMatrix');\n    feColorMatrix.setAttribute('type', 'matrix');\n    feColorMatrix.setAttribute('color-interpolation-filters', 'linearRGB');\n    feColorMatrix.setAttribute('values', '0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0');\n    filter.appendChild(feColorMatrix);\n    var feComponentTransfer = createNS('feComponentTransfer');\n    feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n    feComponentTransfer.setAttribute('result', id);\n    this.matrixFilter = feComponentTransfer;\n    var feFuncR = createNS('feFuncR');\n    feFuncR.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncR);\n    this.feFuncR = feFuncR;\n    var feFuncG = createNS('feFuncG');\n    feFuncG.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncG);\n    this.feFuncG = feFuncG;\n    var feFuncB = createNS('feFuncB');\n    feFuncB.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFuncB);\n    this.feFuncB = feFuncB;\n    filter.appendChild(feComponentTransfer);\n  }\n\n  SVGTritoneFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var color1 = this.filterManager.effectElements[0].p.v;\n      var color2 = this.filterManager.effectElements[1].p.v;\n      var color3 = this.filterManager.effectElements[2].p.v;\n      var tableR = color3[0] + ' ' + color2[0] + ' ' + color1[0];\n      var tableG = color3[1] + ' ' + color2[1] + ' ' + color1[1];\n      var tableB = color3[2] + ' ' + color2[2] + ' ' + color1[2];\n      this.feFuncR.setAttribute('tableValues', tableR);\n      this.feFuncG.setAttribute('tableValues', tableG);\n      this.feFuncB.setAttribute('tableValues', tableB);\n    }\n  };\n\n  function SVGProLevelsFilter(filter, filterManager, elem, id) {\n    this.filterManager = filterManager;\n    var effectElements = this.filterManager.effectElements;\n    var feComponentTransfer = createNS('feComponentTransfer'); // Red\n\n    if (effectElements[10].p.k || effectElements[10].p.v !== 0 || effectElements[11].p.k || effectElements[11].p.v !== 1 || effectElements[12].p.k || effectElements[12].p.v !== 1 || effectElements[13].p.k || effectElements[13].p.v !== 0 || effectElements[14].p.k || effectElements[14].p.v !== 1) {\n      this.feFuncR = this.createFeFunc('feFuncR', feComponentTransfer);\n    } // Green\n\n\n    if (effectElements[17].p.k || effectElements[17].p.v !== 0 || effectElements[18].p.k || effectElements[18].p.v !== 1 || effectElements[19].p.k || effectElements[19].p.v !== 1 || effectElements[20].p.k || effectElements[20].p.v !== 0 || effectElements[21].p.k || effectElements[21].p.v !== 1) {\n      this.feFuncG = this.createFeFunc('feFuncG', feComponentTransfer);\n    } // Blue\n\n\n    if (effectElements[24].p.k || effectElements[24].p.v !== 0 || effectElements[25].p.k || effectElements[25].p.v !== 1 || effectElements[26].p.k || effectElements[26].p.v !== 1 || effectElements[27].p.k || effectElements[27].p.v !== 0 || effectElements[28].p.k || effectElements[28].p.v !== 1) {\n      this.feFuncB = this.createFeFunc('feFuncB', feComponentTransfer);\n    } // Alpha\n\n\n    if (effectElements[31].p.k || effectElements[31].p.v !== 0 || effectElements[32].p.k || effectElements[32].p.v !== 1 || effectElements[33].p.k || effectElements[33].p.v !== 1 || effectElements[34].p.k || effectElements[34].p.v !== 0 || effectElements[35].p.k || effectElements[35].p.v !== 1) {\n      this.feFuncA = this.createFeFunc('feFuncA', feComponentTransfer);\n    } // RGB\n\n\n    if (this.feFuncR || this.feFuncG || this.feFuncB || this.feFuncA) {\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      filter.appendChild(feComponentTransfer);\n    }\n\n    if (effectElements[3].p.k || effectElements[3].p.v !== 0 || effectElements[4].p.k || effectElements[4].p.v !== 1 || effectElements[5].p.k || effectElements[5].p.v !== 1 || effectElements[6].p.k || effectElements[6].p.v !== 0 || effectElements[7].p.k || effectElements[7].p.v !== 1) {\n      feComponentTransfer = createNS('feComponentTransfer');\n      feComponentTransfer.setAttribute('color-interpolation-filters', 'sRGB');\n      feComponentTransfer.setAttribute('result', id);\n      filter.appendChild(feComponentTransfer);\n      this.feFuncRComposed = this.createFeFunc('feFuncR', feComponentTransfer);\n      this.feFuncGComposed = this.createFeFunc('feFuncG', feComponentTransfer);\n      this.feFuncBComposed = this.createFeFunc('feFuncB', feComponentTransfer);\n    }\n  }\n\n  SVGProLevelsFilter.prototype.createFeFunc = function (type, feComponentTransfer) {\n    var feFunc = createNS(type);\n    feFunc.setAttribute('type', 'table');\n    feComponentTransfer.appendChild(feFunc);\n    return feFunc;\n  };\n\n  SVGProLevelsFilter.prototype.getTableValue = function (inputBlack, inputWhite, gamma, outputBlack, outputWhite) {\n    var cnt = 0;\n    var segments = 256;\n    var perc;\n    var min = Math.min(inputBlack, inputWhite);\n    var max = Math.max(inputBlack, inputWhite);\n    var table = Array.call(null, {\n      length: segments\n    });\n    var colorValue;\n    var pos = 0;\n    var outputDelta = outputWhite - outputBlack;\n    var inputDelta = inputWhite - inputBlack;\n\n    while (cnt <= 256) {\n      perc = cnt / 256;\n\n      if (perc <= min) {\n        colorValue = inputDelta < 0 ? outputWhite : outputBlack;\n      } else if (perc >= max) {\n        colorValue = inputDelta < 0 ? outputBlack : outputWhite;\n      } else {\n        colorValue = outputBlack + outputDelta * Math.pow((perc - inputBlack) / inputDelta, 1 / gamma);\n      }\n\n      table[pos] = colorValue;\n      pos += 1;\n      cnt += 256 / (segments - 1);\n    }\n\n    return table.join(' ');\n  };\n\n  SVGProLevelsFilter.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      var val;\n      var effectElements = this.filterManager.effectElements;\n\n      if (this.feFuncRComposed && (forceRender || effectElements[3].p._mdf || effectElements[4].p._mdf || effectElements[5].p._mdf || effectElements[6].p._mdf || effectElements[7].p._mdf)) {\n        val = this.getTableValue(effectElements[3].p.v, effectElements[4].p.v, effectElements[5].p.v, effectElements[6].p.v, effectElements[7].p.v);\n        this.feFuncRComposed.setAttribute('tableValues', val);\n        this.feFuncGComposed.setAttribute('tableValues', val);\n        this.feFuncBComposed.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncR && (forceRender || effectElements[10].p._mdf || effectElements[11].p._mdf || effectElements[12].p._mdf || effectElements[13].p._mdf || effectElements[14].p._mdf)) {\n        val = this.getTableValue(effectElements[10].p.v, effectElements[11].p.v, effectElements[12].p.v, effectElements[13].p.v, effectElements[14].p.v);\n        this.feFuncR.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncG && (forceRender || effectElements[17].p._mdf || effectElements[18].p._mdf || effectElements[19].p._mdf || effectElements[20].p._mdf || effectElements[21].p._mdf)) {\n        val = this.getTableValue(effectElements[17].p.v, effectElements[18].p.v, effectElements[19].p.v, effectElements[20].p.v, effectElements[21].p.v);\n        this.feFuncG.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncB && (forceRender || effectElements[24].p._mdf || effectElements[25].p._mdf || effectElements[26].p._mdf || effectElements[27].p._mdf || effectElements[28].p._mdf)) {\n        val = this.getTableValue(effectElements[24].p.v, effectElements[25].p.v, effectElements[26].p.v, effectElements[27].p.v, effectElements[28].p.v);\n        this.feFuncB.setAttribute('tableValues', val);\n      }\n\n      if (this.feFuncA && (forceRender || effectElements[31].p._mdf || effectElements[32].p._mdf || effectElements[33].p._mdf || effectElements[34].p._mdf || effectElements[35].p._mdf)) {\n        val = this.getTableValue(effectElements[31].p.v, effectElements[32].p.v, effectElements[33].p.v, effectElements[34].p.v, effectElements[35].p.v);\n        this.feFuncA.setAttribute('tableValues', val);\n      }\n    }\n  };\n\n  function SVGDropShadowEffect(filter, filterManager, elem, id, source) {\n    var globalFilterSize = filterManager.container.globalData.renderConfig.filterSize;\n    var filterSize = filterManager.data.fs || globalFilterSize;\n    filter.setAttribute('x', filterSize.x || globalFilterSize.x);\n    filter.setAttribute('y', filterSize.y || globalFilterSize.y);\n    filter.setAttribute('width', filterSize.width || globalFilterSize.width);\n    filter.setAttribute('height', filterSize.height || globalFilterSize.height);\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('in', 'SourceAlpha');\n    feGaussianBlur.setAttribute('result', id + '_drop_shadow_1');\n    feGaussianBlur.setAttribute('stdDeviation', '0');\n    this.feGaussianBlur = feGaussianBlur;\n    filter.appendChild(feGaussianBlur);\n    var feOffset = createNS('feOffset');\n    feOffset.setAttribute('dx', '25');\n    feOffset.setAttribute('dy', '0');\n    feOffset.setAttribute('in', id + '_drop_shadow_1');\n    feOffset.setAttribute('result', id + '_drop_shadow_2');\n    this.feOffset = feOffset;\n    filter.appendChild(feOffset);\n    var feFlood = createNS('feFlood');\n    feFlood.setAttribute('flood-color', '#00ff00');\n    feFlood.setAttribute('flood-opacity', '1');\n    feFlood.setAttribute('result', id + '_drop_shadow_3');\n    this.feFlood = feFlood;\n    filter.appendChild(feFlood);\n    var feComposite = createNS('feComposite');\n    feComposite.setAttribute('in', id + '_drop_shadow_3');\n    feComposite.setAttribute('in2', id + '_drop_shadow_2');\n    feComposite.setAttribute('operator', 'in');\n    feComposite.setAttribute('result', id + '_drop_shadow_4');\n    filter.appendChild(feComposite);\n    var feMerge = this.createMergeNode(id, [id + '_drop_shadow_4', source]);\n    filter.appendChild(feMerge); //\n  }\n\n  extendPrototype([SVGComposableEffect], SVGDropShadowEffect);\n\n  SVGDropShadowEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      if (forceRender || this.filterManager.effectElements[4].p._mdf) {\n        this.feGaussianBlur.setAttribute('stdDeviation', this.filterManager.effectElements[4].p.v / 4);\n      }\n\n      if (forceRender || this.filterManager.effectElements[0].p._mdf) {\n        var col = this.filterManager.effectElements[0].p.v;\n        this.feFlood.setAttribute('flood-color', rgbToHex(Math.round(col[0] * 255), Math.round(col[1] * 255), Math.round(col[2] * 255)));\n      }\n\n      if (forceRender || this.filterManager.effectElements[1].p._mdf) {\n        this.feFlood.setAttribute('flood-opacity', this.filterManager.effectElements[1].p.v / 255);\n      }\n\n      if (forceRender || this.filterManager.effectElements[2].p._mdf || this.filterManager.effectElements[3].p._mdf) {\n        var distance = this.filterManager.effectElements[3].p.v;\n        var angle = (this.filterManager.effectElements[2].p.v - 90) * degToRads;\n        var x = distance * Math.cos(angle);\n        var y = distance * Math.sin(angle);\n        this.feOffset.setAttribute('dx', x);\n        this.feOffset.setAttribute('dy', y);\n      }\n    }\n  };\n\n  var _svgMatteSymbols = [];\n\n  function SVGMatte3Effect(filterElem, filterManager, elem) {\n    this.initialized = false;\n    this.filterManager = filterManager;\n    this.filterElem = filterElem;\n    this.elem = elem;\n    elem.matteElement = createNS('g');\n    elem.matteElement.appendChild(elem.layerElement);\n    elem.matteElement.appendChild(elem.transformedElement);\n    elem.baseElement = elem.matteElement;\n  }\n\n  SVGMatte3Effect.prototype.findSymbol = function (mask) {\n    var i = 0;\n    var len = _svgMatteSymbols.length;\n\n    while (i < len) {\n      if (_svgMatteSymbols[i] === mask) {\n        return _svgMatteSymbols[i];\n      }\n\n      i += 1;\n    }\n\n    return null;\n  };\n\n  SVGMatte3Effect.prototype.replaceInParent = function (mask, symbolId) {\n    var parentNode = mask.layerElement.parentNode;\n\n    if (!parentNode) {\n      return;\n    }\n\n    var children = parentNode.children;\n    var i = 0;\n    var len = children.length;\n\n    while (i < len) {\n      if (children[i] === mask.layerElement) {\n        break;\n      }\n\n      i += 1;\n    }\n\n    var nextChild;\n\n    if (i <= len - 2) {\n      nextChild = children[i + 1];\n    }\n\n    var useElem = createNS('use');\n    useElem.setAttribute('href', '#' + symbolId);\n\n    if (nextChild) {\n      parentNode.insertBefore(useElem, nextChild);\n    } else {\n      parentNode.appendChild(useElem);\n    }\n  };\n\n  SVGMatte3Effect.prototype.setElementAsMask = function (elem, mask) {\n    if (!this.findSymbol(mask)) {\n      var symbolId = createElementID();\n      var masker = createNS('mask');\n      masker.setAttribute('id', mask.layerId);\n      masker.setAttribute('mask-type', 'alpha');\n\n      _svgMatteSymbols.push(mask);\n\n      var defs = elem.globalData.defs;\n      defs.appendChild(masker);\n      var symbol = createNS('symbol');\n      symbol.setAttribute('id', symbolId);\n      this.replaceInParent(mask, symbolId);\n      symbol.appendChild(mask.layerElement);\n      defs.appendChild(symbol);\n      var useElem = createNS('use');\n      useElem.setAttribute('href', '#' + symbolId);\n      masker.appendChild(useElem);\n      mask.data.hd = false;\n      mask.show();\n    }\n\n    elem.setMatte(mask.layerId);\n  };\n\n  SVGMatte3Effect.prototype.initialize = function () {\n    var ind = this.filterManager.effectElements[0].p.v;\n    var elements = this.elem.comp.elements;\n    var i = 0;\n    var len = elements.length;\n\n    while (i < len) {\n      if (elements[i] && elements[i].data.ind === ind) {\n        this.setElementAsMask(this.elem, elements[i]);\n      }\n\n      i += 1;\n    }\n\n    this.initialized = true;\n  };\n\n  SVGMatte3Effect.prototype.renderFrame = function () {\n    if (!this.initialized) {\n      this.initialize();\n    }\n  };\n\n  function SVGGaussianBlurEffect(filter, filterManager, elem, id) {\n    // Outset the filter region by 100% on all sides to accommodate blur expansion.\n    filter.setAttribute('x', '-100%');\n    filter.setAttribute('y', '-100%');\n    filter.setAttribute('width', '300%');\n    filter.setAttribute('height', '300%');\n    this.filterManager = filterManager;\n    var feGaussianBlur = createNS('feGaussianBlur');\n    feGaussianBlur.setAttribute('result', id);\n    filter.appendChild(feGaussianBlur);\n    this.feGaussianBlur = feGaussianBlur;\n  }\n\n  SVGGaussianBlurEffect.prototype.renderFrame = function (forceRender) {\n    if (forceRender || this.filterManager._mdf) {\n      // Empirical value, matching AE's blur appearance.\n      var kBlurrinessToSigma = 0.3;\n      var sigma = this.filterManager.effectElements[0].p.v * kBlurrinessToSigma; // Dimensions mapping:\n      //\n      //   1 -> horizontal & vertical\n      //   2 -> horizontal only\n      //   3 -> vertical only\n      //\n\n      var dimensions = this.filterManager.effectElements[1].p.v;\n      var sigmaX = dimensions == 3 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      var sigmaY = dimensions == 2 ? 0 : sigma; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('stdDeviation', sigmaX + ' ' + sigmaY); // Repeat edges mapping:\n      //\n      //   0 -> off -> duplicate\n      //   1 -> on  -> wrap\n\n      var edgeMode = this.filterManager.effectElements[2].p.v == 1 ? 'wrap' : 'duplicate'; // eslint-disable-line eqeqeq\n\n      this.feGaussianBlur.setAttribute('edgeMode', edgeMode);\n    }\n  };\n\n  registerRenderer('canvas', CanvasRenderer);\n  registerRenderer('html', HybridRenderer);\n  registerRenderer('svg', SVGRenderer); // Registering shape modifiers\n\n  ShapeModifiers.registerModifier('tm', TrimModifier);\n  ShapeModifiers.registerModifier('pb', PuckerAndBloatModifier);\n  ShapeModifiers.registerModifier('rp', RepeaterModifier);\n  ShapeModifiers.registerModifier('rd', RoundCornersModifier); // Registering expression plugin\n\n  setExpressionsPlugin(Expressions);\n  initialize$1();\n  initialize(); // Registering svg effects\n\n  registerEffect(20, SVGTintFilter, true);\n  registerEffect(21, SVGFillFilter, true);\n  registerEffect(22, SVGStrokeEffect, false);\n  registerEffect(23, SVGTritoneFilter, true);\n  registerEffect(24, SVGProLevelsFilter, true);\n  registerEffect(25, SVGDropShadowEffect, true);\n  registerEffect(28, SVGMatte3Effect, false);\n  registerEffect(29, SVGGaussianBlurEffect, true);\n\n  return lottie;\n\n}));\n","var safeIsNaN = Number.isNaN ||\n    function ponyfill(value) {\n        return typeof value === 'number' && value !== value;\n    };\nfunction isEqual(first, second) {\n    if (first === second) {\n        return true;\n    }\n    if (safeIsNaN(first) && safeIsNaN(second)) {\n        return true;\n    }\n    return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n    if (newInputs.length !== lastInputs.length) {\n        return false;\n    }\n    for (var i = 0; i < newInputs.length; i++) {\n        if (!isEqual(newInputs[i], lastInputs[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n    if (isEqual === void 0) { isEqual = areInputsEqual; }\n    var lastThis;\n    var lastArgs = [];\n    var lastResult;\n    var calledOnce = false;\n    function memoized() {\n        var newArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            newArgs[_i] = arguments[_i];\n        }\n        if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {\n            return lastResult;\n        }\n        lastResult = resultFn.apply(this, newArgs);\n        calledOnce = true;\n        lastThis = this;\n        lastArgs = newArgs;\n        return lastResult;\n    }\n    return memoized;\n}\n\nexport default memoizeOne;\n","import { isPlainObject, isArray, isSymbol } from 'is-what';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n}\n\nfunction assignProp(carry, key, newVal, originalObject) {\r\n    var propType = originalObject.propertyIsEnumerable(key)\r\n        ? 'enumerable'\r\n        : 'nonenumerable';\r\n    if (propType === 'enumerable')\r\n        carry[key] = newVal;\r\n    if (propType === 'nonenumerable') {\r\n        Object.defineProperty(carry, key, {\r\n            value: newVal,\r\n            enumerable: false,\r\n            writable: true,\r\n            configurable: true\r\n        });\r\n    }\r\n}\r\nfunction mergeRecursively(origin, newComer, extensions) {\r\n    // work directly on newComer if its not an object\r\n    if (!isPlainObject(newComer)) {\r\n        // extend merge rules\r\n        if (extensions && isArray(extensions)) {\r\n            extensions.forEach(function (extend) {\r\n                newComer = extend(origin, newComer);\r\n            });\r\n        }\r\n        return newComer;\r\n    }\r\n    // define newObject to merge all values upon\r\n    var newObject = {};\r\n    if (isPlainObject(origin)) {\r\n        var props_1 = Object.getOwnPropertyNames(origin);\r\n        var symbols_1 = Object.getOwnPropertySymbols(origin);\r\n        newObject = __spreadArrays(props_1, symbols_1).reduce(function (carry, key) {\r\n            // @ts-ignore\r\n            var targetVal = origin[key];\r\n            if ((!isSymbol(key) && !Object.getOwnPropertyNames(newComer).includes(key)) ||\r\n                (isSymbol(key) && !Object.getOwnPropertySymbols(newComer).includes(key))) {\r\n                assignProp(carry, key, targetVal, origin);\r\n            }\r\n            return carry;\r\n        }, {});\r\n    }\r\n    var props = Object.getOwnPropertyNames(newComer);\r\n    var symbols = Object.getOwnPropertySymbols(newComer);\r\n    var result = __spreadArrays(props, symbols).reduce(function (carry, key) {\r\n        // re-define the origin and newComer as targetVal and newVal\r\n        var newVal = newComer[key];\r\n        var targetVal = (isPlainObject(origin))\r\n            // @ts-ignore\r\n            ? origin[key]\r\n            : undefined;\r\n        // extend merge rules\r\n        if (extensions && isArray(extensions)) {\r\n            extensions.forEach(function (extend) {\r\n                newVal = extend(targetVal, newVal);\r\n            });\r\n        }\r\n        // When newVal is an object do the merge recursively\r\n        if (targetVal !== undefined && isPlainObject(newVal)) {\r\n            newVal = mergeRecursively(targetVal, newVal, extensions);\r\n        }\r\n        assignProp(carry, key, newVal, newComer);\r\n        return carry;\r\n    }, newObject);\r\n    return result;\r\n}\r\n/**\r\n * Merge anything recursively.\r\n * Objects get merged, special objects (classes etc.) are re-assigned \"as is\".\r\n * Basic types overwrite objects or other basic types.\r\n *\r\n * @param {(IConfig | any)} origin\r\n * @param {...any[]} newComers\r\n * @returns the result\r\n */\r\nfunction merge(origin) {\r\n    var newComers = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        newComers[_i - 1] = arguments[_i];\r\n    }\r\n    var extensions = null;\r\n    var base = origin;\r\n    if (isPlainObject(origin) && origin.extensions && Object.keys(origin).length === 1) {\r\n        base = {};\r\n        extensions = origin.extensions;\r\n    }\r\n    return newComers.reduce(function (result, newComer) {\r\n        return mergeRecursively(result, newComer, extensions);\r\n    }, base);\r\n}\n\nfunction concatArrays(originVal, newVal) {\r\n    if (isArray(originVal) && isArray(newVal)) {\r\n        // concat logic\r\n        return originVal.concat(newVal);\r\n    }\r\n    return newVal; // always return newVal as fallback!!\r\n}\n\nexport default merge;\nexport { concatArrays, merge };\n","// extracted by mini-css-extract-plugin\nexport var borderColor = \"#B9BCC0\";\nexport var contentMargin = \"16px\";\nexport var contentPadding = \"16px\";\nexport var errorBg = \"#FFEEEF\";\nexport var errorColor = \"#DB1A1A\";\nexport var eviteBlue = \"#00A0D1\";\nexport var eviteBlueDark = \"#0093BF\";\nexport var eviteBlueLight = \"#57BBE3\";\nexport var eviteGold = \"#FCB03E\";\nexport var eviteGreen = \"#28A842\";\nexport var eviteGreenDark = \"#248538\";\nexport var eviteMagenta = \"#FF6998\";\nexport var eviteMagentaDark = \"#E8407B\";\nexport var eviteOrange = \"#FF7C36\";\nexport var eviteOrangeDark = \"#ED702D\";\nexport var eviteProBlue = \"#B0E2EE\";\nexport var evitePurple = \"#B86BC9\";\nexport var evitePurpleDark = \"#9D52B0\";\nexport var eviteTeal = \"#18ccc6\";\nexport var eviteTealDark = \"#00A6A0\";\nexport var gray1 = \"#F5F5F7\";\nexport var gray2 = \"#E1E3E6\";\nexport var gray3 = \"#B9BCC0\";\nexport var gray4 = \"#91959C\";\nexport var gray5 = \"#6F7378\";\nexport var gray6 = \"#2E3136\";\nexport var infoBg = \"#DBF7FF\";\nexport var infoColor = \"#0093BF\";\nexport var inviteMaybe = \"#FCB03E // rsvpMaybe\";\nexport var inviteNo = \"#E8407B // rsvpNo\";\nexport var inviteYes = \"#28A842 // rsvpYes\";\nexport var largeShadow = \"0 2px 12px rgba(0, 0, 0, 0.24)\";\nexport var linkColor = \"#0093BF\";\nexport var linkHoverColor = \"#007699\";\nexport var pampersColor = \"#00AAA5\";\nexport var radius = \"8px\";\nexport var shadow = \"0 2px 2px rgba(0, 0, 0, 0.2)\";\nexport var spacing12 = \"12px\";\nexport var spacing16 = \"16px\";\nexport var spacing24 = \"24px\";\nexport var spacing32 = \"32px\";\nexport var spacing4 = \"4px\";\nexport var spacing8 = \"8px\";\nexport var successBg = \"#E3FCD9\";\nexport var successColor = \"#28A842\";\nexport var virtualPartyBlue = \"#43C7DE\";\nexport var virtualPartyLightBlue = \"#5AD7FD\";\nexport var virtualPartyRed = \"#FD5A5A\";\nexport var warningBg = \"#FFF0C7\";\nexport var warningColor = \"#ED702D\";\nexport var white = \"#FFFFFF\";","// extracted by mini-css-extract-plugin\nexport var aquamarine = \"#709FFF\";\nexport var bubbleGum = \"#FFECE9\";\nexport var charcoal = \"#101B21\";\nexport var citrine = \"#FF9548\";\nexport var citrineWebText = \"#C75300\";\nexport var cloud = \"#B9BCBF\";\nexport var coin = \"#92959B\";\nexport var cottonCandy = \"#E2ECFF\";\nexport var emerald = \"#66DB86\";\nexport var emeraldWebText = \"#20883C\";\nexport var eviteGreen = \"#28A842\";\nexport var feedbackError = \"#FF6348\";\nexport var feedbackErrorBg = \"#FFECE9\";\nexport var feedbackErrorSubtle = \"#FFECE9\";\nexport var feedbackInformation = \"#709FFF\";\nexport var feedbackInformationBg = \"#E2ECFF\";\nexport var feedbackInformationSuble = \"#E2ECFF\";\nexport var feedbackMaybe = \"#FF9548\";\nexport var feedbackNo = \"#E092FF\";\nexport var feedbackNoReply = \"#B9BCBF\";\nexport var feedbackSuccess = \"#66DB86\";\nexport var feedbackSuccessBg = \"#E3FBE4\";\nexport var feedbackSuccessSubtle = \"#E3FBE4\";\nexport var feedbackWarning = \"#FF9548\";\nexport var feedbackWarningBg = \"#FFF5ED\";\nexport var feedbackWarningSubtle = \"#FFF5ED\";\nexport var feedbackYes = \"#66DB86\";\nexport var fog = \"#F5F5F7\";\nexport var formBorderDisabled = \"#92959B\";\nexport var ghost = \"#FFFFFF\";\nexport var largeAndUp = \"calc(80rem - 0.1rem)\";\nexport var largishAndUp = \"calc(61.876rem - 0.1rem)\";\nexport var lavender = \"#EBEAFD\";\nexport var linen = \"#F5F3F2\";\nexport var link = \"#5352EB\";\nexport var linkColor = \"#5352EB\";\nexport var linkHoverColor = \"#5352EB\";\nexport var mediumAndUp = \"calc(48rem - 0.1rem)\";\nexport var menuHover = \"rgba(106, 110, 113, 0.2)\";\nexport var mexicanOpal = \"#FF6348\";\nexport var mexicanOpalWebText = \"#D62000\";\nexport var mintChip = \"#E3FBE4\";\nexport var pebble = \"#6A6E71\";\nexport var placeholder = \"#92959B\";\nexport var popoverColor = \"#6A6E71\";\nexport var popoverTextColor = \"#FFFFFF\";\nexport var rose = \"#E092FF\";\nexport var roseWebText = \"#C10097\";\nexport var rsvpMaybe = \"#FF9548\";\nexport var rsvpNo = \"#E092FF\";\nexport var rsvpYes = \"#66DB86\";\nexport var shadow = \"#2E3136\";\nexport var silver = \"#E1E3E6\";\nexport var smallAndUp = \"calc(31.25rem - 0.1rem)\";\nexport var spacingLg = \"clamp(2.5rem, 11vw, 5rem)\";\nexport var spacingMd = \"clamp(1.5rem, 5vw, 3rem)\";\nexport var spacingSm = \"clamp(1rem, 3vw, 1.5rem)\";\nexport var tanzanite = \"#5352EB\";\nexport var tanzaniteWebText = \"#2424E5\";\nexport var tigersEye = \"#CA6E2E\";\nexport var tooltipColor = \"#E2ECFF\";\nexport var tooltipTextColor = \"#101B21\";\nexport var vanilla = \"#FFF5ED\";\nexport var waffle = \"#F4E2D5\";\nexport var white = \"#FFFFFF\";","// extracted by mini-css-extract-plugin\nexport var appleColor = \"#2E3136\";\nexport var darkBlue = \"#0093BF\";\nexport var darkMagenta = \"#E8407B\";\nexport var darkOrange = \"#ED702D\";\nexport var darkPurple = \"#9D52B0\";\nexport var darkTeal = \"#00A6A0\";\nexport var eviteBlue = \"#00A0D1\";\nexport var eviteGold = \"#FCB03E\";\nexport var eviteGreen = \"#28A842\";\nexport var eviteGreenDark = \"#248538\";\nexport var eviteMagenta = \"#FF6998\";\nexport var eviteOrange = \"#FF7C36\";\nexport var evitePurple = \"#B86BC9\";\nexport var eviteTeal = \"#18CCC6\";\nexport var facebookColor = \"#3B5998\";\nexport var googleColor = \"#b31412\";\nexport var gray2 = \"#E1E3E6\";\nexport var gray3 = \"#B9BCBF\";\nexport var gray4 = \"#92959B\";\nexport var gray5 = \"#6A6E71\";\nexport var gray6 = \"#2E3136\";\nexport var linkColor = \"#00A0D1\";\nexport var linkHoverColor = \"#0093BF\";\nexport var maybeGold = \"#FAAF4A\";\nexport var paleBlue = \"#57BBE3\";\nexport var paleBlueLight = \"#A7E7FE\";\nexport var rsvpMaybe = \"#FAAF4A\";\nexport var rsvpNo = \"#E8407B\";\nexport var rsvpYes = \"#28A842\";\nexport var twitterColor = \"#1DA1F2\";\nexport var white = \"#FFFFFF\";","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","var raf = function raf(callback) {\n  return +setTimeout(callback, 16);\n};\nvar caf = function caf(num) {\n  return clearTimeout(num);\n};\nif (typeof window !== 'undefined' && 'requestAnimationFrame' in window) {\n  raf = function raf(callback) {\n    return window.requestAnimationFrame(callback);\n  };\n  caf = function caf(handle) {\n    return window.cancelAnimationFrame(handle);\n  };\n}\nvar rafUUID = 0;\nvar rafIds = new Map();\nfunction cleanup(id) {\n  rafIds.delete(id);\n}\nvar wrapperRaf = function wrapperRaf(callback) {\n  var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n  rafUUID += 1;\n  var id = rafUUID;\n  function callRef(leftTimes) {\n    if (leftTimes === 0) {\n      // Clean up\n      cleanup(id);\n\n      // Trigger\n      callback();\n    } else {\n      // Next raf\n      var realId = raf(function () {\n        callRef(leftTimes - 1);\n      });\n\n      // Bind real raf id\n      rafIds.set(id, realId);\n    }\n  }\n  callRef(times);\n  return id;\n};\nwrapperRaf.cancel = function (id) {\n  var realId = rafIds.get(id);\n  cleanup(id);\n  return caf(realId);\n};\nif (process.env.NODE_ENV !== 'production') {\n  wrapperRaf.ids = function () {\n    return rafIds;\n  };\n}\nexport default wrapperRaf;","export default function contains(root, n) {\n  if (!root) {\n    return false;\n  }\n\n  // Use native if support\n  if (root.contains) {\n    return root.contains(n);\n  }\n\n  // `document.contains` not support with IE11\n  var node = n;\n  while (node) {\n    if (node === root) {\n      return true;\n    }\n    node = node.parentNode;\n  }\n  return false;\n}","import React from 'react';\nimport ReactDOM from 'react-dom';\nexport function isDOM(node) {\n  // https://developer.mozilla.org/en-US/docs/Web/API/Element\n  // Since XULElement is also subclass of Element, we only need HTMLElement and SVGElement\n  return node instanceof HTMLElement || node instanceof SVGElement;\n}\n\n/**\n * Return if a node is a DOM node. Else will return by `findDOMNode`\n */\nexport default function findDOMNode(node) {\n  if (isDOM(node)) {\n    return node;\n  }\n  if (node instanceof React.Component) {\n    return ReactDOM.findDOMNode(node);\n  }\n  return null;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\n/* eslint-disable no-param-reassign */\n\nimport { isValidElement } from 'react';\nimport { isFragment, isMemo } from 'react-is';\nimport useMemo from \"./hooks/useMemo\";\nexport function fillRef(ref, node) {\n  if (typeof ref === 'function') {\n    ref(node);\n  } else if (_typeof(ref) === 'object' && ref && 'current' in ref) {\n    ref.current = node;\n  }\n}\n\n/**\n * Merge refs into one ref function to support ref passing.\n */\nexport function composeRef() {\n  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n    refs[_key] = arguments[_key];\n  }\n  var refList = refs.filter(function (ref) {\n    return ref;\n  });\n  if (refList.length <= 1) {\n    return refList[0];\n  }\n  return function (node) {\n    refs.forEach(function (ref) {\n      fillRef(ref, node);\n    });\n  };\n}\nexport function useComposeRef() {\n  for (var _len2 = arguments.length, refs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    refs[_key2] = arguments[_key2];\n  }\n  return useMemo(function () {\n    return composeRef.apply(void 0, refs);\n  }, refs, function (prev, next) {\n    return prev.length !== next.length || prev.every(function (ref, i) {\n      return ref !== next[i];\n    });\n  });\n}\nexport function supportRef(nodeOrComponent) {\n  var _type$prototype, _nodeOrComponent$prot;\n  var type = isMemo(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type;\n\n  // Function component node\n  if (typeof type === 'function' && !((_type$prototype = type.prototype) !== null && _type$prototype !== void 0 && _type$prototype.render)) {\n    return false;\n  }\n\n  // Class component\n  if (typeof nodeOrComponent === 'function' && !((_nodeOrComponent$prot = nodeOrComponent.prototype) !== null && _nodeOrComponent$prot !== void 0 && _nodeOrComponent$prot.render)) {\n    return false;\n  }\n  return true;\n}\nexport function supportNodeRef(node) {\n  if (! /*#__PURE__*/isValidElement(node)) {\n    return false;\n  }\n  if (isFragment(node)) {\n    return false;\n  }\n  return supportRef(node);\n}\n/* eslint-enable */","import ReactDOM from 'react-dom';\nexport default function addEventListenerWrap(target, eventType, cb, option) {\n  /* eslint camelcase: 2 */\n  var callback = ReactDOM.unstable_batchedUpdates ? function run(e) {\n    ReactDOM.unstable_batchedUpdates(cb, e);\n  } : cb;\n  if (target !== null && target !== void 0 && target.addEventListener) {\n    target.addEventListener(eventType, callback, option);\n  }\n  return {\n    remove: function remove() {\n      if (target !== null && target !== void 0 && target.removeEventListener) {\n        target.removeEventListener(eventType, callback, option);\n      }\n    }\n  };\n}","export default function canUseDom() {\n  return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}","import { useRef, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport ReactDOM from 'react-dom';\nimport canUseDom from \"./Dom/canUseDom\";\nvar Portal = /*#__PURE__*/forwardRef(function (props, ref) {\n  var didUpdate = props.didUpdate,\n    getContainer = props.getContainer,\n    children = props.children;\n  var parentRef = useRef();\n  var containerRef = useRef();\n\n  // Ref return nothing, only for wrapper check exist\n  useImperativeHandle(ref, function () {\n    return {};\n  });\n\n  // Create container in client side with sync to avoid useEffect not get ref\n  var initRef = useRef(false);\n  if (!initRef.current && canUseDom()) {\n    containerRef.current = getContainer();\n    parentRef.current = containerRef.current.parentNode;\n    initRef.current = true;\n  }\n\n  // [Legacy] Used by `rc-trigger`\n  useEffect(function () {\n    didUpdate === null || didUpdate === void 0 || didUpdate(props);\n  });\n  useEffect(function () {\n    // Restore container to original place\n    // React 18 StrictMode will unmount first and mount back for effect test:\n    // https://reactjs.org/blog/2022/03/29/react-v18.html#new-strict-mode-behaviors\n    if (containerRef.current.parentNode === null && parentRef.current !== null) {\n      parentRef.current.appendChild(containerRef.current);\n    }\n    return function () {\n      var _containerRef$current;\n      // [Legacy] This should not be handle by Portal but parent PortalWrapper instead.\n      // Since some component use `Portal` directly, we have to keep the logic here.\n      (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 || (_containerRef$current = _containerRef$current.parentNode) === null || _containerRef$current === void 0 || _containerRef$current.removeChild(containerRef.current);\n    };\n  }, []);\n  return containerRef.current ? /*#__PURE__*/ReactDOM.createPortal(children, containerRef.current) : null;\n});\nexport default Portal;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\n\nfunction isPointsEq(a1, a2, isAlignPoint) {\n  if (isAlignPoint) {\n    return a1[0] === a2[0];\n  }\n\n  return a1[0] === a2[0] && a1[1] === a2[1];\n}\n\nexport function getAlignFromPlacement(builtinPlacements, placementStr, align) {\n  var baseAlign = builtinPlacements[placementStr] || {};\n  return _objectSpread(_objectSpread({}, baseAlign), align);\n}\nexport function getAlignPopupClassName(builtinPlacements, prefixCls, align, isAlignPoint) {\n  var points = align.points;\n  var placements = Object.keys(builtinPlacements);\n\n  for (var i = 0; i < placements.length; i += 1) {\n    var placement = placements[i];\n\n    if (isPointsEq(builtinPlacements[placement].points, points, isAlignPoint)) {\n      return \"\".concat(prefixCls, \"-placement-\").concat(placement);\n    }\n  }\n\n  return '';\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"children\"];\nimport * as React from 'react';\nexport var Context = /*#__PURE__*/React.createContext({});\nexport default function MotionProvider(_ref) {\n  var children = _ref.children,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return /*#__PURE__*/React.createElement(Context.Provider, {\n    value: props\n  }, children);\n}","import _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport * as React from 'react';\nvar DomWrapper = /*#__PURE__*/function (_React$Component) {\n  _inherits(DomWrapper, _React$Component);\n  var _super = _createSuper(DomWrapper);\n  function DomWrapper() {\n    _classCallCheck(this, DomWrapper);\n    return _super.apply(this, arguments);\n  }\n  _createClass(DomWrapper, [{\n    key: \"render\",\n    value: function render() {\n      return this.props.children;\n    }\n  }]);\n  return DomWrapper;\n}(React.Component);\nexport default DomWrapper;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\n/**\n * Same as React.useState but `setState` accept `ignoreDestroy` param to not to setState after destroyed.\n * We do not make this auto is to avoid real memory leak.\n * Developer should confirm it's safe to ignore themselves.\n */\nexport default function useSafeState(defaultValue) {\n  var destroyRef = React.useRef(false);\n  var _React$useState = React.useState(defaultValue),\n    _React$useState2 = _slicedToArray(_React$useState, 2),\n    value = _React$useState2[0],\n    setValue = _React$useState2[1];\n  React.useEffect(function () {\n    destroyRef.current = false;\n    return function () {\n      destroyRef.current = true;\n    };\n  }, []);\n  function safeSetState(updater, ignoreDestroy) {\n    if (ignoreDestroy && destroyRef.current) {\n      return;\n    }\n    setValue(updater);\n  }\n  return [value, safeSetState];\n}","export var STATUS_NONE = 'none';\nexport var STATUS_APPEAR = 'appear';\nexport var STATUS_ENTER = 'enter';\nexport var STATUS_LEAVE = 'leave';\nexport var STEP_NONE = 'none';\nexport var STEP_PREPARE = 'prepare';\nexport var STEP_START = 'start';\nexport var STEP_ACTIVE = 'active';\nexport var STEP_ACTIVATED = 'end';\n/**\n * Used for disabled motion case.\n * Prepare stage will still work but start & active will be skipped.\n */\nexport var STEP_PREPARED = 'prepared';","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport canUseDOM from \"rc-util/es/Dom/canUseDom\";\n// ================= Transition =================\n// Event wrapper. Copy from react source code\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\".concat(styleProp)] = \"webkit\".concat(eventName);\n  prefixes[\"Moz\".concat(styleProp)] = \"moz\".concat(eventName);\n  prefixes[\"ms\".concat(styleProp)] = \"MS\".concat(eventName);\n  prefixes[\"O\".concat(styleProp)] = \"o\".concat(eventName.toLowerCase());\n  return prefixes;\n}\nexport function getVendorPrefixes(domSupport, win) {\n  var prefixes = {\n    animationend: makePrefixMap('Animation', 'AnimationEnd'),\n    transitionend: makePrefixMap('Transition', 'TransitionEnd')\n  };\n  if (domSupport) {\n    if (!('AnimationEvent' in win)) {\n      delete prefixes.animationend.animation;\n    }\n    if (!('TransitionEvent' in win)) {\n      delete prefixes.transitionend.transition;\n    }\n  }\n  return prefixes;\n}\nvar vendorPrefixes = getVendorPrefixes(canUseDOM(), typeof window !== 'undefined' ? window : {});\nvar style = {};\nif (canUseDOM()) {\n  var _document$createEleme = document.createElement('div');\n  style = _document$createEleme.style;\n}\nvar prefixedEventNames = {};\nexport function getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) {\n    return prefixedEventNames[eventName];\n  }\n  var prefixMap = vendorPrefixes[eventName];\n  if (prefixMap) {\n    var stylePropList = Object.keys(prefixMap);\n    var len = stylePropList.length;\n    for (var i = 0; i < len; i += 1) {\n      var styleProp = stylePropList[i];\n      if (Object.prototype.hasOwnProperty.call(prefixMap, styleProp) && styleProp in style) {\n        prefixedEventNames[eventName] = prefixMap[styleProp];\n        return prefixedEventNames[eventName];\n      }\n    }\n  }\n  return '';\n}\nvar internalAnimationEndName = getVendorPrefixedEventName('animationend');\nvar internalTransitionEndName = getVendorPrefixedEventName('transitionend');\nexport var supportTransition = !!(internalAnimationEndName && internalTransitionEndName);\nexport var animationEndName = internalAnimationEndName || 'animationend';\nexport var transitionEndName = internalTransitionEndName || 'transitionend';\nexport function getTransitionName(transitionName, transitionType) {\n  if (!transitionName) return null;\n  if (_typeof(transitionName) === 'object') {\n    var type = transitionType.replace(/-\\w/g, function (match) {\n      return match[1].toUpperCase();\n    });\n    return transitionName[type];\n  }\n  return \"\".concat(transitionName, \"-\").concat(transitionType);\n}","import * as React from 'react';\nimport { useRef } from 'react';\nimport { animationEndName, transitionEndName } from \"../util/motion\";\nexport default (function (callback) {\n  var cacheElementRef = useRef();\n\n  // Cache callback\n  var callbackRef = useRef(callback);\n  callbackRef.current = callback;\n\n  // Internal motion event handler\n  var onInternalMotionEnd = React.useCallback(function (event) {\n    callbackRef.current(event);\n  }, []);\n\n  // Remove events\n  function removeMotionEvents(element) {\n    if (element) {\n      element.removeEventListener(transitionEndName, onInternalMotionEnd);\n      element.removeEventListener(animationEndName, onInternalMotionEnd);\n    }\n  }\n\n  // Patch events\n  function patchMotionEvents(element) {\n    if (cacheElementRef.current && cacheElementRef.current !== element) {\n      removeMotionEvents(cacheElementRef.current);\n    }\n    if (element && element !== cacheElementRef.current) {\n      element.addEventListener(transitionEndName, onInternalMotionEnd);\n      element.addEventListener(animationEndName, onInternalMotionEnd);\n\n      // Save as cache in case dom removed trigger by `motionDeadline`\n      cacheElementRef.current = element;\n    }\n  }\n\n  // Clean up when removed\n  React.useEffect(function () {\n    return function () {\n      removeMotionEvents(cacheElementRef.current);\n    };\n  }, []);\n  return [patchMotionEvents, removeMotionEvents];\n});","import canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { useEffect, useLayoutEffect } from 'react';\n\n// It's safe to use `useLayoutEffect` but the warning is annoying\nvar useIsomorphicLayoutEffect = canUseDom() ? useLayoutEffect : useEffect;\nexport default useIsomorphicLayoutEffect;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport useState from \"rc-util/es/hooks/useState\";\nimport * as React from 'react';\nimport { STEP_ACTIVATED, STEP_ACTIVE, STEP_NONE, STEP_PREPARE, STEP_PREPARED, STEP_START } from \"../interface\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nimport useNextFrame from \"./useNextFrame\";\nvar FULL_STEP_QUEUE = [STEP_PREPARE, STEP_START, STEP_ACTIVE, STEP_ACTIVATED];\nvar SIMPLE_STEP_QUEUE = [STEP_PREPARE, STEP_PREPARED];\n\n/** Skip current step */\nexport var SkipStep = false;\n/** Current step should be update in */\nexport var DoStep = true;\nexport function isActive(step) {\n  return step === STEP_ACTIVE || step === STEP_ACTIVATED;\n}\nexport default (function (status, prepareOnly, callback) {\n  var _useState = useState(STEP_NONE),\n    _useState2 = _slicedToArray(_useState, 2),\n    step = _useState2[0],\n    setStep = _useState2[1];\n  var _useNextFrame = useNextFrame(),\n    _useNextFrame2 = _slicedToArray(_useNextFrame, 2),\n    nextFrame = _useNextFrame2[0],\n    cancelNextFrame = _useNextFrame2[1];\n  function startQueue() {\n    setStep(STEP_PREPARE, true);\n  }\n  var STEP_QUEUE = prepareOnly ? SIMPLE_STEP_QUEUE : FULL_STEP_QUEUE;\n  useIsomorphicLayoutEffect(function () {\n    if (step !== STEP_NONE && step !== STEP_ACTIVATED) {\n      var index = STEP_QUEUE.indexOf(step);\n      var nextStep = STEP_QUEUE[index + 1];\n      var result = callback(step);\n      if (result === SkipStep) {\n        // Skip when no needed\n        setStep(nextStep, true);\n      } else if (nextStep) {\n        // Do as frame for step update\n        nextFrame(function (info) {\n          function doNext() {\n            // Skip since current queue is ood\n            if (info.isCanceled()) return;\n            setStep(nextStep, true);\n          }\n          if (result === true) {\n            doNext();\n          } else {\n            // Only promise should be async\n            Promise.resolve(result).then(doNext);\n          }\n        });\n      }\n    }\n  }, [status, step]);\n  React.useEffect(function () {\n    return function () {\n      cancelNextFrame();\n    };\n  }, []);\n  return [startQueue, step];\n});","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n/* eslint-disable react/default-props-match-prop-types, react/no-multi-comp, react/prop-types */\nimport classNames from 'classnames';\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport { fillRef, supportRef } from \"rc-util/es/ref\";\nimport * as React from 'react';\nimport { useRef } from 'react';\nimport { Context } from \"./context\";\nimport DomWrapper from \"./DomWrapper\";\nimport useStatus from \"./hooks/useStatus\";\nimport { isActive } from \"./hooks/useStepQueue\";\nimport { STATUS_NONE, STEP_PREPARE, STEP_START } from \"./interface\";\nimport { getTransitionName, supportTransition } from \"./util/motion\";\n/**\n * `transitionSupport` is used for none transition test case.\n * Default we use browser transition event support check.\n */\nexport function genCSSMotion(config) {\n  var transitionSupport = config;\n  if (_typeof(config) === 'object') {\n    transitionSupport = config.transitionSupport;\n  }\n  function isSupportTransition(props, contextMotion) {\n    return !!(props.motionName && transitionSupport && contextMotion !== false);\n  }\n  var CSSMotion = /*#__PURE__*/React.forwardRef(function (props, ref) {\n    var _props$visible = props.visible,\n      visible = _props$visible === void 0 ? true : _props$visible,\n      _props$removeOnLeave = props.removeOnLeave,\n      removeOnLeave = _props$removeOnLeave === void 0 ? true : _props$removeOnLeave,\n      forceRender = props.forceRender,\n      children = props.children,\n      motionName = props.motionName,\n      leavedClassName = props.leavedClassName,\n      eventProps = props.eventProps;\n    var _React$useContext = React.useContext(Context),\n      contextMotion = _React$useContext.motion;\n    var supportMotion = isSupportTransition(props, contextMotion);\n\n    // Ref to the react node, it may be a HTMLElement\n    var nodeRef = useRef();\n    // Ref to the dom wrapper in case ref can not pass to HTMLElement\n    var wrapperNodeRef = useRef();\n    function getDomElement() {\n      try {\n        // Here we're avoiding call for findDOMNode since it's deprecated\n        // in strict mode. We're calling it only when node ref is not\n        // an instance of DOM HTMLElement. Otherwise use\n        // findDOMNode as a final resort\n        return nodeRef.current instanceof HTMLElement ? nodeRef.current : findDOMNode(wrapperNodeRef.current);\n      } catch (e) {\n        // Only happen when `motionDeadline` trigger but element removed.\n        return null;\n      }\n    }\n    var _useStatus = useStatus(supportMotion, visible, getDomElement, props),\n      _useStatus2 = _slicedToArray(_useStatus, 4),\n      status = _useStatus2[0],\n      statusStep = _useStatus2[1],\n      statusStyle = _useStatus2[2],\n      mergedVisible = _useStatus2[3];\n\n    // Record whether content has rendered\n    // Will return null for un-rendered even when `removeOnLeave={false}`\n    var renderedRef = React.useRef(mergedVisible);\n    if (mergedVisible) {\n      renderedRef.current = true;\n    }\n\n    // ====================== Refs ======================\n    var setNodeRef = React.useCallback(function (node) {\n      nodeRef.current = node;\n      fillRef(ref, node);\n    }, [ref]);\n\n    // ===================== Render =====================\n    var motionChildren;\n    var mergedProps = _objectSpread(_objectSpread({}, eventProps), {}, {\n      visible: visible\n    });\n    if (!children) {\n      // No children\n      motionChildren = null;\n    } else if (status === STATUS_NONE) {\n      // Stable children\n      if (mergedVisible) {\n        motionChildren = children(_objectSpread({}, mergedProps), setNodeRef);\n      } else if (!removeOnLeave && renderedRef.current && leavedClassName) {\n        motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n          className: leavedClassName\n        }), setNodeRef);\n      } else if (forceRender || !removeOnLeave && !leavedClassName) {\n        motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n          style: {\n            display: 'none'\n          }\n        }), setNodeRef);\n      } else {\n        motionChildren = null;\n      }\n    } else {\n      var _classNames;\n      // In motion\n      var statusSuffix;\n      if (statusStep === STEP_PREPARE) {\n        statusSuffix = 'prepare';\n      } else if (isActive(statusStep)) {\n        statusSuffix = 'active';\n      } else if (statusStep === STEP_START) {\n        statusSuffix = 'start';\n      }\n      var motionCls = getTransitionName(motionName, \"\".concat(status, \"-\").concat(statusSuffix));\n      motionChildren = children(_objectSpread(_objectSpread({}, mergedProps), {}, {\n        className: classNames(getTransitionName(motionName, status), (_classNames = {}, _defineProperty(_classNames, motionCls, motionCls && statusSuffix), _defineProperty(_classNames, motionName, typeof motionName === 'string'), _classNames)),\n        style: statusStyle\n      }), setNodeRef);\n    }\n\n    // Auto inject ref if child node not have `ref` props\n    if ( /*#__PURE__*/React.isValidElement(motionChildren) && supportRef(motionChildren)) {\n      var _ref = motionChildren,\n        originNodeRef = _ref.ref;\n      if (!originNodeRef) {\n        motionChildren = /*#__PURE__*/React.cloneElement(motionChildren, {\n          ref: setNodeRef\n        });\n      }\n    }\n    return /*#__PURE__*/React.createElement(DomWrapper, {\n      ref: wrapperNodeRef\n    }, motionChildren);\n  });\n  CSSMotion.displayName = 'CSSMotion';\n  return CSSMotion;\n}\nexport default genCSSMotion(supportTransition);","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport useState from \"rc-util/es/hooks/useState\";\nimport * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { STATUS_APPEAR, STATUS_ENTER, STATUS_LEAVE, STATUS_NONE, STEP_ACTIVE, STEP_PREPARE, STEP_PREPARED, STEP_START } from \"../interface\";\nimport useDomMotionEvents from \"./useDomMotionEvents\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\nimport useStepQueue, { DoStep, isActive, SkipStep } from \"./useStepQueue\";\nexport default function useStatus(supportMotion, visible, getElement, _ref) {\n  var _ref$motionEnter = _ref.motionEnter,\n    motionEnter = _ref$motionEnter === void 0 ? true : _ref$motionEnter,\n    _ref$motionAppear = _ref.motionAppear,\n    motionAppear = _ref$motionAppear === void 0 ? true : _ref$motionAppear,\n    _ref$motionLeave = _ref.motionLeave,\n    motionLeave = _ref$motionLeave === void 0 ? true : _ref$motionLeave,\n    motionDeadline = _ref.motionDeadline,\n    motionLeaveImmediately = _ref.motionLeaveImmediately,\n    onAppearPrepare = _ref.onAppearPrepare,\n    onEnterPrepare = _ref.onEnterPrepare,\n    onLeavePrepare = _ref.onLeavePrepare,\n    onAppearStart = _ref.onAppearStart,\n    onEnterStart = _ref.onEnterStart,\n    onLeaveStart = _ref.onLeaveStart,\n    onAppearActive = _ref.onAppearActive,\n    onEnterActive = _ref.onEnterActive,\n    onLeaveActive = _ref.onLeaveActive,\n    onAppearEnd = _ref.onAppearEnd,\n    onEnterEnd = _ref.onEnterEnd,\n    onLeaveEnd = _ref.onLeaveEnd,\n    onVisibleChanged = _ref.onVisibleChanged;\n  // Used for outer render usage to avoid `visible: false & status: none` to render nothing\n  var _useState = useState(),\n    _useState2 = _slicedToArray(_useState, 2),\n    asyncVisible = _useState2[0],\n    setAsyncVisible = _useState2[1];\n  var _useState3 = useState(STATUS_NONE),\n    _useState4 = _slicedToArray(_useState3, 2),\n    status = _useState4[0],\n    setStatus = _useState4[1];\n  var _useState5 = useState(null),\n    _useState6 = _slicedToArray(_useState5, 2),\n    style = _useState6[0],\n    setStyle = _useState6[1];\n  var mountedRef = useRef(false);\n  var deadlineRef = useRef(null);\n\n  // =========================== Dom Node ===========================\n  function getDomElement() {\n    return getElement();\n  }\n\n  // ========================== Motion End ==========================\n  var activeRef = useRef(false);\n\n  /**\n   * Clean up status & style\n   */\n  function updateMotionEndStatus() {\n    setStatus(STATUS_NONE, true);\n    setStyle(null, true);\n  }\n  function onInternalMotionEnd(event) {\n    var element = getDomElement();\n    if (event && !event.deadline && event.target !== element) {\n      // event exists\n      // not initiated by deadline\n      // transitionEnd not fired by inner elements\n      return;\n    }\n    var currentActive = activeRef.current;\n    var canEnd;\n    if (status === STATUS_APPEAR && currentActive) {\n      canEnd = onAppearEnd === null || onAppearEnd === void 0 ? void 0 : onAppearEnd(element, event);\n    } else if (status === STATUS_ENTER && currentActive) {\n      canEnd = onEnterEnd === null || onEnterEnd === void 0 ? void 0 : onEnterEnd(element, event);\n    } else if (status === STATUS_LEAVE && currentActive) {\n      canEnd = onLeaveEnd === null || onLeaveEnd === void 0 ? void 0 : onLeaveEnd(element, event);\n    }\n\n    // Only update status when `canEnd` and not destroyed\n    if (status !== STATUS_NONE && currentActive && canEnd !== false) {\n      updateMotionEndStatus();\n    }\n  }\n  var _useDomMotionEvents = useDomMotionEvents(onInternalMotionEnd),\n    _useDomMotionEvents2 = _slicedToArray(_useDomMotionEvents, 1),\n    patchMotionEvents = _useDomMotionEvents2[0];\n\n  // ============================= Step =============================\n  var getEventHandlers = function getEventHandlers(targetStatus) {\n    var _ref2, _ref3, _ref4;\n    switch (targetStatus) {\n      case STATUS_APPEAR:\n        return _ref2 = {}, _defineProperty(_ref2, STEP_PREPARE, onAppearPrepare), _defineProperty(_ref2, STEP_START, onAppearStart), _defineProperty(_ref2, STEP_ACTIVE, onAppearActive), _ref2;\n      case STATUS_ENTER:\n        return _ref3 = {}, _defineProperty(_ref3, STEP_PREPARE, onEnterPrepare), _defineProperty(_ref3, STEP_START, onEnterStart), _defineProperty(_ref3, STEP_ACTIVE, onEnterActive), _ref3;\n      case STATUS_LEAVE:\n        return _ref4 = {}, _defineProperty(_ref4, STEP_PREPARE, onLeavePrepare), _defineProperty(_ref4, STEP_START, onLeaveStart), _defineProperty(_ref4, STEP_ACTIVE, onLeaveActive), _ref4;\n      default:\n        return {};\n    }\n  };\n  var eventHandlers = React.useMemo(function () {\n    return getEventHandlers(status);\n  }, [status]);\n  var _useStepQueue = useStepQueue(status, !supportMotion, function (newStep) {\n      // Only prepare step can be skip\n      if (newStep === STEP_PREPARE) {\n        var onPrepare = eventHandlers[STEP_PREPARE];\n        if (!onPrepare) {\n          return SkipStep;\n        }\n        return onPrepare(getDomElement());\n      }\n\n      // Rest step is sync update\n      if (step in eventHandlers) {\n        var _eventHandlers$step;\n        setStyle(((_eventHandlers$step = eventHandlers[step]) === null || _eventHandlers$step === void 0 ? void 0 : _eventHandlers$step.call(eventHandlers, getDomElement(), null)) || null);\n      }\n      if (step === STEP_ACTIVE) {\n        // Patch events when motion needed\n        patchMotionEvents(getDomElement());\n        if (motionDeadline > 0) {\n          clearTimeout(deadlineRef.current);\n          deadlineRef.current = setTimeout(function () {\n            onInternalMotionEnd({\n              deadline: true\n            });\n          }, motionDeadline);\n        }\n      }\n      if (step === STEP_PREPARED) {\n        updateMotionEndStatus();\n      }\n      return DoStep;\n    }),\n    _useStepQueue2 = _slicedToArray(_useStepQueue, 2),\n    startStep = _useStepQueue2[0],\n    step = _useStepQueue2[1];\n  var active = isActive(step);\n  activeRef.current = active;\n\n  // ============================ Status ============================\n  // Update with new status\n  useIsomorphicLayoutEffect(function () {\n    setAsyncVisible(visible);\n    var isMounted = mountedRef.current;\n    mountedRef.current = true;\n\n    // if (!supportMotion) {\n    //   return;\n    // }\n\n    var nextStatus;\n\n    // Appear\n    if (!isMounted && visible && motionAppear) {\n      nextStatus = STATUS_APPEAR;\n    }\n\n    // Enter\n    if (isMounted && visible && motionEnter) {\n      nextStatus = STATUS_ENTER;\n    }\n\n    // Leave\n    if (isMounted && !visible && motionLeave || !isMounted && motionLeaveImmediately && !visible && motionLeave) {\n      nextStatus = STATUS_LEAVE;\n    }\n    var nextEventHandlers = getEventHandlers(nextStatus);\n\n    // Update to next status\n    if (nextStatus && (supportMotion || nextEventHandlers[STEP_PREPARE])) {\n      setStatus(nextStatus);\n      startStep();\n    } else {\n      // Set back in case no motion but prev status has prepare step\n      setStatus(STATUS_NONE);\n    }\n  }, [visible]);\n\n  // ============================ Effect ============================\n  // Reset when motion changed\n  useEffect(function () {\n    if (\n    // Cancel appear\n    status === STATUS_APPEAR && !motionAppear ||\n    // Cancel enter\n    status === STATUS_ENTER && !motionEnter ||\n    // Cancel leave\n    status === STATUS_LEAVE && !motionLeave) {\n      setStatus(STATUS_NONE);\n    }\n  }, [motionAppear, motionEnter, motionLeave]);\n  useEffect(function () {\n    return function () {\n      mountedRef.current = false;\n      clearTimeout(deadlineRef.current);\n    };\n  }, []);\n\n  // Trigger `onVisibleChanged`\n  var firstMountChangeRef = React.useRef(false);\n  useEffect(function () {\n    // [visible & motion not end] => [!visible & motion end] still need trigger onVisibleChanged\n    if (asyncVisible) {\n      firstMountChangeRef.current = true;\n    }\n    if (asyncVisible !== undefined && status === STATUS_NONE) {\n      // Skip first render is invisible since it's nothing changed\n      if (firstMountChangeRef.current || asyncVisible) {\n        onVisibleChanged === null || onVisibleChanged === void 0 ? void 0 : onVisibleChanged(asyncVisible);\n      }\n      firstMountChangeRef.current = true;\n    }\n  }, [asyncVisible, status]);\n\n  // ============================ Styles ============================\n  var mergedStyle = style;\n  if (eventHandlers[STEP_PREPARE] && step === STEP_START) {\n    mergedStyle = _objectSpread({\n      transition: 'none'\n    }, mergedStyle);\n  }\n  return [status, step, mergedStyle, asyncVisible !== null && asyncVisible !== void 0 ? asyncVisible : visible];\n}","import raf from \"rc-util/es/raf\";\nimport * as React from 'react';\nexport default (function () {\n  var nextFrameRef = React.useRef(null);\n  function cancelNextFrame() {\n    raf.cancel(nextFrameRef.current);\n  }\n  function nextFrame(callback) {\n    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n    cancelNextFrame();\n    var nextFrameId = raf(function () {\n      if (delay <= 1) {\n        callback({\n          isCanceled: function isCanceled() {\n            return nextFrameId !== nextFrameRef.current;\n          }\n        });\n      } else {\n        nextFrame(callback, delay - 1);\n      }\n    });\n    nextFrameRef.current = nextFrameId;\n  }\n  React.useEffect(function () {\n    return function () {\n      cancelNextFrame();\n    };\n  }, []);\n  return [nextFrame, cancelNextFrame];\n});","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nexport var STATUS_ADD = 'add';\nexport var STATUS_KEEP = 'keep';\nexport var STATUS_REMOVE = 'remove';\nexport var STATUS_REMOVED = 'removed';\nexport function wrapKeyToObject(key) {\n  var keyObj;\n  if (key && _typeof(key) === 'object' && 'key' in key) {\n    keyObj = key;\n  } else {\n    keyObj = {\n      key: key\n    };\n  }\n  return _objectSpread(_objectSpread({}, keyObj), {}, {\n    key: String(keyObj.key)\n  });\n}\nexport function parseKeys() {\n  var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  return keys.map(wrapKeyToObject);\n}\nexport function diffKeys() {\n  var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n  var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n  var list = [];\n  var currentIndex = 0;\n  var currentLen = currentKeys.length;\n  var prevKeyObjects = parseKeys(prevKeys);\n  var currentKeyObjects = parseKeys(currentKeys);\n\n  // Check prev keys to insert or keep\n  prevKeyObjects.forEach(function (keyObj) {\n    var hit = false;\n    for (var i = currentIndex; i < currentLen; i += 1) {\n      var currentKeyObj = currentKeyObjects[i];\n      if (currentKeyObj.key === keyObj.key) {\n        // New added keys should add before current key\n        if (currentIndex < i) {\n          list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) {\n            return _objectSpread(_objectSpread({}, obj), {}, {\n              status: STATUS_ADD\n            });\n          }));\n          currentIndex = i;\n        }\n        list.push(_objectSpread(_objectSpread({}, currentKeyObj), {}, {\n          status: STATUS_KEEP\n        }));\n        currentIndex += 1;\n        hit = true;\n        break;\n      }\n    }\n\n    // If not hit, it means key is removed\n    if (!hit) {\n      list.push(_objectSpread(_objectSpread({}, keyObj), {}, {\n        status: STATUS_REMOVE\n      }));\n    }\n  });\n\n  // Add rest to the list\n  if (currentIndex < currentLen) {\n    list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) {\n      return _objectSpread(_objectSpread({}, obj), {}, {\n        status: STATUS_ADD\n      });\n    }));\n  }\n\n  /**\n   * Merge same key when it remove and add again:\n   *    [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]\n   */\n  var keys = {};\n  list.forEach(function (_ref) {\n    var key = _ref.key;\n    keys[key] = (keys[key] || 0) + 1;\n  });\n  var duplicatedKeys = Object.keys(keys).filter(function (key) {\n    return keys[key] > 1;\n  });\n  duplicatedKeys.forEach(function (matchKey) {\n    // Remove `STATUS_REMOVE` node.\n    list = list.filter(function (_ref2) {\n      var key = _ref2.key,\n        status = _ref2.status;\n      return key !== matchKey || status !== STATUS_REMOVE;\n    });\n\n    // Update `STATUS_ADD` to `STATUS_KEEP`\n    list.forEach(function (node) {\n      if (node.key === matchKey) {\n        // eslint-disable-next-line no-param-reassign\n        node.status = STATUS_KEEP;\n      }\n    });\n  });\n  return list;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar _excluded = [\"component\", \"children\", \"onVisibleChanged\", \"onAllRemoved\"],\n  _excluded2 = [\"status\"];\n/* eslint react/prop-types: 0 */\nimport * as React from 'react';\nimport OriginCSSMotion from \"./CSSMotion\";\nimport { diffKeys, parseKeys, STATUS_ADD, STATUS_KEEP, STATUS_REMOVE, STATUS_REMOVED } from \"./util/diff\";\nimport { supportTransition } from \"./util/motion\";\nvar MOTION_PROP_NAMES = ['eventProps', 'visible', 'children', 'motionName', 'motionAppear', 'motionEnter', 'motionLeave', 'motionLeaveImmediately', 'motionDeadline', 'removeOnLeave', 'leavedClassName', 'onAppearPrepare', 'onAppearStart', 'onAppearActive', 'onAppearEnd', 'onEnterStart', 'onEnterActive', 'onEnterEnd', 'onLeaveStart', 'onLeaveActive', 'onLeaveEnd'];\n/**\n * Generate a CSSMotionList component with config\n * @param transitionSupport No need since CSSMotionList no longer depends on transition support\n * @param CSSMotion CSSMotion component\n */\nexport function genCSSMotionList(transitionSupport) {\n  var CSSMotion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : OriginCSSMotion;\n  var CSSMotionList = /*#__PURE__*/function (_React$Component) {\n    _inherits(CSSMotionList, _React$Component);\n    var _super = _createSuper(CSSMotionList);\n    function CSSMotionList() {\n      var _this;\n      _classCallCheck(this, CSSMotionList);\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      _this = _super.call.apply(_super, [this].concat(args));\n      _defineProperty(_assertThisInitialized(_this), \"state\", {\n        keyEntities: []\n      });\n      // ZombieJ: Return the count of rest keys. It's safe to refactor if need more info.\n      _defineProperty(_assertThisInitialized(_this), \"removeKey\", function (removeKey) {\n        var keyEntities = _this.state.keyEntities;\n        var nextKeyEntities = keyEntities.map(function (entity) {\n          if (entity.key !== removeKey) return entity;\n          return _objectSpread(_objectSpread({}, entity), {}, {\n            status: STATUS_REMOVED\n          });\n        });\n        _this.setState({\n          keyEntities: nextKeyEntities\n        });\n        return nextKeyEntities.filter(function (_ref) {\n          var status = _ref.status;\n          return status !== STATUS_REMOVED;\n        }).length;\n      });\n      return _this;\n    }\n    _createClass(CSSMotionList, [{\n      key: \"render\",\n      value: function render() {\n        var _this2 = this;\n        var keyEntities = this.state.keyEntities;\n        var _this$props = this.props,\n          component = _this$props.component,\n          children = _this$props.children,\n          _onVisibleChanged = _this$props.onVisibleChanged,\n          onAllRemoved = _this$props.onAllRemoved,\n          restProps = _objectWithoutProperties(_this$props, _excluded);\n        var Component = component || React.Fragment;\n        var motionProps = {};\n        MOTION_PROP_NAMES.forEach(function (prop) {\n          motionProps[prop] = restProps[prop];\n          delete restProps[prop];\n        });\n        delete restProps.keys;\n        return /*#__PURE__*/React.createElement(Component, restProps, keyEntities.map(function (_ref2, index) {\n          var status = _ref2.status,\n            eventProps = _objectWithoutProperties(_ref2, _excluded2);\n          var visible = status === STATUS_ADD || status === STATUS_KEEP;\n          return /*#__PURE__*/React.createElement(CSSMotion, _extends({}, motionProps, {\n            key: eventProps.key,\n            visible: visible,\n            eventProps: eventProps,\n            onVisibleChanged: function onVisibleChanged(changedVisible) {\n              _onVisibleChanged === null || _onVisibleChanged === void 0 ? void 0 : _onVisibleChanged(changedVisible, {\n                key: eventProps.key\n              });\n              if (!changedVisible) {\n                var restKeysCount = _this2.removeKey(eventProps.key);\n                if (restKeysCount === 0 && onAllRemoved) {\n                  onAllRemoved();\n                }\n              }\n            }\n          }), function (props, ref) {\n            return children(_objectSpread(_objectSpread({}, props), {}, {\n              index: index\n            }), ref);\n          });\n        }));\n      }\n    }], [{\n      key: \"getDerivedStateFromProps\",\n      value: function getDerivedStateFromProps(_ref3, _ref4) {\n        var keys = _ref3.keys;\n        var keyEntities = _ref4.keyEntities;\n        var parsedKeyObjects = parseKeys(keys);\n        var mixedKeyEntities = diffKeys(keyEntities, parsedKeyObjects);\n        return {\n          keyEntities: mixedKeyEntities.filter(function (entity) {\n            var prevEntity = keyEntities.find(function (_ref5) {\n              var key = _ref5.key;\n              return entity.key === key;\n            });\n\n            // Remove if already mark as removed\n            if (prevEntity && prevEntity.status === STATUS_REMOVED && entity.status === STATUS_REMOVE) {\n              return false;\n            }\n            return true;\n          })\n        };\n      }\n    }]);\n    return CSSMotionList;\n  }(React.Component);\n  _defineProperty(CSSMotionList, \"defaultProps\", {\n    component: 'div'\n  });\n  return CSSMotionList;\n}\nexport default genCSSMotionList(supportTransition);","import CSSMotion from \"./CSSMotion\";\nimport CSSMotionList from \"./CSSMotionList\";\nexport { default as Provider } from \"./context\";\nexport { CSSMotionList };\nexport default CSSMotion;","export function getMotion(_ref) {\n  var prefixCls = _ref.prefixCls,\n      motion = _ref.motion,\n      animation = _ref.animation,\n      transitionName = _ref.transitionName;\n\n  if (motion) {\n    return motion;\n  }\n\n  if (animation) {\n    return {\n      motionName: \"\".concat(prefixCls, \"-\").concat(animation)\n    };\n  }\n\n  if (transitionName) {\n    return {\n      motionName: transitionName\n    };\n  }\n\n  return null;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport CSSMotion from 'rc-motion';\nimport { getMotion } from \"../utils/legacyUtil\";\nexport default function Mask(props) {\n  var prefixCls = props.prefixCls,\n      visible = props.visible,\n      zIndex = props.zIndex,\n      mask = props.mask,\n      maskMotion = props.maskMotion,\n      maskAnimation = props.maskAnimation,\n      maskTransitionName = props.maskTransitionName;\n\n  if (!mask) {\n    return null;\n  }\n\n  var motion = {};\n\n  if (maskMotion || maskTransitionName || maskAnimation) {\n    motion = _objectSpread({\n      motionAppear: true\n    }, getMotion({\n      motion: maskMotion,\n      prefixCls: prefixCls,\n      transitionName: maskTransitionName,\n      animation: maskAnimation\n    }));\n  }\n\n  return /*#__PURE__*/React.createElement(CSSMotion, _extends({}, motion, {\n    visible: visible,\n    removeOnLeave: true\n  }), function (_ref) {\n    var className = _ref.className;\n    return /*#__PURE__*/React.createElement(\"div\", {\n      style: {\n        zIndex: zIndex\n      },\n      className: classNames(\"\".concat(prefixCls, \"-mask\"), className)\n    });\n  });\n}","/* eslint-disable no-console */\nvar warned = {};\nvar preWarningFns = [];\n\n/**\n * Pre warning enable you to parse content before console.error.\n * Modify to null will prevent warning.\n */\nexport var preMessage = function preMessage(fn) {\n  preWarningFns.push(fn);\n};\nexport function warning(valid, message) {\n  // Support uglify\n  if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n    var finalMessage = preWarningFns.reduce(function (msg, preMessageFn) {\n      return preMessageFn(msg !== null && msg !== void 0 ? msg : '', 'warning');\n    }, message);\n    if (finalMessage) {\n      console.error(\"Warning: \".concat(finalMessage));\n    }\n  }\n}\nexport function note(valid, message) {\n  // Support uglify\n  if (process.env.NODE_ENV !== 'production' && !valid && console !== undefined) {\n    var finalMessage = preWarningFns.reduce(function (msg, preMessageFn) {\n      return preMessageFn(msg !== null && msg !== void 0 ? msg : '', 'note');\n    }, message);\n    if (finalMessage) {\n      console.warn(\"Note: \".concat(finalMessage));\n    }\n  }\n}\nexport function resetWarned() {\n  warned = {};\n}\nexport function call(method, valid, message) {\n  if (!valid && !warned[message]) {\n    method(false, message);\n    warned[message] = true;\n  }\n}\nexport function warningOnce(valid, message) {\n  call(warning, valid, message);\n}\nexport function noteOnce(valid, message) {\n  call(note, valid, message);\n}\nwarningOnce.preMessage = preMessage;\nwarningOnce.resetWarned = resetWarned;\nwarningOnce.noteOnce = noteOnce;\nexport default warningOnce;\n/* eslint-enable */","import * as React from 'react';\nimport canUseDom from \"../Dom/canUseDom\";\n\n/**\n * Wrap `React.useLayoutEffect` which will not throw warning message in test env\n */\nvar useInternalLayoutEffect = process.env.NODE_ENV !== 'test' && canUseDom() ? React.useLayoutEffect : React.useEffect;\nvar useLayoutEffect = function useLayoutEffect(callback, deps) {\n  var firstMountRef = React.useRef(true);\n  useInternalLayoutEffect(function () {\n    return callback(firstMountRef.current);\n  }, deps);\n\n  // We tell react that first mount has passed\n  useInternalLayoutEffect(function () {\n    firstMountRef.current = false;\n    return function () {\n      firstMountRef.current = true;\n    };\n  }, []);\n};\nexport var useLayoutUpdateEffect = function useLayoutUpdateEffect(callback, deps) {\n  useLayoutEffect(function (firstMount) {\n    if (!firstMount) {\n      return callback();\n    }\n  }, deps);\n};\nexport default useLayoutEffect;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport ResizeObserver from 'resize-observer-polyfill';\nimport contains from \"rc-util/es/Dom/contains\";\nexport function isSamePoint(prev, next) {\n  if (prev === next) return true;\n  if (!prev || !next) return false;\n\n  if ('pageX' in next && 'pageY' in next) {\n    return prev.pageX === next.pageX && prev.pageY === next.pageY;\n  }\n\n  if ('clientX' in next && 'clientY' in next) {\n    return prev.clientX === next.clientX && prev.clientY === next.clientY;\n  }\n\n  return false;\n}\nexport function restoreFocus(activeElement, container) {\n  // Focus back if is in the container\n  if (activeElement !== document.activeElement && contains(container, activeElement) && typeof activeElement.focus === 'function') {\n    activeElement.focus();\n  }\n}\nexport function monitorResize(element, callback) {\n  var prevWidth = null;\n  var prevHeight = null;\n\n  function onResize(_ref) {\n    var _ref2 = _slicedToArray(_ref, 1),\n        target = _ref2[0].target;\n\n    if (!document.documentElement.contains(target)) return;\n\n    var _target$getBoundingCl = target.getBoundingClientRect(),\n        width = _target$getBoundingCl.width,\n        height = _target$getBoundingCl.height;\n\n    var fixedWidth = Math.floor(width);\n    var fixedHeight = Math.floor(height);\n\n    if (prevWidth !== fixedWidth || prevHeight !== fixedHeight) {\n      // https://webkit.org/blog/9997/resizeobserver-in-webkit/\n      Promise.resolve().then(function () {\n        callback({\n          width: fixedWidth,\n          height: fixedHeight\n        });\n      });\n    }\n\n    prevWidth = fixedWidth;\n    prevHeight = fixedHeight;\n  }\n\n  var resizeObserver = new ResizeObserver(onResize);\n\n  if (element) {\n    resizeObserver.observe(element);\n  }\n\n  return function () {\n    resizeObserver.disconnect();\n  };\n}","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\n\n/**\n * Removed props:\n *  - childrenProps\n */\nimport { alignElement, alignPoint } from 'dom-align';\nimport isEqual from \"rc-util/es/isEqual\";\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport isVisible from \"rc-util/es/Dom/isVisible\";\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport { composeRef } from \"rc-util/es/ref\";\nimport React from 'react';\nimport useBuffer from \"./hooks/useBuffer\";\nimport { isSamePoint, monitorResize, restoreFocus } from \"./util\";\n\nfunction getElement(func) {\n  if (typeof func !== 'function') return null;\n  return func();\n}\n\nfunction getPoint(point) {\n  if (_typeof(point) !== 'object' || !point) return null;\n  return point;\n}\n\nvar Align = function Align(_ref, ref) {\n  var children = _ref.children,\n      disabled = _ref.disabled,\n      target = _ref.target,\n      align = _ref.align,\n      onAlign = _ref.onAlign,\n      monitorWindowResize = _ref.monitorWindowResize,\n      _ref$monitorBufferTim = _ref.monitorBufferTime,\n      monitorBufferTime = _ref$monitorBufferTim === void 0 ? 0 : _ref$monitorBufferTim;\n  var cacheRef = React.useRef({});\n  /** Popup node ref */\n\n  var nodeRef = React.useRef();\n  var childNode = React.Children.only(children); // ===================== Align ======================\n  // We save the props here to avoid closure makes props ood\n\n  var forceAlignPropsRef = React.useRef({});\n  forceAlignPropsRef.current.disabled = disabled;\n  forceAlignPropsRef.current.target = target;\n  forceAlignPropsRef.current.align = align;\n  forceAlignPropsRef.current.onAlign = onAlign;\n\n  var _useBuffer = useBuffer(function () {\n    var _forceAlignPropsRef$c = forceAlignPropsRef.current,\n        latestDisabled = _forceAlignPropsRef$c.disabled,\n        latestTarget = _forceAlignPropsRef$c.target,\n        latestAlign = _forceAlignPropsRef$c.align,\n        latestOnAlign = _forceAlignPropsRef$c.onAlign;\n    var source = nodeRef.current;\n\n    if (!latestDisabled && latestTarget && source) {\n      var _result;\n\n      var _element = getElement(latestTarget);\n\n      var _point = getPoint(latestTarget);\n\n      cacheRef.current.element = _element;\n      cacheRef.current.point = _point;\n      cacheRef.current.align = latestAlign; // IE lose focus after element realign\n      // We should record activeElement and restore later\n\n      var _document = document,\n          activeElement = _document.activeElement; // We only align when element is visible\n\n      if (_element && isVisible(_element)) {\n        _result = alignElement(source, _element, latestAlign);\n      } else if (_point) {\n        _result = alignPoint(source, _point, latestAlign);\n      }\n\n      restoreFocus(activeElement, source);\n\n      if (latestOnAlign && _result) {\n        latestOnAlign(source, _result);\n      }\n\n      return true;\n    }\n\n    return false;\n  }, monitorBufferTime),\n      _useBuffer2 = _slicedToArray(_useBuffer, 2),\n      _forceAlign = _useBuffer2[0],\n      cancelForceAlign = _useBuffer2[1]; // ===================== Effect =====================\n  // Handle props change\n\n\n  var _React$useState = React.useState(),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      element = _React$useState2[0],\n      setElement = _React$useState2[1];\n\n  var _React$useState3 = React.useState(),\n      _React$useState4 = _slicedToArray(_React$useState3, 2),\n      point = _React$useState4[0],\n      setPoint = _React$useState4[1];\n\n  useLayoutEffect(function () {\n    setElement(getElement(target));\n    setPoint(getPoint(target));\n  });\n  React.useEffect(function () {\n    if (cacheRef.current.element !== element || !isSamePoint(cacheRef.current.point, point) || !isEqual(cacheRef.current.align, align)) {\n      _forceAlign();\n    }\n  }); // Watch popup element resize\n\n  React.useEffect(function () {\n    var cancelFn = monitorResize(nodeRef.current, _forceAlign);\n    return cancelFn;\n  }, [nodeRef.current]); // Watch target element resize\n\n  React.useEffect(function () {\n    var cancelFn = monitorResize(element, _forceAlign);\n    return cancelFn;\n  }, [element]); // Listen for disabled change\n\n  React.useEffect(function () {\n    if (!disabled) {\n      _forceAlign();\n    } else {\n      cancelForceAlign();\n    }\n  }, [disabled]); // Listen for window resize\n\n  React.useEffect(function () {\n    if (monitorWindowResize) {\n      var cancelFn = addEventListener(window, 'resize', _forceAlign);\n      return cancelFn.remove;\n    }\n  }, [monitorWindowResize]); // Clear all if unmount\n\n  React.useEffect(function () {\n    return function () {\n      cancelForceAlign();\n    };\n  }, []); // ====================== Ref =======================\n\n  React.useImperativeHandle(ref, function () {\n    return {\n      forceAlign: function forceAlign() {\n        return _forceAlign(true);\n      }\n    };\n  }); // ===================== Render =====================\n\n  if ( /*#__PURE__*/React.isValidElement(childNode)) {\n    childNode = /*#__PURE__*/React.cloneElement(childNode, {\n      ref: composeRef(childNode.ref, nodeRef)\n    });\n  }\n\n  return childNode;\n};\n\nvar RcAlign = /*#__PURE__*/React.forwardRef(Align);\nRcAlign.displayName = 'Align';\nexport default RcAlign;","import React from 'react';\nexport default (function (callback, buffer) {\n  var calledRef = React.useRef(false);\n  var timeoutRef = React.useRef(null);\n\n  function cancelTrigger() {\n    window.clearTimeout(timeoutRef.current);\n  }\n\n  function trigger(force) {\n    cancelTrigger();\n\n    if (!calledRef.current || force === true) {\n      if (callback(force) === false) {\n        // Not delay since callback cancelled self\n        return;\n      }\n\n      calledRef.current = true;\n      timeoutRef.current = window.setTimeout(function () {\n        calledRef.current = false;\n      }, buffer);\n    } else {\n      timeoutRef.current = window.setTimeout(function () {\n        calledRef.current = false;\n        trigger();\n      }, buffer);\n    }\n  }\n\n  return [trigger, function () {\n    calledRef.current = false;\n    cancelTrigger();\n  }];\n});","export default (function (element) {\n  if (!element) {\n    return false;\n  }\n  if (element instanceof Element) {\n    if (element.offsetParent) {\n      return true;\n    }\n    if (element.getBBox) {\n      var _getBBox = element.getBBox(),\n        width = _getBBox.width,\n        height = _getBBox.height;\n      if (width || height) {\n        return true;\n      }\n    }\n    if (element.getBoundingClientRect) {\n      var _element$getBoundingC = element.getBoundingClientRect(),\n        _width = _element$getBoundingC.width,\n        _height = _element$getBoundingC.height;\n      if (_width || _height) {\n        return true;\n      }\n    }\n  }\n  return false;\n});","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport warning from \"./warning\";\n\n/**\n * Deeply compares two object literals.\n * @param obj1 object 1\n * @param obj2 object 2\n * @param shallow shallow compare\n * @returns\n */\nfunction isEqual(obj1, obj2) {\n  var shallow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  // https://github.com/mapbox/mapbox-gl-js/pull/5979/files#diff-fde7145050c47cc3a306856efd5f9c3016e86e859de9afbd02c879be5067e58f\n  var refSet = new Set();\n  function deepEqual(a, b) {\n    var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n    var circular = refSet.has(a);\n    warning(!circular, 'Warning: There may be circular references');\n    if (circular) {\n      return false;\n    }\n    if (a === b) {\n      return true;\n    }\n    if (shallow && level > 1) {\n      return false;\n    }\n    refSet.add(a);\n    var newLevel = level + 1;\n    if (Array.isArray(a)) {\n      if (!Array.isArray(b) || a.length !== b.length) {\n        return false;\n      }\n      for (var i = 0; i < a.length; i++) {\n        if (!deepEqual(a[i], b[i], newLevel)) {\n          return false;\n        }\n      }\n      return true;\n    }\n    if (a && b && _typeof(a) === 'object' && _typeof(b) === 'object') {\n      var keys = Object.keys(a);\n      if (keys.length !== Object.keys(b).length) {\n        return false;\n      }\n      return keys.every(function (key) {\n        return deepEqual(a[key], b[key], newLevel);\n      });\n    }\n    // other\n    return false;\n  }\n  return deepEqual(obj1, obj2);\n}\nexport default isEqual;","// export this package's api\nimport Align from \"./Align\";\nexport default Align;","import _regeneratorRuntime from \"@babel/runtime/helpers/esm/regeneratorRuntime\";\nimport _asyncToGenerator from \"@babel/runtime/helpers/esm/asyncToGenerator\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport { useEffect, useRef } from 'react';\nimport raf from \"rc-util/es/raf\";\nimport useState from \"rc-util/es/hooks/useState\";\n/**\n * Popup should follow the steps for each component work correctly:\n * measure - check for the current stretch size\n * align - let component align the position\n * aligned - re-align again in case additional className changed the size\n * afterAlign - choice next step is trigger motion or finished\n * beforeMotion - should reset motion to invisible so that CSSMotion can do normal motion\n * motion - play the motion\n * stable - everything is done\n */\n\nvar StatusQueue = ['measure', 'alignPre', 'align', null, 'motion'];\nexport default (function (visible, doMeasure) {\n  var _useState = useState(null),\n      _useState2 = _slicedToArray(_useState, 2),\n      status = _useState2[0],\n      setInternalStatus = _useState2[1];\n\n  var rafRef = useRef();\n\n  function setStatus(nextStatus) {\n    setInternalStatus(nextStatus, true);\n  }\n\n  function cancelRaf() {\n    raf.cancel(rafRef.current);\n  }\n\n  function goNextStatus(callback) {\n    cancelRaf();\n    rafRef.current = raf(function () {\n      // Only align should be manually trigger\n      setStatus(function (prev) {\n        switch (status) {\n          case 'align':\n            return 'motion';\n\n          case 'motion':\n            return 'stable';\n\n          default:\n        }\n\n        return prev;\n      });\n      callback === null || callback === void 0 ? void 0 : callback();\n    });\n  } // Init status\n\n\n  useEffect(function () {\n    setStatus('measure');\n  }, [visible]); // Go next status\n\n  useEffect(function () {\n    switch (status) {\n      case 'measure':\n        doMeasure();\n        break;\n\n      default:\n    }\n\n    if (status) {\n      rafRef.current = raf( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\n        var index, nextStatus;\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\n          while (1) {\n            switch (_context.prev = _context.next) {\n              case 0:\n                index = StatusQueue.indexOf(status);\n                nextStatus = StatusQueue[index + 1];\n\n                if (nextStatus && index !== -1) {\n                  setStatus(nextStatus);\n                }\n\n              case 3:\n              case \"end\":\n                return _context.stop();\n            }\n          }\n        }, _callee);\n      })));\n    }\n  }, [status]);\n  useEffect(function () {\n    return function () {\n      cancelRaf();\n    };\n  }, []);\n  return [status, goNextStatus];\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nimport { useRef, useState } from 'react';\nimport Align from 'rc-align';\nimport useLayoutEffect from \"rc-util/es/hooks/useLayoutEffect\";\nimport CSSMotion from 'rc-motion';\nimport classNames from 'classnames';\nimport useVisibleStatus from \"./useVisibleStatus\";\nimport { getMotion } from \"../utils/legacyUtil\";\nimport useStretchStyle from \"./useStretchStyle\";\nvar PopupInner = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var visible = props.visible,\n      prefixCls = props.prefixCls,\n      className = props.className,\n      style = props.style,\n      children = props.children,\n      zIndex = props.zIndex,\n      stretch = props.stretch,\n      destroyPopupOnHide = props.destroyPopupOnHide,\n      forceRender = props.forceRender,\n      align = props.align,\n      point = props.point,\n      getRootDomNode = props.getRootDomNode,\n      getClassNameFromAlign = props.getClassNameFromAlign,\n      onAlign = props.onAlign,\n      onMouseEnter = props.onMouseEnter,\n      onMouseLeave = props.onMouseLeave,\n      onMouseDown = props.onMouseDown,\n      onTouchStart = props.onTouchStart,\n      onClick = props.onClick;\n  var alignRef = useRef();\n  var elementRef = useRef();\n\n  var _useState = useState(),\n      _useState2 = _slicedToArray(_useState, 2),\n      alignedClassName = _useState2[0],\n      setAlignedClassName = _useState2[1]; // ======================= Measure ========================\n\n\n  var _useStretchStyle = useStretchStyle(stretch),\n      _useStretchStyle2 = _slicedToArray(_useStretchStyle, 2),\n      stretchStyle = _useStretchStyle2[0],\n      measureStretchStyle = _useStretchStyle2[1];\n\n  function doMeasure() {\n    if (stretch) {\n      measureStretchStyle(getRootDomNode());\n    }\n  } // ======================== Status ========================\n\n\n  var _useVisibleStatus = useVisibleStatus(visible, doMeasure),\n      _useVisibleStatus2 = _slicedToArray(_useVisibleStatus, 2),\n      status = _useVisibleStatus2[0],\n      goNextStatus = _useVisibleStatus2[1]; // ======================== Aligns ========================\n\n  /**\n   * `alignedClassName` may modify `source` size,\n   * which means one time align may not move to the correct position at once.\n   *\n   * We will reset `alignTimes` for each status switch to `alignPre`\n   * and let `rc-align` to align for multiple times to ensure get final stable place.\n   * Currently we mark `alignTimes < 2` repeat align, it will increase if user report for align issue.\n   * \n   * Update:\n   * In React 18. `rc-align` effect of align may faster than ref called trigger `forceAlign`.\n   * We adjust this to `alignTimes < 2`.\n   * We need refactor `rc-align` to support mark of `forceAlign` call if this still happen.\n   */\n\n\n  var _useState3 = useState(0),\n      _useState4 = _slicedToArray(_useState3, 2),\n      alignTimes = _useState4[0],\n      setAlignTimes = _useState4[1];\n\n  var prepareResolveRef = useRef();\n  useLayoutEffect(function () {\n    if (status === 'alignPre') {\n      setAlignTimes(0);\n    }\n  }, [status]); // `target` on `rc-align` can accept as a function to get the bind element or a point.\n  // ref: https://www.npmjs.com/package/rc-align\n\n  function getAlignTarget() {\n    if (point) {\n      return point;\n    }\n\n    return getRootDomNode;\n  }\n\n  function forceAlign() {\n    var _alignRef$current;\n\n    (_alignRef$current = alignRef.current) === null || _alignRef$current === void 0 ? void 0 : _alignRef$current.forceAlign();\n  }\n\n  function onInternalAlign(popupDomNode, matchAlign) {\n    var nextAlignedClassName = getClassNameFromAlign(matchAlign);\n\n    if (alignedClassName !== nextAlignedClassName) {\n      setAlignedClassName(nextAlignedClassName);\n    } // We will retry multi times to make sure that the element has been align in the right position.\n\n\n    setAlignTimes(function (val) {\n      return val + 1;\n    });\n\n    if (status === 'align') {\n      onAlign === null || onAlign === void 0 ? void 0 : onAlign(popupDomNode, matchAlign);\n    }\n  } // Delay to go to next status\n\n\n  useLayoutEffect(function () {\n    if (status === 'align') {\n      // Repeat until not more align needed\n      if (alignTimes < 3) {\n        forceAlign();\n      } else {\n        goNextStatus(function () {\n          var _prepareResolveRef$cu;\n\n          (_prepareResolveRef$cu = prepareResolveRef.current) === null || _prepareResolveRef$cu === void 0 ? void 0 : _prepareResolveRef$cu.call(prepareResolveRef);\n        });\n      }\n    }\n  }, [alignTimes]); // ======================== Motion ========================\n\n  var motion = _objectSpread({}, getMotion(props));\n\n  ['onAppearEnd', 'onEnterEnd', 'onLeaveEnd'].forEach(function (eventName) {\n    var originHandler = motion[eventName];\n\n    motion[eventName] = function (element, event) {\n      goNextStatus();\n      return originHandler === null || originHandler === void 0 ? void 0 : originHandler(element, event);\n    };\n  });\n\n  function onShowPrepare() {\n    return new Promise(function (resolve) {\n      prepareResolveRef.current = resolve;\n    });\n  } // Go to stable directly when motion not provided\n\n\n  React.useEffect(function () {\n    if (!motion.motionName && status === 'motion') {\n      goNextStatus();\n    }\n  }, [motion.motionName, status]); // ========================= Refs =========================\n\n  React.useImperativeHandle(ref, function () {\n    return {\n      forceAlign: forceAlign,\n      getElement: function getElement() {\n        return elementRef.current;\n      }\n    };\n  }); // ======================== Render ========================\n\n  var mergedStyle = _objectSpread(_objectSpread({}, stretchStyle), {}, {\n    zIndex: zIndex,\n    opacity: status === 'motion' || status === 'stable' || !visible ? undefined : 0,\n    // Cannot interact with disappearing elements\n    // https://github.com/ant-design/ant-design/issues/35051#issuecomment-1101340714\n    pointerEvents: !visible && status !== 'stable' ? 'none' : undefined\n  }, style); // Align status\n\n\n  var alignDisabled = true;\n\n  if (align !== null && align !== void 0 && align.points && (status === 'align' || status === 'stable')) {\n    alignDisabled = false;\n  }\n\n  var childNode = children; // Wrapper when multiple children\n\n  if (React.Children.count(children) > 1) {\n    childNode = /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-content\")\n    }, children);\n  }\n\n  return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n    visible: visible,\n    ref: elementRef,\n    leavedClassName: \"\".concat(prefixCls, \"-hidden\")\n  }, motion, {\n    onAppearPrepare: onShowPrepare,\n    onEnterPrepare: onShowPrepare,\n    removeOnLeave: destroyPopupOnHide,\n    forceRender: forceRender\n  }), function (_ref, motionRef) {\n    var motionClassName = _ref.className,\n        motionStyle = _ref.style;\n    var mergedClassName = classNames(prefixCls, className, alignedClassName, motionClassName);\n    return /*#__PURE__*/React.createElement(Align, {\n      target: getAlignTarget(),\n      key: \"popup\",\n      ref: alignRef,\n      monitorWindowResize: true,\n      disabled: alignDisabled,\n      align: align,\n      onAlign: onInternalAlign\n    }, /*#__PURE__*/React.createElement(\"div\", {\n      ref: motionRef,\n      className: mergedClassName,\n      onMouseEnter: onMouseEnter,\n      onMouseLeave: onMouseLeave,\n      onMouseDownCapture: onMouseDown,\n      onTouchStartCapture: onTouchStart,\n      onClick: onClick,\n      style: _objectSpread(_objectSpread({}, motionStyle), mergedStyle)\n    }, childNode));\n  });\n});\nPopupInner.displayName = 'PopupInner';\nexport default PopupInner;","import _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport * as React from 'react';\nexport default (function (stretch) {\n  var _React$useState = React.useState({\n    width: 0,\n    height: 0\n  }),\n      _React$useState2 = _slicedToArray(_React$useState, 2),\n      targetSize = _React$useState2[0],\n      setTargetSize = _React$useState2[1];\n\n  function measureStretch(element) {\n    var tgtWidth = element.offsetWidth,\n        tgtHeight = element.offsetHeight;\n\n    var _element$getBoundingC = element.getBoundingClientRect(),\n        width = _element$getBoundingC.width,\n        height = _element$getBoundingC.height; // Rect is more accurate than offset, use if near\n\n\n    if (Math.abs(tgtWidth - width) < 1 && Math.abs(tgtHeight - height) < 1) {\n      tgtWidth = width;\n      tgtHeight = height;\n    }\n\n    setTargetSize({\n      width: tgtWidth,\n      height: tgtHeight\n    });\n  } // Merge stretch style\n\n\n  var style = React.useMemo(function () {\n    var sizeStyle = {};\n\n    if (stretch) {\n      var width = targetSize.width,\n          height = targetSize.height; // Stretch with target\n\n      if (stretch.indexOf('height') !== -1 && height) {\n        sizeStyle.height = height;\n      } else if (stretch.indexOf('minHeight') !== -1 && height) {\n        sizeStyle.minHeight = height;\n      }\n\n      if (stretch.indexOf('width') !== -1 && width) {\n        sizeStyle.width = width;\n      } else if (stretch.indexOf('minWidth') !== -1 && width) {\n        sizeStyle.minWidth = width;\n      }\n    }\n\n    return sizeStyle;\n  }, [stretch, targetSize]);\n  return [style, measureStretch];\n});","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport * as React from 'react';\nimport CSSMotion from 'rc-motion';\nimport classNames from 'classnames';\nvar MobilePopupInner = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  var prefixCls = props.prefixCls,\n      visible = props.visible,\n      zIndex = props.zIndex,\n      children = props.children,\n      _props$mobile = props.mobile;\n  _props$mobile = _props$mobile === void 0 ? {} : _props$mobile;\n  var popupClassName = _props$mobile.popupClassName,\n      popupStyle = _props$mobile.popupStyle,\n      _props$mobile$popupMo = _props$mobile.popupMotion,\n      popupMotion = _props$mobile$popupMo === void 0 ? {} : _props$mobile$popupMo,\n      popupRender = _props$mobile.popupRender,\n      onClick = props.onClick;\n  var elementRef = React.useRef(); // ========================= Refs =========================\n\n  React.useImperativeHandle(ref, function () {\n    return {\n      forceAlign: function forceAlign() {},\n      getElement: function getElement() {\n        return elementRef.current;\n      }\n    };\n  }); // ======================== Render ========================\n\n  var mergedStyle = _objectSpread({\n    zIndex: zIndex\n  }, popupStyle);\n\n  var childNode = children; // Wrapper when multiple children\n\n  if (React.Children.count(children) > 1) {\n    childNode = /*#__PURE__*/React.createElement(\"div\", {\n      className: \"\".concat(prefixCls, \"-content\")\n    }, children);\n  } // Mobile support additional render\n\n\n  if (popupRender) {\n    childNode = popupRender(childNode);\n  }\n\n  return /*#__PURE__*/React.createElement(CSSMotion, _extends({\n    visible: visible,\n    ref: elementRef,\n    removeOnLeave: true\n  }, popupMotion), function (_ref, motionRef) {\n    var motionClassName = _ref.className,\n        motionStyle = _ref.style;\n    var mergedClassName = classNames(prefixCls, popupClassName, motionClassName);\n    return /*#__PURE__*/React.createElement(\"div\", {\n      ref: motionRef,\n      className: mergedClassName,\n      onClick: onClick,\n      style: _objectSpread(_objectSpread({}, motionStyle), mergedStyle)\n    }, childNode);\n  });\n});\nMobilePopupInner.displayName = 'MobilePopupInner';\nexport default MobilePopupInner;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nvar _excluded = [\"visible\", \"mobile\"];\nimport * as React from 'react';\nimport { useState, useEffect } from 'react';\nimport isMobile from \"rc-util/es/isMobile\";\nimport Mask from \"./Mask\";\nimport PopupInner from \"./PopupInner\";\nimport MobilePopupInner from \"./MobilePopupInner\";\nvar Popup = /*#__PURE__*/React.forwardRef(function (_ref, ref) {\n  var visible = _ref.visible,\n      mobile = _ref.mobile,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  var _useState = useState(visible),\n      _useState2 = _slicedToArray(_useState, 2),\n      innerVisible = _useState2[0],\n      serInnerVisible = _useState2[1];\n\n  var _useState3 = useState(false),\n      _useState4 = _slicedToArray(_useState3, 2),\n      inMobile = _useState4[0],\n      setInMobile = _useState4[1];\n\n  var cloneProps = _objectSpread(_objectSpread({}, props), {}, {\n    visible: innerVisible\n  }); // We check mobile in visible changed here.\n  // And this also delay set `innerVisible` to avoid popup component render flash\n\n\n  useEffect(function () {\n    serInnerVisible(visible);\n\n    if (visible && mobile) {\n      setInMobile(isMobile());\n    }\n  }, [visible, mobile]);\n  var popupNode = inMobile ? /*#__PURE__*/React.createElement(MobilePopupInner, _extends({}, cloneProps, {\n    mobile: mobile,\n    ref: ref\n  })) : /*#__PURE__*/React.createElement(PopupInner, _extends({}, cloneProps, {\n    ref: ref\n  })); // We can use fragment directly but this may failed some selector usage. Keep as origin logic\n\n  return /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(Mask, cloneProps), popupNode);\n});\nPopup.displayName = 'Popup';\nexport default Popup;","export default (function () {\n  if (typeof navigator === 'undefined' || typeof window === 'undefined') {\n    return false;\n  }\n  var agent = navigator.userAgent || navigator.vendor || window.opera;\n  return /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(agent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(agent === null || agent === void 0 ? void 0 : agent.substr(0, 4));\n});","import * as React from 'react';\nvar TriggerContext = /*#__PURE__*/React.createContext(null);\nexport default TriggerContext;","import _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _classCallCheck from \"@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/esm/createClass\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inherits from \"@babel/runtime/helpers/esm/inherits\";\nimport _createSuper from \"@babel/runtime/helpers/esm/createSuper\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport * as React from 'react';\nimport ReactDOM from 'react-dom';\nimport raf from \"rc-util/es/raf\";\nimport contains from \"rc-util/es/Dom/contains\";\nimport findDOMNode from \"rc-util/es/Dom/findDOMNode\";\nimport { composeRef, supportRef } from \"rc-util/es/ref\";\nimport addEventListener from \"rc-util/es/Dom/addEventListener\";\nimport Portal from \"rc-util/es/Portal\";\nimport classNames from 'classnames';\nimport { getAlignFromPlacement, getAlignPopupClassName } from \"./utils/alignUtil\";\nimport Popup from \"./Popup\";\nimport TriggerContext from \"./context\";\n\nfunction noop() {}\n\nfunction returnEmptyString() {\n  return '';\n}\n\nfunction returnDocument(element) {\n  if (element) {\n    return element.ownerDocument;\n  }\n\n  return window.document;\n}\n\nvar ALL_HANDLERS = ['onClick', 'onMouseDown', 'onTouchStart', 'onMouseEnter', 'onMouseLeave', 'onFocus', 'onBlur', 'onContextMenu'];\n\n/**\n * Internal usage. Do not use in your code since this will be removed.\n */\nexport function generateTrigger(PortalComponent) {\n  var Trigger = /*#__PURE__*/function (_React$Component) {\n    _inherits(Trigger, _React$Component);\n\n    var _super = _createSuper(Trigger);\n\n    // ensure `getContainer` will be called only once\n    function Trigger(props) {\n      var _this;\n\n      _classCallCheck(this, Trigger);\n\n      _this = _super.call(this, props);\n\n      _defineProperty(_assertThisInitialized(_this), \"popupRef\", /*#__PURE__*/React.createRef());\n\n      _defineProperty(_assertThisInitialized(_this), \"triggerRef\", /*#__PURE__*/React.createRef());\n\n      _defineProperty(_assertThisInitialized(_this), \"portalContainer\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"attachId\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"clickOutsideHandler\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"touchOutsideHandler\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"contextMenuOutsideHandler1\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"contextMenuOutsideHandler2\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"mouseDownTimeout\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"focusTime\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"preClickTime\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"preTouchTime\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"delayTimer\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"hasPopupMouseDown\", void 0);\n\n      _defineProperty(_assertThisInitialized(_this), \"onMouseEnter\", function (e) {\n        var mouseEnterDelay = _this.props.mouseEnterDelay;\n\n        _this.fireEvents('onMouseEnter', e);\n\n        _this.delaySetPopupVisible(true, mouseEnterDelay, mouseEnterDelay ? null : e);\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onMouseMove\", function (e) {\n        _this.fireEvents('onMouseMove', e);\n\n        _this.setPoint(e);\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onMouseLeave\", function (e) {\n        _this.fireEvents('onMouseLeave', e);\n\n        _this.delaySetPopupVisible(false, _this.props.mouseLeaveDelay);\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onPopupMouseEnter\", function () {\n        _this.clearDelayTimer();\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onPopupMouseLeave\", function (e) {\n        var _this$popupRef$curren;\n\n        // https://github.com/react-component/trigger/pull/13\n        // react bug?\n        if (e.relatedTarget && !e.relatedTarget.setTimeout && contains((_this$popupRef$curren = _this.popupRef.current) === null || _this$popupRef$curren === void 0 ? void 0 : _this$popupRef$curren.getElement(), e.relatedTarget)) {\n          return;\n        }\n\n        _this.delaySetPopupVisible(false, _this.props.mouseLeaveDelay);\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onFocus\", function (e) {\n        _this.fireEvents('onFocus', e); // incase focusin and focusout\n\n\n        _this.clearDelayTimer();\n\n        if (_this.isFocusToShow()) {\n          _this.focusTime = Date.now();\n\n          _this.delaySetPopupVisible(true, _this.props.focusDelay);\n        }\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onMouseDown\", function (e) {\n        _this.fireEvents('onMouseDown', e);\n\n        _this.preClickTime = Date.now();\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onTouchStart\", function (e) {\n        _this.fireEvents('onTouchStart', e);\n\n        _this.preTouchTime = Date.now();\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onBlur\", function (e) {\n        _this.fireEvents('onBlur', e);\n\n        _this.clearDelayTimer();\n\n        if (_this.isBlurToHide()) {\n          _this.delaySetPopupVisible(false, _this.props.blurDelay);\n        }\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onContextMenu\", function (e) {\n        e.preventDefault();\n\n        _this.fireEvents('onContextMenu', e);\n\n        _this.setPopupVisible(true, e);\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onContextMenuClose\", function () {\n        if (_this.isContextMenuToShow()) {\n          _this.close();\n        }\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onClick\", function (event) {\n        _this.fireEvents('onClick', event); // focus will trigger click\n\n\n        if (_this.focusTime) {\n          var preTime;\n\n          if (_this.preClickTime && _this.preTouchTime) {\n            preTime = Math.min(_this.preClickTime, _this.preTouchTime);\n          } else if (_this.preClickTime) {\n            preTime = _this.preClickTime;\n          } else if (_this.preTouchTime) {\n            preTime = _this.preTouchTime;\n          }\n\n          if (Math.abs(preTime - _this.focusTime) < 20) {\n            return;\n          }\n\n          _this.focusTime = 0;\n        }\n\n        _this.preClickTime = 0;\n        _this.preTouchTime = 0; // Only prevent default when all the action is click.\n        // https://github.com/ant-design/ant-design/issues/17043\n        // https://github.com/ant-design/ant-design/issues/17291\n\n        if (_this.isClickToShow() && (_this.isClickToHide() || _this.isBlurToHide()) && event && event.preventDefault) {\n          event.preventDefault();\n        }\n\n        var nextVisible = !_this.state.popupVisible;\n\n        if (_this.isClickToHide() && !nextVisible || nextVisible && _this.isClickToShow()) {\n          _this.setPopupVisible(!_this.state.popupVisible, event);\n        }\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onPopupMouseDown\", function () {\n        _this.hasPopupMouseDown = true;\n        clearTimeout(_this.mouseDownTimeout);\n        _this.mouseDownTimeout = window.setTimeout(function () {\n          _this.hasPopupMouseDown = false;\n        }, 0);\n\n        if (_this.context) {\n          var _this$context;\n\n          (_this$context = _this.context).onPopupMouseDown.apply(_this$context, arguments);\n        }\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"onDocumentClick\", function (event) {\n        if (_this.props.mask && !_this.props.maskClosable) {\n          return;\n        }\n\n        var target = event.target;\n\n        var root = _this.getRootDomNode();\n\n        var popupNode = _this.getPopupDomNode();\n\n        if ( // mousedown on the target should also close popup when action is contextMenu.\n        // https://github.com/ant-design/ant-design/issues/29853\n        (!contains(root, target) || _this.isContextMenuOnly()) && !contains(popupNode, target) && !_this.hasPopupMouseDown) {\n          _this.close();\n        }\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"getRootDomNode\", function () {\n        var getTriggerDOMNode = _this.props.getTriggerDOMNode;\n\n        if (getTriggerDOMNode) {\n          return getTriggerDOMNode(_this.triggerRef.current);\n        }\n\n        try {\n          var domNode = findDOMNode(_this.triggerRef.current);\n\n          if (domNode) {\n            return domNode;\n          }\n        } catch (err) {// Do nothing\n        }\n\n        return ReactDOM.findDOMNode(_assertThisInitialized(_this));\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"getPopupClassNameFromAlign\", function (align) {\n        var className = [];\n        var _this$props = _this.props,\n            popupPlacement = _this$props.popupPlacement,\n            builtinPlacements = _this$props.builtinPlacements,\n            prefixCls = _this$props.prefixCls,\n            alignPoint = _this$props.alignPoint,\n            getPopupClassNameFromAlign = _this$props.getPopupClassNameFromAlign;\n\n        if (popupPlacement && builtinPlacements) {\n          className.push(getAlignPopupClassName(builtinPlacements, prefixCls, align, alignPoint));\n        }\n\n        if (getPopupClassNameFromAlign) {\n          className.push(getPopupClassNameFromAlign(align));\n        }\n\n        return className.join(' ');\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"getComponent\", function () {\n        var _this$props2 = _this.props,\n            prefixCls = _this$props2.prefixCls,\n            destroyPopupOnHide = _this$props2.destroyPopupOnHide,\n            popupClassName = _this$props2.popupClassName,\n            onPopupAlign = _this$props2.onPopupAlign,\n            popupMotion = _this$props2.popupMotion,\n            popupAnimation = _this$props2.popupAnimation,\n            popupTransitionName = _this$props2.popupTransitionName,\n            popupStyle = _this$props2.popupStyle,\n            mask = _this$props2.mask,\n            maskAnimation = _this$props2.maskAnimation,\n            maskTransitionName = _this$props2.maskTransitionName,\n            maskMotion = _this$props2.maskMotion,\n            zIndex = _this$props2.zIndex,\n            popup = _this$props2.popup,\n            stretch = _this$props2.stretch,\n            alignPoint = _this$props2.alignPoint,\n            mobile = _this$props2.mobile,\n            forceRender = _this$props2.forceRender,\n            onPopupClick = _this$props2.onPopupClick;\n        var _this$state = _this.state,\n            popupVisible = _this$state.popupVisible,\n            point = _this$state.point;\n\n        var align = _this.getPopupAlign();\n\n        var mouseProps = {};\n\n        if (_this.isMouseEnterToShow()) {\n          mouseProps.onMouseEnter = _this.onPopupMouseEnter;\n        }\n\n        if (_this.isMouseLeaveToHide()) {\n          mouseProps.onMouseLeave = _this.onPopupMouseLeave;\n        }\n\n        mouseProps.onMouseDown = _this.onPopupMouseDown;\n        mouseProps.onTouchStart = _this.onPopupMouseDown;\n        return /*#__PURE__*/React.createElement(Popup, _extends({\n          prefixCls: prefixCls,\n          destroyPopupOnHide: destroyPopupOnHide,\n          visible: popupVisible,\n          point: alignPoint && point,\n          className: popupClassName,\n          align: align,\n          onAlign: onPopupAlign,\n          animation: popupAnimation,\n          getClassNameFromAlign: _this.getPopupClassNameFromAlign\n        }, mouseProps, {\n          stretch: stretch,\n          getRootDomNode: _this.getRootDomNode,\n          style: popupStyle,\n          mask: mask,\n          zIndex: zIndex,\n          transitionName: popupTransitionName,\n          maskAnimation: maskAnimation,\n          maskTransitionName: maskTransitionName,\n          maskMotion: maskMotion,\n          ref: _this.popupRef,\n          motion: popupMotion,\n          mobile: mobile,\n          forceRender: forceRender,\n          onClick: onPopupClick\n        }), typeof popup === 'function' ? popup() : popup);\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"attachParent\", function (popupContainer) {\n        raf.cancel(_this.attachId);\n        var _this$props3 = _this.props,\n            getPopupContainer = _this$props3.getPopupContainer,\n            getDocument = _this$props3.getDocument;\n\n        var domNode = _this.getRootDomNode();\n\n        var mountNode;\n\n        if (!getPopupContainer) {\n          mountNode = getDocument(_this.getRootDomNode()).body;\n        } else if (domNode || getPopupContainer.length === 0) {\n          // Compatible for legacy getPopupContainer with domNode argument.\n          // If no need `domNode` argument, will call directly.\n          // https://codesandbox.io/s/eloquent-mclean-ss93m?file=/src/App.js\n          mountNode = getPopupContainer(domNode);\n        }\n\n        if (mountNode) {\n          mountNode.appendChild(popupContainer);\n        } else {\n          // Retry after frame render in case parent not ready\n          _this.attachId = raf(function () {\n            _this.attachParent(popupContainer);\n          });\n        }\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"getContainer\", function () {\n        if (!_this.portalContainer) {\n          // In React.StrictMode component will call render multiple time in first mount.\n          // When you want to refactor with FC, useRef will also init multiple time and\n          // point to different useRef instance which will create multiple element\n          // (This multiple render will not trigger effect so you can not clean up this\n          // in effect). But this is safe with class component since it always point to same class instance.\n          var getDocument = _this.props.getDocument;\n          var popupContainer = getDocument(_this.getRootDomNode()).createElement('div'); // Make sure default popup container will never cause scrollbar appearing\n          // https://github.com/react-component/trigger/issues/41\n\n          popupContainer.style.position = 'absolute';\n          popupContainer.style.top = '0';\n          popupContainer.style.left = '0';\n          popupContainer.style.width = '100%';\n          _this.portalContainer = popupContainer;\n        }\n\n        _this.attachParent(_this.portalContainer);\n\n        return _this.portalContainer;\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"setPoint\", function (point) {\n        var alignPoint = _this.props.alignPoint;\n        if (!alignPoint || !point) return;\n\n        _this.setState({\n          point: {\n            pageX: point.pageX,\n            pageY: point.pageY\n          }\n        });\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"handlePortalUpdate\", function () {\n        if (_this.state.prevPopupVisible !== _this.state.popupVisible) {\n          _this.props.afterPopupVisibleChange(_this.state.popupVisible);\n        }\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"triggerContextValue\", {\n        onPopupMouseDown: _this.onPopupMouseDown\n      });\n\n      var _popupVisible;\n\n      if ('popupVisible' in props) {\n        _popupVisible = !!props.popupVisible;\n      } else {\n        _popupVisible = !!props.defaultPopupVisible;\n      }\n\n      _this.state = {\n        prevPopupVisible: _popupVisible,\n        popupVisible: _popupVisible\n      };\n      ALL_HANDLERS.forEach(function (h) {\n        _this[\"fire\".concat(h)] = function (e) {\n          _this.fireEvents(h, e);\n        };\n      });\n      return _this;\n    }\n\n    _createClass(Trigger, [{\n      key: \"componentDidMount\",\n      value: function componentDidMount() {\n        this.componentDidUpdate();\n      }\n    }, {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate() {\n        var props = this.props;\n        var state = this.state; // We must listen to `mousedown` or `touchstart`, edge case:\n        // https://github.com/ant-design/ant-design/issues/5804\n        // https://github.com/react-component/calendar/issues/250\n        // https://github.com/react-component/trigger/issues/50\n\n        if (state.popupVisible) {\n          var currentDocument;\n\n          if (!this.clickOutsideHandler && (this.isClickToHide() || this.isContextMenuToShow())) {\n            currentDocument = props.getDocument(this.getRootDomNode());\n            this.clickOutsideHandler = addEventListener(currentDocument, 'mousedown', this.onDocumentClick);\n          } // always hide on mobile\n\n\n          if (!this.touchOutsideHandler) {\n            currentDocument = currentDocument || props.getDocument(this.getRootDomNode());\n            this.touchOutsideHandler = addEventListener(currentDocument, 'touchstart', this.onDocumentClick);\n          } // close popup when trigger type contains 'onContextMenu' and document is scrolling.\n\n\n          if (!this.contextMenuOutsideHandler1 && this.isContextMenuToShow()) {\n            currentDocument = currentDocument || props.getDocument(this.getRootDomNode());\n            this.contextMenuOutsideHandler1 = addEventListener(currentDocument, 'scroll', this.onContextMenuClose);\n          } // close popup when trigger type contains 'onContextMenu' and window is blur.\n\n\n          if (!this.contextMenuOutsideHandler2 && this.isContextMenuToShow()) {\n            this.contextMenuOutsideHandler2 = addEventListener(window, 'blur', this.onContextMenuClose);\n          }\n\n          return;\n        }\n\n        this.clearOutsideHandler();\n      }\n    }, {\n      key: \"componentWillUnmount\",\n      value: function componentWillUnmount() {\n        this.clearDelayTimer();\n        this.clearOutsideHandler();\n        clearTimeout(this.mouseDownTimeout);\n        raf.cancel(this.attachId);\n      }\n    }, {\n      key: \"getPopupDomNode\",\n      value: function getPopupDomNode() {\n        var _this$popupRef$curren2;\n\n        // for test\n        return ((_this$popupRef$curren2 = this.popupRef.current) === null || _this$popupRef$curren2 === void 0 ? void 0 : _this$popupRef$curren2.getElement()) || null;\n      }\n    }, {\n      key: \"getPopupAlign\",\n      value: function getPopupAlign() {\n        var props = this.props;\n        var popupPlacement = props.popupPlacement,\n            popupAlign = props.popupAlign,\n            builtinPlacements = props.builtinPlacements;\n\n        if (popupPlacement && builtinPlacements) {\n          return getAlignFromPlacement(builtinPlacements, popupPlacement, popupAlign);\n        }\n\n        return popupAlign;\n      }\n    }, {\n      key: \"setPopupVisible\",\n      value:\n      /**\n       * @param popupVisible    Show or not the popup element\n       * @param event           SyntheticEvent, used for `pointAlign`\n       */\n      function setPopupVisible(popupVisible, event) {\n        var alignPoint = this.props.alignPoint;\n        var prevPopupVisible = this.state.popupVisible;\n        this.clearDelayTimer();\n\n        if (prevPopupVisible !== popupVisible) {\n          if (!('popupVisible' in this.props)) {\n            this.setState({\n              popupVisible: popupVisible,\n              prevPopupVisible: prevPopupVisible\n            });\n          }\n\n          this.props.onPopupVisibleChange(popupVisible);\n        } // Always record the point position since mouseEnterDelay will delay the show\n\n\n        if (alignPoint && event && popupVisible) {\n          this.setPoint(event);\n        }\n      }\n    }, {\n      key: \"delaySetPopupVisible\",\n      value: function delaySetPopupVisible(visible, delayS, event) {\n        var _this2 = this;\n\n        var delay = delayS * 1000;\n        this.clearDelayTimer();\n\n        if (delay) {\n          var point = event ? {\n            pageX: event.pageX,\n            pageY: event.pageY\n          } : null;\n          this.delayTimer = window.setTimeout(function () {\n            _this2.setPopupVisible(visible, point);\n\n            _this2.clearDelayTimer();\n          }, delay);\n        } else {\n          this.setPopupVisible(visible, event);\n        }\n      }\n    }, {\n      key: \"clearDelayTimer\",\n      value: function clearDelayTimer() {\n        if (this.delayTimer) {\n          clearTimeout(this.delayTimer);\n          this.delayTimer = null;\n        }\n      }\n    }, {\n      key: \"clearOutsideHandler\",\n      value: function clearOutsideHandler() {\n        if (this.clickOutsideHandler) {\n          this.clickOutsideHandler.remove();\n          this.clickOutsideHandler = null;\n        }\n\n        if (this.contextMenuOutsideHandler1) {\n          this.contextMenuOutsideHandler1.remove();\n          this.contextMenuOutsideHandler1 = null;\n        }\n\n        if (this.contextMenuOutsideHandler2) {\n          this.contextMenuOutsideHandler2.remove();\n          this.contextMenuOutsideHandler2 = null;\n        }\n\n        if (this.touchOutsideHandler) {\n          this.touchOutsideHandler.remove();\n          this.touchOutsideHandler = null;\n        }\n      }\n    }, {\n      key: \"createTwoChains\",\n      value: function createTwoChains(event) {\n        var childPros = this.props.children.props;\n        var props = this.props;\n\n        if (childPros[event] && props[event]) {\n          return this[\"fire\".concat(event)];\n        }\n\n        return childPros[event] || props[event];\n      }\n    }, {\n      key: \"isClickToShow\",\n      value: function isClickToShow() {\n        var _this$props4 = this.props,\n            action = _this$props4.action,\n            showAction = _this$props4.showAction;\n        return action.indexOf('click') !== -1 || showAction.indexOf('click') !== -1;\n      }\n    }, {\n      key: \"isContextMenuOnly\",\n      value: function isContextMenuOnly() {\n        var action = this.props.action;\n        return action === 'contextMenu' || action.length === 1 && action[0] === 'contextMenu';\n      }\n    }, {\n      key: \"isContextMenuToShow\",\n      value: function isContextMenuToShow() {\n        var _this$props5 = this.props,\n            action = _this$props5.action,\n            showAction = _this$props5.showAction;\n        return action.indexOf('contextMenu') !== -1 || showAction.indexOf('contextMenu') !== -1;\n      }\n    }, {\n      key: \"isClickToHide\",\n      value: function isClickToHide() {\n        var _this$props6 = this.props,\n            action = _this$props6.action,\n            hideAction = _this$props6.hideAction;\n        return action.indexOf('click') !== -1 || hideAction.indexOf('click') !== -1;\n      }\n    }, {\n      key: \"isMouseEnterToShow\",\n      value: function isMouseEnterToShow() {\n        var _this$props7 = this.props,\n            action = _this$props7.action,\n            showAction = _this$props7.showAction;\n        return action.indexOf('hover') !== -1 || showAction.indexOf('mouseEnter') !== -1;\n      }\n    }, {\n      key: \"isMouseLeaveToHide\",\n      value: function isMouseLeaveToHide() {\n        var _this$props8 = this.props,\n            action = _this$props8.action,\n            hideAction = _this$props8.hideAction;\n        return action.indexOf('hover') !== -1 || hideAction.indexOf('mouseLeave') !== -1;\n      }\n    }, {\n      key: \"isFocusToShow\",\n      value: function isFocusToShow() {\n        var _this$props9 = this.props,\n            action = _this$props9.action,\n            showAction = _this$props9.showAction;\n        return action.indexOf('focus') !== -1 || showAction.indexOf('focus') !== -1;\n      }\n    }, {\n      key: \"isBlurToHide\",\n      value: function isBlurToHide() {\n        var _this$props10 = this.props,\n            action = _this$props10.action,\n            hideAction = _this$props10.hideAction;\n        return action.indexOf('focus') !== -1 || hideAction.indexOf('blur') !== -1;\n      }\n    }, {\n      key: \"forcePopupAlign\",\n      value: function forcePopupAlign() {\n        if (this.state.popupVisible) {\n          var _this$popupRef$curren3;\n\n          (_this$popupRef$curren3 = this.popupRef.current) === null || _this$popupRef$curren3 === void 0 ? void 0 : _this$popupRef$curren3.forceAlign();\n        }\n      }\n    }, {\n      key: \"fireEvents\",\n      value: function fireEvents(type, e) {\n        var childCallback = this.props.children.props[type];\n\n        if (childCallback) {\n          childCallback(e);\n        }\n\n        var callback = this.props[type];\n\n        if (callback) {\n          callback(e);\n        }\n      }\n    }, {\n      key: \"close\",\n      value: function close() {\n        this.setPopupVisible(false);\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var popupVisible = this.state.popupVisible;\n        var _this$props11 = this.props,\n            children = _this$props11.children,\n            forceRender = _this$props11.forceRender,\n            alignPoint = _this$props11.alignPoint,\n            className = _this$props11.className,\n            autoDestroy = _this$props11.autoDestroy;\n        var child = React.Children.only(children);\n        var newChildProps = {\n          key: 'trigger'\n        }; // ============================== Visible Handlers ==============================\n        // >>> ContextMenu\n\n        if (this.isContextMenuToShow()) {\n          newChildProps.onContextMenu = this.onContextMenu;\n        } else {\n          newChildProps.onContextMenu = this.createTwoChains('onContextMenu');\n        } // >>> Click\n\n\n        if (this.isClickToHide() || this.isClickToShow()) {\n          newChildProps.onClick = this.onClick;\n          newChildProps.onMouseDown = this.onMouseDown;\n          newChildProps.onTouchStart = this.onTouchStart;\n        } else {\n          newChildProps.onClick = this.createTwoChains('onClick');\n          newChildProps.onMouseDown = this.createTwoChains('onMouseDown');\n          newChildProps.onTouchStart = this.createTwoChains('onTouchStart');\n        } // >>> Hover(enter)\n\n\n        if (this.isMouseEnterToShow()) {\n          newChildProps.onMouseEnter = this.onMouseEnter; // Point align\n\n          if (alignPoint) {\n            newChildProps.onMouseMove = this.onMouseMove;\n          }\n        } else {\n          newChildProps.onMouseEnter = this.createTwoChains('onMouseEnter');\n        } // >>> Hover(leave)\n\n\n        if (this.isMouseLeaveToHide()) {\n          newChildProps.onMouseLeave = this.onMouseLeave;\n        } else {\n          newChildProps.onMouseLeave = this.createTwoChains('onMouseLeave');\n        } // >>> Focus\n\n\n        if (this.isFocusToShow() || this.isBlurToHide()) {\n          newChildProps.onFocus = this.onFocus;\n          newChildProps.onBlur = this.onBlur;\n        } else {\n          newChildProps.onFocus = this.createTwoChains('onFocus');\n          newChildProps.onBlur = this.createTwoChains('onBlur');\n        } // =================================== Render ===================================\n\n\n        var childrenClassName = classNames(child && child.props && child.props.className, className);\n\n        if (childrenClassName) {\n          newChildProps.className = childrenClassName;\n        }\n\n        var cloneProps = _objectSpread({}, newChildProps);\n\n        if (supportRef(child)) {\n          cloneProps.ref = composeRef(this.triggerRef, child.ref);\n        }\n\n        var trigger = /*#__PURE__*/React.cloneElement(child, cloneProps);\n        var portal; // prevent unmounting after it's rendered\n\n        if (popupVisible || this.popupRef.current || forceRender) {\n          portal = /*#__PURE__*/React.createElement(PortalComponent, {\n            key: \"portal\",\n            getContainer: this.getContainer,\n            didUpdate: this.handlePortalUpdate\n          }, this.getComponent());\n        }\n\n        if (!popupVisible && autoDestroy) {\n          portal = null;\n        }\n\n        return /*#__PURE__*/React.createElement(TriggerContext.Provider, {\n          value: this.triggerContextValue\n        }, trigger, portal);\n      }\n    }], [{\n      key: \"getDerivedStateFromProps\",\n      value: function getDerivedStateFromProps(_ref, prevState) {\n        var popupVisible = _ref.popupVisible;\n        var newState = {};\n\n        if (popupVisible !== undefined && prevState.popupVisible !== popupVisible) {\n          newState.popupVisible = popupVisible;\n          newState.prevPopupVisible = prevState.popupVisible;\n        }\n\n        return newState;\n      }\n    }]);\n\n    return Trigger;\n  }(React.Component);\n\n  _defineProperty(Trigger, \"contextType\", TriggerContext);\n\n  _defineProperty(Trigger, \"defaultProps\", {\n    prefixCls: 'rc-trigger-popup',\n    getPopupClassNameFromAlign: returnEmptyString,\n    getDocument: returnDocument,\n    onPopupVisibleChange: noop,\n    afterPopupVisibleChange: noop,\n    onPopupAlign: noop,\n    popupClassName: '',\n    mouseEnterDelay: 0,\n    mouseLeaveDelay: 0.1,\n    focusDelay: 0,\n    blurDelay: 0.15,\n    popupStyle: {},\n    destroyPopupOnHide: false,\n    popupAlign: {},\n    defaultPopupVisible: false,\n    mask: false,\n    maskClosable: true,\n    action: [],\n    showAction: [],\n    hideAction: [],\n    autoDestroy: false\n  });\n\n  return Trigger;\n}\nexport default generateTrigger(Portal);","var autoAdjustOverflow = {\n  adjustX: 1,\n  adjustY: 1\n};\nvar targetOffset = [0, 0];\nexport var placements = {\n  left: {\n    points: ['cr', 'cl'],\n    overflow: autoAdjustOverflow,\n    offset: [-4, 0],\n    targetOffset: targetOffset\n  },\n  right: {\n    points: ['cl', 'cr'],\n    overflow: autoAdjustOverflow,\n    offset: [4, 0],\n    targetOffset: targetOffset\n  },\n  top: {\n    points: ['bc', 'tc'],\n    overflow: autoAdjustOverflow,\n    offset: [0, -4],\n    targetOffset: targetOffset\n  },\n  bottom: {\n    points: ['tc', 'bc'],\n    overflow: autoAdjustOverflow,\n    offset: [0, 4],\n    targetOffset: targetOffset\n  },\n  topLeft: {\n    points: ['bl', 'tl'],\n    overflow: autoAdjustOverflow,\n    offset: [0, -4],\n    targetOffset: targetOffset\n  },\n  leftTop: {\n    points: ['tr', 'tl'],\n    overflow: autoAdjustOverflow,\n    offset: [-4, 0],\n    targetOffset: targetOffset\n  },\n  topRight: {\n    points: ['br', 'tr'],\n    overflow: autoAdjustOverflow,\n    offset: [0, -4],\n    targetOffset: targetOffset\n  },\n  rightTop: {\n    points: ['tl', 'tr'],\n    overflow: autoAdjustOverflow,\n    offset: [4, 0],\n    targetOffset: targetOffset\n  },\n  bottomRight: {\n    points: ['tr', 'br'],\n    overflow: autoAdjustOverflow,\n    offset: [0, 4],\n    targetOffset: targetOffset\n  },\n  rightBottom: {\n    points: ['bl', 'br'],\n    overflow: autoAdjustOverflow,\n    offset: [4, 0],\n    targetOffset: targetOffset\n  },\n  bottomLeft: {\n    points: ['tl', 'bl'],\n    overflow: autoAdjustOverflow,\n    offset: [0, 4],\n    targetOffset: targetOffset\n  },\n  leftBottom: {\n    points: ['br', 'bl'],\n    overflow: autoAdjustOverflow,\n    offset: [-4, 0],\n    targetOffset: targetOffset\n  }\n};\nexport default placements;","import * as React from 'react';\nimport classNames from 'classnames';\nexport default function Popup(props) {\n  var showArrow = props.showArrow,\n      arrowContent = props.arrowContent,\n      children = props.children,\n      prefixCls = props.prefixCls,\n      id = props.id,\n      overlayInnerStyle = props.overlayInnerStyle,\n      className = props.className,\n      style = props.style;\n  return /*#__PURE__*/React.createElement(\"div\", {\n    className: classNames(\"\".concat(prefixCls, \"-content\"), className),\n    style: style\n  }, showArrow !== false && /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(prefixCls, \"-arrow\"),\n    key: \"arrow\"\n  }, arrowContent), /*#__PURE__*/React.createElement(\"div\", {\n    className: \"\".concat(prefixCls, \"-inner\"),\n    id: id,\n    role: \"tooltip\",\n    style: overlayInnerStyle\n  }, typeof children === 'function' ? children() : children));\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport _objectSpread from \"@babel/runtime/helpers/esm/objectSpread2\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport { useRef, useImperativeHandle, forwardRef } from 'react';\nimport Trigger from 'rc-trigger';\nimport { placements } from './placements';\nimport Popup from './Popup';\n\nvar Tooltip = function Tooltip(props, ref) {\n  var overlayClassName = props.overlayClassName,\n      _props$trigger = props.trigger,\n      trigger = _props$trigger === void 0 ? ['hover'] : _props$trigger,\n      _props$mouseEnterDela = props.mouseEnterDelay,\n      mouseEnterDelay = _props$mouseEnterDela === void 0 ? 0 : _props$mouseEnterDela,\n      _props$mouseLeaveDela = props.mouseLeaveDelay,\n      mouseLeaveDelay = _props$mouseLeaveDela === void 0 ? 0.1 : _props$mouseLeaveDela,\n      overlayStyle = props.overlayStyle,\n      _props$prefixCls = props.prefixCls,\n      prefixCls = _props$prefixCls === void 0 ? 'rc-tooltip' : _props$prefixCls,\n      children = props.children,\n      onVisibleChange = props.onVisibleChange,\n      afterVisibleChange = props.afterVisibleChange,\n      transitionName = props.transitionName,\n      animation = props.animation,\n      motion = props.motion,\n      _props$placement = props.placement,\n      placement = _props$placement === void 0 ? 'right' : _props$placement,\n      _props$align = props.align,\n      align = _props$align === void 0 ? {} : _props$align,\n      _props$destroyTooltip = props.destroyTooltipOnHide,\n      destroyTooltipOnHide = _props$destroyTooltip === void 0 ? false : _props$destroyTooltip,\n      defaultVisible = props.defaultVisible,\n      getTooltipContainer = props.getTooltipContainer,\n      overlayInnerStyle = props.overlayInnerStyle,\n      arrowContent = props.arrowContent,\n      overlay = props.overlay,\n      id = props.id,\n      showArrow = props.showArrow,\n      restProps = _objectWithoutProperties(props, [\"overlayClassName\", \"trigger\", \"mouseEnterDelay\", \"mouseLeaveDelay\", \"overlayStyle\", \"prefixCls\", \"children\", \"onVisibleChange\", \"afterVisibleChange\", \"transitionName\", \"animation\", \"motion\", \"placement\", \"align\", \"destroyTooltipOnHide\", \"defaultVisible\", \"getTooltipContainer\", \"overlayInnerStyle\", \"arrowContent\", \"overlay\", \"id\", \"showArrow\"]);\n\n  var domRef = useRef(null);\n  useImperativeHandle(ref, function () {\n    return domRef.current;\n  });\n\n  var extraProps = _objectSpread({}, restProps);\n\n  if ('visible' in props) {\n    extraProps.popupVisible = props.visible;\n  }\n\n  var getPopupElement = function getPopupElement() {\n    return /*#__PURE__*/React.createElement(Popup, {\n      showArrow: showArrow,\n      arrowContent: arrowContent,\n      key: \"content\",\n      prefixCls: prefixCls,\n      id: id,\n      overlayInnerStyle: overlayInnerStyle\n    }, overlay);\n  };\n\n  var destroyTooltip = false;\n  var autoDestroy = false;\n\n  if (typeof destroyTooltipOnHide === 'boolean') {\n    destroyTooltip = destroyTooltipOnHide;\n  } else if (destroyTooltipOnHide && _typeof(destroyTooltipOnHide) === 'object') {\n    var keepParent = destroyTooltipOnHide.keepParent;\n    destroyTooltip = keepParent === true;\n    autoDestroy = keepParent === false;\n  }\n\n  return /*#__PURE__*/React.createElement(Trigger, _extends({\n    popupClassName: overlayClassName,\n    prefixCls: prefixCls,\n    popup: getPopupElement,\n    action: trigger,\n    builtinPlacements: placements,\n    popupPlacement: placement,\n    ref: domRef,\n    popupAlign: align,\n    getPopupContainer: getTooltipContainer,\n    onPopupVisibleChange: onVisibleChange,\n    afterPopupVisibleChange: afterVisibleChange,\n    popupTransitionName: transitionName,\n    popupAnimation: animation,\n    popupMotion: motion,\n    defaultPopupVisible: defaultVisible,\n    destroyPopupOnHide: destroyTooltip,\n    autoDestroy: autoDestroy,\n    mouseLeaveDelay: mouseLeaveDelay,\n    popupStyle: overlayStyle,\n    mouseEnterDelay: mouseEnterDelay\n  }, extraProps), children);\n};\n\nexport default /*#__PURE__*/forwardRef(Tooltip);","import Tooltip from './Tooltip';\nimport Popup from './Popup';\nexport { Popup };\nexport default Tooltip;","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","/** @license React v16.14.0\n * react-dom-server.browser.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var k=require(\"object-assign\"),l=require(\"react\");function q(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar t=\"function\"===typeof Symbol&&Symbol.for,aa=t?Symbol.for(\"react.portal\"):60106,u=t?Symbol.for(\"react.fragment\"):60107,ba=t?Symbol.for(\"react.strict_mode\"):60108,ca=t?Symbol.for(\"react.profiler\"):60114,v=t?Symbol.for(\"react.provider\"):60109,da=t?Symbol.for(\"react.context\"):60110,ea=t?Symbol.for(\"react.concurrent_mode\"):60111,fa=t?Symbol.for(\"react.forward_ref\"):60112,B=t?Symbol.for(\"react.suspense\"):60113,ha=t?Symbol.for(\"react.suspense_list\"):60120,ia=t?Symbol.for(\"react.memo\"):60115,ja=t?Symbol.for(\"react.lazy\"):\n60116,ka=t?Symbol.for(\"react.block\"):60121,la=t?Symbol.for(\"react.fundamental\"):60117,ma=t?Symbol.for(\"react.scope\"):60119;function na(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(c){0===a._status&&(c=c.default,a._status=1,a._result=c)},function(c){0===a._status&&(a._status=2,a._result=c)})}}\nfunction C(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case u:return\"Fragment\";case aa:return\"Portal\";case ca:return\"Profiler\";case ba:return\"StrictMode\";case B:return\"Suspense\";case ha:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case da:return\"Context.Consumer\";case v:return\"Context.Provider\";case fa:var b=a.render;b=b.displayName||b.name||\"\";return a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\"ForwardRef\");\ncase ia:return C(a.type);case ka:return C(a.render);case ja:if(a=1===a._status?a._result:null)return C(a)}return null}var D=l.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;D.hasOwnProperty(\"ReactCurrentDispatcher\")||(D.ReactCurrentDispatcher={current:null});D.hasOwnProperty(\"ReactCurrentBatchConfig\")||(D.ReactCurrentBatchConfig={suspense:null});var oa={};function E(a,b){for(var c=a._threadCount|0;c<=b;c++)a[c]=a._currentValue2,a._threadCount=c+1}\nfunction pa(a,b,c,d){if(d&&(d=a.contextType,\"object\"===typeof d&&null!==d))return E(d,c),d[c];if(a=a.contextTypes){c={};for(var f in a)c[f]=b[f];b=c}else b=oa;return b}for(var F=new Uint16Array(16),H=0;15>H;H++)F[H]=H+1;F[15]=0;\nvar qa=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,ra=Object.prototype.hasOwnProperty,sa={},ta={};\nfunction ua(a){if(ra.call(ta,a))return!0;if(ra.call(sa,a))return!1;if(qa.test(a))return ta[a]=!0;sa[a]=!0;return!1}function va(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction wa(a,b,c,d){if(null===b||\"undefined\"===typeof b||va(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function J(a,b,c,d,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=f;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=g}var K={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){K[a]=new J(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];K[b]=new J(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){K[a]=new J(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){K[a]=new J(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){K[a]=new J(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){K[a]=new J(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){K[a]=new J(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){K[a]=new J(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){K[a]=new J(a,5,!1,a.toLowerCase(),null,!1)});var L=/[\\-:]([a-z])/g;function M(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(L,\nM);K[b]=new J(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(L,M);K[b]=new J(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(L,M);K[b]=new J(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){K[a]=new J(a,1,!1,a.toLowerCase(),null,!1)});\nK.xlinkHref=new J(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){K[a]=new J(a,1,!1,a.toLowerCase(),null,!0)});var xa=/[\"'&<>]/;\nfunction N(a){if(\"boolean\"===typeof a||\"number\"===typeof a)return\"\"+a;a=\"\"+a;var b=xa.exec(a);if(b){var c=\"\",d,f=0;for(d=b.index;d<a.length;d++){switch(a.charCodeAt(d)){case 34:b=\"&quot;\";break;case 38:b=\"&amp;\";break;case 39:b=\"&#x27;\";break;case 60:b=\"&lt;\";break;case 62:b=\"&gt;\";break;default:continue}f!==d&&(c+=a.substring(f,d));f=d+1;c+=b}a=f!==d?c+a.substring(f,d):c}return a}\nfunction ya(a,b){var c=K.hasOwnProperty(a)?K[a]:null;var d;if(d=\"style\"!==a)d=null!==c?0===c.type:!(2<a.length)||\"o\"!==a[0]&&\"O\"!==a[0]||\"n\"!==a[1]&&\"N\"!==a[1]?!1:!0;if(d||wa(a,b,c,!1))return\"\";if(null!==c){a=c.attributeName;d=c.type;if(3===d||4===d&&!0===b)return a+'=\"\"';c.sanitizeURL&&(b=\"\"+b);return a+'=\"'+(N(b)+'\"')}return ua(a)?a+'=\"'+(N(b)+'\"'):\"\"}function za(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}\nvar Aa=\"function\"===typeof Object.is?Object.is:za,O=null,P=null,Q=null,R=!1,S=!1,U=null,V=0;function W(){if(null===O)throw Error(q(321));return O}function Ba(){if(0<V)throw Error(q(312));return{memoizedState:null,queue:null,next:null}}function Ca(){null===Q?null===P?(R=!1,P=Q=Ba()):(R=!0,Q=P):null===Q.next?(R=!1,Q=Q.next=Ba()):(R=!0,Q=Q.next);return Q}function Da(a,b,c,d){for(;S;)S=!1,V+=1,Q=null,c=a(b,d);P=O=null;V=0;Q=U=null;return c}function Ea(a,b){return\"function\"===typeof b?b(a):b}\nfunction Fa(a,b,c){O=W();Q=Ca();if(R){var d=Q.queue;b=d.dispatch;if(null!==U&&(c=U.get(d),void 0!==c)){U.delete(d);d=Q.memoizedState;do d=a(d,c.action),c=c.next;while(null!==c);Q.memoizedState=d;return[d,b]}return[Q.memoizedState,b]}a=a===Ea?\"function\"===typeof b?b():b:void 0!==c?c(b):b;Q.memoizedState=a;a=Q.queue={last:null,dispatch:null};a=a.dispatch=Ga.bind(null,O,a);return[Q.memoizedState,a]}\nfunction Ga(a,b,c){if(!(25>V))throw Error(q(301));if(a===O)if(S=!0,a={action:c,next:null},null===U&&(U=new Map),c=U.get(b),void 0===c)U.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}}function Ha(){}\nvar X=0,Ia={readContext:function(a){var b=X;E(a,b);return a[b]},useContext:function(a){W();var b=X;E(a,b);return a[b]},useMemo:function(a,b){O=W();Q=Ca();b=void 0===b?null:b;if(null!==Q){var c=Q.memoizedState;if(null!==c&&null!==b){a:{var d=c[1];if(null===d)d=!1;else{for(var f=0;f<d.length&&f<b.length;f++)if(!Aa(b[f],d[f])){d=!1;break a}d=!0}}if(d)return c[0]}}a=a();Q.memoizedState=[a,b];return a},useReducer:Fa,useRef:function(a){O=W();Q=Ca();var b=Q.memoizedState;return null===b?(a={current:a},Q.memoizedState=\na):b},useState:function(a){return Fa(Ea,a)},useLayoutEffect:function(){},useCallback:function(a){return a},useImperativeHandle:Ha,useEffect:Ha,useDebugValue:Ha,useResponder:function(a,b){return{props:b,responder:a}},useDeferredValue:function(a){W();return a},useTransition:function(){W();return[function(a){a()},!1]}},Ja={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Ka(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}\nvar La={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},Ma=k({menuitem:!0},La),Y={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,\ngridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Na=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(Y).forEach(function(a){Na.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);Y[b]=Y[a]})});\nvar Oa=/([A-Z])/g,Pa=/^ms-/,Z=l.Children.toArray,Qa=D.ReactCurrentDispatcher,Ra={listing:!0,pre:!0,textarea:!0},Sa=/^[a-zA-Z][a-zA-Z:_\\.\\-\\d]*$/,Ta={},Ua={};function Va(a){if(void 0===a||null===a)return a;var b=\"\";l.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}var Wa=Object.prototype.hasOwnProperty,Xa={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null,suppressHydrationWarning:null};function Ya(a,b){if(void 0===a)throw Error(q(152,C(b)||\"Component\"));}\nfunction Za(a,b,c){function d(d,g){var e=g.prototype&&g.prototype.isReactComponent,f=pa(g,b,c,e),x=[],h=!1,m={isMounted:function(){return!1},enqueueForceUpdate:function(){if(null===x)return null},enqueueReplaceState:function(a,c){h=!0;x=[c]},enqueueSetState:function(a,c){if(null===x)return null;x.push(c)}};if(e){if(e=new g(d.props,f,m),\"function\"===typeof g.getDerivedStateFromProps){var w=g.getDerivedStateFromProps.call(null,d.props,e.state);null!=w&&(e.state=k({},e.state,w))}}else if(O={},e=g(d.props,\nf,m),e=Da(g,d.props,e,f),null==e||null==e.render){a=e;Ya(a,g);return}e.props=d.props;e.context=f;e.updater=m;m=e.state;void 0===m&&(e.state=m=null);if(\"function\"===typeof e.UNSAFE_componentWillMount||\"function\"===typeof e.componentWillMount)if(\"function\"===typeof e.componentWillMount&&\"function\"!==typeof g.getDerivedStateFromProps&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof g.getDerivedStateFromProps&&e.UNSAFE_componentWillMount(),x.length){m=x;var r=\nh;x=null;h=!1;if(r&&1===m.length)e.state=m[0];else{w=r?m[0]:e.state;var y=!0;for(r=r?1:0;r<m.length;r++){var p=m[r];p=\"function\"===typeof p?p.call(e,w,d.props,f):p;null!=p&&(y?(y=!1,w=k({},w,p)):k(w,p))}e.state=w}}else x=null;a=e.render();Ya(a,g);if(\"function\"===typeof e.getChildContext&&(d=g.childContextTypes,\"object\"===typeof d)){var A=e.getChildContext();for(var T in A)if(!(T in d))throw Error(q(108,C(g)||\"Unknown\",T));}A&&(b=k({},b,A))}for(;l.isValidElement(a);){var f=a,g=f.type;if(\"function\"!==\ntypeof g)break;d(f,g)}return{child:a,context:b}}\nvar $a=function(){function a(a,b){l.isValidElement(a)?a.type!==u?a=[a]:(a=a.props.children,a=l.isValidElement(a)?[a]:Z(a)):a=Z(a);a={type:null,domNamespace:Ja.html,children:a,childIndex:0,context:oa,footer:\"\"};var c=F[0];if(0===c){var g=F;c=g.length;var d=2*c;if(!(65536>=d))throw Error(q(304));var h=new Uint16Array(d);h.set(g);F=h;F[0]=c+1;for(g=c;g<d-1;g++)F[g]=g+1;F[d-1]=0}else F[0]=F[c];this.threadID=c;this.stack=[a];this.exhausted=!1;this.currentSelectValue=null;this.previousWasTextNode=!1;this.makeStaticMarkup=\nb;this.suspenseDepth=0;this.contextIndex=-1;this.contextStack=[];this.contextValueStack=[]}var b=a.prototype;b.destroy=function(){if(!this.exhausted){this.exhausted=!0;this.clearProviders();var a=this.threadID;F[a]=F[0];F[0]=a}};b.pushProvider=function(a){var c=++this.contextIndex,b=a.type._context,g=this.threadID;E(b,g);var x=b[g];this.contextStack[c]=b;this.contextValueStack[c]=x;b[g]=a.props.value};b.popProvider=function(){var a=this.contextIndex,b=this.contextStack[a],f=this.contextValueStack[a];\nthis.contextStack[a]=null;this.contextValueStack[a]=null;this.contextIndex--;b[this.threadID]=f};b.clearProviders=function(){for(var a=this.contextIndex;0<=a;a--)this.contextStack[a][this.threadID]=this.contextValueStack[a]};b.read=function(a){if(this.exhausted)return null;var b=X;X=this.threadID;var c=Qa.current;Qa.current=Ia;try{for(var g=[\"\"],x=!1;g[0].length<a;){if(0===this.stack.length){this.exhausted=!0;var h=this.threadID;F[h]=F[0];F[0]=h;break}var e=this.stack[this.stack.length-1];if(x||e.childIndex>=\ne.children.length){var I=e.footer;\"\"!==I&&(this.previousWasTextNode=!1);this.stack.pop();if(\"select\"===e.type)this.currentSelectValue=null;else if(null!=e.type&&null!=e.type.type&&e.type.type.$$typeof===v)this.popProvider(e.type);else if(e.type===B){this.suspenseDepth--;var G=g.pop();if(x){x=!1;var n=e.fallbackFrame;if(!n)throw Error(q(303));this.stack.push(n);g[this.suspenseDepth]+=\"\\x3c!--$!--\\x3e\";continue}else g[this.suspenseDepth]+=G}g[this.suspenseDepth]+=I}else{var m=e.children[e.childIndex++],\nw=\"\";try{w+=this.render(m,e.context,e.domNamespace)}catch(r){if(null!=r&&\"function\"===typeof r.then)throw Error(q(294));throw r;}finally{}g.length<=this.suspenseDepth&&g.push(\"\");g[this.suspenseDepth]+=w}}return g[0]}finally{Qa.current=c,X=b}};b.render=function(a,b,f){if(\"string\"===typeof a||\"number\"===typeof a){f=\"\"+a;if(\"\"===f)return\"\";if(this.makeStaticMarkup)return N(f);if(this.previousWasTextNode)return\"\\x3c!-- --\\x3e\"+N(f);this.previousWasTextNode=!0;return N(f)}b=Za(a,b,this.threadID);a=b.child;\nb=b.context;if(null===a||!1===a)return\"\";if(!l.isValidElement(a)){if(null!=a&&null!=a.$$typeof){f=a.$$typeof;if(f===aa)throw Error(q(257));throw Error(q(258,f.toString()));}a=Z(a);this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:\"\"});return\"\"}var c=a.type;if(\"string\"===typeof c)return this.renderDOM(a,b,f);switch(c){case ba:case ea:case ca:case ha:case u:return a=Z(a.props.children),this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:\"\"}),\n\"\";case B:throw Error(q(294));}if(\"object\"===typeof c&&null!==c)switch(c.$$typeof){case fa:O={};var d=c.render(a.props,a.ref);d=Da(c.render,a.props,d,a.ref);d=Z(d);this.stack.push({type:null,domNamespace:f,children:d,childIndex:0,context:b,footer:\"\"});return\"\";case ia:return a=[l.createElement(c.type,k({ref:a.ref},a.props))],this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:\"\"}),\"\";case v:return c=Z(a.props.children),f={type:a,domNamespace:f,children:c,childIndex:0,\ncontext:b,footer:\"\"},this.pushProvider(a),this.stack.push(f),\"\";case da:c=a.type;d=a.props;var h=this.threadID;E(c,h);c=Z(d.children(c[h]));this.stack.push({type:a,domNamespace:f,children:c,childIndex:0,context:b,footer:\"\"});return\"\";case la:throw Error(q(338));case ja:switch(c=a.type,na(c),c._status){case 1:return a=[l.createElement(c._result,k({ref:a.ref},a.props))],this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:\"\"}),\"\";case 2:throw c._result;default:throw Error(q(295));\n}case ma:throw Error(q(343));}throw Error(q(130,null==c?c:typeof c,\"\"));};b.renderDOM=function(a,b,f){var c=a.type.toLowerCase();f===Ja.html&&Ka(c);if(!Ta.hasOwnProperty(c)){if(!Sa.test(c))throw Error(q(65,c));Ta[c]=!0}var d=a.props;if(\"input\"===c)d=k({type:void 0},d,{defaultChecked:void 0,defaultValue:void 0,value:null!=d.value?d.value:d.defaultValue,checked:null!=d.checked?d.checked:d.defaultChecked});else if(\"textarea\"===c){var h=d.value;if(null==h){h=d.defaultValue;var e=d.children;if(null!=e){if(null!=\nh)throw Error(q(92));if(Array.isArray(e)){if(!(1>=e.length))throw Error(q(93));e=e[0]}h=\"\"+e}null==h&&(h=\"\")}d=k({},d,{value:void 0,children:\"\"+h})}else if(\"select\"===c)this.currentSelectValue=null!=d.value?d.value:d.defaultValue,d=k({},d,{value:void 0});else if(\"option\"===c){e=this.currentSelectValue;var I=Va(d.children);if(null!=e){var G=null!=d.value?d.value+\"\":I;h=!1;if(Array.isArray(e))for(var n=0;n<e.length;n++){if(\"\"+e[n]===G){h=!0;break}}else h=\"\"+e===G;d=k({selected:void 0,children:void 0},\nd,{selected:h,children:I})}}if(h=d){if(Ma[c]&&(null!=h.children||null!=h.dangerouslySetInnerHTML))throw Error(q(137,c,\"\"));if(null!=h.dangerouslySetInnerHTML){if(null!=h.children)throw Error(q(60));if(!(\"object\"===typeof h.dangerouslySetInnerHTML&&\"__html\"in h.dangerouslySetInnerHTML))throw Error(q(61));}if(null!=h.style&&\"object\"!==typeof h.style)throw Error(q(62,\"\"));}h=d;e=this.makeStaticMarkup;I=1===this.stack.length;G=\"<\"+a.type;for(z in h)if(Wa.call(h,z)){var m=h[z];if(null!=m){if(\"style\"===\nz){n=void 0;var w=\"\",r=\"\";for(n in m)if(m.hasOwnProperty(n)){var y=0===n.indexOf(\"--\"),p=m[n];if(null!=p){if(y)var A=n;else if(A=n,Ua.hasOwnProperty(A))A=Ua[A];else{var T=A.replace(Oa,\"-$1\").toLowerCase().replace(Pa,\"-ms-\");A=Ua[A]=T}w+=r+A+\":\";r=n;y=null==p||\"boolean\"===typeof p||\"\"===p?\"\":y||\"number\"!==typeof p||0===p||Y.hasOwnProperty(r)&&Y[r]?(\"\"+p).trim():p+\"px\";w+=y;r=\";\"}}m=w||null}n=null;b:if(y=c,p=h,-1===y.indexOf(\"-\"))y=\"string\"===typeof p.is;else switch(y){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":y=\n!1;break b;default:y=!0}y?Xa.hasOwnProperty(z)||(n=z,n=ua(n)&&null!=m?n+'=\"'+(N(m)+'\"'):\"\"):n=ya(z,m);n&&(G+=\" \"+n)}}e||I&&(G+=' data-reactroot=\"\"');var z=G;h=\"\";La.hasOwnProperty(c)?z+=\"/>\":(z+=\">\",h=\"</\"+a.type+\">\");a:{e=d.dangerouslySetInnerHTML;if(null!=e){if(null!=e.__html){e=e.__html;break a}}else if(e=d.children,\"string\"===typeof e||\"number\"===typeof e){e=N(e);break a}e=null}null!=e?(d=[],Ra.hasOwnProperty(c)&&\"\\n\"===e.charAt(0)&&(z+=\"\\n\"),z+=e):d=Z(d.children);a=a.type;f=null==f||\"http://www.w3.org/1999/xhtml\"===\nf?Ka(a):\"http://www.w3.org/2000/svg\"===f&&\"foreignObject\"===a?\"http://www.w3.org/1999/xhtml\":f;this.stack.push({domNamespace:f,type:c,children:d,childIndex:0,context:b,footer:h});this.previousWasTextNode=!1;return z};return a}(),ab={renderToString:function(a){a=new $a(a,!1);try{return a.read(Infinity)}finally{a.destroy()}},renderToStaticMarkup:function(a){a=new $a(a,!0);try{return a.read(Infinity)}finally{a.destroy()}},renderToNodeStream:function(){throw Error(q(207));},renderToStaticNodeStream:function(){throw Error(q(208));\n},version:\"16.14.0\"};module.exports=ab.default||ab;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-dom-server.browser.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom-server.browser.development.js');\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n\n  _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nvar observerMap = new Map();\nvar RootIds = new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = undefined;\n/**\r\n * What should be the default behavior if the IntersectionObserver is unsupported?\r\n * Ideally the polyfill has been loaded, you can have the following happen:\r\n * - `undefined`: Throw an error\r\n * - `true` or `false`: Set the `inView` value to this regardless of intersection state\r\n * **/\n\nfunction defaultFallbackInView(inView) {\n  unsupportedValue = inView;\n}\n/**\r\n * Generate a unique ID for the root element\r\n * @param root\r\n */\n\nfunction getRootId(root) {\n  if (!root) return '0';\n  if (RootIds.has(root)) return RootIds.get(root);\n  rootId += 1;\n  RootIds.set(root, rootId.toString());\n  return RootIds.get(root);\n}\n/**\r\n * Convert the options to a string Id, based on the values.\r\n * Ensures we can reuse the same observer when observing elements with the same options.\r\n * @param options\r\n */\n\n\nfunction optionsToId(options) {\n  return Object.keys(options).sort().filter(function (key) {\n    return options[key] !== undefined;\n  }).map(function (key) {\n    return key + \"_\" + (key === 'root' ? getRootId(options.root) : options[key]);\n  }).toString();\n}\n\nfunction createObserver(options) {\n  // Create a unique ID for this observer instance, based on the root, root margin and threshold.\n  var id = optionsToId(options);\n  var instance = observerMap.get(id);\n\n  if (!instance) {\n    // Create a map of elements this observer is going to observe. Each element has a list of callbacks that should be triggered, once it comes into view.\n    var elements = new Map();\n    var thresholds;\n    var observer = new IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        var _elements$get;\n\n        // While it would be nice if you could just look at isIntersecting to determine if the component is inside the viewport, browsers can't agree on how to use it.\n        // -Firefox ignores `threshold` when considering `isIntersecting`, so it will never be false again if `threshold` is > 0\n        var inView = entry.isIntersecting && thresholds.some(function (threshold) {\n          return entry.intersectionRatio >= threshold;\n        }); // @ts-ignore support IntersectionObserver v2\n\n        if (options.trackVisibility && typeof entry.isVisible === 'undefined') {\n          // The browser doesn't support Intersection Observer v2, falling back to v1 behavior.\n          // @ts-ignore\n          entry.isVisible = inView;\n        }\n\n        (_elements$get = elements.get(entry.target)) == null ? void 0 : _elements$get.forEach(function (callback) {\n          callback(inView, entry);\n        });\n      });\n    }, options); // Ensure we have a valid thresholds array. If not, use the threshold from the options\n\n    thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n    instance = {\n      id: id,\n      observer: observer,\n      elements: elements\n    };\n    observerMap.set(id, instance);\n  }\n\n  return instance;\n}\n/**\r\n * @param element - DOM Element to observe\r\n * @param callback - Callback function to trigger when intersection status changes\r\n * @param options - Intersection Observer options\r\n * @param fallbackInView - Fallback inView value.\r\n * @return Function - Cleanup function that should be triggered to unregister the observer\r\n */\n\n\nfunction observe(element, callback, options, fallbackInView) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  if (fallbackInView === void 0) {\n    fallbackInView = unsupportedValue;\n  }\n\n  if (typeof window.IntersectionObserver === 'undefined' && fallbackInView !== undefined) {\n    var bounds = element.getBoundingClientRect();\n    callback(fallbackInView, {\n      isIntersecting: fallbackInView,\n      target: element,\n      intersectionRatio: typeof options.threshold === 'number' ? options.threshold : 0,\n      time: 0,\n      boundingClientRect: bounds,\n      intersectionRect: bounds,\n      rootBounds: bounds\n    });\n    return function () {// Nothing to cleanup\n    };\n  } // An observer with the same options can be reused, so lets use this fact\n\n\n  var _createObserver = createObserver(options),\n      id = _createObserver.id,\n      observer = _createObserver.observer,\n      elements = _createObserver.elements; // Register the callback listener for this element\n\n\n  var callbacks = elements.get(element) || [];\n\n  if (!elements.has(element)) {\n    elements.set(element, callbacks);\n  }\n\n  callbacks.push(callback);\n  observer.observe(element);\n  return function unobserve() {\n    // Remove the callback from the callback list\n    callbacks.splice(callbacks.indexOf(callback), 1);\n\n    if (callbacks.length === 0) {\n      // No more callback exists for element, so destroy it\n      elements[\"delete\"](element);\n      observer.unobserve(element);\n    }\n\n    if (elements.size === 0) {\n      // No more elements are being observer by this instance, so destroy it\n      observer.disconnect();\n      observerMap[\"delete\"](id);\n    }\n  };\n}\n\nvar _excluded = [\"children\", \"as\", \"triggerOnce\", \"threshold\", \"root\", \"rootMargin\", \"onChange\", \"skip\", \"trackVisibility\", \"delay\", \"initialInView\", \"fallbackInView\"];\n\nfunction isPlainChildren(props) {\n  return typeof props.children !== 'function';\n}\n/**\r\n ## Render props\r\n\n To use the `<InView>` component, you pass it a function. It will be called\r\n whenever the state changes, with the new value of `inView`. In addition to the\r\n `inView` prop, children also receive a `ref` that should be set on the\r\n containing DOM element. This is the element that the IntersectionObserver will\r\n monitor.\r\n\n If you need it, you can also access the\r\n [`IntersectionObserverEntry`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserverEntry)\r\n on `entry`, giving you access to all the details about the current intersection\r\n state.\r\n\n ```jsx\r\n import { InView } from 'react-intersection-observer';\r\n\n const Component = () => (\r\n <InView>\r\n {({ inView, ref, entry }) => (\r\n      <div ref={ref}>\r\n        <h2>{`Header inside viewport ${inView}.`}</h2>\r\n      </div>\r\n    )}\r\n </InView>\r\n );\r\n\n export default Component;\r\n ```\r\n\n ## Plain children\r\n\n You can pass any element to the `<InView />`, and it will handle creating the\r\n wrapping DOM element. Add a handler to the `onChange` method, and control the\r\n state in your own component. Any extra props you add to `<InView>` will be\r\n passed to the HTML element, allowing you set the `className`, `style`, etc.\r\n\n ```jsx\r\n import { InView } from 'react-intersection-observer';\r\n\n const Component = () => (\r\n <InView as=\"div\" onChange={(inView, entry) => console.log('Inview:', inView)}>\r\n <h2>Plain children are always rendered. Use onChange to monitor state.</h2>\r\n </InView>\r\n );\r\n\n export default Component;\r\n ```\r\n */\n\n\nvar InView = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(InView, _React$Component);\n\n  function InView(props) {\n    var _this;\n\n    _this = _React$Component.call(this, props) || this;\n    _this.node = null;\n    _this._unobserveCb = null;\n\n    _this.handleNode = function (node) {\n      if (_this.node) {\n        // Clear the old observer, before we start observing a new element\n        _this.unobserve();\n\n        if (!node && !_this.props.triggerOnce && !_this.props.skip) {\n          // Reset the state if we get a new node, and we aren't ignoring updates\n          _this.setState({\n            inView: !!_this.props.initialInView,\n            entry: undefined\n          });\n        }\n      }\n\n      _this.node = node ? node : null;\n\n      _this.observeNode();\n    };\n\n    _this.handleChange = function (inView, entry) {\n      if (inView && _this.props.triggerOnce) {\n        // If `triggerOnce` is true, we should stop observing the element.\n        _this.unobserve();\n      }\n\n      if (!isPlainChildren(_this.props)) {\n        // Store the current State, so we can pass it to the children in the next render update\n        // There's no reason to update the state for plain children, since it's not used in the rendering.\n        _this.setState({\n          inView: inView,\n          entry: entry\n        });\n      }\n\n      if (_this.props.onChange) {\n        // If the user is actively listening for onChange, always trigger it\n        _this.props.onChange(inView, entry);\n      }\n    };\n\n    _this.state = {\n      inView: !!props.initialInView,\n      entry: undefined\n    };\n    return _this;\n  }\n\n  var _proto = InView.prototype;\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    // If a IntersectionObserver option changed, reinit the observer\n    if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n      this.unobserve();\n      this.observeNode();\n    }\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.unobserve();\n    this.node = null;\n  };\n\n  _proto.observeNode = function observeNode() {\n    if (!this.node || this.props.skip) return;\n    var _this$props = this.props,\n        threshold = _this$props.threshold,\n        root = _this$props.root,\n        rootMargin = _this$props.rootMargin,\n        trackVisibility = _this$props.trackVisibility,\n        delay = _this$props.delay,\n        fallbackInView = _this$props.fallbackInView;\n    this._unobserveCb = observe(this.node, this.handleChange, {\n      threshold: threshold,\n      root: root,\n      rootMargin: rootMargin,\n      // @ts-ignore\n      trackVisibility: trackVisibility,\n      // @ts-ignore\n      delay: delay\n    }, fallbackInView);\n  };\n\n  _proto.unobserve = function unobserve() {\n    if (this._unobserveCb) {\n      this._unobserveCb();\n\n      this._unobserveCb = null;\n    }\n  };\n\n  _proto.render = function render() {\n    if (!isPlainChildren(this.props)) {\n      var _this$state = this.state,\n          inView = _this$state.inView,\n          entry = _this$state.entry;\n      return this.props.children({\n        inView: inView,\n        entry: entry,\n        ref: this.handleNode\n      });\n    }\n\n    var _this$props2 = this.props,\n        children = _this$props2.children,\n        as = _this$props2.as,\n        props = _objectWithoutPropertiesLoose(_this$props2, _excluded);\n\n    return /*#__PURE__*/React.createElement(as || 'div', _extends({\n      ref: this.handleNode\n    }, props), children);\n  };\n\n  return InView;\n}(React.Component);\nInView.displayName = 'InView';\nInView.defaultProps = {\n  threshold: 0,\n  triggerOnce: false,\n  initialInView: false\n};\n\n/**\r\n * React Hooks make it easy to monitor the `inView` state of your components. Call\r\n * the `useInView` hook with the (optional) [options](#options) you need. It will\r\n * return an array containing a `ref`, the `inView` status and the current\r\n * [`entry`](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserverEntry).\r\n * Assign the `ref` to the DOM element you want to monitor, and the hook will\r\n * report the status.\r\n *\r\n * @example\r\n * ```jsx\r\n * import React from 'react';\r\n * import { useInView } from 'react-intersection-observer';\r\n *\r\n * const Component = () => {\r\n *   const { ref, inView, entry } = useInView({\r\n *       threshold: 0,\r\n *   });\r\n *\r\n *   return (\r\n *     <div ref={ref}>\r\n *       <h2>{`Header inside viewport ${inView}.`}</h2>\r\n *     </div>\r\n *   );\r\n * };\r\n * ```\r\n */\n\nfunction useInView(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      threshold = _ref.threshold,\n      delay = _ref.delay,\n      trackVisibility = _ref.trackVisibility,\n      rootMargin = _ref.rootMargin,\n      root = _ref.root,\n      triggerOnce = _ref.triggerOnce,\n      skip = _ref.skip,\n      initialInView = _ref.initialInView,\n      fallbackInView = _ref.fallbackInView;\n\n  var unobserve = React.useRef();\n\n  var _React$useState = React.useState({\n    inView: !!initialInView\n  }),\n      state = _React$useState[0],\n      setState = _React$useState[1];\n\n  var setRef = React.useCallback(function (node) {\n    if (unobserve.current !== undefined) {\n      unobserve.current();\n      unobserve.current = undefined;\n    } // Skip creating the observer\n\n\n    if (skip) return;\n\n    if (node) {\n      unobserve.current = observe(node, function (inView, entry) {\n        setState({\n          inView: inView,\n          entry: entry\n        });\n\n        if (entry.isIntersecting && triggerOnce && unobserve.current) {\n          // If it should only trigger once, unobserve the element after it's inView\n          unobserve.current();\n          unobserve.current = undefined;\n        }\n      }, {\n        root: root,\n        rootMargin: rootMargin,\n        threshold: threshold,\n        // @ts-ignore\n        trackVisibility: trackVisibility,\n        // @ts-ignore\n        delay: delay\n      }, fallbackInView);\n    }\n  }, // We break the rule here, because we aren't including the actual `threshold` variable\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  [// If the threshold is an array, convert it to a string so it won't change between renders.\n  // eslint-disable-next-line react-hooks/exhaustive-deps\n  Array.isArray(threshold) ? threshold.toString() : threshold, root, rootMargin, triggerOnce, skip, trackVisibility, fallbackInView, delay]);\n  /* eslint-disable-next-line */\n\n  useEffect(function () {\n    if (!unobserve.current && state.entry && !triggerOnce && !skip) {\n      // If we don't have a ref, then reset the state (unless the hook is set to only `triggerOnce` or `skip`)\n      // This ensures we correctly reflect the current state - If you aren't observing anything, then nothing is inView\n      setState({\n        inView: !!initialInView\n      });\n    }\n  });\n  var result = [setRef, state.inView, state.entry]; // Support object destructuring, by adding the specific values.\n\n  result.ref = result[0];\n  result.inView = result[1];\n  result.entry = result[2];\n  return result;\n}\n\nexport { InView, InView as default, defaultFallbackInView, observe, useInView };\n//# sourceMappingURL=react-intersection-observer.m.js.map\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nfunction componentWillMount() {\n  // Call this.constructor.gDSFP to support sub-classes.\n  var state = this.constructor.getDerivedStateFromProps(this.props, this.state);\n  if (state !== null && state !== undefined) {\n    this.setState(state);\n  }\n}\n\nfunction componentWillReceiveProps(nextProps) {\n  // Call this.constructor.gDSFP to support sub-classes.\n  // Use the setState() updater to ensure state isn't stale in certain edge cases.\n  function updater(prevState) {\n    var state = this.constructor.getDerivedStateFromProps(nextProps, prevState);\n    return state !== null && state !== undefined ? state : null;\n  }\n  // Binding \"this\" is important for shallow renderer support.\n  this.setState(updater.bind(this));\n}\n\nfunction componentWillUpdate(nextProps, nextState) {\n  try {\n    var prevProps = this.props;\n    var prevState = this.state;\n    this.props = nextProps;\n    this.state = nextState;\n    this.__reactInternalSnapshotFlag = true;\n    this.__reactInternalSnapshot = this.getSnapshotBeforeUpdate(\n      prevProps,\n      prevState\n    );\n  } finally {\n    this.props = prevProps;\n    this.state = prevState;\n  }\n}\n\n// React may warn about cWM/cWRP/cWU methods being deprecated.\n// Add a flag to suppress these warnings for this special case.\ncomponentWillMount.__suppressDeprecationWarning = true;\ncomponentWillReceiveProps.__suppressDeprecationWarning = true;\ncomponentWillUpdate.__suppressDeprecationWarning = true;\n\nfunction polyfill(Component) {\n  var prototype = Component.prototype;\n\n  if (!prototype || !prototype.isReactComponent) {\n    throw new Error('Can only polyfill class components');\n  }\n\n  if (\n    typeof Component.getDerivedStateFromProps !== 'function' &&\n    typeof prototype.getSnapshotBeforeUpdate !== 'function'\n  ) {\n    return Component;\n  }\n\n  // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n  // Error if any of these lifecycles are present,\n  // Because they would work differently between older and newer (16.3+) versions of React.\n  var foundWillMountName = null;\n  var foundWillReceivePropsName = null;\n  var foundWillUpdateName = null;\n  if (typeof prototype.componentWillMount === 'function') {\n    foundWillMountName = 'componentWillMount';\n  } else if (typeof prototype.UNSAFE_componentWillMount === 'function') {\n    foundWillMountName = 'UNSAFE_componentWillMount';\n  }\n  if (typeof prototype.componentWillReceiveProps === 'function') {\n    foundWillReceivePropsName = 'componentWillReceiveProps';\n  } else if (typeof prototype.UNSAFE_componentWillReceiveProps === 'function') {\n    foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n  }\n  if (typeof prototype.componentWillUpdate === 'function') {\n    foundWillUpdateName = 'componentWillUpdate';\n  } else if (typeof prototype.UNSAFE_componentWillUpdate === 'function') {\n    foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n  }\n  if (\n    foundWillMountName !== null ||\n    foundWillReceivePropsName !== null ||\n    foundWillUpdateName !== null\n  ) {\n    var componentName = Component.displayName || Component.name;\n    var newApiName =\n      typeof Component.getDerivedStateFromProps === 'function'\n        ? 'getDerivedStateFromProps()'\n        : 'getSnapshotBeforeUpdate()';\n\n    throw Error(\n      'Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' +\n        componentName +\n        ' uses ' +\n        newApiName +\n        ' but also contains the following legacy lifecycles:' +\n        (foundWillMountName !== null ? '\\n  ' + foundWillMountName : '') +\n        (foundWillReceivePropsName !== null\n          ? '\\n  ' + foundWillReceivePropsName\n          : '') +\n        (foundWillUpdateName !== null ? '\\n  ' + foundWillUpdateName : '') +\n        '\\n\\nThe above lifecycles should be removed. Learn more about this warning here:\\n' +\n        'https://fb.me/react-async-component-lifecycle-hooks'\n    );\n  }\n\n  // React <= 16.2 does not support static getDerivedStateFromProps.\n  // As a workaround, use cWM and cWRP to invoke the new static lifecycle.\n  // Newer versions of React will ignore these lifecycles if gDSFP exists.\n  if (typeof Component.getDerivedStateFromProps === 'function') {\n    prototype.componentWillMount = componentWillMount;\n    prototype.componentWillReceiveProps = componentWillReceiveProps;\n  }\n\n  // React <= 16.2 does not support getSnapshotBeforeUpdate.\n  // As a workaround, use cWU to invoke the new lifecycle.\n  // Newer versions of React will ignore that lifecycle if gSBU exists.\n  if (typeof prototype.getSnapshotBeforeUpdate === 'function') {\n    if (typeof prototype.componentDidUpdate !== 'function') {\n      throw new Error(\n        'Cannot polyfill getSnapshotBeforeUpdate() for components that do not define componentDidUpdate() on the prototype'\n      );\n    }\n\n    prototype.componentWillUpdate = componentWillUpdate;\n\n    var componentDidUpdate = prototype.componentDidUpdate;\n\n    prototype.componentDidUpdate = function componentDidUpdatePolyfill(\n      prevProps,\n      prevState,\n      maybeSnapshot\n    ) {\n      // 16.3+ will not execute our will-update method;\n      // It will pass a snapshot value to did-update though.\n      // Older versions will require our polyfilled will-update value.\n      // We need to handle both cases, but can't just check for the presence of \"maybeSnapshot\",\n      // Because for <= 15.x versions this might be a \"prevContext\" object.\n      // We also can't just check \"__reactInternalSnapshot\",\n      // Because get-snapshot might return a falsy value.\n      // So check for the explicit __reactInternalSnapshotFlag flag to determine behavior.\n      var snapshot = this.__reactInternalSnapshotFlag\n        ? this.__reactInternalSnapshot\n        : maybeSnapshot;\n\n      componentDidUpdate.call(this, prevProps, prevState, snapshot);\n    };\n  }\n\n  return Component;\n}\n\nexport { polyfill };\n","import isNumber from 'lodash/isNumber';\nimport isFinite from 'lodash/isFinite';\nimport keys from 'lodash/keys';\n\nvar PLACEHOLDERS = {\n  id: '__id__',\n  display: '__display__',\n  type: '__type__'\n};\n\nvar numericComparator = function numericComparator(a, b) {\n  a = a === null ? Number.MAX_VALUE : a;\n  b = b === null ? Number.MAX_VALUE : b;\n  return a - b;\n};\n\nexport var escapeRegex = function escapeRegex(str) {\n  return str.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n};\n\nvar countCapturingGroups = function countCapturingGroups(regex) {\n  return new RegExp(regex.toString() + '|').exec('').length - 1;\n};\n\nvar markupToRegex = function markupToRegex(markup) {\n  var markupPattern = escapeRegex(markup);\n  markupPattern = markupPattern.replace(PLACEHOLDERS.display, '(.+?)');\n  markupPattern = markupPattern.replace(PLACEHOLDERS.id, '(.+?)');\n  markupPattern = markupPattern.replace(PLACEHOLDERS.type, '(.+?)');\n\n  return new RegExp(markupPattern, 'g');\n};\n\nexport var spliceString = function spliceString(str, start, end, insert) {\n  return str.substring(0, start) + insert + str.substring(end);\n};\n\n/**\n * Returns the computed length property value for the provided element.\n * Note: According to spec and testing, can count on length values coming back in pixels. See https://developer.mozilla.org/en-US/docs/Web/CSS/used_value#Difference_from_computed_value\n */\nexport var getComputedStyleLengthProp = function getComputedStyleLengthProp(forElement, propertyName) {\n  var length = parseFloat(window.getComputedStyle(forElement, null).getPropertyValue(propertyName));\n  return isFinite(length) ? length : 0;\n};\n\n/**\n * parameterName: \"id\", \"display\", or \"type\"\n * TODO: This is currently only exported for testing\n */\nexport var getPositionOfCapturingGroup = function getPositionOfCapturingGroup(markup, parameterName, regex) {\n  if (parameterName !== 'id' && parameterName !== 'display' && parameterName !== 'type') {\n    throw new Error(\"parameterName must be 'id', 'display', or 'type'\");\n  }\n\n  // calculate positions of placeholders in the markup\n  var indexDisplay = markup.indexOf(PLACEHOLDERS.display);\n  var indexId = markup.indexOf(PLACEHOLDERS.id);\n  var indexType = markup.indexOf(PLACEHOLDERS.type);\n\n  // set indices to null if not found\n  if (indexDisplay < 0) indexDisplay = null;\n  if (indexId < 0) indexId = null;\n  if (indexType < 0) indexType = null;\n\n  if (indexDisplay === null && indexId === null) {\n    // markup contains none of the mandatory placeholders\n    throw new Error('The markup `' + markup + '` must contain at least one of the placeholders `__id__` or `__display__`');\n  }\n\n  if (indexType === null && parameterName === 'type') {\n    // markup does not contain optional __type__ placeholder\n    return null;\n  }\n\n  // sort indices in ascending order (null values will always be at the end)\n  var sortedIndices = [indexDisplay, indexId, indexType].sort(numericComparator);\n\n  // If only one the placeholders __id__ and __display__ is present,\n  // use the captured string for both parameters, id and display\n  if (indexDisplay === null) indexDisplay = indexId;\n  if (indexId === null) indexId = indexDisplay;\n\n  if (regex && countCapturingGroups(regex) === 0) {\n    // custom regex does not use any capturing groups, so use the full match for ID and display\n    return parameterName === 'type' ? null : 0;\n  }\n\n  if (parameterName === 'id') return sortedIndices.indexOf(indexId);\n  if (parameterName === 'display') return sortedIndices.indexOf(indexDisplay);\n  if (parameterName === 'type') return indexType === null ? null : sortedIndices.indexOf(indexType);\n};\n\n// Finds all occurences of the markup in the value and iterates the plain text sub strings\n// in between those markups using `textIteratee` and the markup occurrences using the\n// `markupIteratee`.\nexport var iterateMentionsMarkup = function iterateMentionsMarkup(value, markup, textIteratee, markupIteratee, displayTransform, regex) {\n  regex = regex || markupToRegex(markup);\n  var displayPos = getPositionOfCapturingGroup(markup, 'display', regex);\n  var idPos = getPositionOfCapturingGroup(markup, 'id', regex);\n  var typePos = getPositionOfCapturingGroup(markup, 'type', regex);\n\n  var match = void 0;\n  var start = 0;\n  var currentPlainTextIndex = 0;\n\n  // detect all mention markup occurences in the value and iterate the matches\n  while ((match = regex.exec(value)) !== null) {\n    // first argument is the whole match, capturing groups are following\n    var id = match[idPos + 1];\n    var display = match[displayPos + 1];\n    var type = typePos !== null ? match[typePos + 1] : null;\n\n    if (displayTransform) display = displayTransform(id, display, type);\n\n    var substr = value.substring(start, match.index);\n    textIteratee(substr, start, currentPlainTextIndex);\n    currentPlainTextIndex += substr.length;\n\n    markupIteratee(match[0], match.index, currentPlainTextIndex, id, display, type, start);\n    currentPlainTextIndex += display.length;\n\n    start = regex.lastIndex;\n  }\n\n  if (start < value.length) {\n    textIteratee(value.substring(start), start, currentPlainTextIndex);\n  }\n};\n\n// For the passed character index in the plain text string, returns the corresponding index\n// in the marked up value string.\n// If the passed character index lies inside a mention, the value of `inMarkupCorrection` defines the\n// correction to apply:\n//   - 'START' to return the index of the mention markup's first char (default)\n//   - 'END' to return the index after its last char\n//   - 'NULL' to return null\nexport var mapPlainTextIndex = function mapPlainTextIndex(value, markup, indexInPlainText) {\n  var inMarkupCorrection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'START';\n  var displayTransform = arguments[4];\n  var regex = arguments[5];\n\n  if (!isNumber(indexInPlainText)) {\n    return indexInPlainText;\n  }\n\n  var result = void 0;\n  var textIteratee = function textIteratee(substr, index, substrPlainTextIndex) {\n    if (result !== undefined) return;\n\n    if (substrPlainTextIndex + substr.length >= indexInPlainText) {\n      // found the corresponding position in the current plain text range\n      result = index + indexInPlainText - substrPlainTextIndex;\n    }\n  };\n  var markupIteratee = function markupIteratee(markup, index, mentionPlainTextIndex, id, display, type, lastMentionEndIndex) {\n    if (result !== undefined) return;\n\n    if (mentionPlainTextIndex + display.length > indexInPlainText) {\n      // found the corresponding position inside current match,\n      // return the index of the first or after the last char of the matching markup\n      // depending on whether the `inMarkupCorrection`\n      if (inMarkupCorrection === 'NULL') {\n        result = null;\n      } else {\n        result = index + (inMarkupCorrection === 'END' ? markup.length : 0);\n      }\n    }\n  };\n\n  iterateMentionsMarkup(value, markup, textIteratee, markupIteratee, displayTransform, regex);\n\n  // when a mention is at the end of the value and we want to get the caret position\n  // at the end of the string, result is undefined\n  return result === undefined ? value.length : result;\n};\n\n// For a given indexInPlainText that lies inside a mention,\n// returns a the index of of the first char of the mention in the plain text.\n// If indexInPlainText does not lie inside a mention, returns indexInPlainText.\nexport var findStartOfMentionInPlainText = function findStartOfMentionInPlainText(value, markup, indexInPlainText, displayTransform, regex) {\n  var result = indexInPlainText;\n  var foundMention = false;\n\n  var markupIteratee = function markupIteratee(markup, index, mentionPlainTextIndex, id, display, type, lastMentionEndIndex) {\n    if (mentionPlainTextIndex <= indexInPlainText && mentionPlainTextIndex + display.length > indexInPlainText) {\n      result = mentionPlainTextIndex;\n      foundMention = true;\n    }\n  };\n  iterateMentionsMarkup(value, markup, function () {}, markupIteratee, displayTransform, regex);\n\n  if (foundMention) {\n    return result;\n  }\n};\n\n// Applies a change from the plain text textarea to the underlying marked up value\n// guided by the textarea text selection ranges before and after the change\nexport var applyChangeToValue = function applyChangeToValue(value, markup, plainTextValue, selectionStartBeforeChange, selectionEndBeforeChange, selectionEndAfterChange, displayTransform, regex) {\n  var oldPlainTextValue = getPlainText(value, markup, displayTransform, regex);\n\n  var lengthDelta = oldPlainTextValue.length - plainTextValue.length;\n  if (selectionStartBeforeChange === 'undefined') {\n    selectionStartBeforeChange = selectionEndAfterChange + lengthDelta;\n  }\n\n  if (selectionEndBeforeChange === 'undefined') {\n    selectionEndBeforeChange = selectionStartBeforeChange;\n  }\n\n  // Fixes an issue with replacing combined characters for complex input. Eg like acented letters on OSX\n  if (selectionStartBeforeChange === selectionEndBeforeChange && selectionEndBeforeChange === selectionEndAfterChange && oldPlainTextValue.length === plainTextValue.length) {\n    selectionStartBeforeChange = selectionStartBeforeChange - 1;\n  }\n\n  // extract the insertion from the new plain text value\n  var insert = plainTextValue.slice(selectionStartBeforeChange, selectionEndAfterChange);\n\n  // handling for Backspace key with no range selection\n  var spliceStart = Math.min(selectionStartBeforeChange, selectionEndAfterChange);\n\n  var spliceEnd = selectionEndBeforeChange;\n  if (selectionStartBeforeChange === selectionEndAfterChange) {\n    // handling for Delete key with no range selection\n    spliceEnd = Math.max(selectionEndBeforeChange, selectionStartBeforeChange + lengthDelta);\n  }\n\n  var mappedSpliceStart = mapPlainTextIndex(value, markup, spliceStart, 'START', displayTransform, regex);\n  var mappedSpliceEnd = mapPlainTextIndex(value, markup, spliceEnd, 'END', displayTransform, regex);\n\n  var controlSpliceStart = mapPlainTextIndex(value, markup, spliceStart, 'NULL', displayTransform, regex);\n  var controlSpliceEnd = mapPlainTextIndex(value, markup, spliceEnd, 'NULL', displayTransform, regex);\n  var willRemoveMention = controlSpliceStart === null || controlSpliceEnd === null;\n\n  var newValue = spliceString(value, mappedSpliceStart, mappedSpliceEnd, insert);\n\n  if (!willRemoveMention) {\n    // test for auto-completion changes\n    var controlPlainTextValue = getPlainText(newValue, markup, displayTransform, regex);\n    if (controlPlainTextValue !== plainTextValue) {\n      // some auto-correction is going on\n\n      // find start of diff\n      spliceStart = 0;\n      while (plainTextValue[spliceStart] === controlPlainTextValue[spliceStart]) {\n        spliceStart++;\n      } // extract auto-corrected insertion\n      insert = plainTextValue.slice(spliceStart, selectionEndAfterChange);\n\n      // find index of the unchanged remainder\n      spliceEnd = oldPlainTextValue.lastIndexOf(plainTextValue.substring(selectionEndAfterChange));\n\n      // re-map the corrected indices\n      mappedSpliceStart = mapPlainTextIndex(value, markup, spliceStart, 'START', displayTransform, regex);\n      mappedSpliceEnd = mapPlainTextIndex(value, markup, spliceEnd, 'END', displayTransform, regex);\n      newValue = spliceString(value, mappedSpliceStart, mappedSpliceEnd, insert);\n    }\n  }\n\n  return newValue;\n};\n\nexport var getPlainText = function getPlainText(value, markup, displayTransform, regex) {\n  regex = regex || markupToRegex(markup);\n  var idPos = getPositionOfCapturingGroup(markup, 'id', regex);\n  var displayPos = getPositionOfCapturingGroup(markup, 'display', regex);\n  var typePos = getPositionOfCapturingGroup(markup, 'type', regex);\n  return value.replace(regex, function () {\n    // first argument is the whole match, capturing groups are following\n    var id = arguments[idPos + 1];\n    var display = arguments[displayPos + 1];\n    var type = typePos !== null ? arguments[typePos + 1] : null;\n    if (displayTransform) display = displayTransform(id, display, type);\n    return display;\n  });\n};\n\nexport var getMentions = function getMentions(value, markup, displayTransform, regex) {\n  var mentions = [];\n  iterateMentionsMarkup(value, markup, function () {}, function (match, index, plainTextIndex, id, display, type, start) {\n    mentions.push({\n      id: id,\n      display: display,\n      type: type,\n      index: index,\n      plainTextIndex: plainTextIndex\n    });\n  }, displayTransform, regex);\n  return mentions;\n};\n\nexport var getEndOfLastMention = function getEndOfLastMention(value, markup, displayTransform, regex) {\n  var mentions = getMentions(value, markup, displayTransform, regex);\n  var lastMention = mentions[mentions.length - 1];\n  return lastMention ? lastMention.plainTextIndex + lastMention.display.length : 0;\n};\n\nexport var makeMentionsMarkup = function makeMentionsMarkup(markup, id, display, type) {\n  var result = markup.replace(PLACEHOLDERS.id, id);\n  result = result.replace(PLACEHOLDERS.display, display);\n  result = result.replace(PLACEHOLDERS.type, type);\n  return result;\n};\n\nexport var countSuggestions = function countSuggestions(suggestions) {\n  return keys(suggestions).reduce(function (acc, prop) {\n    return acc + suggestions[prop].results.length;\n  }, 0);\n};\n\nexport var getSuggestions = function getSuggestions(suggestions) {\n  return keys(suggestions).reduce(function (acc, mentionType) {\n    return [].concat(acc, [{\n      suggestions: suggestions[mentionType].results,\n      descriptor: suggestions[mentionType]\n    }]);\n  }, []);\n};\n\nexport var getSuggestion = function getSuggestion(suggestions, index) {\n  return getSuggestions(suggestions).reduce(function (result, _ref) {\n    var suggestions = _ref.suggestions,\n        descriptor = _ref.descriptor;\n    return [].concat(result, suggestions.map(function (suggestion) {\n      return {\n        suggestion: suggestion,\n        descriptor: descriptor\n      };\n    }));\n  }, [])[index];\n};","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { defaultStyle } from 'substyle';\nimport omit from 'lodash/omit';\nimport keys from 'lodash/keys';\n\nvar Suggestion = function (_Component) {\n  _inherits(Suggestion, _Component);\n\n  function Suggestion() {\n    _classCallCheck(this, Suggestion);\n\n    return _possibleConstructorReturn(this, _Component.apply(this, arguments));\n  }\n\n  Suggestion.prototype.render = function render() {\n    var rest = omit(this.props, 'style', keys(Suggestion.propTypes));\n\n    return React.createElement(\n      'li',\n      _extends({}, rest, this.props.style),\n      this.renderContent()\n    );\n  };\n\n  Suggestion.prototype.renderContent = function renderContent() {\n    var _props = this.props,\n        query = _props.query,\n        descriptor = _props.descriptor,\n        suggestion = _props.suggestion,\n        index = _props.index,\n        focused = _props.focused;\n\n\n    var display = this.getDisplay();\n    var highlightedDisplay = this.renderHighlightedDisplay(display, query);\n\n    if (descriptor.props.renderSuggestion) {\n      return descriptor.props.renderSuggestion(suggestion, query, highlightedDisplay, index, focused);\n    }\n\n    return highlightedDisplay;\n  };\n\n  Suggestion.prototype.getDisplay = function getDisplay() {\n    var suggestion = this.props.suggestion;\n\n\n    if (suggestion instanceof String) {\n      return suggestion;\n    }\n\n    var id = suggestion.id,\n        display = suggestion.display;\n\n\n    if (!id || !display) {\n      return id;\n    }\n\n    return display;\n  };\n\n  Suggestion.prototype.renderHighlightedDisplay = function renderHighlightedDisplay(display) {\n    var _props2 = this.props,\n        query = _props2.query,\n        style = _props2.style;\n\n\n    var i = display.toLowerCase().indexOf(query.toLowerCase());\n\n    if (i === -1) {\n      return React.createElement(\n        'span',\n        style('display'),\n        display\n      );\n    }\n\n    return React.createElement(\n      'span',\n      style('display'),\n      display.substring(0, i),\n      React.createElement(\n        'b',\n        style('highlight'),\n        display.substring(i, i + query.length)\n      ),\n      display.substring(i + query.length)\n    );\n  };\n\n  return Suggestion;\n}(Component);\n\nSuggestion.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n  query: PropTypes.string.isRequired,\n  index: PropTypes.number.isRequired,\n\n  suggestion: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({\n    id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n    display: PropTypes.string\n  })]).isRequired,\n  descriptor: PropTypes.object.isRequired,\n\n  focused: PropTypes.bool\n} : {};\n\n\nvar styled = defaultStyle({\n  cursor: 'pointer'\n}, function (props) {\n  return { '&focused': props.focused };\n});\n\nexport default styled(Suggestion);","import React from 'react';\nimport substyle from 'substyle';\n\nfunction LoadingIndicator(_ref) {\n  var style = _ref.style;\n\n  var spinnerStyle = style('spinner');\n  return React.createElement(\n    'div',\n    style,\n    React.createElement(\n      'div',\n      spinnerStyle,\n      React.createElement('div', spinnerStyle(['element', 'element1'])),\n      React.createElement('div', spinnerStyle(['element', 'element2'])),\n      React.createElement('div', spinnerStyle(['element', 'element3'])),\n      React.createElement('div', spinnerStyle(['element', 'element4'])),\n      React.createElement('div', spinnerStyle(['element', 'element5']))\n    )\n  );\n}\n\nexport default substyle(LoadingIndicator);","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _class, _temp;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { defaultStyle } from 'substyle';\n\nimport { countSuggestions, getSuggestions } from './utils';\nimport Suggestion from './Suggestion';\nimport LoadingIndicator from './LoadingIndicator';\n\nvar SuggestionsOverlay = (_temp = _class = function (_Component) {\n  _inherits(SuggestionsOverlay, _Component);\n\n  function SuggestionsOverlay() {\n    _classCallCheck(this, SuggestionsOverlay);\n\n    return _possibleConstructorReturn(this, _Component.apply(this, arguments));\n  }\n\n  SuggestionsOverlay.prototype.componentDidUpdate = function componentDidUpdate() {\n    if (!this.suggestionsRef || this.suggestionsRef.offsetHeight >= this.suggestionsRef.scrollHeight || !this.props.scrollFocusedIntoView) {\n      return;\n    }\n\n    var scrollTop = this.suggestionsRef.scrollTop;\n\n    var _suggestionsRef$child = this.suggestionsRef.children[this.props.focusIndex].getBoundingClientRect(),\n        top = _suggestionsRef$child.top,\n        bottom = _suggestionsRef$child.bottom;\n\n    var _suggestionsRef$getBo = this.suggestionsRef.getBoundingClientRect(),\n        topContainer = _suggestionsRef$getBo.top;\n\n    top = top - topContainer + scrollTop;\n    bottom = bottom - topContainer + scrollTop;\n\n    if (top < scrollTop) {\n      this.suggestionsRef.scrollTop = top;\n    } else if (bottom > this.suggestionsRef.offsetHeight) {\n      this.suggestionsRef.scrollTop = bottom - this.suggestionsRef.offsetHeight;\n    }\n  };\n\n  SuggestionsOverlay.prototype.render = function render() {\n    var _this2 = this;\n\n    var _props = this.props,\n        suggestions = _props.suggestions,\n        isLoading = _props.isLoading,\n        style = _props.style,\n        onMouseDown = _props.onMouseDown;\n\n    // do not show suggestions until there is some data\n\n    if (countSuggestions(suggestions) === 0 && !isLoading) {\n      return null;\n    }\n\n    return React.createElement(\n      'div',\n      _extends({}, style, { onMouseDown: onMouseDown }),\n      React.createElement(\n        'ul',\n        _extends({\n          ref: function ref(el) {\n            _this2.suggestionsRef = el;\n          }\n        }, style('list')),\n        this.renderSuggestions()\n      ),\n      this.renderLoadingIndicator()\n    );\n  };\n\n  SuggestionsOverlay.prototype.renderSuggestions = function renderSuggestions() {\n    var _this3 = this;\n\n    return getSuggestions(this.props.suggestions).reduce(function (result, _ref) {\n      var suggestions = _ref.suggestions,\n          descriptor = _ref.descriptor;\n      return [].concat(result, suggestions.map(function (suggestion, index) {\n        return _this3.renderSuggestion(suggestion, descriptor, result.length + index);\n      }));\n    }, []);\n  };\n\n  SuggestionsOverlay.prototype.renderSuggestion = function renderSuggestion(suggestion, descriptor, index) {\n    var _this4 = this;\n\n    var id = this.getID(suggestion);\n    var isFocused = index === this.props.focusIndex;\n\n    var mentionDescriptor = descriptor.mentionDescriptor,\n        query = descriptor.query;\n\n\n    var type = mentionDescriptor.props.type;\n\n    return React.createElement(Suggestion, {\n      style: this.props.style('item'),\n      key: type + '-' + id,\n      id: id,\n      query: query,\n      index: index,\n      descriptor: mentionDescriptor,\n      suggestion: suggestion,\n      focused: isFocused,\n      onClick: function onClick() {\n        return _this4.select(suggestion, descriptor);\n      },\n      onMouseEnter: function onMouseEnter() {\n        return _this4.handleMouseEnter(index);\n      }\n    });\n  };\n\n  SuggestionsOverlay.prototype.getID = function getID(suggestion) {\n    if (suggestion instanceof String) {\n      return suggestion;\n    }\n\n    return suggestion.id;\n  };\n\n  SuggestionsOverlay.prototype.renderLoadingIndicator = function renderLoadingIndicator() {\n    if (!this.props.isLoading) {\n      return;\n    }\n\n    return React.createElement(LoadingIndicator, this.props.style('loadingIndicator'));\n  };\n\n  SuggestionsOverlay.prototype.handleMouseEnter = function handleMouseEnter(index, ev) {\n    if (this.props.onMouseEnter) {\n      this.props.onMouseEnter(index);\n    }\n  };\n\n  SuggestionsOverlay.prototype.select = function select(suggestion, descriptor) {\n    this.props.onSelect(suggestion, descriptor);\n  };\n\n  return SuggestionsOverlay;\n}(Component), _class.defaultProps = {\n  suggestions: {},\n  onSelect: function onSelect() {\n    return null;\n  }\n}, _temp);\nSuggestionsOverlay.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  suggestions: PropTypes.object.isRequired,\n  focusIndex: PropTypes.number,\n  scrollFocusedIntoView: PropTypes.bool,\n  isLoading: PropTypes.bool,\n  onSelect: PropTypes.func\n} : {};\n\n\nvar styled = defaultStyle(function (_ref2) {\n  var position = _ref2.position;\n  return _extends({\n    position: 'absolute',\n    zIndex: 1,\n    backgroundColor: 'white',\n    marginTop: 14,\n    minWidth: 100\n  }, position, {\n\n    list: {\n      margin: 0,\n      padding: 0,\n      listStyleType: 'none'\n    }\n  });\n});\n\nexport default styled(SuggestionsOverlay);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defaultStyle } from 'substyle';\n\nvar styled = defaultStyle({\n  fontWeight: 'inherit'\n});\n\nvar Mention = styled(function (_ref) {\n  var display = _ref.display,\n      style = _ref.style;\n  return React.createElement(\n    'strong',\n    style,\n    display\n  );\n});\n\nMention.propTypes = {\n  /**\n   * Called when a new mention is added in the input\n   *\n   * Example:\n   *\n   * ```js\n   * function(id, display) {\n   *   console.log(\"user \" + display + \" was mentioned!\");\n   * }\n   * ```\n   */\n  onAdd: PropTypes.func,\n  onRemove: PropTypes.func,\n\n  renderSuggestion: PropTypes.func,\n\n  trigger: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(RegExp)]),\n\n  isLoading: PropTypes.bool\n};\n\nMention.defaultProps = {\n  trigger: '@',\n\n  onAdd: function onAdd() {\n    return null;\n  },\n  onRemove: function onRemove() {\n    return null;\n  },\n  renderSuggestion: null,\n  isLoading: false,\n  appendSpaceOnAdd: false\n};\n\nexport default Mention;","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _class, _temp;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React, { Component, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport { defaultStyle } from 'substyle';\nimport isEqual from 'lodash/isEqual';\nimport isNumber from 'lodash/isNumber';\n\nimport { iterateMentionsMarkup, mapPlainTextIndex } from './utils';\nimport Mention from './Mention';\n\nvar _generateComponentKey = function _generateComponentKey(usedKeys, id) {\n  if (!usedKeys.hasOwnProperty(id)) {\n    usedKeys[id] = 0;\n  } else {\n    usedKeys[id]++;\n  }\n  return id + '_' + usedKeys[id];\n};\n\nvar Highlighter = (_temp = _class = function (_Component) {\n  _inherits(Highlighter, _Component);\n\n  function Highlighter() {\n    _classCallCheck(this, Highlighter);\n\n    var _this = _possibleConstructorReturn(this, _Component.apply(this, arguments));\n\n    _this.state = { lastPosition: {} };\n    return _this;\n  }\n\n  Highlighter.prototype.componentDidMount = function componentDidMount() {\n    this.notifyCaretPosition();\n  };\n\n  Highlighter.prototype.componentDidUpdate = function componentDidUpdate() {\n    this.notifyCaretPosition();\n  };\n\n  Highlighter.prototype.notifyCaretPosition = function notifyCaretPosition() {\n    if (!this.caretRef) {\n      return;\n    }\n\n    var position = {\n      left: this.caretRef.offsetLeft,\n      top: this.caretRef.offsetTop\n    };\n\n    var lastPosition = this.state.lastPosition;\n\n\n    if (isEqual(lastPosition, position)) {\n      return;\n    }\n\n    this.setState({\n      lastPosition: position\n    });\n\n    this.props.onCaretPositionChange(position);\n  };\n\n  Highlighter.prototype.render = function render() {\n    var _this2 = this;\n\n    var _props = this.props,\n        selection = _props.selection,\n        value = _props.value,\n        markup = _props.markup,\n        displayTransform = _props.displayTransform,\n        style = _props.style,\n        inputStyle = _props.inputStyle,\n        regex = _props.regex;\n\n    // If there's a caret (i.e. no range selection), map the caret position into the marked up value\n\n    var caretPositionInMarkup = void 0;\n    if (selection.start === selection.end) {\n      caretPositionInMarkup = mapPlainTextIndex(value, markup, selection.start, 'START', displayTransform, regex);\n    }\n\n    var resultComponents = [];\n    var componentKeys = {};\n\n    // start by appending directly to the resultComponents\n    var components = resultComponents;\n\n    var substringComponentKey = 0;\n\n    var textIteratee = function textIteratee(substr, index, indexInPlainText) {\n      // check whether the caret element has to be inserted inside the current plain substring\n      if (isNumber(caretPositionInMarkup) && caretPositionInMarkup >= index && caretPositionInMarkup <= index + substr.length) {\n        // if yes, split substr at the caret position and insert the caret component\n        var splitIndex = caretPositionInMarkup - index;\n        components.push(_this2.renderSubstring(substr.substring(0, splitIndex), substringComponentKey));\n\n        // add all following substrings and mention components as children of the caret component\n        components = [_this2.renderSubstring(substr.substring(splitIndex), substringComponentKey)];\n      } else {\n        // otherwise just push the plain text substring\n        components.push(_this2.renderSubstring(substr, substringComponentKey));\n      }\n\n      substringComponentKey++;\n    };\n\n    var mentionIteratee = function mentionIteratee(markup, index, indexInPlainText, id, display, type, lastMentionEndIndex) {\n      // generate a component key based on the id\n      var key = _generateComponentKey(componentKeys, id);\n      components.push(_this2.getMentionComponentForMatch(id, display, type, key));\n    };\n\n    iterateMentionsMarkup(value, markup, textIteratee, mentionIteratee, displayTransform, regex);\n\n    // append a span containing a space, to ensure the last text line has the correct height\n    components.push(' ');\n\n    if (components !== resultComponents) {\n      // if a caret component is to be rendered, add all components that followed as its children\n      resultComponents.push(this.renderHighlighterCaret(components));\n    }\n\n    return React.createElement(\n      'div',\n      _extends({}, style, {\n        style: _extends({}, inputStyle, style.style)\n      }),\n      resultComponents\n    );\n  };\n\n  Highlighter.prototype.renderSubstring = function renderSubstring(string, key) {\n    // set substring span to hidden, so that Emojis are not shown double in Mobile Safari\n    return React.createElement(\n      'span',\n      _extends({}, this.props.style('substring'), { key: key }),\n      string\n    );\n  };\n\n  // Returns a clone of the Mention child applicable for the specified type to be rendered inside the highlighter\n\n\n  Highlighter.prototype.getMentionComponentForMatch = function getMentionComponentForMatch(id, display, type, key) {\n    var childrenCount = Children.count(this.props.children);\n    var props = { id: id, display: display, key: key };\n\n    if (childrenCount > 1) {\n      if (!type) {\n        throw new Error('Since multiple Mention components have been passed as children, the markup has to define the __type__ placeholder');\n      }\n\n      // detect the Mention child to be cloned\n      var foundChild = null;\n      Children.forEach(this.props.children, function (child) {\n        if (!child) {\n          return;\n        }\n\n        if (child.props.type === type) {\n          foundChild = child;\n        }\n      });\n\n      // clone the Mention child that is applicable for the given type\n      return React.cloneElement(foundChild, props);\n    }\n\n    if (childrenCount === 1) {\n      // clone single Mention child\n      var child = this.props.children.length ? this.props.children[0] : Children.only(this.props.children);\n      return React.cloneElement(child, props);\n    }\n    // no children, use default configuration\n    return Mention(props);\n  };\n\n  // Renders an component to be inserted in the highlighter at the current caret position\n\n\n  Highlighter.prototype.renderHighlighterCaret = function renderHighlighterCaret(children) {\n    var _this3 = this;\n\n    return React.createElement(\n      'span',\n      _extends({}, this.props.style('caret'), {\n        ref: function ref(el) {\n          _this3.caretRef = el;\n        },\n        key: 'caret'\n      }),\n      children\n    );\n  };\n\n  return Highlighter;\n}(Component), _class.defaultProps = {\n  value: '',\n  inputStyle: {}\n}, _temp);\nHighlighter.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  selection: PropTypes.shape({\n    start: PropTypes.number,\n    end: PropTypes.number\n  }).isRequired,\n\n  markup: PropTypes.string.isRequired,\n  value: PropTypes.string.isRequired,\n\n  displayTransform: PropTypes.func.isRequired,\n  onCaretPositionChange: PropTypes.func.isRequired,\n  inputStyle: PropTypes.object\n} : {};\n\n\nvar styled = defaultStyle({\n  position: 'relative',\n  width: 'inherit',\n  color: 'transparent',\n\n  overflow: 'hidden',\n\n  whiteSpace: 'pre-wrap',\n  wordWrap: 'break-word',\n\n  '&singleLine': {\n    whiteSpace: 'pre',\n    wordWrap: null\n  },\n\n  substring: {\n    visibility: 'hidden'\n  }\n}, function (props) {\n  return {\n    '&singleLine': props.singleLine\n  };\n});\n\nexport default styled(Highlighter);","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _class, _temp, _initialiseProps;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\n\nimport keys from 'lodash/keys';\nimport values from 'lodash/values';\nimport omit from 'lodash/omit';\nimport isEqual from 'lodash/isEqual';\nimport isNumber from 'lodash/isNumber';\n\nimport { defaultStyle } from 'substyle';\n\nimport { escapeRegex, getPlainText, applyChangeToValue, findStartOfMentionInPlainText, getComputedStyleLengthProp, getMentions, countSuggestions, getSuggestion, getEndOfLastMention, mapPlainTextIndex, spliceString, makeMentionsMarkup } from './utils';\nimport SuggestionsOverlay from './SuggestionsOverlay';\nimport Highlighter from './Highlighter';\n\nexport var _getTriggerRegex = function _getTriggerRegex(trigger) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (trigger instanceof RegExp) {\n    return trigger;\n  } else {\n    var allowSpaceInQuery = options.allowSpaceInQuery;\n\n    var escapedTriggerChar = escapeRegex(trigger);\n\n    // first capture group is the part to be replaced on completion\n    // second capture group is for extracting the search query\n    return new RegExp('(?:^|\\\\s)(' + escapedTriggerChar + '([^' + (allowSpaceInQuery ? '' : '\\\\s') + escapedTriggerChar + ']*))$');\n  }\n};\n\nvar _getDataProvider = function _getDataProvider(data) {\n  if (data instanceof Array) {\n    // if data is an array, create a function to query that\n    return function (query, callback) {\n      var results = [];\n      for (var i = 0, l = data.length; i < l; ++i) {\n        var display = data[i].display || data[i].id;\n        if (display.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          results.push(data[i]);\n        }\n      }\n      return results;\n    };\n  } else {\n    // expect data to be a query function\n    return data;\n  }\n};\n\nvar KEY = { TAB: 9, RETURN: 13, ESC: 27, UP: 38, DOWN: 40 };\n\nvar isComposing = false;\n\nvar propTypes = {\n  /**\n   * If set to `true` a regular text input element will be rendered\n   * instead of a textarea\n   */\n  singleLine: PropTypes.bool,\n\n  /**\n   * If set to `true` spaces will not interrupt matching suggestions\n   */\n  allowSpaceInQuery: PropTypes.bool,\n\n  markup: PropTypes.string,\n  value: PropTypes.string,\n\n  displayTransform: PropTypes.func,\n  onKeyDown: PropTypes.func,\n  onSelect: PropTypes.func,\n  onBlur: PropTypes.func,\n  onChange: PropTypes.func,\n  suggestionsPortalHost: typeof Element === 'undefined' ? PropTypes.any : PropTypes.PropTypes.instanceOf(Element),\n  inputRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({ current: typeof Element === 'undefined' ? PropTypes.any : PropTypes.instanceOf(Element) })]),\n\n  children: PropTypes.oneOfType([PropTypes.element, PropTypes.arrayOf(PropTypes.element)]).isRequired\n};\n\nvar MentionsInput = (_temp = _class = function (_React$Component) {\n  _inherits(MentionsInput, _React$Component);\n\n  function MentionsInput(props) {\n    _classCallCheck(this, MentionsInput);\n\n    var _this = _possibleConstructorReturn(this, _React$Component.call(this, props));\n\n    _initialiseProps.call(_this);\n\n    _this.suggestions = {};\n\n    _this.state = {\n      focusIndex: 0,\n\n      selectionStart: null,\n      selectionEnd: null,\n\n      suggestions: {},\n\n      caretPosition: null,\n      suggestionsPosition: null\n    };\n    return _this;\n  }\n\n  MentionsInput.prototype.render = function render() {\n    var _this2 = this;\n\n    return React.createElement(\n      'div',\n      _extends({\n        ref: function ref(el) {\n          _this2.containerRef = el;\n        }\n      }, this.props.style),\n      this.renderControl(),\n      this.renderSuggestionsOverlay()\n    );\n  };\n\n  // Returns the text to set as the value of the textarea with all markups removed\n\n\n  // Handle input element's change event\n\n\n  // Handle input element's select event\n\n\n  MentionsInput.prototype.componentDidMount = function componentDidMount() {\n    this.updateSuggestionsPosition();\n  };\n\n  MentionsInput.prototype.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {\n    // Update position of suggestions unless this componentDidUpdate was\n    // triggered by an update to suggestionsPosition.\n    if (prevState.suggestionsPosition === this.state.suggestionsPosition) {\n      this.updateSuggestionsPosition();\n    }\n\n    // maintain selection in case a mention is added/removed causing\n    // the cursor to jump to the end\n    if (this.state.setSelectionAfterMentionChange) {\n      this.setState({ setSelectionAfterMentionChange: false });\n      this.setSelection(this.state.selectionStart, this.state.selectionEnd);\n    }\n  };\n\n  return MentionsInput;\n}(React.Component), _class.defaultProps = {\n  markup: '@[__display__](__id__)',\n  singleLine: false,\n  displayTransform: function displayTransform(id, display, type) {\n    return display;\n  },\n  onKeyDown: function onKeyDown() {\n    return null;\n  },\n  onSelect: function onSelect() {\n    return null;\n  },\n  onBlur: function onBlur() {\n    return null;\n  }\n}, _initialiseProps = function _initialiseProps() {\n  var _this3 = this;\n\n  this.getInputProps = function (isTextarea) {\n    var _props = _this3.props,\n        readOnly = _props.readOnly,\n        disabled = _props.disabled,\n        style = _props.style;\n\n    // pass all props that we don't use through to the input control\n\n    var props = omit(_this3.props, 'style', keys(propTypes));\n\n    return _extends({}, props, style('input'), {\n\n      value: _this3.getPlainText()\n\n    }, !readOnly && !disabled && {\n      onChange: _this3.handleChange,\n      onSelect: _this3.handleSelect,\n      onKeyDown: _this3.handleKeyDown,\n      onBlur: _this3.handleBlur,\n      onCompositionStart: _this3.handleCompositionStart,\n      onCompositionEnd: _this3.handleCompositionEnd,\n      onScroll: _this3.updateHighlighterScroll\n    });\n  };\n\n  this.renderControl = function () {\n    var _props2 = _this3.props,\n        singleLine = _props2.singleLine,\n        style = _props2.style;\n\n    var inputProps = _this3.getInputProps(!singleLine);\n\n    return React.createElement(\n      'div',\n      style('control'),\n      _this3.renderHighlighter(inputProps.style),\n      singleLine ? _this3.renderInput(inputProps) : _this3.renderTextarea(inputProps)\n    );\n  };\n\n  this.renderInput = function (props) {\n    return React.createElement('input', _extends({ type: 'text', ref: _this3.setInputRef }, props));\n  };\n\n  this.renderTextarea = function (props) {\n    return React.createElement('textarea', _extends({ ref: _this3.setInputRef }, props));\n  };\n\n  this.setInputRef = function (el) {\n    _this3.inputRef = el;\n    var inputRef = _this3.props.inputRef;\n\n    if (typeof inputRef === 'function') {\n      inputRef(el);\n    } else if (inputRef) {\n      inputRef.current = el;\n    }\n  };\n\n  this.renderSuggestionsOverlay = function () {\n    if (!isNumber(_this3.state.selectionStart)) {\n      // do not show suggestions when the input does not have the focus\n      return null;\n    }\n    var suggestionsNode = React.createElement(SuggestionsOverlay, {\n      style: _this3.props.style('suggestions'),\n      position: _this3.state.suggestionsPosition,\n      focusIndex: _this3.state.focusIndex,\n      scrollFocusedIntoView: _this3.state.scrollFocusedIntoView,\n      ref: function ref(el) {\n        _this3.suggestionsRef = el;\n      },\n      suggestions: _this3.state.suggestions,\n      onSelect: _this3.addMention,\n      onMouseDown: _this3.handleSuggestionsMouseDown,\n      onMouseEnter: function onMouseEnter(focusIndex) {\n        return _this3.setState({\n          focusIndex: focusIndex,\n          scrollFocusedIntoView: false\n        });\n      },\n      isLoading: _this3.isLoading()\n    });\n    if (_this3.props.suggestionsPortalHost) {\n      return ReactDOM.createPortal(suggestionsNode, _this3.props.suggestionsPortalHost);\n    } else {\n      return suggestionsNode;\n    }\n  };\n\n  this.renderHighlighter = function (inputStyle) {\n    var _state = _this3.state,\n        selectionStart = _state.selectionStart,\n        selectionEnd = _state.selectionEnd;\n    var _props3 = _this3.props,\n        markup = _props3.markup,\n        displayTransform = _props3.displayTransform,\n        singleLine = _props3.singleLine,\n        children = _props3.children,\n        value = _props3.value,\n        style = _props3.style,\n        regex = _props3.regex;\n\n\n    return React.createElement(\n      Highlighter,\n      {\n        ref: function ref(el) {\n          _this3.highlighterRef = el;\n        },\n        style: style('highlighter'),\n        inputStyle: inputStyle,\n        value: value,\n        markup: markup,\n        displayTransform: displayTransform,\n        singleLine: singleLine,\n        selection: {\n          start: selectionStart,\n          end: selectionEnd\n        },\n        onCaretPositionChange: function onCaretPositionChange(position) {\n          return _this3.setState({ caretPosition: position });\n        },\n        regex: regex\n      },\n      children\n    );\n  };\n\n  this.getPlainText = function () {\n    return getPlainText(_this3.props.value || '', _this3.props.markup, _this3.props.displayTransform, _this3.props.regex);\n  };\n\n  this.executeOnChange = function (event) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    if (_this3.props.onChange) {\n      var _props4;\n\n      return (_props4 = _this3.props).onChange.apply(_props4, [event].concat(args));\n    }\n\n    if (_this3.props.valueLink) {\n      var _props$valueLink;\n\n      return (_props$valueLink = _this3.props.valueLink).requestChange.apply(_props$valueLink, [event.target.value].concat(args));\n    }\n  };\n\n  this.handleChange = function (ev) {\n    // if we are inside iframe, we need to find activeElement within its contentDocument\n    var currentDocument = document.activeElement && document.activeElement.contentDocument || document;\n    if (currentDocument.activeElement !== ev.target) {\n      // fix an IE bug (blur from empty input element with placeholder attribute trigger \"input\" event)\n      return;\n    }\n\n    var value = _this3.props.value || '';\n    var _props5 = _this3.props,\n        markup = _props5.markup,\n        displayTransform = _props5.displayTransform,\n        regex = _props5.regex;\n\n\n    var newPlainTextValue = ev.target.value;\n\n    // Derive the new value to set by applying the local change in the textarea's plain text\n    var newValue = applyChangeToValue(value, markup, newPlainTextValue, _this3.state.selectionStart, _this3.state.selectionEnd, ev.target.selectionEnd, displayTransform, regex);\n\n    // In case a mention is deleted, also adjust the new plain text value\n    newPlainTextValue = getPlainText(newValue, markup, displayTransform, regex);\n\n    // Save current selection after change to be able to restore caret position after rerendering\n    var selectionStart = ev.target.selectionStart;\n    var selectionEnd = ev.target.selectionEnd;\n    var setSelectionAfterMentionChange = false;\n\n    // Adjust selection range in case a mention will be deleted by the characters outside of the\n    // selection range that are automatically deleted\n    var startOfMention = findStartOfMentionInPlainText(value, markup, selectionStart, displayTransform, regex);\n\n    if (startOfMention !== undefined && _this3.state.selectionEnd > startOfMention) {\n      // only if a deletion has taken place\n      selectionStart = startOfMention;\n      selectionEnd = selectionStart;\n      setSelectionAfterMentionChange = true;\n    }\n\n    _this3.setState({\n      selectionStart: selectionStart,\n      selectionEnd: selectionEnd,\n      setSelectionAfterMentionChange: setSelectionAfterMentionChange\n    });\n\n    var mentions = getMentions(newValue, markup, displayTransform, regex);\n\n    // Propagate change\n    // let handleChange = this.getOnChange(this.props) || emptyFunction;\n    var eventMock = { target: { value: newValue }\n      // this.props.onChange.call(this, eventMock, newValue, newPlainTextValue, mentions);\n    };_this3.executeOnChange(eventMock, newValue, newPlainTextValue, mentions);\n  };\n\n  this.handleSelect = function (ev) {\n    // keep track of selection range / caret position\n    _this3.setState({\n      selectionStart: ev.target.selectionStart,\n      selectionEnd: ev.target.selectionEnd\n    });\n\n    // do nothing while a IME composition session is active\n    if (isComposing) return;\n\n    // refresh suggestions queries\n    var el = _this3.inputRef;\n    if (ev.target.selectionStart === ev.target.selectionEnd) {\n      _this3.updateMentionsQueries(el.value, ev.target.selectionStart);\n    } else {\n      _this3.clearSuggestions();\n    }\n\n    // sync highlighters scroll position\n    _this3.updateHighlighterScroll();\n\n    _this3.props.onSelect(ev);\n  };\n\n  this.handleKeyDown = function (ev) {\n    // do not intercept key events if the suggestions overlay is not shown\n    var suggestionsCount = countSuggestions(_this3.state.suggestions);\n\n    var suggestionsComp = _this3.suggestionsRef;\n    if (suggestionsCount === 0 || !suggestionsComp) {\n      _this3.props.onKeyDown(ev);\n\n      return;\n    }\n\n    if (values(KEY).indexOf(ev.keyCode) >= 0) {\n      ev.preventDefault();\n    }\n\n    switch (ev.keyCode) {\n      case KEY.ESC:\n        {\n          _this3.clearSuggestions();\n          return;\n        }\n      case KEY.DOWN:\n        {\n          _this3.shiftFocus(+1);\n          return;\n        }\n      case KEY.UP:\n        {\n          _this3.shiftFocus(-1);\n          return;\n        }\n      case KEY.RETURN:\n        {\n          _this3.selectFocused();\n          return;\n        }\n      case KEY.TAB:\n        {\n          _this3.selectFocused();\n          return;\n        }\n      default:\n        {\n          return;\n        }\n    }\n  };\n\n  this.shiftFocus = function (delta) {\n    var suggestionsCount = countSuggestions(_this3.state.suggestions);\n\n    _this3.setState({\n      focusIndex: (suggestionsCount + _this3.state.focusIndex + delta) % suggestionsCount,\n      scrollFocusedIntoView: true\n    });\n  };\n\n  this.selectFocused = function () {\n    var _state2 = _this3.state,\n        suggestions = _state2.suggestions,\n        focusIndex = _state2.focusIndex;\n\n    var _getSuggestion = getSuggestion(suggestions, focusIndex),\n        suggestion = _getSuggestion.suggestion,\n        descriptor = _getSuggestion.descriptor;\n\n    _this3.addMention(suggestion, descriptor);\n\n    _this3.setState({\n      focusIndex: 0\n    });\n  };\n\n  this.handleBlur = function (ev) {\n    var clickedSuggestion = _this3._suggestionsMouseDown;\n    _this3._suggestionsMouseDown = false;\n\n    // only reset selection if the mousedown happened on an element\n    // other than the suggestions overlay\n    if (!clickedSuggestion) {\n      _this3.setState({\n        selectionStart: null,\n        selectionEnd: null\n      });\n    }\n\n    window.setTimeout(function () {\n      _this3.updateHighlighterScroll();\n    }, 1);\n\n    _this3.props.onBlur(ev, clickedSuggestion);\n  };\n\n  this.handleSuggestionsMouseDown = function (ev) {\n    _this3._suggestionsMouseDown = true;\n  };\n\n  this.updateSuggestionsPosition = function () {\n    var caretPosition = _this3.state.caretPosition;\n\n\n    if (!caretPosition || !_this3.suggestionsRef) {\n      return;\n    }\n\n    var suggestions = ReactDOM.findDOMNode(_this3.suggestionsRef);\n    var highlighter = ReactDOM.findDOMNode(_this3.highlighterRef);\n\n    if (!suggestions) {\n      return;\n    }\n\n    var position = {};\n\n    // if suggestions menu is in a portal, update position to be releative to its portal node\n    if (_this3.props.suggestionsPortalHost) {\n      // first get viewport-relative position (highlighter is offsetParent of caret):\n      var caretOffsetParentRect = highlighter.getBoundingClientRect();\n      var caretHeight = getComputedStyleLengthProp(highlighter, 'font-size');\n      var viewportRelative = {\n        left: caretOffsetParentRect.left + caretPosition.left,\n        top: caretOffsetParentRect.top + caretPosition.top + caretHeight\n      };\n      position.position = 'fixed';\n      var left = viewportRelative.left;\n      position.top = viewportRelative.top;\n      // absolute/fixed positioned elements are positioned according to their entire box including margins; so we remove margins here:\n      left -= getComputedStyleLengthProp(suggestions, 'margin-left');\n      position.top -= getComputedStyleLengthProp(suggestions, 'margin-top');\n      // take into account highlighter/textinput scrolling:\n      left -= highlighter.scrollLeft;\n      position.top -= highlighter.scrollTop;\n      // guard for mentions suggestions list clipped by right edge of window\n      var viewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n      if (left + suggestions.offsetWidth > viewportWidth) {\n        position.left = Math.max(0, viewportWidth - suggestions.offsetWidth);\n      } else {\n        position.left = left;\n      }\n    } else {\n      var _left = caretPosition.left - highlighter.scrollLeft;\n      // guard for mentions suggestions list clipped by right edge of window\n      if (_left + suggestions.offsetWidth > _this3.containerRef.offsetWidth) {\n        position.right = 0;\n      } else {\n        position.left = _left;\n      }\n      position.top = caretPosition.top - highlighter.scrollTop;\n    }\n\n    if (isEqual(position, _this3.state.suggestionsPosition)) {\n      return;\n    }\n\n    _this3.setState({\n      suggestionsPosition: position\n    });\n  };\n\n  this.updateHighlighterScroll = function () {\n    if (!_this3.inputRef || !_this3.highlighterRef) {\n      // since the invocation of this function is deferred,\n      // the whole component may have been unmounted in the meanwhile\n      return;\n    }\n    var input = _this3.inputRef;\n    var highlighter = ReactDOM.findDOMNode(_this3.highlighterRef);\n    highlighter.scrollLeft = input.scrollLeft;\n    highlighter.scrollTop = input.scrollTop;\n    highlighter.height = input.height;\n  };\n\n  this.handleCompositionStart = function () {\n    isComposing = true;\n  };\n\n  this.handleCompositionEnd = function () {\n    isComposing = false;\n  };\n\n  this.setSelection = function (selectionStart, selectionEnd) {\n    if (selectionStart === null || selectionEnd === null) return;\n\n    var el = _this3.inputRef;\n    if (el.setSelectionRange) {\n      el.setSelectionRange(selectionStart, selectionEnd);\n    } else if (el.createTextRange) {\n      var range = el.createTextRange();\n      range.collapse(true);\n      range.moveEnd('character', selectionEnd);\n      range.moveStart('character', selectionStart);\n      range.select();\n    }\n  };\n\n  this.updateMentionsQueries = function (plainTextValue, caretPosition) {\n    // Invalidate previous queries. Async results for previous queries will be neglected.\n    _this3._queryId++;\n    _this3.suggestions = {};\n    _this3.setState({\n      suggestions: {}\n    });\n\n    var value = _this3.props.value || '';\n    var _props6 = _this3.props,\n        markup = _props6.markup,\n        displayTransform = _props6.displayTransform,\n        children = _props6.children,\n        regex = _props6.regex;\n\n    var positionInValue = mapPlainTextIndex(value, markup, caretPosition, 'NULL', displayTransform, regex);\n\n    // If caret is inside of mention, do not query\n    if (positionInValue === null) {\n      return;\n    }\n\n    // Extract substring in between the end of the previous mention and the caret\n    var substringStartIndex = getEndOfLastMention(value.substring(0, positionInValue), markup, displayTransform, regex);\n    var substring = plainTextValue.substring(substringStartIndex, caretPosition);\n\n    // Check if suggestions have to be shown:\n    // Match the trigger patterns of all Mention children on the extracted substring\n    React.Children.forEach(children, function (child) {\n      if (!child) {\n        return;\n      }\n\n      var regex = _getTriggerRegex(child.props.trigger, _this3.props);\n      var match = substring.match(regex);\n      if (match) {\n        var querySequenceStart = substringStartIndex + substring.indexOf(match[1], match.index);\n        _this3.queryData(match[2], child, querySequenceStart, querySequenceStart + match[1].length, plainTextValue);\n      }\n    });\n  };\n\n  this.clearSuggestions = function () {\n    // Invalidate previous queries. Async results for previous queries will be neglected.\n    _this3._queryId++;\n    _this3.suggestions = {};\n    _this3.setState({\n      suggestions: {},\n      focusIndex: 0\n    });\n  };\n\n  this.queryData = function (query, mentionDescriptor, querySequenceStart, querySequenceEnd, plainTextValue) {\n    var provideData = _getDataProvider(mentionDescriptor.props.data);\n    var snycResult = provideData(query, _this3.updateSuggestions.bind(null, _this3._queryId, mentionDescriptor, query, querySequenceStart, querySequenceEnd, plainTextValue));\n    if (snycResult instanceof Array) {\n      _this3.updateSuggestions(_this3._queryId, mentionDescriptor, query, querySequenceStart, querySequenceEnd, plainTextValue, snycResult);\n    }\n  };\n\n  this.updateSuggestions = function (queryId, mentionDescriptor, query, querySequenceStart, querySequenceEnd, plainTextValue, suggestions) {\n    var _extends2;\n\n    // neglect async results from previous queries\n    if (queryId !== _this3._queryId) return;\n\n    // save in property so that multiple sync state updates from different mentions sources\n    // won't overwrite each other\n    _this3.suggestions = _extends({}, _this3.suggestions, (_extends2 = {}, _extends2[mentionDescriptor.props.type] = {\n      query: query,\n      mentionDescriptor: mentionDescriptor,\n      querySequenceStart: querySequenceStart,\n      querySequenceEnd: querySequenceEnd,\n      results: suggestions,\n      plainTextValue: plainTextValue\n    }, _extends2));\n\n    var focusIndex = _this3.state.focusIndex;\n\n    var suggestionsCount = countSuggestions(_this3.suggestions);\n    _this3.setState({\n      suggestions: _this3.suggestions,\n      focusIndex: focusIndex >= suggestionsCount ? Math.max(suggestionsCount - 1, 0) : focusIndex\n    });\n  };\n\n  this.addMention = function (suggestion, _ref) {\n    var mentionDescriptor = _ref.mentionDescriptor,\n        querySequenceStart = _ref.querySequenceStart,\n        querySequenceEnd = _ref.querySequenceEnd,\n        plainTextValue = _ref.plainTextValue;\n\n    // Insert mention in the marked up value at the correct position\n    var value = _this3.props.value || '';\n    var _props7 = _this3.props,\n        markup = _props7.markup,\n        displayTransform = _props7.displayTransform,\n        regex = _props7.regex;\n\n    var start = mapPlainTextIndex(value, markup, querySequenceStart, 'START', displayTransform, regex);\n    var end = start + querySequenceEnd - querySequenceStart;\n    var insert = makeMentionsMarkup(markup, suggestion.id, suggestion.display, mentionDescriptor.props.type);\n    if (mentionDescriptor.props.appendSpaceOnAdd) {\n      insert = insert + ' ';\n    }\n    var newValue = spliceString(value, start, end, insert);\n\n    // Refocus input and set caret position to end of mention\n    _this3.inputRef.focus();\n\n    var displayValue = displayTransform(suggestion.id, suggestion.display, mentionDescriptor.props.type);\n    if (mentionDescriptor.props.appendSpaceOnAdd) {\n      displayValue = displayValue + ' ';\n    }\n    var newCaretPosition = querySequenceStart + displayValue.length;\n    _this3.setState({\n      selectionStart: newCaretPosition,\n      selectionEnd: newCaretPosition,\n      setSelectionAfterMentionChange: true\n    });\n\n    // Propagate change\n    var eventMock = { target: { value: newValue } };\n    var mentions = getMentions(newValue, markup, displayTransform, regex);\n    var newPlainTextValue = spliceString(plainTextValue, querySequenceStart, querySequenceEnd, displayValue);\n\n    _this3.executeOnChange(eventMock, newValue, newPlainTextValue, mentions);\n\n    var onAdd = mentionDescriptor.props.onAdd;\n    if (onAdd) {\n      onAdd(suggestion.id, suggestion.display);\n    }\n\n    // Make sure the suggestions overlay is closed\n    _this3.clearSuggestions();\n  };\n\n  this.isLoading = function () {\n    var isLoading = false;\n    React.Children.forEach(_this3.props.children, function (child) {\n      isLoading = isLoading || child && child.props.isLoading;\n    });\n    return isLoading;\n  };\n\n  this._queryId = 0;\n}, _temp);\nMentionsInput.propTypes = process.env.NODE_ENV !== \"production\" ? propTypes : {};\n\n\nvar isMobileSafari = typeof navigator !== 'undefined' && /iPhone|iPad|iPod/i.test(navigator.userAgent);\n\nvar styled = defaultStyle({\n  position: 'relative',\n  overflowY: 'visible',\n\n  input: {\n    display: 'block',\n    position: 'absolute',\n    top: 0,\n    boxSizing: 'border-box',\n    backgroundColor: 'transparent',\n    width: 'inherit',\n    fontFamily: 'inherit',\n    fontSize: 'inherit'\n  },\n\n  '&multiLine': {\n    input: _extends({\n      width: '100%',\n      height: '100%',\n      bottom: 0,\n      overflow: 'hidden',\n      resize: 'none'\n\n    }, isMobileSafari ? {\n      marginTop: 1,\n      marginLeft: -3\n    } : null)\n  }\n}, function (_ref2) {\n  var singleLine = _ref2.singleLine;\n  return {\n    '&singleLine': singleLine,\n    '&multiLine': !singleLine\n  };\n});\n\nexport default styled(MentionsInput);","import React, { memo, useState, useEffect, useCallback, useMemo, useContext } from 'react';\nimport ReactDOM from 'react-dom';\n\n/**\r\n * Throw error when ModalContext is used outside of context provider\r\n */\r\nvar invariantViolation = function () {\r\n    throw new Error(\"Attempted to call useModal outside of modal context. Make sure your app is rendered inside ModalProvider.\");\r\n};\r\n/**\r\n * Modal Context Object\r\n */\r\nvar ModalContext = React.createContext({\r\n    showModal: invariantViolation,\r\n    hideModal: invariantViolation\r\n});\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    };\r\n    return __assign.apply(this, arguments);\r\n};\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\n\n/**\r\n * Component responsible for rendering the modal.\r\n *\r\n * The identity of `Component` may change dependeing on the inputs passed to\r\n * `useModal`. If we simply rendered `<Component />` then the modal would be\r\n * susceptible to rerenders whenever one of the inputs change.\r\n */\r\nvar ModalRenderer = memo(function (_a) {\r\n    var component = _a.component, rest = __rest(_a, [\"component\"]);\r\n    return component(rest);\r\n});\r\n/**\r\n * Modal Root\r\n *\r\n * Renders modals using react portal.\r\n */\r\nvar ModalRoot = memo(function (_a) {\r\n    var modals = _a.modals, container = _a.container, _b = _a.component, RootComponent = _b === void 0 ? React.Fragment : _b;\r\n    var _c = useState(undefined), mountNode = _c[0], setMountNode = _c[1];\r\n    // This effect will not be ran in the server environment\r\n    useEffect(function () { return setMountNode(container || document.body); });\r\n    return mountNode\r\n        ? ReactDOM.createPortal(React.createElement(RootComponent, null, Object.keys(modals).map(function (key) { return (React.createElement(ModalRenderer, { key: key, component: modals[key] })); })), mountNode)\r\n        : null;\r\n});\n\n/**\r\n * Modal Provider\r\n *\r\n * Provides modal context and renders ModalRoot.\r\n */\r\nvar ModalProvider = function (_a) {\r\n    var container = _a.container, rootComponent = _a.rootComponent, children = _a.children;\r\n    if (container && !(container instanceof HTMLElement)) {\r\n        throw new Error(\"Container must specify DOM element to mount modal root into.\\n    \\n    This behavior has changed in 3.0.0. Please use `rootComponent` prop instead.\\n    See: https://github.com/mpontus/react-modal-hook/issues/18\");\r\n    }\r\n    var _b = useState({}), modals = _b[0], setModals = _b[1];\r\n    var showModal = useCallback(function (key, modal) {\r\n        return setModals(function (modals) {\r\n            var _a;\r\n            return (__assign({}, modals, (_a = {}, _a[key] = modal, _a)));\r\n        });\r\n    }, []);\r\n    var hideModal = useCallback(function (key) {\r\n        return setModals(function (modals) {\r\n            var newModals = __assign({}, modals);\r\n            delete newModals[key];\r\n            return newModals;\r\n        });\r\n    }, []);\r\n    var contextValue = useMemo(function () { return ({ showModal: showModal, hideModal: hideModal }); }, []);\r\n    return (React.createElement(ModalContext.Provider, { value: contextValue },\r\n        React.createElement(React.Fragment, null,\r\n            children,\r\n            React.createElement(ModalRoot, { modals: modals, component: rootComponent, container: container }))));\r\n};\n\n/**\r\n * Utility function to generate unique number per component instance\r\n */\r\nvar generateModalKey = (function () {\r\n    var count = 0;\r\n    return function () { return \"\" + ++count; };\r\n})();\r\n/**\r\n * Check whether the argument is a stateless component.\r\n *\r\n * We take advantage of the stateless nature of functional components to be\r\n * inline the rendering of the modal component as part of another immutable\r\n * component.\r\n *\r\n * This is necessary for allowing the modal to update based on the inputs passed\r\n * as the second argument to useModal without unmounting the previous version of\r\n * the modal component.\r\n */\r\nvar isFunctionalComponent = function (Component) {\r\n    var prototype = Component.prototype;\r\n    return !prototype || !prototype.isReactComponent;\r\n};\r\n/**\r\n * React hook for showing modal windows\r\n */\r\nvar useModal = function (component, inputs) {\r\n    if (inputs === void 0) { inputs = []; }\r\n    if (!isFunctionalComponent(component)) {\r\n        throw new Error(\"Only stateless components can be used as an argument to useModal. You have probably passed a class component where a function was expected.\");\r\n    }\r\n    var key = useMemo(generateModalKey, []);\r\n    var modal = useMemo(function () { return component; }, inputs);\r\n    var context = useContext(ModalContext);\r\n    var _a = useState(false), isShown = _a[0], setShown = _a[1];\r\n    var showModal = useCallback(function () { return setShown(true); }, []);\r\n    var hideModal = useCallback(function () { return setShown(false); }, []);\r\n    useEffect(function () {\r\n        if (isShown) {\r\n            context.showModal(key, modal);\r\n        }\r\n        else {\r\n            context.hideModal(key);\r\n        }\r\n        // Hide modal when parent component unmounts\r\n        return function () { return context.hideModal(key); };\r\n    }, [modal, isShown]);\r\n    return [showModal, hideModal];\r\n};\n\nexport { ModalContext, ModalProvider, useModal };\n//# sourceMappingURL=index.es.js.map\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.bodyOpenClassName = exports.portalClassName = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require(\"react-dom\");\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _ModalPortal = require(\"./ModalPortal\");\n\nvar _ModalPortal2 = _interopRequireDefault(_ModalPortal);\n\nvar _ariaAppHider = require(\"../helpers/ariaAppHider\");\n\nvar ariaAppHider = _interopRequireWildcard(_ariaAppHider);\n\nvar _safeHTMLElement = require(\"../helpers/safeHTMLElement\");\n\nvar _safeHTMLElement2 = _interopRequireDefault(_safeHTMLElement);\n\nvar _reactLifecyclesCompat = require(\"react-lifecycles-compat\");\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar portalClassName = exports.portalClassName = \"ReactModalPortal\";\nvar bodyOpenClassName = exports.bodyOpenClassName = \"ReactModal__Body--open\";\n\nvar isReact16 = _safeHTMLElement.canUseDOM && _reactDom2.default.createPortal !== undefined;\n\nvar createHTMLElement = function createHTMLElement(name) {\n  return document.createElement(name);\n};\n\nvar getCreatePortal = function getCreatePortal() {\n  return isReact16 ? _reactDom2.default.createPortal : _reactDom2.default.unstable_renderSubtreeIntoContainer;\n};\n\nfunction getParentElement(parentSelector) {\n  return parentSelector();\n}\n\nvar Modal = function (_Component) {\n  _inherits(Modal, _Component);\n\n  function Modal() {\n    var _ref;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, Modal);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Modal.__proto__ || Object.getPrototypeOf(Modal)).call.apply(_ref, [this].concat(args))), _this), _this.removePortal = function () {\n      !isReact16 && _reactDom2.default.unmountComponentAtNode(_this.node);\n      var parent = getParentElement(_this.props.parentSelector);\n      if (parent && parent.contains(_this.node)) {\n        parent.removeChild(_this.node);\n      } else {\n        // eslint-disable-next-line no-console\n        console.warn('React-Modal: \"parentSelector\" prop did not returned any DOM ' + \"element. Make sure that the parent element is unmounted to \" + \"avoid any memory leaks.\");\n      }\n    }, _this.portalRef = function (ref) {\n      _this.portal = ref;\n    }, _this.renderPortal = function (props) {\n      var createPortal = getCreatePortal();\n      var portal = createPortal(_this, _react2.default.createElement(_ModalPortal2.default, _extends({ defaultStyles: Modal.defaultStyles }, props)), _this.node);\n      _this.portalRef(portal);\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(Modal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (!_safeHTMLElement.canUseDOM) return;\n\n      if (!isReact16) {\n        this.node = createHTMLElement(\"div\");\n      }\n      this.node.className = this.props.portalClassName;\n\n      var parent = getParentElement(this.props.parentSelector);\n      parent.appendChild(this.node);\n\n      !isReact16 && this.renderPortal(this.props);\n    }\n  }, {\n    key: \"getSnapshotBeforeUpdate\",\n    value: function getSnapshotBeforeUpdate(prevProps) {\n      var prevParent = getParentElement(prevProps.parentSelector);\n      var nextParent = getParentElement(this.props.parentSelector);\n      return { prevParent: prevParent, nextParent: nextParent };\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, _, snapshot) {\n      if (!_safeHTMLElement.canUseDOM) return;\n      var _props = this.props,\n          isOpen = _props.isOpen,\n          portalClassName = _props.portalClassName;\n\n\n      if (prevProps.portalClassName !== portalClassName) {\n        this.node.className = portalClassName;\n      }\n\n      var prevParent = snapshot.prevParent,\n          nextParent = snapshot.nextParent;\n\n      if (nextParent !== prevParent) {\n        prevParent.removeChild(this.node);\n        nextParent.appendChild(this.node);\n      }\n\n      // Stop unnecessary renders if modal is remaining closed\n      if (!prevProps.isOpen && !isOpen) return;\n\n      !isReact16 && this.renderPortal(this.props);\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (!_safeHTMLElement.canUseDOM || !this.node || !this.portal) return;\n\n      var state = this.portal.state;\n      var now = Date.now();\n      var closesAt = state.isOpen && this.props.closeTimeoutMS && (state.closesAt || now + this.props.closeTimeoutMS);\n\n      if (closesAt) {\n        if (!state.beforeClose) {\n          this.portal.closeWithTimeout();\n        }\n\n        setTimeout(this.removePortal, closesAt - now);\n      } else {\n        this.removePortal();\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      if (!_safeHTMLElement.canUseDOM || !isReact16) {\n        return null;\n      }\n\n      if (!this.node && isReact16) {\n        this.node = createHTMLElement(\"div\");\n      }\n\n      var createPortal = getCreatePortal();\n      return createPortal(_react2.default.createElement(_ModalPortal2.default, _extends({\n        ref: this.portalRef,\n        defaultStyles: Modal.defaultStyles\n      }, this.props)), this.node);\n    }\n  }], [{\n    key: \"setAppElement\",\n    value: function setAppElement(element) {\n      ariaAppHider.setElement(element);\n    }\n\n    /* eslint-disable react/no-unused-prop-types */\n\n    /* eslint-enable react/no-unused-prop-types */\n\n  }]);\n\n  return Modal;\n}(_react.Component);\n\nModal.propTypes = {\n  isOpen: _propTypes2.default.bool.isRequired,\n  style: _propTypes2.default.shape({\n    content: _propTypes2.default.object,\n    overlay: _propTypes2.default.object\n  }),\n  portalClassName: _propTypes2.default.string,\n  bodyOpenClassName: _propTypes2.default.string,\n  htmlOpenClassName: _propTypes2.default.string,\n  className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n    base: _propTypes2.default.string.isRequired,\n    afterOpen: _propTypes2.default.string.isRequired,\n    beforeClose: _propTypes2.default.string.isRequired\n  })]),\n  overlayClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.shape({\n    base: _propTypes2.default.string.isRequired,\n    afterOpen: _propTypes2.default.string.isRequired,\n    beforeClose: _propTypes2.default.string.isRequired\n  })]),\n  appElement: _propTypes2.default.oneOfType([_propTypes2.default.instanceOf(_safeHTMLElement2.default), _propTypes2.default.instanceOf(_safeHTMLElement.SafeHTMLCollection), _propTypes2.default.instanceOf(_safeHTMLElement.SafeNodeList), _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(_safeHTMLElement2.default))]),\n  onAfterOpen: _propTypes2.default.func,\n  onRequestClose: _propTypes2.default.func,\n  closeTimeoutMS: _propTypes2.default.number,\n  ariaHideApp: _propTypes2.default.bool,\n  shouldFocusAfterRender: _propTypes2.default.bool,\n  shouldCloseOnOverlayClick: _propTypes2.default.bool,\n  shouldReturnFocusAfterClose: _propTypes2.default.bool,\n  preventScroll: _propTypes2.default.bool,\n  parentSelector: _propTypes2.default.func,\n  aria: _propTypes2.default.object,\n  data: _propTypes2.default.object,\n  role: _propTypes2.default.string,\n  contentLabel: _propTypes2.default.string,\n  shouldCloseOnEsc: _propTypes2.default.bool,\n  overlayRef: _propTypes2.default.func,\n  contentRef: _propTypes2.default.func,\n  id: _propTypes2.default.string,\n  overlayElement: _propTypes2.default.func,\n  contentElement: _propTypes2.default.func\n};\nModal.defaultProps = {\n  isOpen: false,\n  portalClassName: portalClassName,\n  bodyOpenClassName: bodyOpenClassName,\n  role: \"dialog\",\n  ariaHideApp: true,\n  closeTimeoutMS: 0,\n  shouldFocusAfterRender: true,\n  shouldCloseOnEsc: true,\n  shouldCloseOnOverlayClick: true,\n  shouldReturnFocusAfterClose: true,\n  preventScroll: false,\n  parentSelector: function parentSelector() {\n    return document.body;\n  },\n  overlayElement: function overlayElement(props, contentEl) {\n    return _react2.default.createElement(\n      \"div\",\n      props,\n      contentEl\n    );\n  },\n  contentElement: function contentElement(props, children) {\n    return _react2.default.createElement(\n      \"div\",\n      props,\n      children\n    );\n  }\n};\nModal.defaultStyles = {\n  overlay: {\n    position: \"fixed\",\n    top: 0,\n    left: 0,\n    right: 0,\n    bottom: 0,\n    backgroundColor: \"rgba(255, 255, 255, 0.75)\"\n  },\n  content: {\n    position: \"absolute\",\n    top: \"40px\",\n    left: \"40px\",\n    right: \"40px\",\n    bottom: \"40px\",\n    border: \"1px solid #ccc\",\n    background: \"#fff\",\n    overflow: \"auto\",\n    WebkitOverflowScrolling: \"touch\",\n    borderRadius: \"4px\",\n    outline: \"none\",\n    padding: \"20px\"\n  }\n};\n\n\n(0, _reactLifecyclesCompat.polyfill)(Modal);\n\nif (process.env.NODE_ENV !== \"production\") {\n  Modal.setCreateHTMLElement = function (fn) {\n    return createHTMLElement = fn;\n  };\n}\n\nexports.default = Modal;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require(\"react\");\n\nvar _propTypes = require(\"prop-types\");\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _focusManager = require(\"../helpers/focusManager\");\n\nvar focusManager = _interopRequireWildcard(_focusManager);\n\nvar _scopeTab = require(\"../helpers/scopeTab\");\n\nvar _scopeTab2 = _interopRequireDefault(_scopeTab);\n\nvar _ariaAppHider = require(\"../helpers/ariaAppHider\");\n\nvar ariaAppHider = _interopRequireWildcard(_ariaAppHider);\n\nvar _classList = require(\"../helpers/classList\");\n\nvar classList = _interopRequireWildcard(_classList);\n\nvar _safeHTMLElement = require(\"../helpers/safeHTMLElement\");\n\nvar _safeHTMLElement2 = _interopRequireDefault(_safeHTMLElement);\n\nvar _portalOpenInstances = require(\"../helpers/portalOpenInstances\");\n\nvar _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);\n\nrequire(\"../helpers/bodyTrap\");\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// so that our CSS is statically analyzable\nvar CLASS_NAMES = {\n  overlay: \"ReactModal__Overlay\",\n  content: \"ReactModal__Content\"\n};\n\nvar TAB_KEY = 9;\nvar ESC_KEY = 27;\n\nvar ariaHiddenInstances = 0;\n\nvar ModalPortal = function (_Component) {\n  _inherits(ModalPortal, _Component);\n\n  function ModalPortal(props) {\n    _classCallCheck(this, ModalPortal);\n\n    var _this = _possibleConstructorReturn(this, (ModalPortal.__proto__ || Object.getPrototypeOf(ModalPortal)).call(this, props));\n\n    _this.setOverlayRef = function (overlay) {\n      _this.overlay = overlay;\n      _this.props.overlayRef && _this.props.overlayRef(overlay);\n    };\n\n    _this.setContentRef = function (content) {\n      _this.content = content;\n      _this.props.contentRef && _this.props.contentRef(content);\n    };\n\n    _this.afterClose = function () {\n      var _this$props = _this.props,\n          appElement = _this$props.appElement,\n          ariaHideApp = _this$props.ariaHideApp,\n          htmlOpenClassName = _this$props.htmlOpenClassName,\n          bodyOpenClassName = _this$props.bodyOpenClassName;\n\n      // Remove classes.\n\n      bodyOpenClassName && classList.remove(document.body, bodyOpenClassName);\n\n      htmlOpenClassName && classList.remove(document.getElementsByTagName(\"html\")[0], htmlOpenClassName);\n\n      // Reset aria-hidden attribute if all modals have been removed\n      if (ariaHideApp && ariaHiddenInstances > 0) {\n        ariaHiddenInstances -= 1;\n\n        if (ariaHiddenInstances === 0) {\n          ariaAppHider.show(appElement);\n        }\n      }\n\n      if (_this.props.shouldFocusAfterRender) {\n        if (_this.props.shouldReturnFocusAfterClose) {\n          focusManager.returnFocus(_this.props.preventScroll);\n          focusManager.teardownScopedFocus();\n        } else {\n          focusManager.popWithoutFocus();\n        }\n      }\n\n      if (_this.props.onAfterClose) {\n        _this.props.onAfterClose();\n      }\n\n      _portalOpenInstances2.default.deregister(_this);\n    };\n\n    _this.open = function () {\n      _this.beforeOpen();\n      if (_this.state.afterOpen && _this.state.beforeClose) {\n        clearTimeout(_this.closeTimer);\n        _this.setState({ beforeClose: false });\n      } else {\n        if (_this.props.shouldFocusAfterRender) {\n          focusManager.setupScopedFocus(_this.node);\n          focusManager.markForFocusLater();\n        }\n\n        _this.setState({ isOpen: true }, function () {\n          _this.openAnimationFrame = requestAnimationFrame(function () {\n            _this.setState({ afterOpen: true });\n\n            if (_this.props.isOpen && _this.props.onAfterOpen) {\n              _this.props.onAfterOpen({\n                overlayEl: _this.overlay,\n                contentEl: _this.content\n              });\n            }\n          });\n        });\n      }\n    };\n\n    _this.close = function () {\n      if (_this.props.closeTimeoutMS > 0) {\n        _this.closeWithTimeout();\n      } else {\n        _this.closeWithoutTimeout();\n      }\n    };\n\n    _this.focusContent = function () {\n      return _this.content && !_this.contentHasFocus() && _this.content.focus({ preventScroll: true });\n    };\n\n    _this.closeWithTimeout = function () {\n      var closesAt = Date.now() + _this.props.closeTimeoutMS;\n      _this.setState({ beforeClose: true, closesAt: closesAt }, function () {\n        _this.closeTimer = setTimeout(_this.closeWithoutTimeout, _this.state.closesAt - Date.now());\n      });\n    };\n\n    _this.closeWithoutTimeout = function () {\n      _this.setState({\n        beforeClose: false,\n        isOpen: false,\n        afterOpen: false,\n        closesAt: null\n      }, _this.afterClose);\n    };\n\n    _this.handleKeyDown = function (event) {\n      if (event.keyCode === TAB_KEY) {\n        (0, _scopeTab2.default)(_this.content, event);\n      }\n\n      if (_this.props.shouldCloseOnEsc && event.keyCode === ESC_KEY) {\n        event.stopPropagation();\n        _this.requestClose(event);\n      }\n    };\n\n    _this.handleOverlayOnClick = function (event) {\n      if (_this.shouldClose === null) {\n        _this.shouldClose = true;\n      }\n\n      if (_this.shouldClose && _this.props.shouldCloseOnOverlayClick) {\n        if (_this.ownerHandlesClose()) {\n          _this.requestClose(event);\n        } else {\n          _this.focusContent();\n        }\n      }\n      _this.shouldClose = null;\n    };\n\n    _this.handleContentOnMouseUp = function () {\n      _this.shouldClose = false;\n    };\n\n    _this.handleOverlayOnMouseDown = function (event) {\n      if (!_this.props.shouldCloseOnOverlayClick && event.target == _this.overlay) {\n        event.preventDefault();\n      }\n    };\n\n    _this.handleContentOnClick = function () {\n      _this.shouldClose = false;\n    };\n\n    _this.handleContentOnMouseDown = function () {\n      _this.shouldClose = false;\n    };\n\n    _this.requestClose = function (event) {\n      return _this.ownerHandlesClose() && _this.props.onRequestClose(event);\n    };\n\n    _this.ownerHandlesClose = function () {\n      return _this.props.onRequestClose;\n    };\n\n    _this.shouldBeClosed = function () {\n      return !_this.state.isOpen && !_this.state.beforeClose;\n    };\n\n    _this.contentHasFocus = function () {\n      return document.activeElement === _this.content || _this.content.contains(document.activeElement);\n    };\n\n    _this.buildClassName = function (which, additional) {\n      var classNames = (typeof additional === \"undefined\" ? \"undefined\" : _typeof(additional)) === \"object\" ? additional : {\n        base: CLASS_NAMES[which],\n        afterOpen: CLASS_NAMES[which] + \"--after-open\",\n        beforeClose: CLASS_NAMES[which] + \"--before-close\"\n      };\n      var className = classNames.base;\n      if (_this.state.afterOpen) {\n        className = className + \" \" + classNames.afterOpen;\n      }\n      if (_this.state.beforeClose) {\n        className = className + \" \" + classNames.beforeClose;\n      }\n      return typeof additional === \"string\" && additional ? className + \" \" + additional : className;\n    };\n\n    _this.attributesFromObject = function (prefix, items) {\n      return Object.keys(items).reduce(function (acc, name) {\n        acc[prefix + \"-\" + name] = items[name];\n        return acc;\n      }, {});\n    };\n\n    _this.state = {\n      afterOpen: false,\n      beforeClose: false\n    };\n\n    _this.shouldClose = null;\n    _this.moveFromContentToOverlay = null;\n    return _this;\n  }\n\n  _createClass(ModalPortal, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (this.props.isOpen) {\n        this.open();\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps, prevState) {\n      if (process.env.NODE_ENV !== \"production\") {\n        if (prevProps.bodyOpenClassName !== this.props.bodyOpenClassName) {\n          // eslint-disable-next-line no-console\n          console.warn('React-Modal: \"bodyOpenClassName\" prop has been modified. ' + \"This may cause unexpected behavior when multiple modals are open.\");\n        }\n        if (prevProps.htmlOpenClassName !== this.props.htmlOpenClassName) {\n          // eslint-disable-next-line no-console\n          console.warn('React-Modal: \"htmlOpenClassName\" prop has been modified. ' + \"This may cause unexpected behavior when multiple modals are open.\");\n        }\n      }\n\n      if (this.props.isOpen && !prevProps.isOpen) {\n        this.open();\n      } else if (!this.props.isOpen && prevProps.isOpen) {\n        this.close();\n      }\n\n      // Focus only needs to be set once when the modal is being opened\n      if (this.props.shouldFocusAfterRender && this.state.isOpen && !prevState.isOpen) {\n        this.focusContent();\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      if (this.state.isOpen) {\n        this.afterClose();\n      }\n      clearTimeout(this.closeTimer);\n      cancelAnimationFrame(this.openAnimationFrame);\n    }\n  }, {\n    key: \"beforeOpen\",\n    value: function beforeOpen() {\n      var _props = this.props,\n          appElement = _props.appElement,\n          ariaHideApp = _props.ariaHideApp,\n          htmlOpenClassName = _props.htmlOpenClassName,\n          bodyOpenClassName = _props.bodyOpenClassName;\n\n      // Add classes.\n\n      bodyOpenClassName && classList.add(document.body, bodyOpenClassName);\n\n      htmlOpenClassName && classList.add(document.getElementsByTagName(\"html\")[0], htmlOpenClassName);\n\n      if (ariaHideApp) {\n        ariaHiddenInstances += 1;\n        ariaAppHider.hide(appElement);\n      }\n\n      _portalOpenInstances2.default.register(this);\n    }\n\n    // Don't steal focus from inner elements\n\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _props2 = this.props,\n          id = _props2.id,\n          className = _props2.className,\n          overlayClassName = _props2.overlayClassName,\n          defaultStyles = _props2.defaultStyles,\n          children = _props2.children;\n\n      var contentStyles = className ? {} : defaultStyles.content;\n      var overlayStyles = overlayClassName ? {} : defaultStyles.overlay;\n\n      if (this.shouldBeClosed()) {\n        return null;\n      }\n\n      var overlayProps = {\n        ref: this.setOverlayRef,\n        className: this.buildClassName(\"overlay\", overlayClassName),\n        style: _extends({}, overlayStyles, this.props.style.overlay),\n        onClick: this.handleOverlayOnClick,\n        onMouseDown: this.handleOverlayOnMouseDown\n      };\n\n      var contentProps = _extends({\n        id: id,\n        ref: this.setContentRef,\n        style: _extends({}, contentStyles, this.props.style.content),\n        className: this.buildClassName(\"content\", className),\n        tabIndex: \"-1\",\n        onKeyDown: this.handleKeyDown,\n        onMouseDown: this.handleContentOnMouseDown,\n        onMouseUp: this.handleContentOnMouseUp,\n        onClick: this.handleContentOnClick,\n        role: this.props.role,\n        \"aria-label\": this.props.contentLabel\n      }, this.attributesFromObject(\"aria\", _extends({ modal: true }, this.props.aria)), this.attributesFromObject(\"data\", this.props.data || {}), {\n        \"data-testid\": this.props.testId\n      });\n\n      var contentElement = this.props.contentElement(contentProps, children);\n      return this.props.overlayElement(overlayProps, contentElement);\n    }\n  }]);\n\n  return ModalPortal;\n}(_react.Component);\n\nModalPortal.defaultProps = {\n  style: {\n    overlay: {},\n    content: {}\n  },\n  defaultStyles: {}\n};\nModalPortal.propTypes = {\n  isOpen: _propTypes2.default.bool.isRequired,\n  defaultStyles: _propTypes2.default.shape({\n    content: _propTypes2.default.object,\n    overlay: _propTypes2.default.object\n  }),\n  style: _propTypes2.default.shape({\n    content: _propTypes2.default.object,\n    overlay: _propTypes2.default.object\n  }),\n  className: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),\n  overlayClassName: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.object]),\n  bodyOpenClassName: _propTypes2.default.string,\n  htmlOpenClassName: _propTypes2.default.string,\n  ariaHideApp: _propTypes2.default.bool,\n  appElement: _propTypes2.default.oneOfType([_propTypes2.default.instanceOf(_safeHTMLElement2.default), _propTypes2.default.instanceOf(_safeHTMLElement.SafeHTMLCollection), _propTypes2.default.instanceOf(_safeHTMLElement.SafeNodeList), _propTypes2.default.arrayOf(_propTypes2.default.instanceOf(_safeHTMLElement2.default))]),\n  onAfterOpen: _propTypes2.default.func,\n  onAfterClose: _propTypes2.default.func,\n  onRequestClose: _propTypes2.default.func,\n  closeTimeoutMS: _propTypes2.default.number,\n  shouldFocusAfterRender: _propTypes2.default.bool,\n  shouldCloseOnOverlayClick: _propTypes2.default.bool,\n  shouldReturnFocusAfterClose: _propTypes2.default.bool,\n  preventScroll: _propTypes2.default.bool,\n  role: _propTypes2.default.string,\n  contentLabel: _propTypes2.default.string,\n  aria: _propTypes2.default.object,\n  data: _propTypes2.default.object,\n  children: _propTypes2.default.node,\n  shouldCloseOnEsc: _propTypes2.default.bool,\n  overlayRef: _propTypes2.default.func,\n  contentRef: _propTypes2.default.func,\n  id: _propTypes2.default.string,\n  overlayElement: _propTypes2.default.func,\n  contentElement: _propTypes2.default.func,\n  testId: _propTypes2.default.string\n};\nexports.default = ModalPortal;\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.resetState = resetState;\nexports.log = log;\nexports.assertNodeList = assertNodeList;\nexports.setElement = setElement;\nexports.validateElement = validateElement;\nexports.hide = hide;\nexports.show = show;\nexports.documentNotReadyOrSSRTesting = documentNotReadyOrSSRTesting;\n\nvar _warning = require(\"warning\");\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _safeHTMLElement = require(\"./safeHTMLElement\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar globalElement = null;\n\n/* eslint-disable no-console */\n/* istanbul ignore next */\nfunction resetState() {\n  if (globalElement) {\n    if (globalElement.removeAttribute) {\n      globalElement.removeAttribute(\"aria-hidden\");\n    } else if (globalElement.length != null) {\n      globalElement.forEach(function (element) {\n        return element.removeAttribute(\"aria-hidden\");\n      });\n    } else {\n      document.querySelectorAll(globalElement).forEach(function (element) {\n        return element.removeAttribute(\"aria-hidden\");\n      });\n    }\n  }\n  globalElement = null;\n}\n\n/* istanbul ignore next */\nfunction log() {\n  if (process.env.NODE_ENV !== \"production\") {\n    var check = globalElement || {};\n    console.log(\"ariaAppHider ----------\");\n    console.log(check.nodeName, check.className, check.id);\n    console.log(\"end ariaAppHider ----------\");\n  }\n}\n/* eslint-enable no-console */\n\nfunction assertNodeList(nodeList, selector) {\n  if (!nodeList || !nodeList.length) {\n    throw new Error(\"react-modal: No elements were found for selector \" + selector + \".\");\n  }\n}\n\nfunction setElement(element) {\n  var useElement = element;\n  if (typeof useElement === \"string\" && _safeHTMLElement.canUseDOM) {\n    var el = document.querySelectorAll(useElement);\n    assertNodeList(el, useElement);\n    useElement = el;\n  }\n  globalElement = useElement || globalElement;\n  return globalElement;\n}\n\nfunction validateElement(appElement) {\n  var el = appElement || globalElement;\n  if (el) {\n    return Array.isArray(el) || el instanceof HTMLCollection || el instanceof NodeList ? el : [el];\n  } else {\n    (0, _warning2.default)(false, [\"react-modal: App element is not defined.\", \"Please use `Modal.setAppElement(el)` or set `appElement={el}`.\", \"This is needed so screen readers don't see main content\", \"when modal is opened. It is not recommended, but you can opt-out\", \"by setting `ariaHideApp={false}`.\"].join(\" \"));\n\n    return [];\n  }\n}\n\nfunction hide(appElement) {\n  var _iteratorNormalCompletion = true;\n  var _didIteratorError = false;\n  var _iteratorError = undefined;\n\n  try {\n    for (var _iterator = validateElement(appElement)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n      var el = _step.value;\n\n      el.setAttribute(\"aria-hidden\", \"true\");\n    }\n  } catch (err) {\n    _didIteratorError = true;\n    _iteratorError = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion && _iterator.return) {\n        _iterator.return();\n      }\n    } finally {\n      if (_didIteratorError) {\n        throw _iteratorError;\n      }\n    }\n  }\n}\n\nfunction show(appElement) {\n  var _iteratorNormalCompletion2 = true;\n  var _didIteratorError2 = false;\n  var _iteratorError2 = undefined;\n\n  try {\n    for (var _iterator2 = validateElement(appElement)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n      var el = _step2.value;\n\n      el.removeAttribute(\"aria-hidden\");\n    }\n  } catch (err) {\n    _didIteratorError2 = true;\n    _iteratorError2 = err;\n  } finally {\n    try {\n      if (!_iteratorNormalCompletion2 && _iterator2.return) {\n        _iterator2.return();\n      }\n    } finally {\n      if (_didIteratorError2) {\n        throw _iteratorError2;\n      }\n    }\n  }\n}\n\nfunction documentNotReadyOrSSRTesting() {\n  globalElement = null;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.resetState = resetState;\nexports.log = log;\n\nvar _portalOpenInstances = require(\"./portalOpenInstances\");\n\nvar _portalOpenInstances2 = _interopRequireDefault(_portalOpenInstances);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// Body focus trap see Issue #742\n\nvar before = void 0,\n    after = void 0,\n    instances = [];\n\n/* eslint-disable no-console */\n/* istanbul ignore next */\nfunction resetState() {\n  var _arr = [before, after];\n\n  for (var _i = 0; _i < _arr.length; _i++) {\n    var item = _arr[_i];\n    if (!item) continue;\n    item.parentNode && item.parentNode.removeChild(item);\n  }\n  before = after = null;\n  instances = [];\n}\n\n/* istanbul ignore next */\nfunction log() {\n  console.log(\"bodyTrap ----------\");\n  console.log(instances.length);\n  var _arr2 = [before, after];\n  for (var _i2 = 0; _i2 < _arr2.length; _i2++) {\n    var item = _arr2[_i2];\n    var check = item || {};\n    console.log(check.nodeName, check.className, check.id);\n  }\n  console.log(\"edn bodyTrap ----------\");\n}\n/* eslint-enable no-console */\n\nfunction focusContent() {\n  if (instances.length === 0) {\n    if (process.env.NODE_ENV !== \"production\") {\n      // eslint-disable-next-line no-console\n      console.warn(\"React-Modal: Open instances > 0 expected\");\n    }\n    return;\n  }\n  instances[instances.length - 1].focusContent();\n}\n\nfunction bodyTrap(eventType, openInstances) {\n  if (!before && !after) {\n    before = document.createElement(\"div\");\n    before.setAttribute(\"data-react-modal-body-trap\", \"\");\n    before.style.position = \"absolute\";\n    before.style.opacity = \"0\";\n    before.setAttribute(\"tabindex\", \"0\");\n    before.addEventListener(\"focus\", focusContent);\n    after = before.cloneNode();\n    after.addEventListener(\"focus\", focusContent);\n  }\n\n  instances = openInstances;\n\n  if (instances.length > 0) {\n    // Add focus trap\n    if (document.body.firstChild !== before) {\n      document.body.insertBefore(before, document.body.firstChild);\n    }\n    if (document.body.lastChild !== after) {\n      document.body.appendChild(after);\n    }\n  } else {\n    // Remove focus trap\n    if (before.parentElement) {\n      before.parentElement.removeChild(before);\n    }\n    if (after.parentElement) {\n      after.parentElement.removeChild(after);\n    }\n  }\n}\n\n_portalOpenInstances2.default.subscribe(bodyTrap);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.resetState = resetState;\nexports.log = log;\nvar htmlClassList = {};\nvar docBodyClassList = {};\n\n/* eslint-disable no-console */\n/* istanbul ignore next */\nfunction removeClass(at, cls) {\n  at.classList.remove(cls);\n}\n\n/* istanbul ignore next */\nfunction resetState() {\n  var htmlElement = document.getElementsByTagName(\"html\")[0];\n  for (var cls in htmlClassList) {\n    removeClass(htmlElement, htmlClassList[cls]);\n  }\n\n  var body = document.body;\n  for (var _cls in docBodyClassList) {\n    removeClass(body, docBodyClassList[_cls]);\n  }\n\n  htmlClassList = {};\n  docBodyClassList = {};\n}\n\n/* istanbul ignore next */\nfunction log() {\n  if (process.env.NODE_ENV !== \"production\") {\n    var classes = document.getElementsByTagName(\"html\")[0].className;\n    var buffer = \"Show tracked classes:\\n\\n\";\n\n    buffer += \"<html /> (\" + classes + \"):\\n  \";\n    for (var x in htmlClassList) {\n      buffer += \"  \" + x + \" \" + htmlClassList[x] + \"\\n  \";\n    }\n\n    classes = document.body.className;\n\n    buffer += \"\\n\\ndoc.body (\" + classes + \"):\\n  \";\n    for (var _x in docBodyClassList) {\n      buffer += \"  \" + _x + \" \" + docBodyClassList[_x] + \"\\n  \";\n    }\n\n    buffer += \"\\n\";\n\n    console.log(buffer);\n  }\n}\n/* eslint-enable no-console */\n\n/**\n * Track the number of reference of a class.\n * @param {object} poll The poll to receive the reference.\n * @param {string} className The class name.\n * @return {string}\n */\nvar incrementReference = function incrementReference(poll, className) {\n  if (!poll[className]) {\n    poll[className] = 0;\n  }\n  poll[className] += 1;\n  return className;\n};\n\n/**\n * Drop the reference of a class.\n * @param {object} poll The poll to receive the reference.\n * @param {string} className The class name.\n * @return {string}\n */\nvar decrementReference = function decrementReference(poll, className) {\n  if (poll[className]) {\n    poll[className] -= 1;\n  }\n  return className;\n};\n\n/**\n * Track a class and add to the given class list.\n * @param {Object} classListRef A class list of an element.\n * @param {Object} poll         The poll to be used.\n * @param {Array}  classes      The list of classes to be tracked.\n */\nvar trackClass = function trackClass(classListRef, poll, classes) {\n  classes.forEach(function (className) {\n    incrementReference(poll, className);\n    classListRef.add(className);\n  });\n};\n\n/**\n * Untrack a class and remove from the given class list if the reference\n * reaches 0.\n * @param {Object} classListRef A class list of an element.\n * @param {Object} poll         The poll to be used.\n * @param {Array}  classes      The list of classes to be untracked.\n */\nvar untrackClass = function untrackClass(classListRef, poll, classes) {\n  classes.forEach(function (className) {\n    decrementReference(poll, className);\n    poll[className] === 0 && classListRef.remove(className);\n  });\n};\n\n/**\n * Public inferface to add classes to the document.body.\n * @param {string} bodyClass The class string to be added.\n *                           It may contain more then one class\n *                           with ' ' as separator.\n */\nvar add = exports.add = function add(element, classString) {\n  return trackClass(element.classList, element.nodeName.toLowerCase() == \"html\" ? htmlClassList : docBodyClassList, classString.split(\" \"));\n};\n\n/**\n * Public inferface to remove classes from the document.body.\n * @param {string} bodyClass The class string to be added.\n *                           It may contain more then one class\n *                           with ' ' as separator.\n */\nvar remove = exports.remove = function remove(element, classString) {\n  return untrackClass(element.classList, element.nodeName.toLowerCase() == \"html\" ? htmlClassList : docBodyClassList, classString.split(\" \"));\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.resetState = resetState;\nexports.log = log;\nexports.handleBlur = handleBlur;\nexports.handleFocus = handleFocus;\nexports.markForFocusLater = markForFocusLater;\nexports.returnFocus = returnFocus;\nexports.popWithoutFocus = popWithoutFocus;\nexports.setupScopedFocus = setupScopedFocus;\nexports.teardownScopedFocus = teardownScopedFocus;\n\nvar _tabbable = require(\"../helpers/tabbable\");\n\nvar _tabbable2 = _interopRequireDefault(_tabbable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar focusLaterElements = [];\nvar modalElement = null;\nvar needToFocus = false;\n\n/* eslint-disable no-console */\n/* istanbul ignore next */\nfunction resetState() {\n  focusLaterElements = [];\n}\n\n/* istanbul ignore next */\nfunction log() {\n  if (process.env.NODE_ENV !== \"production\") {\n    console.log(\"focusManager ----------\");\n    focusLaterElements.forEach(function (f) {\n      var check = f || {};\n      console.log(check.nodeName, check.className, check.id);\n    });\n    console.log(\"end focusManager ----------\");\n  }\n}\n/* eslint-enable no-console */\n\nfunction handleBlur() {\n  needToFocus = true;\n}\n\nfunction handleFocus() {\n  if (needToFocus) {\n    needToFocus = false;\n    if (!modalElement) {\n      return;\n    }\n    // need to see how jQuery shims document.on('focusin') so we don't need the\n    // setTimeout, firefox doesn't support focusin, if it did, we could focus\n    // the element outside of a setTimeout. Side-effect of this implementation\n    // is that the document.body gets focus, and then we focus our element right\n    // after, seems fine.\n    setTimeout(function () {\n      if (modalElement.contains(document.activeElement)) {\n        return;\n      }\n      var el = (0, _tabbable2.default)(modalElement)[0] || modalElement;\n      el.focus();\n    }, 0);\n  }\n}\n\nfunction markForFocusLater() {\n  focusLaterElements.push(document.activeElement);\n}\n\n/* eslint-disable no-console */\nfunction returnFocus() {\n  var preventScroll = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n  var toFocus = null;\n  try {\n    if (focusLaterElements.length !== 0) {\n      toFocus = focusLaterElements.pop();\n      toFocus.focus({ preventScroll: preventScroll });\n    }\n    return;\n  } catch (e) {\n    console.warn([\"You tried to return focus to\", toFocus, \"but it is not in the DOM anymore\"].join(\" \"));\n  }\n}\n/* eslint-enable no-console */\n\nfunction popWithoutFocus() {\n  focusLaterElements.length > 0 && focusLaterElements.pop();\n}\n\nfunction setupScopedFocus(element) {\n  modalElement = element;\n\n  if (window.addEventListener) {\n    window.addEventListener(\"blur\", handleBlur, false);\n    document.addEventListener(\"focus\", handleFocus, true);\n  } else {\n    window.attachEvent(\"onBlur\", handleBlur);\n    document.attachEvent(\"onFocus\", handleFocus);\n  }\n}\n\nfunction teardownScopedFocus() {\n  modalElement = null;\n\n  if (window.addEventListener) {\n    window.removeEventListener(\"blur\", handleBlur);\n    document.removeEventListener(\"focus\", handleFocus);\n  } else {\n    window.detachEvent(\"onBlur\", handleBlur);\n    document.detachEvent(\"onFocus\", handleFocus);\n  }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.log = log;\nexports.resetState = resetState;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// Tracks portals that are open and emits events to subscribers\n\nvar PortalOpenInstances = function PortalOpenInstances() {\n  var _this = this;\n\n  _classCallCheck(this, PortalOpenInstances);\n\n  this.register = function (openInstance) {\n    if (_this.openInstances.indexOf(openInstance) !== -1) {\n      if (process.env.NODE_ENV !== \"production\") {\n        // eslint-disable-next-line no-console\n        console.warn(\"React-Modal: Cannot register modal instance that's already open\");\n      }\n      return;\n    }\n    _this.openInstances.push(openInstance);\n    _this.emit(\"register\");\n  };\n\n  this.deregister = function (openInstance) {\n    var index = _this.openInstances.indexOf(openInstance);\n    if (index === -1) {\n      if (process.env.NODE_ENV !== \"production\") {\n        // eslint-disable-next-line no-console\n        console.warn(\"React-Modal: Unable to deregister \" + openInstance + \" as \" + \"it was never registered\");\n      }\n      return;\n    }\n    _this.openInstances.splice(index, 1);\n    _this.emit(\"deregister\");\n  };\n\n  this.subscribe = function (callback) {\n    _this.subscribers.push(callback);\n  };\n\n  this.emit = function (eventType) {\n    _this.subscribers.forEach(function (subscriber) {\n      return subscriber(eventType,\n      // shallow copy to avoid accidental mutation\n      _this.openInstances.slice());\n    });\n  };\n\n  this.openInstances = [];\n  this.subscribers = [];\n};\n\nvar portalOpenInstances = new PortalOpenInstances();\n\n/* eslint-disable no-console */\n/* istanbul ignore next */\nfunction log() {\n  console.log(\"portalOpenInstances ----------\");\n  console.log(portalOpenInstances.openInstances.length);\n  portalOpenInstances.openInstances.forEach(function (p) {\n    return console.log(p);\n  });\n  console.log(\"end portalOpenInstances ----------\");\n}\n\n/* istanbul ignore next */\nfunction resetState() {\n  portalOpenInstances = new PortalOpenInstances();\n}\n/* eslint-enable no-console */\n\nexports.default = portalOpenInstances;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.canUseDOM = exports.SafeNodeList = exports.SafeHTMLCollection = undefined;\n\nvar _exenv = require(\"exenv\");\n\nvar _exenv2 = _interopRequireDefault(_exenv);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar EE = _exenv2.default;\n\nvar SafeHTMLElement = EE.canUseDOM ? window.HTMLElement : {};\n\nvar SafeHTMLCollection = exports.SafeHTMLCollection = EE.canUseDOM ? window.HTMLCollection : {};\n\nvar SafeNodeList = exports.SafeNodeList = EE.canUseDOM ? window.NodeList : {};\n\nvar canUseDOM = exports.canUseDOM = EE.canUseDOM;\n\nexports.default = SafeHTMLElement;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = scopeTab;\n\nvar _tabbable = require(\"./tabbable\");\n\nvar _tabbable2 = _interopRequireDefault(_tabbable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getActiveElement() {\n  var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;\n\n  return el.activeElement.shadowRoot ? getActiveElement(el.activeElement.shadowRoot) : el.activeElement;\n}\n\nfunction scopeTab(node, event) {\n  var tabbable = (0, _tabbable2.default)(node);\n\n  if (!tabbable.length) {\n    // Do nothing, since there are no elements that can receive focus.\n    event.preventDefault();\n    return;\n  }\n\n  var target = void 0;\n\n  var shiftKey = event.shiftKey;\n  var head = tabbable[0];\n  var tail = tabbable[tabbable.length - 1];\n  var activeElement = getActiveElement();\n\n  // proceed with default browser behavior on tab.\n  // Focus on last element on shift + tab.\n  if (node === activeElement) {\n    if (!shiftKey) return;\n    target = tail;\n  }\n\n  if (tail === activeElement && !shiftKey) {\n    target = head;\n  }\n\n  if (head === activeElement && shiftKey) {\n    target = tail;\n  }\n\n  if (target) {\n    event.preventDefault();\n    target.focus();\n    return;\n  }\n\n  // Safari radio issue.\n  //\n  // Safari does not move the focus to the radio button,\n  // so we need to force it to really walk through all elements.\n  //\n  // This is very error prone, since we are trying to guess\n  // if it is a safari browser from the first occurence between\n  // chrome or safari.\n  //\n  // The chrome user agent contains the first ocurrence\n  // as the 'chrome/version' and later the 'safari/version'.\n  var checkSafari = /(\\bChrome\\b|\\bSafari\\b)\\//.exec(navigator.userAgent);\n  var isSafariDesktop = checkSafari != null && checkSafari[1] != \"Chrome\" && /\\biPod\\b|\\biPad\\b/g.exec(navigator.userAgent) == null;\n\n  // If we are not in safari desktop, let the browser control\n  // the focus\n  if (!isSafariDesktop) return;\n\n  var x = tabbable.indexOf(activeElement);\n\n  if (x > -1) {\n    x += shiftKey ? -1 : 1;\n  }\n\n  target = tabbable[x];\n\n  // If the tabbable element does not exist,\n  // focus head/tail based on shiftKey\n  if (typeof target === \"undefined\") {\n    event.preventDefault();\n    target = shiftKey ? tail : head;\n    target.focus();\n    return;\n  }\n\n  event.preventDefault();\n\n  target.focus();\n}\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = findTabbableDescendants;\n/*!\n * Adapted from jQuery UI core\n *\n * http://jqueryui.com\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/ui-core/\n */\n\nvar tabbableNode = /input|select|textarea|button|object|iframe/;\n\nfunction hidesContents(element) {\n  var zeroSize = element.offsetWidth <= 0 && element.offsetHeight <= 0;\n\n  // If the node is empty, this is good enough\n  if (zeroSize && !element.innerHTML) return true;\n\n  try {\n    // Otherwise we need to check some styles\n    var style = window.getComputedStyle(element);\n    return zeroSize ? style.getPropertyValue(\"overflow\") !== \"visible\" ||\n    // if 'overflow: visible' set, check if there is actually any overflow\n    element.scrollWidth <= 0 && element.scrollHeight <= 0 : style.getPropertyValue(\"display\") == \"none\";\n  } catch (exception) {\n    // eslint-disable-next-line no-console\n    console.warn(\"Failed to inspect element style\");\n    return false;\n  }\n}\n\nfunction visible(element) {\n  var parentElement = element;\n  var rootNode = element.getRootNode && element.getRootNode();\n  while (parentElement) {\n    if (parentElement === document.body) break;\n\n    // if we are not hidden yet, skip to checking outside the Web Component\n    if (rootNode && parentElement === rootNode) parentElement = rootNode.host.parentNode;\n\n    if (hidesContents(parentElement)) return false;\n    parentElement = parentElement.parentNode;\n  }\n  return true;\n}\n\nfunction focusable(element, isTabIndexNotNaN) {\n  var nodeName = element.nodeName.toLowerCase();\n  var res = tabbableNode.test(nodeName) && !element.disabled || (nodeName === \"a\" ? element.href || isTabIndexNotNaN : isTabIndexNotNaN);\n  return res && visible(element);\n}\n\nfunction tabbable(element) {\n  var tabIndex = element.getAttribute(\"tabindex\");\n  if (tabIndex === null) tabIndex = undefined;\n  var isTabIndexNaN = isNaN(tabIndex);\n  return (isTabIndexNaN || tabIndex >= 0) && focusable(element, !isTabIndexNaN);\n}\n\nfunction findTabbableDescendants(element) {\n  var descendants = [].slice.call(element.querySelectorAll(\"*\"), 0).reduce(function (finished, el) {\n    return finished.concat(!el.shadowRoot ? [el] : findTabbableDescendants(el.shadowRoot));\n  }, []);\n  return descendants.filter(tabbable);\n}\nmodule.exports = exports[\"default\"];","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _Modal = require(\"./components/Modal\");\n\nvar _Modal2 = _interopRequireDefault(_Modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = _Modal2.default;\nmodule.exports = exports[\"default\"];","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\n\nvar warning = function() {};\n\nif (__DEV__) {\n  var printWarning = function printWarning(format, args) {\n    var len = arguments.length;\n    args = new Array(len > 1 ? len - 1 : 0);\n    for (var key = 1; key < len; key++) {\n      args[key - 1] = arguments[key];\n    }\n    var argIndex = 0;\n    var message = 'Warning: ' +\n      format.replace(/%s/g, function() {\n        return args[argIndex++];\n      });\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  }\n\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n          '`warning(condition, format, ...args)` requires a warning ' +\n          'message argument'\n      );\n    }\n    if (!condition) {\n      printWarning.apply(null, [format].concat(args));\n    }\n  };\n}\n\nmodule.exports = warning;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _props = require(\"./props\");\n\nvar _utils = require(\"./utils\");\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SEEK_ON_PLAY_EXPIRY = 5000;\n\nvar Player = /*#__PURE__*/function (_Component) {\n  _inherits(Player, _Component);\n\n  var _super = _createSuper(Player);\n\n  function Player() {\n    var _this;\n\n    _classCallCheck(this, Player);\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(_args));\n\n    _defineProperty(_assertThisInitialized(_this), \"mounted\", false);\n\n    _defineProperty(_assertThisInitialized(_this), \"isReady\", false);\n\n    _defineProperty(_assertThisInitialized(_this), \"isPlaying\", false);\n\n    _defineProperty(_assertThisInitialized(_this), \"isLoading\", true);\n\n    _defineProperty(_assertThisInitialized(_this), \"loadOnReady\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"startOnPlay\", true);\n\n    _defineProperty(_assertThisInitialized(_this), \"seekOnPlay\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"onDurationCalled\", false);\n\n    _defineProperty(_assertThisInitialized(_this), \"getInternalPlayer\", function (key) {\n      if (!_this.player) return null;\n      return _this.player[key];\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"progress\", function () {\n      if (_this.props.url && _this.player && _this.isReady) {\n        var playedSeconds = _this.getCurrentTime() || 0;\n\n        var loadedSeconds = _this.getSecondsLoaded();\n\n        var duration = _this.getDuration();\n\n        if (duration) {\n          var progress = {\n            playedSeconds: playedSeconds,\n            played: playedSeconds / duration\n          };\n\n          if (loadedSeconds !== null) {\n            progress.loadedSeconds = loadedSeconds;\n            progress.loaded = loadedSeconds / duration;\n          } // Only call onProgress if values have changed\n\n\n          if (progress.playedSeconds !== _this.prevPlayed || progress.loadedSeconds !== _this.prevLoaded) {\n            _this.props.onProgress(progress);\n          }\n\n          _this.prevPlayed = progress.playedSeconds;\n          _this.prevLoaded = progress.loadedSeconds;\n        }\n      }\n\n      _this.progressTimeout = setTimeout(_this.progress, _this.props.progressFrequency || _this.props.progressInterval);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleReady\", function () {\n      if (!_this.mounted) return;\n      _this.isReady = true;\n      _this.isLoading = false;\n      var _this$props = _this.props,\n          onReady = _this$props.onReady,\n          playing = _this$props.playing,\n          volume = _this$props.volume,\n          muted = _this$props.muted;\n      onReady();\n\n      if (!muted && volume !== null) {\n        _this.player.setVolume(volume);\n      }\n\n      if (_this.loadOnReady) {\n        _this.player.load(_this.loadOnReady, true);\n\n        _this.loadOnReady = null;\n      } else if (playing) {\n        _this.player.play();\n      }\n\n      _this.handleDurationCheck();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handlePlay\", function () {\n      _this.isPlaying = true;\n      _this.isLoading = false;\n      var _this$props2 = _this.props,\n          onStart = _this$props2.onStart,\n          onPlay = _this$props2.onPlay,\n          playbackRate = _this$props2.playbackRate;\n\n      if (_this.startOnPlay) {\n        if (_this.player.setPlaybackRate && playbackRate !== 1) {\n          _this.player.setPlaybackRate(playbackRate);\n        }\n\n        onStart();\n        _this.startOnPlay = false;\n      }\n\n      onPlay();\n\n      if (_this.seekOnPlay) {\n        _this.seekTo(_this.seekOnPlay);\n\n        _this.seekOnPlay = null;\n      }\n\n      _this.handleDurationCheck();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handlePause\", function (e) {\n      _this.isPlaying = false;\n\n      if (!_this.isLoading) {\n        _this.props.onPause(e);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleEnded\", function () {\n      var _this$props3 = _this.props,\n          activePlayer = _this$props3.activePlayer,\n          loop = _this$props3.loop,\n          onEnded = _this$props3.onEnded;\n\n      if (activePlayer.loopOnEnded && loop) {\n        _this.seekTo(0);\n      }\n\n      if (!loop) {\n        _this.isPlaying = false;\n        onEnded();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleError\", function () {\n      var _this$props4;\n\n      _this.isLoading = false;\n\n      (_this$props4 = _this.props).onError.apply(_this$props4, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleDurationCheck\", function () {\n      clearTimeout(_this.durationCheckTimeout);\n\n      var duration = _this.getDuration();\n\n      if (duration) {\n        if (!_this.onDurationCalled) {\n          _this.props.onDuration(duration);\n\n          _this.onDurationCalled = true;\n        }\n      } else {\n        _this.durationCheckTimeout = setTimeout(_this.handleDurationCheck, 100);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleLoaded\", function () {\n      // Sometimes we know loading has stopped but onReady/onPlay are never called\n      // so this provides a way for players to avoid getting stuck\n      _this.isLoading = false;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"ref\", function (player) {\n      if (player) {\n        _this.player = player;\n      }\n    });\n\n    return _this;\n  }\n\n  _createClass(Player, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.mounted = true;\n      this.player.load(this.props.url);\n      this.progress();\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      clearTimeout(this.progressTimeout);\n      clearTimeout(this.durationCheckTimeout);\n\n      if (this.isReady) {\n        this.player.stop();\n      }\n\n      if (this.player.disablePIP) {\n        this.player.disablePIP();\n      }\n\n      this.mounted = false;\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var _this2 = this;\n\n      // Invoke player methods based on changed props\n      var _this$props5 = this.props,\n          url = _this$props5.url,\n          playing = _this$props5.playing,\n          volume = _this$props5.volume,\n          muted = _this$props5.muted,\n          playbackRate = _this$props5.playbackRate,\n          pip = _this$props5.pip,\n          loop = _this$props5.loop,\n          activePlayer = _this$props5.activePlayer;\n\n      if (!(0, _utils.isEqual)(prevProps.url, url)) {\n        if (this.isLoading && !activePlayer.forceLoad) {\n          console.warn(\"ReactPlayer: the attempt to load \".concat(url, \" is being deferred until the player has loaded\"));\n          this.loadOnReady = url;\n          return;\n        }\n\n        this.isLoading = true;\n        this.startOnPlay = true;\n        this.onDurationCalled = false;\n        this.player.load(url, this.isReady);\n      }\n\n      if (!prevProps.playing && playing && !this.isPlaying) {\n        this.player.play();\n      }\n\n      if (prevProps.playing && !playing && this.isPlaying) {\n        this.player.pause();\n      }\n\n      if (!prevProps.pip && pip && this.player.enablePIP) {\n        this.player.enablePIP();\n      }\n\n      if (prevProps.pip && !pip && this.player.disablePIP) {\n        this.player.disablePIP();\n      }\n\n      if (prevProps.volume !== volume && volume !== null) {\n        this.player.setVolume(volume);\n      }\n\n      if (prevProps.muted !== muted) {\n        if (muted) {\n          this.player.mute();\n        } else {\n          this.player.unmute();\n\n          if (volume !== null) {\n            // Set volume next tick to fix a bug with DailyMotion\n            setTimeout(function () {\n              return _this2.player.setVolume(volume);\n            });\n          }\n        }\n      }\n\n      if (prevProps.playbackRate !== playbackRate && this.player.setPlaybackRate) {\n        this.player.setPlaybackRate(playbackRate);\n      }\n\n      if (prevProps.loop !== loop && this.player.setLoop) {\n        this.player.setLoop(loop);\n      }\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      if (!this.isReady) return null;\n      return this.player.getDuration();\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      if (!this.isReady) return null;\n      return this.player.getCurrentTime();\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      if (!this.isReady) return null;\n      return this.player.getSecondsLoaded();\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(amount, type) {\n      var _this3 = this;\n\n      // When seeking before player is ready, store value and seek later\n      if (!this.isReady && amount !== 0) {\n        this.seekOnPlay = amount;\n        setTimeout(function () {\n          _this3.seekOnPlay = null;\n        }, SEEK_ON_PLAY_EXPIRY);\n        return;\n      }\n\n      var isFraction = !type ? amount > 0 && amount < 1 : type === 'fraction';\n\n      if (isFraction) {\n        // Convert fraction to seconds based on duration\n        var duration = this.player.getDuration();\n\n        if (!duration) {\n          console.warn('ReactPlayer: could not seek using fraction – duration not yet available');\n          return;\n        }\n\n        this.player.seekTo(duration * amount);\n        return;\n      }\n\n      this.player.seekTo(amount);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var Player = this.props.activePlayer;\n\n      if (!Player) {\n        return null;\n      }\n\n      return /*#__PURE__*/_react[\"default\"].createElement(Player, _extends({}, this.props, {\n        ref: this.ref,\n        onReady: this.handleReady,\n        onPlay: this.handlePlay,\n        onPause: this.handlePause,\n        onEnded: this.handleEnded,\n        onLoaded: this.handleLoaded,\n        onError: this.handleError\n      }));\n    }\n  }]);\n\n  return Player;\n}(_react.Component);\n\nexports[\"default\"] = Player;\n\n_defineProperty(Player, \"displayName\", 'Player');\n\n_defineProperty(Player, \"propTypes\", _props.propTypes);\n\n_defineProperty(Player, \"defaultProps\", _props.defaultProps);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar ICON_SIZE = '64px';\n\nvar Preview = /*#__PURE__*/function (_Component) {\n  _inherits(Preview, _Component);\n\n  var _super = _createSuper(Preview);\n\n  function Preview() {\n    var _this;\n\n    _classCallCheck(this, Preview);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"mounted\", false);\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      image: null\n    });\n\n    return _this;\n  }\n\n  _createClass(Preview, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.mounted = true;\n      this.fetchImage(this.props);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var _this$props = this.props,\n          url = _this$props.url,\n          light = _this$props.light;\n\n      if (prevProps.url !== url || prevProps.light !== light) {\n        this.fetchImage(this.props);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.mounted = false;\n    }\n  }, {\n    key: \"fetchImage\",\n    value: function fetchImage(_ref) {\n      var _this2 = this;\n\n      var url = _ref.url,\n          light = _ref.light;\n\n      if (typeof light === 'string') {\n        this.setState({\n          image: light\n        });\n        return;\n      }\n\n      this.setState({\n        image: null\n      });\n      return window.fetch(\"https://noembed.com/embed?url=\".concat(url)).then(function (response) {\n        return response.json();\n      }).then(function (data) {\n        if (data.thumbnail_url && _this2.mounted) {\n          var image = data.thumbnail_url.replace('height=100', 'height=480');\n\n          _this2.setState({\n            image: image\n          });\n        }\n      });\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props2 = this.props,\n          onClick = _this$props2.onClick,\n          playIcon = _this$props2.playIcon;\n      var image = this.state.image;\n      var flexCenter = {\n        display: 'flex',\n        alignItems: 'center',\n        justifyContent: 'center'\n      };\n      var styles = {\n        preview: _objectSpread({\n          width: '100%',\n          height: '100%',\n          backgroundImage: image ? \"url(\".concat(image, \")\") : undefined,\n          backgroundSize: 'cover',\n          backgroundPosition: 'center',\n          cursor: 'pointer'\n        }, flexCenter),\n        shadow: _objectSpread({\n          background: 'radial-gradient(rgb(0, 0, 0, 0.3), rgba(0, 0, 0, 0) 60%)',\n          borderRadius: ICON_SIZE,\n          width: ICON_SIZE,\n          height: ICON_SIZE\n        }, flexCenter),\n        playIcon: {\n          borderStyle: 'solid',\n          borderWidth: '16px 0 16px 26px',\n          borderColor: 'transparent transparent transparent white',\n          marginLeft: '7px'\n        }\n      };\n\n      var defaultPlayIcon = /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        style: styles.shadow,\n        className: \"react-player__shadow\"\n      }, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        style: styles.playIcon,\n        className: \"react-player__play-icon\"\n      }));\n\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        style: styles.preview,\n        className: \"react-player__preview\",\n        onClick: onClick\n      }, playIcon || defaultPlayIcon);\n    }\n  }]);\n\n  return Preview;\n}(_react.Component);\n\nexports[\"default\"] = Preview;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nObject.defineProperty(exports, \"FilePlayer\", {\n  enumerable: true,\n  get: function get() {\n    return _FilePlayer[\"default\"];\n  }\n});\nObject.defineProperty(exports, \"YouTube\", {\n  enumerable: true,\n  get: function get() {\n    return _YouTube[\"default\"];\n  }\n});\nObject.defineProperty(exports, \"SoundCloud\", {\n  enumerable: true,\n  get: function get() {\n    return _SoundCloud[\"default\"];\n  }\n});\nObject.defineProperty(exports, \"Vimeo\", {\n  enumerable: true,\n  get: function get() {\n    return _Vimeo[\"default\"];\n  }\n});\nObject.defineProperty(exports, \"Facebook\", {\n  enumerable: true,\n  get: function get() {\n    return _Facebook[\"default\"];\n  }\n});\nObject.defineProperty(exports, \"Streamable\", {\n  enumerable: true,\n  get: function get() {\n    return _Streamable[\"default\"];\n  }\n});\nObject.defineProperty(exports, \"Wistia\", {\n  enumerable: true,\n  get: function get() {\n    return _Wistia[\"default\"];\n  }\n});\nObject.defineProperty(exports, \"Twitch\", {\n  enumerable: true,\n  get: function get() {\n    return _Twitch[\"default\"];\n  }\n});\nObject.defineProperty(exports, \"DailyMotion\", {\n  enumerable: true,\n  get: function get() {\n    return _DailyMotion[\"default\"];\n  }\n});\nObject.defineProperty(exports, \"Mixcloud\", {\n  enumerable: true,\n  get: function get() {\n    return _Mixcloud[\"default\"];\n  }\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _props = require(\"./props\");\n\nvar _utils = require(\"./utils\");\n\nvar _players = _interopRequireDefault(require(\"./players\"));\n\nvar _Player4 = _interopRequireDefault(require(\"./Player\"));\n\nvar _Preview = _interopRequireDefault(require(\"./Preview\"));\n\nvar _FilePlayer = _interopRequireWildcard(require(\"./players/FilePlayer\"));\n\nvar _preload = _interopRequireDefault(require(\"./preload\"));\n\nvar _YouTube = _interopRequireDefault(require(\"./players/YouTube\"));\n\nvar _SoundCloud = _interopRequireDefault(require(\"./players/SoundCloud\"));\n\nvar _Vimeo = _interopRequireDefault(require(\"./players/Vimeo\"));\n\nvar _Facebook = _interopRequireDefault(require(\"./players/Facebook\"));\n\nvar _Streamable = _interopRequireDefault(require(\"./players/Streamable\"));\n\nvar _Wistia = _interopRequireDefault(require(\"./players/Wistia\"));\n\nvar _Twitch = _interopRequireDefault(require(\"./players/Twitch\"));\n\nvar _DailyMotion = _interopRequireDefault(require(\"./players/DailyMotion\"));\n\nvar _Mixcloud = _interopRequireDefault(require(\"./players/Mixcloud\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SUPPORTED_PROPS = Object.keys(_props.propTypes);\nvar customPlayers = [];\n\nvar ReactPlayer = /*#__PURE__*/function (_Component) {\n  _inherits(ReactPlayer, _Component);\n\n  var _super = _createSuper(ReactPlayer);\n\n  function ReactPlayer() {\n    var _this;\n\n    _classCallCheck(this, ReactPlayer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"config\", (0, _utils.getConfig)(_this.props, _props.defaultProps, true));\n\n    _defineProperty(_assertThisInitialized(_this), \"state\", {\n      showPreview: !!_this.props.light\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleClickPreview\", function () {\n      _this.setState({\n        showPreview: false\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"showPreview\", function () {\n      _this.setState({\n        showPreview: true\n      });\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getDuration\", function () {\n      if (!_this.player) return null;\n      return _this.player.getDuration();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getCurrentTime\", function () {\n      if (!_this.player) return null;\n      return _this.player.getCurrentTime();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getSecondsLoaded\", function () {\n      if (!_this.player) return null;\n      return _this.player.getSecondsLoaded();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"getInternalPlayer\", function () {\n      var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'player';\n      if (!_this.player) return null;\n      return _this.player.getInternalPlayer(key);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"seekTo\", function (fraction, type) {\n      if (!_this.player) return null;\n\n      _this.player.seekTo(fraction, type);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"handleReady\", function () {\n      _this.props.onReady(_assertThisInitialized(_this));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"wrapperRef\", function (wrapper) {\n      _this.wrapper = wrapper;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"activePlayerRef\", function (player) {\n      _this.player = player;\n    });\n\n    return _this;\n  }\n\n  _createClass(ReactPlayer, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      if (this.props.progressFrequency) {\n        var message = 'ReactPlayer: %cprogressFrequency%c is deprecated, please use %cprogressInterval%c instead';\n        console.warn(message, 'font-weight: bold', '', 'font-weight: bold', '');\n      }\n    }\n  }, {\n    key: \"shouldComponentUpdate\",\n    value: function shouldComponentUpdate(nextProps, nextState) {\n      return !(0, _utils.isEqual)(this.props, nextProps) || !(0, _utils.isEqual)(this.state, nextState);\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var light = this.props.light;\n      this.config = (0, _utils.getConfig)(this.props, _props.defaultProps);\n\n      if (!prevProps.light && light) {\n        this.setState({\n          showPreview: true\n        });\n      }\n\n      if (prevProps.light && !light) {\n        this.setState({\n          showPreview: false\n        });\n      }\n    }\n  }, {\n    key: \"getActivePlayer\",\n    value: function getActivePlayer(url) {\n      for (var _i = 0, _arr = [].concat(_toConsumableArray(customPlayers), _toConsumableArray(_players[\"default\"])); _i < _arr.length; _i++) {\n        var _Player = _arr[_i];\n\n        if (_Player.canPlay(url)) {\n          return _Player;\n        }\n      } // Fall back to FilePlayer if nothing else can play the URL\n\n\n      return _FilePlayer.FilePlayer;\n    }\n  }, {\n    key: \"renderActivePlayer\",\n    value: function renderActivePlayer(url, activePlayer) {\n      if (!url) return null;\n      return /*#__PURE__*/_react[\"default\"].createElement(_Player4[\"default\"], _extends({}, this.props, {\n        key: activePlayer.displayName,\n        ref: this.activePlayerRef,\n        config: this.config,\n        activePlayer: activePlayer,\n        onReady: this.handleReady\n      }));\n    }\n  }, {\n    key: \"sortPlayers\",\n    value: function sortPlayers(a, b) {\n      // Retain player order to prevent weird iframe behaviour when switching players\n      if (a && b) {\n        return a.key < b.key ? -1 : 1;\n      }\n\n      return 0;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          url = _this$props.url,\n          controls = _this$props.controls,\n          style = _this$props.style,\n          width = _this$props.width,\n          height = _this$props.height,\n          light = _this$props.light,\n          playIcon = _this$props.playIcon,\n          Wrapper = _this$props.wrapper;\n      var showPreview = this.state.showPreview && url;\n      var otherProps = (0, _utils.omit)(this.props, SUPPORTED_PROPS, _props.DEPRECATED_CONFIG_PROPS);\n      var activePlayer = this.getActivePlayer(url);\n      var renderedActivePlayer = this.renderActivePlayer(url, activePlayer);\n      var preloadPlayers = (0, _preload[\"default\"])(url, controls, this.config);\n      var players = [renderedActivePlayer].concat(_toConsumableArray(preloadPlayers)).sort(this.sortPlayers);\n\n      var preview = /*#__PURE__*/_react[\"default\"].createElement(_Preview[\"default\"], {\n        url: url,\n        light: light,\n        playIcon: playIcon,\n        onClick: this.handleClickPreview\n      });\n\n      return /*#__PURE__*/_react[\"default\"].createElement(Wrapper, _extends({\n        ref: this.wrapperRef,\n        style: _objectSpread({}, style, {\n          width: width,\n          height: height\n        })\n      }, otherProps), showPreview ? preview : players);\n    }\n  }]);\n\n  return ReactPlayer;\n}(_react.Component);\n\nexports[\"default\"] = ReactPlayer;\n\n_defineProperty(ReactPlayer, \"addCustomPlayer\", function (player) {\n  customPlayers.push(player);\n});\n\n_defineProperty(ReactPlayer, \"removeCustomPlayers\", function () {\n  customPlayers = [];\n});\n\n_defineProperty(ReactPlayer, \"displayName\", 'ReactPlayer');\n\n_defineProperty(ReactPlayer, \"propTypes\", _props.propTypes);\n\n_defineProperty(ReactPlayer, \"defaultProps\", _props.defaultProps);\n\n_defineProperty(ReactPlayer, \"canPlay\", function (url) {\n  for (var _i2 = 0, _arr2 = [].concat(_toConsumableArray(customPlayers), _toConsumableArray(_players[\"default\"])); _i2 < _arr2.length; _i2++) {\n    var _Player2 = _arr2[_i2];\n\n    if (_Player2.canPlay(url)) {\n      return true;\n    }\n  }\n\n  return false;\n});\n\n_defineProperty(ReactPlayer, \"canEnablePIP\", function (url) {\n  for (var _i3 = 0, _arr3 = [].concat(_toConsumableArray(customPlayers), _toConsumableArray(_players[\"default\"])); _i3 < _arr3.length; _i3++) {\n    var _Player3 = _arr3[_i3];\n\n    if (_Player3.canEnablePIP && _Player3.canEnablePIP(url)) {\n      return true;\n    }\n  }\n\n  return false;\n});","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.DailyMotion = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _utils = require(\"../utils\");\n\nvar _singlePlayer = _interopRequireDefault(require(\"../singlePlayer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SDK_URL = 'https://api.dmcdn.net/all.js';\nvar SDK_GLOBAL = 'DM';\nvar SDK_GLOBAL_READY = 'dmAsyncInit';\nvar MATCH_URL = /^(?:(?:https?):)?(?:\\/\\/)?(?:www\\.)?(?:(?:dailymotion\\.com(?:\\/embed)?\\/video)|dai\\.ly)\\/([a-zA-Z0-9]+)(?:_[\\w_-]+)?$/;\n\nvar DailyMotion = /*#__PURE__*/function (_Component) {\n  _inherits(DailyMotion, _Component);\n\n  var _super = _createSuper(DailyMotion);\n\n  function DailyMotion() {\n    var _this;\n\n    _classCallCheck(this, DailyMotion);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"callPlayer\", _utils.callPlayer);\n\n    _defineProperty(_assertThisInitialized(_this), \"onDurationChange\", function () {\n      var duration = _this.getDuration();\n\n      _this.props.onDuration(duration);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"mute\", function () {\n      _this.callPlayer('setMuted', true);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unmute\", function () {\n      _this.callPlayer('setMuted', false);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"ref\", function (container) {\n      _this.container = container;\n    });\n\n    return _this;\n  }\n\n  _createClass(DailyMotion, [{\n    key: \"load\",\n    value: function load(url) {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          controls = _this$props.controls,\n          config = _this$props.config,\n          onError = _this$props.onError,\n          playing = _this$props.playing;\n\n      var _url$match = url.match(MATCH_URL),\n          _url$match2 = _slicedToArray(_url$match, 2),\n          id = _url$match2[1];\n\n      if (this.player) {\n        this.player.load(id, {\n          start: (0, _utils.parseStartTime)(url),\n          autoplay: playing\n        });\n        return;\n      }\n\n      (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, function (DM) {\n        return DM.player;\n      }).then(function (DM) {\n        if (!_this2.container) return;\n        var Player = DM.player;\n        _this2.player = new Player(_this2.container, {\n          width: '100%',\n          height: '100%',\n          video: id,\n          params: _objectSpread({\n            controls: controls,\n            autoplay: _this2.props.playing,\n            mute: _this2.props.muted,\n            start: (0, _utils.parseStartTime)(url),\n            origin: window.location.origin\n          }, config.dailymotion.params),\n          events: {\n            apiready: _this2.props.onReady,\n            seeked: function seeked() {\n              return _this2.props.onSeek(_this2.player.currentTime);\n            },\n            video_end: _this2.props.onEnded,\n            durationchange: _this2.onDurationChange,\n            pause: _this2.props.onPause,\n            playing: _this2.props.onPlay,\n            waiting: _this2.props.onBuffer,\n            error: function error(event) {\n              return onError(event);\n            }\n          }\n        });\n      }, onError);\n    }\n  }, {\n    key: \"play\",\n    value: function play() {\n      this.callPlayer('play');\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.callPlayer('pause');\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {// Nothing to do\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(seconds) {\n      this.callPlayer('seek', seconds);\n    }\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(fraction) {\n      this.callPlayer('setVolume', fraction);\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      return this.player.duration || null;\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.player.currentTime;\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      return this.player.bufferedTime;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var display = this.props.display;\n      var style = {\n        width: '100%',\n        height: '100%',\n        display: display\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        style: style\n      }, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        ref: this.ref\n      }));\n    }\n  }]);\n\n  return DailyMotion;\n}(_react.Component);\n\nexports.DailyMotion = DailyMotion;\n\n_defineProperty(DailyMotion, \"displayName\", 'DailyMotion');\n\n_defineProperty(DailyMotion, \"canPlay\", function (url) {\n  return MATCH_URL.test(url);\n});\n\n_defineProperty(DailyMotion, \"loopOnEnded\", true);\n\nvar _default = (0, _singlePlayer[\"default\"])(DailyMotion);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.Facebook = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _utils = require(\"../utils\");\n\nvar _singlePlayer = _interopRequireDefault(require(\"../singlePlayer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SDK_URL = 'https://connect.facebook.net/en_US/sdk.js';\nvar SDK_GLOBAL = 'FB';\nvar SDK_GLOBAL_READY = 'fbAsyncInit';\nvar MATCH_URL = /^https?:\\/\\/(www\\.)?facebook\\.com.*\\/(video(s)?|watch|story)(\\.php?|\\/).+$/;\nvar PLAYER_ID_PREFIX = 'facebook-player-';\n\nvar Facebook = /*#__PURE__*/function (_Component) {\n  _inherits(Facebook, _Component);\n\n  var _super = _createSuper(Facebook);\n\n  function Facebook() {\n    var _this;\n\n    _classCallCheck(this, Facebook);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"callPlayer\", _utils.callPlayer);\n\n    _defineProperty(_assertThisInitialized(_this), \"playerID\", _this.props.config.facebook.playerId || \"\".concat(PLAYER_ID_PREFIX).concat((0, _utils.randomString)()));\n\n    _defineProperty(_assertThisInitialized(_this), \"mute\", function () {\n      _this.callPlayer('mute');\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unmute\", function () {\n      _this.callPlayer('unmute');\n    });\n\n    return _this;\n  }\n\n  _createClass(Facebook, [{\n    key: \"load\",\n    value: function load(url, isReady) {\n      var _this2 = this;\n\n      if (isReady) {\n        (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(function (FB) {\n          return FB.XFBML.parse();\n        });\n        return;\n      }\n\n      (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(function (FB) {\n        FB.init({\n          appId: _this2.props.config.facebook.appId,\n          xfbml: true,\n          version: _this2.props.config.facebook.version\n        });\n        FB.Event.subscribe('xfbml.render', function (msg) {\n          // Here we know the SDK has loaded, even if onReady/onPlay\n          // is not called due to a video that cannot be embedded\n          _this2.props.onLoaded();\n        });\n        FB.Event.subscribe('xfbml.ready', function (msg) {\n          if (msg.type === 'video' && msg.id === _this2.playerID) {\n            _this2.player = msg.instance;\n\n            _this2.player.subscribe('startedPlaying', _this2.props.onPlay);\n\n            _this2.player.subscribe('paused', _this2.props.onPause);\n\n            _this2.player.subscribe('finishedPlaying', _this2.props.onEnded);\n\n            _this2.player.subscribe('startedBuffering', _this2.props.onBuffer);\n\n            _this2.player.subscribe('finishedBuffering', _this2.props.onBufferEnd);\n\n            _this2.player.subscribe('error', _this2.props.onError);\n\n            if (!_this2.props.muted) {\n              // Player is muted by default\n              _this2.callPlayer('unmute');\n            }\n\n            _this2.props.onReady(); // For some reason Facebook have added `visibility: hidden`\n            // to the iframe when autoplay fails, so here we set it back\n\n\n            document.getElementById(_this2.playerID).querySelector('iframe').style.visibility = 'visible';\n          }\n        });\n      });\n    }\n  }, {\n    key: \"play\",\n    value: function play() {\n      this.callPlayer('play');\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.callPlayer('pause');\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {// Nothing to do\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(seconds) {\n      this.callPlayer('seek', seconds);\n    }\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(fraction) {\n      this.callPlayer('setVolume', fraction);\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      return this.callPlayer('getDuration');\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.callPlayer('getCurrentPosition');\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      return null;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var style = {\n        width: '100%',\n        height: '100%'\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        style: style,\n        id: this.playerID,\n        className: \"fb-video\",\n        \"data-href\": this.props.url,\n        \"data-autoplay\": this.props.playing ? 'true' : 'false',\n        \"data-allowfullscreen\": \"true\",\n        \"data-controls\": this.props.controls ? 'true' : 'false'\n      });\n    }\n  }]);\n\n  return Facebook;\n}(_react.Component);\n\nexports.Facebook = Facebook;\n\n_defineProperty(Facebook, \"displayName\", 'Facebook');\n\n_defineProperty(Facebook, \"canPlay\", function (url) {\n  return MATCH_URL.test(url);\n});\n\n_defineProperty(Facebook, \"loopOnEnded\", true);\n\nvar _default = (0, _singlePlayer[\"default\"])(Facebook);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.FilePlayer = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _utils = require(\"../utils\");\n\nvar _singlePlayer = _interopRequireDefault(require(\"../singlePlayer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o) { if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar IOS = typeof navigator !== 'undefined' && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\nvar AUDIO_EXTENSIONS = /\\.(m4a|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\\?)/i;\nvar VIDEO_EXTENSIONS = /\\.(mp4|og[gv]|webm|mov|m4v)($|\\?)/i;\nvar HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nvar HLS_SDK_URL = 'https://cdn.jsdelivr.net/npm/hls.js@VERSION/dist/hls.min.js';\nvar HLS_GLOBAL = 'Hls';\nvar DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nvar DASH_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/VERSION/dash.all.min.js';\nvar DASH_GLOBAL = 'dashjs';\nvar MATCH_DROPBOX_URL = /www\\.dropbox\\.com\\/.+/;\n\nfunction canPlay(url) {\n  if (url instanceof Array) {\n    var _iterator = _createForOfIteratorHelper(url),\n        _step;\n\n    try {\n      for (_iterator.s(); !(_step = _iterator.n()).done;) {\n        var item = _step.value;\n\n        if (typeof item === 'string' && canPlay(item)) {\n          return true;\n        }\n\n        if (canPlay(item.src)) {\n          return true;\n        }\n      }\n    } catch (err) {\n      _iterator.e(err);\n    } finally {\n      _iterator.f();\n    }\n\n    return false;\n  }\n\n  if ((0, _utils.isMediaStream)(url)) {\n    return true;\n  }\n\n  return AUDIO_EXTENSIONS.test(url) || VIDEO_EXTENSIONS.test(url) || HLS_EXTENSIONS.test(url) || DASH_EXTENSIONS.test(url);\n}\n\nfunction supportsWebKitPresentationMode(video) {\n  if (!video) video = document.createElement('video'); // Check if Safari supports PiP, and is not on mobile (other than iPad)\n  // iPhone safari appears to \"support\" PiP through the check, however PiP does not function\n\n  return video.webkitSupportsPresentationMode && typeof video.webkitSetPresentationMode === 'function' && !/iPhone|iPod/.test(navigator.userAgent);\n}\n\nfunction canEnablePIP(url) {\n  return canPlay(url) && (!!document.pictureInPictureEnabled || supportsWebKitPresentationMode()) && !AUDIO_EXTENSIONS.test(url);\n}\n\nvar FilePlayer = /*#__PURE__*/function (_Component) {\n  _inherits(FilePlayer, _Component);\n\n  var _super = _createSuper(FilePlayer);\n\n  function FilePlayer() {\n    var _this;\n\n    _classCallCheck(this, FilePlayer);\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(_args));\n\n    _defineProperty(_assertThisInitialized(_this), \"onReady\", function () {\n      var _this$props;\n\n      return (_this$props = _this.props).onReady.apply(_this$props, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onPlay\", function () {\n      var _this$props2;\n\n      return (_this$props2 = _this.props).onPlay.apply(_this$props2, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onBuffer\", function () {\n      var _this$props3;\n\n      return (_this$props3 = _this.props).onBuffer.apply(_this$props3, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onBufferEnd\", function () {\n      var _this$props4;\n\n      return (_this$props4 = _this.props).onBufferEnd.apply(_this$props4, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onPause\", function () {\n      var _this$props5;\n\n      return (_this$props5 = _this.props).onPause.apply(_this$props5, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onEnded\", function () {\n      var _this$props6;\n\n      return (_this$props6 = _this.props).onEnded.apply(_this$props6, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onError\", function () {\n      var _this$props7;\n\n      return (_this$props7 = _this.props).onError.apply(_this$props7, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onEnablePIP\", function () {\n      var _this$props8;\n\n      return (_this$props8 = _this.props).onEnablePIP.apply(_this$props8, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onDisablePIP\", function (e) {\n      var _this$props9 = _this.props,\n          onDisablePIP = _this$props9.onDisablePIP,\n          playing = _this$props9.playing;\n      onDisablePIP(e);\n\n      if (playing) {\n        _this.play();\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onPresentationModeChange\", function (e) {\n      if (_this.player && supportsWebKitPresentationMode(_this.player)) {\n        var webkitPresentationMode = _this.player.webkitPresentationMode;\n\n        if (webkitPresentationMode === 'picture-in-picture') {\n          _this.onEnablePIP(e);\n        } else if (webkitPresentationMode === 'inline') {\n          _this.onDisablePIP(e);\n        }\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSeek\", function (e) {\n      _this.props.onSeek(e.target.currentTime);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"mute\", function () {\n      _this.player.muted = true;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unmute\", function () {\n      _this.player.muted = false;\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"renderSourceElement\", function (source, index) {\n      if (typeof source === 'string') {\n        return /*#__PURE__*/_react[\"default\"].createElement(\"source\", {\n          key: index,\n          src: source\n        });\n      }\n\n      return /*#__PURE__*/_react[\"default\"].createElement(\"source\", _extends({\n        key: index\n      }, source));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"renderTrack\", function (track, index) {\n      return /*#__PURE__*/_react[\"default\"].createElement(\"track\", _extends({\n        key: index\n      }, track));\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"ref\", function (player) {\n      if (_this.player) {\n        // Store previous player to be used by removeListeners()\n        _this.prevPlayer = _this.player;\n      }\n\n      _this.player = player;\n    });\n\n    return _this;\n  }\n\n  _createClass(FilePlayer, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.addListeners(this.player);\n\n      if (IOS) {\n        this.player.load();\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(prevProps)) {\n        this.removeListeners(this.prevPlayer);\n        this.addListeners(this.player);\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.removeListeners(this.player);\n\n      if (this.hls) {\n        this.hls.destroy();\n      }\n    }\n  }, {\n    key: \"addListeners\",\n    value: function addListeners(player) {\n      var playsinline = this.props.playsinline;\n      player.addEventListener('canplay', this.onReady);\n      player.addEventListener('play', this.onPlay);\n      player.addEventListener('waiting', this.onBuffer);\n      player.addEventListener('playing', this.onBufferEnd);\n      player.addEventListener('pause', this.onPause);\n      player.addEventListener('seeked', this.onSeek);\n      player.addEventListener('ended', this.onEnded);\n      player.addEventListener('error', this.onError);\n      player.addEventListener('enterpictureinpicture', this.onEnablePIP);\n      player.addEventListener('leavepictureinpicture', this.onDisablePIP);\n      player.addEventListener('webkitpresentationmodechanged', this.onPresentationModeChange);\n\n      if (playsinline) {\n        player.setAttribute('playsinline', '');\n        player.setAttribute('webkit-playsinline', '');\n        player.setAttribute('x5-playsinline', '');\n      }\n    }\n  }, {\n    key: \"removeListeners\",\n    value: function removeListeners(player) {\n      player.removeEventListener('canplay', this.onReady);\n      player.removeEventListener('play', this.onPlay);\n      player.removeEventListener('waiting', this.onBuffer);\n      player.removeEventListener('playing', this.onBufferEnd);\n      player.removeEventListener('pause', this.onPause);\n      player.removeEventListener('seeked', this.onSeek);\n      player.removeEventListener('ended', this.onEnded);\n      player.removeEventListener('error', this.onError);\n      player.removeEventListener('enterpictureinpicture', this.onEnablePIP);\n      player.removeEventListener('leavepictureinpicture', this.onDisablePIP);\n      player.removeEventListener('webkitpresentationmodechanged', this.onPresentationModeChange);\n    } // Proxy methods to prevent listener leaks\n\n  }, {\n    key: \"shouldUseAudio\",\n    value: function shouldUseAudio(props) {\n      if (props.config.file.forceVideo) {\n        return false;\n      }\n\n      if (props.config.file.attributes.poster) {\n        return false; // Use <video> so that poster is shown\n      }\n\n      return AUDIO_EXTENSIONS.test(props.url) || props.config.file.forceAudio;\n    }\n  }, {\n    key: \"shouldUseHLS\",\n    value: function shouldUseHLS(url) {\n      return HLS_EXTENSIONS.test(url) && !IOS || this.props.config.file.forceHLS;\n    }\n  }, {\n    key: \"shouldUseDASH\",\n    value: function shouldUseDASH(url) {\n      return DASH_EXTENSIONS.test(url) || this.props.config.file.forceDASH;\n    }\n  }, {\n    key: \"load\",\n    value: function load(url) {\n      var _this2 = this;\n\n      var _this$props$config$fi = this.props.config.file,\n          hlsVersion = _this$props$config$fi.hlsVersion,\n          dashVersion = _this$props$config$fi.dashVersion;\n\n      if (this.shouldUseHLS(url)) {\n        (0, _utils.getSDK)(HLS_SDK_URL.replace('VERSION', hlsVersion), HLS_GLOBAL).then(function (Hls) {\n          _this2.hls = new Hls(_this2.props.config.file.hlsOptions);\n\n          _this2.hls.on(Hls.Events.ERROR, function (e, data) {\n            _this2.props.onError(e, data, _this2.hls, Hls);\n          });\n\n          _this2.hls.loadSource(url);\n\n          _this2.hls.attachMedia(_this2.player);\n        });\n      }\n\n      if (this.shouldUseDASH(url)) {\n        (0, _utils.getSDK)(DASH_SDK_URL.replace('VERSION', dashVersion), DASH_GLOBAL).then(function (dashjs) {\n          _this2.dash = dashjs.MediaPlayer().create();\n\n          _this2.dash.initialize(_this2.player, url, _this2.props.playing);\n\n          _this2.dash.on('error', _this2.props.onError);\n\n          _this2.dash.getDebug().setLogToBrowserConsole(false);\n        });\n      }\n\n      if (url instanceof Array) {\n        // When setting new urls (<source>) on an already loaded video,\n        // HTMLMediaElement.load() is needed to reset the media element\n        // and restart the media resource. Just replacing children source\n        // dom nodes is not enough\n        this.player.load();\n      } else if ((0, _utils.isMediaStream)(url)) {\n        try {\n          this.player.srcObject = url;\n        } catch (e) {\n          this.player.src = window.URL.createObjectURL(url);\n        }\n      }\n    }\n  }, {\n    key: \"play\",\n    value: function play() {\n      var promise = this.player.play();\n\n      if (promise) {\n        promise[\"catch\"](this.props.onError);\n      }\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.player.pause();\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.player.removeAttribute('src');\n\n      if (this.dash) {\n        this.dash.reset();\n      }\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(seconds) {\n      this.player.currentTime = seconds;\n    }\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(fraction) {\n      this.player.volume = fraction;\n    }\n  }, {\n    key: \"enablePIP\",\n    value: function enablePIP() {\n      if (this.player.requestPictureInPicture && document.pictureInPictureElement !== this.player) {\n        this.player.requestPictureInPicture();\n      } else if (supportsWebKitPresentationMode(this.player) && this.player.webkitPresentationMode !== 'picture-in-picture') {\n        this.player.webkitSetPresentationMode('picture-in-picture');\n      }\n    }\n  }, {\n    key: \"disablePIP\",\n    value: function disablePIP() {\n      if (document.exitPictureInPicture && document.pictureInPictureElement === this.player) {\n        document.exitPictureInPicture();\n      } else if (supportsWebKitPresentationMode(this.player) && this.player.webkitPresentationMode !== 'inline') {\n        this.player.webkitSetPresentationMode('inline');\n      }\n    }\n  }, {\n    key: \"setPlaybackRate\",\n    value: function setPlaybackRate(rate) {\n      this.player.playbackRate = rate;\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      if (!this.player) return null;\n      var _this$player = this.player,\n          duration = _this$player.duration,\n          seekable = _this$player.seekable; // on iOS, live streams return Infinity for the duration\n      // so instead we use the end of the seekable timerange\n\n      if (duration === Infinity && seekable.length > 0) {\n        return seekable.end(seekable.length - 1);\n      }\n\n      return duration;\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      if (!this.player) return null;\n      return this.player.currentTime;\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      if (!this.player) return null;\n      var buffered = this.player.buffered;\n\n      if (buffered.length === 0) {\n        return 0;\n      }\n\n      var end = buffered.end(buffered.length - 1);\n      var duration = this.getDuration();\n\n      if (end > duration) {\n        return duration;\n      }\n\n      return end;\n    }\n  }, {\n    key: \"getSource\",\n    value: function getSource(url) {\n      var useHLS = this.shouldUseHLS(url);\n      var useDASH = this.shouldUseDASH(url);\n\n      if (url instanceof Array || (0, _utils.isMediaStream)(url) || useHLS || useDASH) {\n        return undefined;\n      }\n\n      if (MATCH_DROPBOX_URL.test(url)) {\n        return url.replace('www.dropbox.com', 'dl.dropboxusercontent.com');\n      }\n\n      return url;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props10 = this.props,\n          url = _this$props10.url,\n          playing = _this$props10.playing,\n          loop = _this$props10.loop,\n          controls = _this$props10.controls,\n          muted = _this$props10.muted,\n          config = _this$props10.config,\n          width = _this$props10.width,\n          height = _this$props10.height;\n      var useAudio = this.shouldUseAudio(this.props);\n      var Element = useAudio ? 'audio' : 'video';\n      var style = {\n        width: width === 'auto' ? width : '100%',\n        height: height === 'auto' ? height : '100%'\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(Element, _extends({\n        ref: this.ref,\n        src: this.getSource(url),\n        style: style,\n        preload: \"auto\",\n        autoPlay: playing || undefined,\n        controls: controls,\n        muted: muted,\n        loop: loop\n      }, config.file.attributes), url instanceof Array && url.map(this.renderSourceElement), config.file.tracks.map(this.renderTrack));\n    }\n  }]);\n\n  return FilePlayer;\n}(_react.Component);\n\nexports.FilePlayer = FilePlayer;\n\n_defineProperty(FilePlayer, \"displayName\", 'FilePlayer');\n\n_defineProperty(FilePlayer, \"canPlay\", canPlay);\n\n_defineProperty(FilePlayer, \"canEnablePIP\", canEnablePIP);\n\nvar _default = (0, _singlePlayer[\"default\"])(FilePlayer);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.Mixcloud = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _utils = require(\"../utils\");\n\nvar _singlePlayer = _interopRequireDefault(require(\"../singlePlayer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SDK_URL = 'https://widget.mixcloud.com/media/js/widgetApi.js';\nvar SDK_GLOBAL = 'Mixcloud';\nvar MATCH_URL = /mixcloud\\.com\\/([^/]+\\/[^/]+)/;\n\nvar Mixcloud = /*#__PURE__*/function (_Component) {\n  _inherits(Mixcloud, _Component);\n\n  var _super = _createSuper(Mixcloud);\n\n  function Mixcloud() {\n    var _this;\n\n    _classCallCheck(this, Mixcloud);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"callPlayer\", _utils.callPlayer);\n\n    _defineProperty(_assertThisInitialized(_this), \"duration\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"currentTime\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"secondsLoaded\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"mute\", function () {// No volume support\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unmute\", function () {// No volume support\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"ref\", function (iframe) {\n      _this.iframe = iframe;\n    });\n\n    return _this;\n  }\n\n  _createClass(Mixcloud, [{\n    key: \"load\",\n    value: function load(url) {\n      var _this2 = this;\n\n      (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (Mixcloud) {\n        _this2.player = Mixcloud.PlayerWidget(_this2.iframe);\n\n        _this2.player.ready.then(function () {\n          _this2.player.events.play.on(_this2.props.onPlay);\n\n          _this2.player.events.pause.on(_this2.props.onPause);\n\n          _this2.player.events.ended.on(_this2.props.onEnded);\n\n          _this2.player.events.error.on(_this2.props.error);\n\n          _this2.player.events.progress.on(function (seconds, duration) {\n            _this2.currentTime = seconds;\n            _this2.duration = duration;\n          });\n\n          _this2.props.onReady();\n        });\n      }, this.props.onError);\n    }\n  }, {\n    key: \"play\",\n    value: function play() {\n      this.callPlayer('play');\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.callPlayer('pause');\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {// Nothing to do\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(seconds) {\n      this.callPlayer('seek', seconds);\n    }\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(fraction) {// No volume support\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      return this.duration;\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.currentTime;\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      return null;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$props = this.props,\n          url = _this$props.url,\n          config = _this$props.config;\n      var id = url.match(MATCH_URL)[1];\n      var style = {\n        width: '100%',\n        height: '100%'\n      };\n      var query = (0, _utils.queryString)(_objectSpread({}, config.mixcloud.options, {\n        feed: \"/\".concat(id, \"/\")\n      })); // We have to give the iframe a key here to prevent a\n      // weird dialog appearing when loading a new track\n\n      return /*#__PURE__*/_react[\"default\"].createElement(\"iframe\", {\n        key: id,\n        ref: this.ref,\n        style: style,\n        src: \"https://www.mixcloud.com/widget/iframe/?\".concat(query),\n        frameBorder: \"0\"\n      });\n    }\n  }]);\n\n  return Mixcloud;\n}(_react.Component);\n\nexports.Mixcloud = Mixcloud;\n\n_defineProperty(Mixcloud, \"displayName\", 'Mixcloud');\n\n_defineProperty(Mixcloud, \"canPlay\", function (url) {\n  return MATCH_URL.test(url);\n});\n\n_defineProperty(Mixcloud, \"loopOnEnded\", true);\n\nvar _default = (0, _singlePlayer[\"default\"])(Mixcloud);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.SoundCloud = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _utils = require(\"../utils\");\n\nvar _singlePlayer = _interopRequireDefault(require(\"../singlePlayer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SDK_URL = 'https://w.soundcloud.com/player/api.js';\nvar SDK_GLOBAL = 'SC';\nvar MATCH_URL = /(?:soundcloud\\.com|snd\\.sc)\\/[^.]+$/;\n\nvar SoundCloud = /*#__PURE__*/function (_Component) {\n  _inherits(SoundCloud, _Component);\n\n  var _super = _createSuper(SoundCloud);\n\n  function SoundCloud() {\n    var _this;\n\n    _classCallCheck(this, SoundCloud);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"callPlayer\", _utils.callPlayer);\n\n    _defineProperty(_assertThisInitialized(_this), \"duration\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"currentTime\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"fractionLoaded\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"mute\", function () {\n      _this.setVolume(0);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unmute\", function () {\n      if (_this.props.volume !== null) {\n        _this.setVolume(_this.props.volume);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"ref\", function (iframe) {\n      _this.iframe = iframe;\n    });\n\n    return _this;\n  }\n\n  _createClass(SoundCloud, [{\n    key: \"load\",\n    value: function load(url, isReady) {\n      var _this2 = this;\n\n      (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (SC) {\n        if (!_this2.iframe) return;\n        var _SC$Widget$Events = SC.Widget.Events,\n            PLAY = _SC$Widget$Events.PLAY,\n            PLAY_PROGRESS = _SC$Widget$Events.PLAY_PROGRESS,\n            PAUSE = _SC$Widget$Events.PAUSE,\n            FINISH = _SC$Widget$Events.FINISH,\n            ERROR = _SC$Widget$Events.ERROR;\n\n        if (!isReady) {\n          _this2.player = SC.Widget(_this2.iframe);\n\n          _this2.player.bind(PLAY, _this2.props.onPlay);\n\n          _this2.player.bind(PAUSE, _this2.props.onPause);\n\n          _this2.player.bind(PLAY_PROGRESS, function (e) {\n            _this2.currentTime = e.currentPosition / 1000;\n            _this2.fractionLoaded = e.loadedProgress;\n          });\n\n          _this2.player.bind(FINISH, function () {\n            return _this2.props.onEnded();\n          });\n\n          _this2.player.bind(ERROR, function (e) {\n            return _this2.props.onError(e);\n          });\n        }\n\n        _this2.player.load(url, _objectSpread({}, _this2.props.config.soundcloud.options, {\n          callback: function callback() {\n            _this2.player.getDuration(function (duration) {\n              _this2.duration = duration / 1000;\n\n              _this2.props.onReady();\n            });\n          }\n        }));\n      });\n    }\n  }, {\n    key: \"play\",\n    value: function play() {\n      this.callPlayer('play');\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.callPlayer('pause');\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {// Nothing to do\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(seconds) {\n      this.callPlayer('seekTo', seconds * 1000);\n    }\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(fraction) {\n      this.callPlayer('setVolume', fraction * 100);\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      return this.duration;\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.currentTime;\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      return this.fractionLoaded * this.duration;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var display = this.props.display;\n      var style = {\n        width: '100%',\n        height: '100%',\n        display: display\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(\"iframe\", {\n        ref: this.ref,\n        src: \"https://w.soundcloud.com/player/?url=\".concat(encodeURIComponent(this.props.url)),\n        style: style,\n        frameBorder: 0,\n        allow: \"autoplay\"\n      });\n    }\n  }]);\n\n  return SoundCloud;\n}(_react.Component);\n\nexports.SoundCloud = SoundCloud;\n\n_defineProperty(SoundCloud, \"displayName\", 'SoundCloud');\n\n_defineProperty(SoundCloud, \"canPlay\", function (url) {\n  return MATCH_URL.test(url);\n});\n\n_defineProperty(SoundCloud, \"loopOnEnded\", true);\n\nvar _default = (0, _singlePlayer[\"default\"])(SoundCloud);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.Streamable = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _utils = require(\"../utils\");\n\nvar _singlePlayer = _interopRequireDefault(require(\"../singlePlayer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SDK_URL = 'https://cdn.embed.ly/player-0.1.0.min.js';\nvar SDK_GLOBAL = 'playerjs';\nvar MATCH_URL = /streamable\\.com\\/([a-z0-9]+)$/;\n\nvar Streamable = /*#__PURE__*/function (_Component) {\n  _inherits(Streamable, _Component);\n\n  var _super = _createSuper(Streamable);\n\n  function Streamable() {\n    var _this;\n\n    _classCallCheck(this, Streamable);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"callPlayer\", _utils.callPlayer);\n\n    _defineProperty(_assertThisInitialized(_this), \"duration\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"currentTime\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"secondsLoaded\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"mute\", function () {\n      _this.callPlayer('mute');\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unmute\", function () {\n      _this.callPlayer('unmute');\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"ref\", function (iframe) {\n      _this.iframe = iframe;\n    });\n\n    return _this;\n  }\n\n  _createClass(Streamable, [{\n    key: \"load\",\n    value: function load(url) {\n      var _this2 = this;\n\n      (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (playerjs) {\n        if (!_this2.iframe) return;\n        _this2.player = new playerjs.Player(_this2.iframe);\n\n        _this2.player.setLoop(_this2.props.loop);\n\n        _this2.player.on('ready', _this2.props.onReady);\n\n        _this2.player.on('play', _this2.props.onPlay);\n\n        _this2.player.on('pause', _this2.props.onPause);\n\n        _this2.player.on('seeked', _this2.props.onSeek);\n\n        _this2.player.on('ended', _this2.props.onEnded);\n\n        _this2.player.on('error', _this2.props.onError);\n\n        _this2.player.on('timeupdate', function (_ref) {\n          var duration = _ref.duration,\n              seconds = _ref.seconds;\n          _this2.duration = duration;\n          _this2.currentTime = seconds;\n        });\n\n        _this2.player.on('buffered', function (_ref2) {\n          var percent = _ref2.percent;\n\n          if (_this2.duration) {\n            _this2.secondsLoaded = _this2.duration * percent;\n          }\n        });\n\n        if (_this2.props.muted) {\n          _this2.player.mute();\n        }\n      }, this.props.onError);\n    }\n  }, {\n    key: \"play\",\n    value: function play() {\n      this.callPlayer('play');\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.callPlayer('pause');\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {// Nothing to do\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(seconds) {\n      this.callPlayer('setCurrentTime', seconds);\n    }\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(fraction) {\n      this.callPlayer('setVolume', fraction * 100);\n    }\n  }, {\n    key: \"setLoop\",\n    value: function setLoop(loop) {\n      this.callPlayer('setLoop', loop);\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      return this.duration;\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.currentTime;\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      return this.secondsLoaded;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var id = this.props.url.match(MATCH_URL)[1];\n      var style = {\n        width: '100%',\n        height: '100%'\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(\"iframe\", {\n        ref: this.ref,\n        src: \"https://streamable.com/o/\".concat(id),\n        frameBorder: \"0\",\n        scrolling: \"no\",\n        style: style,\n        allowFullScreen: true\n      });\n    }\n  }]);\n\n  return Streamable;\n}(_react.Component);\n\nexports.Streamable = Streamable;\n\n_defineProperty(Streamable, \"displayName\", 'Streamable');\n\n_defineProperty(Streamable, \"canPlay\", function (url) {\n  return MATCH_URL.test(url);\n});\n\nvar _default = (0, _singlePlayer[\"default\"])(Streamable);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.Twitch = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _utils = require(\"../utils\");\n\nvar _singlePlayer = _interopRequireDefault(require(\"../singlePlayer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SDK_URL = 'https://player.twitch.tv/js/embed/v1.js';\nvar SDK_GLOBAL = 'Twitch';\nvar MATCH_VIDEO_URL = /(?:www\\.|go\\.)?twitch\\.tv\\/videos\\/(\\d+)($|\\?)/;\nvar MATCH_CHANNEL_URL = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-z0-9_]+)($|\\?)/;\nvar PLAYER_ID_PREFIX = 'twitch-player-';\n\nvar Twitch = /*#__PURE__*/function (_Component) {\n  _inherits(Twitch, _Component);\n\n  var _super = _createSuper(Twitch);\n\n  function Twitch() {\n    var _this;\n\n    _classCallCheck(this, Twitch);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"callPlayer\", _utils.callPlayer);\n\n    _defineProperty(_assertThisInitialized(_this), \"playerID\", _this.props.config.twitch.playerId || \"\".concat(PLAYER_ID_PREFIX).concat((0, _utils.randomString)()));\n\n    _defineProperty(_assertThisInitialized(_this), \"mute\", function () {\n      _this.callPlayer('setMuted', true);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unmute\", function () {\n      _this.callPlayer('setMuted', false);\n    });\n\n    return _this;\n  }\n\n  _createClass(Twitch, [{\n    key: \"load\",\n    value: function load(url, isReady) {\n      var _this2 = this;\n\n      var _this$props = this.props,\n          playsinline = _this$props.playsinline,\n          onError = _this$props.onError,\n          config = _this$props.config,\n          controls = _this$props.controls;\n      var isChannel = MATCH_CHANNEL_URL.test(url);\n      var id = isChannel ? url.match(MATCH_CHANNEL_URL)[1] : url.match(MATCH_VIDEO_URL)[1];\n\n      if (isReady) {\n        if (isChannel) {\n          this.player.setChannel(id);\n        } else {\n          this.player.setVideo('v' + id);\n        }\n\n        return;\n      }\n\n      (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (Twitch) {\n        _this2.player = new Twitch.Player(_this2.playerID, _objectSpread({\n          video: isChannel ? '' : id,\n          channel: isChannel ? id : '',\n          height: '100%',\n          width: '100%',\n          playsinline: playsinline,\n          autoplay: _this2.props.playing,\n          muted: _this2.props.muted,\n          // https://github.com/CookPete/react-player/issues/733#issuecomment-549085859\n          controls: isChannel ? true : controls\n        }, config.twitch.options));\n        var _Twitch$Player = Twitch.Player,\n            READY = _Twitch$Player.READY,\n            PLAYING = _Twitch$Player.PLAYING,\n            PAUSE = _Twitch$Player.PAUSE,\n            ENDED = _Twitch$Player.ENDED,\n            ONLINE = _Twitch$Player.ONLINE,\n            OFFLINE = _Twitch$Player.OFFLINE;\n\n        _this2.player.addEventListener(READY, _this2.props.onReady);\n\n        _this2.player.addEventListener(PLAYING, _this2.props.onPlay);\n\n        _this2.player.addEventListener(PAUSE, _this2.props.onPause);\n\n        _this2.player.addEventListener(ENDED, _this2.props.onEnded); // Prevent weird isLoading behaviour when streams are offline\n\n\n        _this2.player.addEventListener(ONLINE, _this2.props.onLoaded);\n\n        _this2.player.addEventListener(OFFLINE, _this2.props.onLoaded);\n      }, onError);\n    }\n  }, {\n    key: \"play\",\n    value: function play() {\n      this.callPlayer('play');\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.callPlayer('pause');\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.callPlayer('pause');\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(seconds) {\n      this.callPlayer('seek', seconds);\n    }\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(fraction) {\n      this.callPlayer('setVolume', fraction);\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      return this.callPlayer('getDuration');\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.callPlayer('getCurrentTime');\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      return null;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var style = {\n        width: '100%',\n        height: '100%'\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        style: style,\n        id: this.playerID\n      });\n    }\n  }]);\n\n  return Twitch;\n}(_react.Component);\n\nexports.Twitch = Twitch;\n\n_defineProperty(Twitch, \"displayName\", 'Twitch');\n\n_defineProperty(Twitch, \"canPlay\", function (url) {\n  return MATCH_VIDEO_URL.test(url) || MATCH_CHANNEL_URL.test(url);\n});\n\n_defineProperty(Twitch, \"loopOnEnded\", true);\n\nvar _default = (0, _singlePlayer[\"default\"])(Twitch);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.Vimeo = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _utils = require(\"../utils\");\n\nvar _singlePlayer = _interopRequireDefault(require(\"../singlePlayer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SDK_URL = 'https://player.vimeo.com/api/player.js';\nvar SDK_GLOBAL = 'Vimeo';\nvar MATCH_URL = /vimeo\\.com\\/.+/;\nvar MATCH_FILE_URL = /vimeo\\.com\\/external\\/[0-9]+\\..+/;\n\nvar Vimeo = /*#__PURE__*/function (_Component) {\n  _inherits(Vimeo, _Component);\n\n  var _super = _createSuper(Vimeo);\n\n  function Vimeo() {\n    var _this;\n\n    _classCallCheck(this, Vimeo);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"callPlayer\", _utils.callPlayer);\n\n    _defineProperty(_assertThisInitialized(_this), \"duration\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"currentTime\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"secondsLoaded\", null);\n\n    _defineProperty(_assertThisInitialized(_this), \"mute\", function () {\n      _this.setVolume(0);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unmute\", function () {\n      if (_this.props.volume !== null) {\n        _this.setVolume(_this.props.volume);\n      }\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"ref\", function (container) {\n      _this.container = container;\n    });\n\n    return _this;\n  }\n\n  _createClass(Vimeo, [{\n    key: \"load\",\n    value: function load(url) {\n      var _this2 = this;\n\n      this.duration = null;\n      (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (Vimeo) {\n        if (!_this2.container) return;\n        _this2.player = new Vimeo.Player(_this2.container, _objectSpread({\n          url: url,\n          autoplay: _this2.props.playing,\n          muted: _this2.props.muted,\n          loop: _this2.props.loop,\n          playsinline: _this2.props.playsinline,\n          controls: _this2.props.controls\n        }, _this2.props.config.vimeo.playerOptions));\n\n        _this2.player.ready().then(function () {\n          var iframe = _this2.container.querySelector('iframe');\n\n          iframe.style.width = '100%';\n          iframe.style.height = '100%';\n        })[\"catch\"](_this2.props.onError);\n\n        _this2.player.on('loaded', function () {\n          _this2.props.onReady();\n\n          _this2.refreshDuration();\n        });\n\n        _this2.player.on('play', function () {\n          _this2.props.onPlay();\n\n          _this2.refreshDuration();\n        });\n\n        _this2.player.on('pause', _this2.props.onPause);\n\n        _this2.player.on('seeked', function (e) {\n          return _this2.props.onSeek(e.seconds);\n        });\n\n        _this2.player.on('ended', _this2.props.onEnded);\n\n        _this2.player.on('error', _this2.props.onError);\n\n        _this2.player.on('timeupdate', function (_ref) {\n          var seconds = _ref.seconds;\n          _this2.currentTime = seconds;\n        });\n\n        _this2.player.on('progress', function (_ref2) {\n          var seconds = _ref2.seconds;\n          _this2.secondsLoaded = seconds;\n        });\n      }, this.props.onError);\n    }\n  }, {\n    key: \"refreshDuration\",\n    value: function refreshDuration() {\n      var _this3 = this;\n\n      this.player.getDuration().then(function (duration) {\n        _this3.duration = duration;\n      });\n    }\n  }, {\n    key: \"play\",\n    value: function play() {\n      var promise = this.callPlayer('play');\n\n      if (promise) {\n        promise[\"catch\"](this.props.onError);\n      }\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.callPlayer('pause');\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.callPlayer('unload');\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(seconds) {\n      this.callPlayer('setCurrentTime', seconds);\n    }\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(fraction) {\n      this.callPlayer('setVolume', fraction);\n    }\n  }, {\n    key: \"setLoop\",\n    value: function setLoop(loop) {\n      this.callPlayer('setLoop', loop);\n    }\n  }, {\n    key: \"setPlaybackRate\",\n    value: function setPlaybackRate(rate) {\n      this.callPlayer('setPlaybackRate', rate);\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      return this.duration;\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.currentTime;\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      return this.secondsLoaded;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var display = this.props.display;\n      var style = {\n        width: '100%',\n        height: '100%',\n        overflow: 'hidden',\n        display: display\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        key: this.props.url,\n        ref: this.ref,\n        style: style\n      });\n    }\n  }]);\n\n  return Vimeo;\n}(_react.Component);\n\nexports.Vimeo = Vimeo;\n\n_defineProperty(Vimeo, \"displayName\", 'Vimeo');\n\n_defineProperty(Vimeo, \"forceLoad\", true);\n\n_defineProperty(Vimeo, \"canPlay\", function (url) {\n  if (MATCH_FILE_URL.test(url)) {\n    return false;\n  }\n\n  return MATCH_URL.test(url);\n});\n\nvar _default = (0, _singlePlayer[\"default\"])(Vimeo);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.Wistia = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _utils = require(\"../utils\");\n\nvar _singlePlayer = _interopRequireDefault(require(\"../singlePlayer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SDK_URL = 'https://fast.wistia.com/assets/external/E-v1.js';\nvar SDK_GLOBAL = 'Wistia';\nvar MATCH_URL = /(?:wistia\\.com|wi\\.st)\\/(?:medias|embed)\\/(.*)$/;\n\nvar Wistia = /*#__PURE__*/function (_Component) {\n  _inherits(Wistia, _Component);\n\n  var _super = _createSuper(Wistia);\n\n  function Wistia() {\n    var _this;\n\n    _classCallCheck(this, Wistia);\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(_args));\n\n    _defineProperty(_assertThisInitialized(_this), \"callPlayer\", _utils.callPlayer);\n\n    _defineProperty(_assertThisInitialized(_this), \"onPlay\", function () {\n      var _this$props;\n\n      return (_this$props = _this.props).onPlay.apply(_this$props, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onPause\", function () {\n      var _this$props2;\n\n      return (_this$props2 = _this.props).onPause.apply(_this$props2, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onSeek\", function () {\n      var _this$props3;\n\n      return (_this$props3 = _this.props).onSeek.apply(_this$props3, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"onEnded\", function () {\n      var _this$props4;\n\n      return (_this$props4 = _this.props).onEnded.apply(_this$props4, arguments);\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"mute\", function () {\n      _this.callPlayer('mute');\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unmute\", function () {\n      _this.callPlayer('unmute');\n    });\n\n    return _this;\n  }\n\n  _createClass(Wistia, [{\n    key: \"getID\",\n    value: function getID(url) {\n      return url && url.match(MATCH_URL)[1];\n    }\n  }, {\n    key: \"load\",\n    value: function load(url) {\n      var _this2 = this;\n\n      var _this$props5 = this.props,\n          playing = _this$props5.playing,\n          muted = _this$props5.muted,\n          controls = _this$props5.controls,\n          _onReady = _this$props5.onReady,\n          config = _this$props5.config,\n          onError = _this$props5.onError;\n      (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function () {\n        window._wq = window._wq || [];\n\n        window._wq.push({\n          id: _this2.getID(url),\n          options: _objectSpread({\n            autoPlay: playing,\n            silentAutoPlay: 'allow',\n            muted: muted,\n            controlsVisibleOnLoad: controls\n          }, config.wistia.options),\n          onReady: function onReady(player) {\n            _this2.player = player;\n\n            _this2.unbind();\n\n            _this2.player.bind('play', _this2.onPlay);\n\n            _this2.player.bind('pause', _this2.onPause);\n\n            _this2.player.bind('seek', _this2.onSeek);\n\n            _this2.player.bind('end', _this2.onEnded);\n\n            _onReady();\n          }\n        });\n      }, onError);\n    }\n  }, {\n    key: \"unbind\",\n    value: function unbind() {\n      this.player.unbind('play', this.onPlay);\n      this.player.unbind('pause', this.onPause);\n      this.player.unbind('seek', this.onSeek);\n      this.player.unbind('end', this.onEnded);\n    } // Proxy methods to prevent listener leaks\n\n  }, {\n    key: \"play\",\n    value: function play() {\n      this.callPlayer('play');\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.callPlayer('pause');\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      this.unbind();\n      this.callPlayer('remove');\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(seconds) {\n      this.callPlayer('time', seconds);\n    }\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(fraction) {\n      this.callPlayer('volume', fraction);\n    }\n  }, {\n    key: \"setPlaybackRate\",\n    value: function setPlaybackRate(rate) {\n      this.callPlayer('playbackRate', rate);\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      return this.callPlayer('duration');\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.callPlayer('time');\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      return null;\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var id = this.getID(this.props.url);\n      var className = \"wistia_embed wistia_async_\".concat(id);\n      var style = {\n        width: '100%',\n        height: '100%'\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        key: id,\n        className: className,\n        style: style\n      });\n    }\n  }]);\n\n  return Wistia;\n}(_react.Component);\n\nexports.Wistia = Wistia;\n\n_defineProperty(Wistia, \"displayName\", 'Wistia');\n\n_defineProperty(Wistia, \"canPlay\", function (url) {\n  return MATCH_URL.test(url);\n});\n\n_defineProperty(Wistia, \"loopOnEnded\", true);\n\nvar _default = (0, _singlePlayer[\"default\"])(Wistia);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = exports.YouTube = void 0;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _utils = require(\"../utils\");\n\nvar _singlePlayer = _interopRequireDefault(require(\"../singlePlayer\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar SDK_URL = 'https://www.youtube.com/iframe_api';\nvar SDK_GLOBAL = 'YT';\nvar SDK_GLOBAL_READY = 'onYouTubeIframeAPIReady';\nvar MATCH_URL = /(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})|youtube\\.com\\/playlist\\?list=/;\nvar MATCH_PLAYLIST = /list=([a-zA-Z0-9_-]+)/;\n\nfunction parsePlaylist(url) {\n  if (MATCH_PLAYLIST.test(url)) {\n    var _url$match = url.match(MATCH_PLAYLIST),\n        _url$match2 = _slicedToArray(_url$match, 2),\n        playlistId = _url$match2[1];\n\n    return {\n      listType: 'playlist',\n      list: playlistId\n    };\n  }\n\n  return {};\n}\n\nvar YouTube = /*#__PURE__*/function (_Component) {\n  _inherits(YouTube, _Component);\n\n  var _super = _createSuper(YouTube);\n\n  function YouTube() {\n    var _this;\n\n    _classCallCheck(this, YouTube);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n\n    _defineProperty(_assertThisInitialized(_this), \"callPlayer\", _utils.callPlayer);\n\n    _defineProperty(_assertThisInitialized(_this), \"onStateChange\", function (_ref) {\n      var data = _ref.data;\n      var _this$props = _this.props,\n          onPlay = _this$props.onPlay,\n          onPause = _this$props.onPause,\n          onBuffer = _this$props.onBuffer,\n          onBufferEnd = _this$props.onBufferEnd,\n          onEnded = _this$props.onEnded,\n          onReady = _this$props.onReady,\n          loop = _this$props.loop;\n      var _window$SDK_GLOBAL$Pl = window[SDK_GLOBAL].PlayerState,\n          PLAYING = _window$SDK_GLOBAL$Pl.PLAYING,\n          PAUSED = _window$SDK_GLOBAL$Pl.PAUSED,\n          BUFFERING = _window$SDK_GLOBAL$Pl.BUFFERING,\n          ENDED = _window$SDK_GLOBAL$Pl.ENDED,\n          CUED = _window$SDK_GLOBAL$Pl.CUED;\n\n      if (data === PLAYING) {\n        onPlay();\n        onBufferEnd();\n      }\n\n      if (data === PAUSED) onPause();\n      if (data === BUFFERING) onBuffer();\n\n      if (data === ENDED) {\n        var isPlaylist = !!_this.callPlayer('getPlaylist');\n\n        if (loop && !isPlaylist) {\n          _this.play(); // Only loop manually if not playing a playlist\n\n        }\n\n        onEnded();\n      }\n\n      if (data === CUED) onReady();\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"mute\", function () {\n      _this.callPlayer('mute');\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"unmute\", function () {\n      _this.callPlayer('unMute');\n    });\n\n    _defineProperty(_assertThisInitialized(_this), \"ref\", function (container) {\n      _this.container = container;\n    });\n\n    return _this;\n  }\n\n  _createClass(YouTube, [{\n    key: \"load\",\n    value: function load(url, isReady) {\n      var _this2 = this;\n\n      var _this$props2 = this.props,\n          playing = _this$props2.playing,\n          muted = _this$props2.muted,\n          playsinline = _this$props2.playsinline,\n          controls = _this$props2.controls,\n          loop = _this$props2.loop,\n          config = _this$props2.config,\n          _onError = _this$props2.onError;\n      var _config$youtube = config.youtube,\n          playerVars = _config$youtube.playerVars,\n          embedOptions = _config$youtube.embedOptions;\n      var id = url && url.match(MATCH_URL)[1];\n\n      if (isReady) {\n        if (MATCH_PLAYLIST.test(url)) {\n          this.player.loadPlaylist(parsePlaylist(url));\n          return;\n        }\n\n        this.player.cueVideoById({\n          videoId: id,\n          startSeconds: (0, _utils.parseStartTime)(url) || playerVars.start,\n          endSeconds: (0, _utils.parseEndTime)(url) || playerVars.end\n        });\n        return;\n      }\n\n      (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, function (YT) {\n        return YT.loaded;\n      }).then(function (YT) {\n        if (!_this2.container) return;\n        _this2.player = new YT.Player(_this2.container, _objectSpread({\n          width: '100%',\n          height: '100%',\n          videoId: id,\n          playerVars: _objectSpread({\n            autoplay: playing ? 1 : 0,\n            mute: muted ? 1 : 0,\n            controls: controls ? 1 : 0,\n            start: (0, _utils.parseStartTime)(url),\n            end: (0, _utils.parseEndTime)(url),\n            origin: window.location.origin,\n            playsinline: playsinline\n          }, parsePlaylist(url), {}, playerVars),\n          events: {\n            onReady: function onReady() {\n              if (loop) {\n                _this2.player.setLoop(true); // Enable playlist looping\n\n              }\n\n              _this2.props.onReady();\n            },\n            onStateChange: _this2.onStateChange,\n            onError: function onError(event) {\n              return _onError(event.data);\n            }\n          }\n        }, embedOptions));\n      }, _onError);\n    }\n  }, {\n    key: \"play\",\n    value: function play() {\n      this.callPlayer('playVideo');\n    }\n  }, {\n    key: \"pause\",\n    value: function pause() {\n      this.callPlayer('pauseVideo');\n    }\n  }, {\n    key: \"stop\",\n    value: function stop() {\n      if (!document.body.contains(this.callPlayer('getIframe'))) return;\n      this.callPlayer('stopVideo');\n    }\n  }, {\n    key: \"seekTo\",\n    value: function seekTo(amount) {\n      this.callPlayer('seekTo', amount);\n\n      if (!this.props.playing) {\n        this.pause();\n      }\n    }\n  }, {\n    key: \"setVolume\",\n    value: function setVolume(fraction) {\n      this.callPlayer('setVolume', fraction * 100);\n    }\n  }, {\n    key: \"setPlaybackRate\",\n    value: function setPlaybackRate(rate) {\n      this.callPlayer('setPlaybackRate', rate);\n    }\n  }, {\n    key: \"setLoop\",\n    value: function setLoop(loop) {\n      this.callPlayer('setLoop', loop);\n    }\n  }, {\n    key: \"getDuration\",\n    value: function getDuration() {\n      return this.callPlayer('getDuration');\n    }\n  }, {\n    key: \"getCurrentTime\",\n    value: function getCurrentTime() {\n      return this.callPlayer('getCurrentTime');\n    }\n  }, {\n    key: \"getSecondsLoaded\",\n    value: function getSecondsLoaded() {\n      return this.callPlayer('getVideoLoadedFraction') * this.getDuration();\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var display = this.props.display;\n      var style = {\n        width: '100%',\n        height: '100%',\n        display: display\n      };\n      return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        style: style\n      }, /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n        ref: this.ref\n      }));\n    }\n  }]);\n\n  return YouTube;\n}(_react.Component);\n\nexports.YouTube = YouTube;\n\n_defineProperty(YouTube, \"displayName\", 'YouTube');\n\n_defineProperty(YouTube, \"canPlay\", function (url) {\n  return MATCH_URL.test(url);\n});\n\nvar _default = (0, _singlePlayer[\"default\"])(YouTube);\n\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = void 0;\n\nvar _YouTube = require(\"./YouTube\");\n\nvar _SoundCloud = require(\"./SoundCloud\");\n\nvar _Vimeo = require(\"./Vimeo\");\n\nvar _Facebook = require(\"./Facebook\");\n\nvar _Streamable = require(\"./Streamable\");\n\nvar _Wistia = require(\"./Wistia\");\n\nvar _Twitch = require(\"./Twitch\");\n\nvar _DailyMotion = require(\"./DailyMotion\");\n\nvar _Mixcloud = require(\"./Mixcloud\");\n\nvar _FilePlayer = require(\"./FilePlayer\");\n\nvar _default = [_YouTube.YouTube, _SoundCloud.SoundCloud, _Vimeo.Vimeo, _Facebook.Facebook, _Streamable.Streamable, _Wistia.Wistia, _Twitch.Twitch, _DailyMotion.DailyMotion, _Mixcloud.Mixcloud, _FilePlayer.FilePlayer];\nexports[\"default\"] = _default;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = renderPreloadPlayers;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _Player = _interopRequireDefault(require(\"./Player\"));\n\nvar _YouTube = require(\"./players/YouTube\");\n\nvar _SoundCloud = require(\"./players/SoundCloud\");\n\nvar _Vimeo = require(\"./players/Vimeo\");\n\nvar _DailyMotion = require(\"./players/DailyMotion\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _createForOfIteratorHelper(o) { if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nvar PRELOAD_PLAYERS = [{\n  Player: _YouTube.YouTube,\n  configKey: 'youtube',\n  url: 'https://www.youtube.com/watch?v=GlCmAC4MHek'\n}, {\n  Player: _SoundCloud.SoundCloud,\n  configKey: 'soundcloud',\n  url: 'https://soundcloud.com/seucheu/john-cage-433-8-bit-version'\n}, {\n  Player: _Vimeo.Vimeo,\n  configKey: 'vimeo',\n  url: 'https://vimeo.com/300970506'\n}, {\n  Player: _DailyMotion.DailyMotion,\n  configKey: 'dailymotion',\n  url: 'http://www.dailymotion.com/video/xqdpyk'\n}];\n\nfunction renderPreloadPlayers(url, controls, config) {\n  var players = [];\n\n  var _iterator = _createForOfIteratorHelper(PRELOAD_PLAYERS),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var player = _step.value;\n\n      if (!player.Player.canPlay(url) && config[player.configKey].preload) {\n        players.push( /*#__PURE__*/_react[\"default\"].createElement(_Player[\"default\"], {\n          key: player.Player.displayName,\n          activePlayer: player.Player,\n          url: player.url,\n          controls: controls,\n          playing: true,\n          muted: true,\n          display: \"none\"\n        }));\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return players;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DEPRECATED_CONFIG_PROPS = exports.defaultProps = exports.propTypes = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar string = _propTypes[\"default\"].string,\n    bool = _propTypes[\"default\"].bool,\n    number = _propTypes[\"default\"].number,\n    array = _propTypes[\"default\"].array,\n    oneOfType = _propTypes[\"default\"].oneOfType,\n    shape = _propTypes[\"default\"].shape,\n    object = _propTypes[\"default\"].object,\n    func = _propTypes[\"default\"].func,\n    node = _propTypes[\"default\"].node;\nvar propTypes = {\n  url: oneOfType([string, array, object]),\n  playing: bool,\n  loop: bool,\n  controls: bool,\n  volume: number,\n  muted: bool,\n  playbackRate: number,\n  width: oneOfType([string, number]),\n  height: oneOfType([string, number]),\n  style: object,\n  progressInterval: number,\n  playsinline: bool,\n  pip: bool,\n  light: oneOfType([bool, string]),\n  playIcon: node,\n  wrapper: oneOfType([string, func, shape({\n    render: func.isRequired\n  })]),\n  config: shape({\n    soundcloud: shape({\n      options: object,\n      preload: bool\n    }),\n    youtube: shape({\n      playerVars: object,\n      embedOptions: object,\n      preload: bool\n    }),\n    facebook: shape({\n      appId: string,\n      version: string,\n      playerId: string\n    }),\n    dailymotion: shape({\n      params: object,\n      preload: bool\n    }),\n    vimeo: shape({\n      playerOptions: object,\n      preload: bool\n    }),\n    file: shape({\n      attributes: object,\n      tracks: array,\n      forceVideo: bool,\n      forceAudio: bool,\n      forceHLS: bool,\n      forceDASH: bool,\n      hlsOptions: object,\n      hlsVersion: string,\n      dashVersion: string\n    }),\n    wistia: shape({\n      options: object\n    }),\n    mixcloud: shape({\n      options: object\n    }),\n    twitch: shape({\n      options: object,\n      playerId: string\n    })\n  }),\n  onReady: func,\n  onStart: func,\n  onPlay: func,\n  onPause: func,\n  onBuffer: func,\n  onBufferEnd: func,\n  onEnded: func,\n  onError: func,\n  onDuration: func,\n  onSeek: func,\n  onProgress: func,\n  onEnablePIP: func,\n  onDisablePIP: func\n};\nexports.propTypes = propTypes;\nvar defaultProps = {\n  playing: false,\n  loop: false,\n  controls: false,\n  volume: null,\n  muted: false,\n  playbackRate: 1,\n  width: '640px',\n  height: '360px',\n  style: {},\n  progressInterval: 1000,\n  playsinline: false,\n  pip: false,\n  light: false,\n  wrapper: 'div',\n  config: {\n    soundcloud: {\n      options: {\n        visual: true,\n        // Undocumented, but makes player fill container and look better\n        buying: false,\n        liking: false,\n        download: false,\n        sharing: false,\n        show_comments: false,\n        show_playcount: false\n      }\n    },\n    youtube: {\n      playerVars: {\n        playsinline: 1,\n        showinfo: 0,\n        rel: 0,\n        iv_load_policy: 3,\n        modestbranding: 1\n      },\n      embedOptions: {},\n      preload: false\n    },\n    facebook: {\n      appId: '1309697205772819',\n      version: 'v3.3',\n      playerId: null\n    },\n    dailymotion: {\n      params: {\n        api: 1,\n        'endscreen-enable': false\n      },\n      preload: false\n    },\n    vimeo: {\n      playerOptions: {\n        autopause: false,\n        byline: false,\n        portrait: false,\n        title: false\n      },\n      preload: false\n    },\n    file: {\n      attributes: {},\n      tracks: [],\n      forceVideo: false,\n      forceAudio: false,\n      forceHLS: false,\n      forceDASH: false,\n      hlsOptions: {},\n      hlsVersion: '0.13.1',\n      dashVersion: '2.9.2'\n    },\n    wistia: {\n      options: {}\n    },\n    mixcloud: {\n      options: {\n        hide_cover: 1\n      }\n    },\n    twitch: {\n      options: {},\n      playerId: null\n    }\n  },\n  onReady: function onReady() {},\n  onStart: function onStart() {},\n  onPlay: function onPlay() {},\n  onPause: function onPause() {},\n  onBuffer: function onBuffer() {},\n  onBufferEnd: function onBufferEnd() {},\n  onEnded: function onEnded() {},\n  onError: function onError() {},\n  onDuration: function onDuration() {},\n  onSeek: function onSeek() {},\n  onProgress: function onProgress() {},\n  onEnablePIP: function onEnablePIP() {},\n  onDisablePIP: function onDisablePIP() {}\n};\nexports.defaultProps = defaultProps;\nvar DEPRECATED_CONFIG_PROPS = ['soundcloudConfig', 'youtubeConfig', 'facebookConfig', 'dailymotionConfig', 'vimeoConfig', 'fileConfig', 'wistiaConfig'];\nexports.DEPRECATED_CONFIG_PROPS = DEPRECATED_CONFIG_PROPS;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = createSinglePlayer;\n\nvar _react = _interopRequireWildcard(require(\"react\"));\n\nvar _props = require(\"./props\");\n\nvar _utils = require(\"./utils\");\n\nvar _Player = _interopRequireDefault(require(\"./Player\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _getRequireWildcardCache() { if (typeof WeakMap !== \"function\") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== \"object\" && typeof obj !== \"function\") { return { \"default\": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj[\"default\"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar SUPPORTED_PROPS = Object.keys(_props.propTypes);\n\nfunction createSinglePlayer(activePlayer) {\n  var _class, _temp;\n\n  return _temp = _class = /*#__PURE__*/function (_Component) {\n    _inherits(SinglePlayer, _Component);\n\n    var _super = _createSuper(SinglePlayer);\n\n    function SinglePlayer() {\n      var _this;\n\n      _classCallCheck(this, SinglePlayer);\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      _this = _super.call.apply(_super, [this].concat(args));\n\n      _defineProperty(_assertThisInitialized(_this), \"config\", (0, _utils.getConfig)(_this.props, _props.defaultProps, true));\n\n      _defineProperty(_assertThisInitialized(_this), \"getDuration\", function () {\n        if (!_this.player) return null;\n        return _this.player.getDuration();\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"getCurrentTime\", function () {\n        if (!_this.player) return null;\n        return _this.player.getCurrentTime();\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"getSecondsLoaded\", function () {\n        if (!_this.player) return null;\n        return _this.player.getSecondsLoaded();\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"getInternalPlayer\", function () {\n        var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'player';\n        if (!_this.player) return null;\n        return _this.player.getInternalPlayer(key);\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"seekTo\", function (fraction, type) {\n        if (!_this.player) return null;\n\n        _this.player.seekTo(fraction, type);\n      });\n\n      _defineProperty(_assertThisInitialized(_this), \"ref\", function (player) {\n        _this.player = player;\n      });\n\n      return _this;\n    }\n\n    _createClass(SinglePlayer, [{\n      key: \"shouldComponentUpdate\",\n      value: function shouldComponentUpdate(nextProps) {\n        return !(0, _utils.isEqual)(this.props, nextProps);\n      }\n    }, {\n      key: \"componentDidUpdate\",\n      value: function componentDidUpdate() {\n        this.config = (0, _utils.getConfig)(this.props, _props.defaultProps);\n      }\n    }, {\n      key: \"render\",\n      value: function render() {\n        var _this$config$file = this.config.file,\n            forceVideo = _this$config$file.forceVideo,\n            forceAudio = _this$config$file.forceAudio,\n            forceHLS = _this$config$file.forceHLS,\n            forceDASH = _this$config$file.forceDASH;\n        var skipCanPlay = forceVideo || forceAudio || forceHLS || forceDASH;\n\n        if (!activePlayer.canPlay(this.props.url) && !skipCanPlay) {\n          return null;\n        }\n\n        var _this$props = this.props,\n            style = _this$props.style,\n            width = _this$props.width,\n            height = _this$props.height,\n            Wrapper = _this$props.wrapper;\n        var otherProps = (0, _utils.omit)(this.props, SUPPORTED_PROPS, _props.DEPRECATED_CONFIG_PROPS);\n        return /*#__PURE__*/_react[\"default\"].createElement(Wrapper, _extends({\n          style: _objectSpread({}, style, {\n            width: width,\n            height: height\n          })\n        }, otherProps), /*#__PURE__*/_react[\"default\"].createElement(_Player[\"default\"], _extends({}, this.props, {\n          ref: this.ref,\n          activePlayer: activePlayer,\n          config: this.config\n        })));\n      }\n    }]);\n\n    return SinglePlayer;\n  }(_react.Component), _defineProperty(_class, \"displayName\", \"\".concat(activePlayer.displayName, \"Player\")), _defineProperty(_class, \"propTypes\", _props.propTypes), _defineProperty(_class, \"defaultProps\", _props.defaultProps), _defineProperty(_class, \"canPlay\", activePlayer.canPlay), _temp;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.parseStartTime = parseStartTime;\nexports.parseEndTime = parseEndTime;\nexports.randomString = randomString;\nexports.queryString = queryString;\nexports.getSDK = getSDK;\nexports.getConfig = getConfig;\nexports.omit = omit;\nexports.callPlayer = callPlayer;\nexports.isObject = isObject;\nexports.isEqual = isEqual;\nexports.isMediaStream = isMediaStream;\n\nvar _react = require(\"react\");\n\nvar _loadScript = _interopRequireDefault(require(\"load-script\"));\n\nvar _deepmerge = _interopRequireDefault(require(\"deepmerge\"));\n\nvar _props = require(\"./props\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o) { if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nvar MATCH_START_QUERY = /[?&#](?:start|t)=([0-9hms]+)/;\nvar MATCH_END_QUERY = /[?&#]end=([0-9hms]+)/;\nvar MATCH_START_STAMP = /(\\d+)(h|m|s)/g;\nvar MATCH_NUMERIC = /^\\d+$/; // Parse YouTube URL for a start time param, ie ?t=1h14m30s\n// and return the start time in seconds\n\nfunction parseTimeParam(url, pattern) {\n  var match = url.match(pattern);\n\n  if (match) {\n    var stamp = match[1];\n\n    if (stamp.match(MATCH_START_STAMP)) {\n      return parseTimeString(stamp);\n    }\n\n    if (MATCH_NUMERIC.test(stamp)) {\n      return parseInt(stamp);\n    }\n  }\n\n  return undefined;\n}\n\nfunction parseTimeString(stamp) {\n  var seconds = 0;\n  var array = MATCH_START_STAMP.exec(stamp);\n\n  while (array !== null) {\n    var _array = array,\n        _array2 = _slicedToArray(_array, 3),\n        count = _array2[1],\n        period = _array2[2];\n\n    if (period === 'h') seconds += parseInt(count, 10) * 60 * 60;\n    if (period === 'm') seconds += parseInt(count, 10) * 60;\n    if (period === 's') seconds += parseInt(count, 10);\n    array = MATCH_START_STAMP.exec(stamp);\n  }\n\n  return seconds;\n}\n\nfunction parseStartTime(url) {\n  return parseTimeParam(url, MATCH_START_QUERY);\n}\n\nfunction parseEndTime(url) {\n  return parseTimeParam(url, MATCH_END_QUERY);\n} // http://stackoverflow.com/a/38622545\n\n\nfunction randomString() {\n  return Math.random().toString(36).substr(2, 5);\n}\n\nfunction queryString(object) {\n  return Object.keys(object).map(function (key) {\n    return \"\".concat(key, \"=\").concat(object[key]);\n  }).join('&');\n} // Util function to load an external SDK\n// or return the SDK if it is already loaded\n\n\nvar requests = {};\n\nfunction getSDK(url, sdkGlobal) {\n  var sdkReady = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n  var isLoaded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () {\n    return true;\n  };\n  var fetchScript = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _loadScript[\"default\"];\n\n  if (window[sdkGlobal] && isLoaded(window[sdkGlobal])) {\n    return Promise.resolve(window[sdkGlobal]);\n  }\n\n  return new Promise(function (resolve, reject) {\n    // If we are already loading the SDK, add the resolve and reject\n    // functions to the existing array of requests\n    if (requests[url]) {\n      requests[url].push({\n        resolve: resolve,\n        reject: reject\n      });\n      return;\n    }\n\n    requests[url] = [{\n      resolve: resolve,\n      reject: reject\n    }];\n\n    var onLoaded = function onLoaded(sdk) {\n      // When loaded, resolve all pending request promises\n      requests[url].forEach(function (request) {\n        return request.resolve(sdk);\n      });\n    };\n\n    if (sdkReady) {\n      var previousOnReady = window[sdkReady];\n\n      window[sdkReady] = function () {\n        if (previousOnReady) previousOnReady();\n        onLoaded(window[sdkGlobal]);\n      };\n    }\n\n    fetchScript(url, function (err) {\n      if (err) {\n        // Loading the SDK failed – reject all requests and\n        // reset the array of requests for this SDK\n        requests[url].forEach(function (request) {\n          return request.reject(err);\n        });\n        requests[url] = null;\n      } else if (!sdkReady) {\n        onLoaded(window[sdkGlobal]);\n      }\n    });\n  });\n}\n\nfunction getConfig(props, defaultProps, showWarning) {\n  var config = (0, _deepmerge[\"default\"])(defaultProps.config, props.config);\n\n  var _iterator = _createForOfIteratorHelper(_props.DEPRECATED_CONFIG_PROPS),\n      _step;\n\n  try {\n    for (_iterator.s(); !(_step = _iterator.n()).done;) {\n      var p = _step.value;\n\n      if (props[p]) {\n        var key = p.replace(/Config$/, '');\n        config = (0, _deepmerge[\"default\"])(config, _defineProperty({}, key, props[p]));\n\n        if (showWarning) {\n          var link = 'https://github.com/CookPete/react-player#config-prop';\n          var message = \"ReactPlayer: %c\".concat(p, \" %cis deprecated, please use the config prop instead \\u2013 \").concat(link);\n          console.warn(message, 'font-weight: bold', '');\n        }\n      }\n    }\n  } catch (err) {\n    _iterator.e(err);\n  } finally {\n    _iterator.f();\n  }\n\n  return config;\n}\n\nfunction omit(object) {\n  var _ref;\n\n  for (var _len = arguments.length, arrays = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    arrays[_key - 1] = arguments[_key];\n  }\n\n  var omitKeys = (_ref = []).concat.apply(_ref, arrays);\n\n  var output = {};\n  var keys = Object.keys(object);\n\n  for (var _i2 = 0, _keys = keys; _i2 < _keys.length; _i2++) {\n    var key = _keys[_i2];\n\n    if (omitKeys.indexOf(key) === -1) {\n      output[key] = object[key];\n    }\n  }\n\n  return output;\n}\n\nfunction callPlayer(method) {\n  var _this$player;\n\n  // Util method for calling a method on this.player\n  // but guard against errors and console.warn instead\n  if (!this.player || !this.player[method]) {\n    var message = \"ReactPlayer: \".concat(this.constructor.displayName, \" player could not call %c\").concat(method, \"%c \\u2013 \");\n\n    if (!this.player) {\n      message += 'The player was not available';\n    } else if (!this.player[method]) {\n      message += 'The method was not available';\n    }\n\n    console.warn(message, 'font-weight: bold', '');\n    return null;\n  }\n\n  for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    args[_key2 - 1] = arguments[_key2];\n  }\n\n  return (_this$player = this.player)[method].apply(_this$player, args);\n}\n\nfunction isObject(val) {\n  return val !== null && _typeof(val) === 'object';\n} // Deep comparison of two objects, but ignoring functions\n// and React elements, for use in shouldComponentUpdate\n\n\nfunction isEqual(a, b) {\n  if (typeof a === 'function' && typeof b === 'function') {\n    return true;\n  }\n\n  if ((0, _react.isValidElement)(a) && (0, _react.isValidElement)(b)) {\n    return true;\n  }\n\n  if (a instanceof Array && b instanceof Array) {\n    if (a.length !== b.length) {\n      return false;\n    }\n\n    for (var i = 0; i !== a.length; i++) {\n      if (!isEqual(a[i], b[i])) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  if (isObject(a) && isObject(b)) {\n    if (Object.keys(a).length !== Object.keys(b).length) {\n      return false;\n    }\n\n    for (var _i3 = 0, _Object$keys = Object.keys(a); _i3 < _Object$keys.length; _i3++) {\n      var key = _Object$keys[_i3];\n\n      if (!isEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  return a === b;\n}\n\nfunction isMediaStream(url) {\n  return typeof window !== 'undefined' && typeof window.MediaStream !== 'undefined' && url instanceof window.MediaStream;\n}","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _slicedToArray(arr, i) {\n  return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n  var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n  if (_i == null) return;\n  var _arr = [];\n  var _n = true;\n  var _d = false;\n\n  var _s, _e;\n\n  try {\n    for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n      _arr.push(_s.value);\n\n      if (i && _arr.length === i) break;\n    }\n  } catch (err) {\n    _d = true;\n    _e = err;\n  } finally {\n    try {\n      if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n    } finally {\n      if (_d) throw _e;\n    }\n  }\n\n  return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n  return arr2;\n}\n\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the filter are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\nfunction getPropertyInfo(name) {\n  return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) {\n  this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n  this.attributeName = attributeName;\n  this.attributeNamespace = attributeNamespace;\n  this.mustUseProperty = mustUseProperty;\n  this.propertyName = name;\n  this.type = type;\n  this.sanitizeURL = sanitizeURL;\n  this.removeEmptyString = removeEmptyString;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\nreservedProps.forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n  var _ref2 = _slicedToArray(_ref, 2),\n      name = _ref2[0],\n      attributeName = _ref2[1];\n\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n  name, // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n  properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n  name.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function capitalize(token) {\n  return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML attribute filter.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL\n  false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n  var name = attributeName.replace(CAMELIZE, capitalize);\n  properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n  attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL\n  false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  false, // sanitizeURL\n  false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL\nfalse);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n  properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n  attributeName.toLowerCase(), // attributeName\n  null, // attributeNamespace\n  true, // sanitizeURL\n  true);\n});\n\nvar _require = require('../lib/possibleStandardNamesOptimized'),\n    CAMELCASE = _require.CAMELCASE,\n    SAME = _require.SAME,\n    possibleStandardNamesOptimized = _require.possibleStandardNames;\n\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\n/**\n * Checks whether a property name is a custom attribute.\n *\n * @see {@link https://github.com/facebook/react/blob/15-stable/src/renderers/dom/shared/HTMLDOMPropertyConfig.js#L23-L25}\n *\n * @param {string}\n * @return {boolean}\n */\n\nvar isCustomAttribute = RegExp.prototype.test.bind( // eslint-disable-next-line no-misleading-character-class\nnew RegExp('^(data|aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$'));\nvar possibleStandardNames = Object.keys(possibleStandardNamesOptimized).reduce(function (accumulator, standardName) {\n  var propName = possibleStandardNamesOptimized[standardName];\n\n  if (propName === SAME) {\n    accumulator[standardName] = standardName;\n  } else if (propName === CAMELCASE) {\n    accumulator[standardName.toLowerCase()] = standardName;\n  } else {\n    accumulator[standardName] = propName;\n  }\n\n  return accumulator;\n}, {});\n\nexports.BOOLEAN = BOOLEAN;\nexports.BOOLEANISH_STRING = BOOLEANISH_STRING;\nexports.NUMERIC = NUMERIC;\nexports.OVERLOADED_BOOLEAN = OVERLOADED_BOOLEAN;\nexports.POSITIVE_NUMERIC = POSITIVE_NUMERIC;\nexports.RESERVED = RESERVED;\nexports.STRING = STRING;\nexports.getPropertyInfo = getPropertyInfo;\nexports.isCustomAttribute = isCustomAttribute;\nexports.possibleStandardNames = possibleStandardNames;\n","// An attribute in which the DOM/SVG standard name is the same as the React prop name (e.g., 'accept').\nvar SAME = 0;\nexports.SAME = SAME;\n\n// An attribute in which the React prop name is the camelcased version of the DOM/SVG standard name (e.g., 'acceptCharset').\nvar CAMELCASE = 1;\nexports.CAMELCASE = CAMELCASE;\n\nexports.possibleStandardNames = {\n  accept: 0,\n  acceptCharset: 1,\n  'accept-charset': 'acceptCharset',\n  accessKey: 1,\n  action: 0,\n  allowFullScreen: 1,\n  alt: 0,\n  as: 0,\n  async: 0,\n  autoCapitalize: 1,\n  autoComplete: 1,\n  autoCorrect: 1,\n  autoFocus: 1,\n  autoPlay: 1,\n  autoSave: 1,\n  capture: 0,\n  cellPadding: 1,\n  cellSpacing: 1,\n  challenge: 0,\n  charSet: 1,\n  checked: 0,\n  children: 0,\n  cite: 0,\n  class: 'className',\n  classID: 1,\n  className: 1,\n  cols: 0,\n  colSpan: 1,\n  content: 0,\n  contentEditable: 1,\n  contextMenu: 1,\n  controls: 0,\n  controlsList: 1,\n  coords: 0,\n  crossOrigin: 1,\n  dangerouslySetInnerHTML: 1,\n  data: 0,\n  dateTime: 1,\n  default: 0,\n  defaultChecked: 1,\n  defaultValue: 1,\n  defer: 0,\n  dir: 0,\n  disabled: 0,\n  disablePictureInPicture: 1,\n  disableRemotePlayback: 1,\n  download: 0,\n  draggable: 0,\n  encType: 1,\n  enterKeyHint: 1,\n  for: 'htmlFor',\n  form: 0,\n  formMethod: 1,\n  formAction: 1,\n  formEncType: 1,\n  formNoValidate: 1,\n  formTarget: 1,\n  frameBorder: 1,\n  headers: 0,\n  height: 0,\n  hidden: 0,\n  high: 0,\n  href: 0,\n  hrefLang: 1,\n  htmlFor: 1,\n  httpEquiv: 1,\n  'http-equiv': 'httpEquiv',\n  icon: 0,\n  id: 0,\n  innerHTML: 1,\n  inputMode: 1,\n  integrity: 0,\n  is: 0,\n  itemID: 1,\n  itemProp: 1,\n  itemRef: 1,\n  itemScope: 1,\n  itemType: 1,\n  keyParams: 1,\n  keyType: 1,\n  kind: 0,\n  label: 0,\n  lang: 0,\n  list: 0,\n  loop: 0,\n  low: 0,\n  manifest: 0,\n  marginWidth: 1,\n  marginHeight: 1,\n  max: 0,\n  maxLength: 1,\n  media: 0,\n  mediaGroup: 1,\n  method: 0,\n  min: 0,\n  minLength: 1,\n  multiple: 0,\n  muted: 0,\n  name: 0,\n  noModule: 1,\n  nonce: 0,\n  noValidate: 1,\n  open: 0,\n  optimum: 0,\n  pattern: 0,\n  placeholder: 0,\n  playsInline: 1,\n  poster: 0,\n  preload: 0,\n  profile: 0,\n  radioGroup: 1,\n  readOnly: 1,\n  referrerPolicy: 1,\n  rel: 0,\n  required: 0,\n  reversed: 0,\n  role: 0,\n  rows: 0,\n  rowSpan: 1,\n  sandbox: 0,\n  scope: 0,\n  scoped: 0,\n  scrolling: 0,\n  seamless: 0,\n  selected: 0,\n  shape: 0,\n  size: 0,\n  sizes: 0,\n  span: 0,\n  spellCheck: 1,\n  src: 0,\n  srcDoc: 1,\n  srcLang: 1,\n  srcSet: 1,\n  start: 0,\n  step: 0,\n  style: 0,\n  summary: 0,\n  tabIndex: 1,\n  target: 0,\n  title: 0,\n  type: 0,\n  useMap: 1,\n  value: 0,\n  width: 0,\n  wmode: 0,\n  wrap: 0,\n  about: 0,\n  accentHeight: 1,\n  'accent-height': 'accentHeight',\n  accumulate: 0,\n  additive: 0,\n  alignmentBaseline: 1,\n  'alignment-baseline': 'alignmentBaseline',\n  allowReorder: 1,\n  alphabetic: 0,\n  amplitude: 0,\n  arabicForm: 1,\n  'arabic-form': 'arabicForm',\n  ascent: 0,\n  attributeName: 1,\n  attributeType: 1,\n  autoReverse: 1,\n  azimuth: 0,\n  baseFrequency: 1,\n  baselineShift: 1,\n  'baseline-shift': 'baselineShift',\n  baseProfile: 1,\n  bbox: 0,\n  begin: 0,\n  bias: 0,\n  by: 0,\n  calcMode: 1,\n  capHeight: 1,\n  'cap-height': 'capHeight',\n  clip: 0,\n  clipPath: 1,\n  'clip-path': 'clipPath',\n  clipPathUnits: 1,\n  clipRule: 1,\n  'clip-rule': 'clipRule',\n  color: 0,\n  colorInterpolation: 1,\n  'color-interpolation': 'colorInterpolation',\n  colorInterpolationFilters: 1,\n  'color-interpolation-filters': 'colorInterpolationFilters',\n  colorProfile: 1,\n  'color-profile': 'colorProfile',\n  colorRendering: 1,\n  'color-rendering': 'colorRendering',\n  contentScriptType: 1,\n  contentStyleType: 1,\n  cursor: 0,\n  cx: 0,\n  cy: 0,\n  d: 0,\n  datatype: 0,\n  decelerate: 0,\n  descent: 0,\n  diffuseConstant: 1,\n  direction: 0,\n  display: 0,\n  divisor: 0,\n  dominantBaseline: 1,\n  'dominant-baseline': 'dominantBaseline',\n  dur: 0,\n  dx: 0,\n  dy: 0,\n  edgeMode: 1,\n  elevation: 0,\n  enableBackground: 1,\n  'enable-background': 'enableBackground',\n  end: 0,\n  exponent: 0,\n  externalResourcesRequired: 1,\n  fill: 0,\n  fillOpacity: 1,\n  'fill-opacity': 'fillOpacity',\n  fillRule: 1,\n  'fill-rule': 'fillRule',\n  filter: 0,\n  filterRes: 1,\n  filterUnits: 1,\n  floodOpacity: 1,\n  'flood-opacity': 'floodOpacity',\n  floodColor: 1,\n  'flood-color': 'floodColor',\n  focusable: 0,\n  fontFamily: 1,\n  'font-family': 'fontFamily',\n  fontSize: 1,\n  'font-size': 'fontSize',\n  fontSizeAdjust: 1,\n  'font-size-adjust': 'fontSizeAdjust',\n  fontStretch: 1,\n  'font-stretch': 'fontStretch',\n  fontStyle: 1,\n  'font-style': 'fontStyle',\n  fontVariant: 1,\n  'font-variant': 'fontVariant',\n  fontWeight: 1,\n  'font-weight': 'fontWeight',\n  format: 0,\n  from: 0,\n  fx: 0,\n  fy: 0,\n  g1: 0,\n  g2: 0,\n  glyphName: 1,\n  'glyph-name': 'glyphName',\n  glyphOrientationHorizontal: 1,\n  'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n  glyphOrientationVertical: 1,\n  'glyph-orientation-vertical': 'glyphOrientationVertical',\n  glyphRef: 1,\n  gradientTransform: 1,\n  gradientUnits: 1,\n  hanging: 0,\n  horizAdvX: 1,\n  'horiz-adv-x': 'horizAdvX',\n  horizOriginX: 1,\n  'horiz-origin-x': 'horizOriginX',\n  ideographic: 0,\n  imageRendering: 1,\n  'image-rendering': 'imageRendering',\n  in2: 0,\n  in: 0,\n  inlist: 0,\n  intercept: 0,\n  k1: 0,\n  k2: 0,\n  k3: 0,\n  k4: 0,\n  k: 0,\n  kernelMatrix: 1,\n  kernelUnitLength: 1,\n  kerning: 0,\n  keyPoints: 1,\n  keySplines: 1,\n  keyTimes: 1,\n  lengthAdjust: 1,\n  letterSpacing: 1,\n  'letter-spacing': 'letterSpacing',\n  lightingColor: 1,\n  'lighting-color': 'lightingColor',\n  limitingConeAngle: 1,\n  local: 0,\n  markerEnd: 1,\n  'marker-end': 'markerEnd',\n  markerHeight: 1,\n  markerMid: 1,\n  'marker-mid': 'markerMid',\n  markerStart: 1,\n  'marker-start': 'markerStart',\n  markerUnits: 1,\n  markerWidth: 1,\n  mask: 0,\n  maskContentUnits: 1,\n  maskUnits: 1,\n  mathematical: 0,\n  mode: 0,\n  numOctaves: 1,\n  offset: 0,\n  opacity: 0,\n  operator: 0,\n  order: 0,\n  orient: 0,\n  orientation: 0,\n  origin: 0,\n  overflow: 0,\n  overlinePosition: 1,\n  'overline-position': 'overlinePosition',\n  overlineThickness: 1,\n  'overline-thickness': 'overlineThickness',\n  paintOrder: 1,\n  'paint-order': 'paintOrder',\n  panose1: 0,\n  'panose-1': 'panose1',\n  pathLength: 1,\n  patternContentUnits: 1,\n  patternTransform: 1,\n  patternUnits: 1,\n  pointerEvents: 1,\n  'pointer-events': 'pointerEvents',\n  points: 0,\n  pointsAtX: 1,\n  pointsAtY: 1,\n  pointsAtZ: 1,\n  prefix: 0,\n  preserveAlpha: 1,\n  preserveAspectRatio: 1,\n  primitiveUnits: 1,\n  property: 0,\n  r: 0,\n  radius: 0,\n  refX: 1,\n  refY: 1,\n  renderingIntent: 1,\n  'rendering-intent': 'renderingIntent',\n  repeatCount: 1,\n  repeatDur: 1,\n  requiredExtensions: 1,\n  requiredFeatures: 1,\n  resource: 0,\n  restart: 0,\n  result: 0,\n  results: 0,\n  rotate: 0,\n  rx: 0,\n  ry: 0,\n  scale: 0,\n  security: 0,\n  seed: 0,\n  shapeRendering: 1,\n  'shape-rendering': 'shapeRendering',\n  slope: 0,\n  spacing: 0,\n  specularConstant: 1,\n  specularExponent: 1,\n  speed: 0,\n  spreadMethod: 1,\n  startOffset: 1,\n  stdDeviation: 1,\n  stemh: 0,\n  stemv: 0,\n  stitchTiles: 1,\n  stopColor: 1,\n  'stop-color': 'stopColor',\n  stopOpacity: 1,\n  'stop-opacity': 'stopOpacity',\n  strikethroughPosition: 1,\n  'strikethrough-position': 'strikethroughPosition',\n  strikethroughThickness: 1,\n  'strikethrough-thickness': 'strikethroughThickness',\n  string: 0,\n  stroke: 0,\n  strokeDasharray: 1,\n  'stroke-dasharray': 'strokeDasharray',\n  strokeDashoffset: 1,\n  'stroke-dashoffset': 'strokeDashoffset',\n  strokeLinecap: 1,\n  'stroke-linecap': 'strokeLinecap',\n  strokeLinejoin: 1,\n  'stroke-linejoin': 'strokeLinejoin',\n  strokeMiterlimit: 1,\n  'stroke-miterlimit': 'strokeMiterlimit',\n  strokeWidth: 1,\n  'stroke-width': 'strokeWidth',\n  strokeOpacity: 1,\n  'stroke-opacity': 'strokeOpacity',\n  suppressContentEditableWarning: 1,\n  suppressHydrationWarning: 1,\n  surfaceScale: 1,\n  systemLanguage: 1,\n  tableValues: 1,\n  targetX: 1,\n  targetY: 1,\n  textAnchor: 1,\n  'text-anchor': 'textAnchor',\n  textDecoration: 1,\n  'text-decoration': 'textDecoration',\n  textLength: 1,\n  textRendering: 1,\n  'text-rendering': 'textRendering',\n  to: 0,\n  transform: 0,\n  typeof: 0,\n  u1: 0,\n  u2: 0,\n  underlinePosition: 1,\n  'underline-position': 'underlinePosition',\n  underlineThickness: 1,\n  'underline-thickness': 'underlineThickness',\n  unicode: 0,\n  unicodeBidi: 1,\n  'unicode-bidi': 'unicodeBidi',\n  unicodeRange: 1,\n  'unicode-range': 'unicodeRange',\n  unitsPerEm: 1,\n  'units-per-em': 'unitsPerEm',\n  unselectable: 0,\n  vAlphabetic: 1,\n  'v-alphabetic': 'vAlphabetic',\n  values: 0,\n  vectorEffect: 1,\n  'vector-effect': 'vectorEffect',\n  version: 0,\n  vertAdvY: 1,\n  'vert-adv-y': 'vertAdvY',\n  vertOriginX: 1,\n  'vert-origin-x': 'vertOriginX',\n  vertOriginY: 1,\n  'vert-origin-y': 'vertOriginY',\n  vHanging: 1,\n  'v-hanging': 'vHanging',\n  vIdeographic: 1,\n  'v-ideographic': 'vIdeographic',\n  viewBox: 1,\n  viewTarget: 1,\n  visibility: 0,\n  vMathematical: 1,\n  'v-mathematical': 'vMathematical',\n  vocab: 0,\n  widths: 0,\n  wordSpacing: 1,\n  'word-spacing': 'wordSpacing',\n  writingMode: 1,\n  'writing-mode': 'writingMode',\n  x1: 0,\n  x2: 0,\n  x: 0,\n  xChannelSelector: 1,\n  xHeight: 1,\n  'x-height': 'xHeight',\n  xlinkActuate: 1,\n  'xlink:actuate': 'xlinkActuate',\n  xlinkArcrole: 1,\n  'xlink:arcrole': 'xlinkArcrole',\n  xlinkHref: 1,\n  'xlink:href': 'xlinkHref',\n  xlinkRole: 1,\n  'xlink:role': 'xlinkRole',\n  xlinkShow: 1,\n  'xlink:show': 'xlinkShow',\n  xlinkTitle: 1,\n  'xlink:title': 'xlinkTitle',\n  xlinkType: 1,\n  'xlink:type': 'xlinkType',\n  xmlBase: 1,\n  'xml:base': 'xmlBase',\n  xmlLang: 1,\n  'xml:lang': 'xmlLang',\n  xmlns: 0,\n  'xml:space': 'xmlSpace',\n  xmlnsXlink: 1,\n  'xmlns:xlink': 'xmlnsXlink',\n  xmlSpace: 1,\n  y1: 0,\n  y2: 0,\n  y: 0,\n  yChannelSelector: 1,\n  z: 0,\n  zoomAndPan: 1\n};\n","import React from 'react';\nexport var ReactReduxContext = /*#__PURE__*/React.createContext(null);\n\nif (process.env.NODE_ENV !== 'production') {\n  ReactReduxContext.displayName = 'ReactRedux';\n}\n\nexport default ReactReduxContext;","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\nvar batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport var setBatch = function setBatch(newBatch) {\n  return batch = newBatch;\n}; // Supply a getter just to skip dealing with ESM bindings\n\nexport var getBatch = function getBatch() {\n  return batch;\n};","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n  var batch = getBatch();\n  var first = null;\n  var last = null;\n  return {\n    clear: function clear() {\n      first = null;\n      last = null;\n    },\n    notify: function notify() {\n      batch(function () {\n        var listener = first;\n\n        while (listener) {\n          listener.callback();\n          listener = listener.next;\n        }\n      });\n    },\n    get: function get() {\n      var listeners = [];\n      var listener = first;\n\n      while (listener) {\n        listeners.push(listener);\n        listener = listener.next;\n      }\n\n      return listeners;\n    },\n    subscribe: function subscribe(callback) {\n      var isSubscribed = true;\n      var listener = last = {\n        callback: callback,\n        next: null,\n        prev: last\n      };\n\n      if (listener.prev) {\n        listener.prev.next = listener;\n      } else {\n        first = listener;\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return;\n        isSubscribed = false;\n\n        if (listener.next) {\n          listener.next.prev = listener.prev;\n        } else {\n          last = listener.prev;\n        }\n\n        if (listener.prev) {\n          listener.prev.next = listener.next;\n        } else {\n          first = listener.next;\n        }\n      };\n    }\n  };\n}\n\nvar nullListeners = {\n  notify: function notify() {},\n  get: function get() {\n    return [];\n  }\n};\nexport function createSubscription(store, parentSub) {\n  var unsubscribe;\n  var listeners = nullListeners;\n\n  function addNestedSub(listener) {\n    trySubscribe();\n    return listeners.subscribe(listener);\n  }\n\n  function notifyNestedSubs() {\n    listeners.notify();\n  }\n\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange();\n    }\n  }\n\n  function isSubscribed() {\n    return Boolean(unsubscribe);\n  }\n\n  function trySubscribe() {\n    if (!unsubscribe) {\n      unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n      listeners = createListenerCollection();\n    }\n  }\n\n  function tryUnsubscribe() {\n    if (unsubscribe) {\n      unsubscribe();\n      unsubscribe = undefined;\n      listeners.clear();\n      listeners = nullListeners;\n    }\n  }\n\n  var subscription = {\n    addNestedSub: addNestedSub,\n    notifyNestedSubs: notifyNestedSubs,\n    handleChangeWrapper: handleChangeWrapper,\n    isSubscribed: isSubscribed,\n    trySubscribe: trySubscribe,\n    tryUnsubscribe: tryUnsubscribe,\n    getListeners: function getListeners() {\n      return listeners;\n    }\n  };\n  return subscription;\n}","import { useEffect, useLayoutEffect } from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n\nexport var useIsomorphicLayoutEffect = typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined' ? useLayoutEffect : useEffect;","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider(_ref) {\n  var store = _ref.store,\n      context = _ref.context,\n      children = _ref.children;\n  var contextValue = useMemo(function () {\n    var subscription = createSubscription(store);\n    return {\n      store: store,\n      subscription: subscription\n    };\n  }, [store]);\n  var previousState = useMemo(function () {\n    return store.getState();\n  }, [store]);\n  useIsomorphicLayoutEffect(function () {\n    var subscription = contextValue.subscription;\n    subscription.onStateChange = subscription.notifyNestedSubs;\n    subscription.trySubscribe();\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs();\n    }\n\n    return function () {\n      subscription.tryUnsubscribe();\n      subscription.onStateChange = null;\n    };\n  }, [contextValue, previousState]);\n  var Context = context || ReactReduxContext;\n  return /*#__PURE__*/React.createElement(Context.Provider, {\n    value: contextValue\n  }, children);\n}\n\nif (process.env.NODE_ENV !== 'production') {\n  Provider.propTypes = {\n    store: PropTypes.shape({\n      subscribe: PropTypes.func.isRequired,\n      dispatch: PropTypes.func.isRequired,\n      getState: PropTypes.func.isRequired\n    }),\n    context: PropTypes.object,\n    children: PropTypes.any\n  };\n}\n\nexport default Provider;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"getDisplayName\", \"methodName\", \"renderCountProp\", \"shouldHandleStateChanges\", \"storeKey\", \"withRef\", \"forwardRef\", \"context\"],\n    _excluded2 = [\"reactReduxForwardedRef\"];\nimport hoistStatics from 'hoist-non-react-statics';\nimport React, { useContext, useMemo, useRef, useReducer } from 'react';\nimport { isValidElementType, isContextConsumer } from 'react-is';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from './Context'; // Define some constant arrays just to avoid re-creating these\n\nvar EMPTY_ARRAY = [];\nvar NO_SUBSCRIPTION_ARRAY = [null, null];\n\nvar stringifyComponent = function stringifyComponent(Comp) {\n  try {\n    return JSON.stringify(Comp);\n  } catch (err) {\n    return String(Comp);\n  }\n};\n\nfunction storeStateUpdatesReducer(state, action) {\n  var updateCount = state[1];\n  return [action.payload, updateCount + 1];\n}\n\nfunction useIsomorphicLayoutEffectWithArgs(effectFunc, effectArgs, dependencies) {\n  useIsomorphicLayoutEffect(function () {\n    return effectFunc.apply(void 0, effectArgs);\n  }, dependencies);\n}\n\nfunction captureWrapperProps(lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs) {\n  // We want to capture the wrapper props and child props we used for later comparisons\n  lastWrapperProps.current = wrapperProps;\n  lastChildProps.current = actualChildProps;\n  renderIsScheduled.current = false; // If the render was from a store update, clear out that reference and cascade the subscriber update\n\n  if (childPropsFromStoreUpdate.current) {\n    childPropsFromStoreUpdate.current = null;\n    notifyNestedSubs();\n  }\n}\n\nfunction subscribeUpdates(shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch) {\n  // If we're not subscribed to the store, nothing to do here\n  if (!shouldHandleStateChanges) return; // Capture values for checking if and when this component unmounts\n\n  var didUnsubscribe = false;\n  var lastThrownError = null; // We'll run this callback every time a store subscription update propagates to this component\n\n  var checkForUpdates = function checkForUpdates() {\n    if (didUnsubscribe) {\n      // Don't run stale listeners.\n      // Redux doesn't guarantee unsubscriptions happen until next dispatch.\n      return;\n    }\n\n    var latestStoreState = store.getState();\n    var newChildProps, error;\n\n    try {\n      // Actually run the selector with the most recent store state and wrapper props\n      // to determine what the child props should be\n      newChildProps = childPropsSelector(latestStoreState, lastWrapperProps.current);\n    } catch (e) {\n      error = e;\n      lastThrownError = e;\n    }\n\n    if (!error) {\n      lastThrownError = null;\n    } // If the child props haven't changed, nothing to do here - cascade the subscription update\n\n\n    if (newChildProps === lastChildProps.current) {\n      if (!renderIsScheduled.current) {\n        notifyNestedSubs();\n      }\n    } else {\n      // Save references to the new child props.  Note that we track the \"child props from store update\"\n      // as a ref instead of a useState/useReducer because we need a way to determine if that value has\n      // been processed.  If this went into useState/useReducer, we couldn't clear out the value without\n      // forcing another re-render, which we don't want.\n      lastChildProps.current = newChildProps;\n      childPropsFromStoreUpdate.current = newChildProps;\n      renderIsScheduled.current = true; // If the child props _did_ change (or we caught an error), this wrapper component needs to re-render\n\n      forceComponentUpdateDispatch({\n        type: 'STORE_UPDATED',\n        payload: {\n          error: error\n        }\n      });\n    }\n  }; // Actually subscribe to the nearest connected ancestor (or store)\n\n\n  subscription.onStateChange = checkForUpdates;\n  subscription.trySubscribe(); // Pull data from the store after first render in case the store has\n  // changed since we began.\n\n  checkForUpdates();\n\n  var unsubscribeWrapper = function unsubscribeWrapper() {\n    didUnsubscribe = true;\n    subscription.tryUnsubscribe();\n    subscription.onStateChange = null;\n\n    if (lastThrownError) {\n      // It's possible that we caught an error due to a bad mapState function, but the\n      // parent re-rendered without this component and we're about to unmount.\n      // This shouldn't happen as long as we do top-down subscriptions correctly, but\n      // if we ever do those wrong, this throw will surface the error in our tests.\n      // In that case, throw the error from here so it doesn't get lost.\n      throw lastThrownError;\n    }\n  };\n\n  return unsubscribeWrapper;\n}\n\nvar initStateUpdates = function initStateUpdates() {\n  return [null, 0];\n};\n\nexport default function connectAdvanced(\n/*\r\n  selectorFactory is a func that is responsible for returning the selector function used to\r\n  compute new props from state, props, and dispatch. For example:\r\n      export default connectAdvanced((dispatch, options) => (state, props) => ({\r\n      thing: state.things[props.thingId],\r\n      saveThing: fields => dispatch(actionCreators.saveThing(props.thingId, fields)),\r\n    }))(YourComponent)\r\n    Access to dispatch is provided to the factory so selectorFactories can bind actionCreators\r\n  outside of their selector as an optimization. Options passed to connectAdvanced are passed to\r\n  the selectorFactory, along with displayName and WrappedComponent, as the second argument.\r\n    Note that selectorFactory is responsible for all caching/memoization of inbound and outbound\r\n  props. Do not use connectAdvanced directly without memoizing results between calls to your\r\n  selector, otherwise the Connect component will re-render on every state or props change.\r\n*/\nselectorFactory, // options object:\n_ref) {\n  if (_ref === void 0) {\n    _ref = {};\n  }\n\n  var _ref2 = _ref,\n      _ref2$getDisplayName = _ref2.getDisplayName,\n      getDisplayName = _ref2$getDisplayName === void 0 ? function (name) {\n    return \"ConnectAdvanced(\" + name + \")\";\n  } : _ref2$getDisplayName,\n      _ref2$methodName = _ref2.methodName,\n      methodName = _ref2$methodName === void 0 ? 'connectAdvanced' : _ref2$methodName,\n      _ref2$renderCountProp = _ref2.renderCountProp,\n      renderCountProp = _ref2$renderCountProp === void 0 ? undefined : _ref2$renderCountProp,\n      _ref2$shouldHandleSta = _ref2.shouldHandleStateChanges,\n      shouldHandleStateChanges = _ref2$shouldHandleSta === void 0 ? true : _ref2$shouldHandleSta,\n      _ref2$storeKey = _ref2.storeKey,\n      storeKey = _ref2$storeKey === void 0 ? 'store' : _ref2$storeKey,\n      _ref2$withRef = _ref2.withRef,\n      withRef = _ref2$withRef === void 0 ? false : _ref2$withRef,\n      _ref2$forwardRef = _ref2.forwardRef,\n      forwardRef = _ref2$forwardRef === void 0 ? false : _ref2$forwardRef,\n      _ref2$context = _ref2.context,\n      context = _ref2$context === void 0 ? ReactReduxContext : _ref2$context,\n      connectOptions = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n  if (process.env.NODE_ENV !== 'production') {\n    if (renderCountProp !== undefined) {\n      throw new Error(\"renderCountProp is removed. render counting is built into the latest React Dev Tools profiling extension\");\n    }\n\n    if (withRef) {\n      throw new Error('withRef is removed. To access the wrapped instance, use a ref on the connected component');\n    }\n\n    var customStoreWarningMessage = 'To use a custom Redux store for specific components, create a custom React context with ' + \"React.createContext(), and pass the context object to React Redux's Provider and specific components\" + ' like: <Provider context={MyContext}><ConnectedComponent context={MyContext} /></Provider>. ' + 'You may also pass a {context : MyContext} option to connect';\n\n    if (storeKey !== 'store') {\n      throw new Error('storeKey has been removed and does not do anything. ' + customStoreWarningMessage);\n    }\n  }\n\n  var Context = context;\n  return function wrapWithConnect(WrappedComponent) {\n    if (process.env.NODE_ENV !== 'production' && !isValidElementType(WrappedComponent)) {\n      throw new Error(\"You must pass a component to the function returned by \" + (methodName + \". Instead received \" + stringifyComponent(WrappedComponent)));\n    }\n\n    var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name || 'Component';\n    var displayName = getDisplayName(wrappedComponentName);\n\n    var selectorFactoryOptions = _extends({}, connectOptions, {\n      getDisplayName: getDisplayName,\n      methodName: methodName,\n      renderCountProp: renderCountProp,\n      shouldHandleStateChanges: shouldHandleStateChanges,\n      storeKey: storeKey,\n      displayName: displayName,\n      wrappedComponentName: wrappedComponentName,\n      WrappedComponent: WrappedComponent\n    });\n\n    var pure = connectOptions.pure;\n\n    function createChildSelector(store) {\n      return selectorFactory(store.dispatch, selectorFactoryOptions);\n    } // If we aren't running in \"pure\" mode, we don't want to memoize values.\n    // To avoid conditionally calling hooks, we fall back to a tiny wrapper\n    // that just executes the given callback immediately.\n\n\n    var usePureOnlyMemo = pure ? useMemo : function (callback) {\n      return callback();\n    };\n\n    function ConnectFunction(props) {\n      var _useMemo = useMemo(function () {\n        // Distinguish between actual \"data\" props that were passed to the wrapper component,\n        // and values needed to control behavior (forwarded refs, alternate context instances).\n        // To maintain the wrapperProps object reference, memoize this destructuring.\n        var reactReduxForwardedRef = props.reactReduxForwardedRef,\n            wrapperProps = _objectWithoutPropertiesLoose(props, _excluded2);\n\n        return [props.context, reactReduxForwardedRef, wrapperProps];\n      }, [props]),\n          propsContext = _useMemo[0],\n          reactReduxForwardedRef = _useMemo[1],\n          wrapperProps = _useMemo[2];\n\n      var ContextToUse = useMemo(function () {\n        // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\n        // Memoize the check that determines which context instance we should use.\n        return propsContext && propsContext.Consumer && isContextConsumer( /*#__PURE__*/React.createElement(propsContext.Consumer, null)) ? propsContext : Context;\n      }, [propsContext, Context]); // Retrieve the store and ancestor subscription via context, if available\n\n      var contextValue = useContext(ContextToUse); // The store _must_ exist as either a prop or in context.\n      // We'll check to see if it _looks_ like a Redux store first.\n      // This allows us to pass through a `store` prop that is just a plain value.\n\n      var didStoreComeFromProps = Boolean(props.store) && Boolean(props.store.getState) && Boolean(props.store.dispatch);\n      var didStoreComeFromContext = Boolean(contextValue) && Boolean(contextValue.store);\n\n      if (process.env.NODE_ENV !== 'production' && !didStoreComeFromProps && !didStoreComeFromContext) {\n        throw new Error(\"Could not find \\\"store\\\" in the context of \" + (\"\\\"\" + displayName + \"\\\". Either wrap the root component in a <Provider>, \") + \"or pass a custom React context provider to <Provider> and the corresponding \" + (\"React context consumer to \" + displayName + \" in connect options.\"));\n      } // Based on the previous check, one of these must be true\n\n\n      var store = didStoreComeFromProps ? props.store : contextValue.store;\n      var childPropsSelector = useMemo(function () {\n        // The child props selector needs the store reference as an input.\n        // Re-create this selector whenever the store changes.\n        return createChildSelector(store);\n      }, [store]);\n\n      var _useMemo2 = useMemo(function () {\n        if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY; // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n\n        // This Subscription's source should match where store came from: props vs. context. A component\n        // connected to the store via props shouldn't use subscription from context, or vice versa.\n        var subscription = createSubscription(store, didStoreComeFromProps ? null : contextValue.subscription); // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n\n        // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\n        // the middle of the notification loop, where `subscription` will then be null. This can\n        // probably be avoided if Subscription's listeners logic is changed to not call listeners\n        // that have been unsubscribed in the  middle of the notification loop.\n        var notifyNestedSubs = subscription.notifyNestedSubs.bind(subscription);\n        return [subscription, notifyNestedSubs];\n      }, [store, didStoreComeFromProps, contextValue]),\n          subscription = _useMemo2[0],\n          notifyNestedSubs = _useMemo2[1]; // Determine what {store, subscription} value should be put into nested context, if necessary,\n      // and memoize that value to avoid unnecessary context updates.\n\n\n      var overriddenContextValue = useMemo(function () {\n        if (didStoreComeFromProps) {\n          // This component is directly subscribed to a store from props.\n          // We don't want descendants reading from this store - pass down whatever\n          // the existing context value is from the nearest connected ancestor.\n          return contextValue;\n        } // Otherwise, put this component's subscription instance into context, so that\n        // connected descendants won't update until after this component is done\n\n\n        return _extends({}, contextValue, {\n          subscription: subscription\n        });\n      }, [didStoreComeFromProps, contextValue, subscription]); // We need to force this wrapper component to re-render whenever a Redux store update\n      // causes a change to the calculated child component props (or we caught an error in mapState)\n\n      var _useReducer = useReducer(storeStateUpdatesReducer, EMPTY_ARRAY, initStateUpdates),\n          _useReducer$ = _useReducer[0],\n          previousStateUpdateResult = _useReducer$[0],\n          forceComponentUpdateDispatch = _useReducer[1]; // Propagate any mapState/mapDispatch errors upwards\n\n\n      if (previousStateUpdateResult && previousStateUpdateResult.error) {\n        throw previousStateUpdateResult.error;\n      } // Set up refs to coordinate values between the subscription effect and the render logic\n\n\n      var lastChildProps = useRef();\n      var lastWrapperProps = useRef(wrapperProps);\n      var childPropsFromStoreUpdate = useRef();\n      var renderIsScheduled = useRef(false);\n      var actualChildProps = usePureOnlyMemo(function () {\n        // Tricky logic here:\n        // - This render may have been triggered by a Redux store update that produced new child props\n        // - However, we may have gotten new wrapper props after that\n        // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\n        // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\n        // So, we'll use the child props from store update only if the wrapper props are the same as last time.\n        if (childPropsFromStoreUpdate.current && wrapperProps === lastWrapperProps.current) {\n          return childPropsFromStoreUpdate.current;\n        } // TODO We're reading the store directly in render() here. Bad idea?\n        // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\n        // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\n        // to determine what the child props should be.\n\n\n        return childPropsSelector(store.getState(), wrapperProps);\n      }, [store, previousStateUpdateResult, wrapperProps]); // We need this to execute synchronously every time we re-render. However, React warns\n      // about useLayoutEffect in SSR, so we try to detect environment and fall back to\n      // just useEffect instead to avoid the warning, since neither will run anyway.\n\n      useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [lastWrapperProps, lastChildProps, renderIsScheduled, wrapperProps, actualChildProps, childPropsFromStoreUpdate, notifyNestedSubs]); // Our re-subscribe logic only runs when the store/subscription setup changes\n\n      useIsomorphicLayoutEffectWithArgs(subscribeUpdates, [shouldHandleStateChanges, store, subscription, childPropsSelector, lastWrapperProps, lastChildProps, renderIsScheduled, childPropsFromStoreUpdate, notifyNestedSubs, forceComponentUpdateDispatch], [store, subscription, childPropsSelector]); // Now that all that's done, we can finally try to actually render the child component.\n      // We memoize the elements for the rendered child component as an optimization.\n\n      var renderedWrappedComponent = useMemo(function () {\n        return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, actualChildProps, {\n          ref: reactReduxForwardedRef\n        }));\n      }, [reactReduxForwardedRef, WrappedComponent, actualChildProps]); // If React sees the exact same element reference as last time, it bails out of re-rendering\n      // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\n\n      var renderedChild = useMemo(function () {\n        if (shouldHandleStateChanges) {\n          // If this component is subscribed to store updates, we need to pass its own\n          // subscription instance down to our descendants. That means rendering the same\n          // Context instance, and putting a different value into the context.\n          return /*#__PURE__*/React.createElement(ContextToUse.Provider, {\n            value: overriddenContextValue\n          }, renderedWrappedComponent);\n        }\n\n        return renderedWrappedComponent;\n      }, [ContextToUse, renderedWrappedComponent, overriddenContextValue]);\n      return renderedChild;\n    } // If we're in \"pure\" mode, ensure our wrapper component only re-renders when incoming props have changed.\n\n\n    var Connect = pure ? React.memo(ConnectFunction) : ConnectFunction;\n    Connect.WrappedComponent = WrappedComponent;\n    Connect.displayName = ConnectFunction.displayName = displayName;\n\n    if (forwardRef) {\n      var forwarded = React.forwardRef(function forwardConnectRef(props, ref) {\n        return /*#__PURE__*/React.createElement(Connect, _extends({}, props, {\n          reactReduxForwardedRef: ref\n        }));\n      });\n      forwarded.displayName = displayName;\n      forwarded.WrappedComponent = WrappedComponent;\n      return hoistStatics(forwarded, WrappedComponent);\n    }\n\n    return hoistStatics(Connect, WrappedComponent);\n  };\n}","function is(x, y) {\n  if (x === y) {\n    return x !== 0 || y !== 0 || 1 / x === 1 / y;\n  } else {\n    return x !== x && y !== y;\n  }\n}\n\nexport default function shallowEqual(objA, objB) {\n  if (is(objA, objB)) return true;\n\n  if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return false;\n\n  for (var i = 0; i < keysA.length; i++) {\n    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n      return false;\n    }\n  }\n\n  return true;\n}","import verifyPlainObject from '../utils/verifyPlainObject';\nexport function wrapMapToPropsConstant(getConstant) {\n  return function initConstantSelector(dispatch, options) {\n    var constant = getConstant(dispatch, options);\n\n    function constantSelector() {\n      return constant;\n    }\n\n    constantSelector.dependsOnOwnProps = false;\n    return constantSelector;\n  };\n} // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args\n// to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine\n// whether mapToProps needs to be invoked when props have changed.\n//\n// A length of one signals that mapToProps does not depend on props from the parent component.\n// A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and\n// therefore not reporting its length accurately..\n\nexport function getDependsOnOwnProps(mapToProps) {\n  return mapToProps.dependsOnOwnProps !== null && mapToProps.dependsOnOwnProps !== undefined ? Boolean(mapToProps.dependsOnOwnProps) : mapToProps.length !== 1;\n} // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction,\n// this function wraps mapToProps in a proxy function which does several things:\n//\n//  * Detects whether the mapToProps function being called depends on props, which\n//    is used by selectorFactory to decide if it should reinvoke on props changes.\n//\n//  * On first call, handles mapToProps if returns another function, and treats that\n//    new function as the true mapToProps for subsequent calls.\n//\n//  * On first call, verifies the first result is a plain object, in order to warn\n//    the developer that their mapToProps function is not returning a valid result.\n//\n\nexport function wrapMapToPropsFunc(mapToProps, methodName) {\n  return function initProxySelector(dispatch, _ref) {\n    var displayName = _ref.displayName;\n\n    var proxy = function mapToPropsProxy(stateOrDispatch, ownProps) {\n      return proxy.dependsOnOwnProps ? proxy.mapToProps(stateOrDispatch, ownProps) : proxy.mapToProps(stateOrDispatch);\n    }; // allow detectFactoryAndVerify to get ownProps\n\n\n    proxy.dependsOnOwnProps = true;\n\n    proxy.mapToProps = function detectFactoryAndVerify(stateOrDispatch, ownProps) {\n      proxy.mapToProps = mapToProps;\n      proxy.dependsOnOwnProps = getDependsOnOwnProps(mapToProps);\n      var props = proxy(stateOrDispatch, ownProps);\n\n      if (typeof props === 'function') {\n        proxy.mapToProps = props;\n        proxy.dependsOnOwnProps = getDependsOnOwnProps(props);\n        props = proxy(stateOrDispatch, ownProps);\n      }\n\n      if (process.env.NODE_ENV !== 'production') verifyPlainObject(props, displayName, methodName);\n      return props;\n    };\n\n    return proxy;\n  };\n}","import bindActionCreators from '../utils/bindActionCreators';\nimport { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapDispatchToPropsIsFunction(mapDispatchToProps) {\n  return typeof mapDispatchToProps === 'function' ? wrapMapToPropsFunc(mapDispatchToProps, 'mapDispatchToProps') : undefined;\n}\nexport function whenMapDispatchToPropsIsMissing(mapDispatchToProps) {\n  return !mapDispatchToProps ? wrapMapToPropsConstant(function (dispatch) {\n    return {\n      dispatch: dispatch\n    };\n  }) : undefined;\n}\nexport function whenMapDispatchToPropsIsObject(mapDispatchToProps) {\n  return mapDispatchToProps && typeof mapDispatchToProps === 'object' ? wrapMapToPropsConstant(function (dispatch) {\n    return bindActionCreators(mapDispatchToProps, dispatch);\n  }) : undefined;\n}\nexport default [whenMapDispatchToPropsIsFunction, whenMapDispatchToPropsIsMissing, whenMapDispatchToPropsIsObject];","export default function bindActionCreators(actionCreators, dispatch) {\n  var boundActionCreators = {};\n\n  var _loop = function _loop(key) {\n    var actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = function () {\n        return dispatch(actionCreator.apply(void 0, arguments));\n      };\n    }\n  };\n\n  for (var key in actionCreators) {\n    _loop(key);\n  }\n\n  return boundActionCreators;\n}","import { wrapMapToPropsConstant, wrapMapToPropsFunc } from './wrapMapToProps';\nexport function whenMapStateToPropsIsFunction(mapStateToProps) {\n  return typeof mapStateToProps === 'function' ? wrapMapToPropsFunc(mapStateToProps, 'mapStateToProps') : undefined;\n}\nexport function whenMapStateToPropsIsMissing(mapStateToProps) {\n  return !mapStateToProps ? wrapMapToPropsConstant(function () {\n    return {};\n  }) : undefined;\n}\nexport default [whenMapStateToPropsIsFunction, whenMapStateToPropsIsMissing];","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport verifyPlainObject from '../utils/verifyPlainObject';\nexport function defaultMergeProps(stateProps, dispatchProps, ownProps) {\n  return _extends({}, ownProps, stateProps, dispatchProps);\n}\nexport function wrapMergePropsFunc(mergeProps) {\n  return function initMergePropsProxy(dispatch, _ref) {\n    var displayName = _ref.displayName,\n        pure = _ref.pure,\n        areMergedPropsEqual = _ref.areMergedPropsEqual;\n    var hasRunOnce = false;\n    var mergedProps;\n    return function mergePropsProxy(stateProps, dispatchProps, ownProps) {\n      var nextMergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n\n      if (hasRunOnce) {\n        if (!pure || !areMergedPropsEqual(nextMergedProps, mergedProps)) mergedProps = nextMergedProps;\n      } else {\n        hasRunOnce = true;\n        mergedProps = nextMergedProps;\n        if (process.env.NODE_ENV !== 'production') verifyPlainObject(mergedProps, displayName, 'mergeProps');\n      }\n\n      return mergedProps;\n    };\n  };\n}\nexport function whenMergePropsIsFunction(mergeProps) {\n  return typeof mergeProps === 'function' ? wrapMergePropsFunc(mergeProps) : undefined;\n}\nexport function whenMergePropsIsOmitted(mergeProps) {\n  return !mergeProps ? function () {\n    return defaultMergeProps;\n  } : undefined;\n}\nexport default [whenMergePropsIsFunction, whenMergePropsIsOmitted];","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"initMapStateToProps\", \"initMapDispatchToProps\", \"initMergeProps\"];\nimport verifySubselectors from './verifySubselectors';\nexport function impureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch) {\n  return function impureFinalPropsSelector(state, ownProps) {\n    return mergeProps(mapStateToProps(state, ownProps), mapDispatchToProps(dispatch, ownProps), ownProps);\n  };\n}\nexport function pureFinalPropsSelectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, _ref) {\n  var areStatesEqual = _ref.areStatesEqual,\n      areOwnPropsEqual = _ref.areOwnPropsEqual,\n      areStatePropsEqual = _ref.areStatePropsEqual;\n  var hasRunAtLeastOnce = false;\n  var state;\n  var ownProps;\n  var stateProps;\n  var dispatchProps;\n  var mergedProps;\n\n  function handleFirstCall(firstState, firstOwnProps) {\n    state = firstState;\n    ownProps = firstOwnProps;\n    stateProps = mapStateToProps(state, ownProps);\n    dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    hasRunAtLeastOnce = true;\n    return mergedProps;\n  }\n\n  function handleNewPropsAndNewState() {\n    stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewProps() {\n    if (mapStateToProps.dependsOnOwnProps) stateProps = mapStateToProps(state, ownProps);\n    if (mapDispatchToProps.dependsOnOwnProps) dispatchProps = mapDispatchToProps(dispatch, ownProps);\n    mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleNewState() {\n    var nextStateProps = mapStateToProps(state, ownProps);\n    var statePropsChanged = !areStatePropsEqual(nextStateProps, stateProps);\n    stateProps = nextStateProps;\n    if (statePropsChanged) mergedProps = mergeProps(stateProps, dispatchProps, ownProps);\n    return mergedProps;\n  }\n\n  function handleSubsequentCalls(nextState, nextOwnProps) {\n    var propsChanged = !areOwnPropsEqual(nextOwnProps, ownProps);\n    var stateChanged = !areStatesEqual(nextState, state);\n    state = nextState;\n    ownProps = nextOwnProps;\n    if (propsChanged && stateChanged) return handleNewPropsAndNewState();\n    if (propsChanged) return handleNewProps();\n    if (stateChanged) return handleNewState();\n    return mergedProps;\n  }\n\n  return function pureFinalPropsSelector(nextState, nextOwnProps) {\n    return hasRunAtLeastOnce ? handleSubsequentCalls(nextState, nextOwnProps) : handleFirstCall(nextState, nextOwnProps);\n  };\n} // TODO: Add more comments\n// If pure is true, the selector returned by selectorFactory will memoize its results,\n// allowing connectAdvanced's shouldComponentUpdate to return false if final\n// props have not changed. If false, the selector will always return a new\n// object and shouldComponentUpdate will always return true.\n\nexport default function finalPropsSelectorFactory(dispatch, _ref2) {\n  var initMapStateToProps = _ref2.initMapStateToProps,\n      initMapDispatchToProps = _ref2.initMapDispatchToProps,\n      initMergeProps = _ref2.initMergeProps,\n      options = _objectWithoutPropertiesLoose(_ref2, _excluded);\n\n  var mapStateToProps = initMapStateToProps(dispatch, options);\n  var mapDispatchToProps = initMapDispatchToProps(dispatch, options);\n  var mergeProps = initMergeProps(dispatch, options);\n\n  if (process.env.NODE_ENV !== 'production') {\n    verifySubselectors(mapStateToProps, mapDispatchToProps, mergeProps, options.displayName);\n  }\n\n  var selectorFactory = options.pure ? pureFinalPropsSelectorFactory : impureFinalPropsSelectorFactory;\n  return selectorFactory(mapStateToProps, mapDispatchToProps, mergeProps, dispatch, options);\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nvar _excluded = [\"pure\", \"areStatesEqual\", \"areOwnPropsEqual\", \"areStatePropsEqual\", \"areMergedPropsEqual\"];\nimport connectAdvanced from '../components/connectAdvanced';\nimport shallowEqual from '../utils/shallowEqual';\nimport defaultMapDispatchToPropsFactories from './mapDispatchToProps';\nimport defaultMapStateToPropsFactories from './mapStateToProps';\nimport defaultMergePropsFactories from './mergeProps';\nimport defaultSelectorFactory from './selectorFactory';\n/*\r\n  connect is a facade over connectAdvanced. It turns its args into a compatible\r\n  selectorFactory, which has the signature:\r\n\r\n    (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps\r\n  \r\n  connect passes its args to connectAdvanced as options, which will in turn pass them to\r\n  selectorFactory each time a Connect component instance is instantiated or hot reloaded.\r\n\r\n  selectorFactory returns a final props selector from its mapStateToProps,\r\n  mapStateToPropsFactories, mapDispatchToProps, mapDispatchToPropsFactories, mergeProps,\r\n  mergePropsFactories, and pure args.\r\n\r\n  The resulting final props selector is called by the Connect component instance whenever\r\n  it receives new props or store state.\r\n */\n\nfunction match(arg, factories, name) {\n  for (var i = factories.length - 1; i >= 0; i--) {\n    var result = factories[i](arg);\n    if (result) return result;\n  }\n\n  return function (dispatch, options) {\n    throw new Error(\"Invalid value of type \" + typeof arg + \" for \" + name + \" argument when connecting component \" + options.wrappedComponentName + \".\");\n  };\n}\n\nfunction strictEqual(a, b) {\n  return a === b;\n} // createConnect with default args builds the 'official' connect behavior. Calling it with\n// different options opens up some testing and extensibility scenarios\n\n\nexport function createConnect(_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n      _ref$connectHOC = _ref.connectHOC,\n      connectHOC = _ref$connectHOC === void 0 ? connectAdvanced : _ref$connectHOC,\n      _ref$mapStateToPropsF = _ref.mapStateToPropsFactories,\n      mapStateToPropsFactories = _ref$mapStateToPropsF === void 0 ? defaultMapStateToPropsFactories : _ref$mapStateToPropsF,\n      _ref$mapDispatchToPro = _ref.mapDispatchToPropsFactories,\n      mapDispatchToPropsFactories = _ref$mapDispatchToPro === void 0 ? defaultMapDispatchToPropsFactories : _ref$mapDispatchToPro,\n      _ref$mergePropsFactor = _ref.mergePropsFactories,\n      mergePropsFactories = _ref$mergePropsFactor === void 0 ? defaultMergePropsFactories : _ref$mergePropsFactor,\n      _ref$selectorFactory = _ref.selectorFactory,\n      selectorFactory = _ref$selectorFactory === void 0 ? defaultSelectorFactory : _ref$selectorFactory;\n\n  return function connect(mapStateToProps, mapDispatchToProps, mergeProps, _ref2) {\n    if (_ref2 === void 0) {\n      _ref2 = {};\n    }\n\n    var _ref3 = _ref2,\n        _ref3$pure = _ref3.pure,\n        pure = _ref3$pure === void 0 ? true : _ref3$pure,\n        _ref3$areStatesEqual = _ref3.areStatesEqual,\n        areStatesEqual = _ref3$areStatesEqual === void 0 ? strictEqual : _ref3$areStatesEqual,\n        _ref3$areOwnPropsEqua = _ref3.areOwnPropsEqual,\n        areOwnPropsEqual = _ref3$areOwnPropsEqua === void 0 ? shallowEqual : _ref3$areOwnPropsEqua,\n        _ref3$areStatePropsEq = _ref3.areStatePropsEqual,\n        areStatePropsEqual = _ref3$areStatePropsEq === void 0 ? shallowEqual : _ref3$areStatePropsEq,\n        _ref3$areMergedPropsE = _ref3.areMergedPropsEqual,\n        areMergedPropsEqual = _ref3$areMergedPropsE === void 0 ? shallowEqual : _ref3$areMergedPropsE,\n        extraOptions = _objectWithoutPropertiesLoose(_ref3, _excluded);\n\n    var initMapStateToProps = match(mapStateToProps, mapStateToPropsFactories, 'mapStateToProps');\n    var initMapDispatchToProps = match(mapDispatchToProps, mapDispatchToPropsFactories, 'mapDispatchToProps');\n    var initMergeProps = match(mergeProps, mergePropsFactories, 'mergeProps');\n    return connectHOC(selectorFactory, _extends({\n      // used in error messages\n      methodName: 'connect',\n      // used to compute Connect's displayName from the wrapped component's displayName.\n      getDisplayName: function getDisplayName(name) {\n        return \"Connect(\" + name + \")\";\n      },\n      // if mapStateToProps is falsy, the Connect component doesn't subscribe to store state changes\n      shouldHandleStateChanges: Boolean(mapStateToProps),\n      // passed through to selectorFactory\n      initMapStateToProps: initMapStateToProps,\n      initMapDispatchToProps: initMapDispatchToProps,\n      initMergeProps: initMergeProps,\n      pure: pure,\n      areStatesEqual: areStatesEqual,\n      areOwnPropsEqual: areOwnPropsEqual,\n      areStatePropsEqual: areStatePropsEqual,\n      areMergedPropsEqual: areMergedPropsEqual\n    }, extraOptions));\n  };\n}\nexport default /*#__PURE__*/createConnect();","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n *   const { store } = useReduxContext()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport function useReduxContext() {\n  var contextValue = useContext(ReactReduxContext);\n\n  if (process.env.NODE_ENV !== 'production' && !contextValue) {\n    throw new Error('could not find react-redux context value; please ensure the component is wrapped in a <Provider>');\n  }\n\n  return contextValue;\n}","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context) {\n  if (context === void 0) {\n    context = ReactReduxContext;\n  }\n\n  var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n    return useContext(context);\n  };\n  return function useStore() {\n    var _useReduxContext = useReduxContext(),\n        store = _useReduxContext.store;\n\n    return store;\n  };\n}\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n *   const store = useStore()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport var useStore = /*#__PURE__*/createStoreHook();","import { ReactReduxContext } from '../components/Context';\nimport { useStore as useDefaultStore, createStoreHook } from './useStore';\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context) {\n  if (context === void 0) {\n    context = ReactReduxContext;\n  }\n\n  var useStore = context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n  return function useDispatch() {\n    var store = useStore();\n    return store.dispatch;\n  };\n}\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n *   const dispatch = useDispatch()\r\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n *   return (\r\n *     <div>\r\n *       <span>{value}</span>\r\n *       <button onClick={increaseCounter}>Increase counter</button>\r\n *     </div>\r\n *   )\r\n * }\r\n */\n\nexport var useDispatch = /*#__PURE__*/createDispatchHook();","import { useReducer, useRef, useMemo, useContext, useDebugValue } from 'react';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from '../components/Context';\n\nvar refEquality = function refEquality(a, b) {\n  return a === b;\n};\n\nfunction useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) {\n  var _useReducer = useReducer(function (s) {\n    return s + 1;\n  }, 0),\n      forceRender = _useReducer[1];\n\n  var subscription = useMemo(function () {\n    return createSubscription(store, contextSub);\n  }, [store, contextSub]);\n  var latestSubscriptionCallbackError = useRef();\n  var latestSelector = useRef();\n  var latestStoreState = useRef();\n  var latestSelectedState = useRef();\n  var storeState = store.getState();\n  var selectedState;\n\n  try {\n    if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) {\n      var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references\n\n      if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) {\n        selectedState = newSelectedState;\n      } else {\n        selectedState = latestSelectedState.current;\n      }\n    } else {\n      selectedState = latestSelectedState.current;\n    }\n  } catch (err) {\n    if (latestSubscriptionCallbackError.current) {\n      err.message += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\n\";\n    }\n\n    throw err;\n  }\n\n  useIsomorphicLayoutEffect(function () {\n    latestSelector.current = selector;\n    latestStoreState.current = storeState;\n    latestSelectedState.current = selectedState;\n    latestSubscriptionCallbackError.current = undefined;\n  });\n  useIsomorphicLayoutEffect(function () {\n    function checkForUpdates() {\n      try {\n        var newStoreState = store.getState(); // Avoid calling selector multiple times if the store's state has not changed\n\n        if (newStoreState === latestStoreState.current) {\n          return;\n        }\n\n        var _newSelectedState = latestSelector.current(newStoreState);\n\n        if (equalityFn(_newSelectedState, latestSelectedState.current)) {\n          return;\n        }\n\n        latestSelectedState.current = _newSelectedState;\n        latestStoreState.current = newStoreState;\n      } catch (err) {\n        // we ignore all errors here, since when the component\n        // is re-rendered, the selectors are called again, and\n        // will throw again, if neither props nor store state\n        // changed\n        latestSubscriptionCallbackError.current = err;\n      }\n\n      forceRender();\n    }\n\n    subscription.onStateChange = checkForUpdates;\n    subscription.trySubscribe();\n    checkForUpdates();\n    return function () {\n      return subscription.tryUnsubscribe();\n    };\n  }, [store, subscription]);\n  return selectedState;\n}\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context) {\n  if (context === void 0) {\n    context = ReactReduxContext;\n  }\n\n  var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n    return useContext(context);\n  };\n  return function useSelector(selector, equalityFn) {\n    if (equalityFn === void 0) {\n      equalityFn = refEquality;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!selector) {\n        throw new Error(\"You must pass a selector to useSelector\");\n      }\n\n      if (typeof selector !== 'function') {\n        throw new Error(\"You must pass a function as a selector to useSelector\");\n      }\n\n      if (typeof equalityFn !== 'function') {\n        throw new Error(\"You must pass a function as an equality function to useSelector\");\n      }\n    }\n\n    var _useReduxContext = useReduxContext(),\n        store = _useReduxContext.store,\n        contextSub = _useReduxContext.subscription;\n\n    var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub);\n    useDebugValue(selectedState);\n    return selectedState;\n  };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n *   const counter = useSelector(state => state.counter)\r\n *   return <div>{counter}</div>\r\n * }\r\n */\n\nexport var useSelector = /*#__PURE__*/createSelectorHook();","export * from './exports';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch'; // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };","/** @license React v17.0.2\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=60103,c=60106,d=60107,e=60108,f=60114,g=60109,h=60110,k=60112,l=60113,m=60120,n=60115,p=60116,q=60121,r=60122,u=60117,v=60129,w=60131;\nif(\"function\"===typeof Symbol&&Symbol.for){var x=Symbol.for;b=x(\"react.element\");c=x(\"react.portal\");d=x(\"react.fragment\");e=x(\"react.strict_mode\");f=x(\"react.profiler\");g=x(\"react.provider\");h=x(\"react.context\");k=x(\"react.forward_ref\");l=x(\"react.suspense\");m=x(\"react.suspense_list\");n=x(\"react.memo\");p=x(\"react.lazy\");q=x(\"react.block\");r=x(\"react.server.block\");u=x(\"react.fundamental\");v=x(\"react.debug_trace_mode\");w=x(\"react.legacy_hidden\")}\nfunction y(a){if(\"object\"===typeof a&&null!==a){var t=a.$$typeof;switch(t){case b:switch(a=a.type,a){case d:case f:case e:case l:case m:return a;default:switch(a=a&&a.$$typeof,a){case h:case k:case p:case n:case g:return a;default:return t}}case c:return t}}}var z=g,A=b,B=k,C=d,D=p,E=n,F=c,G=f,H=e,I=l;exports.ContextConsumer=h;exports.ContextProvider=z;exports.Element=A;exports.ForwardRef=B;exports.Fragment=C;exports.Lazy=D;exports.Memo=E;exports.Portal=F;exports.Profiler=G;exports.StrictMode=H;\nexports.Suspense=I;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return y(a)===h};exports.isContextProvider=function(a){return y(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return y(a)===k};exports.isFragment=function(a){return y(a)===d};exports.isLazy=function(a){return y(a)===p};exports.isMemo=function(a){return y(a)===n};\nexports.isPortal=function(a){return y(a)===c};exports.isProfiler=function(a){return y(a)===f};exports.isStrictMode=function(a){return y(a)===e};exports.isSuspense=function(a){return y(a)===l};exports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===v||a===e||a===l||a===m||a===w||\"object\"===typeof a&&null!==a&&(a.$$typeof===p||a.$$typeof===n||a.$$typeof===g||a.$$typeof===h||a.$$typeof===k||a.$$typeof===u||a.$$typeof===q||a[0]===r)?!0:!1};\nexports.typeOf=y;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","import { Router, __RouterContext, matchPath } from 'react-router';\nexport { MemoryRouter, Prompt, Redirect, Route, Router, StaticRouter, Switch, generatePath, matchPath, useHistory, useLocation, useParams, useRouteMatch, withRouter } from 'react-router';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport React from 'react';\nimport { createBrowserHistory, createHashHistory, createLocation, createPath } from 'history';\nimport PropTypes from 'prop-types';\nimport warning from 'tiny-warning';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport invariant from 'tiny-invariant';\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\n\nvar BrowserRouter = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(BrowserRouter, _React$Component);\n\n  function BrowserRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createBrowserHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = BrowserRouter.prototype;\n\n  _proto.render = function render() {\n    return /*#__PURE__*/React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return BrowserRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  BrowserRouter.propTypes = {\n    basename: PropTypes.string,\n    children: PropTypes.node,\n    forceRefresh: PropTypes.bool,\n    getUserConfirmation: PropTypes.func,\n    keyLength: PropTypes.number\n  };\n\n  BrowserRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<BrowserRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\") : void 0;\n  };\n}\n\n/**\n * The public API for a <Router> that uses window.location.hash.\n */\n\nvar HashRouter = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(HashRouter, _React$Component);\n\n  function HashRouter() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.history = createHashHistory(_this.props);\n    return _this;\n  }\n\n  var _proto = HashRouter.prototype;\n\n  _proto.render = function render() {\n    return /*#__PURE__*/React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n\n  return HashRouter;\n}(React.Component);\n\nif (process.env.NODE_ENV !== \"production\") {\n  HashRouter.propTypes = {\n    basename: PropTypes.string,\n    children: PropTypes.node,\n    getUserConfirmation: PropTypes.func,\n    hashType: PropTypes.oneOf([\"hashbang\", \"noslash\", \"slash\"])\n  };\n\n  HashRouter.prototype.componentDidMount = function () {\n    process.env.NODE_ENV !== \"production\" ? warning(!this.props.history, \"<HashRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { HashRouter as Router }`.\") : void 0;\n  };\n}\n\nvar resolveToLocation = function resolveToLocation(to, currentLocation) {\n  return typeof to === \"function\" ? to(currentLocation) : to;\n};\nvar normalizeToLocation = function normalizeToLocation(to, currentLocation) {\n  return typeof to === \"string\" ? createLocation(to, null, null, currentLocation) : to;\n};\n\nvar forwardRefShim = function forwardRefShim(C) {\n  return C;\n};\n\nvar forwardRef = React.forwardRef;\n\nif (typeof forwardRef === \"undefined\") {\n  forwardRef = forwardRefShim;\n}\n\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\n\nvar LinkAnchor = forwardRef(function (_ref, forwardedRef) {\n  var innerRef = _ref.innerRef,\n      navigate = _ref.navigate,\n      _onClick = _ref.onClick,\n      rest = _objectWithoutPropertiesLoose(_ref, [\"innerRef\", \"navigate\", \"onClick\"]);\n\n  var target = rest.target;\n\n  var props = _extends({}, rest, {\n    onClick: function onClick(event) {\n      try {\n        if (_onClick) _onClick(event);\n      } catch (ex) {\n        event.preventDefault();\n        throw ex;\n      }\n\n      if (!event.defaultPrevented && // onClick prevented default\n      event.button === 0 && ( // ignore everything but left clicks\n      !target || target === \"_self\") && // let browser handle \"target=_blank\" etc.\n      !isModifiedEvent(event) // ignore clicks with modifier keys\n      ) {\n          event.preventDefault();\n          navigate();\n        }\n    }\n  }); // React 15 compat\n\n\n  if (forwardRefShim !== forwardRef) {\n    props.ref = forwardedRef || innerRef;\n  } else {\n    props.ref = innerRef;\n  }\n  /* eslint-disable-next-line jsx-a11y/anchor-has-content */\n\n\n  return /*#__PURE__*/React.createElement(\"a\", props);\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n  LinkAnchor.displayName = \"LinkAnchor\";\n}\n/**\n * The public API for rendering a history-aware <a>.\n */\n\n\nvar Link = forwardRef(function (_ref2, forwardedRef) {\n  var _ref2$component = _ref2.component,\n      component = _ref2$component === void 0 ? LinkAnchor : _ref2$component,\n      replace = _ref2.replace,\n      to = _ref2.to,\n      innerRef = _ref2.innerRef,\n      rest = _objectWithoutPropertiesLoose(_ref2, [\"component\", \"replace\", \"to\", \"innerRef\"]);\n\n  return /*#__PURE__*/React.createElement(__RouterContext.Consumer, null, function (context) {\n    !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <Link> outside a <Router>\") : invariant(false) : void 0;\n    var history = context.history;\n    var location = normalizeToLocation(resolveToLocation(to, context.location), context.location);\n    var href = location ? history.createHref(location) : \"\";\n\n    var props = _extends({}, rest, {\n      href: href,\n      navigate: function navigate() {\n        var location = resolveToLocation(to, context.location);\n        var isDuplicateNavigation = createPath(context.location) === createPath(normalizeToLocation(location));\n        var method = replace || isDuplicateNavigation ? history.replace : history.push;\n        method(location);\n      }\n    }); // React 15 compat\n\n\n    if (forwardRefShim !== forwardRef) {\n      props.ref = forwardedRef || innerRef;\n    } else {\n      props.innerRef = innerRef;\n    }\n\n    return /*#__PURE__*/React.createElement(component, props);\n  });\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n  var toType = PropTypes.oneOfType([PropTypes.string, PropTypes.object, PropTypes.func]);\n  var refType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.shape({\n    current: PropTypes.any\n  })]);\n  Link.displayName = \"Link\";\n  Link.propTypes = {\n    innerRef: refType,\n    onClick: PropTypes.func,\n    replace: PropTypes.bool,\n    target: PropTypes.string,\n    to: toType.isRequired\n  };\n}\n\nvar forwardRefShim$1 = function forwardRefShim(C) {\n  return C;\n};\n\nvar forwardRef$1 = React.forwardRef;\n\nif (typeof forwardRef$1 === \"undefined\") {\n  forwardRef$1 = forwardRefShim$1;\n}\n\nfunction joinClassnames() {\n  for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) {\n    classnames[_key] = arguments[_key];\n  }\n\n  return classnames.filter(function (i) {\n    return i;\n  }).join(\" \");\n}\n/**\n * A <Link> wrapper that knows if it's \"active\" or not.\n */\n\n\nvar NavLink = forwardRef$1(function (_ref, forwardedRef) {\n  var _ref$ariaCurrent = _ref[\"aria-current\"],\n      ariaCurrent = _ref$ariaCurrent === void 0 ? \"page\" : _ref$ariaCurrent,\n      _ref$activeClassName = _ref.activeClassName,\n      activeClassName = _ref$activeClassName === void 0 ? \"active\" : _ref$activeClassName,\n      activeStyle = _ref.activeStyle,\n      classNameProp = _ref.className,\n      exact = _ref.exact,\n      isActiveProp = _ref.isActive,\n      locationProp = _ref.location,\n      sensitive = _ref.sensitive,\n      strict = _ref.strict,\n      styleProp = _ref.style,\n      to = _ref.to,\n      innerRef = _ref.innerRef,\n      rest = _objectWithoutPropertiesLoose(_ref, [\"aria-current\", \"activeClassName\", \"activeStyle\", \"className\", \"exact\", \"isActive\", \"location\", \"sensitive\", \"strict\", \"style\", \"to\", \"innerRef\"]);\n\n  return /*#__PURE__*/React.createElement(__RouterContext.Consumer, null, function (context) {\n    !context ? process.env.NODE_ENV !== \"production\" ? invariant(false, \"You should not use <NavLink> outside a <Router>\") : invariant(false) : void 0;\n    var currentLocation = locationProp || context.location;\n    var toLocation = normalizeToLocation(resolveToLocation(to, currentLocation), currentLocation);\n    var path = toLocation.pathname; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202\n\n    var escapedPath = path && path.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, \"\\\\$1\");\n    var match = escapedPath ? matchPath(currentLocation.pathname, {\n      path: escapedPath,\n      exact: exact,\n      sensitive: sensitive,\n      strict: strict\n    }) : null;\n    var isActive = !!(isActiveProp ? isActiveProp(match, currentLocation) : match);\n    var className = typeof classNameProp === \"function\" ? classNameProp(isActive) : classNameProp;\n    var style = typeof styleProp === \"function\" ? styleProp(isActive) : styleProp;\n\n    if (isActive) {\n      className = joinClassnames(className, activeClassName);\n      style = _extends({}, style, activeStyle);\n    }\n\n    var props = _extends({\n      \"aria-current\": isActive && ariaCurrent || null,\n      className: className,\n      style: style,\n      to: toLocation\n    }, rest); // React 15 compat\n\n\n    if (forwardRefShim$1 !== forwardRef$1) {\n      props.ref = forwardedRef || innerRef;\n    } else {\n      props.innerRef = innerRef;\n    }\n\n    return /*#__PURE__*/React.createElement(Link, props);\n  });\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n  NavLink.displayName = \"NavLink\";\n  var ariaCurrentType = PropTypes.oneOf([\"page\", \"step\", \"location\", \"date\", \"time\", \"true\", \"false\"]);\n  NavLink.propTypes = _extends({}, Link.propTypes, {\n    \"aria-current\": ariaCurrentType,\n    activeClassName: PropTypes.string,\n    activeStyle: PropTypes.object,\n    className: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n    exact: PropTypes.bool,\n    isActive: PropTypes.func,\n    location: PropTypes.object,\n    sensitive: PropTypes.bool,\n    strict: PropTypes.bool,\n    style: PropTypes.oneOfType([PropTypes.object, PropTypes.func])\n  });\n}\n\nexport { BrowserRouter, HashRouter, Link, NavLink };\n//# sourceMappingURL=react-router-dom.js.map\n","import { J as cleanValue, E as valueTernary, a as _objectSpread2 } from './index-a7690a33.esm.js';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport { useMemo, useCallback } from 'react';\nimport { g as getOptionValue, a as getOptionLabel } from './Select-54ac8379.esm.js';\n\nvar _excluded = [\"allowCreateWhileLoading\", \"createOptionPosition\", \"formatCreateLabel\", \"isValidNewOption\", \"getNewOptionData\", \"onCreateOption\", \"options\", \"onChange\"];\n\nvar compareOption = function compareOption() {\n  var inputValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n  var option = arguments.length > 1 ? arguments[1] : undefined;\n  var accessors = arguments.length > 2 ? arguments[2] : undefined;\n  var candidate = String(inputValue).toLowerCase();\n  var optionValue = String(accessors.getOptionValue(option)).toLowerCase();\n  var optionLabel = String(accessors.getOptionLabel(option)).toLowerCase();\n  return optionValue === candidate || optionLabel === candidate;\n};\n\nvar builtins = {\n  formatCreateLabel: function formatCreateLabel(inputValue) {\n    return \"Create \\\"\".concat(inputValue, \"\\\"\");\n  },\n  isValidNewOption: function isValidNewOption(inputValue, selectValue, selectOptions, accessors) {\n    return !(!inputValue || selectValue.some(function (option) {\n      return compareOption(inputValue, option, accessors);\n    }) || selectOptions.some(function (option) {\n      return compareOption(inputValue, option, accessors);\n    }));\n  },\n  getNewOptionData: function getNewOptionData(inputValue, optionLabel) {\n    return {\n      label: optionLabel,\n      value: inputValue,\n      __isNew__: true\n    };\n  }\n};\nfunction useCreatable(_ref) {\n  var _ref$allowCreateWhile = _ref.allowCreateWhileLoading,\n      allowCreateWhileLoading = _ref$allowCreateWhile === void 0 ? false : _ref$allowCreateWhile,\n      _ref$createOptionPosi = _ref.createOptionPosition,\n      createOptionPosition = _ref$createOptionPosi === void 0 ? 'last' : _ref$createOptionPosi,\n      _ref$formatCreateLabe = _ref.formatCreateLabel,\n      formatCreateLabel = _ref$formatCreateLabe === void 0 ? builtins.formatCreateLabel : _ref$formatCreateLabe,\n      _ref$isValidNewOption = _ref.isValidNewOption,\n      isValidNewOption = _ref$isValidNewOption === void 0 ? builtins.isValidNewOption : _ref$isValidNewOption,\n      _ref$getNewOptionData = _ref.getNewOptionData,\n      getNewOptionData = _ref$getNewOptionData === void 0 ? builtins.getNewOptionData : _ref$getNewOptionData,\n      onCreateOption = _ref.onCreateOption,\n      _ref$options = _ref.options,\n      propsOptions = _ref$options === void 0 ? [] : _ref$options,\n      propsOnChange = _ref.onChange,\n      restSelectProps = _objectWithoutProperties(_ref, _excluded);\n\n  var _restSelectProps$getO = restSelectProps.getOptionValue,\n      getOptionValue$1 = _restSelectProps$getO === void 0 ? getOptionValue : _restSelectProps$getO,\n      _restSelectProps$getO2 = restSelectProps.getOptionLabel,\n      getOptionLabel$1 = _restSelectProps$getO2 === void 0 ? getOptionLabel : _restSelectProps$getO2,\n      inputValue = restSelectProps.inputValue,\n      isLoading = restSelectProps.isLoading,\n      isMulti = restSelectProps.isMulti,\n      value = restSelectProps.value,\n      name = restSelectProps.name;\n  var newOption = useMemo(function () {\n    return isValidNewOption(inputValue, cleanValue(value), propsOptions, {\n      getOptionValue: getOptionValue$1,\n      getOptionLabel: getOptionLabel$1\n    }) ? getNewOptionData(inputValue, formatCreateLabel(inputValue)) : undefined;\n  }, [formatCreateLabel, getNewOptionData, getOptionLabel$1, getOptionValue$1, inputValue, isValidNewOption, propsOptions, value]);\n  var options = useMemo(function () {\n    return (allowCreateWhileLoading || !isLoading) && newOption ? createOptionPosition === 'first' ? [newOption].concat(_toConsumableArray(propsOptions)) : [].concat(_toConsumableArray(propsOptions), [newOption]) : propsOptions;\n  }, [allowCreateWhileLoading, createOptionPosition, isLoading, newOption, propsOptions]);\n  var onChange = useCallback(function (newValue, actionMeta) {\n    if (actionMeta.action !== 'select-option') {\n      return propsOnChange(newValue, actionMeta);\n    }\n\n    var valueArray = Array.isArray(newValue) ? newValue : [newValue];\n\n    if (valueArray[valueArray.length - 1] === newOption) {\n      if (onCreateOption) onCreateOption(inputValue);else {\n        var newOptionData = getNewOptionData(inputValue, inputValue);\n        var newActionMeta = {\n          action: 'create-option',\n          name: name,\n          option: newOptionData\n        };\n        propsOnChange(valueTernary(isMulti, [].concat(_toConsumableArray(cleanValue(value)), [newOptionData]), newOptionData), newActionMeta);\n      }\n      return;\n    }\n\n    propsOnChange(newValue, actionMeta);\n  }, [getNewOptionData, inputValue, isMulti, name, newOption, onCreateOption, propsOnChange, value]);\n  return _objectSpread2(_objectSpread2({}, restSelectProps), {}, {\n    options: options,\n    onChange: onChange\n  });\n}\n\nexport { useCreatable as u };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport { S as Select } from '../../dist/Select-54ac8379.esm.js';\nimport { u as useStateManager } from '../../dist/useStateManager-68425271.esm.js';\nimport { u as useCreatable } from '../../dist/useCreatable-8a6670a3.esm.js';\nexport { u as useCreatable } from '../../dist/useCreatable-8a6670a3.esm.js';\nimport '../../dist/index-a7690a33.esm.js';\nimport '@emotion/react';\nimport '@babel/runtime/helpers/taggedTemplateLiteral';\nimport '@babel/runtime/helpers/objectWithoutProperties';\nimport '@babel/runtime/helpers/slicedToArray';\nimport '@babel/runtime/helpers/typeof';\nimport '@babel/runtime/helpers/classCallCheck';\nimport '@babel/runtime/helpers/createClass';\nimport '@babel/runtime/helpers/inherits';\nimport '@babel/runtime/helpers/defineProperty';\nimport 'react-dom';\nimport '@babel/runtime/helpers/toConsumableArray';\nimport 'memoize-one';\n\nvar CreatableSelect = /*#__PURE__*/forwardRef(function (props, ref) {\n  var creatableProps = useStateManager(props);\n  var selectProps = useCreatable(creatableProps);\n  return /*#__PURE__*/React.createElement(Select, _extends({\n    ref: ref\n  }, selectProps));\n});\n\nexport default CreatableSelect;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { a as _objectSpread2, r as removeProps, s as supportsPassiveEvents, b as clearIndicatorCSS, d as containerCSS, e as css$1, f as dropdownIndicatorCSS, g as groupCSS, h as groupHeadingCSS, i as indicatorsContainerCSS, j as indicatorSeparatorCSS, k as inputCSS, l as loadingIndicatorCSS, m as loadingMessageCSS, n as menuCSS, o as menuListCSS, p as menuPortalCSS, q as multiValueCSS, t as multiValueLabelCSS, u as multiValueRemoveCSS, v as noOptionsMessageCSS, w as optionCSS, x as placeholderCSS, y as css$2, z as valueContainerCSS, A as isTouchCapable, B as isMobileDevice, _ as _createSuper, C as multiValueAsValue, D as singleValueAsValue, E as valueTernary, F as classNames, G as defaultComponents, H as notNullish, I as isDocumentElement, J as cleanValue, K as scrollIntoView, L as noop, M as MenuPlacer } from './index-a7690a33.esm.js';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _toConsumableArray from '@babel/runtime/helpers/esm/toConsumableArray';\nimport * as React from 'react';\nimport { useMemo, Fragment, useRef, useCallback, useEffect, Component } from 'react';\nimport { jsx, css } from '@emotion/react';\nimport memoizeOne from 'memoize-one';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__$1() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\n\nvar _ref = process.env.NODE_ENV === \"production\" ? {\n  name: \"7pg0cj-a11yText\",\n  styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap\"\n} : {\n  name: \"1f43avz-a11yText-A11yText\",\n  styles: \"label:a11yText;z-index:9999;border:0;clip:rect(1px, 1px, 1px, 1px);height:1px;width:1px;position:absolute;overflow:hidden;padding:0;white-space:nowrap;label:A11yText;\",\n  map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkExMXlUZXh0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNSSIsImZpbGUiOiJBMTF5VGV4dC50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGpzeCBqc3ggKi9cbmltcG9ydCB7IGpzeCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcblxuLy8gQXNzaXN0aXZlIHRleHQgdG8gZGVzY3JpYmUgdmlzdWFsIGVsZW1lbnRzLiBIaWRkZW4gZm9yIHNpZ2h0ZWQgdXNlcnMuXG5jb25zdCBBMTF5VGV4dCA9IChwcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ10pID0+IChcbiAgPHNwYW5cbiAgICBjc3M9e3tcbiAgICAgIGxhYmVsOiAnYTExeVRleHQnLFxuICAgICAgekluZGV4OiA5OTk5LFxuICAgICAgYm9yZGVyOiAwLFxuICAgICAgY2xpcDogJ3JlY3QoMXB4LCAxcHgsIDFweCwgMXB4KScsXG4gICAgICBoZWlnaHQ6IDEsXG4gICAgICB3aWR0aDogMSxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgcGFkZGluZzogMCxcbiAgICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IGRlZmF1bHQgQTExeVRleHQ7XG4iXX0= */\",\n  toString: _EMOTION_STRINGIFIED_CSS_ERROR__$1\n};\n\nvar A11yText = function A11yText(props) {\n  return jsx(\"span\", _extends({\n    css: _ref\n  }, props));\n};\n\nvar defaultAriaLiveMessages = {\n  guidance: function guidance(props) {\n    var isSearchable = props.isSearchable,\n        isMulti = props.isMulti,\n        isDisabled = props.isDisabled,\n        tabSelectsValue = props.tabSelectsValue,\n        context = props.context;\n\n    switch (context) {\n      case 'menu':\n        return \"Use Up and Down to choose options\".concat(isDisabled ? '' : ', press Enter to select the currently focused option', \", press Escape to exit the menu\").concat(tabSelectsValue ? ', press Tab to select the option and exit the menu' : '', \".\");\n\n      case 'input':\n        return \"\".concat(props['aria-label'] || 'Select', \" is focused \").concat(isSearchable ? ',type to refine list' : '', \", press Down to open the menu, \").concat(isMulti ? ' press left to focus selected values' : '');\n\n      case 'value':\n        return 'Use left and right to toggle between focused values, press Backspace to remove the currently focused value';\n\n      default:\n        return '';\n    }\n  },\n  onChange: function onChange(props) {\n    var action = props.action,\n        _props$label = props.label,\n        label = _props$label === void 0 ? '' : _props$label,\n        labels = props.labels,\n        isDisabled = props.isDisabled;\n\n    switch (action) {\n      case 'deselect-option':\n      case 'pop-value':\n      case 'remove-value':\n        return \"option \".concat(label, \", deselected.\");\n\n      case 'clear':\n        return 'All selected options have been cleared.';\n\n      case 'initial-input-focus':\n        return \"option\".concat(labels.length > 1 ? 's' : '', \" \").concat(labels.join(','), \", selected.\");\n\n      case 'select-option':\n        return isDisabled ? \"option \".concat(label, \" is disabled. Select another option.\") : \"option \".concat(label, \", selected.\");\n\n      default:\n        return '';\n    }\n  },\n  onFocus: function onFocus(props) {\n    var context = props.context,\n        focused = props.focused,\n        options = props.options,\n        _props$label2 = props.label,\n        label = _props$label2 === void 0 ? '' : _props$label2,\n        selectValue = props.selectValue,\n        isDisabled = props.isDisabled,\n        isSelected = props.isSelected;\n\n    var getArrayIndex = function getArrayIndex(arr, item) {\n      return arr && arr.length ? \"\".concat(arr.indexOf(item) + 1, \" of \").concat(arr.length) : '';\n    };\n\n    if (context === 'value' && selectValue) {\n      return \"value \".concat(label, \" focused, \").concat(getArrayIndex(selectValue, focused), \".\");\n    }\n\n    if (context === 'menu') {\n      var disabled = isDisabled ? ' disabled' : '';\n      var status = \"\".concat(isSelected ? 'selected' : 'focused').concat(disabled);\n      return \"option \".concat(label, \" \").concat(status, \", \").concat(getArrayIndex(options, focused), \".\");\n    }\n\n    return '';\n  },\n  onFilter: function onFilter(props) {\n    var inputValue = props.inputValue,\n        resultsMessage = props.resultsMessage;\n    return \"\".concat(resultsMessage).concat(inputValue ? ' for search term ' + inputValue : '', \".\");\n  }\n};\n\nvar LiveRegion = function LiveRegion(props) {\n  var ariaSelection = props.ariaSelection,\n      focusedOption = props.focusedOption,\n      focusedValue = props.focusedValue,\n      focusableOptions = props.focusableOptions,\n      isFocused = props.isFocused,\n      selectValue = props.selectValue,\n      selectProps = props.selectProps,\n      id = props.id;\n  var ariaLiveMessages = selectProps.ariaLiveMessages,\n      getOptionLabel = selectProps.getOptionLabel,\n      inputValue = selectProps.inputValue,\n      isMulti = selectProps.isMulti,\n      isOptionDisabled = selectProps.isOptionDisabled,\n      isSearchable = selectProps.isSearchable,\n      menuIsOpen = selectProps.menuIsOpen,\n      options = selectProps.options,\n      screenReaderStatus = selectProps.screenReaderStatus,\n      tabSelectsValue = selectProps.tabSelectsValue;\n  var ariaLabel = selectProps['aria-label'];\n  var ariaLive = selectProps['aria-live']; // Update aria live message configuration when prop changes\n\n  var messages = useMemo(function () {\n    return _objectSpread2(_objectSpread2({}, defaultAriaLiveMessages), ariaLiveMessages || {});\n  }, [ariaLiveMessages]); // Update aria live selected option when prop changes\n\n  var ariaSelected = useMemo(function () {\n    var message = '';\n\n    if (ariaSelection && messages.onChange) {\n      var option = ariaSelection.option,\n          selectedOptions = ariaSelection.options,\n          removedValue = ariaSelection.removedValue,\n          removedValues = ariaSelection.removedValues,\n          value = ariaSelection.value; // select-option when !isMulti does not return option so we assume selected option is value\n\n      var asOption = function asOption(val) {\n        return !Array.isArray(val) ? val : null;\n      }; // If there is just one item from the action then get its label\n\n\n      var selected = removedValue || option || asOption(value);\n      var label = selected ? getOptionLabel(selected) : ''; // If there are multiple items from the action then return an array of labels\n\n      var multiSelected = selectedOptions || removedValues || undefined;\n      var labels = multiSelected ? multiSelected.map(getOptionLabel) : [];\n\n      var onChangeProps = _objectSpread2({\n        // multiSelected items are usually items that have already been selected\n        // or set by the user as a default value so we assume they are not disabled\n        isDisabled: selected && isOptionDisabled(selected, selectValue),\n        label: label,\n        labels: labels\n      }, ariaSelection);\n\n      message = messages.onChange(onChangeProps);\n    }\n\n    return message;\n  }, [ariaSelection, messages, isOptionDisabled, selectValue, getOptionLabel]);\n  var ariaFocused = useMemo(function () {\n    var focusMsg = '';\n    var focused = focusedOption || focusedValue;\n    var isSelected = !!(focusedOption && selectValue && selectValue.includes(focusedOption));\n\n    if (focused && messages.onFocus) {\n      var onFocusProps = {\n        focused: focused,\n        label: getOptionLabel(focused),\n        isDisabled: isOptionDisabled(focused, selectValue),\n        isSelected: isSelected,\n        options: options,\n        context: focused === focusedOption ? 'menu' : 'value',\n        selectValue: selectValue\n      };\n      focusMsg = messages.onFocus(onFocusProps);\n    }\n\n    return focusMsg;\n  }, [focusedOption, focusedValue, getOptionLabel, isOptionDisabled, messages, options, selectValue]);\n  var ariaResults = useMemo(function () {\n    var resultsMsg = '';\n\n    if (menuIsOpen && options.length && messages.onFilter) {\n      var resultsMessage = screenReaderStatus({\n        count: focusableOptions.length\n      });\n      resultsMsg = messages.onFilter({\n        inputValue: inputValue,\n        resultsMessage: resultsMessage\n      });\n    }\n\n    return resultsMsg;\n  }, [focusableOptions, inputValue, menuIsOpen, messages, options, screenReaderStatus]);\n  var ariaGuidance = useMemo(function () {\n    var guidanceMsg = '';\n\n    if (messages.guidance) {\n      var context = focusedValue ? 'value' : menuIsOpen ? 'menu' : 'input';\n      guidanceMsg = messages.guidance({\n        'aria-label': ariaLabel,\n        context: context,\n        isDisabled: focusedOption && isOptionDisabled(focusedOption, selectValue),\n        isMulti: isMulti,\n        isSearchable: isSearchable,\n        tabSelectsValue: tabSelectsValue\n      });\n    }\n\n    return guidanceMsg;\n  }, [ariaLabel, focusedOption, focusedValue, isMulti, isOptionDisabled, isSearchable, menuIsOpen, messages, selectValue, tabSelectsValue]);\n  var ariaContext = \"\".concat(ariaFocused, \" \").concat(ariaResults, \" \").concat(ariaGuidance);\n  var ScreenReaderText = jsx(Fragment, null, jsx(\"span\", {\n    id: \"aria-selection\"\n  }, ariaSelected), jsx(\"span\", {\n    id: \"aria-context\"\n  }, ariaContext));\n  var isInitialFocus = (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus';\n  return jsx(Fragment, null, jsx(A11yText, {\n    id: id\n  }, isInitialFocus && ScreenReaderText), jsx(A11yText, {\n    \"aria-live\": ariaLive,\n    \"aria-atomic\": \"false\",\n    \"aria-relevant\": \"additions text\"\n  }, isFocused && !isInitialFocus && ScreenReaderText));\n};\n\nvar diacritics = [{\n  base: 'A',\n  letters: \"A\\u24B6\\uFF21\\xC0\\xC1\\xC2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\xC3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\xC4\\u01DE\\u1EA2\\xC5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F\"\n}, {\n  base: 'AA',\n  letters: \"\\uA732\"\n}, {\n  base: 'AE',\n  letters: \"\\xC6\\u01FC\\u01E2\"\n}, {\n  base: 'AO',\n  letters: \"\\uA734\"\n}, {\n  base: 'AU',\n  letters: \"\\uA736\"\n}, {\n  base: 'AV',\n  letters: \"\\uA738\\uA73A\"\n}, {\n  base: 'AY',\n  letters: \"\\uA73C\"\n}, {\n  base: 'B',\n  letters: \"B\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181\"\n}, {\n  base: 'C',\n  letters: \"C\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\xC7\\u1E08\\u0187\\u023B\\uA73E\"\n}, {\n  base: 'D',\n  letters: \"D\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779\"\n}, {\n  base: 'DZ',\n  letters: \"\\u01F1\\u01C4\"\n}, {\n  base: 'Dz',\n  letters: \"\\u01F2\\u01C5\"\n}, {\n  base: 'E',\n  letters: \"E\\u24BA\\uFF25\\xC8\\xC9\\xCA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\xCB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E\"\n}, {\n  base: 'F',\n  letters: \"F\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B\"\n}, {\n  base: 'G',\n  letters: \"G\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E\"\n}, {\n  base: 'H',\n  letters: \"H\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D\"\n}, {\n  base: 'I',\n  letters: \"I\\u24BE\\uFF29\\xCC\\xCD\\xCE\\u0128\\u012A\\u012C\\u0130\\xCF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197\"\n}, {\n  base: 'J',\n  letters: \"J\\u24BF\\uFF2A\\u0134\\u0248\"\n}, {\n  base: 'K',\n  letters: \"K\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2\"\n}, {\n  base: 'L',\n  letters: \"L\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780\"\n}, {\n  base: 'LJ',\n  letters: \"\\u01C7\"\n}, {\n  base: 'Lj',\n  letters: \"\\u01C8\"\n}, {\n  base: 'M',\n  letters: \"M\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C\"\n}, {\n  base: 'N',\n  letters: \"N\\u24C3\\uFF2E\\u01F8\\u0143\\xD1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4\"\n}, {\n  base: 'NJ',\n  letters: \"\\u01CA\"\n}, {\n  base: 'Nj',\n  letters: \"\\u01CB\"\n}, {\n  base: 'O',\n  letters: \"O\\u24C4\\uFF2F\\xD2\\xD3\\xD4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\xD5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\xD6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\xD8\\u01FE\\u0186\\u019F\\uA74A\\uA74C\"\n}, {\n  base: 'OI',\n  letters: \"\\u01A2\"\n}, {\n  base: 'OO',\n  letters: \"\\uA74E\"\n}, {\n  base: 'OU',\n  letters: \"\\u0222\"\n}, {\n  base: 'P',\n  letters: \"P\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754\"\n}, {\n  base: 'Q',\n  letters: \"Q\\u24C6\\uFF31\\uA756\\uA758\\u024A\"\n}, {\n  base: 'R',\n  letters: \"R\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782\"\n}, {\n  base: 'S',\n  letters: \"S\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784\"\n}, {\n  base: 'T',\n  letters: \"T\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786\"\n}, {\n  base: 'TZ',\n  letters: \"\\uA728\"\n}, {\n  base: 'U',\n  letters: \"U\\u24CA\\uFF35\\xD9\\xDA\\xDB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\xDC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244\"\n}, {\n  base: 'V',\n  letters: \"V\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245\"\n}, {\n  base: 'VY',\n  letters: \"\\uA760\"\n}, {\n  base: 'W',\n  letters: \"W\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72\"\n}, {\n  base: 'X',\n  letters: \"X\\u24CD\\uFF38\\u1E8A\\u1E8C\"\n}, {\n  base: 'Y',\n  letters: \"Y\\u24CE\\uFF39\\u1EF2\\xDD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE\"\n}, {\n  base: 'Z',\n  letters: \"Z\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762\"\n}, {\n  base: 'a',\n  letters: \"a\\u24D0\\uFF41\\u1E9A\\xE0\\xE1\\xE2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\xE3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\xE4\\u01DF\\u1EA3\\xE5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250\"\n}, {\n  base: 'aa',\n  letters: \"\\uA733\"\n}, {\n  base: 'ae',\n  letters: \"\\xE6\\u01FD\\u01E3\"\n}, {\n  base: 'ao',\n  letters: \"\\uA735\"\n}, {\n  base: 'au',\n  letters: \"\\uA737\"\n}, {\n  base: 'av',\n  letters: \"\\uA739\\uA73B\"\n}, {\n  base: 'ay',\n  letters: \"\\uA73D\"\n}, {\n  base: 'b',\n  letters: \"b\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253\"\n}, {\n  base: 'c',\n  letters: \"c\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\xE7\\u1E09\\u0188\\u023C\\uA73F\\u2184\"\n}, {\n  base: 'd',\n  letters: \"d\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A\"\n}, {\n  base: 'dz',\n  letters: \"\\u01F3\\u01C6\"\n}, {\n  base: 'e',\n  letters: \"e\\u24D4\\uFF45\\xE8\\xE9\\xEA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\xEB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD\"\n}, {\n  base: 'f',\n  letters: \"f\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C\"\n}, {\n  base: 'g',\n  letters: \"g\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F\"\n}, {\n  base: 'h',\n  letters: \"h\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265\"\n}, {\n  base: 'hv',\n  letters: \"\\u0195\"\n}, {\n  base: 'i',\n  letters: \"i\\u24D8\\uFF49\\xEC\\xED\\xEE\\u0129\\u012B\\u012D\\xEF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131\"\n}, {\n  base: 'j',\n  letters: \"j\\u24D9\\uFF4A\\u0135\\u01F0\\u0249\"\n}, {\n  base: 'k',\n  letters: \"k\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3\"\n}, {\n  base: 'l',\n  letters: \"l\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747\"\n}, {\n  base: 'lj',\n  letters: \"\\u01C9\"\n}, {\n  base: 'm',\n  letters: \"m\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F\"\n}, {\n  base: 'n',\n  letters: \"n\\u24DD\\uFF4E\\u01F9\\u0144\\xF1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5\"\n}, {\n  base: 'nj',\n  letters: \"\\u01CC\"\n}, {\n  base: 'o',\n  letters: \"o\\u24DE\\uFF4F\\xF2\\xF3\\xF4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\xF5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\xF6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\xF8\\u01FF\\u0254\\uA74B\\uA74D\\u0275\"\n}, {\n  base: 'oi',\n  letters: \"\\u01A3\"\n}, {\n  base: 'ou',\n  letters: \"\\u0223\"\n}, {\n  base: 'oo',\n  letters: \"\\uA74F\"\n}, {\n  base: 'p',\n  letters: \"p\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755\"\n}, {\n  base: 'q',\n  letters: \"q\\u24E0\\uFF51\\u024B\\uA757\\uA759\"\n}, {\n  base: 'r',\n  letters: \"r\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783\"\n}, {\n  base: 's',\n  letters: \"s\\u24E2\\uFF53\\xDF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B\"\n}, {\n  base: 't',\n  letters: \"t\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787\"\n}, {\n  base: 'tz',\n  letters: \"\\uA729\"\n}, {\n  base: 'u',\n  letters: \"u\\u24E4\\uFF55\\xF9\\xFA\\xFB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\xFC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289\"\n}, {\n  base: 'v',\n  letters: \"v\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C\"\n}, {\n  base: 'vy',\n  letters: \"\\uA761\"\n}, {\n  base: 'w',\n  letters: \"w\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73\"\n}, {\n  base: 'x',\n  letters: \"x\\u24E7\\uFF58\\u1E8B\\u1E8D\"\n}, {\n  base: 'y',\n  letters: \"y\\u24E8\\uFF59\\u1EF3\\xFD\\u0177\\u1EF9\\u0233\\u1E8F\\xFF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF\"\n}, {\n  base: 'z',\n  letters: \"z\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763\"\n}];\nvar anyDiacritic = new RegExp('[' + diacritics.map(function (d) {\n  return d.letters;\n}).join('') + ']', 'g');\nvar diacriticToBase = {};\n\nfor (var i = 0; i < diacritics.length; i++) {\n  var diacritic = diacritics[i];\n\n  for (var j = 0; j < diacritic.letters.length; j++) {\n    diacriticToBase[diacritic.letters[j]] = diacritic.base;\n  }\n}\n\nvar stripDiacritics = function stripDiacritics(str) {\n  return str.replace(anyDiacritic, function (match) {\n    return diacriticToBase[match];\n  });\n};\n\nvar memoizedStripDiacriticsForInput = memoizeOne(stripDiacritics);\n\nvar trimString = function trimString(str) {\n  return str.replace(/^\\s+|\\s+$/g, '');\n};\n\nvar defaultStringify = function defaultStringify(option) {\n  return \"\".concat(option.label, \" \").concat(option.value);\n};\n\nvar createFilter = function createFilter(config) {\n  return function (option, rawInput) {\n    // eslint-disable-next-line no-underscore-dangle\n    if (option.data.__isNew__) return true;\n\n    var _ignoreCase$ignoreAcc = _objectSpread2({\n      ignoreCase: true,\n      ignoreAccents: true,\n      stringify: defaultStringify,\n      trim: true,\n      matchFrom: 'any'\n    }, config),\n        ignoreCase = _ignoreCase$ignoreAcc.ignoreCase,\n        ignoreAccents = _ignoreCase$ignoreAcc.ignoreAccents,\n        stringify = _ignoreCase$ignoreAcc.stringify,\n        trim = _ignoreCase$ignoreAcc.trim,\n        matchFrom = _ignoreCase$ignoreAcc.matchFrom;\n\n    var input = trim ? trimString(rawInput) : rawInput;\n    var candidate = trim ? trimString(stringify(option)) : stringify(option);\n\n    if (ignoreCase) {\n      input = input.toLowerCase();\n      candidate = candidate.toLowerCase();\n    }\n\n    if (ignoreAccents) {\n      input = memoizedStripDiacriticsForInput(input);\n      candidate = stripDiacritics(candidate);\n    }\n\n    return matchFrom === 'start' ? candidate.substr(0, input.length) === input : candidate.indexOf(input) > -1;\n  };\n};\n\nvar _excluded = [\"innerRef\"];\nfunction DummyInput(_ref) {\n  var innerRef = _ref.innerRef,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  // Remove animation props not meant for HTML elements\n  var filteredProps = removeProps(props, 'onExited', 'in', 'enter', 'exit', 'appear');\n  return jsx(\"input\", _extends({\n    ref: innerRef\n  }, filteredProps, {\n    css: /*#__PURE__*/css({\n      label: 'dummyInput',\n      // get rid of any default styles\n      background: 0,\n      border: 0,\n      // important! this hides the flashing cursor\n      caretColor: 'transparent',\n      fontSize: 'inherit',\n      gridArea: '1 / 1 / 2 / 3',\n      outline: 0,\n      padding: 0,\n      // important! without `width` browsers won't allow focus\n      width: 1,\n      // remove cursor on desktop\n      color: 'transparent',\n      // remove cursor on mobile whilst maintaining \"scroll into view\" behaviour\n      left: -100,\n      opacity: 0,\n      position: 'relative',\n      transform: 'scale(.01)'\n    }, process.env.NODE_ENV === \"production\" ? \"\" : \";label:DummyInput;\", process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR1bW15SW5wdXQudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCTSIsImZpbGUiOiJEdW1teUlucHV0LnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgcmVtb3ZlUHJvcHMgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIER1bW15SW5wdXQoe1xuICBpbm5lclJlZixcbiAgLi4ucHJvcHNcbn06IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snaW5wdXQnXSAmIHtcbiAgcmVhZG9ubHkgaW5uZXJSZWY6IFJlZjxIVE1MSW5wdXRFbGVtZW50Pjtcbn0pIHtcbiAgLy8gUmVtb3ZlIGFuaW1hdGlvbiBwcm9wcyBub3QgbWVhbnQgZm9yIEhUTUwgZWxlbWVudHNcbiAgY29uc3QgZmlsdGVyZWRQcm9wcyA9IHJlbW92ZVByb3BzKFxuICAgIHByb3BzLFxuICAgICdvbkV4aXRlZCcsXG4gICAgJ2luJyxcbiAgICAnZW50ZXInLFxuICAgICdleGl0JyxcbiAgICAnYXBwZWFyJ1xuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9e2lubmVyUmVmfVxuICAgICAgey4uLmZpbHRlcmVkUHJvcHN9XG4gICAgICBjc3M9e3tcbiAgICAgICAgbGFiZWw6ICdkdW1teUlucHV0JyxcbiAgICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgZGVmYXVsdCBzdHlsZXNcbiAgICAgICAgYmFja2dyb3VuZDogMCxcbiAgICAgICAgYm9yZGVyOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHRoaXMgaGlkZXMgdGhlIGZsYXNoaW5nIGN1cnNvclxuICAgICAgICBjYXJldENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICBmb250U2l6ZTogJ2luaGVyaXQnLFxuICAgICAgICBncmlkQXJlYTogJzEgLyAxIC8gMiAvIDMnLFxuICAgICAgICBvdXRsaW5lOiAwLFxuICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAvLyBpbXBvcnRhbnQhIHdpdGhvdXQgYHdpZHRoYCBicm93c2VycyB3b24ndCBhbGxvdyBmb2N1c1xuICAgICAgICB3aWR0aDogMSxcblxuICAgICAgICAvLyByZW1vdmUgY3Vyc29yIG9uIGRlc2t0b3BcbiAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG5cbiAgICAgICAgLy8gcmVtb3ZlIGN1cnNvciBvbiBtb2JpbGUgd2hpbHN0IG1haW50YWluaW5nIFwic2Nyb2xsIGludG8gdmlld1wiIGJlaGF2aW91clxuICAgICAgICBsZWZ0OiAtMTAwLFxuICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoLjAxKScsXG4gICAgICB9fVxuICAgIC8+XG4gICk7XG59XG4iXX0= */\")\n  }));\n}\n\nvar cancelScroll = function cancelScroll(event) {\n  event.preventDefault();\n  event.stopPropagation();\n};\n\nfunction useScrollCapture(_ref) {\n  var isEnabled = _ref.isEnabled,\n      onBottomArrive = _ref.onBottomArrive,\n      onBottomLeave = _ref.onBottomLeave,\n      onTopArrive = _ref.onTopArrive,\n      onTopLeave = _ref.onTopLeave;\n  var isBottom = useRef(false);\n  var isTop = useRef(false);\n  var touchStart = useRef(0);\n  var scrollTarget = useRef(null);\n  var handleEventDelta = useCallback(function (event, delta) {\n    if (scrollTarget.current === null) return;\n    var _scrollTarget$current = scrollTarget.current,\n        scrollTop = _scrollTarget$current.scrollTop,\n        scrollHeight = _scrollTarget$current.scrollHeight,\n        clientHeight = _scrollTarget$current.clientHeight;\n    var target = scrollTarget.current;\n    var isDeltaPositive = delta > 0;\n    var availableScroll = scrollHeight - clientHeight - scrollTop;\n    var shouldCancelScroll = false; // reset bottom/top flags\n\n    if (availableScroll > delta && isBottom.current) {\n      if (onBottomLeave) onBottomLeave(event);\n      isBottom.current = false;\n    }\n\n    if (isDeltaPositive && isTop.current) {\n      if (onTopLeave) onTopLeave(event);\n      isTop.current = false;\n    } // bottom limit\n\n\n    if (isDeltaPositive && delta > availableScroll) {\n      if (onBottomArrive && !isBottom.current) {\n        onBottomArrive(event);\n      }\n\n      target.scrollTop = scrollHeight;\n      shouldCancelScroll = true;\n      isBottom.current = true; // top limit\n    } else if (!isDeltaPositive && -delta > scrollTop) {\n      if (onTopArrive && !isTop.current) {\n        onTopArrive(event);\n      }\n\n      target.scrollTop = 0;\n      shouldCancelScroll = true;\n      isTop.current = true;\n    } // cancel scroll\n\n\n    if (shouldCancelScroll) {\n      cancelScroll(event);\n    }\n  }, [onBottomArrive, onBottomLeave, onTopArrive, onTopLeave]);\n  var onWheel = useCallback(function (event) {\n    handleEventDelta(event, event.deltaY);\n  }, [handleEventDelta]);\n  var onTouchStart = useCallback(function (event) {\n    // set touch start so we can calculate touchmove delta\n    touchStart.current = event.changedTouches[0].clientY;\n  }, []);\n  var onTouchMove = useCallback(function (event) {\n    var deltaY = touchStart.current - event.changedTouches[0].clientY;\n    handleEventDelta(event, deltaY);\n  }, [handleEventDelta]);\n  var startListening = useCallback(function (el) {\n    // bail early if no element is available to attach to\n    if (!el) return;\n    var notPassive = supportsPassiveEvents ? {\n      passive: false\n    } : false;\n    el.addEventListener('wheel', onWheel, notPassive);\n    el.addEventListener('touchstart', onTouchStart, notPassive);\n    el.addEventListener('touchmove', onTouchMove, notPassive);\n  }, [onTouchMove, onTouchStart, onWheel]);\n  var stopListening = useCallback(function (el) {\n    // bail early if no element is available to detach from\n    if (!el) return;\n    el.removeEventListener('wheel', onWheel, false);\n    el.removeEventListener('touchstart', onTouchStart, false);\n    el.removeEventListener('touchmove', onTouchMove, false);\n  }, [onTouchMove, onTouchStart, onWheel]);\n  useEffect(function () {\n    if (!isEnabled) return;\n    var element = scrollTarget.current;\n    startListening(element);\n    return function () {\n      stopListening(element);\n    };\n  }, [isEnabled, startListening, stopListening]);\n  return function (element) {\n    scrollTarget.current = element;\n  };\n}\n\nvar STYLE_KEYS = ['boxSizing', 'height', 'overflow', 'paddingRight', 'position'];\nvar LOCK_STYLES = {\n  boxSizing: 'border-box',\n  // account for possible declaration `width: 100%;` on body\n  overflow: 'hidden',\n  position: 'relative',\n  height: '100%'\n};\n\nfunction preventTouchMove(e) {\n  e.preventDefault();\n}\n\nfunction allowTouchMove(e) {\n  e.stopPropagation();\n}\n\nfunction preventInertiaScroll() {\n  var top = this.scrollTop;\n  var totalScroll = this.scrollHeight;\n  var currentScroll = top + this.offsetHeight;\n\n  if (top === 0) {\n    this.scrollTop = 1;\n  } else if (currentScroll === totalScroll) {\n    this.scrollTop = top - 1;\n  }\n} // `ontouchstart` check works on most browsers\n// `maxTouchPoints` works on IE10/11 and Surface\n\n\nfunction isTouchDevice() {\n  return 'ontouchstart' in window || navigator.maxTouchPoints;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nvar activeScrollLocks = 0;\nvar listenerOptions = {\n  capture: false,\n  passive: false\n};\nfunction useScrollLock(_ref) {\n  var isEnabled = _ref.isEnabled,\n      _ref$accountForScroll = _ref.accountForScrollbars,\n      accountForScrollbars = _ref$accountForScroll === void 0 ? true : _ref$accountForScroll;\n  var originalStyles = useRef({});\n  var scrollTarget = useRef(null);\n  var addScrollLock = useCallback(function (touchScrollTarget) {\n    if (!canUseDOM) return;\n    var target = document.body;\n    var targetStyle = target && target.style;\n\n    if (accountForScrollbars) {\n      // store any styles already applied to the body\n      STYLE_KEYS.forEach(function (key) {\n        var val = targetStyle && targetStyle[key];\n        originalStyles.current[key] = val;\n      });\n    } // apply the lock styles and padding if this is the first scroll lock\n\n\n    if (accountForScrollbars && activeScrollLocks < 1) {\n      var currentPadding = parseInt(originalStyles.current.paddingRight, 10) || 0;\n      var clientWidth = document.body ? document.body.clientWidth : 0;\n      var adjustedPadding = window.innerWidth - clientWidth + currentPadding || 0;\n      Object.keys(LOCK_STYLES).forEach(function (key) {\n        var val = LOCK_STYLES[key];\n\n        if (targetStyle) {\n          targetStyle[key] = val;\n        }\n      });\n\n      if (targetStyle) {\n        targetStyle.paddingRight = \"\".concat(adjustedPadding, \"px\");\n      }\n    } // account for touch devices\n\n\n    if (target && isTouchDevice()) {\n      // Mobile Safari ignores { overflow: hidden } declaration on the body.\n      target.addEventListener('touchmove', preventTouchMove, listenerOptions); // Allow scroll on provided target\n\n      if (touchScrollTarget) {\n        touchScrollTarget.addEventListener('touchstart', preventInertiaScroll, listenerOptions);\n        touchScrollTarget.addEventListener('touchmove', allowTouchMove, listenerOptions);\n      }\n    } // increment active scroll locks\n\n\n    activeScrollLocks += 1;\n  }, [accountForScrollbars]);\n  var removeScrollLock = useCallback(function (touchScrollTarget) {\n    if (!canUseDOM) return;\n    var target = document.body;\n    var targetStyle = target && target.style; // safely decrement active scroll locks\n\n    activeScrollLocks = Math.max(activeScrollLocks - 1, 0); // reapply original body styles, if any\n\n    if (accountForScrollbars && activeScrollLocks < 1) {\n      STYLE_KEYS.forEach(function (key) {\n        var val = originalStyles.current[key];\n\n        if (targetStyle) {\n          targetStyle[key] = val;\n        }\n      });\n    } // remove touch listeners\n\n\n    if (target && isTouchDevice()) {\n      target.removeEventListener('touchmove', preventTouchMove, listenerOptions);\n\n      if (touchScrollTarget) {\n        touchScrollTarget.removeEventListener('touchstart', preventInertiaScroll, listenerOptions);\n        touchScrollTarget.removeEventListener('touchmove', allowTouchMove, listenerOptions);\n      }\n    }\n  }, [accountForScrollbars]);\n  useEffect(function () {\n    if (!isEnabled) return;\n    var element = scrollTarget.current;\n    addScrollLock(element);\n    return function () {\n      removeScrollLock(element);\n    };\n  }, [isEnabled, addScrollLock, removeScrollLock]);\n  return function (element) {\n    scrollTarget.current = element;\n  };\n}\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\n\nvar blurSelectInput = function blurSelectInput() {\n  return document.activeElement && document.activeElement.blur();\n};\n\nvar _ref2 = process.env.NODE_ENV === \"production\" ? {\n  name: \"1kfdb0e\",\n  styles: \"position:fixed;left:0;bottom:0;right:0;top:0\"\n} : {\n  name: \"bp8cua-ScrollManager\",\n  styles: \"position:fixed;left:0;bottom:0;right:0;top:0;label:ScrollManager;\",\n  map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNjcm9sbE1hbmFnZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStDVSIsImZpbGUiOiJTY3JvbGxNYW5hZ2VyLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsganN4IH0gZnJvbSAnQGVtb3Rpb24vcmVhY3QnO1xuaW1wb3J0IHsgRnJhZ21lbnQsIFJlYWN0RWxlbWVudCwgUmVmQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlU2Nyb2xsQ2FwdHVyZSBmcm9tICcuL3VzZVNjcm9sbENhcHR1cmUnO1xuaW1wb3J0IHVzZVNjcm9sbExvY2sgZnJvbSAnLi91c2VTY3JvbGxMb2NrJztcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgcmVhZG9ubHkgY2hpbGRyZW46IChyZWY6IFJlZkNhbGxiYWNrPEhUTUxFbGVtZW50PikgPT4gUmVhY3RFbGVtZW50O1xuICByZWFkb25seSBsb2NrRW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY2FwdHVyZUVuYWJsZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IG9uQm90dG9tQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Cb3R0b21MZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uVG9wQXJyaXZlPzogKGV2ZW50OiBXaGVlbEV2ZW50IHwgVG91Y2hFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25Ub3BMZWF2ZT86IChldmVudDogV2hlZWxFdmVudCB8IFRvdWNoRXZlbnQpID0+IHZvaWQ7XG59XG5cbmNvbnN0IGJsdXJTZWxlY3RJbnB1dCA9ICgpID0+XG4gIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmJsdXIoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU2Nyb2xsTWFuYWdlcih7XG4gIGNoaWxkcmVuLFxuICBsb2NrRW5hYmxlZCxcbiAgY2FwdHVyZUVuYWJsZWQgPSB0cnVlLFxuICBvbkJvdHRvbUFycml2ZSxcbiAgb25Cb3R0b21MZWF2ZSxcbiAgb25Ub3BBcnJpdmUsXG4gIG9uVG9wTGVhdmUsXG59OiBQcm9wcykge1xuICBjb25zdCBzZXRTY3JvbGxDYXB0dXJlVGFyZ2V0ID0gdXNlU2Nyb2xsQ2FwdHVyZSh7XG4gICAgaXNFbmFibGVkOiBjYXB0dXJlRW5hYmxlZCxcbiAgICBvbkJvdHRvbUFycml2ZSxcbiAgICBvbkJvdHRvbUxlYXZlLFxuICAgIG9uVG9wQXJyaXZlLFxuICAgIG9uVG9wTGVhdmUsXG4gIH0pO1xuICBjb25zdCBzZXRTY3JvbGxMb2NrVGFyZ2V0ID0gdXNlU2Nyb2xsTG9jayh7IGlzRW5hYmxlZDogbG9ja0VuYWJsZWQgfSk7XG5cbiAgY29uc3QgdGFyZ2V0UmVmOiBSZWZDYWxsYmFjazxIVE1MRWxlbWVudD4gPSAoZWxlbWVudCkgPT4ge1xuICAgIHNldFNjcm9sbENhcHR1cmVUYXJnZXQoZWxlbWVudCk7XG4gICAgc2V0U2Nyb2xsTG9ja1RhcmdldChlbGVtZW50KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIHtsb2NrRW5hYmxlZCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBvbkNsaWNrPXtibHVyU2VsZWN0SW5wdXR9XG4gICAgICAgICAgY3NzPXt7IHBvc2l0aW9uOiAnZml4ZWQnLCBsZWZ0OiAwLCBib3R0b206IDAsIHJpZ2h0OiAwLCB0b3A6IDAgfX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7Y2hpbGRyZW4odGFyZ2V0UmVmKX1cbiAgICA8L0ZyYWdtZW50PlxuICApO1xufVxuIl19 */\",\n  toString: _EMOTION_STRINGIFIED_CSS_ERROR__\n};\n\nfunction ScrollManager(_ref) {\n  var children = _ref.children,\n      lockEnabled = _ref.lockEnabled,\n      _ref$captureEnabled = _ref.captureEnabled,\n      captureEnabled = _ref$captureEnabled === void 0 ? true : _ref$captureEnabled,\n      onBottomArrive = _ref.onBottomArrive,\n      onBottomLeave = _ref.onBottomLeave,\n      onTopArrive = _ref.onTopArrive,\n      onTopLeave = _ref.onTopLeave;\n  var setScrollCaptureTarget = useScrollCapture({\n    isEnabled: captureEnabled,\n    onBottomArrive: onBottomArrive,\n    onBottomLeave: onBottomLeave,\n    onTopArrive: onTopArrive,\n    onTopLeave: onTopLeave\n  });\n  var setScrollLockTarget = useScrollLock({\n    isEnabled: lockEnabled\n  });\n\n  var targetRef = function targetRef(element) {\n    setScrollCaptureTarget(element);\n    setScrollLockTarget(element);\n  };\n\n  return jsx(Fragment, null, lockEnabled && jsx(\"div\", {\n    onClick: blurSelectInput,\n    css: _ref2\n  }), children(targetRef));\n}\n\nvar formatGroupLabel = function formatGroupLabel(group) {\n  return group.label;\n};\nvar getOptionLabel$1 = function getOptionLabel(option) {\n  return option.label;\n};\nvar getOptionValue$1 = function getOptionValue(option) {\n  return option.value;\n};\nvar isOptionDisabled = function isOptionDisabled(option) {\n  return !!option.isDisabled;\n};\n\nvar defaultStyles = {\n  clearIndicator: clearIndicatorCSS,\n  container: containerCSS,\n  control: css$1,\n  dropdownIndicator: dropdownIndicatorCSS,\n  group: groupCSS,\n  groupHeading: groupHeadingCSS,\n  indicatorsContainer: indicatorsContainerCSS,\n  indicatorSeparator: indicatorSeparatorCSS,\n  input: inputCSS,\n  loadingIndicator: loadingIndicatorCSS,\n  loadingMessage: loadingMessageCSS,\n  menu: menuCSS,\n  menuList: menuListCSS,\n  menuPortal: menuPortalCSS,\n  multiValue: multiValueCSS,\n  multiValueLabel: multiValueLabelCSS,\n  multiValueRemove: multiValueRemoveCSS,\n  noOptionsMessage: noOptionsMessageCSS,\n  option: optionCSS,\n  placeholder: placeholderCSS,\n  singleValue: css$2,\n  valueContainer: valueContainerCSS\n}; // Merge Utility\n// Allows consumers to extend a base Select with additional styles\n\nfunction mergeStyles(source) {\n  var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  // initialize with source styles\n  var styles = _objectSpread2({}, source); // massage in target styles\n\n\n  Object.keys(target).forEach(function (keyAsString) {\n    var key = keyAsString;\n\n    if (source[key]) {\n      styles[key] = function (rsCss, props) {\n        return target[key](source[key](rsCss, props), props);\n      };\n    } else {\n      styles[key] = target[key];\n    }\n  });\n  return styles;\n}\n\nvar colors = {\n  primary: '#2684FF',\n  primary75: '#4C9AFF',\n  primary50: '#B2D4FF',\n  primary25: '#DEEBFF',\n  danger: '#DE350B',\n  dangerLight: '#FFBDAD',\n  neutral0: 'hsl(0, 0%, 100%)',\n  neutral5: 'hsl(0, 0%, 95%)',\n  neutral10: 'hsl(0, 0%, 90%)',\n  neutral20: 'hsl(0, 0%, 80%)',\n  neutral30: 'hsl(0, 0%, 70%)',\n  neutral40: 'hsl(0, 0%, 60%)',\n  neutral50: 'hsl(0, 0%, 50%)',\n  neutral60: 'hsl(0, 0%, 40%)',\n  neutral70: 'hsl(0, 0%, 30%)',\n  neutral80: 'hsl(0, 0%, 20%)',\n  neutral90: 'hsl(0, 0%, 10%)'\n};\nvar borderRadius = 4; // Used to calculate consistent margin/padding on elements\n\nvar baseUnit = 4; // The minimum height of the control\n\nvar controlHeight = 38; // The amount of space between the control and menu */\n\nvar menuGutter = baseUnit * 2;\nvar spacing = {\n  baseUnit: baseUnit,\n  controlHeight: controlHeight,\n  menuGutter: menuGutter\n};\nvar defaultTheme = {\n  borderRadius: borderRadius,\n  colors: colors,\n  spacing: spacing\n};\n\nvar defaultProps = {\n  'aria-live': 'polite',\n  backspaceRemovesValue: true,\n  blurInputOnSelect: isTouchCapable(),\n  captureMenuScroll: !isTouchCapable(),\n  closeMenuOnSelect: true,\n  closeMenuOnScroll: false,\n  components: {},\n  controlShouldRenderValue: true,\n  escapeClearsValue: false,\n  filterOption: createFilter(),\n  formatGroupLabel: formatGroupLabel,\n  getOptionLabel: getOptionLabel$1,\n  getOptionValue: getOptionValue$1,\n  isDisabled: false,\n  isLoading: false,\n  isMulti: false,\n  isRtl: false,\n  isSearchable: true,\n  isOptionDisabled: isOptionDisabled,\n  loadingMessage: function loadingMessage() {\n    return 'Loading...';\n  },\n  maxMenuHeight: 300,\n  minMenuHeight: 140,\n  menuIsOpen: false,\n  menuPlacement: 'bottom',\n  menuPosition: 'absolute',\n  menuShouldBlockScroll: false,\n  menuShouldScrollIntoView: !isMobileDevice(),\n  noOptionsMessage: function noOptionsMessage() {\n    return 'No options';\n  },\n  openMenuOnFocus: false,\n  openMenuOnClick: true,\n  options: [],\n  pageSize: 5,\n  placeholder: 'Select...',\n  screenReaderStatus: function screenReaderStatus(_ref) {\n    var count = _ref.count;\n    return \"\".concat(count, \" result\").concat(count !== 1 ? 's' : '', \" available\");\n  },\n  styles: {},\n  tabIndex: 0,\n  tabSelectsValue: true\n};\n\nfunction toCategorizedOption(props, option, selectValue, index) {\n  var isDisabled = _isOptionDisabled(props, option, selectValue);\n\n  var isSelected = _isOptionSelected(props, option, selectValue);\n\n  var label = getOptionLabel(props, option);\n  var value = getOptionValue(props, option);\n  return {\n    type: 'option',\n    data: option,\n    isDisabled: isDisabled,\n    isSelected: isSelected,\n    label: label,\n    value: value,\n    index: index\n  };\n}\n\nfunction buildCategorizedOptions(props, selectValue) {\n  return props.options.map(function (groupOrOption, groupOrOptionIndex) {\n    if ('options' in groupOrOption) {\n      var categorizedOptions = groupOrOption.options.map(function (option, optionIndex) {\n        return toCategorizedOption(props, option, selectValue, optionIndex);\n      }).filter(function (categorizedOption) {\n        return isFocusable(props, categorizedOption);\n      });\n      return categorizedOptions.length > 0 ? {\n        type: 'group',\n        data: groupOrOption,\n        options: categorizedOptions,\n        index: groupOrOptionIndex\n      } : undefined;\n    }\n\n    var categorizedOption = toCategorizedOption(props, groupOrOption, selectValue, groupOrOptionIndex);\n    return isFocusable(props, categorizedOption) ? categorizedOption : undefined;\n  }).filter(notNullish);\n}\n\nfunction buildFocusableOptionsFromCategorizedOptions(categorizedOptions) {\n  return categorizedOptions.reduce(function (optionsAccumulator, categorizedOption) {\n    if (categorizedOption.type === 'group') {\n      optionsAccumulator.push.apply(optionsAccumulator, _toConsumableArray(categorizedOption.options.map(function (option) {\n        return option.data;\n      })));\n    } else {\n      optionsAccumulator.push(categorizedOption.data);\n    }\n\n    return optionsAccumulator;\n  }, []);\n}\n\nfunction buildFocusableOptions(props, selectValue) {\n  return buildFocusableOptionsFromCategorizedOptions(buildCategorizedOptions(props, selectValue));\n}\n\nfunction isFocusable(props, categorizedOption) {\n  var _props$inputValue = props.inputValue,\n      inputValue = _props$inputValue === void 0 ? '' : _props$inputValue;\n  var data = categorizedOption.data,\n      isSelected = categorizedOption.isSelected,\n      label = categorizedOption.label,\n      value = categorizedOption.value;\n  return (!shouldHideSelectedOptions(props) || !isSelected) && _filterOption(props, {\n    label: label,\n    value: value,\n    data: data\n  }, inputValue);\n}\n\nfunction getNextFocusedValue(state, nextSelectValue) {\n  var focusedValue = state.focusedValue,\n      lastSelectValue = state.selectValue;\n  var lastFocusedIndex = lastSelectValue.indexOf(focusedValue);\n\n  if (lastFocusedIndex > -1) {\n    var nextFocusedIndex = nextSelectValue.indexOf(focusedValue);\n\n    if (nextFocusedIndex > -1) {\n      // the focused value is still in the selectValue, return it\n      return focusedValue;\n    } else if (lastFocusedIndex < nextSelectValue.length) {\n      // the focusedValue is not present in the next selectValue array by\n      // reference, so return the new value at the same index\n      return nextSelectValue[lastFocusedIndex];\n    }\n  }\n\n  return null;\n}\n\nfunction getNextFocusedOption(state, options) {\n  var lastFocusedOption = state.focusedOption;\n  return lastFocusedOption && options.indexOf(lastFocusedOption) > -1 ? lastFocusedOption : options[0];\n}\n\nvar getOptionLabel = function getOptionLabel(props, data) {\n  return props.getOptionLabel(data);\n};\n\nvar getOptionValue = function getOptionValue(props, data) {\n  return props.getOptionValue(data);\n};\n\nfunction _isOptionDisabled(props, option, selectValue) {\n  return typeof props.isOptionDisabled === 'function' ? props.isOptionDisabled(option, selectValue) : false;\n}\n\nfunction _isOptionSelected(props, option, selectValue) {\n  if (selectValue.indexOf(option) > -1) return true;\n\n  if (typeof props.isOptionSelected === 'function') {\n    return props.isOptionSelected(option, selectValue);\n  }\n\n  var candidate = getOptionValue(props, option);\n  return selectValue.some(function (i) {\n    return getOptionValue(props, i) === candidate;\n  });\n}\n\nfunction _filterOption(props, option, inputValue) {\n  return props.filterOption ? props.filterOption(option, inputValue) : true;\n}\n\nvar shouldHideSelectedOptions = function shouldHideSelectedOptions(props) {\n  var hideSelectedOptions = props.hideSelectedOptions,\n      isMulti = props.isMulti;\n  if (hideSelectedOptions === undefined) return isMulti;\n  return hideSelectedOptions;\n};\n\nvar instanceId = 1;\n\nvar Select = /*#__PURE__*/function (_Component) {\n  _inherits(Select, _Component);\n\n  var _super = _createSuper(Select);\n\n  // Misc. Instance Properties\n  // ------------------------------\n  // TODO\n  // Refs\n  // ------------------------------\n  // Lifecycle\n  // ------------------------------\n  function Select(_props) {\n    var _this;\n\n    _classCallCheck(this, Select);\n\n    _this = _super.call(this, _props);\n    _this.state = {\n      ariaSelection: null,\n      focusedOption: null,\n      focusedValue: null,\n      inputIsHidden: false,\n      isFocused: false,\n      selectValue: [],\n      clearFocusValueOnUpdate: false,\n      prevWasFocused: false,\n      inputIsHiddenAfterUpdate: undefined,\n      prevProps: undefined\n    };\n    _this.blockOptionHover = false;\n    _this.isComposing = false;\n    _this.commonProps = void 0;\n    _this.initialTouchX = 0;\n    _this.initialTouchY = 0;\n    _this.instancePrefix = '';\n    _this.openAfterFocus = false;\n    _this.scrollToFocusedOptionOnUpdate = false;\n    _this.userIsDragging = void 0;\n    _this.controlRef = null;\n\n    _this.getControlRef = function (ref) {\n      _this.controlRef = ref;\n    };\n\n    _this.focusedOptionRef = null;\n\n    _this.getFocusedOptionRef = function (ref) {\n      _this.focusedOptionRef = ref;\n    };\n\n    _this.menuListRef = null;\n\n    _this.getMenuListRef = function (ref) {\n      _this.menuListRef = ref;\n    };\n\n    _this.inputRef = null;\n\n    _this.getInputRef = function (ref) {\n      _this.inputRef = ref;\n    };\n\n    _this.focus = _this.focusInput;\n    _this.blur = _this.blurInput;\n\n    _this.onChange = function (newValue, actionMeta) {\n      var _this$props = _this.props,\n          onChange = _this$props.onChange,\n          name = _this$props.name;\n      actionMeta.name = name;\n\n      _this.ariaOnChange(newValue, actionMeta);\n\n      onChange(newValue, actionMeta);\n    };\n\n    _this.setValue = function (newValue, action, option) {\n      var _this$props2 = _this.props,\n          closeMenuOnSelect = _this$props2.closeMenuOnSelect,\n          isMulti = _this$props2.isMulti,\n          inputValue = _this$props2.inputValue;\n\n      _this.onInputChange('', {\n        action: 'set-value',\n        prevInputValue: inputValue\n      });\n\n      if (closeMenuOnSelect) {\n        _this.setState({\n          inputIsHiddenAfterUpdate: !isMulti\n        });\n\n        _this.onMenuClose();\n      } // when the select value should change, we should reset focusedValue\n\n\n      _this.setState({\n        clearFocusValueOnUpdate: true\n      });\n\n      _this.onChange(newValue, {\n        action: action,\n        option: option\n      });\n    };\n\n    _this.selectOption = function (newValue) {\n      var _this$props3 = _this.props,\n          blurInputOnSelect = _this$props3.blurInputOnSelect,\n          isMulti = _this$props3.isMulti,\n          name = _this$props3.name;\n      var selectValue = _this.state.selectValue;\n\n      var deselected = isMulti && _this.isOptionSelected(newValue, selectValue);\n\n      var isDisabled = _this.isOptionDisabled(newValue, selectValue);\n\n      if (deselected) {\n        var candidate = _this.getOptionValue(newValue);\n\n        _this.setValue(multiValueAsValue(selectValue.filter(function (i) {\n          return _this.getOptionValue(i) !== candidate;\n        })), 'deselect-option', newValue);\n      } else if (!isDisabled) {\n        // Select option if option is not disabled\n        if (isMulti) {\n          _this.setValue(multiValueAsValue([].concat(_toConsumableArray(selectValue), [newValue])), 'select-option', newValue);\n        } else {\n          _this.setValue(singleValueAsValue(newValue), 'select-option');\n        }\n      } else {\n        _this.ariaOnChange(singleValueAsValue(newValue), {\n          action: 'select-option',\n          option: newValue,\n          name: name\n        });\n\n        return;\n      }\n\n      if (blurInputOnSelect) {\n        _this.blurInput();\n      }\n    };\n\n    _this.removeValue = function (removedValue) {\n      var isMulti = _this.props.isMulti;\n      var selectValue = _this.state.selectValue;\n\n      var candidate = _this.getOptionValue(removedValue);\n\n      var newValueArray = selectValue.filter(function (i) {\n        return _this.getOptionValue(i) !== candidate;\n      });\n      var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null);\n\n      _this.onChange(newValue, {\n        action: 'remove-value',\n        removedValue: removedValue\n      });\n\n      _this.focusInput();\n    };\n\n    _this.clearValue = function () {\n      var selectValue = _this.state.selectValue;\n\n      _this.onChange(valueTernary(_this.props.isMulti, [], null), {\n        action: 'clear',\n        removedValues: selectValue\n      });\n    };\n\n    _this.popValue = function () {\n      var isMulti = _this.props.isMulti;\n      var selectValue = _this.state.selectValue;\n      var lastSelectedValue = selectValue[selectValue.length - 1];\n      var newValueArray = selectValue.slice(0, selectValue.length - 1);\n      var newValue = valueTernary(isMulti, newValueArray, newValueArray[0] || null);\n\n      _this.onChange(newValue, {\n        action: 'pop-value',\n        removedValue: lastSelectedValue\n      });\n    };\n\n    _this.getValue = function () {\n      return _this.state.selectValue;\n    };\n\n    _this.cx = function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return classNames.apply(void 0, [_this.props.classNamePrefix].concat(args));\n    };\n\n    _this.getOptionLabel = function (data) {\n      return getOptionLabel(_this.props, data);\n    };\n\n    _this.getOptionValue = function (data) {\n      return getOptionValue(_this.props, data);\n    };\n\n    _this.getStyles = function (key, props) {\n      var base = defaultStyles[key](props);\n      base.boxSizing = 'border-box';\n      var custom = _this.props.styles[key];\n      return custom ? custom(base, props) : base;\n    };\n\n    _this.getElementId = function (element) {\n      return \"\".concat(_this.instancePrefix, \"-\").concat(element);\n    };\n\n    _this.getComponents = function () {\n      return defaultComponents(_this.props);\n    };\n\n    _this.buildCategorizedOptions = function () {\n      return buildCategorizedOptions(_this.props, _this.state.selectValue);\n    };\n\n    _this.getCategorizedOptions = function () {\n      return _this.props.menuIsOpen ? _this.buildCategorizedOptions() : [];\n    };\n\n    _this.buildFocusableOptions = function () {\n      return buildFocusableOptionsFromCategorizedOptions(_this.buildCategorizedOptions());\n    };\n\n    _this.getFocusableOptions = function () {\n      return _this.props.menuIsOpen ? _this.buildFocusableOptions() : [];\n    };\n\n    _this.ariaOnChange = function (value, actionMeta) {\n      _this.setState({\n        ariaSelection: _objectSpread2({\n          value: value\n        }, actionMeta)\n      });\n    };\n\n    _this.onMenuMouseDown = function (event) {\n      if (event.button !== 0) {\n        return;\n      }\n\n      event.stopPropagation();\n      event.preventDefault();\n\n      _this.focusInput();\n    };\n\n    _this.onMenuMouseMove = function (event) {\n      _this.blockOptionHover = false;\n    };\n\n    _this.onControlMouseDown = function (event) {\n      // Event captured by dropdown indicator\n      if (event.defaultPrevented) {\n        return;\n      }\n\n      var openMenuOnClick = _this.props.openMenuOnClick;\n\n      if (!_this.state.isFocused) {\n        if (openMenuOnClick) {\n          _this.openAfterFocus = true;\n        }\n\n        _this.focusInput();\n      } else if (!_this.props.menuIsOpen) {\n        if (openMenuOnClick) {\n          _this.openMenu('first');\n        }\n      } else {\n        if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') {\n          _this.onMenuClose();\n        }\n      }\n\n      if (event.target.tagName !== 'INPUT' && event.target.tagName !== 'TEXTAREA') {\n        event.preventDefault();\n      }\n    };\n\n    _this.onDropdownIndicatorMouseDown = function (event) {\n      // ignore mouse events that weren't triggered by the primary button\n      if (event && event.type === 'mousedown' && event.button !== 0) {\n        return;\n      }\n\n      if (_this.props.isDisabled) return;\n      var _this$props4 = _this.props,\n          isMulti = _this$props4.isMulti,\n          menuIsOpen = _this$props4.menuIsOpen;\n\n      _this.focusInput();\n\n      if (menuIsOpen) {\n        _this.setState({\n          inputIsHiddenAfterUpdate: !isMulti\n        });\n\n        _this.onMenuClose();\n      } else {\n        _this.openMenu('first');\n      }\n\n      event.preventDefault();\n    };\n\n    _this.onClearIndicatorMouseDown = function (event) {\n      // ignore mouse events that weren't triggered by the primary button\n      if (event && event.type === 'mousedown' && event.button !== 0) {\n        return;\n      }\n\n      _this.clearValue();\n\n      event.preventDefault();\n      _this.openAfterFocus = false;\n\n      if (event.type === 'touchend') {\n        _this.focusInput();\n      } else {\n        setTimeout(function () {\n          return _this.focusInput();\n        });\n      }\n    };\n\n    _this.onScroll = function (event) {\n      if (typeof _this.props.closeMenuOnScroll === 'boolean') {\n        if (event.target instanceof HTMLElement && isDocumentElement(event.target)) {\n          _this.props.onMenuClose();\n        }\n      } else if (typeof _this.props.closeMenuOnScroll === 'function') {\n        if (_this.props.closeMenuOnScroll(event)) {\n          _this.props.onMenuClose();\n        }\n      }\n    };\n\n    _this.onCompositionStart = function () {\n      _this.isComposing = true;\n    };\n\n    _this.onCompositionEnd = function () {\n      _this.isComposing = false;\n    };\n\n    _this.onTouchStart = function (_ref2) {\n      var touches = _ref2.touches;\n      var touch = touches && touches.item(0);\n\n      if (!touch) {\n        return;\n      }\n\n      _this.initialTouchX = touch.clientX;\n      _this.initialTouchY = touch.clientY;\n      _this.userIsDragging = false;\n    };\n\n    _this.onTouchMove = function (_ref3) {\n      var touches = _ref3.touches;\n      var touch = touches && touches.item(0);\n\n      if (!touch) {\n        return;\n      }\n\n      var deltaX = Math.abs(touch.clientX - _this.initialTouchX);\n      var deltaY = Math.abs(touch.clientY - _this.initialTouchY);\n      var moveThreshold = 5;\n      _this.userIsDragging = deltaX > moveThreshold || deltaY > moveThreshold;\n    };\n\n    _this.onTouchEnd = function (event) {\n      if (_this.userIsDragging) return; // close the menu if the user taps outside\n      // we're checking on event.target here instead of event.currentTarget, because we want to assert information\n      // on events on child elements, not the document (which we've attached this handler to).\n\n      if (_this.controlRef && !_this.controlRef.contains(event.target) && _this.menuListRef && !_this.menuListRef.contains(event.target)) {\n        _this.blurInput();\n      } // reset move vars\n\n\n      _this.initialTouchX = 0;\n      _this.initialTouchY = 0;\n    };\n\n    _this.onControlTouchEnd = function (event) {\n      if (_this.userIsDragging) return;\n\n      _this.onControlMouseDown(event);\n    };\n\n    _this.onClearIndicatorTouchEnd = function (event) {\n      if (_this.userIsDragging) return;\n\n      _this.onClearIndicatorMouseDown(event);\n    };\n\n    _this.onDropdownIndicatorTouchEnd = function (event) {\n      if (_this.userIsDragging) return;\n\n      _this.onDropdownIndicatorMouseDown(event);\n    };\n\n    _this.handleInputChange = function (event) {\n      var prevInputValue = _this.props.inputValue;\n      var inputValue = event.currentTarget.value;\n\n      _this.setState({\n        inputIsHiddenAfterUpdate: false\n      });\n\n      _this.onInputChange(inputValue, {\n        action: 'input-change',\n        prevInputValue: prevInputValue\n      });\n\n      if (!_this.props.menuIsOpen) {\n        _this.onMenuOpen();\n      }\n    };\n\n    _this.onInputFocus = function (event) {\n      if (_this.props.onFocus) {\n        _this.props.onFocus(event);\n      }\n\n      _this.setState({\n        inputIsHiddenAfterUpdate: false,\n        isFocused: true\n      });\n\n      if (_this.openAfterFocus || _this.props.openMenuOnFocus) {\n        _this.openMenu('first');\n      }\n\n      _this.openAfterFocus = false;\n    };\n\n    _this.onInputBlur = function (event) {\n      var prevInputValue = _this.props.inputValue;\n\n      if (_this.menuListRef && _this.menuListRef.contains(document.activeElement)) {\n        _this.inputRef.focus();\n\n        return;\n      }\n\n      if (_this.props.onBlur) {\n        _this.props.onBlur(event);\n      }\n\n      _this.onInputChange('', {\n        action: 'input-blur',\n        prevInputValue: prevInputValue\n      });\n\n      _this.onMenuClose();\n\n      _this.setState({\n        focusedValue: null,\n        isFocused: false\n      });\n    };\n\n    _this.onOptionHover = function (focusedOption) {\n      if (_this.blockOptionHover || _this.state.focusedOption === focusedOption) {\n        return;\n      }\n\n      _this.setState({\n        focusedOption: focusedOption\n      });\n    };\n\n    _this.shouldHideSelectedOptions = function () {\n      return shouldHideSelectedOptions(_this.props);\n    };\n\n    _this.onKeyDown = function (event) {\n      var _this$props5 = _this.props,\n          isMulti = _this$props5.isMulti,\n          backspaceRemovesValue = _this$props5.backspaceRemovesValue,\n          escapeClearsValue = _this$props5.escapeClearsValue,\n          inputValue = _this$props5.inputValue,\n          isClearable = _this$props5.isClearable,\n          isDisabled = _this$props5.isDisabled,\n          menuIsOpen = _this$props5.menuIsOpen,\n          onKeyDown = _this$props5.onKeyDown,\n          tabSelectsValue = _this$props5.tabSelectsValue,\n          openMenuOnFocus = _this$props5.openMenuOnFocus;\n      var _this$state = _this.state,\n          focusedOption = _this$state.focusedOption,\n          focusedValue = _this$state.focusedValue,\n          selectValue = _this$state.selectValue;\n      if (isDisabled) return;\n\n      if (typeof onKeyDown === 'function') {\n        onKeyDown(event);\n\n        if (event.defaultPrevented) {\n          return;\n        }\n      } // Block option hover events when the user has just pressed a key\n\n\n      _this.blockOptionHover = true;\n\n      switch (event.key) {\n        case 'ArrowLeft':\n          if (!isMulti || inputValue) return;\n\n          _this.focusValue('previous');\n\n          break;\n\n        case 'ArrowRight':\n          if (!isMulti || inputValue) return;\n\n          _this.focusValue('next');\n\n          break;\n\n        case 'Delete':\n        case 'Backspace':\n          if (inputValue) return;\n\n          if (focusedValue) {\n            _this.removeValue(focusedValue);\n          } else {\n            if (!backspaceRemovesValue) return;\n\n            if (isMulti) {\n              _this.popValue();\n            } else if (isClearable) {\n              _this.clearValue();\n            }\n          }\n\n          break;\n\n        case 'Tab':\n          if (_this.isComposing) return;\n\n          if (event.shiftKey || !menuIsOpen || !tabSelectsValue || !focusedOption || // don't capture the event if the menu opens on focus and the focused\n          // option is already selected; it breaks the flow of navigation\n          openMenuOnFocus && _this.isOptionSelected(focusedOption, selectValue)) {\n            return;\n          }\n\n          _this.selectOption(focusedOption);\n\n          break;\n\n        case 'Enter':\n          if (event.keyCode === 229) {\n            // ignore the keydown event from an Input Method Editor(IME)\n            // ref. https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\n            break;\n          }\n\n          if (menuIsOpen) {\n            if (!focusedOption) return;\n            if (_this.isComposing) return;\n\n            _this.selectOption(focusedOption);\n\n            break;\n          }\n\n          return;\n\n        case 'Escape':\n          if (menuIsOpen) {\n            _this.setState({\n              inputIsHiddenAfterUpdate: false\n            });\n\n            _this.onInputChange('', {\n              action: 'menu-close',\n              prevInputValue: inputValue\n            });\n\n            _this.onMenuClose();\n          } else if (isClearable && escapeClearsValue) {\n            _this.clearValue();\n          }\n\n          break;\n\n        case ' ':\n          // space\n          if (inputValue) {\n            return;\n          }\n\n          if (!menuIsOpen) {\n            _this.openMenu('first');\n\n            break;\n          }\n\n          if (!focusedOption) return;\n\n          _this.selectOption(focusedOption);\n\n          break;\n\n        case 'ArrowUp':\n          if (menuIsOpen) {\n            _this.focusOption('up');\n          } else {\n            _this.openMenu('last');\n          }\n\n          break;\n\n        case 'ArrowDown':\n          if (menuIsOpen) {\n            _this.focusOption('down');\n          } else {\n            _this.openMenu('first');\n          }\n\n          break;\n\n        case 'PageUp':\n          if (!menuIsOpen) return;\n\n          _this.focusOption('pageup');\n\n          break;\n\n        case 'PageDown':\n          if (!menuIsOpen) return;\n\n          _this.focusOption('pagedown');\n\n          break;\n\n        case 'Home':\n          if (!menuIsOpen) return;\n\n          _this.focusOption('first');\n\n          break;\n\n        case 'End':\n          if (!menuIsOpen) return;\n\n          _this.focusOption('last');\n\n          break;\n\n        default:\n          return;\n      }\n\n      event.preventDefault();\n    };\n\n    _this.instancePrefix = 'react-select-' + (_this.props.instanceId || ++instanceId);\n    _this.state.selectValue = cleanValue(_props.value);\n    return _this;\n  }\n\n  _createClass(Select, [{\n    key: \"componentDidMount\",\n    value: function componentDidMount() {\n      this.startListeningComposition();\n      this.startListeningToTouch();\n\n      if (this.props.closeMenuOnScroll && document && document.addEventListener) {\n        // Listen to all scroll events, and filter them out inside of 'onScroll'\n        document.addEventListener('scroll', this.onScroll, true);\n      }\n\n      if (this.props.autoFocus) {\n        this.focusInput();\n      }\n    }\n  }, {\n    key: \"componentDidUpdate\",\n    value: function componentDidUpdate(prevProps) {\n      var _this$props6 = this.props,\n          isDisabled = _this$props6.isDisabled,\n          menuIsOpen = _this$props6.menuIsOpen;\n      var isFocused = this.state.isFocused;\n\n      if ( // ensure focus is restored correctly when the control becomes enabled\n      isFocused && !isDisabled && prevProps.isDisabled || // ensure focus is on the Input when the menu opens\n      isFocused && menuIsOpen && !prevProps.menuIsOpen) {\n        this.focusInput();\n      }\n\n      if (isFocused && isDisabled && !prevProps.isDisabled) {\n        // ensure select state gets blurred in case Select is programmatically disabled while focused\n        // eslint-disable-next-line react/no-did-update-set-state\n        this.setState({\n          isFocused: false\n        }, this.onMenuClose);\n      } // scroll the focused option into view if necessary\n\n\n      if (this.menuListRef && this.focusedOptionRef && this.scrollToFocusedOptionOnUpdate) {\n        scrollIntoView(this.menuListRef, this.focusedOptionRef);\n        this.scrollToFocusedOptionOnUpdate = false;\n      }\n    }\n  }, {\n    key: \"componentWillUnmount\",\n    value: function componentWillUnmount() {\n      this.stopListeningComposition();\n      this.stopListeningToTouch();\n      document.removeEventListener('scroll', this.onScroll, true);\n    } // ==============================\n    // Consumer Handlers\n    // ==============================\n\n  }, {\n    key: \"onMenuOpen\",\n    value: function onMenuOpen() {\n      this.props.onMenuOpen();\n    }\n  }, {\n    key: \"onMenuClose\",\n    value: function onMenuClose() {\n      this.onInputChange('', {\n        action: 'menu-close',\n        prevInputValue: this.props.inputValue\n      });\n      this.props.onMenuClose();\n    }\n  }, {\n    key: \"onInputChange\",\n    value: function onInputChange(newValue, actionMeta) {\n      this.props.onInputChange(newValue, actionMeta);\n    } // ==============================\n    // Methods\n    // ==============================\n\n  }, {\n    key: \"focusInput\",\n    value: function focusInput() {\n      if (!this.inputRef) return;\n      this.inputRef.focus();\n    }\n  }, {\n    key: \"blurInput\",\n    value: function blurInput() {\n      if (!this.inputRef) return;\n      this.inputRef.blur();\n    } // aliased for consumers\n\n  }, {\n    key: \"openMenu\",\n    value: function openMenu(focusOption) {\n      var _this2 = this;\n\n      var _this$state2 = this.state,\n          selectValue = _this$state2.selectValue,\n          isFocused = _this$state2.isFocused;\n      var focusableOptions = this.buildFocusableOptions();\n      var openAtIndex = focusOption === 'first' ? 0 : focusableOptions.length - 1;\n\n      if (!this.props.isMulti) {\n        var selectedIndex = focusableOptions.indexOf(selectValue[0]);\n\n        if (selectedIndex > -1) {\n          openAtIndex = selectedIndex;\n        }\n      } // only scroll if the menu isn't already open\n\n\n      this.scrollToFocusedOptionOnUpdate = !(isFocused && this.menuListRef);\n      this.setState({\n        inputIsHiddenAfterUpdate: false,\n        focusedValue: null,\n        focusedOption: focusableOptions[openAtIndex]\n      }, function () {\n        return _this2.onMenuOpen();\n      });\n    }\n  }, {\n    key: \"focusValue\",\n    value: function focusValue(direction) {\n      var _this$state3 = this.state,\n          selectValue = _this$state3.selectValue,\n          focusedValue = _this$state3.focusedValue; // Only multiselects support value focusing\n\n      if (!this.props.isMulti) return;\n      this.setState({\n        focusedOption: null\n      });\n      var focusedIndex = selectValue.indexOf(focusedValue);\n\n      if (!focusedValue) {\n        focusedIndex = -1;\n      }\n\n      var lastIndex = selectValue.length - 1;\n      var nextFocus = -1;\n      if (!selectValue.length) return;\n\n      switch (direction) {\n        case 'previous':\n          if (focusedIndex === 0) {\n            // don't cycle from the start to the end\n            nextFocus = 0;\n          } else if (focusedIndex === -1) {\n            // if nothing is focused, focus the last value first\n            nextFocus = lastIndex;\n          } else {\n            nextFocus = focusedIndex - 1;\n          }\n\n          break;\n\n        case 'next':\n          if (focusedIndex > -1 && focusedIndex < lastIndex) {\n            nextFocus = focusedIndex + 1;\n          }\n\n          break;\n      }\n\n      this.setState({\n        inputIsHidden: nextFocus !== -1,\n        focusedValue: selectValue[nextFocus]\n      });\n    }\n  }, {\n    key: \"focusOption\",\n    value: function focusOption() {\n      var direction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first';\n      var pageSize = this.props.pageSize;\n      var focusedOption = this.state.focusedOption;\n      var options = this.getFocusableOptions();\n      if (!options.length) return;\n      var nextFocus = 0; // handles 'first'\n\n      var focusedIndex = options.indexOf(focusedOption);\n\n      if (!focusedOption) {\n        focusedIndex = -1;\n      }\n\n      if (direction === 'up') {\n        nextFocus = focusedIndex > 0 ? focusedIndex - 1 : options.length - 1;\n      } else if (direction === 'down') {\n        nextFocus = (focusedIndex + 1) % options.length;\n      } else if (direction === 'pageup') {\n        nextFocus = focusedIndex - pageSize;\n        if (nextFocus < 0) nextFocus = 0;\n      } else if (direction === 'pagedown') {\n        nextFocus = focusedIndex + pageSize;\n        if (nextFocus > options.length - 1) nextFocus = options.length - 1;\n      } else if (direction === 'last') {\n        nextFocus = options.length - 1;\n      }\n\n      this.scrollToFocusedOptionOnUpdate = true;\n      this.setState({\n        focusedOption: options[nextFocus],\n        focusedValue: null\n      });\n    }\n  }, {\n    key: \"getTheme\",\n    value: // ==============================\n    // Getters\n    // ==============================\n    function getTheme() {\n      // Use the default theme if there are no customizations.\n      if (!this.props.theme) {\n        return defaultTheme;\n      } // If the theme prop is a function, assume the function\n      // knows how to merge the passed-in default theme with\n      // its own modifications.\n\n\n      if (typeof this.props.theme === 'function') {\n        return this.props.theme(defaultTheme);\n      } // Otherwise, if a plain theme object was passed in,\n      // overlay it with the default theme.\n\n\n      return _objectSpread2(_objectSpread2({}, defaultTheme), this.props.theme);\n    }\n  }, {\n    key: \"getCommonProps\",\n    value: function getCommonProps() {\n      var clearValue = this.clearValue,\n          cx = this.cx,\n          getStyles = this.getStyles,\n          getValue = this.getValue,\n          selectOption = this.selectOption,\n          setValue = this.setValue,\n          props = this.props;\n      var isMulti = props.isMulti,\n          isRtl = props.isRtl,\n          options = props.options;\n      var hasValue = this.hasValue();\n      return {\n        clearValue: clearValue,\n        cx: cx,\n        getStyles: getStyles,\n        getValue: getValue,\n        hasValue: hasValue,\n        isMulti: isMulti,\n        isRtl: isRtl,\n        options: options,\n        selectOption: selectOption,\n        selectProps: props,\n        setValue: setValue,\n        theme: this.getTheme()\n      };\n    }\n  }, {\n    key: \"hasValue\",\n    value: function hasValue() {\n      var selectValue = this.state.selectValue;\n      return selectValue.length > 0;\n    }\n  }, {\n    key: \"hasOptions\",\n    value: function hasOptions() {\n      return !!this.getFocusableOptions().length;\n    }\n  }, {\n    key: \"isClearable\",\n    value: function isClearable() {\n      var _this$props7 = this.props,\n          isClearable = _this$props7.isClearable,\n          isMulti = _this$props7.isMulti; // single select, by default, IS NOT clearable\n      // multi select, by default, IS clearable\n\n      if (isClearable === undefined) return isMulti;\n      return isClearable;\n    }\n  }, {\n    key: \"isOptionDisabled\",\n    value: function isOptionDisabled(option, selectValue) {\n      return _isOptionDisabled(this.props, option, selectValue);\n    }\n  }, {\n    key: \"isOptionSelected\",\n    value: function isOptionSelected(option, selectValue) {\n      return _isOptionSelected(this.props, option, selectValue);\n    }\n  }, {\n    key: \"filterOption\",\n    value: function filterOption(option, inputValue) {\n      return _filterOption(this.props, option, inputValue);\n    }\n  }, {\n    key: \"formatOptionLabel\",\n    value: function formatOptionLabel(data, context) {\n      if (typeof this.props.formatOptionLabel === 'function') {\n        var _inputValue = this.props.inputValue;\n        var _selectValue = this.state.selectValue;\n        return this.props.formatOptionLabel(data, {\n          context: context,\n          inputValue: _inputValue,\n          selectValue: _selectValue\n        });\n      } else {\n        return this.getOptionLabel(data);\n      }\n    }\n  }, {\n    key: \"formatGroupLabel\",\n    value: function formatGroupLabel(data) {\n      return this.props.formatGroupLabel(data);\n    } // ==============================\n    // Mouse Handlers\n    // ==============================\n\n  }, {\n    key: \"startListeningComposition\",\n    value: // ==============================\n    // Composition Handlers\n    // ==============================\n    function startListeningComposition() {\n      if (document && document.addEventListener) {\n        document.addEventListener('compositionstart', this.onCompositionStart, false);\n        document.addEventListener('compositionend', this.onCompositionEnd, false);\n      }\n    }\n  }, {\n    key: \"stopListeningComposition\",\n    value: function stopListeningComposition() {\n      if (document && document.removeEventListener) {\n        document.removeEventListener('compositionstart', this.onCompositionStart);\n        document.removeEventListener('compositionend', this.onCompositionEnd);\n      }\n    }\n  }, {\n    key: \"startListeningToTouch\",\n    value: // ==============================\n    // Touch Handlers\n    // ==============================\n    function startListeningToTouch() {\n      if (document && document.addEventListener) {\n        document.addEventListener('touchstart', this.onTouchStart, false);\n        document.addEventListener('touchmove', this.onTouchMove, false);\n        document.addEventListener('touchend', this.onTouchEnd, false);\n      }\n    }\n  }, {\n    key: \"stopListeningToTouch\",\n    value: function stopListeningToTouch() {\n      if (document && document.removeEventListener) {\n        document.removeEventListener('touchstart', this.onTouchStart);\n        document.removeEventListener('touchmove', this.onTouchMove);\n        document.removeEventListener('touchend', this.onTouchEnd);\n      }\n    }\n  }, {\n    key: \"renderInput\",\n    value: // ==============================\n    // Renderers\n    // ==============================\n    function renderInput() {\n      var _this$props8 = this.props,\n          isDisabled = _this$props8.isDisabled,\n          isSearchable = _this$props8.isSearchable,\n          inputId = _this$props8.inputId,\n          inputValue = _this$props8.inputValue,\n          tabIndex = _this$props8.tabIndex,\n          form = _this$props8.form,\n          menuIsOpen = _this$props8.menuIsOpen;\n\n      var _this$getComponents = this.getComponents(),\n          Input = _this$getComponents.Input;\n\n      var _this$state4 = this.state,\n          inputIsHidden = _this$state4.inputIsHidden,\n          ariaSelection = _this$state4.ariaSelection;\n      var commonProps = this.commonProps;\n      var id = inputId || this.getElementId('input'); // aria attributes makes the JSX \"noisy\", separated for clarity\n\n      var ariaAttributes = _objectSpread2(_objectSpread2(_objectSpread2({\n        'aria-autocomplete': 'list',\n        'aria-expanded': menuIsOpen,\n        'aria-haspopup': true,\n        'aria-errormessage': this.props['aria-errormessage'],\n        'aria-invalid': this.props['aria-invalid'],\n        'aria-label': this.props['aria-label'],\n        'aria-labelledby': this.props['aria-labelledby'],\n        role: 'combobox'\n      }, menuIsOpen && {\n        'aria-controls': this.getElementId('listbox'),\n        'aria-owns': this.getElementId('listbox')\n      }), !isSearchable && {\n        'aria-readonly': true\n      }), this.hasValue() ? (ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus' && {\n        'aria-describedby': this.getElementId('live-region')\n      } : {\n        'aria-describedby': this.getElementId('placeholder')\n      });\n\n      if (!isSearchable) {\n        // use a dummy input to maintain focus/blur functionality\n        return /*#__PURE__*/React.createElement(DummyInput, _extends({\n          id: id,\n          innerRef: this.getInputRef,\n          onBlur: this.onInputBlur,\n          onChange: noop,\n          onFocus: this.onInputFocus,\n          disabled: isDisabled,\n          tabIndex: tabIndex,\n          inputMode: \"none\",\n          form: form,\n          value: \"\"\n        }, ariaAttributes));\n      }\n\n      return /*#__PURE__*/React.createElement(Input, _extends({}, commonProps, {\n        autoCapitalize: \"none\",\n        autoComplete: \"off\",\n        autoCorrect: \"off\",\n        id: id,\n        innerRef: this.getInputRef,\n        isDisabled: isDisabled,\n        isHidden: inputIsHidden,\n        onBlur: this.onInputBlur,\n        onChange: this.handleInputChange,\n        onFocus: this.onInputFocus,\n        spellCheck: \"false\",\n        tabIndex: tabIndex,\n        form: form,\n        type: \"text\",\n        value: inputValue\n      }, ariaAttributes));\n    }\n  }, {\n    key: \"renderPlaceholderOrValue\",\n    value: function renderPlaceholderOrValue() {\n      var _this3 = this;\n\n      var _this$getComponents2 = this.getComponents(),\n          MultiValue = _this$getComponents2.MultiValue,\n          MultiValueContainer = _this$getComponents2.MultiValueContainer,\n          MultiValueLabel = _this$getComponents2.MultiValueLabel,\n          MultiValueRemove = _this$getComponents2.MultiValueRemove,\n          SingleValue = _this$getComponents2.SingleValue,\n          Placeholder = _this$getComponents2.Placeholder;\n\n      var commonProps = this.commonProps;\n      var _this$props9 = this.props,\n          controlShouldRenderValue = _this$props9.controlShouldRenderValue,\n          isDisabled = _this$props9.isDisabled,\n          isMulti = _this$props9.isMulti,\n          inputValue = _this$props9.inputValue,\n          placeholder = _this$props9.placeholder;\n      var _this$state5 = this.state,\n          selectValue = _this$state5.selectValue,\n          focusedValue = _this$state5.focusedValue,\n          isFocused = _this$state5.isFocused;\n\n      if (!this.hasValue() || !controlShouldRenderValue) {\n        return inputValue ? null : /*#__PURE__*/React.createElement(Placeholder, _extends({}, commonProps, {\n          key: \"placeholder\",\n          isDisabled: isDisabled,\n          isFocused: isFocused,\n          innerProps: {\n            id: this.getElementId('placeholder')\n          }\n        }), placeholder);\n      }\n\n      if (isMulti) {\n        return selectValue.map(function (opt, index) {\n          var isOptionFocused = opt === focusedValue;\n          var key = \"\".concat(_this3.getOptionLabel(opt), \"-\").concat(_this3.getOptionValue(opt));\n          return /*#__PURE__*/React.createElement(MultiValue, _extends({}, commonProps, {\n            components: {\n              Container: MultiValueContainer,\n              Label: MultiValueLabel,\n              Remove: MultiValueRemove\n            },\n            isFocused: isOptionFocused,\n            isDisabled: isDisabled,\n            key: key,\n            index: index,\n            removeProps: {\n              onClick: function onClick() {\n                return _this3.removeValue(opt);\n              },\n              onTouchEnd: function onTouchEnd() {\n                return _this3.removeValue(opt);\n              },\n              onMouseDown: function onMouseDown(e) {\n                e.preventDefault();\n              }\n            },\n            data: opt\n          }), _this3.formatOptionLabel(opt, 'value'));\n        });\n      }\n\n      if (inputValue) {\n        return null;\n      }\n\n      var singleValue = selectValue[0];\n      return /*#__PURE__*/React.createElement(SingleValue, _extends({}, commonProps, {\n        data: singleValue,\n        isDisabled: isDisabled\n      }), this.formatOptionLabel(singleValue, 'value'));\n    }\n  }, {\n    key: \"renderClearIndicator\",\n    value: function renderClearIndicator() {\n      var _this$getComponents3 = this.getComponents(),\n          ClearIndicator = _this$getComponents3.ClearIndicator;\n\n      var commonProps = this.commonProps;\n      var _this$props10 = this.props,\n          isDisabled = _this$props10.isDisabled,\n          isLoading = _this$props10.isLoading;\n      var isFocused = this.state.isFocused;\n\n      if (!this.isClearable() || !ClearIndicator || isDisabled || !this.hasValue() || isLoading) {\n        return null;\n      }\n\n      var innerProps = {\n        onMouseDown: this.onClearIndicatorMouseDown,\n        onTouchEnd: this.onClearIndicatorTouchEnd,\n        'aria-hidden': 'true'\n      };\n      return /*#__PURE__*/React.createElement(ClearIndicator, _extends({}, commonProps, {\n        innerProps: innerProps,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderLoadingIndicator\",\n    value: function renderLoadingIndicator() {\n      var _this$getComponents4 = this.getComponents(),\n          LoadingIndicator = _this$getComponents4.LoadingIndicator;\n\n      var commonProps = this.commonProps;\n      var _this$props11 = this.props,\n          isDisabled = _this$props11.isDisabled,\n          isLoading = _this$props11.isLoading;\n      var isFocused = this.state.isFocused;\n      if (!LoadingIndicator || !isLoading) return null;\n      var innerProps = {\n        'aria-hidden': 'true'\n      };\n      return /*#__PURE__*/React.createElement(LoadingIndicator, _extends({}, commonProps, {\n        innerProps: innerProps,\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderIndicatorSeparator\",\n    value: function renderIndicatorSeparator() {\n      var _this$getComponents5 = this.getComponents(),\n          DropdownIndicator = _this$getComponents5.DropdownIndicator,\n          IndicatorSeparator = _this$getComponents5.IndicatorSeparator; // separator doesn't make sense without the dropdown indicator\n\n\n      if (!DropdownIndicator || !IndicatorSeparator) return null;\n      var commonProps = this.commonProps;\n      var isDisabled = this.props.isDisabled;\n      var isFocused = this.state.isFocused;\n      return /*#__PURE__*/React.createElement(IndicatorSeparator, _extends({}, commonProps, {\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderDropdownIndicator\",\n    value: function renderDropdownIndicator() {\n      var _this$getComponents6 = this.getComponents(),\n          DropdownIndicator = _this$getComponents6.DropdownIndicator;\n\n      if (!DropdownIndicator) return null;\n      var commonProps = this.commonProps;\n      var isDisabled = this.props.isDisabled;\n      var isFocused = this.state.isFocused;\n      var innerProps = {\n        onMouseDown: this.onDropdownIndicatorMouseDown,\n        onTouchEnd: this.onDropdownIndicatorTouchEnd,\n        'aria-hidden': 'true'\n      };\n      return /*#__PURE__*/React.createElement(DropdownIndicator, _extends({}, commonProps, {\n        innerProps: innerProps,\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }));\n    }\n  }, {\n    key: \"renderMenu\",\n    value: function renderMenu() {\n      var _this4 = this;\n\n      var _this$getComponents7 = this.getComponents(),\n          Group = _this$getComponents7.Group,\n          GroupHeading = _this$getComponents7.GroupHeading,\n          Menu = _this$getComponents7.Menu,\n          MenuList = _this$getComponents7.MenuList,\n          MenuPortal = _this$getComponents7.MenuPortal,\n          LoadingMessage = _this$getComponents7.LoadingMessage,\n          NoOptionsMessage = _this$getComponents7.NoOptionsMessage,\n          Option = _this$getComponents7.Option;\n\n      var commonProps = this.commonProps;\n      var focusedOption = this.state.focusedOption;\n      var _this$props12 = this.props,\n          captureMenuScroll = _this$props12.captureMenuScroll,\n          inputValue = _this$props12.inputValue,\n          isLoading = _this$props12.isLoading,\n          loadingMessage = _this$props12.loadingMessage,\n          minMenuHeight = _this$props12.minMenuHeight,\n          maxMenuHeight = _this$props12.maxMenuHeight,\n          menuIsOpen = _this$props12.menuIsOpen,\n          menuPlacement = _this$props12.menuPlacement,\n          menuPosition = _this$props12.menuPosition,\n          menuPortalTarget = _this$props12.menuPortalTarget,\n          menuShouldBlockScroll = _this$props12.menuShouldBlockScroll,\n          menuShouldScrollIntoView = _this$props12.menuShouldScrollIntoView,\n          noOptionsMessage = _this$props12.noOptionsMessage,\n          onMenuScrollToTop = _this$props12.onMenuScrollToTop,\n          onMenuScrollToBottom = _this$props12.onMenuScrollToBottom;\n      if (!menuIsOpen) return null; // TODO: Internal Option Type here\n\n      var render = function render(props, id) {\n        var type = props.type,\n            data = props.data,\n            isDisabled = props.isDisabled,\n            isSelected = props.isSelected,\n            label = props.label,\n            value = props.value;\n        var isFocused = focusedOption === data;\n        var onHover = isDisabled ? undefined : function () {\n          return _this4.onOptionHover(data);\n        };\n        var onSelect = isDisabled ? undefined : function () {\n          return _this4.selectOption(data);\n        };\n        var optionId = \"\".concat(_this4.getElementId('option'), \"-\").concat(id);\n        var innerProps = {\n          id: optionId,\n          onClick: onSelect,\n          onMouseMove: onHover,\n          onMouseOver: onHover,\n          tabIndex: -1\n        };\n        return /*#__PURE__*/React.createElement(Option, _extends({}, commonProps, {\n          innerProps: innerProps,\n          data: data,\n          isDisabled: isDisabled,\n          isSelected: isSelected,\n          key: optionId,\n          label: label,\n          type: type,\n          value: value,\n          isFocused: isFocused,\n          innerRef: isFocused ? _this4.getFocusedOptionRef : undefined\n        }), _this4.formatOptionLabel(props.data, 'menu'));\n      };\n\n      var menuUI;\n\n      if (this.hasOptions()) {\n        menuUI = this.getCategorizedOptions().map(function (item) {\n          if (item.type === 'group') {\n            var _data = item.data,\n                options = item.options,\n                groupIndex = item.index;\n            var groupId = \"\".concat(_this4.getElementId('group'), \"-\").concat(groupIndex);\n            var headingId = \"\".concat(groupId, \"-heading\");\n            return /*#__PURE__*/React.createElement(Group, _extends({}, commonProps, {\n              key: groupId,\n              data: _data,\n              options: options,\n              Heading: GroupHeading,\n              headingProps: {\n                id: headingId,\n                data: item.data\n              },\n              label: _this4.formatGroupLabel(item.data)\n            }), item.options.map(function (option) {\n              return render(option, \"\".concat(groupIndex, \"-\").concat(option.index));\n            }));\n          } else if (item.type === 'option') {\n            return render(item, \"\".concat(item.index));\n          }\n        });\n      } else if (isLoading) {\n        var message = loadingMessage({\n          inputValue: inputValue\n        });\n        if (message === null) return null;\n        menuUI = /*#__PURE__*/React.createElement(LoadingMessage, commonProps, message);\n      } else {\n        var _message = noOptionsMessage({\n          inputValue: inputValue\n        });\n\n        if (_message === null) return null;\n        menuUI = /*#__PURE__*/React.createElement(NoOptionsMessage, commonProps, _message);\n      }\n\n      var menuPlacementProps = {\n        minMenuHeight: minMenuHeight,\n        maxMenuHeight: maxMenuHeight,\n        menuPlacement: menuPlacement,\n        menuPosition: menuPosition,\n        menuShouldScrollIntoView: menuShouldScrollIntoView\n      };\n      var menuElement = /*#__PURE__*/React.createElement(MenuPlacer, _extends({}, commonProps, menuPlacementProps), function (_ref4) {\n        var ref = _ref4.ref,\n            _ref4$placerProps = _ref4.placerProps,\n            placement = _ref4$placerProps.placement,\n            maxHeight = _ref4$placerProps.maxHeight;\n        return /*#__PURE__*/React.createElement(Menu, _extends({}, commonProps, menuPlacementProps, {\n          innerRef: ref,\n          innerProps: {\n            onMouseDown: _this4.onMenuMouseDown,\n            onMouseMove: _this4.onMenuMouseMove,\n            id: _this4.getElementId('listbox')\n          },\n          isLoading: isLoading,\n          placement: placement\n        }), /*#__PURE__*/React.createElement(ScrollManager, {\n          captureEnabled: captureMenuScroll,\n          onTopArrive: onMenuScrollToTop,\n          onBottomArrive: onMenuScrollToBottom,\n          lockEnabled: menuShouldBlockScroll\n        }, function (scrollTargetRef) {\n          return /*#__PURE__*/React.createElement(MenuList, _extends({}, commonProps, {\n            innerRef: function innerRef(instance) {\n              _this4.getMenuListRef(instance);\n\n              scrollTargetRef(instance);\n            },\n            isLoading: isLoading,\n            maxHeight: maxHeight,\n            focusedOption: focusedOption\n          }), menuUI);\n        }));\n      }); // positioning behaviour is almost identical for portalled and fixed,\n      // so we use the same component. the actual portalling logic is forked\n      // within the component based on `menuPosition`\n\n      return menuPortalTarget || menuPosition === 'fixed' ? /*#__PURE__*/React.createElement(MenuPortal, _extends({}, commonProps, {\n        appendTo: menuPortalTarget,\n        controlElement: this.controlRef,\n        menuPlacement: menuPlacement,\n        menuPosition: menuPosition\n      }), menuElement) : menuElement;\n    }\n  }, {\n    key: \"renderFormField\",\n    value: function renderFormField() {\n      var _this5 = this;\n\n      var _this$props13 = this.props,\n          delimiter = _this$props13.delimiter,\n          isDisabled = _this$props13.isDisabled,\n          isMulti = _this$props13.isMulti,\n          name = _this$props13.name;\n      var selectValue = this.state.selectValue;\n      if (!name || isDisabled) return;\n\n      if (isMulti) {\n        if (delimiter) {\n          var value = selectValue.map(function (opt) {\n            return _this5.getOptionValue(opt);\n          }).join(delimiter);\n          return /*#__PURE__*/React.createElement(\"input\", {\n            name: name,\n            type: \"hidden\",\n            value: value\n          });\n        } else {\n          var input = selectValue.length > 0 ? selectValue.map(function (opt, i) {\n            return /*#__PURE__*/React.createElement(\"input\", {\n              key: \"i-\".concat(i),\n              name: name,\n              type: \"hidden\",\n              value: _this5.getOptionValue(opt)\n            });\n          }) : /*#__PURE__*/React.createElement(\"input\", {\n            name: name,\n            type: \"hidden\"\n          });\n          return /*#__PURE__*/React.createElement(\"div\", null, input);\n        }\n      } else {\n        var _value = selectValue[0] ? this.getOptionValue(selectValue[0]) : '';\n\n        return /*#__PURE__*/React.createElement(\"input\", {\n          name: name,\n          type: \"hidden\",\n          value: _value\n        });\n      }\n    }\n  }, {\n    key: \"renderLiveRegion\",\n    value: function renderLiveRegion() {\n      var commonProps = this.commonProps;\n      var _this$state6 = this.state,\n          ariaSelection = _this$state6.ariaSelection,\n          focusedOption = _this$state6.focusedOption,\n          focusedValue = _this$state6.focusedValue,\n          isFocused = _this$state6.isFocused,\n          selectValue = _this$state6.selectValue;\n      var focusableOptions = this.getFocusableOptions();\n      return /*#__PURE__*/React.createElement(LiveRegion, _extends({}, commonProps, {\n        id: this.getElementId('live-region'),\n        ariaSelection: ariaSelection,\n        focusedOption: focusedOption,\n        focusedValue: focusedValue,\n        isFocused: isFocused,\n        selectValue: selectValue,\n        focusableOptions: focusableOptions\n      }));\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      var _this$getComponents8 = this.getComponents(),\n          Control = _this$getComponents8.Control,\n          IndicatorsContainer = _this$getComponents8.IndicatorsContainer,\n          SelectContainer = _this$getComponents8.SelectContainer,\n          ValueContainer = _this$getComponents8.ValueContainer;\n\n      var _this$props14 = this.props,\n          className = _this$props14.className,\n          id = _this$props14.id,\n          isDisabled = _this$props14.isDisabled,\n          menuIsOpen = _this$props14.menuIsOpen;\n      var isFocused = this.state.isFocused;\n      var commonProps = this.commonProps = this.getCommonProps();\n      return /*#__PURE__*/React.createElement(SelectContainer, _extends({}, commonProps, {\n        className: className,\n        innerProps: {\n          id: id,\n          onKeyDown: this.onKeyDown\n        },\n        isDisabled: isDisabled,\n        isFocused: isFocused\n      }), this.renderLiveRegion(), /*#__PURE__*/React.createElement(Control, _extends({}, commonProps, {\n        innerRef: this.getControlRef,\n        innerProps: {\n          onMouseDown: this.onControlMouseDown,\n          onTouchEnd: this.onControlTouchEnd\n        },\n        isDisabled: isDisabled,\n        isFocused: isFocused,\n        menuIsOpen: menuIsOpen\n      }), /*#__PURE__*/React.createElement(ValueContainer, _extends({}, commonProps, {\n        isDisabled: isDisabled\n      }), this.renderPlaceholderOrValue(), this.renderInput()), /*#__PURE__*/React.createElement(IndicatorsContainer, _extends({}, commonProps, {\n        isDisabled: isDisabled\n      }), this.renderClearIndicator(), this.renderLoadingIndicator(), this.renderIndicatorSeparator(), this.renderDropdownIndicator())), this.renderMenu(), this.renderFormField());\n    }\n  }], [{\n    key: \"getDerivedStateFromProps\",\n    value: function getDerivedStateFromProps(props, state) {\n      var prevProps = state.prevProps,\n          clearFocusValueOnUpdate = state.clearFocusValueOnUpdate,\n          inputIsHiddenAfterUpdate = state.inputIsHiddenAfterUpdate,\n          ariaSelection = state.ariaSelection,\n          isFocused = state.isFocused,\n          prevWasFocused = state.prevWasFocused;\n      var options = props.options,\n          value = props.value,\n          menuIsOpen = props.menuIsOpen,\n          inputValue = props.inputValue,\n          isMulti = props.isMulti;\n      var selectValue = cleanValue(value);\n      var newMenuOptionsState = {};\n\n      if (prevProps && (value !== prevProps.value || options !== prevProps.options || menuIsOpen !== prevProps.menuIsOpen || inputValue !== prevProps.inputValue)) {\n        var focusableOptions = menuIsOpen ? buildFocusableOptions(props, selectValue) : [];\n        var focusedValue = clearFocusValueOnUpdate ? getNextFocusedValue(state, selectValue) : null;\n        var focusedOption = getNextFocusedOption(state, focusableOptions);\n        newMenuOptionsState = {\n          selectValue: selectValue,\n          focusedOption: focusedOption,\n          focusedValue: focusedValue,\n          clearFocusValueOnUpdate: false\n        };\n      } // some updates should toggle the state of the input visibility\n\n\n      var newInputIsHiddenState = inputIsHiddenAfterUpdate != null && props !== prevProps ? {\n        inputIsHidden: inputIsHiddenAfterUpdate,\n        inputIsHiddenAfterUpdate: undefined\n      } : {};\n      var newAriaSelection = ariaSelection;\n      var hasKeptFocus = isFocused && prevWasFocused;\n\n      if (isFocused && !hasKeptFocus) {\n        // If `value` or `defaultValue` props are not empty then announce them\n        // when the Select is initially focused\n        newAriaSelection = {\n          value: valueTernary(isMulti, selectValue, selectValue[0] || null),\n          options: selectValue,\n          action: 'initial-input-focus'\n        };\n        hasKeptFocus = !prevWasFocused;\n      } // If the 'initial-input-focus' action has been set already\n      // then reset the ariaSelection to null\n\n\n      if ((ariaSelection === null || ariaSelection === void 0 ? void 0 : ariaSelection.action) === 'initial-input-focus') {\n        newAriaSelection = null;\n      }\n\n      return _objectSpread2(_objectSpread2(_objectSpread2({}, newMenuOptionsState), newInputIsHiddenState), {}, {\n        prevProps: props,\n        ariaSelection: newAriaSelection,\n        prevWasFocused: hasKeptFocus\n      });\n    }\n  }]);\n\n  return Select;\n}(Component);\n\nSelect.defaultProps = defaultProps;\n\nexport { Select as S, getOptionLabel$1 as a, defaultProps as b, createFilter as c, defaultTheme as d, getOptionValue$1 as g, mergeStyles as m };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { jsx, keyframes, css as css$2, ClassNames } from '@emotion/react';\nimport _taggedTemplateLiteral from '@babel/runtime/helpers/esm/taggedTemplateLiteral';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _typeof from '@babel/runtime/helpers/esm/typeof';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport _defineProperty$1 from '@babel/runtime/helpers/esm/defineProperty';\nimport { Component, createContext } from 'react';\nimport { createPortal } from 'react-dom';\n\nfunction _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n\n    if (enumerableOnly) {\n      symbols = symbols.filter(function (sym) {\n        return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n      });\n    }\n\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}\n\nfunction _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return self;\n}\n\nfunction _possibleConstructorReturn(self, call) {\n  if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return _assertThisInitialized(self);\n}\n\nfunction _createSuper(Derived) {\n  var hasNativeReflectConstruct = _isNativeReflectConstruct();\n  return function _createSuperInternal() {\n    var Super = _getPrototypeOf(Derived),\n        result;\n\n    if (hasNativeReflectConstruct) {\n      var NewTarget = _getPrototypeOf(this).constructor;\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return _possibleConstructorReturn(this, result);\n  };\n}\n\nvar _excluded$3 = [\"className\", \"clearValue\", \"cx\", \"getStyles\", \"getValue\", \"hasValue\", \"isMulti\", \"isRtl\", \"options\", \"selectOption\", \"selectProps\", \"setValue\", \"theme\"];\n// ==============================\n// NO OP\n// ==============================\nvar noop = function noop() {};\n// Class Name Prefixer\n// ==============================\n\n/**\n String representation of component state for styling with class names.\n\n Expects an array of strings OR a string/object pair:\n - className(['comp', 'comp-arg', 'comp-arg-2'])\n   @returns 'react-select__comp react-select__comp-arg react-select__comp-arg-2'\n - className('comp', { some: true, state: false })\n   @returns 'react-select__comp react-select__comp--some'\n*/\n\nfunction applyPrefixToName(prefix, name) {\n  if (!name) {\n    return prefix;\n  } else if (name[0] === '-') {\n    return prefix + name;\n  } else {\n    return prefix + '__' + name;\n  }\n}\n\nfunction classNames(prefix, state, className) {\n  var arr = [className];\n\n  if (state && prefix) {\n    for (var key in state) {\n      if (state.hasOwnProperty(key) && state[key]) {\n        arr.push(\"\".concat(applyPrefixToName(prefix, key)));\n      }\n    }\n  }\n\n  return arr.filter(function (i) {\n    return i;\n  }).map(function (i) {\n    return String(i).trim();\n  }).join(' ');\n} // ==============================\n// Clean Value\n// ==============================\n\nvar cleanValue = function cleanValue(value) {\n  if (isArray(value)) return value.filter(Boolean);\n  if (_typeof(value) === 'object' && value !== null) return [value];\n  return [];\n}; // ==============================\n// Clean Common Props\n// ==============================\n\nvar cleanCommonProps = function cleanCommonProps(props) {\n  //className\n  props.className;\n      props.clearValue;\n      props.cx;\n      props.getStyles;\n      props.getValue;\n      props.hasValue;\n      props.isMulti;\n      props.isRtl;\n      props.options;\n      props.selectOption;\n      props.selectProps;\n      props.setValue;\n      props.theme;\n      var innerProps = _objectWithoutProperties(props, _excluded$3);\n\n  return _objectSpread2({}, innerProps);\n}; // ==============================\n// Handle Input Change\n// ==============================\n\nfunction handleInputChange(inputValue, actionMeta, onInputChange) {\n  if (onInputChange) {\n    var _newValue = onInputChange(inputValue, actionMeta);\n\n    if (typeof _newValue === 'string') return _newValue;\n  }\n\n  return inputValue;\n} // ==============================\n// Scroll Helpers\n// ==============================\n\nfunction isDocumentElement(el) {\n  return [document.documentElement, document.body, window].indexOf(el) > -1;\n} // Normalized Scroll Top\n// ------------------------------\n\nfunction normalizedHeight(el) {\n  if (isDocumentElement(el)) {\n    return window.innerHeight;\n  }\n\n  return el.clientHeight;\n} // Normalized scrollTo & scrollTop\n// ------------------------------\n\nfunction getScrollTop(el) {\n  if (isDocumentElement(el)) {\n    return window.pageYOffset;\n  }\n\n  return el.scrollTop;\n}\nfunction scrollTo(el, top) {\n  // with a scroll distance, we perform scroll on the element\n  if (isDocumentElement(el)) {\n    window.scrollTo(0, top);\n    return;\n  }\n\n  el.scrollTop = top;\n} // Get Scroll Parent\n// ------------------------------\n\nfunction getScrollParent(element) {\n  var style = getComputedStyle(element);\n  var excludeStaticParent = style.position === 'absolute';\n  var overflowRx = /(auto|scroll)/;\n  if (style.position === 'fixed') return document.documentElement;\n\n  for (var parent = element; parent = parent.parentElement;) {\n    style = getComputedStyle(parent);\n\n    if (excludeStaticParent && style.position === 'static') {\n      continue;\n    }\n\n    if (overflowRx.test(style.overflow + style.overflowY + style.overflowX)) {\n      return parent;\n    }\n  }\n\n  return document.documentElement;\n} // Animated Scroll To\n// ------------------------------\n\n/**\n  @param t: time (elapsed)\n  @param b: initial value\n  @param c: amount of change\n  @param d: duration\n*/\n\nfunction easeOutCubic(t, b, c, d) {\n  return c * ((t = t / d - 1) * t * t + 1) + b;\n}\n\nfunction animatedScrollTo(element, to) {\n  var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200;\n  var callback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : noop;\n  var start = getScrollTop(element);\n  var change = to - start;\n  var increment = 10;\n  var currentTime = 0;\n\n  function animateScroll() {\n    currentTime += increment;\n    var val = easeOutCubic(currentTime, start, change, duration);\n    scrollTo(element, val);\n\n    if (currentTime < duration) {\n      window.requestAnimationFrame(animateScroll);\n    } else {\n      callback(element);\n    }\n  }\n\n  animateScroll();\n} // Scroll Into View\n// ------------------------------\n\nfunction scrollIntoView(menuEl, focusedEl) {\n  var menuRect = menuEl.getBoundingClientRect();\n  var focusedRect = focusedEl.getBoundingClientRect();\n  var overScroll = focusedEl.offsetHeight / 3;\n\n  if (focusedRect.bottom + overScroll > menuRect.bottom) {\n    scrollTo(menuEl, Math.min(focusedEl.offsetTop + focusedEl.clientHeight - menuEl.offsetHeight + overScroll, menuEl.scrollHeight));\n  } else if (focusedRect.top - overScroll < menuRect.top) {\n    scrollTo(menuEl, Math.max(focusedEl.offsetTop - overScroll, 0));\n  }\n} // ==============================\n// Get bounding client object\n// ==============================\n// cannot get keys using array notation with DOMRect\n\nfunction getBoundingClientObj(element) {\n  var rect = element.getBoundingClientRect();\n  return {\n    bottom: rect.bottom,\n    height: rect.height,\n    left: rect.left,\n    right: rect.right,\n    top: rect.top,\n    width: rect.width\n  };\n}\n// Touch Capability Detector\n// ==============================\n\nfunction isTouchCapable() {\n  try {\n    document.createEvent('TouchEvent');\n    return true;\n  } catch (e) {\n    return false;\n  }\n} // ==============================\n// Mobile Device Detector\n// ==============================\n\nfunction isMobileDevice() {\n  try {\n    return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n  } catch (e) {\n    return false;\n  }\n} // ==============================\n// Passive Event Detector\n// ==============================\n// https://github.com/rafgraph/detect-it/blob/main/src/index.ts#L19-L36\n\nvar passiveOptionAccessed = false;\nvar options = {\n  get passive() {\n    return passiveOptionAccessed = true;\n  }\n\n}; // check for SSR\n\nvar w = typeof window !== 'undefined' ? window : {};\n\nif (w.addEventListener && w.removeEventListener) {\n  w.addEventListener('p', noop, options);\n  w.removeEventListener('p', noop, false);\n}\n\nvar supportsPassiveEvents = passiveOptionAccessed;\nfunction notNullish(item) {\n  return item != null;\n}\nfunction isArray(arg) {\n  return Array.isArray(arg);\n}\nfunction valueTernary(isMulti, multiValue, singleValue) {\n  return isMulti ? multiValue : singleValue;\n}\nfunction singleValueAsValue(singleValue) {\n  return singleValue;\n}\nfunction multiValueAsValue(multiValue) {\n  return multiValue;\n}\nvar removeProps = function removeProps(propsObj) {\n  for (var _len = arguments.length, properties = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    properties[_key - 1] = arguments[_key];\n  }\n\n  var propsMap = Object.entries(propsObj).filter(function (_ref) {\n    var _ref2 = _slicedToArray(_ref, 1),\n        key = _ref2[0];\n\n    return !properties.includes(key);\n  });\n  return propsMap.reduce(function (newProps, _ref3) {\n    var _ref4 = _slicedToArray(_ref3, 2),\n        key = _ref4[0],\n        val = _ref4[1];\n\n    newProps[key] = val;\n    return newProps;\n  }, {});\n};\n\nfunction getMenuPlacement(_ref) {\n  var maxHeight = _ref.maxHeight,\n      menuEl = _ref.menuEl,\n      minHeight = _ref.minHeight,\n      placement = _ref.placement,\n      shouldScroll = _ref.shouldScroll,\n      isFixedPosition = _ref.isFixedPosition,\n      theme = _ref.theme;\n  var spacing = theme.spacing;\n  var scrollParent = getScrollParent(menuEl);\n  var defaultState = {\n    placement: 'bottom',\n    maxHeight: maxHeight\n  }; // something went wrong, return default state\n\n  if (!menuEl || !menuEl.offsetParent) return defaultState; // we can't trust `scrollParent.scrollHeight` --> it may increase when\n  // the menu is rendered\n\n  var _scrollParent$getBoun = scrollParent.getBoundingClientRect(),\n      scrollHeight = _scrollParent$getBoun.height;\n\n  var _menuEl$getBoundingCl = menuEl.getBoundingClientRect(),\n      menuBottom = _menuEl$getBoundingCl.bottom,\n      menuHeight = _menuEl$getBoundingCl.height,\n      menuTop = _menuEl$getBoundingCl.top;\n\n  var _menuEl$offsetParent$ = menuEl.offsetParent.getBoundingClientRect(),\n      containerTop = _menuEl$offsetParent$.top;\n\n  var viewHeight = isFixedPosition ? window.innerHeight : normalizedHeight(scrollParent);\n  var scrollTop = getScrollTop(scrollParent);\n  var marginBottom = parseInt(getComputedStyle(menuEl).marginBottom, 10);\n  var marginTop = parseInt(getComputedStyle(menuEl).marginTop, 10);\n  var viewSpaceAbove = containerTop - marginTop;\n  var viewSpaceBelow = viewHeight - menuTop;\n  var scrollSpaceAbove = viewSpaceAbove + scrollTop;\n  var scrollSpaceBelow = scrollHeight - scrollTop - menuTop;\n  var scrollDown = menuBottom - viewHeight + scrollTop + marginBottom;\n  var scrollUp = scrollTop + menuTop - marginTop;\n  var scrollDuration = 160;\n\n  switch (placement) {\n    case 'auto':\n    case 'bottom':\n      // 1: the menu will fit, do nothing\n      if (viewSpaceBelow >= menuHeight) {\n        return {\n          placement: 'bottom',\n          maxHeight: maxHeight\n        };\n      } // 2: the menu will fit, if scrolled\n\n\n      if (scrollSpaceBelow >= menuHeight && !isFixedPosition) {\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n        }\n\n        return {\n          placement: 'bottom',\n          maxHeight: maxHeight\n        };\n      } // 3: the menu will fit, if constrained\n\n\n      if (!isFixedPosition && scrollSpaceBelow >= minHeight || isFixedPosition && viewSpaceBelow >= minHeight) {\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollDown, scrollDuration);\n        } // we want to provide as much of the menu as possible to the user,\n        // so give them whatever is available below rather than the minHeight.\n\n\n        var constrainedHeight = isFixedPosition ? viewSpaceBelow - marginBottom : scrollSpaceBelow - marginBottom;\n        return {\n          placement: 'bottom',\n          maxHeight: constrainedHeight\n        };\n      } // 4. Forked beviour when there isn't enough space below\n      // AUTO: flip the menu, render above\n\n\n      if (placement === 'auto' || isFixedPosition) {\n        // may need to be constrained after flipping\n        var _constrainedHeight = maxHeight;\n        var spaceAbove = isFixedPosition ? viewSpaceAbove : scrollSpaceAbove;\n\n        if (spaceAbove >= minHeight) {\n          _constrainedHeight = Math.min(spaceAbove - marginBottom - spacing.controlHeight, maxHeight);\n        }\n\n        return {\n          placement: 'top',\n          maxHeight: _constrainedHeight\n        };\n      } // BOTTOM: allow browser to increase scrollable area and immediately set scroll\n\n\n      if (placement === 'bottom') {\n        if (shouldScroll) {\n          scrollTo(scrollParent, scrollDown);\n        }\n\n        return {\n          placement: 'bottom',\n          maxHeight: maxHeight\n        };\n      }\n\n      break;\n\n    case 'top':\n      // 1: the menu will fit, do nothing\n      if (viewSpaceAbove >= menuHeight) {\n        return {\n          placement: 'top',\n          maxHeight: maxHeight\n        };\n      } // 2: the menu will fit, if scrolled\n\n\n      if (scrollSpaceAbove >= menuHeight && !isFixedPosition) {\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n        }\n\n        return {\n          placement: 'top',\n          maxHeight: maxHeight\n        };\n      } // 3: the menu will fit, if constrained\n\n\n      if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n        var _constrainedHeight2 = maxHeight; // we want to provide as much of the menu as possible to the user,\n        // so give them whatever is available below rather than the minHeight.\n\n        if (!isFixedPosition && scrollSpaceAbove >= minHeight || isFixedPosition && viewSpaceAbove >= minHeight) {\n          _constrainedHeight2 = isFixedPosition ? viewSpaceAbove - marginTop : scrollSpaceAbove - marginTop;\n        }\n\n        if (shouldScroll) {\n          animatedScrollTo(scrollParent, scrollUp, scrollDuration);\n        }\n\n        return {\n          placement: 'top',\n          maxHeight: _constrainedHeight2\n        };\n      } // 4. not enough space, the browser WILL NOT increase scrollable area when\n      // absolutely positioned element rendered above the viewport (only below).\n      // Flip the menu, render below\n\n\n      return {\n        placement: 'bottom',\n        maxHeight: maxHeight\n      };\n\n    default:\n      throw new Error(\"Invalid placement provided \\\"\".concat(placement, \"\\\".\"));\n  }\n\n  return defaultState;\n} // Menu Component\n// ------------------------------\n\nfunction alignToControl(placement) {\n  var placementToCSSProp = {\n    bottom: 'top',\n    top: 'bottom'\n  };\n  return placement ? placementToCSSProp[placement] : 'bottom';\n}\n\nvar coercePlacement = function coercePlacement(p) {\n  return p === 'auto' ? 'bottom' : p;\n};\n\nvar menuCSS = function menuCSS(_ref2) {\n  var _ref3;\n\n  var placement = _ref2.placement,\n      _ref2$theme = _ref2.theme,\n      borderRadius = _ref2$theme.borderRadius,\n      spacing = _ref2$theme.spacing,\n      colors = _ref2$theme.colors;\n  return _ref3 = {\n    label: 'menu'\n  }, _defineProperty$1(_ref3, alignToControl(placement), '100%'), _defineProperty$1(_ref3, \"backgroundColor\", colors.neutral0), _defineProperty$1(_ref3, \"borderRadius\", borderRadius), _defineProperty$1(_ref3, \"boxShadow\", '0 0 0 1px hsla(0, 0%, 0%, 0.1), 0 4px 11px hsla(0, 0%, 0%, 0.1)'), _defineProperty$1(_ref3, \"marginBottom\", spacing.menuGutter), _defineProperty$1(_ref3, \"marginTop\", spacing.menuGutter), _defineProperty$1(_ref3, \"position\", 'absolute'), _defineProperty$1(_ref3, \"width\", '100%'), _defineProperty$1(_ref3, \"zIndex\", 1), _ref3;\n};\nvar PortalPlacementContext = /*#__PURE__*/createContext({\n  getPortalPlacement: null\n}); // NOTE: internal only\n\nvar MenuPlacer = /*#__PURE__*/function (_Component) {\n  _inherits(MenuPlacer, _Component);\n\n  var _super = _createSuper(MenuPlacer);\n\n  function MenuPlacer() {\n    var _this;\n\n    _classCallCheck(this, MenuPlacer);\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _super.call.apply(_super, [this].concat(args));\n    _this.state = {\n      maxHeight: _this.props.maxMenuHeight,\n      placement: null\n    };\n    _this.context = void 0;\n\n    _this.getPlacement = function (ref) {\n      var _this$props = _this.props,\n          minMenuHeight = _this$props.minMenuHeight,\n          maxMenuHeight = _this$props.maxMenuHeight,\n          menuPlacement = _this$props.menuPlacement,\n          menuPosition = _this$props.menuPosition,\n          menuShouldScrollIntoView = _this$props.menuShouldScrollIntoView,\n          theme = _this$props.theme;\n      if (!ref) return; // DO NOT scroll if position is fixed\n\n      var isFixedPosition = menuPosition === 'fixed';\n      var shouldScroll = menuShouldScrollIntoView && !isFixedPosition;\n      var state = getMenuPlacement({\n        maxHeight: maxMenuHeight,\n        menuEl: ref,\n        minHeight: minMenuHeight,\n        placement: menuPlacement,\n        shouldScroll: shouldScroll,\n        isFixedPosition: isFixedPosition,\n        theme: theme\n      });\n      var getPortalPlacement = _this.context.getPortalPlacement;\n      if (getPortalPlacement) getPortalPlacement(state);\n\n      _this.setState(state);\n    };\n\n    _this.getUpdatedProps = function () {\n      var menuPlacement = _this.props.menuPlacement;\n      var placement = _this.state.placement || coercePlacement(menuPlacement);\n      return _objectSpread2(_objectSpread2({}, _this.props), {}, {\n        placement: placement,\n        maxHeight: _this.state.maxHeight\n      });\n    };\n\n    return _this;\n  }\n\n  _createClass(MenuPlacer, [{\n    key: \"render\",\n    value: function render() {\n      var children = this.props.children;\n      return children({\n        ref: this.getPlacement,\n        placerProps: this.getUpdatedProps()\n      });\n    }\n  }]);\n\n  return MenuPlacer;\n}(Component);\nMenuPlacer.contextType = PortalPlacementContext;\n\nvar Menu = function Menu(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerRef = props.innerRef,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('menu', props),\n    className: cx({\n      menu: true\n    }, className),\n    ref: innerRef\n  }, innerProps), children);\n};\n// Menu List\n// ==============================\n\nvar menuListCSS = function menuListCSS(_ref4) {\n  var maxHeight = _ref4.maxHeight,\n      baseUnit = _ref4.theme.spacing.baseUnit;\n  return {\n    maxHeight: maxHeight,\n    overflowY: 'auto',\n    paddingBottom: baseUnit,\n    paddingTop: baseUnit,\n    position: 'relative',\n    // required for offset[Height, Top] > keyboard scroll\n    WebkitOverflowScrolling: 'touch'\n  };\n};\nvar MenuList = function MenuList(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps,\n      innerRef = props.innerRef,\n      isMulti = props.isMulti;\n  return jsx(\"div\", _extends({\n    css: getStyles('menuList', props),\n    className: cx({\n      'menu-list': true,\n      'menu-list--is-multi': isMulti\n    }, className),\n    ref: innerRef\n  }, innerProps), children);\n}; // ==============================\n// Menu Notices\n// ==============================\n\nvar noticeCSS = function noticeCSS(_ref5) {\n  var _ref5$theme = _ref5.theme,\n      baseUnit = _ref5$theme.spacing.baseUnit,\n      colors = _ref5$theme.colors;\n  return {\n    color: colors.neutral40,\n    padding: \"\".concat(baseUnit * 2, \"px \").concat(baseUnit * 3, \"px\"),\n    textAlign: 'center'\n  };\n};\n\nvar noOptionsMessageCSS = noticeCSS;\nvar loadingMessageCSS = noticeCSS;\nvar NoOptionsMessage = function NoOptionsMessage(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('noOptionsMessage', props),\n    className: cx({\n      'menu-notice': true,\n      'menu-notice--no-options': true\n    }, className)\n  }, innerProps), children);\n};\nNoOptionsMessage.defaultProps = {\n  children: 'No options'\n};\nvar LoadingMessage = function LoadingMessage(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('loadingMessage', props),\n    className: cx({\n      'menu-notice': true,\n      'menu-notice--loading': true\n    }, className)\n  }, innerProps), children);\n};\nLoadingMessage.defaultProps = {\n  children: 'Loading...'\n}; // ==============================\n// Menu Portal\n// ==============================\n\nvar menuPortalCSS = function menuPortalCSS(_ref6) {\n  var rect = _ref6.rect,\n      offset = _ref6.offset,\n      position = _ref6.position;\n  return {\n    left: rect.left,\n    position: position,\n    top: offset,\n    width: rect.width,\n    zIndex: 1\n  };\n};\nvar MenuPortal = /*#__PURE__*/function (_Component2) {\n  _inherits(MenuPortal, _Component2);\n\n  var _super2 = _createSuper(MenuPortal);\n\n  function MenuPortal() {\n    var _this2;\n\n    _classCallCheck(this, MenuPortal);\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    _this2 = _super2.call.apply(_super2, [this].concat(args));\n    _this2.state = {\n      placement: null\n    };\n\n    _this2.getPortalPlacement = function (_ref7) {\n      var placement = _ref7.placement;\n      var initialPlacement = coercePlacement(_this2.props.menuPlacement); // avoid re-renders if the placement has not changed\n\n      if (placement !== initialPlacement) {\n        _this2.setState({\n          placement: placement\n        });\n      }\n    };\n\n    return _this2;\n  }\n\n  _createClass(MenuPortal, [{\n    key: \"render\",\n    value: function render() {\n      var _this$props2 = this.props,\n          appendTo = _this$props2.appendTo,\n          children = _this$props2.children,\n          className = _this$props2.className,\n          controlElement = _this$props2.controlElement,\n          cx = _this$props2.cx,\n          innerProps = _this$props2.innerProps,\n          menuPlacement = _this$props2.menuPlacement,\n          position = _this$props2.menuPosition,\n          getStyles = _this$props2.getStyles;\n      var isFixed = position === 'fixed'; // bail early if required elements aren't present\n\n      if (!appendTo && !isFixed || !controlElement) {\n        return null;\n      }\n\n      var placement = this.state.placement || coercePlacement(menuPlacement);\n      var rect = getBoundingClientObj(controlElement);\n      var scrollDistance = isFixed ? 0 : window.pageYOffset;\n      var offset = rect[placement] + scrollDistance;\n      var state = {\n        offset: offset,\n        position: position,\n        rect: rect\n      }; // same wrapper element whether fixed or portalled\n\n      var menuWrapper = jsx(\"div\", _extends({\n        css: getStyles('menuPortal', state),\n        className: cx({\n          'menu-portal': true\n        }, className)\n      }, innerProps), children);\n      return jsx(PortalPlacementContext.Provider, {\n        value: {\n          getPortalPlacement: this.getPortalPlacement\n        }\n      }, appendTo ? /*#__PURE__*/createPortal(menuWrapper, appendTo) : menuWrapper);\n    }\n  }]);\n\n  return MenuPortal;\n}(Component);\n\nvar containerCSS = function containerCSS(_ref) {\n  var isDisabled = _ref.isDisabled,\n      isRtl = _ref.isRtl;\n  return {\n    label: 'container',\n    direction: isRtl ? 'rtl' : undefined,\n    pointerEvents: isDisabled ? 'none' : undefined,\n    // cancel mouse events when disabled\n    position: 'relative'\n  };\n};\nvar SelectContainer = function SelectContainer(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps,\n      isDisabled = props.isDisabled,\n      isRtl = props.isRtl;\n  return jsx(\"div\", _extends({\n    css: getStyles('container', props),\n    className: cx({\n      '--is-disabled': isDisabled,\n      '--is-rtl': isRtl\n    }, className)\n  }, innerProps), children);\n}; // ==============================\n// Value Container\n// ==============================\n\nvar valueContainerCSS = function valueContainerCSS(_ref2) {\n  var spacing = _ref2.theme.spacing,\n      isMulti = _ref2.isMulti,\n      hasValue = _ref2.hasValue,\n      controlShouldRenderValue = _ref2.selectProps.controlShouldRenderValue;\n  return {\n    alignItems: 'center',\n    display: isMulti && hasValue && controlShouldRenderValue ? 'flex' : 'grid',\n    flex: 1,\n    flexWrap: 'wrap',\n    padding: \"\".concat(spacing.baseUnit / 2, \"px \").concat(spacing.baseUnit * 2, \"px\"),\n    WebkitOverflowScrolling: 'touch',\n    position: 'relative',\n    overflow: 'hidden'\n  };\n};\nvar ValueContainer = function ValueContainer(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      innerProps = props.innerProps,\n      isMulti = props.isMulti,\n      getStyles = props.getStyles,\n      hasValue = props.hasValue;\n  return jsx(\"div\", _extends({\n    css: getStyles('valueContainer', props),\n    className: cx({\n      'value-container': true,\n      'value-container--is-multi': isMulti,\n      'value-container--has-value': hasValue\n    }, className)\n  }, innerProps), children);\n}; // ==============================\n// Indicator Container\n// ==============================\n\nvar indicatorsContainerCSS = function indicatorsContainerCSS() {\n  return {\n    alignItems: 'center',\n    alignSelf: 'stretch',\n    display: 'flex',\n    flexShrink: 0\n  };\n};\nvar IndicatorsContainer = function IndicatorsContainer(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      innerProps = props.innerProps,\n      getStyles = props.getStyles;\n  return jsx(\"div\", _extends({\n    css: getStyles('indicatorsContainer', props),\n    className: cx({\n      indicators: true\n    }, className)\n  }, innerProps), children);\n};\n\nvar _templateObject;\n\nvar _excluded$2 = [\"size\"];\n\nfunction _EMOTION_STRINGIFIED_CSS_ERROR__() { return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\"; }\n\nvar _ref2 = process.env.NODE_ENV === \"production\" ? {\n  name: \"8mmkcg\",\n  styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0\"\n} : {\n  name: \"tj5bde-Svg\",\n  styles: \"display:inline-block;fill:currentColor;line-height:1;stroke:currentColor;stroke-width:0;label:Svg;\",\n  map: \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXdCSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgSWNvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBTdmcgPSAoe1xuICBzaXplLFxuICAuLi5wcm9wc1xufTogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZTogbnVtYmVyIH0pID0+IChcbiAgPHN2Z1xuICAgIGhlaWdodD17c2l6ZX1cbiAgICB3aWR0aD17c2l6ZX1cbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICBjc3M9e3tcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBsaW5lSGVpZ2h0OiAxLFxuICAgICAgc3Ryb2tlOiAnY3VycmVudENvbG9yJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IHR5cGUgQ3Jvc3NJY29uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgQ3Jvc3NJY29uID0gKHByb3BzOiBDcm9zc0ljb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNMTQuMzQ4IDE0Ljg0OWMtMC40NjkgMC40NjktMS4yMjkgMC40NjktMS42OTcgMGwtMi42NTEtMy4wMzAtMi42NTEgMy4wMjljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDAtMC40NjktMC40NjktMC40NjktMS4yMjkgMC0xLjY5N2wyLjc1OC0zLjE1LTIuNzU5LTMuMTUyYy0wLjQ2OS0wLjQ2OS0wLjQ2OS0xLjIyOCAwLTEuNjk3czEuMjI4LTAuNDY5IDEuNjk3IDBsMi42NTIgMy4wMzEgMi42NTEtMy4wMzFjMC40NjktMC40NjkgMS4yMjgtMC40NjkgMS42OTcgMHMwLjQ2OSAxLjIyOSAwIDEuNjk3bC0yLjc1OCAzLjE1MiAyLjc1OCAzLjE1YzAuNDY5IDAuNDY5IDAuNDY5IDEuMjI5IDAgMS42OTh6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuZXhwb3J0IHR5cGUgRG93bkNoZXZyb25Qcm9wcyA9IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU/OiBudW1iZXIgfTtcbmV4cG9ydCBjb25zdCBEb3duQ2hldnJvbiA9IChwcm9wczogRG93bkNoZXZyb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNNC41MTYgNy41NDhjMC40MzYtMC40NDYgMS4wNDMtMC40ODEgMS41NzYgMGwzLjkwOCAzLjc0NyAzLjkwOC0zLjc0N2MwLjUzMy0wLjQ4MSAxLjE0MS0wLjQ0NiAxLjU3NCAwIDAuNDM2IDAuNDQ1IDAuNDA4IDEuMTk3IDAgMS42MTUtMC40MDYgMC40MTgtNC42OTUgNC41MDItNC42OTUgNC41MDItMC4yMTcgMC4yMjMtMC41MDIgMC4zMzUtMC43ODcgMC4zMzVzLTAuNTctMC4xMTItMC43ODktMC4zMzVjMCAwLTQuMjg3LTQuMDg0LTQuNjk1LTQuNTAycy0wLjQzNi0xLjE3IDAtMS42MTV6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgQnV0dG9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBUaGUgY2hpbGRyZW4gdG8gYmUgcmVuZGVyZWQgaW5zaWRlIHRoZSBpbmRpY2F0b3IuICovXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAvKiogUHJvcHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBvbiB0byB0aGUgY2hpbGRyZW4uICovXG4gIGlubmVyUHJvcHM6IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snZGl2J107XG4gIC8qKiBUaGUgZm9jdXNlZCBzdGF0ZSBvZiB0aGUgc2VsZWN0LiAqL1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IGJhc2VDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oe1xuICBpc0ZvY3VzZWQsXG4gIHRoZW1lOiB7XG4gICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgIGNvbG9ycyxcbiAgfSxcbn06XG4gIHwgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuXG4gICc6aG92ZXInOiB7XG4gICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBkcm9wZG93bkluZGljYXRvckNTUyA9IGJhc2VDU1M7XG5leHBvcnQgY29uc3QgRHJvcGRvd25JbmRpY2F0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHByb3BzOiBEcm9wZG93bkluZGljYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+XG4pID0+IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjeCwgZ2V0U3R5bGVzLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjc3M9e2dldFN0eWxlcygnZHJvcGRvd25JbmRpY2F0b3InLCBwcm9wcyl9XG4gICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17Z2V0U3R5bGVzKCdjbGVhckluZGljYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICAgJ2NsZWFyLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8Q3Jvc3NJY29uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGljYXRvclNlcGFyYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpbm5lclByb3BzPzogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ107XG59XG5cbmV4cG9ydCBjb25zdCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oe1xuICBpc0Rpc2FibGVkLFxuICB0aGVtZToge1xuICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICBjb2xvcnMsXG4gIH0sXG59OiBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPik6IENTU09iamVjdFdpdGhMYWJlbCA9PiAoe1xuICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgbWFyZ2luQm90dG9tOiBiYXNlVW5pdCAqIDIsXG4gIG1hcmdpblRvcDogYmFzZVVuaXQgKiAyLFxuICB3aWR0aDogMSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2luZGljYXRvclNlcGFyYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goeyAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUgfSwgY2xhc3NOYW1lKX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KHtcbiAgaXNGb2N1c2VkLFxuICBzaXplLFxuICB0aGVtZToge1xuICAgIGNvbG9ycyxcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gIH0sXG59OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcbiAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgZm9udFNpemU6IHNpemUsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG1hcmdpblJpZ2h0OiBzaXplLFxuICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbn0pO1xuXG5pbnRlcmZhY2UgTG9hZGluZ0RvdFByb3BzIHtcbiAgZGVsYXk6IG51bWJlcjtcbiAgb2Zmc2V0OiBib29sZWFuO1xufVxuY29uc3QgTG9hZGluZ0RvdCA9ICh7IGRlbGF5LCBvZmZzZXQgfTogTG9hZGluZ0RvdFByb3BzKSA9PiAoXG4gIDxzcGFuXG4gICAgY3NzPXt7XG4gICAgICBhbmltYXRpb246IGAke2xvYWRpbmdEb3RBbmltYXRpb25zfSAxcyBlYXNlLWluLW91dCAke2RlbGF5fW1zIGluZmluaXRlO2AsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMWVtJyxcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgbWFyZ2luTGVmdDogb2Zmc2V0ID8gJzFlbScgOiB1bmRlZmluZWQsXG4gICAgICBoZWlnaHQ6ICcxZW0nLFxuICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICB3aWR0aDogJzFlbScsXG4gICAgfX1cbiAgLz5cbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGluZ0luZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAvKiogU2V0IHNpemUgb2YgdGhlIGNvbnRhaW5lci4gKi9cbiAgc2l6ZTogbnVtYmVyO1xufVxuZXhwb3J0IGNvbnN0IExvYWRpbmdJbmRpY2F0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHByb3BzOiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcywgaXNSdGwgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2xvYWRpbmdJbmRpY2F0b3InLCBwcm9wcyl9XG4gICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXswfSBvZmZzZXQ9e2lzUnRsfSAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezE2MH0gb2Zmc2V0IC8+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MzIwfSBvZmZzZXQ9eyFpc1J0bH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5Mb2FkaW5nSW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHsgc2l6ZTogNCB9O1xuIl19 */\",\n  toString: _EMOTION_STRINGIFIED_CSS_ERROR__\n};\n\n// ==============================\n// Dropdown & Clear Icons\n// ==============================\nvar Svg = function Svg(_ref) {\n  var size = _ref.size,\n      props = _objectWithoutProperties(_ref, _excluded$2);\n\n  return jsx(\"svg\", _extends({\n    height: size,\n    width: size,\n    viewBox: \"0 0 20 20\",\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    css: _ref2\n  }, props));\n};\n\nvar CrossIcon = function CrossIcon(props) {\n  return jsx(Svg, _extends({\n    size: 20\n  }, props), jsx(\"path\", {\n    d: \"M14.348 14.849c-0.469 0.469-1.229 0.469-1.697 0l-2.651-3.030-2.651 3.029c-0.469 0.469-1.229 0.469-1.697 0-0.469-0.469-0.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-0.469-0.469-0.469-1.228 0-1.697s1.228-0.469 1.697 0l2.652 3.031 2.651-3.031c0.469-0.469 1.228-0.469 1.697 0s0.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c0.469 0.469 0.469 1.229 0 1.698z\"\n  }));\n};\nvar DownChevron = function DownChevron(props) {\n  return jsx(Svg, _extends({\n    size: 20\n  }, props), jsx(\"path\", {\n    d: \"M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z\"\n  }));\n}; // ==============================\n// Dropdown & Clear Buttons\n// ==============================\n\nvar baseCSS = function baseCSS(_ref3) {\n  var isFocused = _ref3.isFocused,\n      _ref3$theme = _ref3.theme,\n      baseUnit = _ref3$theme.spacing.baseUnit,\n      colors = _ref3$theme.colors;\n  return {\n    label: 'indicatorContainer',\n    color: isFocused ? colors.neutral60 : colors.neutral20,\n    display: 'flex',\n    padding: baseUnit * 2,\n    transition: 'color 150ms',\n    ':hover': {\n      color: isFocused ? colors.neutral80 : colors.neutral40\n    }\n  };\n};\n\nvar dropdownIndicatorCSS = baseCSS;\nvar DropdownIndicator = function DropdownIndicator(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('dropdownIndicator', props),\n    className: cx({\n      indicator: true,\n      'dropdown-indicator': true\n    }, className)\n  }, innerProps), children || jsx(DownChevron, null));\n};\nvar clearIndicatorCSS = baseCSS;\nvar ClearIndicator = function ClearIndicator(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('clearIndicator', props),\n    className: cx({\n      indicator: true,\n      'clear-indicator': true\n    }, className)\n  }, innerProps), children || jsx(CrossIcon, null));\n}; // ==============================\n// Separator\n// ==============================\n\nvar indicatorSeparatorCSS = function indicatorSeparatorCSS(_ref4) {\n  var isDisabled = _ref4.isDisabled,\n      _ref4$theme = _ref4.theme,\n      baseUnit = _ref4$theme.spacing.baseUnit,\n      colors = _ref4$theme.colors;\n  return {\n    label: 'indicatorSeparator',\n    alignSelf: 'stretch',\n    backgroundColor: isDisabled ? colors.neutral10 : colors.neutral20,\n    marginBottom: baseUnit * 2,\n    marginTop: baseUnit * 2,\n    width: 1\n  };\n};\nvar IndicatorSeparator = function IndicatorSeparator(props) {\n  var className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"span\", _extends({}, innerProps, {\n    css: getStyles('indicatorSeparator', props),\n    className: cx({\n      'indicator-separator': true\n    }, className)\n  }));\n}; // ==============================\n// Loading\n// ==============================\n\nvar loadingDotAnimations = keyframes(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n  0%, 80%, 100% { opacity: 0; }\\n  40% { opacity: 1; }\\n\"])));\nvar loadingIndicatorCSS = function loadingIndicatorCSS(_ref5) {\n  var isFocused = _ref5.isFocused,\n      size = _ref5.size,\n      _ref5$theme = _ref5.theme,\n      colors = _ref5$theme.colors,\n      baseUnit = _ref5$theme.spacing.baseUnit;\n  return {\n    label: 'loadingIndicator',\n    color: isFocused ? colors.neutral60 : colors.neutral20,\n    display: 'flex',\n    padding: baseUnit * 2,\n    transition: 'color 150ms',\n    alignSelf: 'center',\n    fontSize: size,\n    lineHeight: 1,\n    marginRight: size,\n    textAlign: 'center',\n    verticalAlign: 'middle'\n  };\n};\n\nvar LoadingDot = function LoadingDot(_ref6) {\n  var delay = _ref6.delay,\n      offset = _ref6.offset;\n  return jsx(\"span\", {\n    css: /*#__PURE__*/css$2({\n      animation: \"\".concat(loadingDotAnimations, \" 1s ease-in-out \").concat(delay, \"ms infinite;\"),\n      backgroundColor: 'currentColor',\n      borderRadius: '1em',\n      display: 'inline-block',\n      marginLeft: offset ? '1em' : undefined,\n      height: '1em',\n      verticalAlign: 'top',\n      width: '1em'\n    }, process.env.NODE_ENV === \"production\" ? \"\" : \";label:LoadingDot;\", process.env.NODE_ENV === \"production\" ? \"\" : \"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGljYXRvcnMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFQSSIsImZpbGUiOiJpbmRpY2F0b3JzLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAanN4IGpzeCAqL1xuaW1wb3J0IHsgUmVhY3ROb2RlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsganN4LCBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5cbmltcG9ydCB7XG4gIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lLFxuICBDU1NPYmplY3RXaXRoTGFiZWwsXG4gIEdyb3VwQmFzZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgSWNvbnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5jb25zdCBTdmcgPSAoe1xuICBzaXplLFxuICAuLi5wcm9wc1xufTogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzdmcnXSAmIHsgc2l6ZTogbnVtYmVyIH0pID0+IChcbiAgPHN2Z1xuICAgIGhlaWdodD17c2l6ZX1cbiAgICB3aWR0aD17c2l6ZX1cbiAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICBjc3M9e3tcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgZmlsbDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICBsaW5lSGVpZ2h0OiAxLFxuICAgICAgc3Ryb2tlOiAnY3VycmVudENvbG9yJyxcbiAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgIH19XG4gICAgey4uLnByb3BzfVxuICAvPlxuKTtcblxuZXhwb3J0IHR5cGUgQ3Jvc3NJY29uUHJvcHMgPSBKU1guSW50cmluc2ljRWxlbWVudHNbJ3N2ZyddICYgeyBzaXplPzogbnVtYmVyIH07XG5leHBvcnQgY29uc3QgQ3Jvc3NJY29uID0gKHByb3BzOiBDcm9zc0ljb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNMTQuMzQ4IDE0Ljg0OWMtMC40NjkgMC40NjktMS4yMjkgMC40NjktMS42OTcgMGwtMi42NTEtMy4wMzAtMi42NTEgMy4wMjljLTAuNDY5IDAuNDY5LTEuMjI5IDAuNDY5LTEuNjk3IDAtMC40NjktMC40NjktMC40NjktMS4yMjkgMC0xLjY5N2wyLjc1OC0zLjE1LTIuNzU5LTMuMTUyYy0wLjQ2OS0wLjQ2OS0wLjQ2OS0xLjIyOCAwLTEuNjk3czEuMjI4LTAuNDY5IDEuNjk3IDBsMi42NTIgMy4wMzEgMi42NTEtMy4wMzFjMC40NjktMC40NjkgMS4yMjgtMC40NjkgMS42OTcgMHMwLjQ2OSAxLjIyOSAwIDEuNjk3bC0yLjc1OCAzLjE1MiAyLjc1OCAzLjE1YzAuNDY5IDAuNDY5IDAuNDY5IDEuMjI5IDAgMS42OTh6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuZXhwb3J0IHR5cGUgRG93bkNoZXZyb25Qcm9wcyA9IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snc3ZnJ10gJiB7IHNpemU/OiBudW1iZXIgfTtcbmV4cG9ydCBjb25zdCBEb3duQ2hldnJvbiA9IChwcm9wczogRG93bkNoZXZyb25Qcm9wcykgPT4gKFxuICA8U3ZnIHNpemU9ezIwfSB7Li4ucHJvcHN9PlxuICAgIDxwYXRoIGQ9XCJNNC41MTYgNy41NDhjMC40MzYtMC40NDYgMS4wNDMtMC40ODEgMS41NzYgMGwzLjkwOCAzLjc0NyAzLjkwOC0zLjc0N2MwLjUzMy0wLjQ4MSAxLjE0MS0wLjQ0NiAxLjU3NCAwIDAuNDM2IDAuNDQ1IDAuNDA4IDEuMTk3IDAgMS42MTUtMC40MDYgMC40MTgtNC42OTUgNC41MDItNC42OTUgNC41MDItMC4yMTcgMC4yMjMtMC41MDIgMC4zMzUtMC43ODcgMC4zMzVzLTAuNTctMC4xMTItMC43ODktMC4zMzVjMCAwLTQuMjg3LTQuMDg0LTQuNjk1LTQuNTAycy0wLjQzNi0xLjE3IDAtMS42MTV6XCIgLz5cbiAgPC9Tdmc+XG4pO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERyb3Bkb3duICYgQ2xlYXIgQnV0dG9uc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxcbiAgT3B0aW9uID0gdW5rbm93bixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4gPSBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+ID0gR3JvdXBCYXNlPE9wdGlvbj5cbj4gZXh0ZW5kcyBDb21tb25Qcm9wc0FuZENsYXNzTmFtZTxPcHRpb24sIElzTXVsdGksIEdyb3VwPiB7XG4gIC8qKiBUaGUgY2hpbGRyZW4gdG8gYmUgcmVuZGVyZWQgaW5zaWRlIHRoZSBpbmRpY2F0b3IuICovXG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAvKiogUHJvcHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBvbiB0byB0aGUgY2hpbGRyZW4uICovXG4gIGlubmVyUHJvcHM6IEpTWC5JbnRyaW5zaWNFbGVtZW50c1snZGl2J107XG4gIC8qKiBUaGUgZm9jdXNlZCBzdGF0ZSBvZiB0aGUgc2VsZWN0LiAqL1xuICBpc0ZvY3VzZWQ6IGJvb2xlYW47XG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IGJhc2VDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oe1xuICBpc0ZvY3VzZWQsXG4gIHRoZW1lOiB7XG4gICAgc3BhY2luZzogeyBiYXNlVW5pdCB9LFxuICAgIGNvbG9ycyxcbiAgfSxcbn06XG4gIHwgRHJvcGRvd25JbmRpY2F0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPlxuICB8IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdpbmRpY2F0b3JDb250YWluZXInLFxuICBjb2xvcjogaXNGb2N1c2VkID8gY29sb3JzLm5ldXRyYWw2MCA6IGNvbG9ycy5uZXV0cmFsMjAsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgcGFkZGluZzogYmFzZVVuaXQgKiAyLFxuICB0cmFuc2l0aW9uOiAnY29sb3IgMTUwbXMnLFxuXG4gICc6aG92ZXInOiB7XG4gICAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsODAgOiBjb2xvcnMubmV1dHJhbDQwLFxuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBkcm9wZG93bkluZGljYXRvckNTUyA9IGJhc2VDU1M7XG5leHBvcnQgY29uc3QgRHJvcGRvd25JbmRpY2F0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHByb3BzOiBEcm9wZG93bkluZGljYXRvclByb3BzPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+XG4pID0+IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBjeCwgZ2V0U3R5bGVzLCBpbm5lclByb3BzIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjc3M9e2dldFN0eWxlcygnZHJvcGRvd25JbmRpY2F0b3InLCBwcm9wcyl9XG4gICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdkcm9wZG93bi1pbmRpY2F0b3InOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWVcbiAgICAgICl9XG4gICAgICB7Li4uaW5uZXJQcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW4gfHwgPERvd25DaGV2cm9uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBDbGVhckluZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFRoZSBjaGlsZHJlbiB0byBiZSByZW5kZXJlZCBpbnNpZGUgdGhlIGluZGljYXRvci4gKi9cbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIC8qKiBQcm9wcyB0aGF0IHdpbGwgYmUgcGFzc2VkIG9uIHRvIHRoZSBjaGlsZHJlbi4gKi9cbiAgaW5uZXJQcm9wczogSlNYLkludHJpbnNpY0VsZW1lbnRzWydkaXYnXTtcbiAgLyoqIFRoZSBmb2N1c2VkIHN0YXRlIG9mIHRoZSBzZWxlY3QuICovXG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IGNsZWFySW5kaWNhdG9yQ1NTID0gYmFzZUNTUztcbmV4cG9ydCBjb25zdCBDbGVhckluZGljYXRvciA9IDxcbiAgT3B0aW9uLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbixcbiAgR3JvdXAgZXh0ZW5kcyBHcm91cEJhc2U8T3B0aW9uPlxuPihcbiAgcHJvcHM6IENsZWFySW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGN4LCBnZXRTdHlsZXMsIGlubmVyUHJvcHMgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNzcz17Z2V0U3R5bGVzKCdjbGVhckluZGljYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICAgICAgJ2NsZWFyLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbiB8fCA8Q3Jvc3NJY29uIC8+fVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTZXBhcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGljYXRvclNlcGFyYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpbm5lclByb3BzPzogSlNYLkludHJpbnNpY0VsZW1lbnRzWydzcGFuJ107XG59XG5cbmV4cG9ydCBjb25zdCBpbmRpY2F0b3JTZXBhcmF0b3JDU1MgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oe1xuICBpc0Rpc2FibGVkLFxuICB0aGVtZToge1xuICAgIHNwYWNpbmc6IHsgYmFzZVVuaXQgfSxcbiAgICBjb2xvcnMsXG4gIH0sXG59OiBJbmRpY2F0b3JTZXBhcmF0b3JQcm9wczxPcHRpb24sIElzTXVsdGksIEdyb3VwPik6IENTU09iamVjdFdpdGhMYWJlbCA9PiAoe1xuICBsYWJlbDogJ2luZGljYXRvclNlcGFyYXRvcicsXG4gIGFsaWduU2VsZjogJ3N0cmV0Y2gnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGlzRGlzYWJsZWQgPyBjb2xvcnMubmV1dHJhbDEwIDogY29sb3JzLm5ldXRyYWwyMCxcbiAgbWFyZ2luQm90dG9tOiBiYXNlVW5pdCAqIDIsXG4gIG1hcmdpblRvcDogYmFzZVVuaXQgKiAyLFxuICB3aWR0aDogMSxcbn0pO1xuXG5leHBvcnQgY29uc3QgSW5kaWNhdG9yU2VwYXJhdG9yID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KFxuICBwcm9wczogSW5kaWNhdG9yU2VwYXJhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcyB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2luZGljYXRvclNlcGFyYXRvcicsIHByb3BzKX1cbiAgICAgIGNsYXNzTmFtZT17Y3goeyAnaW5kaWNhdG9yLXNlcGFyYXRvcic6IHRydWUgfSwgY2xhc3NOYW1lKX1cbiAgICAvPlxuICApO1xufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBMb2FkaW5nXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuY29uc3QgbG9hZGluZ0RvdEFuaW1hdGlvbnMgPSBrZXlmcmFtZXNgXG4gIDAlLCA4MCUsIDEwMCUgeyBvcGFjaXR5OiAwOyB9XG4gIDQwJSB7IG9wYWNpdHk6IDE7IH1cbmA7XG5cbmV4cG9ydCBjb25zdCBsb2FkaW5nSW5kaWNhdG9yQ1NTID0gPFxuICBPcHRpb24sXG4gIElzTXVsdGkgZXh0ZW5kcyBib29sZWFuLFxuICBHcm91cCBleHRlbmRzIEdyb3VwQmFzZTxPcHRpb24+XG4+KHtcbiAgaXNGb2N1c2VkLFxuICBzaXplLFxuICB0aGVtZToge1xuICAgIGNvbG9ycyxcbiAgICBzcGFjaW5nOiB7IGJhc2VVbml0IH0sXG4gIH0sXG59OiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD4pOiBDU1NPYmplY3RXaXRoTGFiZWwgPT4gKHtcbiAgbGFiZWw6ICdsb2FkaW5nSW5kaWNhdG9yJyxcbiAgY29sb3I6IGlzRm9jdXNlZCA/IGNvbG9ycy5uZXV0cmFsNjAgOiBjb2xvcnMubmV1dHJhbDIwLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIHBhZGRpbmc6IGJhc2VVbml0ICogMixcbiAgdHJhbnNpdGlvbjogJ2NvbG9yIDE1MG1zJyxcbiAgYWxpZ25TZWxmOiAnY2VudGVyJyxcbiAgZm9udFNpemU6IHNpemUsXG4gIGxpbmVIZWlnaHQ6IDEsXG4gIG1hcmdpblJpZ2h0OiBzaXplLFxuICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbn0pO1xuXG5pbnRlcmZhY2UgTG9hZGluZ0RvdFByb3BzIHtcbiAgZGVsYXk6IG51bWJlcjtcbiAgb2Zmc2V0OiBib29sZWFuO1xufVxuY29uc3QgTG9hZGluZ0RvdCA9ICh7IGRlbGF5LCBvZmZzZXQgfTogTG9hZGluZ0RvdFByb3BzKSA9PiAoXG4gIDxzcGFuXG4gICAgY3NzPXt7XG4gICAgICBhbmltYXRpb246IGAke2xvYWRpbmdEb3RBbmltYXRpb25zfSAxcyBlYXNlLWluLW91dCAke2RlbGF5fW1zIGluZmluaXRlO2AsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdjdXJyZW50Q29sb3InLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMWVtJyxcbiAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLFxuICAgICAgbWFyZ2luTGVmdDogb2Zmc2V0ID8gJzFlbScgOiB1bmRlZmluZWQsXG4gICAgICBoZWlnaHQ6ICcxZW0nLFxuICAgICAgdmVydGljYWxBbGlnbjogJ3RvcCcsXG4gICAgICB3aWR0aDogJzFlbScsXG4gICAgfX1cbiAgLz5cbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZGluZ0luZGljYXRvclByb3BzPFxuICBPcHRpb24gPSB1bmtub3duLFxuICBJc011bHRpIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj4gPSBHcm91cEJhc2U8T3B0aW9uPlxuPiBleHRlbmRzIENvbW1vblByb3BzQW5kQ2xhc3NOYW1lPE9wdGlvbiwgSXNNdWx0aSwgR3JvdXA+IHtcbiAgLyoqIFByb3BzIHRoYXQgd2lsbCBiZSBwYXNzZWQgb24gdG8gdGhlIGNoaWxkcmVuLiAqL1xuICBpbm5lclByb3BzOiBKU1guSW50cmluc2ljRWxlbWVudHNbJ2RpdiddO1xuICAvKiogVGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIHNlbGVjdC4gKi9cbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAvKiogU2V0IHNpemUgb2YgdGhlIGNvbnRhaW5lci4gKi9cbiAgc2l6ZTogbnVtYmVyO1xufVxuZXhwb3J0IGNvbnN0IExvYWRpbmdJbmRpY2F0b3IgPSA8XG4gIE9wdGlvbixcbiAgSXNNdWx0aSBleHRlbmRzIGJvb2xlYW4sXG4gIEdyb3VwIGV4dGVuZHMgR3JvdXBCYXNlPE9wdGlvbj5cbj4oXG4gIHByb3BzOiBMb2FkaW5nSW5kaWNhdG9yUHJvcHM8T3B0aW9uLCBJc011bHRpLCBHcm91cD5cbikgPT4ge1xuICBjb25zdCB7IGNsYXNzTmFtZSwgY3gsIGdldFN0eWxlcywgaW5uZXJQcm9wcywgaXNSdGwgfSA9IHByb3BzO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY3NzPXtnZXRTdHlsZXMoJ2xvYWRpbmdJbmRpY2F0b3InLCBwcm9wcyl9XG4gICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICB7XG4gICAgICAgICAgaW5kaWNhdG9yOiB0cnVlLFxuICAgICAgICAgICdsb2FkaW5nLWluZGljYXRvcic6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5pbm5lclByb3BzfVxuICAgID5cbiAgICAgIDxMb2FkaW5nRG90IGRlbGF5PXswfSBvZmZzZXQ9e2lzUnRsfSAvPlxuICAgICAgPExvYWRpbmdEb3QgZGVsYXk9ezE2MH0gb2Zmc2V0IC8+XG4gICAgICA8TG9hZGluZ0RvdCBkZWxheT17MzIwfSBvZmZzZXQ9eyFpc1J0bH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5Mb2FkaW5nSW5kaWNhdG9yLmRlZmF1bHRQcm9wcyA9IHsgc2l6ZTogNCB9O1xuIl19 */\")\n  });\n};\n\nvar LoadingIndicator = function LoadingIndicator(props) {\n  var className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps,\n      isRtl = props.isRtl;\n  return jsx(\"div\", _extends({\n    css: getStyles('loadingIndicator', props),\n    className: cx({\n      indicator: true,\n      'loading-indicator': true\n    }, className)\n  }, innerProps), jsx(LoadingDot, {\n    delay: 0,\n    offset: isRtl\n  }), jsx(LoadingDot, {\n    delay: 160,\n    offset: true\n  }), jsx(LoadingDot, {\n    delay: 320,\n    offset: !isRtl\n  }));\n};\nLoadingIndicator.defaultProps = {\n  size: 4\n};\n\nvar css$1 = function css(_ref) {\n  var isDisabled = _ref.isDisabled,\n      isFocused = _ref.isFocused,\n      _ref$theme = _ref.theme,\n      colors = _ref$theme.colors,\n      borderRadius = _ref$theme.borderRadius,\n      spacing = _ref$theme.spacing;\n  return {\n    label: 'control',\n    alignItems: 'center',\n    backgroundColor: isDisabled ? colors.neutral5 : colors.neutral0,\n    borderColor: isDisabled ? colors.neutral10 : isFocused ? colors.primary : colors.neutral20,\n    borderRadius: borderRadius,\n    borderStyle: 'solid',\n    borderWidth: 1,\n    boxShadow: isFocused ? \"0 0 0 1px \".concat(colors.primary) : undefined,\n    cursor: 'default',\n    display: 'flex',\n    flexWrap: 'wrap',\n    justifyContent: 'space-between',\n    minHeight: spacing.controlHeight,\n    outline: '0 !important',\n    position: 'relative',\n    transition: 'all 100ms',\n    '&:hover': {\n      borderColor: isFocused ? colors.primary : colors.neutral30\n    }\n  };\n};\n\nvar Control = function Control(props) {\n  var children = props.children,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      className = props.className,\n      isDisabled = props.isDisabled,\n      isFocused = props.isFocused,\n      innerRef = props.innerRef,\n      innerProps = props.innerProps,\n      menuIsOpen = props.menuIsOpen;\n  return jsx(\"div\", _extends({\n    ref: innerRef,\n    css: getStyles('control', props),\n    className: cx({\n      control: true,\n      'control--is-disabled': isDisabled,\n      'control--is-focused': isFocused,\n      'control--menu-is-open': menuIsOpen\n    }, className)\n  }, innerProps), children);\n};\n\nvar _excluded$1 = [\"data\"];\nvar groupCSS = function groupCSS(_ref) {\n  var spacing = _ref.theme.spacing;\n  return {\n    paddingBottom: spacing.baseUnit * 2,\n    paddingTop: spacing.baseUnit * 2\n  };\n};\n\nvar Group = function Group(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      Heading = props.Heading,\n      headingProps = props.headingProps,\n      innerProps = props.innerProps,\n      label = props.label,\n      theme = props.theme,\n      selectProps = props.selectProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('group', props),\n    className: cx({\n      group: true\n    }, className)\n  }, innerProps), jsx(Heading, _extends({}, headingProps, {\n    selectProps: selectProps,\n    theme: theme,\n    getStyles: getStyles,\n    cx: cx\n  }), label), jsx(\"div\", null, children));\n};\n\nvar groupHeadingCSS = function groupHeadingCSS(_ref2) {\n  var spacing = _ref2.theme.spacing;\n  return {\n    label: 'group',\n    color: '#999',\n    cursor: 'default',\n    display: 'block',\n    fontSize: '75%',\n    fontWeight: 500,\n    marginBottom: '0.25em',\n    paddingLeft: spacing.baseUnit * 3,\n    paddingRight: spacing.baseUnit * 3,\n    textTransform: 'uppercase'\n  };\n};\nvar GroupHeading = function GroupHeading(props) {\n  var getStyles = props.getStyles,\n      cx = props.cx,\n      className = props.className;\n\n  var _cleanCommonProps = cleanCommonProps(props);\n      _cleanCommonProps.data;\n      var innerProps = _objectWithoutProperties(_cleanCommonProps, _excluded$1);\n\n  return jsx(\"div\", _extends({\n    css: getStyles('groupHeading', props),\n    className: cx({\n      'group-heading': true\n    }, className)\n  }, innerProps));\n};\n\nvar _excluded = [\"innerRef\", \"isDisabled\", \"isHidden\", \"inputClassName\"];\nvar inputCSS = function inputCSS(_ref) {\n  var isDisabled = _ref.isDisabled,\n      value = _ref.value,\n      _ref$theme = _ref.theme,\n      spacing = _ref$theme.spacing,\n      colors = _ref$theme.colors;\n  return _objectSpread2({\n    margin: spacing.baseUnit / 2,\n    paddingBottom: spacing.baseUnit / 2,\n    paddingTop: spacing.baseUnit / 2,\n    visibility: isDisabled ? 'hidden' : 'visible',\n    color: colors.neutral80,\n    // force css to recompute when value change due to @emotion bug.\n    // We can remove it whenever the bug is fixed.\n    transform: value ? 'translateZ(0)' : ''\n  }, containerStyle);\n};\nvar spacingStyle = {\n  gridArea: '1 / 2',\n  font: 'inherit',\n  minWidth: '2px',\n  border: 0,\n  margin: 0,\n  outline: 0,\n  padding: 0\n};\nvar containerStyle = {\n  flex: '1 1 auto',\n  display: 'inline-grid',\n  gridArea: '1 / 1 / 2 / 3',\n  gridTemplateColumns: '0 min-content',\n  '&:after': _objectSpread2({\n    content: 'attr(data-value) \" \"',\n    visibility: 'hidden',\n    whiteSpace: 'pre'\n  }, spacingStyle)\n};\n\nvar inputStyle = function inputStyle(isHidden) {\n  return _objectSpread2({\n    label: 'input',\n    color: 'inherit',\n    background: 0,\n    opacity: isHidden ? 0 : 1,\n    width: '100%'\n  }, spacingStyle);\n};\n\nvar Input = function Input(props) {\n  var className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      value = props.value;\n\n  var _cleanCommonProps = cleanCommonProps(props),\n      innerRef = _cleanCommonProps.innerRef,\n      isDisabled = _cleanCommonProps.isDisabled,\n      isHidden = _cleanCommonProps.isHidden,\n      inputClassName = _cleanCommonProps.inputClassName,\n      innerProps = _objectWithoutProperties(_cleanCommonProps, _excluded);\n\n  return jsx(\"div\", {\n    className: cx({\n      'input-container': true\n    }, className),\n    css: getStyles('input', props),\n    \"data-value\": value || ''\n  }, jsx(\"input\", _extends({\n    className: cx({\n      input: true\n    }, inputClassName),\n    ref: innerRef,\n    style: inputStyle(isHidden),\n    disabled: isDisabled\n  }, innerProps)));\n};\n\nvar multiValueCSS = function multiValueCSS(_ref) {\n  var _ref$theme = _ref.theme,\n      spacing = _ref$theme.spacing,\n      borderRadius = _ref$theme.borderRadius,\n      colors = _ref$theme.colors;\n  return {\n    label: 'multiValue',\n    backgroundColor: colors.neutral10,\n    borderRadius: borderRadius / 2,\n    display: 'flex',\n    margin: spacing.baseUnit / 2,\n    minWidth: 0 // resolves flex/text-overflow bug\n\n  };\n};\nvar multiValueLabelCSS = function multiValueLabelCSS(_ref2) {\n  var _ref2$theme = _ref2.theme,\n      borderRadius = _ref2$theme.borderRadius,\n      colors = _ref2$theme.colors,\n      cropWithEllipsis = _ref2.cropWithEllipsis;\n  return {\n    borderRadius: borderRadius / 2,\n    color: colors.neutral80,\n    fontSize: '85%',\n    overflow: 'hidden',\n    padding: 3,\n    paddingLeft: 6,\n    textOverflow: cropWithEllipsis || cropWithEllipsis === undefined ? 'ellipsis' : undefined,\n    whiteSpace: 'nowrap'\n  };\n};\nvar multiValueRemoveCSS = function multiValueRemoveCSS(_ref3) {\n  var _ref3$theme = _ref3.theme,\n      spacing = _ref3$theme.spacing,\n      borderRadius = _ref3$theme.borderRadius,\n      colors = _ref3$theme.colors,\n      isFocused = _ref3.isFocused;\n  return {\n    alignItems: 'center',\n    borderRadius: borderRadius / 2,\n    backgroundColor: isFocused ? colors.dangerLight : undefined,\n    display: 'flex',\n    paddingLeft: spacing.baseUnit,\n    paddingRight: spacing.baseUnit,\n    ':hover': {\n      backgroundColor: colors.dangerLight,\n      color: colors.danger\n    }\n  };\n};\nvar MultiValueGeneric = function MultiValueGeneric(_ref4) {\n  var children = _ref4.children,\n      innerProps = _ref4.innerProps;\n  return jsx(\"div\", innerProps, children);\n};\nvar MultiValueContainer = MultiValueGeneric;\nvar MultiValueLabel = MultiValueGeneric;\nfunction MultiValueRemove(_ref5) {\n  var children = _ref5.children,\n      innerProps = _ref5.innerProps;\n  return jsx(\"div\", _extends({\n    role: \"button\"\n  }, innerProps), children || jsx(CrossIcon, {\n    size: 14\n  }));\n}\n\nvar MultiValue = function MultiValue(props) {\n  var children = props.children,\n      className = props.className,\n      components = props.components,\n      cx = props.cx,\n      data = props.data,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps,\n      isDisabled = props.isDisabled,\n      removeProps = props.removeProps,\n      selectProps = props.selectProps;\n  var Container = components.Container,\n      Label = components.Label,\n      Remove = components.Remove;\n  return jsx(ClassNames, null, function (_ref6) {\n    var css = _ref6.css,\n        emotionCx = _ref6.cx;\n    return jsx(Container, {\n      data: data,\n      innerProps: _objectSpread2({\n        className: emotionCx(css(getStyles('multiValue', props)), cx({\n          'multi-value': true,\n          'multi-value--is-disabled': isDisabled\n        }, className))\n      }, innerProps),\n      selectProps: selectProps\n    }, jsx(Label, {\n      data: data,\n      innerProps: {\n        className: emotionCx(css(getStyles('multiValueLabel', props)), cx({\n          'multi-value__label': true\n        }, className))\n      },\n      selectProps: selectProps\n    }, children), jsx(Remove, {\n      data: data,\n      innerProps: _objectSpread2({\n        className: emotionCx(css(getStyles('multiValueRemove', props)), cx({\n          'multi-value__remove': true\n        }, className)),\n        'aria-label': \"Remove \".concat(children || 'option')\n      }, removeProps),\n      selectProps: selectProps\n    }));\n  });\n};\n\nvar optionCSS = function optionCSS(_ref) {\n  var isDisabled = _ref.isDisabled,\n      isFocused = _ref.isFocused,\n      isSelected = _ref.isSelected,\n      _ref$theme = _ref.theme,\n      spacing = _ref$theme.spacing,\n      colors = _ref$theme.colors;\n  return {\n    label: 'option',\n    backgroundColor: isSelected ? colors.primary : isFocused ? colors.primary25 : 'transparent',\n    color: isDisabled ? colors.neutral20 : isSelected ? colors.neutral0 : 'inherit',\n    cursor: 'default',\n    display: 'block',\n    fontSize: 'inherit',\n    padding: \"\".concat(spacing.baseUnit * 2, \"px \").concat(spacing.baseUnit * 3, \"px\"),\n    width: '100%',\n    userSelect: 'none',\n    WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)',\n    // provide some affordance on touch devices\n    ':active': {\n      backgroundColor: !isDisabled ? isSelected ? colors.primary : colors.primary50 : undefined\n    }\n  };\n};\n\nvar Option = function Option(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      isDisabled = props.isDisabled,\n      isFocused = props.isFocused,\n      isSelected = props.isSelected,\n      innerRef = props.innerRef,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('option', props),\n    className: cx({\n      option: true,\n      'option--is-disabled': isDisabled,\n      'option--is-focused': isFocused,\n      'option--is-selected': isSelected\n    }, className),\n    ref: innerRef,\n    \"aria-disabled\": isDisabled\n  }, innerProps), children);\n};\n\nvar placeholderCSS = function placeholderCSS(_ref) {\n  var _ref$theme = _ref.theme,\n      spacing = _ref$theme.spacing,\n      colors = _ref$theme.colors;\n  return {\n    label: 'placeholder',\n    color: colors.neutral50,\n    gridArea: '1 / 1 / 2 / 3',\n    marginLeft: spacing.baseUnit / 2,\n    marginRight: spacing.baseUnit / 2\n  };\n};\n\nvar Placeholder = function Placeholder(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('placeholder', props),\n    className: cx({\n      placeholder: true\n    }, className)\n  }, innerProps), children);\n};\n\nvar css = function css(_ref) {\n  var isDisabled = _ref.isDisabled,\n      _ref$theme = _ref.theme,\n      spacing = _ref$theme.spacing,\n      colors = _ref$theme.colors;\n  return {\n    label: 'singleValue',\n    color: isDisabled ? colors.neutral40 : colors.neutral80,\n    gridArea: '1 / 1 / 2 / 3',\n    marginLeft: spacing.baseUnit / 2,\n    marginRight: spacing.baseUnit / 2,\n    maxWidth: '100%',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap'\n  };\n};\n\nvar SingleValue = function SingleValue(props) {\n  var children = props.children,\n      className = props.className,\n      cx = props.cx,\n      getStyles = props.getStyles,\n      isDisabled = props.isDisabled,\n      innerProps = props.innerProps;\n  return jsx(\"div\", _extends({\n    css: getStyles('singleValue', props),\n    className: cx({\n      'single-value': true,\n      'single-value--is-disabled': isDisabled\n    }, className)\n  }, innerProps), children);\n};\n\nvar components = {\n  ClearIndicator: ClearIndicator,\n  Control: Control,\n  DropdownIndicator: DropdownIndicator,\n  DownChevron: DownChevron,\n  CrossIcon: CrossIcon,\n  Group: Group,\n  GroupHeading: GroupHeading,\n  IndicatorsContainer: IndicatorsContainer,\n  IndicatorSeparator: IndicatorSeparator,\n  Input: Input,\n  LoadingIndicator: LoadingIndicator,\n  Menu: Menu,\n  MenuList: MenuList,\n  MenuPortal: MenuPortal,\n  LoadingMessage: LoadingMessage,\n  NoOptionsMessage: NoOptionsMessage,\n  MultiValue: MultiValue,\n  MultiValueContainer: MultiValueContainer,\n  MultiValueLabel: MultiValueLabel,\n  MultiValueRemove: MultiValueRemove,\n  Option: Option,\n  Placeholder: Placeholder,\n  SelectContainer: SelectContainer,\n  SingleValue: SingleValue,\n  ValueContainer: ValueContainer\n};\nvar defaultComponents = function defaultComponents(props) {\n  return _objectSpread2(_objectSpread2({}, components), props.components);\n};\n\nexport { isTouchCapable as A, isMobileDevice as B, multiValueAsValue as C, singleValueAsValue as D, valueTernary as E, classNames as F, defaultComponents as G, notNullish as H, isDocumentElement as I, cleanValue as J, scrollIntoView as K, noop as L, MenuPlacer as M, handleInputChange as N, _createSuper as _, _objectSpread2 as a, clearIndicatorCSS as b, components as c, containerCSS as d, css$1 as e, dropdownIndicatorCSS as f, groupCSS as g, groupHeadingCSS as h, indicatorsContainerCSS as i, indicatorSeparatorCSS as j, inputCSS as k, loadingIndicatorCSS as l, loadingMessageCSS as m, menuCSS as n, menuListCSS as o, menuPortalCSS as p, multiValueCSS as q, removeProps as r, supportsPassiveEvents as s, multiValueLabelCSS as t, multiValueRemoveCSS as u, noOptionsMessageCSS as v, optionCSS as w, placeholderCSS as x, css as y, valueContainerCSS as z };\n","import { u as useStateManager } from './useStateManager-68425271.esm.js';\nexport { u as useStateManager } from './useStateManager-68425271.esm.js';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef, Component } from 'react';\nimport { S as Select } from './Select-54ac8379.esm.js';\nexport { c as createFilter, d as defaultTheme, m as mergeStyles } from './Select-54ac8379.esm.js';\nimport _classCallCheck from '@babel/runtime/helpers/esm/classCallCheck';\nimport _createClass from '@babel/runtime/helpers/esm/createClass';\nimport _inherits from '@babel/runtime/helpers/esm/inherits';\nimport { _ as _createSuper } from './index-a7690a33.esm.js';\nexport { c as components } from './index-a7690a33.esm.js';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\nimport memoizeOne from 'memoize-one';\nimport '@babel/runtime/helpers/slicedToArray';\nimport '@babel/runtime/helpers/objectWithoutProperties';\nimport '@babel/runtime/helpers/toConsumableArray';\nimport '@babel/runtime/helpers/taggedTemplateLiteral';\nimport '@babel/runtime/helpers/typeof';\nimport '@babel/runtime/helpers/defineProperty';\nimport 'react-dom';\n\nvar StateManagedSelect = /*#__PURE__*/forwardRef(function (props, ref) {\n  var baseSelectProps = useStateManager(props);\n  return /*#__PURE__*/React.createElement(Select, _extends({\n    ref: ref\n  }, baseSelectProps));\n});\n\nvar NonceProvider = /*#__PURE__*/function (_Component) {\n  _inherits(NonceProvider, _Component);\n\n  var _super = _createSuper(NonceProvider);\n\n  function NonceProvider(props) {\n    var _this;\n\n    _classCallCheck(this, NonceProvider);\n\n    _this = _super.call(this, props);\n\n    _this.createEmotionCache = function (nonce, key) {\n      return createCache({\n        nonce: nonce,\n        key: key\n      });\n    };\n\n    _this.createEmotionCache = memoizeOne(_this.createEmotionCache);\n    return _this;\n  }\n\n  _createClass(NonceProvider, [{\n    key: \"render\",\n    value: function render() {\n      var emotionCache = this.createEmotionCache(this.props.nonce, this.props.cacheKey);\n      return /*#__PURE__*/React.createElement(CacheProvider, {\n        value: emotionCache\n      }, this.props.children);\n    }\n  }]);\n\n  return NonceProvider;\n}(Component);\n\nexport default StateManagedSelect;\nexport { NonceProvider };\n","import { a as _objectSpread2 } from './index-a7690a33.esm.js';\nimport _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';\nimport _objectWithoutProperties from '@babel/runtime/helpers/esm/objectWithoutProperties';\nimport { useState, useCallback } from 'react';\n\nvar _excluded = [\"defaultInputValue\", \"defaultMenuIsOpen\", \"defaultValue\", \"inputValue\", \"menuIsOpen\", \"onChange\", \"onInputChange\", \"onMenuClose\", \"onMenuOpen\", \"value\"];\nfunction useStateManager(_ref) {\n  var _ref$defaultInputValu = _ref.defaultInputValue,\n      defaultInputValue = _ref$defaultInputValu === void 0 ? '' : _ref$defaultInputValu,\n      _ref$defaultMenuIsOpe = _ref.defaultMenuIsOpen,\n      defaultMenuIsOpen = _ref$defaultMenuIsOpe === void 0 ? false : _ref$defaultMenuIsOpe,\n      _ref$defaultValue = _ref.defaultValue,\n      defaultValue = _ref$defaultValue === void 0 ? null : _ref$defaultValue,\n      propsInputValue = _ref.inputValue,\n      propsMenuIsOpen = _ref.menuIsOpen,\n      propsOnChange = _ref.onChange,\n      propsOnInputChange = _ref.onInputChange,\n      propsOnMenuClose = _ref.onMenuClose,\n      propsOnMenuOpen = _ref.onMenuOpen,\n      propsValue = _ref.value,\n      restSelectProps = _objectWithoutProperties(_ref, _excluded);\n\n  var _useState = useState(propsInputValue !== undefined ? propsInputValue : defaultInputValue),\n      _useState2 = _slicedToArray(_useState, 2),\n      stateInputValue = _useState2[0],\n      setStateInputValue = _useState2[1];\n\n  var _useState3 = useState(propsMenuIsOpen !== undefined ? propsMenuIsOpen : defaultMenuIsOpen),\n      _useState4 = _slicedToArray(_useState3, 2),\n      stateMenuIsOpen = _useState4[0],\n      setStateMenuIsOpen = _useState4[1];\n\n  var _useState5 = useState(propsValue !== undefined ? propsValue : defaultValue),\n      _useState6 = _slicedToArray(_useState5, 2),\n      stateValue = _useState6[0],\n      setStateValue = _useState6[1];\n\n  var onChange = useCallback(function (value, actionMeta) {\n    if (typeof propsOnChange === 'function') {\n      propsOnChange(value, actionMeta);\n    }\n\n    setStateValue(value);\n  }, [propsOnChange]);\n  var onInputChange = useCallback(function (value, actionMeta) {\n    var newValue;\n\n    if (typeof propsOnInputChange === 'function') {\n      newValue = propsOnInputChange(value, actionMeta);\n    }\n\n    setStateInputValue(newValue !== undefined ? newValue : value);\n  }, [propsOnInputChange]);\n  var onMenuOpen = useCallback(function () {\n    if (typeof propsOnMenuOpen === 'function') {\n      propsOnMenuOpen();\n    }\n\n    setStateMenuIsOpen(true);\n  }, [propsOnMenuOpen]);\n  var onMenuClose = useCallback(function () {\n    if (typeof propsOnMenuClose === 'function') {\n      propsOnMenuClose();\n    }\n\n    setStateMenuIsOpen(false);\n  }, [propsOnMenuClose]);\n  var inputValue = propsInputValue !== undefined ? propsInputValue : stateInputValue;\n  var menuIsOpen = propsMenuIsOpen !== undefined ? propsMenuIsOpen : stateMenuIsOpen;\n  var value = propsValue !== undefined ? propsValue : stateValue;\n  return _objectSpread2(_objectSpread2({}, restSelectProps), {}, {\n    inputValue: inputValue,\n    menuIsOpen: menuIsOpen,\n    onChange: onChange,\n    onInputChange: onInputChange,\n    onMenuClose: onMenuClose,\n    onMenuOpen: onMenuOpen,\n    value: value\n  });\n}\n\nexport { useStateManager as u };\n","var e=require(\"react\"),t=require(\"clsx\");function n(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var o=/*#__PURE__*/n(e),s=/*#__PURE__*/n(t);const a=e=>\"number\"==typeof e&&!isNaN(e),r=e=>\"string\"==typeof e,i=e=>\"function\"==typeof e,l=e=>r(e)||i(e)?e:null,c=t=>e.isValidElement(t)||r(t)||i(t)||a(t);function u(e,t,n){void 0===n&&(n=300);const{scrollHeight:o,style:s}=e;requestAnimationFrame(()=>{s.minHeight=\"initial\",s.height=o+\"px\",s.transition=`all ${n}ms`,requestAnimationFrame(()=>{s.height=\"0\",s.padding=\"0\",s.margin=\"0\",setTimeout(t,n)})})}function d(t){let{enter:n,exit:s,appendPosition:a=!1,collapse:r=!0,collapseDuration:i=300}=t;return function(t){let{children:l,position:c,preventExitTransition:d,done:f,nodeRef:p,isIn:m}=t;const g=a?`${n}--${c}`:n,h=a?`${s}--${c}`:s,y=e.useRef(0);return e.useLayoutEffect(()=>{const e=p.current,t=g.split(\" \"),n=o=>{o.target===p.current&&(e.dispatchEvent(new Event(\"d\")),e.removeEventListener(\"animationend\",n),e.removeEventListener(\"animationcancel\",n),0===y.current&&\"animationcancel\"!==o.type&&e.classList.remove(...t))};e.classList.add(...t),e.addEventListener(\"animationend\",n),e.addEventListener(\"animationcancel\",n)},[]),e.useEffect(()=>{const e=p.current,t=()=>{e.removeEventListener(\"animationend\",t),r?u(e,f,i):f()};m||(d?t():(y.current=1,e.className+=` ${h}`,e.addEventListener(\"animationend\",t)))},[m]),o.default.createElement(o.default.Fragment,null,l)}}function f(e,t){return{content:e.content,containerId:e.props.containerId,id:e.props.toastId,theme:e.props.theme,type:e.props.type,data:e.props.data||{},isLoading:e.props.isLoading,icon:e.props.icon,status:t}}const p={list:new Map,emitQueue:new Map,on(e,t){return this.list.has(e)||this.list.set(e,[]),this.list.get(e).push(t),this},off(e,t){if(t){const n=this.list.get(e).filter(e=>e!==t);return this.list.set(e,n),this}return this.list.delete(e),this},cancelEmit(e){const t=this.emitQueue.get(e);return t&&(t.forEach(clearTimeout),this.emitQueue.delete(e)),this},emit(e){this.list.has(e)&&this.list.get(e).forEach(t=>{const n=setTimeout(()=>{t(...[].slice.call(arguments,1))},0);this.emitQueue.has(e)||this.emitQueue.set(e,[]),this.emitQueue.get(e).push(n)})}},m=e=>{let{theme:t,type:n,...s}=e;return o.default.createElement(\"svg\",{viewBox:\"0 0 24 24\",width:\"100%\",height:\"100%\",fill:\"colored\"===t?\"currentColor\":`var(--toastify-icon-color-${n})`,...s})},g={info:function(e){return o.default.createElement(m,{...e},o.default.createElement(\"path\",{d:\"M12 0a12 12 0 1012 12A12.013 12.013 0 0012 0zm.25 5a1.5 1.5 0 11-1.5 1.5 1.5 1.5 0 011.5-1.5zm2.25 13.5h-4a1 1 0 010-2h.75a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-.75a1 1 0 010-2h1a2 2 0 012 2v4.75a.25.25 0 00.25.25h.75a1 1 0 110 2z\"}))},warning:function(e){return o.default.createElement(m,{...e},o.default.createElement(\"path\",{d:\"M23.32 17.191L15.438 2.184C14.728.833 13.416 0 11.996 0c-1.42 0-2.733.833-3.443 2.184L.533 17.448a4.744 4.744 0 000 4.368C1.243 23.167 2.555 24 3.975 24h16.05C22.22 24 24 22.044 24 19.632c0-.904-.251-1.746-.68-2.44zm-9.622 1.46c0 1.033-.724 1.823-1.698 1.823s-1.698-.79-1.698-1.822v-.043c0-1.028.724-1.822 1.698-1.822s1.698.79 1.698 1.822v.043zm.039-12.285l-.84 8.06c-.057.581-.408.943-.897.943-.49 0-.84-.367-.896-.942l-.84-8.065c-.057-.624.25-1.095.779-1.095h1.91c.528.005.84.476.784 1.1z\"}))},success:function(e){return o.default.createElement(m,{...e},o.default.createElement(\"path\",{d:\"M12 0a12 12 0 1012 12A12.014 12.014 0 0012 0zm6.927 8.2l-6.845 9.289a1.011 1.011 0 01-1.43.188l-4.888-3.908a1 1 0 111.25-1.562l4.076 3.261 6.227-8.451a1 1 0 111.61 1.183z\"}))},error:function(e){return o.default.createElement(m,{...e},o.default.createElement(\"path\",{d:\"M11.983 0a12.206 12.206 0 00-8.51 3.653A11.8 11.8 0 000 12.207 11.779 11.779 0 0011.8 24h.214A12.111 12.111 0 0024 11.791 11.766 11.766 0 0011.983 0zM10.5 16.542a1.476 1.476 0 011.449-1.53h.027a1.527 1.527 0 011.523 1.47 1.475 1.475 0 01-1.449 1.53h-.027a1.529 1.529 0 01-1.523-1.47zM11 12.5v-6a1 1 0 012 0v6a1 1 0 11-2 0z\"}))},spinner:function(){return o.default.createElement(\"div\",{className:\"Toastify__spinner\"})}};function h(t){const[,n]=e.useReducer(e=>e+1,0),[o,s]=e.useState([]),u=e.useRef(null),d=e.useRef(new Map).current,m=e=>-1!==o.indexOf(e),h=e.useRef({toastKey:1,displayedToast:0,count:0,queue:[],props:t,containerId:null,isToastActive:m,getToast:e=>d.get(e)}).current;function y(e){let{containerId:t}=e;const{limit:n}=h.props;!n||t&&h.containerId!==t||(h.count-=h.queue.length,h.queue=[])}function v(e){s(t=>null==e?[]:t.filter(t=>t!==e))}function T(){const{toastContent:e,toastProps:t,staleId:n}=h.queue.shift();C(e,t,n)}function E(t,o){let{delay:s,staleId:m,...y}=o;if(!c(t)||function(e){return!u.current||h.props.enableMultiContainer&&e.containerId!==h.props.containerId||d.has(e.toastId)&&null==e.updateId}(y))return;const{toastId:E,updateId:I,data:b}=y,{props:_}=h,L=()=>v(E),O=null==I;O&&h.count++;const N={..._,...y,toastId:E,updateId:I,data:b,closeToast:L,isIn:!1,key:y.key||h.toastKey++,className:l(y.className||_.toastClassName),bodyClassName:l(y.bodyClassName||_.bodyClassName),progressClassName:l(y.progressClassName||_.progressClassName),autoClose:!y.isLoading&&(x=y.autoClose,R=_.autoClose,!1===x||a(x)&&x>0?x:R),deleteToast(){const e=f(d.get(E),\"removed\");d.delete(E),p.emit(4,e);const t=h.queue.length;if(h.count=null==E?h.count-h.displayedToast:h.count-1,h.count<0&&(h.count=0),t>0){const e=null==E?h.props.limit:1;if(1===t||1===e)h.displayedToast++,T();else{const n=e>t?t:e;h.displayedToast=n;for(let e=0;e<n;e++)T()}}else n()}};var x,R;N.iconOut=function(t){let{theme:n,type:o,isLoading:s,icon:l}=t,c=null;const u={theme:n,type:o};return!1===l||(i(l)?c=l(u):e.isValidElement(l)?c=e.cloneElement(l,u):r(l)||a(l)?c=l:s?c=g.spinner():(e=>e in g)(o)&&(c=g[o](u))),c}(N),i(y.onOpen)&&(N.onOpen=y.onOpen),i(y.onClose)&&(N.onClose=y.onClose),N.closeButton=_.closeButton,!1===y.closeButton||c(y.closeButton)?N.closeButton=y.closeButton:!0===y.closeButton&&(N.closeButton=!c(_.closeButton)||_.closeButton);let w=t;e.isValidElement(t)&&!r(t.type)?w=e.cloneElement(t,{closeToast:L,toastProps:N,data:b}):i(t)&&(w=t({closeToast:L,toastProps:N,data:b})),_.limit&&_.limit>0&&h.count>_.limit&&O?h.queue.push({toastContent:w,toastProps:N,staleId:m}):a(s)?setTimeout(()=>{C(w,N,m)},s):C(w,N,m)}function C(e,t,n){const{toastId:o}=t;n&&d.delete(n);const a={content:e,props:t};d.set(o,a),s(e=>[...e,o].filter(e=>e!==n)),p.emit(4,f(a,null==a.props.updateId?\"added\":\"updated\"))}return e.useEffect(()=>(h.containerId=t.containerId,p.cancelEmit(3).on(0,E).on(1,e=>u.current&&v(e)).on(5,y).emit(2,h),()=>{d.clear(),p.emit(3,h)}),[]),e.useEffect(()=>{h.props=t,h.isToastActive=m,h.displayedToast=o.length}),{getToastToRender:function(e){const n=new Map,o=Array.from(d.values());return t.newestOnTop&&o.reverse(),o.forEach(e=>{const{position:t}=e.props;n.has(t)||n.set(t,[]),n.get(t).push(e)}),Array.from(n,t=>e(t[0],t[1]))},containerRef:u,isToastActive:m}}function y(e){return e.targetTouches&&e.targetTouches.length>=1?e.targetTouches[0].clientX:e.clientX}function v(e){return e.targetTouches&&e.targetTouches.length>=1?e.targetTouches[0].clientY:e.clientY}function T(t){const[n,o]=e.useState(!1),[s,a]=e.useState(!1),r=e.useRef(null),l=e.useRef({start:0,x:0,y:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,boundingRect:null,didMove:!1}).current,c=e.useRef(t),{autoClose:u,pauseOnHover:d,closeToast:f,onClick:p,closeOnClick:m}=t;function g(e){if(t.draggable){\"touchstart\"===e.nativeEvent.type&&e.nativeEvent.preventDefault(),l.didMove=!1,document.addEventListener(\"mousemove\",C),document.addEventListener(\"mouseup\",I),document.addEventListener(\"touchmove\",C),document.addEventListener(\"touchend\",I);const n=r.current;l.canCloseOnClick=!0,l.canDrag=!0,l.boundingRect=n.getBoundingClientRect(),n.style.transition=\"\",l.x=y(e.nativeEvent),l.y=v(e.nativeEvent),\"x\"===t.draggableDirection?(l.start=l.x,l.removalDistance=n.offsetWidth*(t.draggablePercent/100)):(l.start=l.y,l.removalDistance=n.offsetHeight*(80===t.draggablePercent?1.5*t.draggablePercent:t.draggablePercent/100))}}function h(e){if(l.boundingRect){const{top:n,bottom:o,left:s,right:a}=l.boundingRect;\"touchend\"!==e.nativeEvent.type&&t.pauseOnHover&&l.x>=s&&l.x<=a&&l.y>=n&&l.y<=o?E():T()}}function T(){o(!0)}function E(){o(!1)}function C(e){const o=r.current;l.canDrag&&o&&(l.didMove=!0,n&&E(),l.x=y(e),l.y=v(e),l.delta=\"x\"===t.draggableDirection?l.x-l.start:l.y-l.start,l.start!==l.x&&(l.canCloseOnClick=!1),o.style.transform=`translate${t.draggableDirection}(${l.delta}px)`,o.style.opacity=\"\"+(1-Math.abs(l.delta/l.removalDistance)))}function I(){document.removeEventListener(\"mousemove\",C),document.removeEventListener(\"mouseup\",I),document.removeEventListener(\"touchmove\",C),document.removeEventListener(\"touchend\",I);const e=r.current;if(l.canDrag&&l.didMove&&e){if(l.canDrag=!1,Math.abs(l.delta)>l.removalDistance)return a(!0),void t.closeToast();e.style.transition=\"transform 0.2s, opacity 0.2s\",e.style.transform=`translate${t.draggableDirection}(0)`,e.style.opacity=\"1\"}}e.useEffect(()=>{c.current=t}),e.useEffect(()=>(r.current&&r.current.addEventListener(\"d\",T,{once:!0}),i(t.onOpen)&&t.onOpen(e.isValidElement(t.children)&&t.children.props),()=>{const t=c.current;i(t.onClose)&&t.onClose(e.isValidElement(t.children)&&t.children.props)}),[]),e.useEffect(()=>(t.pauseOnFocusLoss&&(document.hasFocus()||E(),window.addEventListener(\"focus\",T),window.addEventListener(\"blur\",E)),()=>{t.pauseOnFocusLoss&&(window.removeEventListener(\"focus\",T),window.removeEventListener(\"blur\",E))}),[t.pauseOnFocusLoss]);const b={onMouseDown:g,onTouchStart:g,onMouseUp:h,onTouchEnd:h};return u&&d&&(b.onMouseEnter=E,b.onMouseLeave=T),m&&(b.onClick=e=>{p&&p(e),l.canCloseOnClick&&f()}),{playToast:T,pauseToast:E,isRunning:n,preventExitTransition:s,toastRef:r,eventHandlers:b}}function E(e){let{closeToast:t,theme:n,ariaLabel:s=\"close\"}=e;return o.default.createElement(\"button\",{className:`Toastify__close-button Toastify__close-button--${n}`,type:\"button\",onClick:e=>{e.stopPropagation(),t(e)},\"aria-label\":s},o.default.createElement(\"svg\",{\"aria-hidden\":\"true\",viewBox:\"0 0 14 16\"},o.default.createElement(\"path\",{fillRule:\"evenodd\",d:\"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z\"})))}function C(e){let{delay:t,isRunning:n,closeToast:a,type:r=\"default\",hide:l,className:c,style:u,controlledProgress:d,progress:f,rtl:p,isIn:m,theme:g}=e;const h=l||d&&0===f,y={...u,animationDuration:`${t}ms`,animationPlayState:n?\"running\":\"paused\",opacity:h?0:1};d&&(y.transform=`scaleX(${f})`);const v=s.default(\"Toastify__progress-bar\",d?\"Toastify__progress-bar--controlled\":\"Toastify__progress-bar--animated\",`Toastify__progress-bar-theme--${g}`,`Toastify__progress-bar--${r}`,{\"Toastify__progress-bar--rtl\":p}),T=i(c)?c({rtl:p,type:r,defaultClassName:v}):s.default(v,c);return o.default.createElement(\"div\",{role:\"progressbar\",\"aria-hidden\":h?\"true\":\"false\",\"aria-label\":\"notification timer\",className:T,style:y,[d&&f>=1?\"onTransitionEnd\":\"onAnimationEnd\"]:d&&f<1?null:()=>{m&&a()}})}const I=t=>{const{isRunning:n,preventExitTransition:a,toastRef:r,eventHandlers:l}=T(t),{closeButton:c,children:u,autoClose:d,onClick:f,type:p,hideProgressBar:m,closeToast:g,transition:h,position:y,className:v,style:I,bodyClassName:b,bodyStyle:_,progressClassName:L,progressStyle:O,updateId:N,role:x,progress:R,rtl:w,toastId:M,deleteToast:k,isIn:$,isLoading:B,iconOut:P,closeOnClick:D,theme:A}=t,z=s.default(\"Toastify__toast\",`Toastify__toast-theme--${A}`,`Toastify__toast--${p}`,{\"Toastify__toast--rtl\":w},{\"Toastify__toast--close-on-click\":D}),F=i(v)?v({rtl:w,position:y,type:p,defaultClassName:z}):s.default(z,v),S=!!R||!d,q={closeToast:g,type:p,theme:A};let H=null;return!1===c||(H=i(c)?c(q):e.isValidElement(c)?e.cloneElement(c,q):E(q)),o.default.createElement(h,{isIn:$,done:k,position:y,preventExitTransition:a,nodeRef:r},o.default.createElement(\"div\",{id:M,onClick:f,className:F,...l,style:I,ref:r},o.default.createElement(\"div\",{...$&&{role:x},className:i(b)?b({type:p}):s.default(\"Toastify__toast-body\",b),style:_},null!=P&&o.default.createElement(\"div\",{className:s.default(\"Toastify__toast-icon\",{\"Toastify--animate-icon Toastify__zoom-enter\":!B})},P),o.default.createElement(\"div\",null,u)),H,o.default.createElement(C,{...N&&!S?{key:`pb-${N}`}:{},rtl:w,theme:A,delay:d,isRunning:n,isIn:$,closeToast:g,hide:m,type:p,style:O,className:L,controlledProgress:S,progress:R||0})))},b=function(e,t){return void 0===t&&(t=!1),{enter:`Toastify--animate Toastify__${e}-enter`,exit:`Toastify--animate Toastify__${e}-exit`,appendPosition:t}},_=d(b(\"bounce\",!0)),L=d(b(\"slide\",!0)),O=d(b(\"zoom\")),N=d(b(\"flip\")),x=e.forwardRef((t,n)=>{const{getToastToRender:a,containerRef:r,isToastActive:c}=h(t),{className:u,style:d,rtl:f,containerId:p}=t;function m(e){const t=s.default(\"Toastify__toast-container\",`Toastify__toast-container--${e}`,{\"Toastify__toast-container--rtl\":f});return i(u)?u({position:e,rtl:f,defaultClassName:t}):s.default(t,l(u))}return e.useEffect(()=>{n&&(n.current=r.current)},[]),o.default.createElement(\"div\",{ref:r,className:\"Toastify\",id:p},a((e,t)=>{const n=t.length?{...d}:{...d,pointerEvents:\"none\"};return o.default.createElement(\"div\",{className:m(e),style:n,key:`container-${e}`},t.map((e,n)=>{let{content:s,props:a}=e;return o.default.createElement(I,{...a,isIn:c(a.toastId),style:{...a.style,\"--nth\":n+1,\"--len\":t.length},key:`toast-${a.key}`},s)}))}))});x.displayName=\"ToastContainer\",x.defaultProps={position:\"top-right\",transition:_,autoClose:5e3,closeButton:E,pauseOnHover:!0,pauseOnFocusLoss:!0,closeOnClick:!0,draggable:!0,draggablePercent:80,draggableDirection:\"x\",role:\"alert\",theme:\"light\"};let R,w=new Map,M=[],k=1;function $(){return\"\"+k++}function B(e){return e&&(r(e.toastId)||a(e.toastId))?e.toastId:$()}function P(e,t){return w.size>0?p.emit(0,e,t):M.push({content:e,options:t}),t.toastId}function D(e,t){return{...t,type:t&&t.type||e,toastId:B(t)}}function A(e){return(t,n)=>P(t,D(e,n))}function z(e,t){return P(e,D(\"default\",t))}z.loading=(e,t)=>P(e,D(\"default\",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...t})),z.promise=function(e,t,n){let o,{pending:s,error:a,success:l}=t;s&&(o=r(s)?z.loading(s,n):z.loading(s.render,{...n,...s}));const c={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null,delay:100},u=(e,t,s)=>{if(null==t)return void z.dismiss(o);const a={type:e,...c,...n,data:s},i=r(t)?{render:t}:t;return o?z.update(o,{...a,...i}):z(i.render,{...a,...i}),s},d=i(e)?e():e;return d.then(e=>u(\"success\",l,e)).catch(e=>u(\"error\",a,e)),d},z.success=A(\"success\"),z.info=A(\"info\"),z.error=A(\"error\"),z.warning=A(\"warning\"),z.warn=z.warning,z.dark=(e,t)=>P(e,D(\"default\",{theme:\"dark\",...t})),z.dismiss=e=>{w.size>0?p.emit(1,e):M=M.filter(t=>null!=e&&t.options.toastId!==e)},z.clearWaitingQueue=function(e){return void 0===e&&(e={}),p.emit(5,e)},z.isActive=e=>{let t=!1;return w.forEach(n=>{n.isToastActive&&n.isToastActive(e)&&(t=!0)}),t},z.update=function(e,t){void 0===t&&(t={}),setTimeout(()=>{const n=function(e,t){let{containerId:n}=t;const o=w.get(n||R);return o&&o.getToast(e)}(e,t);if(n){const{props:o,content:s}=n,a={...o,...t,toastId:t.toastId||e,updateId:$()};a.toastId!==e&&(a.staleId=e);const r=a.render||s;delete a.render,P(r,a)}},0)},z.done=e=>{z.update(e,{progress:1})},z.onChange=e=>(p.on(4,e),()=>{p.off(4,e)}),z.POSITION={TOP_LEFT:\"top-left\",TOP_RIGHT:\"top-right\",TOP_CENTER:\"top-center\",BOTTOM_LEFT:\"bottom-left\",BOTTOM_RIGHT:\"bottom-right\",BOTTOM_CENTER:\"bottom-center\"},z.TYPE={INFO:\"info\",SUCCESS:\"success\",WARNING:\"warning\",ERROR:\"error\",DEFAULT:\"default\"},p.on(2,e=>{R=e.containerId||e,w.set(R,e),M.forEach(e=>{p.emit(0,e.content,e.options)}),M=[]}).on(3,e=>{w.delete(e.containerId||e),0===w.size&&p.off(0).off(1).off(5)}),exports.Bounce=_,exports.Flip=N,exports.Icons=g,exports.Slide=L,exports.ToastContainer=x,exports.Zoom=O,exports.collapseToast=u,exports.cssTransition=d,exports.toast=z,exports.useToast=T,exports.useToastContainer=h;\n//# sourceMappingURL=react-toastify.js.map\n","import { Children, cloneElement, isValidElement } from 'react';\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\n\nexport function getChildMapping(children, mapFn) {\n  var mapper = function mapper(child) {\n    return mapFn && isValidElement(child) ? mapFn(child) : child;\n  };\n\n  var result = Object.create(null);\n  if (children) Children.map(children, function (c) {\n    return c;\n  }).forEach(function (child) {\n    // run the map function here instead so that the key is the computed one\n    result[child.key] = mapper(child);\n  });\n  return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\nexport function mergeChildMappings(prev, next) {\n  prev = prev || {};\n  next = next || {};\n\n  function getValueForKey(key) {\n    return key in next ? next[key] : prev[key];\n  } // For each key of `next`, the list of keys to insert before that key in\n  // the combined list\n\n\n  var nextKeysPending = Object.create(null);\n  var pendingKeys = [];\n\n  for (var prevKey in prev) {\n    if (prevKey in next) {\n      if (pendingKeys.length) {\n        nextKeysPending[prevKey] = pendingKeys;\n        pendingKeys = [];\n      }\n    } else {\n      pendingKeys.push(prevKey);\n    }\n  }\n\n  var i;\n  var childMapping = {};\n\n  for (var nextKey in next) {\n    if (nextKeysPending[nextKey]) {\n      for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n        var pendingNextKey = nextKeysPending[nextKey][i];\n        childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n      }\n    }\n\n    childMapping[nextKey] = getValueForKey(nextKey);\n  } // Finally, add the keys which didn't appear before any key in `next`\n\n\n  for (i = 0; i < pendingKeys.length; i++) {\n    childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n  }\n\n  return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n  return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nexport function getInitialChildMapping(props, onExited) {\n  return getChildMapping(props.children, function (child) {\n    return cloneElement(child, {\n      onExited: onExited.bind(null, child),\n      in: true,\n      appear: getProp(child, 'appear', props),\n      enter: getProp(child, 'enter', props),\n      exit: getProp(child, 'exit', props)\n    });\n  });\n}\nexport function getNextChildMapping(nextProps, prevChildMapping, onExited) {\n  var nextChildMapping = getChildMapping(nextProps.children);\n  var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n  Object.keys(children).forEach(function (key) {\n    var child = children[key];\n    if (!isValidElement(child)) return;\n    var hasPrev = (key in prevChildMapping);\n    var hasNext = (key in nextChildMapping);\n    var prevChild = prevChildMapping[key];\n    var isLeaving = isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)\n\n    if (hasNext && (!hasPrev || isLeaving)) {\n      // console.log('entering', key)\n      children[key] = cloneElement(child, {\n        onExited: onExited.bind(null, child),\n        in: true,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    } else if (!hasNext && hasPrev && !isLeaving) {\n      // item is old (exiting)\n      // console.log('leaving', key)\n      children[key] = cloneElement(child, {\n        in: false\n      });\n    } else if (hasNext && hasPrev && isValidElement(prevChild)) {\n      // item hasn't changed transition states\n      // copy over the last transition props;\n      // console.log('unchanged', key)\n      children[key] = cloneElement(child, {\n        onExited: onExited.bind(null, child),\n        in: prevChild.props.in,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    }\n  });\n  return children;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { getChildMapping, getInitialChildMapping, getNextChildMapping } from './utils/ChildMapping';\n\nvar values = Object.values || function (obj) {\n  return Object.keys(obj).map(function (k) {\n    return obj[k];\n  });\n};\n\nvar defaultProps = {\n  component: 'div',\n  childFactory: function childFactory(child) {\n    return child;\n  }\n};\n/**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>`  does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\nvar TransitionGroup = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(TransitionGroup, _React$Component);\n\n  function TransitionGroup(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n\n    var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear\n\n\n    _this.state = {\n      contextValue: {\n        isMounting: true\n      },\n      handleExited: handleExited,\n      firstRender: true\n    };\n    return _this;\n  }\n\n  var _proto = TransitionGroup.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.mounted = true;\n    this.setState({\n      contextValue: {\n        isMounting: false\n      }\n    });\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.mounted = false;\n  };\n\n  TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n    var prevChildMapping = _ref.children,\n        handleExited = _ref.handleExited,\n        firstRender = _ref.firstRender;\n    return {\n      children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),\n      firstRender: false\n    };\n  } // node is `undefined` when user provided `nodeRef` prop\n  ;\n\n  _proto.handleExited = function handleExited(child, node) {\n    var currentChildMapping = getChildMapping(this.props.children);\n    if (child.key in currentChildMapping) return;\n\n    if (child.props.onExited) {\n      child.props.onExited(node);\n    }\n\n    if (this.mounted) {\n      this.setState(function (state) {\n        var children = _extends({}, state.children);\n\n        delete children[child.key];\n        return {\n          children: children\n        };\n      });\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        Component = _this$props.component,\n        childFactory = _this$props.childFactory,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n    var contextValue = this.state.contextValue;\n    var children = values(this.state.children).map(childFactory);\n    delete props.appear;\n    delete props.enter;\n    delete props.exit;\n\n    if (Component === null) {\n      return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n        value: contextValue\n      }, children);\n    }\n\n    return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n      value: contextValue\n    }, /*#__PURE__*/React.createElement(Component, props, children));\n  };\n\n  return TransitionGroup;\n}(React.Component);\n\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * `<TransitionGroup>` renders a `<div>` by default. You can change this\n   * behavior by providing a `component` prop.\n   * If you use React v16+ and would like to avoid a wrapping `<div>` element\n   * you can pass in `component={null}`. This is useful if the wrapping div\n   * borks your css styles.\n   */\n  component: PropTypes.any,\n\n  /**\n   * A set of `<Transition>` components, that are toggled `in` and out as they\n   * leave. the `<TransitionGroup>` will inject specific transition props, so\n   * remember to spread them through if you are wrapping the `<Transition>` as\n   * with our `<Fade>` example.\n   *\n   * While this component is meant for multiple `Transition` or `CSSTransition`\n   * children, sometimes you may want to have a single transition child with\n   * content that you want to be transitioned out and in when you change it\n   * (e.g. routes, images etc.) In that case you can change the `key` prop of\n   * the transition child as you change its content, this will cause\n   * `TransitionGroup` to transition the child out and back in.\n   */\n  children: PropTypes.node,\n\n  /**\n   * A convenience prop that enables or disables appear animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * A convenience prop that enables or disables enter animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * A convenience prop that enables or disables exit animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * You may need to apply reactive updates to a child as it is exiting.\n   * This is generally done by using `cloneElement` however in the case of an exiting\n   * child the element has already been removed and not accessible to the consumer.\n   *\n   * If you do need to update a child as it leaves you can provide a `childFactory`\n   * to wrap every child, even the ones that are leaving.\n   *\n   * @type Function(child: ReactElement) -> ReactElement\n   */\n  childFactory: PropTypes.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\nexport default TransitionGroup;","import React from 'react';\nexport default React.createContext(null);","function replaceClassName(origClass, classToRemove) {\n  return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n/**\n * Removes a CSS class from a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\n\nexport default function removeClass(element, className) {\n  if (element.classList) {\n    element.classList.remove(className);\n  } else if (typeof element.className === 'string') {\n    element.className = replaceClassName(element.className, className);\n  } else {\n    element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n  }\n}","export default {\n  disabled: false\n};","export var forceReflow = function forceReflow(node) {\n  return node.scrollTop;\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n *   transition: `opacity ${duration}ms ease-in-out`,\n *   opacity: 0,\n * }\n *\n * const transitionStyles = {\n *   entering: { opacity: 1 },\n *   entered:  { opacity: 1 },\n *   exiting:  { opacity: 0 },\n *   exited:  { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n *   <Transition in={inProp} timeout={duration}>\n *     {state => (\n *       <div style={{\n *         ...defaultStyle,\n *         ...transitionStyles[state]\n *       }}>\n *         I'm a fade Transition!\n *       </div>\n *     )}\n *   </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n *  - `'entering'`\n *  - `'entered'`\n *  - `'exiting'`\n *  - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <Transition in={inProp} timeout={500}>\n *         {state => (\n *           // ...\n *         )}\n *       </Transition>\n *       <button onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(Transition, _React$Component);\n\n  function Transition(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n    var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n    var initialStatus;\n    _this.appearStatus = null;\n\n    if (props.in) {\n      if (appear) {\n        initialStatus = EXITED;\n        _this.appearStatus = ENTERING;\n      } else {\n        initialStatus = ENTERED;\n      }\n    } else {\n      if (props.unmountOnExit || props.mountOnEnter) {\n        initialStatus = UNMOUNTED;\n      } else {\n        initialStatus = EXITED;\n      }\n    }\n\n    _this.state = {\n      status: initialStatus\n    };\n    _this.nextCallback = null;\n    return _this;\n  }\n\n  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n    var nextIn = _ref.in;\n\n    if (nextIn && prevState.status === UNMOUNTED) {\n      return {\n        status: EXITED\n      };\n    }\n\n    return null;\n  } // getSnapshotBeforeUpdate(prevProps) {\n  //   let nextStatus = null\n  //   if (prevProps !== this.props) {\n  //     const { status } = this.state\n  //     if (this.props.in) {\n  //       if (status !== ENTERING && status !== ENTERED) {\n  //         nextStatus = ENTERING\n  //       }\n  //     } else {\n  //       if (status === ENTERING || status === ENTERED) {\n  //         nextStatus = EXITING\n  //       }\n  //     }\n  //   }\n  //   return { nextStatus }\n  // }\n  ;\n\n  var _proto = Transition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.updateStatus(true, this.appearStatus);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var nextStatus = null;\n\n    if (prevProps !== this.props) {\n      var status = this.state.status;\n\n      if (this.props.in) {\n        if (status !== ENTERING && status !== ENTERED) {\n          nextStatus = ENTERING;\n        }\n      } else {\n        if (status === ENTERING || status === ENTERED) {\n          nextStatus = EXITING;\n        }\n      }\n    }\n\n    this.updateStatus(false, nextStatus);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.cancelNextCallback();\n  };\n\n  _proto.getTimeouts = function getTimeouts() {\n    var timeout = this.props.timeout;\n    var exit, enter, appear;\n    exit = enter = appear = timeout;\n\n    if (timeout != null && typeof timeout !== 'number') {\n      exit = timeout.exit;\n      enter = timeout.enter; // TODO: remove fallback for next major\n\n      appear = timeout.appear !== undefined ? timeout.appear : enter;\n    }\n\n    return {\n      exit: exit,\n      enter: enter,\n      appear: appear\n    };\n  };\n\n  _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n    if (mounting === void 0) {\n      mounting = false;\n    }\n\n    if (nextStatus !== null) {\n      // nextStatus will always be ENTERING or EXITING.\n      this.cancelNextCallback();\n\n      if (nextStatus === ENTERING) {\n        if (this.props.unmountOnExit || this.props.mountOnEnter) {\n          var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n          // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n          // To make the animation happen,  we have to separate each rendering and avoid being processed as batched.\n\n          if (node) forceReflow(node);\n        }\n\n        this.performEnter(mounting);\n      } else {\n        this.performExit();\n      }\n    } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n      this.setState({\n        status: UNMOUNTED\n      });\n    }\n  };\n\n  _proto.performEnter = function performEnter(mounting) {\n    var _this2 = this;\n\n    var enter = this.props.enter;\n    var appearing = this.context ? this.context.isMounting : mounting;\n\n    var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n        maybeNode = _ref2[0],\n        maybeAppearing = _ref2[1];\n\n    var timeouts = this.getTimeouts();\n    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n    // if we are mounting and running this it means appear _must_ be set\n\n    if (!mounting && !enter || config.disabled) {\n      this.safeSetState({\n        status: ENTERED\n      }, function () {\n        _this2.props.onEntered(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onEnter(maybeNode, maybeAppearing);\n    this.safeSetState({\n      status: ENTERING\n    }, function () {\n      _this2.props.onEntering(maybeNode, maybeAppearing);\n\n      _this2.onTransitionEnd(enterTimeout, function () {\n        _this2.safeSetState({\n          status: ENTERED\n        }, function () {\n          _this2.props.onEntered(maybeNode, maybeAppearing);\n        });\n      });\n    });\n  };\n\n  _proto.performExit = function performExit() {\n    var _this3 = this;\n\n    var exit = this.props.exit;\n    var timeouts = this.getTimeouts();\n    var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n    if (!exit || config.disabled) {\n      this.safeSetState({\n        status: EXITED\n      }, function () {\n        _this3.props.onExited(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onExit(maybeNode);\n    this.safeSetState({\n      status: EXITING\n    }, function () {\n      _this3.props.onExiting(maybeNode);\n\n      _this3.onTransitionEnd(timeouts.exit, function () {\n        _this3.safeSetState({\n          status: EXITED\n        }, function () {\n          _this3.props.onExited(maybeNode);\n        });\n      });\n    });\n  };\n\n  _proto.cancelNextCallback = function cancelNextCallback() {\n    if (this.nextCallback !== null) {\n      this.nextCallback.cancel();\n      this.nextCallback = null;\n    }\n  };\n\n  _proto.safeSetState = function safeSetState(nextState, callback) {\n    // This shouldn't be necessary, but there are weird race conditions with\n    // setState callbacks and unmounting in testing, so always make sure that\n    // we can cancel any pending setState callbacks after we unmount.\n    callback = this.setNextCallback(callback);\n    this.setState(nextState, callback);\n  };\n\n  _proto.setNextCallback = function setNextCallback(callback) {\n    var _this4 = this;\n\n    var active = true;\n\n    this.nextCallback = function (event) {\n      if (active) {\n        active = false;\n        _this4.nextCallback = null;\n        callback(event);\n      }\n    };\n\n    this.nextCallback.cancel = function () {\n      active = false;\n    };\n\n    return this.nextCallback;\n  };\n\n  _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n    this.setNextCallback(handler);\n    var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n    if (!node || doesNotHaveTimeoutOrListener) {\n      setTimeout(this.nextCallback, 0);\n      return;\n    }\n\n    if (this.props.addEndListener) {\n      var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n          maybeNode = _ref3[0],\n          maybeNextCallback = _ref3[1];\n\n      this.props.addEndListener(maybeNode, maybeNextCallback);\n    }\n\n    if (timeout != null) {\n      setTimeout(this.nextCallback, timeout);\n    }\n  };\n\n  _proto.render = function render() {\n    var status = this.state.status;\n\n    if (status === UNMOUNTED) {\n      return null;\n    }\n\n    var _this$props = this.props,\n        children = _this$props.children,\n        _in = _this$props.in,\n        _mountOnEnter = _this$props.mountOnEnter,\n        _unmountOnExit = _this$props.unmountOnExit,\n        _appear = _this$props.appear,\n        _enter = _this$props.enter,\n        _exit = _this$props.exit,\n        _timeout = _this$props.timeout,\n        _addEndListener = _this$props.addEndListener,\n        _onEnter = _this$props.onEnter,\n        _onEntering = _this$props.onEntering,\n        _onEntered = _this$props.onEntered,\n        _onExit = _this$props.onExit,\n        _onExiting = _this$props.onExiting,\n        _onExited = _this$props.onExited,\n        _nodeRef = _this$props.nodeRef,\n        childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n    return (\n      /*#__PURE__*/\n      // allows for nested Transitions\n      React.createElement(TransitionGroupContext.Provider, {\n        value: null\n      }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n    );\n  };\n\n  return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * A React reference to DOM element that need to transition:\n   * https://stackoverflow.com/a/51127130/4671932\n   *\n   *   - When `nodeRef` prop is used, `node` is not passed to callback functions\n   *      (e.g. `onEnter`) because user already has direct access to the node.\n   *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n   *     `nodeRef` need to be provided to `Transition` with changed `key` prop\n   *     (see\n   *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n   */\n  nodeRef: PropTypes.shape({\n    current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n      var value = propValue[key];\n      return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n    }\n  }),\n\n  /**\n   * A `function` child can be used instead of a React element. This function is\n   * called with the current transition status (`'entering'`, `'entered'`,\n   * `'exiting'`, `'exited'`), which can be used to apply context\n   * specific props to a component.\n   *\n   * ```jsx\n   * <Transition in={this.state.in} timeout={150}>\n   *   {state => (\n   *     <MyComponent className={`fade fade-${state}`} />\n   *   )}\n   * </Transition>\n   * ```\n   */\n  children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n  /**\n   * Show the component; triggers the enter or exit states\n   */\n  in: PropTypes.bool,\n\n  /**\n   * By default the child component is mounted immediately along with\n   * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n   * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n   */\n  mountOnEnter: PropTypes.bool,\n\n  /**\n   * By default the child component stays mounted after it reaches the `'exited'` state.\n   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n   */\n  unmountOnExit: PropTypes.bool,\n\n  /**\n   * By default the child component does not perform the enter transition when\n   * it first mounts, regardless of the value of `in`. If you want this\n   * behavior, set both `appear` and `in` to `true`.\n   *\n   * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n   * > only adds an additional enter transition. However, in the\n   * > `<CSSTransition>` component that first enter transition does result in\n   * > additional `.appear-*` classes, that way you can choose to style it\n   * > differently.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * Enable or disable enter transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * Enable or disable exit transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * The duration of the transition, in milliseconds.\n   * Required unless `addEndListener` is provided.\n   *\n   * You may specify a single timeout for all transitions:\n   *\n   * ```jsx\n   * timeout={500}\n   * ```\n   *\n   * or individually:\n   *\n   * ```jsx\n   * timeout={{\n   *  appear: 500,\n   *  enter: 300,\n   *  exit: 500,\n   * }}\n   * ```\n   *\n   * - `appear` defaults to the value of `enter`\n   * - `enter` defaults to `0`\n   * - `exit` defaults to `0`\n   *\n   * @type {number | { enter?: number, exit?: number, appear?: number }}\n   */\n  timeout: function timeout(props) {\n    var pt = timeoutsShape;\n    if (!props.addEndListener) pt = pt.isRequired;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return pt.apply(void 0, [props].concat(args));\n  },\n\n  /**\n   * Add a custom transition end trigger. Called with the transitioning\n   * DOM node and a `done` callback. Allows for more fine grained transition end\n   * logic. Timeouts are still used as a fallback if provided.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * ```jsx\n   * addEndListener={(node, done) => {\n   *   // use the css transitionend event to mark the finish of a transition\n   *   node.addEventListener('transitionend', done, false);\n   * }}\n   * ```\n   */\n  addEndListener: PropTypes.func,\n\n  /**\n   * Callback fired before the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entered\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired before the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exited\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n  in: false,\n  mountOnEnter: false,\n  unmountOnExit: false,\n  appear: false,\n  enter: true,\n  exit: true,\n  onEnter: noop,\n  onEntering: noop,\n  onEntered: noop,\n  onExit: noop,\n  onExiting: noop,\n  onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport addOneClass from 'dom-helpers/addClass';\nimport removeOneClass from 'dom-helpers/removeClass';\nimport React from 'react';\nimport Transition from './Transition';\nimport { classNamesShape } from './utils/PropTypes';\nimport { forceReflow } from './utils/reflow';\n\nvar _addClass = function addClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return addOneClass(node, c);\n  });\n};\n\nvar removeClass = function removeClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return removeOneClass(node, c);\n  });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should\n * use it if you're using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <CSSTransition in={inProp} timeout={200} classNames=\"my-node\">\n *         <div>\n *           {\"I'll receive my-node-* classes\"}\n *         </div>\n *       </CSSTransition>\n *       <button type=\"button\" onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n *   opacity: 0;\n * }\n * .my-node-enter-active {\n *   opacity: 1;\n *   transition: opacity 200ms;\n * }\n * .my-node-exit {\n *   opacity: 1;\n * }\n * .my-node-exit-active {\n *   opacity: 0;\n *   transition: opacity 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**, so it's\n * important to add `transition` declaration only to them, otherwise transitions\n * might not behave as intended! This might not be obvious when the transitions\n * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in\n * the example above (minus `transition`), but it becomes apparent in more\n * complex transitions.\n *\n * **Note**: If you're using the\n * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)\n * prop, make sure to define styles for `.appear-*` classes as well.\n */\n\n\nvar CSSTransition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(CSSTransition, _React$Component);\n\n  function CSSTransition() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.appliedClasses = {\n      appear: {},\n      enter: {},\n      exit: {}\n    };\n\n    _this.onEnter = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument[0],\n          appearing = _this$resolveArgument[1];\n\n      _this.removeClasses(node, 'exit');\n\n      _this.addClass(node, appearing ? 'appear' : 'enter', 'base');\n\n      if (_this.props.onEnter) {\n        _this.props.onEnter(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onEntering = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument2[0],\n          appearing = _this$resolveArgument2[1];\n\n      var type = appearing ? 'appear' : 'enter';\n\n      _this.addClass(node, type, 'active');\n\n      if (_this.props.onEntering) {\n        _this.props.onEntering(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onEntered = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument3[0],\n          appearing = _this$resolveArgument3[1];\n\n      var type = appearing ? 'appear' : 'enter';\n\n      _this.removeClasses(node, type);\n\n      _this.addClass(node, type, 'done');\n\n      if (_this.props.onEntered) {\n        _this.props.onEntered(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onExit = function (maybeNode) {\n      var _this$resolveArgument4 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument4[0];\n\n      _this.removeClasses(node, 'appear');\n\n      _this.removeClasses(node, 'enter');\n\n      _this.addClass(node, 'exit', 'base');\n\n      if (_this.props.onExit) {\n        _this.props.onExit(maybeNode);\n      }\n    };\n\n    _this.onExiting = function (maybeNode) {\n      var _this$resolveArgument5 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument5[0];\n\n      _this.addClass(node, 'exit', 'active');\n\n      if (_this.props.onExiting) {\n        _this.props.onExiting(maybeNode);\n      }\n    };\n\n    _this.onExited = function (maybeNode) {\n      var _this$resolveArgument6 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument6[0];\n\n      _this.removeClasses(node, 'exit');\n\n      _this.addClass(node, 'exit', 'done');\n\n      if (_this.props.onExited) {\n        _this.props.onExited(maybeNode);\n      }\n    };\n\n    _this.resolveArguments = function (maybeNode, maybeAppearing) {\n      return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`\n      : [maybeNode, maybeAppearing];\n    };\n\n    _this.getClassNames = function (type) {\n      var classNames = _this.props.classNames;\n      var isStringClassNames = typeof classNames === 'string';\n      var prefix = isStringClassNames && classNames ? classNames + \"-\" : '';\n      var baseClassName = isStringClassNames ? \"\" + prefix + type : classNames[type];\n      var activeClassName = isStringClassNames ? baseClassName + \"-active\" : classNames[type + \"Active\"];\n      var doneClassName = isStringClassNames ? baseClassName + \"-done\" : classNames[type + \"Done\"];\n      return {\n        baseClassName: baseClassName,\n        activeClassName: activeClassName,\n        doneClassName: doneClassName\n      };\n    };\n\n    return _this;\n  }\n\n  var _proto = CSSTransition.prototype;\n\n  _proto.addClass = function addClass(node, type, phase) {\n    var className = this.getClassNames(type)[phase + \"ClassName\"];\n\n    var _this$getClassNames = this.getClassNames('enter'),\n        doneClassName = _this$getClassNames.doneClassName;\n\n    if (type === 'appear' && phase === 'done' && doneClassName) {\n      className += \" \" + doneClassName;\n    } // This is to force a repaint,\n    // which is necessary in order to transition styles when adding a class name.\n\n\n    if (phase === 'active') {\n      if (node) forceReflow(node);\n    }\n\n    if (className) {\n      this.appliedClasses[type][phase] = className;\n\n      _addClass(node, className);\n    }\n  };\n\n  _proto.removeClasses = function removeClasses(node, type) {\n    var _this$appliedClasses$ = this.appliedClasses[type],\n        baseClassName = _this$appliedClasses$.base,\n        activeClassName = _this$appliedClasses$.active,\n        doneClassName = _this$appliedClasses$.done;\n    this.appliedClasses[type] = {};\n\n    if (baseClassName) {\n      removeClass(node, baseClassName);\n    }\n\n    if (activeClassName) {\n      removeClass(node, activeClassName);\n    }\n\n    if (doneClassName) {\n      removeClass(node, doneClassName);\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        _ = _this$props.classNames,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"classNames\"]);\n\n    return /*#__PURE__*/React.createElement(Transition, _extends({}, props, {\n      onEnter: this.onEnter,\n      onEntered: this.onEntered,\n      onEntering: this.onEntering,\n      onExit: this.onExit,\n      onExiting: this.onExiting,\n      onExited: this.onExited\n    }));\n  };\n\n  return CSSTransition;\n}(React.Component);\n\nCSSTransition.defaultProps = {\n  classNames: ''\n};\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, Transition.propTypes, {\n  /**\n   * The animation classNames applied to the component as it appears, enters,\n   * exits or has finished the transition. A single name can be provided, which\n   * will be suffixed for each stage, e.g. `classNames=\"fade\"` applies:\n   *\n   * - `fade-appear`, `fade-appear-active`, `fade-appear-done`\n   * - `fade-enter`, `fade-enter-active`, `fade-enter-done`\n   * - `fade-exit`, `fade-exit-active`, `fade-exit-done`\n   *\n   * A few details to note about how these classes are applied:\n   *\n   * 1. They are _joined_ with the ones that are already defined on the child\n   *    component, so if you want to add some base styles, you can use\n   *    `className` without worrying that it will be overridden.\n   *\n   * 2. If the transition component mounts with `in={false}`, no classes are\n   *    applied yet. You might be expecting `*-exit-done`, but if you think\n   *    about it, a component cannot finish exiting if it hasn't entered yet.\n   *\n   * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This\n   *    allows you to define different behavior for when appearing is done and\n   *    when regular entering is done, using selectors like\n   *    `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply\n   *    an epic entrance animation when element first appears in the DOM using\n   *    [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n   *    simply use `fade-enter-done` for defining both cases.\n   *\n   * Each individual classNames can also be specified independently like:\n   *\n   * ```js\n   * classNames={{\n   *  appear: 'my-appear',\n   *  appearActive: 'my-active-appear',\n   *  appearDone: 'my-done-appear',\n   *  enter: 'my-enter',\n   *  enterActive: 'my-active-enter',\n   *  enterDone: 'my-done-enter',\n   *  exit: 'my-exit',\n   *  exitActive: 'my-active-exit',\n   *  exitDone: 'my-done-exit',\n   * }}\n   * ```\n   *\n   * If you want to set these classes using CSS Modules:\n   *\n   * ```js\n   * import styles from './styles.css';\n   * ```\n   *\n   * you might want to use camelCase in your CSS file, that way could simply\n   * spread them instead of listing them one by one:\n   *\n   * ```js\n   * classNames={{ ...styles }}\n   * ```\n   *\n   * @type {string | {\n   *  appear?: string,\n   *  appearActive?: string,\n   *  appearDone?: string,\n   *  enter?: string,\n   *  enterActive?: string,\n   *  enterDone?: string,\n   *  exit?: string,\n   *  exitActive?: string,\n   *  exitDone?: string,\n   * }}\n   */\n  classNames: classNamesShape,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n   * applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter-active' or\n   * 'appear-active' class is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or\n   * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' class is\n   * applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' classes\n   * are **removed** and the `exit-done` class is added to the DOM node.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExited: PropTypes.func\n}) : {};\nexport default CSSTransition;","import hasClass from './hasClass';\n/**\n * Adds a CSS class to a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\nexport default function addClass(element, className) {\n  if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}","/**\n * Checks if a given element has a CSS class.\n * \n * @param element the element\n * @param className the CSS class name\n */\nexport default function hasClass(element, className) {\n  if (element.classList) return !!className && element.classList.contains(className);\n  return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport TransitionGroup from './TransitionGroup';\n/**\n * The `<ReplaceTransition>` component is a specialized `Transition` component\n * that animates between two children.\n *\n * ```jsx\n * <ReplaceTransition in>\n *   <Fade><div>I appear first</div></Fade>\n *   <Fade><div>I replace the above</div></Fade>\n * </ReplaceTransition>\n * ```\n */\n\nvar ReplaceTransition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(ReplaceTransition, _React$Component);\n\n  function ReplaceTransition() {\n    var _this;\n\n    for (var _len = arguments.length, _args = new Array(_len), _key = 0; _key < _len; _key++) {\n      _args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(_args)) || this;\n\n    _this.handleEnter = function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return _this.handleLifecycle('onEnter', 0, args);\n    };\n\n    _this.handleEntering = function () {\n      for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      return _this.handleLifecycle('onEntering', 0, args);\n    };\n\n    _this.handleEntered = function () {\n      for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      return _this.handleLifecycle('onEntered', 0, args);\n    };\n\n    _this.handleExit = function () {\n      for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n        args[_key5] = arguments[_key5];\n      }\n\n      return _this.handleLifecycle('onExit', 1, args);\n    };\n\n    _this.handleExiting = function () {\n      for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n        args[_key6] = arguments[_key6];\n      }\n\n      return _this.handleLifecycle('onExiting', 1, args);\n    };\n\n    _this.handleExited = function () {\n      for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n        args[_key7] = arguments[_key7];\n      }\n\n      return _this.handleLifecycle('onExited', 1, args);\n    };\n\n    return _this;\n  }\n\n  var _proto = ReplaceTransition.prototype;\n\n  _proto.handleLifecycle = function handleLifecycle(handler, idx, originalArgs) {\n    var _child$props;\n\n    var children = this.props.children;\n    var child = React.Children.toArray(children)[idx];\n    if (child.props[handler]) (_child$props = child.props)[handler].apply(_child$props, originalArgs);\n\n    if (this.props[handler]) {\n      var maybeNode = child.props.nodeRef ? undefined : ReactDOM.findDOMNode(this);\n      this.props[handler](maybeNode);\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        children = _this$props.children,\n        inProp = _this$props.in,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\"]);\n\n    var _React$Children$toArr = React.Children.toArray(children),\n        first = _React$Children$toArr[0],\n        second = _React$Children$toArr[1];\n\n    delete props.onEnter;\n    delete props.onEntering;\n    delete props.onEntered;\n    delete props.onExit;\n    delete props.onExiting;\n    delete props.onExited;\n    return /*#__PURE__*/React.createElement(TransitionGroup, props, inProp ? React.cloneElement(first, {\n      key: 'first',\n      onEnter: this.handleEnter,\n      onEntering: this.handleEntering,\n      onEntered: this.handleEntered\n    }) : React.cloneElement(second, {\n      key: 'second',\n      onEnter: this.handleExit,\n      onEntering: this.handleExiting,\n      onEntered: this.handleExited\n    }));\n  };\n\n  return ReplaceTransition;\n}(React.Component);\n\nReplaceTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  in: PropTypes.bool.isRequired,\n  children: function children(props, propName) {\n    if (React.Children.count(props[propName]) !== 2) return new Error(\"\\\"\" + propName + \"\\\" must be exactly two transition components.\");\n    return null;\n  }\n} : {};\nexport default ReplaceTransition;","import _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\n\nvar _leaveRenders, _enterRenders;\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { ENTERED, ENTERING, EXITING } from './Transition';\nimport TransitionGroupContext from './TransitionGroupContext';\n\nfunction areChildrenDifferent(oldChildren, newChildren) {\n  if (oldChildren === newChildren) return false;\n\n  if (React.isValidElement(oldChildren) && React.isValidElement(newChildren) && oldChildren.key != null && oldChildren.key === newChildren.key) {\n    return false;\n  }\n\n  return true;\n}\n/**\n * Enum of modes for SwitchTransition component\n * @enum { string }\n */\n\n\nexport var modes = {\n  out: 'out-in',\n  in: 'in-out'\n};\n\nvar callHook = function callHook(element, name, cb) {\n  return function () {\n    var _element$props;\n\n    element.props[name] && (_element$props = element.props)[name].apply(_element$props, arguments);\n    cb();\n  };\n};\n\nvar leaveRenders = (_leaveRenders = {}, _leaveRenders[modes.out] = function (_ref) {\n  var current = _ref.current,\n      changeState = _ref.changeState;\n  return React.cloneElement(current, {\n    in: false,\n    onExited: callHook(current, 'onExited', function () {\n      changeState(ENTERING, null);\n    })\n  });\n}, _leaveRenders[modes.in] = function (_ref2) {\n  var current = _ref2.current,\n      changeState = _ref2.changeState,\n      children = _ref2.children;\n  return [current, React.cloneElement(children, {\n    in: true,\n    onEntered: callHook(children, 'onEntered', function () {\n      changeState(ENTERING);\n    })\n  })];\n}, _leaveRenders);\nvar enterRenders = (_enterRenders = {}, _enterRenders[modes.out] = function (_ref3) {\n  var children = _ref3.children,\n      changeState = _ref3.changeState;\n  return React.cloneElement(children, {\n    in: true,\n    onEntered: callHook(children, 'onEntered', function () {\n      changeState(ENTERED, React.cloneElement(children, {\n        in: true\n      }));\n    })\n  });\n}, _enterRenders[modes.in] = function (_ref4) {\n  var current = _ref4.current,\n      children = _ref4.children,\n      changeState = _ref4.changeState;\n  return [React.cloneElement(current, {\n    in: false,\n    onExited: callHook(current, 'onExited', function () {\n      changeState(ENTERED, React.cloneElement(children, {\n        in: true\n      }));\n    })\n  }), React.cloneElement(children, {\n    in: true\n  })];\n}, _enterRenders);\n/**\n * A transition component inspired by the [vue transition modes](https://vuejs.org/v2/guide/transitions.html#Transition-Modes).\n * You can use it when you want to control the render between state transitions.\n * Based on the selected mode and the child's key which is the `Transition` or `CSSTransition` component, the `SwitchTransition` makes a consistent transition between them.\n *\n * If the `out-in` mode is selected, the `SwitchTransition` waits until the old child leaves and then inserts a new child.\n * If the `in-out` mode is selected, the `SwitchTransition` inserts a new child first, waits for the new child to enter and then removes the old child.\n *\n * **Note**: If you want the animation to happen simultaneously\n * (that is, to have the old child removed and a new child inserted **at the same time**),\n * you should use\n * [`TransitionGroup`](https://reactcommunity.org/react-transition-group/transition-group)\n * instead.\n *\n * ```jsx\n * function App() {\n *  const [state, setState] = useState(false);\n *  return (\n *    <SwitchTransition>\n *      <CSSTransition\n *        key={state ? \"Goodbye, world!\" : \"Hello, world!\"}\n *        addEndListener={(node, done) => node.addEventListener(\"transitionend\", done, false)}\n *        classNames='fade'\n *      >\n *        <button onClick={() => setState(state => !state)}>\n *          {state ? \"Goodbye, world!\" : \"Hello, world!\"}\n *        </button>\n *      </CSSTransition>\n *    </SwitchTransition>\n *  );\n * }\n * ```\n *\n * ```css\n * .fade-enter{\n *    opacity: 0;\n * }\n * .fade-exit{\n *    opacity: 1;\n * }\n * .fade-enter-active{\n *    opacity: 1;\n * }\n * .fade-exit-active{\n *    opacity: 0;\n * }\n * .fade-enter-active,\n * .fade-exit-active{\n *    transition: opacity 500ms;\n * }\n * ```\n */\n\nvar SwitchTransition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(SwitchTransition, _React$Component);\n\n  function SwitchTransition() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.state = {\n      status: ENTERED,\n      current: null\n    };\n    _this.appeared = false;\n\n    _this.changeState = function (status, current) {\n      if (current === void 0) {\n        current = _this.state.current;\n      }\n\n      _this.setState({\n        status: status,\n        current: current\n      });\n    };\n\n    return _this;\n  }\n\n  var _proto = SwitchTransition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.appeared = true;\n  };\n\n  SwitchTransition.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {\n    if (props.children == null) {\n      return {\n        current: null\n      };\n    }\n\n    if (state.status === ENTERING && props.mode === modes.in) {\n      return {\n        status: ENTERING\n      };\n    }\n\n    if (state.current && areChildrenDifferent(state.current, props.children)) {\n      return {\n        status: EXITING\n      };\n    }\n\n    return {\n      current: React.cloneElement(props.children, {\n        in: true\n      })\n    };\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        children = _this$props.children,\n        mode = _this$props.mode,\n        _this$state = this.state,\n        status = _this$state.status,\n        current = _this$state.current;\n    var data = {\n      children: children,\n      current: current,\n      changeState: this.changeState,\n      status: status\n    };\n    var component;\n\n    switch (status) {\n      case ENTERING:\n        component = enterRenders[mode](data);\n        break;\n\n      case EXITING:\n        component = leaveRenders[mode](data);\n        break;\n\n      case ENTERED:\n        component = current;\n    }\n\n    return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n      value: {\n        isMounting: !this.appeared\n      }\n    }, component);\n  };\n\n  return SwitchTransition;\n}(React.Component);\n\nSwitchTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * Transition modes.\n   * `out-in`: Current element transitions out first, then when complete, the new element transitions in.\n   * `in-out`: New element transitions in first, then when complete, the current element transitions out.\n   *\n   * @type {'out-in'|'in-out'}\n   */\n  mode: PropTypes.oneOf([modes.in, modes.out]),\n\n  /**\n   * Any `Transition` or `CSSTransition` component.\n   */\n  children: PropTypes.oneOfType([PropTypes.element.isRequired])\n} : {};\nSwitchTransition.defaultProps = {\n  mode: modes.out\n};\nexport default SwitchTransition;","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n  // Standard Redux middleware definition pattern:\n  // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n  var middleware = function middleware(_ref) {\n    var dispatch = _ref.dispatch,\n        getState = _ref.getState;\n    return function (next) {\n      return function (action) {\n        // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n        // If this \"action\" is really a function, call it and return the result.\n        if (typeof action === 'function') {\n          // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n          return action(dispatch, getState, extraArgument);\n        } // Otherwise, pass the action down the middleware chain as usual\n\n\n        return next(action);\n      };\n    };\n  };\n\n  return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';\n\n/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nfunction formatProdErrorMessage(code) {\n  return \"Minified Redux error #\" + code + \"; visit https://redux.js.org/Errors?code=\" + code + \" for the full message or \" + 'use the non-minified dev environment for full errors. ';\n}\n\n// Inlined version of the `symbol-observable` polyfill\nvar $$observable = (function () {\n  return typeof Symbol === 'function' && Symbol.observable || '@@observable';\n})();\n\n/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\nvar randomString = function randomString() {\n  return Math.random().toString(36).substring(7).split('').join('.');\n};\n\nvar ActionTypes = {\n  INIT: \"@@redux/INIT\" + randomString(),\n  REPLACE: \"@@redux/REPLACE\" + randomString(),\n  PROBE_UNKNOWN_ACTION: function PROBE_UNKNOWN_ACTION() {\n    return \"@@redux/PROBE_UNKNOWN_ACTION\" + randomString();\n  }\n};\n\n/**\n * @param {any} obj The object to inspect.\n * @returns {boolean} True if the argument appears to be a plain object.\n */\nfunction isPlainObject(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  var proto = obj;\n\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return Object.getPrototypeOf(obj) === proto;\n}\n\n// Inlined / shortened version of `kindOf` from https://github.com/jonschlinkert/kind-of\nfunction miniKindOf(val) {\n  if (val === void 0) return 'undefined';\n  if (val === null) return 'null';\n  var type = typeof val;\n\n  switch (type) {\n    case 'boolean':\n    case 'string':\n    case 'number':\n    case 'symbol':\n    case 'function':\n      {\n        return type;\n      }\n  }\n\n  if (Array.isArray(val)) return 'array';\n  if (isDate(val)) return 'date';\n  if (isError(val)) return 'error';\n  var constructorName = ctorName(val);\n\n  switch (constructorName) {\n    case 'Symbol':\n    case 'Promise':\n    case 'WeakMap':\n    case 'WeakSet':\n    case 'Map':\n    case 'Set':\n      return constructorName;\n  } // other\n\n\n  return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n}\n\nfunction ctorName(val) {\n  return typeof val.constructor === 'function' ? val.constructor.name : null;\n}\n\nfunction isError(val) {\n  return val instanceof Error || typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number';\n}\n\nfunction isDate(val) {\n  if (val instanceof Date) return true;\n  return typeof val.toDateString === 'function' && typeof val.getDate === 'function' && typeof val.setDate === 'function';\n}\n\nfunction kindOf(val) {\n  var typeOfVal = typeof val;\n\n  if (process.env.NODE_ENV !== 'production') {\n    typeOfVal = miniKindOf(val);\n  }\n\n  return typeOfVal;\n}\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\n\nfunction createStore(reducer, preloadedState, enhancer) {\n  var _ref2;\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n  }\n\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState;\n    preloadedState = undefined;\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : \"Expected the enhancer to be a function. Instead, received: '\" + kindOf(enhancer) + \"'\");\n    }\n\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n\n  if (typeof reducer !== 'function') {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : \"Expected the root reducer to be a function. Instead, received: '\" + kindOf(reducer) + \"'\");\n  }\n\n  var currentReducer = reducer;\n  var currentState = preloadedState;\n  var currentListeners = [];\n  var nextListeners = currentListeners;\n  var isDispatching = false;\n  /**\n   * This makes a shallow copy of currentListeners so we can use\n   * nextListeners as a temporary list while dispatching.\n   *\n   * This prevents any bugs around consumers calling\n   * subscribe/unsubscribe in the middle of a dispatch.\n   */\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice();\n    }\n  }\n  /**\n   * Reads the state tree managed by the store.\n   *\n   * @returns {any} The current state tree of your application.\n   */\n\n\n  function getState() {\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n    }\n\n    return currentState;\n  }\n  /**\n   * Adds a change listener. It will be called any time an action is dispatched,\n   * and some part of the state tree may potentially have changed. You may then\n   * call `getState()` to read the current state tree inside the callback.\n   *\n   * You may call `dispatch()` from a change listener, with the following\n   * caveats:\n   *\n   * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n   * If you subscribe or unsubscribe while the listeners are being invoked, this\n   * will not have any effect on the `dispatch()` that is currently in progress.\n   * However, the next `dispatch()` call, whether nested or not, will use a more\n   * recent snapshot of the subscription list.\n   *\n   * 2. The listener should not expect to see all state changes, as the state\n   * might have been updated multiple times during a nested `dispatch()` before\n   * the listener is called. It is, however, guaranteed that all subscribers\n   * registered before the `dispatch()` started will be called with the latest\n   * state by the time it exits.\n   *\n   * @param {Function} listener A callback to be invoked on every dispatch.\n   * @returns {Function} A function to remove this change listener.\n   */\n\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : \"Expected the listener to be a function. Instead, received: '\" + kindOf(listener) + \"'\");\n    }\n\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n    }\n\n    var isSubscribed = true;\n    ensureCanMutateNextListeners();\n    nextListeners.push(listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n\n      if (isDispatching) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n      }\n\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      var index = nextListeners.indexOf(listener);\n      nextListeners.splice(index, 1);\n      currentListeners = null;\n    };\n  }\n  /**\n   * Dispatches an action. It is the only way to trigger a state change.\n   *\n   * The `reducer` function, used to create the store, will be called with the\n   * current state tree and the given `action`. Its return value will\n   * be considered the **next** state of the tree, and the change listeners\n   * will be notified.\n   *\n   * The base implementation only supports plain object actions. If you want to\n   * dispatch a Promise, an Observable, a thunk, or something else, you need to\n   * wrap your store creating function into the corresponding middleware. For\n   * example, see the documentation for the `redux-thunk` package. Even the\n   * middleware will eventually dispatch plain object actions using this method.\n   *\n   * @param {Object} action A plain object representing “what changed”. It is\n   * a good idea to keep actions serializable so you can record and replay user\n   * sessions, or use the time travelling `redux-devtools`. An action must have\n   * a `type` property which may not be `undefined`. It is a good idea to use\n   * string constants for action types.\n   *\n   * @returns {Object} For convenience, the same action object you dispatched.\n   *\n   * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n   * return something else (for example, a Promise you can await).\n   */\n\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : \"Actions must be plain objects. Instead, the actual type was: '\" + kindOf(action) + \"'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.\");\n    }\n\n    if (typeof action.type === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n    }\n\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : 'Reducers may not dispatch actions.');\n    }\n\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n\n    var listeners = currentListeners = nextListeners;\n\n    for (var i = 0; i < listeners.length; i++) {\n      var listener = listeners[i];\n      listener();\n    }\n\n    return action;\n  }\n  /**\n   * Replaces the reducer currently used by the store to calculate the state.\n   *\n   * You might need this if your app implements code splitting and you want to\n   * load some of the reducers dynamically. You might also need this if you\n   * implement a hot reloading mechanism for Redux.\n   *\n   * @param {Function} nextReducer The reducer for the store to use instead.\n   * @returns {void}\n   */\n\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : \"Expected the nextReducer to be a function. Instead, received: '\" + kindOf(nextReducer));\n    }\n\n    currentReducer = nextReducer; // This action has a similiar effect to ActionTypes.INIT.\n    // Any reducers that existed in both the new and old rootReducer\n    // will receive the previous state. This effectively populates\n    // the new state tree with any relevant data from the old one.\n\n    dispatch({\n      type: ActionTypes.REPLACE\n    });\n  }\n  /**\n   * Interoperability point for observable/reactive libraries.\n   * @returns {observable} A minimal observable of state changes.\n   * For more information, see the observable proposal:\n   * https://github.com/tc39/proposal-observable\n   */\n\n\n  function observable() {\n    var _ref;\n\n    var outerSubscribe = subscribe;\n    return _ref = {\n      /**\n       * The minimal observable subscription method.\n       * @param {Object} observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns {subscription} An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe: function subscribe(observer) {\n        if (typeof observer !== 'object' || observer === null) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : \"Expected the observer to be an object. Instead, received: '\" + kindOf(observer) + \"'\");\n        }\n\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState());\n          }\n        }\n\n        observeState();\n        var unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe: unsubscribe\n        };\n      }\n    }, _ref[$$observable] = function () {\n      return this;\n    }, _ref;\n  } // When a store is created, an \"INIT\" action is dispatched so that every\n  // reducer returns their initial state. This effectively populates\n  // the initial state tree.\n\n\n  dispatch({\n    type: ActionTypes.INIT\n  });\n  return _ref2 = {\n    dispatch: dispatch,\n    subscribe: subscribe,\n    getState: getState,\n    replaceReducer: replaceReducer\n  }, _ref2[$$observable] = observable, _ref2;\n}\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\n\nvar legacy_createStore = createStore;\n\n/**\n * Prints a warning in the console if it exists.\n *\n * @param {String} message The warning message.\n * @returns {void}\n */\nfunction warning(message) {\n  /* eslint-disable no-console */\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message);\n  }\n  /* eslint-enable no-console */\n\n\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message);\n  } catch (e) {} // eslint-disable-line no-empty\n\n}\n\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  var reducerKeys = Object.keys(reducers);\n  var argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n\n  if (reducerKeys.length === 0) {\n    return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n  }\n\n  if (!isPlainObject(inputState)) {\n    return \"The \" + argumentName + \" has unexpected type of \\\"\" + kindOf(inputState) + \"\\\". Expected argument to be an object with the following \" + (\"keys: \\\"\" + reducerKeys.join('\", \"') + \"\\\"\");\n  }\n\n  var unexpectedKeys = Object.keys(inputState).filter(function (key) {\n    return !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key];\n  });\n  unexpectedKeys.forEach(function (key) {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === ActionTypes.REPLACE) return;\n\n  if (unexpectedKeys.length > 0) {\n    return \"Unexpected \" + (unexpectedKeys.length > 1 ? 'keys' : 'key') + \" \" + (\"\\\"\" + unexpectedKeys.join('\", \"') + \"\\\" found in \" + argumentName + \". \") + \"Expected to find one of the known reducer keys instead: \" + (\"\\\"\" + reducerKeys.join('\", \"') + \"\\\". Unexpected keys will be ignored.\");\n  }\n}\n\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach(function (key) {\n    var reducer = reducers[key];\n    var initialState = reducer(undefined, {\n      type: ActionTypes.INIT\n    });\n\n    if (typeof initialState === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined during initialization. \" + \"If the state passed to the reducer is undefined, you must \" + \"explicitly return the initial state. The initial state may \" + \"not be undefined. If you don't want to set a value for this reducer, \" + \"you can use null instead of undefined.\");\n    }\n\n    if (typeof reducer(undefined, {\n      type: ActionTypes.PROBE_UNKNOWN_ACTION()\n    }) === 'undefined') {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : \"The slice reducer for key \\\"\" + key + \"\\\" returned undefined when probed with a random type. \" + (\"Don't try to handle '\" + ActionTypes.INIT + \"' or other actions in \\\"redux/*\\\" \") + \"namespace. They are considered private. Instead, you must return the \" + \"current state for any unknown actions, unless it is undefined, \" + \"in which case you must return the initial state, regardless of the \" + \"action type. The initial state may not be undefined, but can be null.\");\n    }\n  });\n}\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @param {Object} reducers An object whose values correspond to different\n * reducer functions that need to be combined into one. One handy way to obtain\n * it is to use ES6 `import * as reducers` syntax. The reducers may never return\n * undefined for any action. Instead, they should return their initial state\n * if the state passed to them was undefined, and the current state for any\n * unrecognized action.\n *\n * @returns {Function} A reducer function that invokes every reducer inside the\n * passed object, and builds a state object with the same shape.\n */\n\n\nfunction combineReducers(reducers) {\n  var reducerKeys = Object.keys(reducers);\n  var finalReducers = {};\n\n  for (var i = 0; i < reducerKeys.length; i++) {\n    var key = reducerKeys[i];\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof reducers[key] === 'undefined') {\n        warning(\"No reducer provided for key \\\"\" + key + \"\\\"\");\n      }\n    }\n\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key];\n    }\n  }\n\n  var finalReducerKeys = Object.keys(finalReducers); // This is used to make sure we don't warn about the same\n  // keys multiple times.\n\n  var unexpectedKeyCache;\n\n  if (process.env.NODE_ENV !== 'production') {\n    unexpectedKeyCache = {};\n  }\n\n  var shapeAssertionError;\n\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n\n  return function combination(state, action) {\n    if (state === void 0) {\n      state = {};\n    }\n\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      var warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n\n    var hasChanged = false;\n    var nextState = {};\n\n    for (var _i = 0; _i < finalReducerKeys.length; _i++) {\n      var _key = finalReducerKeys[_i];\n      var reducer = finalReducers[_key];\n      var previousStateForKey = state[_key];\n      var nextStateForKey = reducer(previousStateForKey, action);\n\n      if (typeof nextStateForKey === 'undefined') {\n        var actionType = action && action.type;\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : \"When called with an action of type \" + (actionType ? \"\\\"\" + String(actionType) + \"\\\"\" : '(unknown type)') + \", the slice reducer for key \\\"\" + _key + \"\\\" returned undefined. \" + \"To ignore an action, you must explicitly return the previous state. \" + \"If you want this reducer to hold no value, you can return null instead of undefined.\");\n      }\n\n      nextState[_key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n\n    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n    return hasChanged ? nextState : state;\n  };\n}\n\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function () {\n    return dispatch(actionCreator.apply(this, arguments));\n  };\n}\n/**\n * Turns an object whose values are action creators, into an object with the\n * same keys, but with every function wrapped into a `dispatch` call so they\n * may be invoked directly. This is just a convenience method, as you can call\n * `store.dispatch(MyActionCreators.doSomething())` yourself just fine.\n *\n * For convenience, you can also pass an action creator as the first argument,\n * and get a dispatch wrapped function in return.\n *\n * @param {Function|Object} actionCreators An object whose values are action\n * creator functions. One handy way to obtain it is to use ES6 `import * as`\n * syntax. You may also pass a single function.\n *\n * @param {Function} dispatch The `dispatch` function available on your Redux\n * store.\n *\n * @returns {Function|Object} The object mimicking the original object, but with\n * every action creator wrapped into the `dispatch` call. If you passed a\n * function as `actionCreators`, the return value will also be a single\n * function.\n */\n\n\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : \"bindActionCreators expected an object or a function, but instead received: '\" + kindOf(actionCreators) + \"'. \" + \"Did you write \\\"import ActionCreators from\\\" instead of \\\"import * as ActionCreators from\\\"?\");\n  }\n\n  var boundActionCreators = {};\n\n  for (var key in actionCreators) {\n    var actionCreator = actionCreators[key];\n\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n\n  return boundActionCreators;\n}\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for\n * the resulting composite function.\n *\n * @param {...Function} funcs The functions to compose.\n * @returns {Function} A function obtained by composing the argument functions\n * from right to left. For example, compose(f, g, h) is identical to doing\n * (...args) => f(g(h(...args))).\n */\nfunction compose() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n\n  if (funcs.length === 0) {\n    return function (arg) {\n      return arg;\n    };\n  }\n\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n\n  return funcs.reduce(function (a, b) {\n    return function () {\n      return a(b.apply(void 0, arguments));\n    };\n  });\n}\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param {...Function} middlewares The middleware chain to be applied.\n * @returns {Function} A store enhancer applying the middleware.\n */\n\nfunction applyMiddleware() {\n  for (var _len = arguments.length, middlewares = new Array(_len), _key = 0; _key < _len; _key++) {\n    middlewares[_key] = arguments[_key];\n  }\n\n  return function (createStore) {\n    return function () {\n      var store = createStore.apply(void 0, arguments);\n\n      var _dispatch = function dispatch() {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n      };\n\n      var middlewareAPI = {\n        getState: store.getState,\n        dispatch: function dispatch() {\n          return _dispatch.apply(void 0, arguments);\n        }\n      };\n      var chain = middlewares.map(function (middleware) {\n        return middleware(middlewareAPI);\n      });\n      _dispatch = compose.apply(void 0, chain)(store.dispatch);\n      return _objectSpread(_objectSpread({}, store), {}, {\n        dispatch: _dispatch\n      });\n    };\n  };\n}\n\nexport { ActionTypes as __DO_NOT_USE__ActionTypes, applyMiddleware, bindActionCreators, combineReducers, compose, createStore, legacy_createStore };\n","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n    if (typeof Map !== 'undefined') {\r\n        return Map;\r\n    }\r\n    /**\r\n     * Returns index in provided array that matches the specified key.\r\n     *\r\n     * @param {Array<Array>} arr\r\n     * @param {*} key\r\n     * @returns {number}\r\n     */\r\n    function getIndex(arr, key) {\r\n        var result = -1;\r\n        arr.some(function (entry, index) {\r\n            if (entry[0] === key) {\r\n                result = index;\r\n                return true;\r\n            }\r\n            return false;\r\n        });\r\n        return result;\r\n    }\r\n    return /** @class */ (function () {\r\n        function class_1() {\r\n            this.__entries__ = [];\r\n        }\r\n        Object.defineProperty(class_1.prototype, \"size\", {\r\n            /**\r\n             * @returns {boolean}\r\n             */\r\n            get: function () {\r\n                return this.__entries__.length;\r\n            },\r\n            enumerable: true,\r\n            configurable: true\r\n        });\r\n        /**\r\n         * @param {*} key\r\n         * @returns {*}\r\n         */\r\n        class_1.prototype.get = function (key) {\r\n            var index = getIndex(this.__entries__, key);\r\n            var entry = this.__entries__[index];\r\n            return entry && entry[1];\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @param {*} value\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.set = function (key, value) {\r\n            var index = getIndex(this.__entries__, key);\r\n            if (~index) {\r\n                this.__entries__[index][1] = value;\r\n            }\r\n            else {\r\n                this.__entries__.push([key, value]);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.delete = function (key) {\r\n            var entries = this.__entries__;\r\n            var index = getIndex(entries, key);\r\n            if (~index) {\r\n                entries.splice(index, 1);\r\n            }\r\n        };\r\n        /**\r\n         * @param {*} key\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.has = function (key) {\r\n            return !!~getIndex(this.__entries__, key);\r\n        };\r\n        /**\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.clear = function () {\r\n            this.__entries__.splice(0);\r\n        };\r\n        /**\r\n         * @param {Function} callback\r\n         * @param {*} [ctx=null]\r\n         * @returns {void}\r\n         */\r\n        class_1.prototype.forEach = function (callback, ctx) {\r\n            if (ctx === void 0) { ctx = null; }\r\n            for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n                var entry = _a[_i];\r\n                callback.call(ctx, entry[1], entry[0]);\r\n            }\r\n        };\r\n        return class_1;\r\n    }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n    if (typeof global !== 'undefined' && global.Math === Math) {\r\n        return global;\r\n    }\r\n    if (typeof self !== 'undefined' && self.Math === Math) {\r\n        return self;\r\n    }\r\n    if (typeof window !== 'undefined' && window.Math === Math) {\r\n        return window;\r\n    }\r\n    // eslint-disable-next-line no-new-func\r\n    return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n    if (typeof requestAnimationFrame === 'function') {\r\n        // It's required to use a bounded function because IE sometimes throws\r\n        // an \"Invalid calling object\" error if rAF is invoked without the global\r\n        // object on the left hand side.\r\n        return requestAnimationFrame.bind(global$1);\r\n    }\r\n    return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n    var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n    /**\r\n     * Invokes the original callback function and schedules new invocation if\r\n     * the \"proxy\" was called during current request.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function resolvePending() {\r\n        if (leadingCall) {\r\n            leadingCall = false;\r\n            callback();\r\n        }\r\n        if (trailingCall) {\r\n            proxy();\r\n        }\r\n    }\r\n    /**\r\n     * Callback invoked after the specified delay. It will further postpone\r\n     * invocation of the original function delegating it to the\r\n     * requestAnimationFrame.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function timeoutCallback() {\r\n        requestAnimationFrame$1(resolvePending);\r\n    }\r\n    /**\r\n     * Schedules invocation of the original function.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    function proxy() {\r\n        var timeStamp = Date.now();\r\n        if (leadingCall) {\r\n            // Reject immediately following calls.\r\n            if (timeStamp - lastCallTime < trailingTimeout) {\r\n                return;\r\n            }\r\n            // Schedule new call to be in invoked when the pending one is resolved.\r\n            // This is important for \"transitions\" which never actually start\r\n            // immediately so there is a chance that we might miss one if change\r\n            // happens amids the pending invocation.\r\n            trailingCall = true;\r\n        }\r\n        else {\r\n            leadingCall = true;\r\n            trailingCall = false;\r\n            setTimeout(timeoutCallback, delay);\r\n        }\r\n        lastCallTime = timeStamp;\r\n    }\r\n    return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserverController.\r\n     *\r\n     * @private\r\n     */\r\n    function ResizeObserverController() {\r\n        /**\r\n         * Indicates whether DOM listeners have been added.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.connected_ = false;\r\n        /**\r\n         * Tells that controller has subscribed for Mutation Events.\r\n         *\r\n         * @private {boolean}\r\n         */\r\n        this.mutationEventsAdded_ = false;\r\n        /**\r\n         * Keeps reference to the instance of MutationObserver.\r\n         *\r\n         * @private {MutationObserver}\r\n         */\r\n        this.mutationsObserver_ = null;\r\n        /**\r\n         * A list of connected observers.\r\n         *\r\n         * @private {Array<ResizeObserverSPI>}\r\n         */\r\n        this.observers_ = [];\r\n        this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n        this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n    }\r\n    /**\r\n     * Adds observer to observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be added.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.addObserver = function (observer) {\r\n        if (!~this.observers_.indexOf(observer)) {\r\n            this.observers_.push(observer);\r\n        }\r\n        // Add listeners if they haven't been added yet.\r\n        if (!this.connected_) {\r\n            this.connect_();\r\n        }\r\n    };\r\n    /**\r\n     * Removes observer from observers list.\r\n     *\r\n     * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.removeObserver = function (observer) {\r\n        var observers = this.observers_;\r\n        var index = observers.indexOf(observer);\r\n        // Remove observer if it's present in registry.\r\n        if (~index) {\r\n            observers.splice(index, 1);\r\n        }\r\n        // Remove listeners if controller has no connected observers.\r\n        if (!observers.length && this.connected_) {\r\n            this.disconnect_();\r\n        }\r\n    };\r\n    /**\r\n     * Invokes the update of observers. It will continue running updates insofar\r\n     * it detects changes.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.refresh = function () {\r\n        var changesDetected = this.updateObservers_();\r\n        // Continue running updates if changes have been detected as there might\r\n        // be future ones caused by CSS transitions.\r\n        if (changesDetected) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Updates every observer from observers list and notifies them of queued\r\n     * entries.\r\n     *\r\n     * @private\r\n     * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n     *      dimensions of it's elements.\r\n     */\r\n    ResizeObserverController.prototype.updateObservers_ = function () {\r\n        // Collect observers that have active observations.\r\n        var activeObservers = this.observers_.filter(function (observer) {\r\n            return observer.gatherActive(), observer.hasActive();\r\n        });\r\n        // Deliver notifications in a separate cycle in order to avoid any\r\n        // collisions between observers, e.g. when multiple instances of\r\n        // ResizeObserver are tracking the same element and the callback of one\r\n        // of them changes content dimensions of the observed target. Sometimes\r\n        // this may result in notifications being blocked for the rest of observers.\r\n        activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n        return activeObservers.length > 0;\r\n    };\r\n    /**\r\n     * Initializes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.connect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already added.\r\n        if (!isBrowser || this.connected_) {\r\n            return;\r\n        }\r\n        // Subscription to the \"Transitionend\" event is used as a workaround for\r\n        // delayed transitions. This way it's possible to capture at least the\r\n        // final state of an element.\r\n        document.addEventListener('transitionend', this.onTransitionEnd_);\r\n        window.addEventListener('resize', this.refresh);\r\n        if (mutationObserverSupported) {\r\n            this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n            this.mutationsObserver_.observe(document, {\r\n                attributes: true,\r\n                childList: true,\r\n                characterData: true,\r\n                subtree: true\r\n            });\r\n        }\r\n        else {\r\n            document.addEventListener('DOMSubtreeModified', this.refresh);\r\n            this.mutationEventsAdded_ = true;\r\n        }\r\n        this.connected_ = true;\r\n    };\r\n    /**\r\n     * Removes DOM listeners.\r\n     *\r\n     * @private\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.disconnect_ = function () {\r\n        // Do nothing if running in a non-browser environment or if listeners\r\n        // have been already removed.\r\n        if (!isBrowser || !this.connected_) {\r\n            return;\r\n        }\r\n        document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n        window.removeEventListener('resize', this.refresh);\r\n        if (this.mutationsObserver_) {\r\n            this.mutationsObserver_.disconnect();\r\n        }\r\n        if (this.mutationEventsAdded_) {\r\n            document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n        }\r\n        this.mutationsObserver_ = null;\r\n        this.mutationEventsAdded_ = false;\r\n        this.connected_ = false;\r\n    };\r\n    /**\r\n     * \"Transitionend\" event handler.\r\n     *\r\n     * @private\r\n     * @param {TransitionEvent} event\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n        var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n        // Detect whether transition may affect dimensions of an element.\r\n        var isReflowProperty = transitionKeys.some(function (key) {\r\n            return !!~propertyName.indexOf(key);\r\n        });\r\n        if (isReflowProperty) {\r\n            this.refresh();\r\n        }\r\n    };\r\n    /**\r\n     * Returns instance of the ResizeObserverController.\r\n     *\r\n     * @returns {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.getInstance = function () {\r\n        if (!this.instance_) {\r\n            this.instance_ = new ResizeObserverController();\r\n        }\r\n        return this.instance_;\r\n    };\r\n    /**\r\n     * Holds reference to the controller's instance.\r\n     *\r\n     * @private {ResizeObserverController}\r\n     */\r\n    ResizeObserverController.instance_ = null;\r\n    return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n    for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n        var key = _a[_i];\r\n        Object.defineProperty(target, key, {\r\n            value: props[key],\r\n            enumerable: false,\r\n            writable: false,\r\n            configurable: true\r\n        });\r\n    }\r\n    return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n    // Assume that the element is an instance of Node, which means that it\r\n    // has the \"ownerDocument\" property from which we can retrieve a\r\n    // corresponding global object.\r\n    var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n    // Return the local global object if it's not possible extract one from\r\n    // provided element.\r\n    return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n    return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n    var positions = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        positions[_i - 1] = arguments[_i];\r\n    }\r\n    return positions.reduce(function (size, position) {\r\n        var value = styles['border-' + position + '-width'];\r\n        return size + toFloat(value);\r\n    }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n    var positions = ['top', 'right', 'bottom', 'left'];\r\n    var paddings = {};\r\n    for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n        var position = positions_1[_i];\r\n        var value = styles['padding-' + position];\r\n        paddings[position] = toFloat(value);\r\n    }\r\n    return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n *      to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n    var bbox = target.getBBox();\r\n    return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n    // Client width & height properties can't be\r\n    // used exclusively as they provide rounded values.\r\n    var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n    // By this condition we can catch all non-replaced inline, hidden and\r\n    // detached elements. Though elements with width & height properties less\r\n    // than 0.5 will be discarded as well.\r\n    //\r\n    // Without it we would need to implement separate methods for each of\r\n    // those cases and it's not possible to perform a precise and performance\r\n    // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n    // gives wrong results for elements with width & height less than 0.5.\r\n    if (!clientWidth && !clientHeight) {\r\n        return emptyRect;\r\n    }\r\n    var styles = getWindowOf(target).getComputedStyle(target);\r\n    var paddings = getPaddings(styles);\r\n    var horizPad = paddings.left + paddings.right;\r\n    var vertPad = paddings.top + paddings.bottom;\r\n    // Computed styles of width & height are being used because they are the\r\n    // only dimensions available to JS that contain non-rounded values. It could\r\n    // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n    // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n    var width = toFloat(styles.width), height = toFloat(styles.height);\r\n    // Width & height include paddings and borders when the 'border-box' box\r\n    // model is applied (except for IE).\r\n    if (styles.boxSizing === 'border-box') {\r\n        // Following conditions are required to handle Internet Explorer which\r\n        // doesn't include paddings and borders to computed CSS dimensions.\r\n        //\r\n        // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n        // properties then it's either IE, and thus we don't need to subtract\r\n        // anything, or an element merely doesn't have paddings/borders styles.\r\n        if (Math.round(width + horizPad) !== clientWidth) {\r\n            width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n        }\r\n        if (Math.round(height + vertPad) !== clientHeight) {\r\n            height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n        }\r\n    }\r\n    // Following steps can't be applied to the document's root element as its\r\n    // client[Width/Height] properties represent viewport area of the window.\r\n    // Besides, it's as well not necessary as the <html> itself neither has\r\n    // rendered scroll bars nor it can be clipped.\r\n    if (!isDocumentElement(target)) {\r\n        // In some browsers (only in Firefox, actually) CSS width & height\r\n        // include scroll bars size which can be removed at this step as scroll\r\n        // bars are the only difference between rounded dimensions + paddings\r\n        // and \"client\" properties, though that is not always true in Chrome.\r\n        var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n        var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n        // Chrome has a rather weird rounding of \"client\" properties.\r\n        // E.g. for an element with content width of 314.2px it sometimes gives\r\n        // the client width of 315px and for the width of 314.7px it may give\r\n        // 314px. And it doesn't happen all the time. So just ignore this delta\r\n        // as a non-relevant.\r\n        if (Math.abs(vertScrollbar) !== 1) {\r\n            width -= vertScrollbar;\r\n        }\r\n        if (Math.abs(horizScrollbar) !== 1) {\r\n            height -= horizScrollbar;\r\n        }\r\n    }\r\n    return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n    // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n    // interface.\r\n    if (typeof SVGGraphicsElement !== 'undefined') {\r\n        return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n    }\r\n    // If it's so, then check that element is at least an instance of the\r\n    // SVGElement and that it has the \"getBBox\" method.\r\n    // eslint-disable-next-line no-extra-parens\r\n    return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n        typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n    return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n    if (!isBrowser) {\r\n        return emptyRect;\r\n    }\r\n    if (isSVGGraphicsElement(target)) {\r\n        return getSVGContentRect(target);\r\n    }\r\n    return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n    var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n    // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n    var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n    var rect = Object.create(Constr.prototype);\r\n    // Rectangle's properties are not writable and non-enumerable.\r\n    defineConfigurable(rect, {\r\n        x: x, y: y, width: width, height: height,\r\n        top: y,\r\n        right: x + width,\r\n        bottom: height + y,\r\n        left: x\r\n    });\r\n    return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n    return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObservation.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     */\r\n    function ResizeObservation(target) {\r\n        /**\r\n         * Broadcasted width of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastWidth = 0;\r\n        /**\r\n         * Broadcasted height of content rectangle.\r\n         *\r\n         * @type {number}\r\n         */\r\n        this.broadcastHeight = 0;\r\n        /**\r\n         * Reference to the last observed content rectangle.\r\n         *\r\n         * @private {DOMRectInit}\r\n         */\r\n        this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n        this.target = target;\r\n    }\r\n    /**\r\n     * Updates content rectangle and tells whether it's width or height properties\r\n     * have changed since the last broadcast.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObservation.prototype.isActive = function () {\r\n        var rect = getContentRect(this.target);\r\n        this.contentRect_ = rect;\r\n        return (rect.width !== this.broadcastWidth ||\r\n            rect.height !== this.broadcastHeight);\r\n    };\r\n    /**\r\n     * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n     * from the corresponding properties of the last observed content rectangle.\r\n     *\r\n     * @returns {DOMRectInit} Last observed content rectangle.\r\n     */\r\n    ResizeObservation.prototype.broadcastRect = function () {\r\n        var rect = this.contentRect_;\r\n        this.broadcastWidth = rect.width;\r\n        this.broadcastHeight = rect.height;\r\n        return rect;\r\n    };\r\n    return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n    /**\r\n     * Creates an instance of ResizeObserverEntry.\r\n     *\r\n     * @param {Element} target - Element that is being observed.\r\n     * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n     */\r\n    function ResizeObserverEntry(target, rectInit) {\r\n        var contentRect = createReadOnlyRect(rectInit);\r\n        // According to the specification following properties are not writable\r\n        // and are also not enumerable in the native implementation.\r\n        //\r\n        // Property accessors are not being used as they'd require to define a\r\n        // private WeakMap storage which may cause memory leaks in browsers that\r\n        // don't support this type of collections.\r\n        defineConfigurable(this, { target: target, contentRect: contentRect });\r\n    }\r\n    return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n     *      when one of the observed elements changes it's content dimensions.\r\n     * @param {ResizeObserverController} controller - Controller instance which\r\n     *      is responsible for the updates of observer.\r\n     * @param {ResizeObserver} callbackCtx - Reference to the public\r\n     *      ResizeObserver instance which will be passed to callback function.\r\n     */\r\n    function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n        /**\r\n         * Collection of resize observations that have detected changes in dimensions\r\n         * of elements.\r\n         *\r\n         * @private {Array<ResizeObservation>}\r\n         */\r\n        this.activeObservations_ = [];\r\n        /**\r\n         * Registry of the ResizeObservation instances.\r\n         *\r\n         * @private {Map<Element, ResizeObservation>}\r\n         */\r\n        this.observations_ = new MapShim();\r\n        if (typeof callback !== 'function') {\r\n            throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n        }\r\n        this.callback_ = callback;\r\n        this.controller_ = controller;\r\n        this.callbackCtx_ = callbackCtx;\r\n    }\r\n    /**\r\n     * Starts observing provided element.\r\n     *\r\n     * @param {Element} target - Element to be observed.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.observe = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is already being observed.\r\n        if (observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.set(target, new ResizeObservation(target));\r\n        this.controller_.addObserver(this);\r\n        // Force the update of observations.\r\n        this.controller_.refresh();\r\n    };\r\n    /**\r\n     * Stops observing provided element.\r\n     *\r\n     * @param {Element} target - Element to stop observing.\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.unobserve = function (target) {\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        // Do nothing if current environment doesn't have the Element interface.\r\n        if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n            return;\r\n        }\r\n        if (!(target instanceof getWindowOf(target).Element)) {\r\n            throw new TypeError('parameter 1 is not of type \"Element\".');\r\n        }\r\n        var observations = this.observations_;\r\n        // Do nothing if element is not being observed.\r\n        if (!observations.has(target)) {\r\n            return;\r\n        }\r\n        observations.delete(target);\r\n        if (!observations.size) {\r\n            this.controller_.removeObserver(this);\r\n        }\r\n    };\r\n    /**\r\n     * Stops observing all elements.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.disconnect = function () {\r\n        this.clearActive();\r\n        this.observations_.clear();\r\n        this.controller_.removeObserver(this);\r\n    };\r\n    /**\r\n     * Collects observation instances the associated element of which has changed\r\n     * it's content rectangle.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.gatherActive = function () {\r\n        var _this = this;\r\n        this.clearActive();\r\n        this.observations_.forEach(function (observation) {\r\n            if (observation.isActive()) {\r\n                _this.activeObservations_.push(observation);\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * Invokes initial callback function with a list of ResizeObserverEntry\r\n     * instances collected from active resize observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.broadcastActive = function () {\r\n        // Do nothing if observer doesn't have active observations.\r\n        if (!this.hasActive()) {\r\n            return;\r\n        }\r\n        var ctx = this.callbackCtx_;\r\n        // Create ResizeObserverEntry instance for every active observation.\r\n        var entries = this.activeObservations_.map(function (observation) {\r\n            return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n        });\r\n        this.callback_.call(ctx, entries, ctx);\r\n        this.clearActive();\r\n    };\r\n    /**\r\n     * Clears the collection of active observations.\r\n     *\r\n     * @returns {void}\r\n     */\r\n    ResizeObserverSPI.prototype.clearActive = function () {\r\n        this.activeObservations_.splice(0);\r\n    };\r\n    /**\r\n     * Tells whether observer has active observations.\r\n     *\r\n     * @returns {boolean}\r\n     */\r\n    ResizeObserverSPI.prototype.hasActive = function () {\r\n        return this.activeObservations_.length > 0;\r\n    };\r\n    return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n    /**\r\n     * Creates a new instance of ResizeObserver.\r\n     *\r\n     * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n     *      dimensions of the observed elements change.\r\n     */\r\n    function ResizeObserver(callback) {\r\n        if (!(this instanceof ResizeObserver)) {\r\n            throw new TypeError('Cannot call a class as a function.');\r\n        }\r\n        if (!arguments.length) {\r\n            throw new TypeError('1 argument required, but only 0 present.');\r\n        }\r\n        var controller = ResizeObserverController.getInstance();\r\n        var observer = new ResizeObserverSPI(callback, controller, this);\r\n        observers.set(this, observer);\r\n    }\r\n    return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n    'observe',\r\n    'unobserve',\r\n    'disconnect'\r\n].forEach(function (method) {\r\n    ResizeObserver.prototype[method] = function () {\r\n        var _a;\r\n        return (_a = observers.get(this))[method].apply(_a, arguments);\r\n    };\r\n});\n\nvar index = (function () {\r\n    // Export existing implementation if available.\r\n    if (typeof global$1.ResizeObserver !== 'undefined') {\r\n        return global$1.ResizeObserver;\r\n    }\r\n    return ResizeObserver;\r\n})();\n\nexport default index;\n","function isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to, from) {\n  if (from === undefined) from = '';\n\n  var toParts = (to && to.split('/')) || [];\n  var fromParts = (from && from.split('/')) || [];\n\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n\n  if (!fromParts.length) return '/';\n\n  var hasTrailingSlash;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n\n  if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');\n\n  if (\n    mustEndAbs &&\n    fromParts[0] !== '' &&\n    (!fromParts[0] || !isAbsolute(fromParts[0]))\n  )\n    fromParts.unshift('');\n\n  var result = fromParts.join('/');\n\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n\n  return result;\n}\n\nexport default resolvePathname;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nexports.__esModule = true;\nvar style_to_object_1 = __importDefault(require(\"style-to-object\"));\nvar utilities_1 = require(\"./utilities\");\nfunction StyleToJS(style, options) {\n    var output = {};\n    if (!style || typeof style !== 'string') {\n        return output;\n    }\n    (0, style_to_object_1[\"default\"])(style, function (property, value) {\n        if (property && value) {\n            output[(0, utilities_1.camelCase)(property, options)] = value;\n        }\n    });\n    return output;\n}\nexports[\"default\"] = StyleToJS;\n","\"use strict\";\nexports.__esModule = true;\nexports.camelCase = void 0;\nvar CUSTOM_PROPERTY_REGEX = /^--[a-zA-Z0-9-]+$/;\nvar HYPHEN_REGEX = /-([a-z])/g;\nvar NO_HYPHEN_REGEX = /^[^-]+$/;\nvar VENDOR_PREFIX_REGEX = /^-(webkit|moz|ms|o|khtml)-/;\nvar MS_VENDOR_PREFIX_REGEX = /^-(ms)-/;\nvar skipCamelCase = function (property) {\n    return !property ||\n        NO_HYPHEN_REGEX.test(property) ||\n        CUSTOM_PROPERTY_REGEX.test(property);\n};\nvar capitalize = function (match, character) {\n    return character.toUpperCase();\n};\nvar trimHyphen = function (match, prefix) { return \"\".concat(prefix, \"-\"); };\nvar camelCase = function (property, options) {\n    if (options === void 0) { options = {}; }\n    if (skipCamelCase(property)) {\n        return property;\n    }\n    property = property.toLowerCase();\n    if (options.reactCompat) {\n        property = property.replace(MS_VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    else {\n        property = property.replace(VENDOR_PREFIX_REGEX, trimHyphen);\n    }\n    return property.replace(HYPHEN_REGEX, capitalize);\n};\nexports.camelCase = camelCase;\n","var parse = require('inline-style-parser');\n\n/**\n * Parses inline style to object.\n *\n * @example\n * // returns { 'line-height': '42' }\n * StyleToObject('line-height: 42;');\n *\n * @param  {String}      style      - The inline style.\n * @param  {Function}    [iterator] - The iterator function.\n * @return {null|Object}\n */\nfunction StyleToObject(style, iterator) {\n  var output = null;\n  if (!style || typeof style !== 'string') {\n    return output;\n  }\n\n  var declaration;\n  var declarations = parse(style);\n  var hasIterator = typeof iterator === 'function';\n  var property;\n  var value;\n\n  for (var i = 0, len = declarations.length; i < len; i++) {\n    declaration = declarations[i];\n    property = declaration.property;\n    value = declaration.value;\n\n    if (hasIterator) {\n      iterator(property, value, declaration);\n    } else if (value) {\n      output || (output = {});\n      output[property] = value;\n    }\n  }\n\n  return output;\n}\n\nmodule.exports = StyleToObject;\n","import Stylis from 'stylis/stylis.min';\nimport _insertRulePlugin from 'stylis-rule-sheet';\nimport React, { cloneElement, createContext, Component, createElement } from 'react';\nimport unitless from '@emotion/unitless';\nimport { isElement, isValidElementType, ForwardRef } from 'react-is';\nimport memoize from 'memoize-one';\nimport PropTypes from 'prop-types';\nimport validAttr from '@emotion/is-prop-valid';\nimport merge from 'merge-anything';\n\n// \n\nvar interleave = (function (strings, interpolations) {\n  var result = [strings[0]];\n\n  for (var i = 0, len = interpolations.length; i < len; i += 1) {\n    result.push(interpolations[i], strings[i + 1]);\n  }\n\n  return result;\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n  var target = {};\n\n  for (var i in obj) {\n    if (keys.indexOf(i) >= 0) continue;\n    if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n    target[i] = obj[i];\n  }\n\n  return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n// \nvar isPlainObject = (function (x) {\n  return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x.constructor === Object;\n});\n\n// \nvar EMPTY_ARRAY = Object.freeze([]);\nvar EMPTY_OBJECT = Object.freeze({});\n\n// \nfunction isFunction(test) {\n  return typeof test === 'function';\n}\n\n// \n\nfunction getComponentName(target) {\n  return (process.env.NODE_ENV !== 'production' ? typeof target === 'string' && target : false) || target.displayName || target.name || 'Component';\n}\n\n// \nfunction isStatelessFunction(test) {\n  return typeof test === 'function' && !(test.prototype && test.prototype.isReactComponent);\n}\n\n// \nfunction isStyledComponent(target) {\n  return target && typeof target.styledComponentId === 'string';\n}\n\n// \n\nvar SC_ATTR = typeof process !== 'undefined' && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || 'data-styled';\n\nvar SC_VERSION_ATTR = 'data-styled-version';\n\nvar SC_STREAM_ATTR = 'data-styled-streamed';\n\nvar IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window;\n\nvar DISABLE_SPEEDY = typeof SC_DISABLE_SPEEDY === 'boolean' && SC_DISABLE_SPEEDY || typeof process !== 'undefined' && (process.env.REACT_APP_SC_DISABLE_SPEEDY || process.env.SC_DISABLE_SPEEDY) || process.env.NODE_ENV !== 'production';\n\n// Shared empty execution context when generating static styles\nvar STATIC_EXECUTION_CONTEXT = {};\n\n// \n\n\n/**\n * Parse errors.md and turn it into a simple hash of code: message\n */\nvar ERRORS = process.env.NODE_ENV !== 'production' ? {\n  \"1\": \"Cannot create styled-component for component: %s.\\n\\n\",\n  \"2\": \"Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\\n\\n- Are you trying to reuse it across renders?\\n- Are you accidentally calling collectStyles twice?\\n\\n\",\n  \"3\": \"Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\\n\\n\",\n  \"4\": \"The `StyleSheetManager` expects a valid target or sheet prop!\\n\\n- Does this error occur on the client and is your target falsy?\\n- Does this error occur on the server and is the sheet falsy?\\n\\n\",\n  \"5\": \"The clone method cannot be used on the client!\\n\\n- Are you running in a client-like environment on the server?\\n- Are you trying to run SSR on the client?\\n\\n\",\n  \"6\": \"Trying to insert a new style tag, but the given Node is unmounted!\\n\\n- Are you using a custom target that isn't mounted?\\n- Does your document not have a valid head element?\\n- Have you accidentally removed a style tag manually?\\n\\n\",\n  \"7\": \"ThemeProvider: Please return an object from your \\\"theme\\\" prop function, e.g.\\n\\n```js\\ntheme={() => ({})}\\n```\\n\\n\",\n  \"8\": \"ThemeProvider: Please make your \\\"theme\\\" prop an object.\\n\\n\",\n  \"9\": \"Missing document `<head>`\\n\\n\",\n  \"10\": \"Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\\n\\n\",\n  \"11\": \"_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\\n\\n\",\n  \"12\": \"It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\\\`\\\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\\n\\n\",\n  \"13\": \"%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\\n\"\n} : {};\n\n/**\n * super basic version of sprintf\n */\nfunction format() {\n  var a = arguments.length <= 0 ? undefined : arguments[0];\n  var b = [];\n\n  for (var c = 1, len = arguments.length; c < len; c += 1) {\n    b.push(arguments.length <= c ? undefined : arguments[c]);\n  }\n\n  b.forEach(function (d) {\n    a = a.replace(/%[a-z]/, d);\n  });\n\n  return a;\n}\n\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n */\n\nvar StyledComponentsError = function (_Error) {\n  inherits(StyledComponentsError, _Error);\n\n  function StyledComponentsError(code) {\n    classCallCheck(this, StyledComponentsError);\n\n    for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      interpolations[_key - 1] = arguments[_key];\n    }\n\n    if (process.env.NODE_ENV === 'production') {\n      var _this = possibleConstructorReturn(this, _Error.call(this, 'An error occurred. See https://github.com/styled-components/styled-components/blob/master/packages/styled-components/src/utils/errors.md#' + code + ' for more information.' + (interpolations.length > 0 ? ' Additional arguments: ' + interpolations.join(', ') : '')));\n    } else {\n      var _this = possibleConstructorReturn(this, _Error.call(this, format.apply(undefined, [ERRORS[code]].concat(interpolations)).trim()));\n    }\n    return possibleConstructorReturn(_this);\n  }\n\n  return StyledComponentsError;\n}(Error);\n\n// \nvar SC_COMPONENT_ID = /^[^\\S\\n]*?\\/\\* sc-component-id:\\s*(\\S+)\\s+\\*\\//gm;\n\nvar extractComps = (function (maybeCSS) {\n  var css = '' + (maybeCSS || ''); // Definitely a string, and a clone\n  var existingComponents = [];\n  css.replace(SC_COMPONENT_ID, function (match, componentId, matchIndex) {\n    existingComponents.push({ componentId: componentId, matchIndex: matchIndex });\n    return match;\n  });\n  return existingComponents.map(function (_ref, i) {\n    var componentId = _ref.componentId,\n        matchIndex = _ref.matchIndex;\n\n    var nextComp = existingComponents[i + 1];\n    var cssFromDOM = nextComp ? css.slice(matchIndex, nextComp.matchIndex) : css.slice(matchIndex);\n    return { componentId: componentId, cssFromDOM: cssFromDOM };\n  });\n});\n\n// \n\nvar COMMENT_REGEX = /^\\s*\\/\\/.*$/gm;\n\n// NOTE: This stylis instance is only used to split rules from SSR'd style tags\nvar stylisSplitter = new Stylis({\n  global: false,\n  cascade: true,\n  keyframe: false,\n  prefix: false,\n  compress: false,\n  semicolon: true\n});\n\nvar stylis = new Stylis({\n  global: false,\n  cascade: true,\n  keyframe: false,\n  prefix: true,\n  compress: false,\n  semicolon: false // NOTE: This means \"autocomplete missing semicolons\"\n});\n\n// Wrap `insertRulePlugin to build a list of rules,\n// and then make our own plugin to return the rules. This\n// makes it easier to hook into the existing SSR architecture\n\nvar parsingRules = [];\n\n// eslint-disable-next-line consistent-return\nvar returnRulesPlugin = function returnRulesPlugin(context) {\n  if (context === -2) {\n    var parsedRules = parsingRules;\n    parsingRules = [];\n    return parsedRules;\n  }\n};\n\nvar parseRulesPlugin = _insertRulePlugin(function (rule) {\n  parsingRules.push(rule);\n});\n\nvar _componentId = void 0;\nvar _selector = void 0;\nvar _selectorRegexp = void 0;\n\nvar selfReferenceReplacer = function selfReferenceReplacer(match, offset, string) {\n  if (\n  // the first self-ref is always untouched\n  offset > 0 &&\n  // there should be at least two self-refs to do a replacement (.b > .b)\n  string.slice(0, offset).indexOf(_selector) !== -1 &&\n  // no consecutive self refs (.b.b); that is a precedence boost and treated differently\n  string.slice(offset - _selector.length, offset) !== _selector) {\n    return '.' + _componentId;\n  }\n\n  return match;\n};\n\n/**\n * When writing a style like\n *\n * & + & {\n *   color: red;\n * }\n *\n * The second ampersand should be a reference to the static component class. stylis\n * has no knowledge of static class so we have to intelligently replace the base selector.\n */\nvar selfReferenceReplacementPlugin = function selfReferenceReplacementPlugin(context, _, selectors) {\n  if (context === 2 && selectors.length && selectors[0].lastIndexOf(_selector) > 0) {\n    // eslint-disable-next-line no-param-reassign\n    selectors[0] = selectors[0].replace(_selectorRegexp, selfReferenceReplacer);\n  }\n};\n\nstylis.use([selfReferenceReplacementPlugin, parseRulesPlugin, returnRulesPlugin]);\nstylisSplitter.use([parseRulesPlugin, returnRulesPlugin]);\n\nvar splitByRules = function splitByRules(css) {\n  return stylisSplitter('', css);\n};\n\nfunction stringifyRules(rules, selector, prefix) {\n  var componentId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '&';\n\n  var flatCSS = rules.join('').replace(COMMENT_REGEX, ''); // replace JS comments\n\n  var cssStr = selector && prefix ? prefix + ' ' + selector + ' { ' + flatCSS + ' }' : flatCSS;\n\n  // stylis has no concept of state to be passed to plugins\n  // but since JS is single=threaded, we can rely on that to ensure\n  // these properties stay in sync with the current stylis run\n  _componentId = componentId;\n  _selector = selector;\n  _selectorRegexp = new RegExp('\\\\' + _selector + '\\\\b', 'g');\n\n  return stylis(prefix || !selector ? '' : selector, cssStr);\n}\n\n// \n/* eslint-disable camelcase, no-undef */\n\nvar getNonce = (function () {\n  return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n});\n\n// \n/* These are helpers for the StyleTags to keep track of the injected\n * rule names for each (component) ID that they're keeping track of.\n * They're crucial for detecting whether a name has already been\n * injected.\n * (This excludes rehydrated names) */\n\n/* adds a new ID:name pairing to a names dictionary */\nvar addNameForId = function addNameForId(names, id, name) {\n  if (name) {\n    // eslint-disable-next-line no-param-reassign\n    var namesForId = names[id] || (names[id] = Object.create(null));\n    namesForId[name] = true;\n  }\n};\n\n/* resets an ID entirely by overwriting it in the dictionary */\nvar resetIdNames = function resetIdNames(names, id) {\n  // eslint-disable-next-line no-param-reassign\n  names[id] = Object.create(null);\n};\n\n/* factory for a names dictionary checking the existance of an ID:name pairing */\nvar hasNameForId = function hasNameForId(names) {\n  return function (id, name) {\n    return names[id] !== undefined && names[id][name];\n  };\n};\n\n/* stringifies names for the html/element output */\nvar stringifyNames = function stringifyNames(names) {\n  var str = '';\n  // eslint-disable-next-line guard-for-in\n  for (var id in names) {\n    str += Object.keys(names[id]).join(' ') + ' ';\n  }\n  return str.trim();\n};\n\n/* clones the nested names dictionary */\nvar cloneNames = function cloneNames(names) {\n  var clone = Object.create(null);\n  // eslint-disable-next-line guard-for-in\n  for (var id in names) {\n    clone[id] = _extends({}, names[id]);\n  }\n  return clone;\n};\n\n// \n\n/* These are helpers that deal with the insertRule (aka speedy) API\n * They are used in the StyleTags and specifically the speedy tag\n */\n\n/* retrieve a sheet for a given style tag */\nvar sheetForTag = function sheetForTag(tag) {\n  // $FlowFixMe\n  if (tag.sheet) return tag.sheet;\n\n  /* Firefox quirk requires us to step through all stylesheets to find one owned by the given tag */\n  var size = tag.ownerDocument.styleSheets.length;\n  for (var i = 0; i < size; i += 1) {\n    var sheet = tag.ownerDocument.styleSheets[i];\n    // $FlowFixMe\n    if (sheet.ownerNode === tag) return sheet;\n  }\n\n  /* we should always be able to find a tag */\n  throw new StyledComponentsError(10);\n};\n\n/* insert a rule safely and return whether it was actually injected */\nvar safeInsertRule = function safeInsertRule(sheet, cssRule, index) {\n  /* abort early if cssRule string is falsy */\n  if (!cssRule) return false;\n\n  var maxIndex = sheet.cssRules.length;\n\n  try {\n    /* use insertRule and cap passed index with maxIndex (no of cssRules) */\n    sheet.insertRule(cssRule, index <= maxIndex ? index : maxIndex);\n  } catch (err) {\n    /* any error indicates an invalid rule */\n    return false;\n  }\n\n  return true;\n};\n\n/* deletes `size` rules starting from `removalIndex` */\nvar deleteRules = function deleteRules(sheet, removalIndex, size) {\n  var lowerBound = removalIndex - size;\n  for (var i = removalIndex; i > lowerBound; i -= 1) {\n    sheet.deleteRule(i);\n  }\n};\n\n// \n\n/* this marker separates component styles and is important for rehydration */\nvar makeTextMarker = function makeTextMarker(id) {\n  return '\\n/* sc-component-id: ' + id + ' */\\n';\n};\n\n/* add up all numbers in array up until and including the index */\nvar addUpUntilIndex = function addUpUntilIndex(sizes, index) {\n  var totalUpToIndex = 0;\n  for (var i = 0; i <= index; i += 1) {\n    totalUpToIndex += sizes[i];\n  }\n\n  return totalUpToIndex;\n};\n\n/* create a new style tag after lastEl */\nvar makeStyleTag = function makeStyleTag(target, tagEl, insertBefore) {\n  var targetDocument = document;\n  if (target) targetDocument = target.ownerDocument;else if (tagEl) targetDocument = tagEl.ownerDocument;\n\n  var el = targetDocument.createElement('style');\n  el.setAttribute(SC_ATTR, '');\n  el.setAttribute(SC_VERSION_ATTR, \"4.4.1\");\n\n  var nonce = getNonce();\n  if (nonce) {\n    el.setAttribute('nonce', nonce);\n  }\n\n  /* Work around insertRule quirk in EdgeHTML */\n  el.appendChild(targetDocument.createTextNode(''));\n\n  if (target && !tagEl) {\n    /* Append to target when no previous element was passed */\n    target.appendChild(el);\n  } else {\n    if (!tagEl || !target || !tagEl.parentNode) {\n      throw new StyledComponentsError(6);\n    }\n\n    /* Insert new style tag after the previous one */\n    tagEl.parentNode.insertBefore(el, insertBefore ? tagEl : tagEl.nextSibling);\n  }\n\n  return el;\n};\n\n/* takes a css factory function and outputs an html styled tag factory */\nvar wrapAsHtmlTag = function wrapAsHtmlTag(css, names) {\n  return function (additionalAttrs) {\n    var nonce = getNonce();\n    var attrs = [nonce && 'nonce=\"' + nonce + '\"', SC_ATTR + '=\"' + stringifyNames(names) + '\"', SC_VERSION_ATTR + '=\"' + \"4.4.1\" + '\"', additionalAttrs];\n\n    var htmlAttr = attrs.filter(Boolean).join(' ');\n    return '<style ' + htmlAttr + '>' + css() + '</style>';\n  };\n};\n\n/* takes a css factory function and outputs an element factory */\nvar wrapAsElement = function wrapAsElement(css, names) {\n  return function () {\n    var _props;\n\n    var props = (_props = {}, _props[SC_ATTR] = stringifyNames(names), _props[SC_VERSION_ATTR] = \"4.4.1\", _props);\n\n    var nonce = getNonce();\n    if (nonce) {\n      // $FlowFixMe\n      props.nonce = nonce;\n    }\n\n    // eslint-disable-next-line react/no-danger\n    return React.createElement('style', _extends({}, props, { dangerouslySetInnerHTML: { __html: css() } }));\n  };\n};\n\nvar getIdsFromMarkersFactory = function getIdsFromMarkersFactory(markers) {\n  return function () {\n    return Object.keys(markers);\n  };\n};\n\n/* speedy tags utilise insertRule */\nvar makeSpeedyTag = function makeSpeedyTag(el, getImportRuleTag) {\n  var names = Object.create(null);\n  var markers = Object.create(null);\n  var sizes = [];\n\n  var extractImport = getImportRuleTag !== undefined;\n  /* indicates whether getImportRuleTag was called */\n  var usedImportRuleTag = false;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    markers[id] = sizes.length;\n    sizes.push(0);\n    resetIdNames(names, id);\n\n    return markers[id];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    var sheet = sheetForTag(el);\n    var insertIndex = addUpUntilIndex(sizes, marker);\n\n    var injectedRules = 0;\n    var importRules = [];\n    var cssRulesSize = cssRules.length;\n\n    for (var i = 0; i < cssRulesSize; i += 1) {\n      var cssRule = cssRules[i];\n      var mayHaveImport = extractImport; /* @import rules are reordered to appear first */\n      if (mayHaveImport && cssRule.indexOf('@import') !== -1) {\n        importRules.push(cssRule);\n      } else if (safeInsertRule(sheet, cssRule, insertIndex + injectedRules)) {\n        mayHaveImport = false;\n        injectedRules += 1;\n      }\n    }\n\n    if (extractImport && importRules.length > 0) {\n      usedImportRuleTag = true;\n      // $FlowFixMe\n      getImportRuleTag().insertRules(id + '-import', importRules);\n    }\n\n    sizes[marker] += injectedRules; /* add up no of injected rules */\n    addNameForId(names, id, name);\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n    // $FlowFixMe\n    if (el.isConnected === false) return;\n\n    var size = sizes[marker];\n    var sheet = sheetForTag(el);\n    var removalIndex = addUpUntilIndex(sizes, marker) - 1;\n    deleteRules(sheet, removalIndex, size);\n    sizes[marker] = 0;\n    resetIdNames(names, id);\n\n    if (extractImport && usedImportRuleTag) {\n      // $FlowFixMe\n      getImportRuleTag().removeRules(id + '-import');\n    }\n  };\n\n  var css = function css() {\n    var _sheetForTag = sheetForTag(el),\n        cssRules = _sheetForTag.cssRules;\n\n    var str = '';\n\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      str += makeTextMarker(id);\n      var marker = markers[id];\n      var end = addUpUntilIndex(sizes, marker);\n      var size = sizes[marker];\n      for (var i = end - size; i < end; i += 1) {\n        var rule = cssRules[i];\n        if (rule !== undefined) {\n          str += rule.cssText;\n        }\n      }\n    }\n\n    return str;\n  };\n\n  return {\n    clone: function clone() {\n      throw new StyledComponentsError(5);\n    },\n\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: el,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n};\n\nvar makeTextNode = function makeTextNode(targetDocument, id) {\n  return targetDocument.createTextNode(makeTextMarker(id));\n};\n\nvar makeBrowserTag = function makeBrowserTag(el, getImportRuleTag) {\n  var names = Object.create(null);\n  var markers = Object.create(null);\n\n  var extractImport = getImportRuleTag !== undefined;\n\n  /* indicates whether getImportRuleTag was called */\n  var usedImportRuleTag = false;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    markers[id] = makeTextNode(el.ownerDocument, id);\n    el.appendChild(markers[id]);\n    names[id] = Object.create(null);\n\n    return markers[id];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    var importRules = [];\n    var cssRulesSize = cssRules.length;\n\n    for (var i = 0; i < cssRulesSize; i += 1) {\n      var rule = cssRules[i];\n      var mayHaveImport = extractImport;\n      if (mayHaveImport && rule.indexOf('@import') !== -1) {\n        importRules.push(rule);\n      } else {\n        mayHaveImport = false;\n        var separator = i === cssRulesSize - 1 ? '' : ' ';\n        marker.appendData('' + rule + separator);\n      }\n    }\n\n    addNameForId(names, id, name);\n\n    if (extractImport && importRules.length > 0) {\n      usedImportRuleTag = true;\n      // $FlowFixMe\n      getImportRuleTag().insertRules(id + '-import', importRules);\n    }\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n\n    /* create new empty text node and replace the current one */\n    var newMarker = makeTextNode(el.ownerDocument, id);\n    el.replaceChild(newMarker, marker);\n    markers[id] = newMarker;\n    resetIdNames(names, id);\n\n    if (extractImport && usedImportRuleTag) {\n      // $FlowFixMe\n      getImportRuleTag().removeRules(id + '-import');\n    }\n  };\n\n  var css = function css() {\n    var str = '';\n\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      str += markers[id].data;\n    }\n\n    return str;\n  };\n\n  return {\n    clone: function clone() {\n      throw new StyledComponentsError(5);\n    },\n\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: el,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n};\n\nvar makeServerTag = function makeServerTag(namesArg, markersArg) {\n  var names = namesArg === undefined ? Object.create(null) : namesArg;\n  var markers = markersArg === undefined ? Object.create(null) : markersArg;\n\n  var insertMarker = function insertMarker(id) {\n    var prev = markers[id];\n    if (prev !== undefined) {\n      return prev;\n    }\n\n    return markers[id] = [''];\n  };\n\n  var insertRules = function insertRules(id, cssRules, name) {\n    var marker = insertMarker(id);\n    marker[0] += cssRules.join(' ');\n    addNameForId(names, id, name);\n  };\n\n  var removeRules = function removeRules(id) {\n    var marker = markers[id];\n    if (marker === undefined) return;\n    marker[0] = '';\n    resetIdNames(names, id);\n  };\n\n  var css = function css() {\n    var str = '';\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      var cssForId = markers[id][0];\n      if (cssForId) {\n        str += makeTextMarker(id) + cssForId;\n      }\n    }\n    return str;\n  };\n\n  var clone = function clone() {\n    var namesClone = cloneNames(names);\n    var markersClone = Object.create(null);\n\n    // eslint-disable-next-line guard-for-in\n    for (var id in markers) {\n      markersClone[id] = [markers[id][0]];\n    }\n\n    return makeServerTag(namesClone, markersClone);\n  };\n\n  var tag = {\n    clone: clone,\n    css: css,\n    getIds: getIdsFromMarkersFactory(markers),\n    hasNameForId: hasNameForId(names),\n    insertMarker: insertMarker,\n    insertRules: insertRules,\n    removeRules: removeRules,\n    sealed: false,\n    styleTag: null,\n    toElement: wrapAsElement(css, names),\n    toHTML: wrapAsHtmlTag(css, names)\n  };\n\n  return tag;\n};\n\nvar makeTag = function makeTag(target, tagEl, forceServer, insertBefore, getImportRuleTag) {\n  if (IS_BROWSER && !forceServer) {\n    var el = makeStyleTag(target, tagEl, insertBefore);\n\n    if (DISABLE_SPEEDY) {\n      return makeBrowserTag(el, getImportRuleTag);\n    } else {\n      return makeSpeedyTag(el, getImportRuleTag);\n    }\n  }\n\n  return makeServerTag();\n};\n\nvar rehydrate = function rehydrate(tag, els, extracted) {\n  /* add all extracted components to the new tag */\n  for (var i = 0, len = extracted.length; i < len; i += 1) {\n    var _extracted$i = extracted[i],\n        componentId = _extracted$i.componentId,\n        cssFromDOM = _extracted$i.cssFromDOM;\n\n    var cssRules = splitByRules(cssFromDOM);\n    tag.insertRules(componentId, cssRules);\n  }\n\n  /* remove old HTMLStyleElements, since they have been rehydrated */\n  for (var _i = 0, _len = els.length; _i < _len; _i += 1) {\n    var el = els[_i];\n    if (el.parentNode) {\n      el.parentNode.removeChild(el);\n    }\n  }\n};\n\n// \n\nvar SPLIT_REGEX = /\\s+/;\n\n/* determine the maximum number of components before tags are sharded */\nvar MAX_SIZE = void 0;\nif (IS_BROWSER) {\n  /* in speedy mode we can keep a lot more rules in a sheet before a slowdown can be expected */\n  MAX_SIZE = DISABLE_SPEEDY ? 40 : 1000;\n} else {\n  /* for servers we do not need to shard at all */\n  MAX_SIZE = -1;\n}\n\nvar sheetRunningId = 0;\nvar master = void 0;\n\nvar StyleSheet = function () {\n\n  /* a map from ids to tags */\n\n  /* deferred rules for a given id */\n\n  /* this is used for not reinjecting rules via hasNameForId() */\n\n  /* when rules for an id are removed using remove() we have to ignore rehydratedNames for it */\n\n  /* a list of tags belonging to this StyleSheet */\n\n  /* a tag for import rules */\n\n  /* current capacity until a new tag must be created */\n\n  /* children (aka clones) of this StyleSheet inheriting all and future injections */\n\n  function StyleSheet() {\n    var _this = this;\n\n    var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : IS_BROWSER ? document.head : null;\n    var forceServer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    classCallCheck(this, StyleSheet);\n\n    this.getImportRuleTag = function () {\n      var importRuleTag = _this.importRuleTag;\n\n      if (importRuleTag !== undefined) {\n        return importRuleTag;\n      }\n\n      var firstTag = _this.tags[0];\n      var insertBefore = true;\n\n      return _this.importRuleTag = makeTag(_this.target, firstTag ? firstTag.styleTag : null, _this.forceServer, insertBefore);\n    };\n\n    sheetRunningId += 1;\n    this.id = sheetRunningId;\n    this.forceServer = forceServer;\n    this.target = forceServer ? null : target;\n    this.tagMap = {};\n    this.deferred = {};\n    this.rehydratedNames = {};\n    this.ignoreRehydratedNames = {};\n    this.tags = [];\n    this.capacity = 1;\n    this.clones = [];\n  }\n\n  /* rehydrate all SSR'd style tags */\n\n\n  StyleSheet.prototype.rehydrate = function rehydrate$$1() {\n    if (!IS_BROWSER || this.forceServer) return this;\n\n    var els = [];\n    var extracted = [];\n    var isStreamed = false;\n\n    /* retrieve all of our SSR style elements from the DOM */\n    var nodes = document.querySelectorAll('style[' + SC_ATTR + '][' + SC_VERSION_ATTR + '=\"' + \"4.4.1\" + '\"]');\n\n    var nodesSize = nodes.length;\n\n    /* abort rehydration if no previous style tags were found */\n    if (!nodesSize) return this;\n\n    for (var i = 0; i < nodesSize; i += 1) {\n      var el = nodes[i];\n\n      /* check if style tag is a streamed tag */\n      if (!isStreamed) isStreamed = !!el.getAttribute(SC_STREAM_ATTR);\n\n      /* retrieve all component names */\n      var elNames = (el.getAttribute(SC_ATTR) || '').trim().split(SPLIT_REGEX);\n      var elNamesSize = elNames.length;\n      for (var j = 0, name; j < elNamesSize; j += 1) {\n        name = elNames[j];\n        /* add rehydrated name to sheet to avoid re-adding styles */\n        this.rehydratedNames[name] = true;\n      }\n\n      /* extract all components and their CSS */\n      extracted.push.apply(extracted, extractComps(el.textContent));\n\n      /* store original HTMLStyleElement */\n      els.push(el);\n    }\n\n    /* abort rehydration if nothing was extracted */\n    var extractedSize = extracted.length;\n    if (!extractedSize) return this;\n\n    /* create a tag to be used for rehydration */\n    var tag = this.makeTag(null);\n\n    rehydrate(tag, els, extracted);\n\n    /* reset capacity and adjust MAX_SIZE by the initial size of the rehydration */\n    this.capacity = Math.max(1, MAX_SIZE - extractedSize);\n    this.tags.push(tag);\n\n    /* retrieve all component ids */\n    for (var _j = 0; _j < extractedSize; _j += 1) {\n      this.tagMap[extracted[_j].componentId] = tag;\n    }\n\n    return this;\n  };\n\n  /* retrieve a \"master\" instance of StyleSheet which is typically used when no other is available\n   * The master StyleSheet is targeted by createGlobalStyle, keyframes, and components outside of any\n    * StyleSheetManager's context */\n\n\n  /* reset the internal \"master\" instance */\n  StyleSheet.reset = function reset() {\n    var forceServer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    master = new StyleSheet(undefined, forceServer).rehydrate();\n  };\n\n  /* adds \"children\" to the StyleSheet that inherit all of the parents' rules\n   * while their own rules do not affect the parent */\n\n\n  StyleSheet.prototype.clone = function clone() {\n    var sheet = new StyleSheet(this.target, this.forceServer);\n\n    /* add to clone array */\n    this.clones.push(sheet);\n\n    /* clone all tags */\n    sheet.tags = this.tags.map(function (tag) {\n      var ids = tag.getIds();\n      var newTag = tag.clone();\n\n      /* reconstruct tagMap */\n      for (var i = 0; i < ids.length; i += 1) {\n        sheet.tagMap[ids[i]] = newTag;\n      }\n\n      return newTag;\n    });\n\n    /* clone other maps */\n    sheet.rehydratedNames = _extends({}, this.rehydratedNames);\n    sheet.deferred = _extends({}, this.deferred);\n\n    return sheet;\n  };\n\n  /* force StyleSheet to create a new tag on the next injection */\n\n\n  StyleSheet.prototype.sealAllTags = function sealAllTags() {\n    this.capacity = 1;\n\n    this.tags.forEach(function (tag) {\n      // eslint-disable-next-line no-param-reassign\n      tag.sealed = true;\n    });\n  };\n\n  StyleSheet.prototype.makeTag = function makeTag$$1(tag) {\n    var lastEl = tag ? tag.styleTag : null;\n    var insertBefore = false;\n\n    return makeTag(this.target, lastEl, this.forceServer, insertBefore, this.getImportRuleTag);\n  };\n\n  /* get a tag for a given componentId, assign the componentId to one, or shard */\n  StyleSheet.prototype.getTagForId = function getTagForId(id) {\n    /* simply return a tag, when the componentId was already assigned one */\n    var prev = this.tagMap[id];\n    if (prev !== undefined && !prev.sealed) {\n      return prev;\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    /* shard (create a new tag) if the tag is exhausted (See MAX_SIZE) */\n    this.capacity -= 1;\n\n    if (this.capacity === 0) {\n      this.capacity = MAX_SIZE;\n      tag = this.makeTag(tag);\n      this.tags.push(tag);\n    }\n\n    return this.tagMap[id] = tag;\n  };\n\n  /* mainly for createGlobalStyle to check for its id */\n\n\n  StyleSheet.prototype.hasId = function hasId(id) {\n    return this.tagMap[id] !== undefined;\n  };\n\n  /* caching layer checking id+name to already have a corresponding tag and injected rules */\n\n\n  StyleSheet.prototype.hasNameForId = function hasNameForId(id, name) {\n    /* exception for rehydrated names which are checked separately */\n    if (this.ignoreRehydratedNames[id] === undefined && this.rehydratedNames[name]) {\n      return true;\n    }\n\n    var tag = this.tagMap[id];\n    return tag !== undefined && tag.hasNameForId(id, name);\n  };\n\n  /* registers a componentId and registers it on its tag */\n\n\n  StyleSheet.prototype.deferredInject = function deferredInject(id, cssRules) {\n    /* don't inject when the id is already registered */\n    if (this.tagMap[id] !== undefined) return;\n\n    var clones = this.clones;\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].deferredInject(id, cssRules);\n    }\n\n    this.getTagForId(id).insertMarker(id);\n    this.deferred[id] = cssRules;\n  };\n\n  /* injects rules for a given id with a name that will need to be cached */\n\n\n  StyleSheet.prototype.inject = function inject(id, cssRules, name) {\n    var clones = this.clones;\n\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].inject(id, cssRules, name);\n    }\n\n    var tag = this.getTagForId(id);\n\n    /* add deferred rules for component */\n    if (this.deferred[id] !== undefined) {\n      // Combine passed cssRules with previously deferred CSS rules\n      // NOTE: We cannot mutate the deferred array itself as all clones\n      // do the same (see clones[i].inject)\n      var rules = this.deferred[id].concat(cssRules);\n      tag.insertRules(id, rules, name);\n\n      this.deferred[id] = undefined;\n    } else {\n      tag.insertRules(id, cssRules, name);\n    }\n  };\n\n  /* removes all rules for a given id, which doesn't remove its marker but resets it */\n\n\n  StyleSheet.prototype.remove = function remove(id) {\n    var tag = this.tagMap[id];\n    if (tag === undefined) return;\n\n    var clones = this.clones;\n\n    for (var i = 0; i < clones.length; i += 1) {\n      clones[i].remove(id);\n    }\n\n    /* remove all rules from the tag */\n    tag.removeRules(id);\n\n    /* ignore possible rehydrated names */\n    this.ignoreRehydratedNames[id] = true;\n\n    /* delete possible deferred rules */\n    this.deferred[id] = undefined;\n  };\n\n  StyleSheet.prototype.toHTML = function toHTML() {\n    return this.tags.map(function (tag) {\n      return tag.toHTML();\n    }).join('');\n  };\n\n  StyleSheet.prototype.toReactElements = function toReactElements() {\n    var id = this.id;\n\n\n    return this.tags.map(function (tag, i) {\n      var key = 'sc-' + id + '-' + i;\n      return cloneElement(tag.toElement(), { key: key });\n    });\n  };\n\n  createClass(StyleSheet, null, [{\n    key: 'master',\n    get: function get$$1() {\n      return master || (master = new StyleSheet().rehydrate());\n    }\n\n    /* NOTE: This is just for backwards-compatibility with jest-styled-components */\n\n  }, {\n    key: 'instance',\n    get: function get$$1() {\n      return StyleSheet.master;\n    }\n  }]);\n  return StyleSheet;\n}();\n\n// \n\nvar Keyframes = function () {\n  function Keyframes(name, rules) {\n    var _this = this;\n\n    classCallCheck(this, Keyframes);\n\n    this.inject = function (styleSheet) {\n      if (!styleSheet.hasNameForId(_this.id, _this.name)) {\n        styleSheet.inject(_this.id, _this.rules, _this.name);\n      }\n    };\n\n    this.toString = function () {\n      throw new StyledComponentsError(12, String(_this.name));\n    };\n\n    this.name = name;\n    this.rules = rules;\n\n    this.id = 'sc-keyframes-' + name;\n  }\n\n  Keyframes.prototype.getName = function getName() {\n    return this.name;\n  };\n\n  return Keyframes;\n}();\n\n// \n\n/**\n * inlined version of\n * https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/hyphenateStyleName.js\n */\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern = /^ms-/;\n\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n *   > hyphenateStyleName('backgroundColor')\n *   < \"background-color\"\n *   > hyphenateStyleName('MozTransition')\n *   < \"-moz-transition\"\n *   > hyphenateStyleName('msTransition')\n *   < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n *\n * @param {string} string\n * @return {string}\n */\nfunction hyphenateStyleName(string) {\n  return string.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n}\n\n// \n\n// Taken from https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/dangerousStyleValue.js\nfunction addUnitIfNeeded(name, value) {\n  // https://github.com/amilajack/eslint-plugin-flowtype-errors/issues/133\n  // $FlowFixMe\n  if (value == null || typeof value === 'boolean' || value === '') {\n    return '';\n  }\n\n  if (typeof value === 'number' && value !== 0 && !(name in unitless)) {\n    return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n  }\n\n  return String(value).trim();\n}\n\n// \n\n/**\n * It's falsish not falsy because 0 is allowed.\n */\nvar isFalsish = function isFalsish(chunk) {\n  return chunk === undefined || chunk === null || chunk === false || chunk === '';\n};\n\nvar objToCssArray = function objToCssArray(obj, prevKey) {\n  var rules = [];\n  var keys = Object.keys(obj);\n\n  keys.forEach(function (key) {\n    if (!isFalsish(obj[key])) {\n      if (isPlainObject(obj[key])) {\n        rules.push.apply(rules, objToCssArray(obj[key], key));\n\n        return rules;\n      } else if (isFunction(obj[key])) {\n        rules.push(hyphenateStyleName(key) + ':', obj[key], ';');\n\n        return rules;\n      }\n      rules.push(hyphenateStyleName(key) + ': ' + addUnitIfNeeded(key, obj[key]) + ';');\n    }\n    return rules;\n  });\n\n  return prevKey ? [prevKey + ' {'].concat(rules, ['}']) : rules;\n};\n\nfunction flatten(chunk, executionContext, styleSheet) {\n  if (Array.isArray(chunk)) {\n    var ruleSet = [];\n\n    for (var i = 0, len = chunk.length, result; i < len; i += 1) {\n      result = flatten(chunk[i], executionContext, styleSheet);\n\n      if (result === null) continue;else if (Array.isArray(result)) ruleSet.push.apply(ruleSet, result);else ruleSet.push(result);\n    }\n\n    return ruleSet;\n  }\n\n  if (isFalsish(chunk)) {\n    return null;\n  }\n\n  /* Handle other components */\n  if (isStyledComponent(chunk)) {\n    return '.' + chunk.styledComponentId;\n  }\n\n  /* Either execute or defer the function */\n  if (isFunction(chunk)) {\n    if (isStatelessFunction(chunk) && executionContext) {\n      var _result = chunk(executionContext);\n\n      if (process.env.NODE_ENV !== 'production' && isElement(_result)) {\n        // eslint-disable-next-line no-console\n        console.warn(getComponentName(chunk) + ' is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.');\n      }\n\n      return flatten(_result, executionContext, styleSheet);\n    } else return chunk;\n  }\n\n  if (chunk instanceof Keyframes) {\n    if (styleSheet) {\n      chunk.inject(styleSheet);\n      return chunk.getName();\n    } else return chunk;\n  }\n\n  /* Handle objects */\n  return isPlainObject(chunk) ? objToCssArray(chunk) : chunk.toString();\n}\n\n// \n\nfunction css(styles) {\n  for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    interpolations[_key - 1] = arguments[_key];\n  }\n\n  if (isFunction(styles) || isPlainObject(styles)) {\n    // $FlowFixMe\n    return flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations)));\n  }\n\n  // $FlowFixMe\n  return flatten(interleave(styles, interpolations));\n}\n\n// \n\nfunction constructWithOptions(componentConstructor, tag) {\n  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_OBJECT;\n\n  if (!isValidElementType(tag)) {\n    throw new StyledComponentsError(1, String(tag));\n  }\n\n  /* This is callable directly as a template function */\n  // $FlowFixMe: Not typed to avoid destructuring arguments\n  var templateFunction = function templateFunction() {\n    return componentConstructor(tag, options, css.apply(undefined, arguments));\n  };\n\n  /* If config methods are called, wrap up a new template function and merge options */\n  templateFunction.withConfig = function (config) {\n    return constructWithOptions(componentConstructor, tag, _extends({}, options, config));\n  };\n\n  /* Modify/inject new props at runtime */\n  templateFunction.attrs = function (attrs) {\n    return constructWithOptions(componentConstructor, tag, _extends({}, options, {\n      attrs: Array.prototype.concat(options.attrs, attrs).filter(Boolean)\n    }));\n  };\n\n  return templateFunction;\n}\n\n// \n// Source: https://github.com/garycourt/murmurhash-js/blob/master/murmurhash2_gc.js\nfunction murmurhash(c) {\n  for (var e = c.length | 0, a = e | 0, d = 0, b; e >= 4;) {\n    b = c.charCodeAt(d) & 255 | (c.charCodeAt(++d) & 255) << 8 | (c.charCodeAt(++d) & 255) << 16 | (c.charCodeAt(++d) & 255) << 24, b = 1540483477 * (b & 65535) + ((1540483477 * (b >>> 16) & 65535) << 16), b ^= b >>> 24, b = 1540483477 * (b & 65535) + ((1540483477 * (b >>> 16) & 65535) << 16), a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16) ^ b, e -= 4, ++d;\n  }\n  switch (e) {\n    case 3:\n      a ^= (c.charCodeAt(d + 2) & 255) << 16;\n    case 2:\n      a ^= (c.charCodeAt(d + 1) & 255) << 8;\n    case 1:\n      a ^= c.charCodeAt(d) & 255, a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16);\n  }\n  a ^= a >>> 13;\n  a = 1540483477 * (a & 65535) + ((1540483477 * (a >>> 16) & 65535) << 16);\n  return (a ^ a >>> 15) >>> 0;\n}\n\n// \n/* eslint-disable no-bitwise */\n\n/* This is the \"capacity\" of our alphabet i.e. 2x26 for all letters plus their capitalised\n * counterparts */\nvar charsLength = 52;\n\n/* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */\nvar getAlphabeticChar = function getAlphabeticChar(code) {\n  return String.fromCharCode(code + (code > 25 ? 39 : 97));\n};\n\n/* input a number, usually a hash and convert it to base-52 */\nfunction generateAlphabeticName(code) {\n  var name = '';\n  var x = void 0;\n\n  /* get a char and divide by alphabet-length */\n  for (x = code; x > charsLength; x = Math.floor(x / charsLength)) {\n    name = getAlphabeticChar(x % charsLength) + name;\n  }\n\n  return getAlphabeticChar(x % charsLength) + name;\n}\n\n// \n\nfunction hasFunctionObjectKey(obj) {\n  // eslint-disable-next-line guard-for-in, no-restricted-syntax\n  for (var key in obj) {\n    if (isFunction(obj[key])) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction isStaticRules(rules, attrs) {\n  for (var i = 0; i < rules.length; i += 1) {\n    var rule = rules[i];\n\n    // recursive case\n    if (Array.isArray(rule) && !isStaticRules(rule, attrs)) {\n      return false;\n    } else if (isFunction(rule) && !isStyledComponent(rule)) {\n      // functions are allowed to be static if they're just being\n      // used to get the classname of a nested styled component\n      return false;\n    }\n  }\n\n  if (attrs.some(function (x) {\n    return isFunction(x) || hasFunctionObjectKey(x);\n  })) return false;\n\n  return true;\n}\n\n// \n\n/* combines hashStr (murmurhash) and nameGenerator for convenience */\nvar hasher = function hasher(str) {\n  return generateAlphabeticName(murmurhash(str));\n};\n\n/*\n ComponentStyle is all the CSS-specific stuff, not\n the React-specific stuff.\n */\n\nvar ComponentStyle = function () {\n  function ComponentStyle(rules, attrs, componentId) {\n    classCallCheck(this, ComponentStyle);\n\n    this.rules = rules;\n    this.isStatic = process.env.NODE_ENV === 'production' && isStaticRules(rules, attrs);\n    this.componentId = componentId;\n\n    if (!StyleSheet.master.hasId(componentId)) {\n      StyleSheet.master.deferredInject(componentId, []);\n    }\n  }\n\n  /*\n   * Flattens a rule set into valid CSS\n   * Hashes it, wraps the whole chunk in a .hash1234 {}\n   * Returns the hash to be injected on render()\n   * */\n\n\n  ComponentStyle.prototype.generateAndInjectStyles = function generateAndInjectStyles(executionContext, styleSheet) {\n    var isStatic = this.isStatic,\n        componentId = this.componentId,\n        lastClassName = this.lastClassName;\n\n    if (IS_BROWSER && isStatic && typeof lastClassName === 'string' && styleSheet.hasNameForId(componentId, lastClassName)) {\n      return lastClassName;\n    }\n\n    var flatCSS = flatten(this.rules, executionContext, styleSheet);\n    var name = hasher(this.componentId + flatCSS.join(''));\n    if (!styleSheet.hasNameForId(componentId, name)) {\n      styleSheet.inject(this.componentId, stringifyRules(flatCSS, '.' + name, undefined, componentId), name);\n    }\n\n    this.lastClassName = name;\n    return name;\n  };\n\n  ComponentStyle.generateName = function generateName(str) {\n    return hasher(str);\n  };\n\n  return ComponentStyle;\n}();\n\n// \n\nvar LIMIT = 200;\n\nvar createWarnTooManyClasses = (function (displayName) {\n  var generatedClasses = {};\n  var warningSeen = false;\n\n  return function (className) {\n    if (!warningSeen) {\n      generatedClasses[className] = true;\n      if (Object.keys(generatedClasses).length >= LIMIT) {\n        // Unable to find latestRule in test environment.\n        /* eslint-disable no-console, prefer-template */\n        console.warn('Over ' + LIMIT + ' classes were generated for component ' + displayName + '. \\n' + 'Consider using the attrs method, together with a style object for frequently changed styles.\\n' + 'Example:\\n' + '  const Component = styled.div.attrs(props => ({\\n' + '    style: {\\n' + '      background: props.background,\\n' + '    },\\n' + '  }))`width: 100%;`\\n\\n' + '  <Component />');\n        warningSeen = true;\n        generatedClasses = {};\n      }\n    }\n  };\n});\n\n// \n\nvar determineTheme = (function (props, fallbackTheme) {\n  var defaultProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EMPTY_OBJECT;\n\n  // Props should take precedence over ThemeProvider, which should take precedence over\n  // defaultProps, but React automatically puts defaultProps on props.\n\n  /* eslint-disable react/prop-types, flowtype-errors/show-errors */\n  var isDefaultTheme = defaultProps ? props.theme === defaultProps.theme : false;\n  var theme = props.theme && !isDefaultTheme ? props.theme : fallbackTheme || defaultProps.theme;\n  /* eslint-enable */\n\n  return theme;\n});\n\n// \nvar escapeRegex = /[[\\].#*$><+~=|^:(),\"'`-]+/g;\nvar dashesAtEnds = /(^-|-$)/g;\n\n/**\n * TODO: Explore using CSS.escape when it becomes more available\n * in evergreen browsers.\n */\nfunction escape(str) {\n  return str\n  // Replace all possible CSS selectors\n  .replace(escapeRegex, '-')\n\n  // Remove extraneous hyphens at the start and end\n  .replace(dashesAtEnds, '');\n}\n\n// \n\nfunction isTag(target) {\n  return typeof target === 'string' && (process.env.NODE_ENV !== 'production' ? target.charAt(0) === target.charAt(0).toLowerCase() : true);\n}\n\n// \n\nfunction generateDisplayName(target) {\n  // $FlowFixMe\n  return isTag(target) ? 'styled.' + target : 'Styled(' + getComponentName(target) + ')';\n}\n\nvar _TYPE_STATICS;\n\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDerivedStateFromProps: true,\n  propTypes: true,\n  type: true\n};\n\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\n\nvar TYPE_STATICS = (_TYPE_STATICS = {}, _TYPE_STATICS[ForwardRef] = {\n  $$typeof: true,\n  render: true\n}, _TYPE_STATICS);\n\nvar defineProperty$1 = Object.defineProperty,\n    getOwnPropertyNames = Object.getOwnPropertyNames,\n    _Object$getOwnPropert = Object.getOwnPropertySymbols,\n    getOwnPropertySymbols = _Object$getOwnPropert === undefined ? function () {\n  return [];\n} : _Object$getOwnPropert,\n    getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor,\n    getPrototypeOf = Object.getPrototypeOf,\n    objectPrototype = Object.prototype;\nvar arrayPrototype = Array.prototype;\n\n\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n\n    var inheritedComponent = getPrototypeOf(sourceComponent);\n\n    if (inheritedComponent && inheritedComponent !== objectPrototype) {\n      hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n    }\n\n    var keys = arrayPrototype.concat(getOwnPropertyNames(sourceComponent),\n    // $FlowFixMe\n    getOwnPropertySymbols(sourceComponent));\n\n    var targetStatics = TYPE_STATICS[targetComponent.$$typeof] || REACT_STATICS;\n\n    var sourceStatics = TYPE_STATICS[sourceComponent.$$typeof] || REACT_STATICS;\n\n    var i = keys.length;\n    var descriptor = void 0;\n    var key = void 0;\n\n    // eslint-disable-next-line no-plusplus\n    while (i--) {\n      key = keys[i];\n\n      if (\n      // $FlowFixMe\n      !KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) &&\n      // $FlowFixMe\n      !(targetStatics && targetStatics[key])) {\n        descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        if (descriptor) {\n          try {\n            // Avoid failures from read-only properties\n            defineProperty$1(targetComponent, key, descriptor);\n          } catch (e) {\n            /* fail silently */\n          }\n        }\n      }\n    }\n\n    return targetComponent;\n  }\n\n  return targetComponent;\n}\n\n// \nfunction isDerivedReactComponent(fn) {\n  return !!(fn && fn.prototype && fn.prototype.isReactComponent);\n}\n\n// \n// Helper to call a given function, only once\nvar once = (function (cb) {\n  var called = false;\n\n  return function () {\n    if (!called) {\n      called = true;\n      cb.apply(undefined, arguments);\n    }\n  };\n});\n\n// \n\nvar ThemeContext = createContext();\n\nvar ThemeConsumer = ThemeContext.Consumer;\n\n/**\n * Provide a theme to an entire react component tree via context\n */\n\nvar ThemeProvider = function (_Component) {\n  inherits(ThemeProvider, _Component);\n\n  function ThemeProvider(props) {\n    classCallCheck(this, ThemeProvider);\n\n    var _this = possibleConstructorReturn(this, _Component.call(this, props));\n\n    _this.getContext = memoize(_this.getContext.bind(_this));\n    _this.renderInner = _this.renderInner.bind(_this);\n    return _this;\n  }\n\n  ThemeProvider.prototype.render = function render() {\n    if (!this.props.children) return null;\n\n    return React.createElement(\n      ThemeContext.Consumer,\n      null,\n      this.renderInner\n    );\n  };\n\n  ThemeProvider.prototype.renderInner = function renderInner(outerTheme) {\n    var context = this.getContext(this.props.theme, outerTheme);\n\n    return React.createElement(\n      ThemeContext.Provider,\n      { value: context },\n      this.props.children\n    );\n  };\n\n  /**\n   * Get the theme from the props, supporting both (outerTheme) => {}\n   * as well as object notation\n   */\n\n\n  ThemeProvider.prototype.getTheme = function getTheme(theme, outerTheme) {\n    if (isFunction(theme)) {\n      var mergedTheme = theme(outerTheme);\n\n      if (process.env.NODE_ENV !== 'production' && (mergedTheme === null || Array.isArray(mergedTheme) || (typeof mergedTheme === 'undefined' ? 'undefined' : _typeof(mergedTheme)) !== 'object')) {\n        throw new StyledComponentsError(7);\n      }\n\n      return mergedTheme;\n    }\n\n    if (theme === null || Array.isArray(theme) || (typeof theme === 'undefined' ? 'undefined' : _typeof(theme)) !== 'object') {\n      throw new StyledComponentsError(8);\n    }\n\n    return _extends({}, outerTheme, theme);\n  };\n\n  ThemeProvider.prototype.getContext = function getContext(theme, outerTheme) {\n    return this.getTheme(theme, outerTheme);\n  };\n\n  return ThemeProvider;\n}(Component);\n\n// \n\nvar CLOSING_TAG_R = /^\\s*<\\/[a-z]/i;\n\nvar ServerStyleSheet = function () {\n  function ServerStyleSheet() {\n    classCallCheck(this, ServerStyleSheet);\n\n    /* The master sheet might be reset, so keep a reference here */\n    this.masterSheet = StyleSheet.master;\n    this.instance = this.masterSheet.clone();\n    this.sealed = false;\n  }\n\n  /**\n   * Mark the ServerStyleSheet as being fully emitted and manually GC it from the\n   * StyleSheet singleton.\n   */\n\n\n  ServerStyleSheet.prototype.seal = function seal() {\n    if (!this.sealed) {\n      /* Remove sealed StyleSheets from the master sheet */\n      var index = this.masterSheet.clones.indexOf(this.instance);\n      this.masterSheet.clones.splice(index, 1);\n      this.sealed = true;\n    }\n  };\n\n  ServerStyleSheet.prototype.collectStyles = function collectStyles(children) {\n    if (this.sealed) {\n      throw new StyledComponentsError(2);\n    }\n\n    return React.createElement(\n      StyleSheetManager,\n      { sheet: this.instance },\n      children\n    );\n  };\n\n  ServerStyleSheet.prototype.getStyleTags = function getStyleTags() {\n    this.seal();\n    return this.instance.toHTML();\n  };\n\n  ServerStyleSheet.prototype.getStyleElement = function getStyleElement() {\n    this.seal();\n    return this.instance.toReactElements();\n  };\n\n  ServerStyleSheet.prototype.interleaveWithNodeStream = function interleaveWithNodeStream(readableStream) {\n    var _this = this;\n\n    {\n      throw new StyledComponentsError(3);\n    }\n\n    /* the tag index keeps track of which tags have already been emitted */\n    var instance = this.instance;\n\n    var instanceTagIndex = 0;\n\n    var streamAttr = SC_STREAM_ATTR + '=\"true\"';\n\n    var transformer = new stream.Transform({\n      transform: function appendStyleChunks(chunk, /* encoding */_, callback) {\n        var tags = instance.tags;\n\n        var html = '';\n\n        /* retrieve html for each new style tag */\n        for (; instanceTagIndex < tags.length; instanceTagIndex += 1) {\n          var tag = tags[instanceTagIndex];\n          html += tag.toHTML(streamAttr);\n        }\n\n        /* force our StyleSheets to emit entirely new tags */\n        instance.sealAllTags();\n\n        var renderedHtml = chunk.toString();\n\n        /* prepend style html to chunk, unless the start of the chunk is a closing tag in which case append right after that */\n        if (CLOSING_TAG_R.test(renderedHtml)) {\n          var endOfClosingTag = renderedHtml.indexOf('>');\n\n          this.push(renderedHtml.slice(0, endOfClosingTag + 1) + html + renderedHtml.slice(endOfClosingTag + 1));\n        } else this.push(html + renderedHtml);\n\n        callback();\n      }\n    });\n\n    readableStream.on('end', function () {\n      return _this.seal();\n    });\n\n    readableStream.on('error', function (err) {\n      _this.seal();\n\n      // forward the error to the transform stream\n      transformer.emit('error', err);\n    });\n\n    return readableStream.pipe(transformer);\n  };\n\n  return ServerStyleSheet;\n}();\n\n// \n\nvar StyleSheetContext = createContext();\nvar StyleSheetConsumer = StyleSheetContext.Consumer;\n\nvar StyleSheetManager = function (_Component) {\n  inherits(StyleSheetManager, _Component);\n\n  function StyleSheetManager(props) {\n    classCallCheck(this, StyleSheetManager);\n\n    var _this = possibleConstructorReturn(this, _Component.call(this, props));\n\n    _this.getContext = memoize(_this.getContext);\n    return _this;\n  }\n\n  StyleSheetManager.prototype.getContext = function getContext(sheet, target) {\n    if (sheet) {\n      return sheet;\n    } else if (target) {\n      return new StyleSheet(target);\n    } else {\n      throw new StyledComponentsError(4);\n    }\n  };\n\n  StyleSheetManager.prototype.render = function render() {\n    var _props = this.props,\n        children = _props.children,\n        sheet = _props.sheet,\n        target = _props.target;\n\n\n    return React.createElement(\n      StyleSheetContext.Provider,\n      { value: this.getContext(sheet, target) },\n      process.env.NODE_ENV !== 'production' ? React.Children.only(children) : children\n    );\n  };\n\n  return StyleSheetManager;\n}(Component);\nprocess.env.NODE_ENV !== \"production\" ? StyleSheetManager.propTypes = {\n  sheet: PropTypes.oneOfType([PropTypes.instanceOf(StyleSheet), PropTypes.instanceOf(ServerStyleSheet)]),\n\n  target: PropTypes.shape({\n    appendChild: PropTypes.func.isRequired\n  })\n} : void 0;\n\n// \n\nvar identifiers = {};\n\n/* We depend on components having unique IDs */\nfunction generateId(_ComponentStyle, _displayName, parentComponentId) {\n  var displayName = typeof _displayName !== 'string' ? 'sc' : escape(_displayName);\n\n  /**\n   * This ensures uniqueness if two components happen to share\n   * the same displayName.\n   */\n  var nr = (identifiers[displayName] || 0) + 1;\n  identifiers[displayName] = nr;\n\n  var componentId = displayName + '-' + _ComponentStyle.generateName(displayName + nr);\n\n  return parentComponentId ? parentComponentId + '-' + componentId : componentId;\n}\n\n// $FlowFixMe\n\nvar StyledComponent = function (_Component) {\n  inherits(StyledComponent, _Component);\n\n  function StyledComponent() {\n    classCallCheck(this, StyledComponent);\n\n    var _this = possibleConstructorReturn(this, _Component.call(this));\n\n    _this.attrs = {};\n\n    _this.renderOuter = _this.renderOuter.bind(_this);\n    _this.renderInner = _this.renderInner.bind(_this);\n\n    if (process.env.NODE_ENV !== 'production') {\n      _this.warnInnerRef = once(function (displayName) {\n        return (\n          // eslint-disable-next-line no-console\n          console.warn('The \"innerRef\" API has been removed in styled-components v4 in favor of React 16 ref forwarding, use \"ref\" instead like a typical component. \"innerRef\" was detected on component \"' + displayName + '\".')\n        );\n      });\n\n      _this.warnAttrsFnObjectKeyDeprecated = once(function (key, displayName) {\n        return (\n          // eslint-disable-next-line no-console\n          console.warn('Functions as object-form attrs({}) keys are now deprecated and will be removed in a future version of styled-components. Switch to the new attrs(props => ({})) syntax instead for easier and more powerful composition. The attrs key in question is \"' + key + '\" on component \"' + displayName + '\".', '\\n ' + new Error().stack)\n        );\n      });\n\n      _this.warnNonStyledComponentAttrsObjectKey = once(function (key, displayName) {\n        return (\n          // eslint-disable-next-line no-console\n          console.warn('It looks like you\\'ve used a non styled-component as the value for the \"' + key + '\" prop in an object-form attrs constructor of \"' + displayName + '\".\\n' + 'You should use the new function-form attrs constructor which avoids this issue: attrs(props => ({ yourStuff }))\\n' + \"To continue using the deprecated object syntax, you'll need to wrap your component prop in a function to make it available inside the styled component (you'll still get the deprecation warning though.)\\n\" + ('For example, { ' + key + ': () => InnerComponent } instead of { ' + key + ': InnerComponent }'))\n        );\n      });\n    }\n    return _this;\n  }\n\n  StyledComponent.prototype.render = function render() {\n    return React.createElement(\n      StyleSheetConsumer,\n      null,\n      this.renderOuter\n    );\n  };\n\n  StyledComponent.prototype.renderOuter = function renderOuter() {\n    var styleSheet = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : StyleSheet.master;\n\n    this.styleSheet = styleSheet;\n\n    // No need to subscribe a static component to theme changes, it won't change anything\n    if (this.props.forwardedComponent.componentStyle.isStatic) return this.renderInner();\n\n    return React.createElement(\n      ThemeConsumer,\n      null,\n      this.renderInner\n    );\n  };\n\n  StyledComponent.prototype.renderInner = function renderInner(theme) {\n    var _props$forwardedCompo = this.props.forwardedComponent,\n        componentStyle = _props$forwardedCompo.componentStyle,\n        defaultProps = _props$forwardedCompo.defaultProps,\n        displayName = _props$forwardedCompo.displayName,\n        foldedComponentIds = _props$forwardedCompo.foldedComponentIds,\n        styledComponentId = _props$forwardedCompo.styledComponentId,\n        target = _props$forwardedCompo.target;\n\n\n    var generatedClassName = void 0;\n    if (componentStyle.isStatic) {\n      generatedClassName = this.generateAndInjectStyles(EMPTY_OBJECT, this.props);\n    } else {\n      generatedClassName = this.generateAndInjectStyles(determineTheme(this.props, theme, defaultProps) || EMPTY_OBJECT, this.props);\n    }\n\n    var elementToBeCreated = this.props.as || this.attrs.as || target;\n    var isTargetTag = isTag(elementToBeCreated);\n\n    var propsForElement = {};\n    var computedProps = _extends({}, this.props, this.attrs);\n\n    var key = void 0;\n    // eslint-disable-next-line guard-for-in\n    for (key in computedProps) {\n      if (process.env.NODE_ENV !== 'production' && key === 'innerRef' && isTargetTag) {\n        this.warnInnerRef(displayName);\n      }\n\n      if (key === 'forwardedComponent' || key === 'as') {\n        continue;\n      } else if (key === 'forwardedRef') propsForElement.ref = computedProps[key];else if (key === 'forwardedAs') propsForElement.as = computedProps[key];else if (!isTargetTag || validAttr(key)) {\n        // Don't pass through non HTML tags through to HTML elements\n        propsForElement[key] = computedProps[key];\n      }\n    }\n\n    if (this.props.style && this.attrs.style) {\n      propsForElement.style = _extends({}, this.attrs.style, this.props.style);\n    }\n\n    propsForElement.className = Array.prototype.concat(foldedComponentIds, styledComponentId, generatedClassName !== styledComponentId ? generatedClassName : null, this.props.className, this.attrs.className).filter(Boolean).join(' ');\n\n    return createElement(elementToBeCreated, propsForElement);\n  };\n\n  StyledComponent.prototype.buildExecutionContext = function buildExecutionContext(theme, props, attrs) {\n    var _this2 = this;\n\n    var context = _extends({}, props, { theme: theme });\n\n    if (!attrs.length) return context;\n\n    this.attrs = {};\n\n    attrs.forEach(function (attrDef) {\n      var resolvedAttrDef = attrDef;\n      var attrDefWasFn = false;\n      var attr = void 0;\n      var key = void 0;\n\n      if (isFunction(resolvedAttrDef)) {\n        // $FlowFixMe\n        resolvedAttrDef = resolvedAttrDef(context);\n        attrDefWasFn = true;\n      }\n\n      /* eslint-disable guard-for-in */\n      // $FlowFixMe\n      for (key in resolvedAttrDef) {\n        attr = resolvedAttrDef[key];\n\n        if (!attrDefWasFn) {\n          if (isFunction(attr) && !isDerivedReactComponent(attr) && !isStyledComponent(attr)) {\n            if (process.env.NODE_ENV !== 'production') {\n              _this2.warnAttrsFnObjectKeyDeprecated(key, props.forwardedComponent.displayName);\n            }\n\n            attr = attr(context);\n\n            if (process.env.NODE_ENV !== 'production' && React.isValidElement(attr)) {\n              _this2.warnNonStyledComponentAttrsObjectKey(key, props.forwardedComponent.displayName);\n            }\n          }\n        }\n\n        _this2.attrs[key] = attr;\n        context[key] = attr;\n      }\n      /* eslint-enable */\n    });\n\n    return context;\n  };\n\n  StyledComponent.prototype.generateAndInjectStyles = function generateAndInjectStyles(theme, props) {\n    var _props$forwardedCompo2 = props.forwardedComponent,\n        attrs = _props$forwardedCompo2.attrs,\n        componentStyle = _props$forwardedCompo2.componentStyle,\n        warnTooManyClasses = _props$forwardedCompo2.warnTooManyClasses;\n\n    // statically styled-components don't need to build an execution context object,\n    // and shouldn't be increasing the number of class names\n\n    if (componentStyle.isStatic && !attrs.length) {\n      return componentStyle.generateAndInjectStyles(EMPTY_OBJECT, this.styleSheet);\n    }\n\n    var className = componentStyle.generateAndInjectStyles(this.buildExecutionContext(theme, props, attrs), this.styleSheet);\n\n    if (process.env.NODE_ENV !== 'production' && warnTooManyClasses) warnTooManyClasses(className);\n\n    return className;\n  };\n\n  return StyledComponent;\n}(Component);\n\nfunction createStyledComponent(target, options, rules) {\n  var isTargetStyledComp = isStyledComponent(target);\n  var isClass = !isTag(target);\n\n  var _options$displayName = options.displayName,\n      displayName = _options$displayName === undefined ? generateDisplayName(target) : _options$displayName,\n      _options$componentId = options.componentId,\n      componentId = _options$componentId === undefined ? generateId(ComponentStyle, options.displayName, options.parentComponentId) : _options$componentId,\n      _options$ParentCompon = options.ParentComponent,\n      ParentComponent = _options$ParentCompon === undefined ? StyledComponent : _options$ParentCompon,\n      _options$attrs = options.attrs,\n      attrs = _options$attrs === undefined ? EMPTY_ARRAY : _options$attrs;\n\n\n  var styledComponentId = options.displayName && options.componentId ? escape(options.displayName) + '-' + options.componentId : options.componentId || componentId;\n\n  // fold the underlying StyledComponent attrs up (implicit extend)\n  var finalAttrs =\n  // $FlowFixMe\n  isTargetStyledComp && target.attrs ? Array.prototype.concat(target.attrs, attrs).filter(Boolean) : attrs;\n\n  var componentStyle = new ComponentStyle(isTargetStyledComp ? // fold the underlying StyledComponent rules up (implicit extend)\n  // $FlowFixMe\n  target.componentStyle.rules.concat(rules) : rules, finalAttrs, styledComponentId);\n\n  /**\n   * forwardRef creates a new interim component, which we'll take advantage of\n   * instead of extending ParentComponent to create _another_ interim class\n   */\n  var WrappedStyledComponent = void 0;\n  var forwardRef = function forwardRef(props, ref) {\n    return React.createElement(ParentComponent, _extends({}, props, { forwardedComponent: WrappedStyledComponent, forwardedRef: ref }));\n  };\n  forwardRef.displayName = displayName;\n  WrappedStyledComponent = React.forwardRef(forwardRef);\n  WrappedStyledComponent.displayName = displayName;\n\n  // $FlowFixMe\n  WrappedStyledComponent.attrs = finalAttrs;\n  // $FlowFixMe\n  WrappedStyledComponent.componentStyle = componentStyle;\n\n  // $FlowFixMe\n  WrappedStyledComponent.foldedComponentIds = isTargetStyledComp ? // $FlowFixMe\n  Array.prototype.concat(target.foldedComponentIds, target.styledComponentId) : EMPTY_ARRAY;\n\n  // $FlowFixMe\n  WrappedStyledComponent.styledComponentId = styledComponentId;\n\n  // fold the underlying StyledComponent target up since we folded the styles\n  // $FlowFixMe\n  WrappedStyledComponent.target = isTargetStyledComp ? target.target : target;\n\n  // $FlowFixMe\n  WrappedStyledComponent.withComponent = function withComponent(tag) {\n    var previousComponentId = options.componentId,\n        optionsToCopy = objectWithoutProperties(options, ['componentId']);\n\n\n    var newComponentId = previousComponentId && previousComponentId + '-' + (isTag(tag) ? tag : escape(getComponentName(tag)));\n\n    var newOptions = _extends({}, optionsToCopy, {\n      attrs: finalAttrs,\n      componentId: newComponentId,\n      ParentComponent: ParentComponent\n    });\n\n    return createStyledComponent(tag, newOptions, rules);\n  };\n\n  // $FlowFixMe\n  Object.defineProperty(WrappedStyledComponent, 'defaultProps', {\n    get: function get$$1() {\n      return this._foldedDefaultProps;\n    },\n    set: function set$$1(obj) {\n      // $FlowFixMe\n      this._foldedDefaultProps = isTargetStyledComp ? merge(target.defaultProps, obj) : obj;\n    }\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    // $FlowFixMe\n    WrappedStyledComponent.warnTooManyClasses = createWarnTooManyClasses(displayName);\n  }\n\n  // $FlowFixMe\n  WrappedStyledComponent.toString = function () {\n    return '.' + WrappedStyledComponent.styledComponentId;\n  };\n\n  if (isClass) {\n    hoistNonReactStatics(WrappedStyledComponent, target, {\n      // all SC-specific things should not be hoisted\n      attrs: true,\n      componentStyle: true,\n      displayName: true,\n      foldedComponentIds: true,\n      styledComponentId: true,\n      target: true,\n      withComponent: true\n    });\n  }\n\n  return WrappedStyledComponent;\n}\n\n// \n// Thanks to ReactDOMFactories for this handy list!\n\nvar domElements = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr',\n\n// SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'marker', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\n// \n\nvar styled = function styled(tag) {\n  return constructWithOptions(createStyledComponent, tag);\n};\n\n// Shorthands for all valid HTML Elements\ndomElements.forEach(function (domElement) {\n  styled[domElement] = styled(domElement);\n});\n\n// \n\nvar GlobalStyle = function () {\n  function GlobalStyle(rules, componentId) {\n    classCallCheck(this, GlobalStyle);\n\n    this.rules = rules;\n    this.componentId = componentId;\n    this.isStatic = isStaticRules(rules, EMPTY_ARRAY);\n\n    if (!StyleSheet.master.hasId(componentId)) {\n      StyleSheet.master.deferredInject(componentId, []);\n    }\n  }\n\n  GlobalStyle.prototype.createStyles = function createStyles(executionContext, styleSheet) {\n    var flatCSS = flatten(this.rules, executionContext, styleSheet);\n    var css = stringifyRules(flatCSS, '');\n\n    styleSheet.inject(this.componentId, css);\n  };\n\n  GlobalStyle.prototype.removeStyles = function removeStyles(styleSheet) {\n    var componentId = this.componentId;\n\n    if (styleSheet.hasId(componentId)) {\n      styleSheet.remove(componentId);\n    }\n  };\n\n  // TODO: overwrite in-place instead of remove+create?\n\n\n  GlobalStyle.prototype.renderStyles = function renderStyles(executionContext, styleSheet) {\n    this.removeStyles(styleSheet);\n    this.createStyles(executionContext, styleSheet);\n  };\n\n  return GlobalStyle;\n}();\n\n// \n\n// place our cache into shared context so it'll persist between HMRs\nif (IS_BROWSER) {\n  window.scCGSHMRCache = {};\n}\n\nfunction createGlobalStyle(strings) {\n  for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    interpolations[_key - 1] = arguments[_key];\n  }\n\n  var rules = css.apply(undefined, [strings].concat(interpolations));\n  var id = 'sc-global-' + murmurhash(JSON.stringify(rules));\n  var style = new GlobalStyle(rules, id);\n\n  var GlobalStyleComponent = function (_React$Component) {\n    inherits(GlobalStyleComponent, _React$Component);\n\n    function GlobalStyleComponent(props) {\n      classCallCheck(this, GlobalStyleComponent);\n\n      var _this = possibleConstructorReturn(this, _React$Component.call(this, props));\n\n      var _this$constructor = _this.constructor,\n          globalStyle = _this$constructor.globalStyle,\n          styledComponentId = _this$constructor.styledComponentId;\n\n\n      if (IS_BROWSER) {\n        window.scCGSHMRCache[styledComponentId] = (window.scCGSHMRCache[styledComponentId] || 0) + 1;\n      }\n\n      /**\n       * This fixes HMR compatibility. Don't ask me why, but this combination of\n       * caching the closure variables via statics and then persisting the statics in\n       * state works across HMR where no other combination did. ¯\\_(ツ)_/¯\n       */\n      _this.state = {\n        globalStyle: globalStyle,\n        styledComponentId: styledComponentId\n      };\n      return _this;\n    }\n\n    GlobalStyleComponent.prototype.componentWillUnmount = function componentWillUnmount() {\n      if (window.scCGSHMRCache[this.state.styledComponentId]) {\n        window.scCGSHMRCache[this.state.styledComponentId] -= 1;\n      }\n      /**\n       * Depending on the order \"render\" is called this can cause the styles to be lost\n       * until the next render pass of the remaining instance, which may\n       * not be immediate.\n       */\n      if (window.scCGSHMRCache[this.state.styledComponentId] === 0) {\n        this.state.globalStyle.removeStyles(this.styleSheet);\n      }\n    };\n\n    GlobalStyleComponent.prototype.render = function render() {\n      var _this2 = this;\n\n      if (process.env.NODE_ENV !== 'production' && React.Children.count(this.props.children)) {\n        // eslint-disable-next-line no-console\n        console.warn('The global style component ' + this.state.styledComponentId + ' was given child JSX. createGlobalStyle does not render children.');\n      }\n\n      return React.createElement(\n        StyleSheetConsumer,\n        null,\n        function (styleSheet) {\n          _this2.styleSheet = styleSheet || StyleSheet.master;\n\n          var globalStyle = _this2.state.globalStyle;\n\n\n          if (globalStyle.isStatic) {\n            globalStyle.renderStyles(STATIC_EXECUTION_CONTEXT, _this2.styleSheet);\n\n            return null;\n          } else {\n            return React.createElement(\n              ThemeConsumer,\n              null,\n              function (theme) {\n                // $FlowFixMe\n                var defaultProps = _this2.constructor.defaultProps;\n\n\n                var context = _extends({}, _this2.props);\n\n                if (typeof theme !== 'undefined') {\n                  context.theme = determineTheme(_this2.props, theme, defaultProps);\n                }\n\n                globalStyle.renderStyles(context, _this2.styleSheet);\n\n                return null;\n              }\n            );\n          }\n        }\n      );\n    };\n\n    return GlobalStyleComponent;\n  }(React.Component);\n\n  GlobalStyleComponent.globalStyle = style;\n  GlobalStyleComponent.styledComponentId = id;\n\n\n  return GlobalStyleComponent;\n}\n\n// \n\nvar replaceWhitespace = function replaceWhitespace(str) {\n  return str.replace(/\\s|\\\\n/g, '');\n};\n\nfunction keyframes(strings) {\n  /* Warning if you've used keyframes on React Native */\n  if (process.env.NODE_ENV !== 'production' && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n    // eslint-disable-next-line no-console\n    console.warn('`keyframes` cannot be used on ReactNative, only on the web. To do animation in ReactNative please use Animated.');\n  }\n\n  for (var _len = arguments.length, interpolations = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    interpolations[_key - 1] = arguments[_key];\n  }\n\n  var rules = css.apply(undefined, [strings].concat(interpolations));\n\n  var name = generateAlphabeticName(murmurhash(replaceWhitespace(JSON.stringify(rules))));\n\n  return new Keyframes(name, stringifyRules(rules, name, '@keyframes'));\n}\n\n// \n\nvar withTheme = (function (Component$$1) {\n  var WithTheme = React.forwardRef(function (props, ref) {\n    return React.createElement(\n      ThemeConsumer,\n      null,\n      function (theme) {\n        // $FlowFixMe\n        var defaultProps = Component$$1.defaultProps;\n\n        var themeProp = determineTheme(props, theme, defaultProps);\n\n        if (process.env.NODE_ENV !== 'production' && themeProp === undefined) {\n          // eslint-disable-next-line no-console\n          console.warn('[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class \"' + getComponentName(Component$$1) + '\"');\n        }\n\n        return React.createElement(Component$$1, _extends({}, props, { theme: themeProp, ref: ref }));\n      }\n    );\n  });\n\n  hoistNonReactStatics(WithTheme, Component$$1);\n\n  WithTheme.displayName = 'WithTheme(' + getComponentName(Component$$1) + ')';\n\n  return WithTheme;\n});\n\n// \n\n/* eslint-disable */\nvar __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS = {\n  StyleSheet: StyleSheet\n};\n\n// \n\n/* Warning if you've imported this file on React Native */\nif (process.env.NODE_ENV !== 'production' && typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n  // eslint-disable-next-line no-console\n  console.warn(\"It looks like you've imported 'styled-components' on React Native.\\n\" + \"Perhaps you're looking to import 'styled-components/native'?\\n\" + 'Read more about this at https://www.styled-components.com/docs/basics#react-native');\n}\n\n/* Warning if there are several instances of styled-components */\nif (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Node.js') === -1 && navigator.userAgent.indexOf('jsdom') === -1) {\n  window['__styled-components-init__'] = window['__styled-components-init__'] || 0;\n\n  if (window['__styled-components-init__'] === 1) {\n    // eslint-disable-next-line no-console\n    console.warn(\"It looks like there are several instances of 'styled-components' initialized in this application. \" + 'This may cause dynamic styles not rendering properly, errors happening during rehydration process ' + 'and makes your application bigger without a good reason.\\n\\n' + 'See https://s-c.sh/2BAXzed for more info.');\n  }\n\n  window['__styled-components-init__'] += 1;\n}\n\n//\n\nexport default styled;\nexport { createGlobalStyle, css, isStyledComponent, keyframes, ServerStyleSheet, StyleSheetConsumer, StyleSheetContext, StyleSheetManager, ThemeConsumer, ThemeContext, ThemeProvider, withTheme, __DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS };\n//# sourceMappingURL=styled-components.browser.esm.js.map\n","var unitlessKeys = {\n  animationIterationCount: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","(function (factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? (module['exports'] = factory()) :\n\t\ttypeof define === 'function' && define['amd'] ? define(factory()) :\n\t\t\t(window['stylisRuleSheet'] = factory())\n}(function () {\n\n\t'use strict'\n\n\treturn function (insertRule) {\n\t\tvar delimiter = '/*|*/'\n\t\tvar needle = delimiter+'}'\n\n\t\tfunction toSheet (block) {\n\t\t\tif (block)\n\t\t\t\ttry {\n\t\t\t\t\tinsertRule(block + '}')\n\t\t\t\t} catch (e) {}\n\t\t}\n\n\t\treturn function ruleSheet (context, content, selectors, parents, line, column, length, ns, depth, at) {\n\t\t\tswitch (context) {\n\t\t\t\t// property\n\t\t\t\tcase 1:\n\t\t\t\t\t// @import\n\t\t\t\t\tif (depth === 0 && content.charCodeAt(0) === 64)\n\t\t\t\t\t\treturn insertRule(content+';'), ''\n\t\t\t\t\tbreak\n\t\t\t\t// selector\n\t\t\t\tcase 2:\n\t\t\t\t\tif (ns === 0)\n\t\t\t\t\t\treturn content + delimiter\n\t\t\t\t\tbreak\n\t\t\t\t// at-rule\n\t\t\t\tcase 3:\n\t\t\t\t\tswitch (ns) {\n\t\t\t\t\t\t// @font-face, @page\n\t\t\t\t\t\tcase 102:\n\t\t\t\t\t\tcase 112:\n\t\t\t\t\t\t\treturn insertRule(selectors[0]+content), ''\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn content + (at === 0 ? delimiter : '')\n\t\t\t\t\t}\n\t\t\t\tcase -2:\n\t\t\t\t\tcontent.split(needle).forEach(toSheet)\n\t\t\t}\n\t\t}\n\t}\n}))\n","!function(e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e(null):\"function\"==typeof define&&define.amd?define(e(null)):window.stylis=e(null)}(function e(a){\"use strict\";var r=/^\\0+/g,c=/[\\0\\r\\f]/g,s=/: */g,t=/zoo|gra/,i=/([,: ])(transform)/g,f=/,+\\s*(?![^(]*[)])/g,n=/ +\\s*(?![^(]*[)])/g,l=/ *[\\0] */g,o=/,\\r+?/g,h=/([\\t\\r\\n ])*\\f?&/g,u=/:global\\(((?:[^\\(\\)\\[\\]]*|\\[.*\\]|\\([^\\(\\)]*\\))*)\\)/g,d=/\\W+/g,b=/@(k\\w+)\\s*(\\S*)\\s*/,p=/::(place)/g,k=/:(read-only)/g,g=/\\s+(?=[{\\];=:>])/g,A=/([[}=:>])\\s+/g,C=/(\\{[^{]+?);(?=\\})/g,w=/\\s{2,}/g,v=/([^\\(])(:+) */g,m=/[svh]\\w+-[tblr]{2}/,x=/\\(\\s*(.*)\\s*\\)/g,$=/([\\s\\S]*?);/g,y=/-self|flex-/g,O=/[^]*?(:[rp][el]a[\\w-]+)[^]*/,j=/stretch|:\\s*\\w+\\-(?:conte|avail)/,z=/([^-])(image-set\\()/,N=\"-webkit-\",S=\"-moz-\",F=\"-ms-\",W=59,q=125,B=123,D=40,E=41,G=91,H=93,I=10,J=13,K=9,L=64,M=32,P=38,Q=45,R=95,T=42,U=44,V=58,X=39,Y=34,Z=47,_=62,ee=43,ae=126,re=0,ce=12,se=11,te=107,ie=109,fe=115,ne=112,le=111,oe=105,he=99,ue=100,de=112,be=1,pe=1,ke=0,ge=1,Ae=1,Ce=1,we=0,ve=0,me=0,xe=[],$e=[],ye=0,Oe=null,je=-2,ze=-1,Ne=0,Se=1,Fe=2,We=3,qe=0,Be=1,De=\"\",Ee=\"\",Ge=\"\";function He(e,a,s,t,i){for(var f,n,o=0,h=0,u=0,d=0,g=0,A=0,C=0,w=0,m=0,$=0,y=0,O=0,j=0,z=0,R=0,we=0,$e=0,Oe=0,je=0,ze=s.length,Je=ze-1,Re=\"\",Te=\"\",Ue=\"\",Ve=\"\",Xe=\"\",Ye=\"\";R<ze;){if(C=s.charCodeAt(R),R===Je)if(h+d+u+o!==0){if(0!==h)C=h===Z?I:Z;d=u=o=0,ze++,Je++}if(h+d+u+o===0){if(R===Je){if(we>0)Te=Te.replace(c,\"\");if(Te.trim().length>0){switch(C){case M:case K:case W:case J:case I:break;default:Te+=s.charAt(R)}C=W}}if(1===$e)switch(C){case B:case q:case W:case Y:case X:case D:case E:case U:$e=0;case K:case J:case I:case M:break;default:for($e=0,je=R,g=C,R--,C=W;je<ze;)switch(s.charCodeAt(je++)){case I:case J:case W:++R,C=g,je=ze;break;case V:if(we>0)++R,C=g;case B:je=ze}}switch(C){case B:for(g=(Te=Te.trim()).charCodeAt(0),y=1,je=++R;R<ze;){switch(C=s.charCodeAt(R)){case B:y++;break;case q:y--;break;case Z:switch(A=s.charCodeAt(R+1)){case T:case Z:R=Qe(A,R,Je,s)}break;case G:C++;case D:C++;case Y:case X:for(;R++<Je&&s.charCodeAt(R)!==C;);}if(0===y)break;R++}if(Ue=s.substring(je,R),g===re)g=(Te=Te.replace(r,\"\").trim()).charCodeAt(0);switch(g){case L:if(we>0)Te=Te.replace(c,\"\");switch(A=Te.charCodeAt(1)){case ue:case ie:case fe:case Q:f=a;break;default:f=xe}if(je=(Ue=He(a,f,Ue,A,i+1)).length,me>0&&0===je)je=Te.length;if(ye>0)if(f=Ie(xe,Te,Oe),n=Pe(We,Ue,f,a,pe,be,je,A,i,t),Te=f.join(\"\"),void 0!==n)if(0===(je=(Ue=n.trim()).length))A=0,Ue=\"\";if(je>0)switch(A){case fe:Te=Te.replace(x,Me);case ue:case ie:case Q:Ue=Te+\"{\"+Ue+\"}\";break;case te:if(Ue=(Te=Te.replace(b,\"$1 $2\"+(Be>0?De:\"\")))+\"{\"+Ue+\"}\",1===Ae||2===Ae&&Le(\"@\"+Ue,3))Ue=\"@\"+N+Ue+\"@\"+Ue;else Ue=\"@\"+Ue;break;default:if(Ue=Te+Ue,t===de)Ve+=Ue,Ue=\"\"}else Ue=\"\";break;default:Ue=He(a,Ie(a,Te,Oe),Ue,t,i+1)}Xe+=Ue,O=0,$e=0,z=0,we=0,Oe=0,j=0,Te=\"\",Ue=\"\",C=s.charCodeAt(++R);break;case q:case W:if((je=(Te=(we>0?Te.replace(c,\"\"):Te).trim()).length)>1){if(0===z)if((g=Te.charCodeAt(0))===Q||g>96&&g<123)je=(Te=Te.replace(\" \",\":\")).length;if(ye>0)if(void 0!==(n=Pe(Se,Te,a,e,pe,be,Ve.length,t,i,t)))if(0===(je=(Te=n.trim()).length))Te=\"\\0\\0\";switch(g=Te.charCodeAt(0),A=Te.charCodeAt(1),g){case re:break;case L:if(A===oe||A===he){Ye+=Te+s.charAt(R);break}default:if(Te.charCodeAt(je-1)===V)break;Ve+=Ke(Te,g,A,Te.charCodeAt(2))}}O=0,$e=0,z=0,we=0,Oe=0,Te=\"\",C=s.charCodeAt(++R)}}switch(C){case J:case I:if(h+d+u+o+ve===0)switch($){case E:case X:case Y:case L:case ae:case _:case T:case ee:case Z:case Q:case V:case U:case W:case B:case q:break;default:if(z>0)$e=1}if(h===Z)h=0;else if(ge+O===0&&t!==te&&Te.length>0)we=1,Te+=\"\\0\";if(ye*qe>0)Pe(Ne,Te,a,e,pe,be,Ve.length,t,i,t);be=1,pe++;break;case W:case q:if(h+d+u+o===0){be++;break}default:switch(be++,Re=s.charAt(R),C){case K:case M:if(d+o+h===0)switch(w){case U:case V:case K:case M:Re=\"\";break;default:if(C!==M)Re=\" \"}break;case re:Re=\"\\\\0\";break;case ce:Re=\"\\\\f\";break;case se:Re=\"\\\\v\";break;case P:if(d+h+o===0&&ge>0)Oe=1,we=1,Re=\"\\f\"+Re;break;case 108:if(d+h+o+ke===0&&z>0)switch(R-z){case 2:if(w===ne&&s.charCodeAt(R-3)===V)ke=w;case 8:if(m===le)ke=m}break;case V:if(d+h+o===0)z=R;break;case U:if(h+u+d+o===0)we=1,Re+=\"\\r\";break;case Y:case X:if(0===h)d=d===C?0:0===d?C:d;break;case G:if(d+h+u===0)o++;break;case H:if(d+h+u===0)o--;break;case E:if(d+h+o===0)u--;break;case D:if(d+h+o===0){if(0===O)switch(2*w+3*m){case 533:break;default:y=0,O=1}u++}break;case L:if(h+u+d+o+z+j===0)j=1;break;case T:case Z:if(d+o+u>0)break;switch(h){case 0:switch(2*C+3*s.charCodeAt(R+1)){case 235:h=Z;break;case 220:je=R,h=T}break;case T:if(C===Z&&w===T&&je+2!==R){if(33===s.charCodeAt(je+2))Ve+=s.substring(je,R+1);Re=\"\",h=0}}}if(0===h){if(ge+d+o+j===0&&t!==te&&C!==W)switch(C){case U:case ae:case _:case ee:case E:case D:if(0===O){switch(w){case K:case M:case I:case J:Re+=\"\\0\";break;default:Re=\"\\0\"+Re+(C===U?\"\":\"\\0\")}we=1}else switch(C){case D:if(z+7===R&&108===w)z=0;O=++y;break;case E:if(0==(O=--y))we=1,Re+=\"\\0\"}break;case K:case M:switch(w){case re:case B:case q:case W:case U:case ce:case K:case M:case I:case J:break;default:if(0===O)we=1,Re+=\"\\0\"}}if(Te+=Re,C!==M&&C!==K)$=C}}m=w,w=C,R++}if(je=Ve.length,me>0)if(0===je&&0===Xe.length&&0===a[0].length==false)if(t!==ie||1===a.length&&(ge>0?Ee:Ge)===a[0])je=a.join(\",\").length+2;if(je>0){if(f=0===ge&&t!==te?function(e){for(var a,r,s=0,t=e.length,i=Array(t);s<t;++s){for(var f=e[s].split(l),n=\"\",o=0,h=0,u=0,d=0,b=f.length;o<b;++o){if(0===(h=(r=f[o]).length)&&b>1)continue;if(u=n.charCodeAt(n.length-1),d=r.charCodeAt(0),a=\"\",0!==o)switch(u){case T:case ae:case _:case ee:case M:case D:break;default:a=\" \"}switch(d){case P:r=a+Ee;case ae:case _:case ee:case M:case E:case D:break;case G:r=a+r+Ee;break;case V:switch(2*r.charCodeAt(1)+3*r.charCodeAt(2)){case 530:if(Ce>0){r=a+r.substring(8,h-1);break}default:if(o<1||f[o-1].length<1)r=a+Ee+r}break;case U:a=\"\";default:if(h>1&&r.indexOf(\":\")>0)r=a+r.replace(v,\"$1\"+Ee+\"$2\");else r=a+r+Ee}n+=r}i[s]=n.replace(c,\"\").trim()}return i}(a):a,ye>0)if(void 0!==(n=Pe(Fe,Ve,f,e,pe,be,je,t,i,t))&&0===(Ve=n).length)return Ye+Ve+Xe;if(Ve=f.join(\",\")+\"{\"+Ve+\"}\",Ae*ke!=0){if(2===Ae&&!Le(Ve,2))ke=0;switch(ke){case le:Ve=Ve.replace(k,\":\"+S+\"$1\")+Ve;break;case ne:Ve=Ve.replace(p,\"::\"+N+\"input-$1\")+Ve.replace(p,\"::\"+S+\"$1\")+Ve.replace(p,\":\"+F+\"input-$1\")+Ve}ke=0}}return Ye+Ve+Xe}function Ie(e,a,r){var c=a.trim().split(o),s=c,t=c.length,i=e.length;switch(i){case 0:case 1:for(var f=0,n=0===i?\"\":e[0]+\" \";f<t;++f)s[f]=Je(n,s[f],r,i).trim();break;default:f=0;var l=0;for(s=[];f<t;++f)for(var h=0;h<i;++h)s[l++]=Je(e[h]+\" \",c[f],r,i).trim()}return s}function Je(e,a,r,c){var s=a,t=s.charCodeAt(0);if(t<33)t=(s=s.trim()).charCodeAt(0);switch(t){case P:switch(ge+c){case 0:case 1:if(0===e.trim().length)break;default:return s.replace(h,\"$1\"+e.trim())}break;case V:switch(s.charCodeAt(1)){case 103:if(Ce>0&&ge>0)return s.replace(u,\"$1\").replace(h,\"$1\"+Ge);break;default:return e.trim()+s.replace(h,\"$1\"+e.trim())}default:if(r*ge>0&&s.indexOf(\"\\f\")>0)return s.replace(h,(e.charCodeAt(0)===V?\"\":\"$1\")+e.trim())}return e+s}function Ke(e,a,r,c){var l,o=0,h=e+\";\",u=2*a+3*r+4*c;if(944===u)return function(e){var a=e.length,r=e.indexOf(\":\",9)+1,c=e.substring(0,r).trim(),s=e.substring(r,a-1).trim();switch(e.charCodeAt(9)*Be){case 0:break;case Q:if(110!==e.charCodeAt(10))break;default:for(var t=s.split((s=\"\",f)),i=0,r=0,a=t.length;i<a;r=0,++i){for(var l=t[i],o=l.split(n);l=o[r];){var h=l.charCodeAt(0);if(1===Be&&(h>L&&h<90||h>96&&h<123||h===R||h===Q&&l.charCodeAt(1)!==Q))switch(isNaN(parseFloat(l))+(-1!==l.indexOf(\"(\"))){case 1:switch(l){case\"infinite\":case\"alternate\":case\"backwards\":case\"running\":case\"normal\":case\"forwards\":case\"both\":case\"none\":case\"linear\":case\"ease\":case\"ease-in\":case\"ease-out\":case\"ease-in-out\":case\"paused\":case\"reverse\":case\"alternate-reverse\":case\"inherit\":case\"initial\":case\"unset\":case\"step-start\":case\"step-end\":break;default:l+=De}}o[r++]=l}s+=(0===i?\"\":\",\")+o.join(\" \")}}if(s=c+s+\";\",1===Ae||2===Ae&&Le(s,1))return N+s+s;return s}(h);else if(0===Ae||2===Ae&&!Le(h,1))return h;switch(u){case 1015:return 97===h.charCodeAt(10)?N+h+h:h;case 951:return 116===h.charCodeAt(3)?N+h+h:h;case 963:return 110===h.charCodeAt(5)?N+h+h:h;case 1009:if(100!==h.charCodeAt(4))break;case 969:case 942:return N+h+h;case 978:return N+h+S+h+h;case 1019:case 983:return N+h+S+h+F+h+h;case 883:if(h.charCodeAt(8)===Q)return N+h+h;if(h.indexOf(\"image-set(\",11)>0)return h.replace(z,\"$1\"+N+\"$2\")+h;return h;case 932:if(h.charCodeAt(4)===Q)switch(h.charCodeAt(5)){case 103:return N+\"box-\"+h.replace(\"-grow\",\"\")+N+h+F+h.replace(\"grow\",\"positive\")+h;case 115:return N+h+F+h.replace(\"shrink\",\"negative\")+h;case 98:return N+h+F+h.replace(\"basis\",\"preferred-size\")+h}return N+h+F+h+h;case 964:return N+h+F+\"flex-\"+h+h;case 1023:if(99!==h.charCodeAt(8))break;return l=h.substring(h.indexOf(\":\",15)).replace(\"flex-\",\"\").replace(\"space-between\",\"justify\"),N+\"box-pack\"+l+N+h+F+\"flex-pack\"+l+h;case 1005:return t.test(h)?h.replace(s,\":\"+N)+h.replace(s,\":\"+S)+h:h;case 1e3:switch(o=(l=h.substring(13).trim()).indexOf(\"-\")+1,l.charCodeAt(0)+l.charCodeAt(o)){case 226:l=h.replace(m,\"tb\");break;case 232:l=h.replace(m,\"tb-rl\");break;case 220:l=h.replace(m,\"lr\");break;default:return h}return N+h+F+l+h;case 1017:if(-1===h.indexOf(\"sticky\",9))return h;case 975:switch(o=(h=e).length-10,u=(l=(33===h.charCodeAt(o)?h.substring(0,o):h).substring(e.indexOf(\":\",7)+1).trim()).charCodeAt(0)+(0|l.charCodeAt(7))){case 203:if(l.charCodeAt(8)<111)break;case 115:h=h.replace(l,N+l)+\";\"+h;break;case 207:case 102:h=h.replace(l,N+(u>102?\"inline-\":\"\")+\"box\")+\";\"+h.replace(l,N+l)+\";\"+h.replace(l,F+l+\"box\")+\";\"+h}return h+\";\";case 938:if(h.charCodeAt(5)===Q)switch(h.charCodeAt(6)){case 105:return l=h.replace(\"-items\",\"\"),N+h+N+\"box-\"+l+F+\"flex-\"+l+h;case 115:return N+h+F+\"flex-item-\"+h.replace(y,\"\")+h;default:return N+h+F+\"flex-line-pack\"+h.replace(\"align-content\",\"\").replace(y,\"\")+h}break;case 973:case 989:if(h.charCodeAt(3)!==Q||122===h.charCodeAt(4))break;case 931:case 953:if(true===j.test(e))if(115===(l=e.substring(e.indexOf(\":\")+1)).charCodeAt(0))return Ke(e.replace(\"stretch\",\"fill-available\"),a,r,c).replace(\":fill-available\",\":stretch\");else return h.replace(l,N+l)+h.replace(l,S+l.replace(\"fill-\",\"\"))+h;break;case 962:if(h=N+h+(102===h.charCodeAt(5)?F+h:\"\")+h,r+c===211&&105===h.charCodeAt(13)&&h.indexOf(\"transform\",10)>0)return h.substring(0,h.indexOf(\";\",27)+1).replace(i,\"$1\"+N+\"$2\")+h}return h}function Le(e,a){var r=e.indexOf(1===a?\":\":\"{\"),c=e.substring(0,3!==a?r:10),s=e.substring(r+1,e.length-1);return Oe(2!==a?c:c.replace(O,\"$1\"),s,a)}function Me(e,a){var r=Ke(a,a.charCodeAt(0),a.charCodeAt(1),a.charCodeAt(2));return r!==a+\";\"?r.replace($,\" or ($1)\").substring(4):\"(\"+a+\")\"}function Pe(e,a,r,c,s,t,i,f,n,l){for(var o,h=0,u=a;h<ye;++h)switch(o=$e[h].call(Te,e,u,r,c,s,t,i,f,n,l)){case void 0:case false:case true:case null:break;default:u=o}if(u!==a)return u}function Qe(e,a,r,c){for(var s=a+1;s<r;++s)switch(c.charCodeAt(s)){case Z:if(e===T)if(c.charCodeAt(s-1)===T&&a+2!==s)return s+1;break;case I:if(e===Z)return s+1}return s}function Re(e){for(var a in e){var r=e[a];switch(a){case\"keyframe\":Be=0|r;break;case\"global\":Ce=0|r;break;case\"cascade\":ge=0|r;break;case\"compress\":we=0|r;break;case\"semicolon\":ve=0|r;break;case\"preserve\":me=0|r;break;case\"prefix\":if(Oe=null,!r)Ae=0;else if(\"function\"!=typeof r)Ae=1;else Ae=2,Oe=r}}return Re}function Te(a,r){if(void 0!==this&&this.constructor===Te)return e(a);var s=a,t=s.charCodeAt(0);if(t<33)t=(s=s.trim()).charCodeAt(0);if(Be>0)De=s.replace(d,t===G?\"\":\"-\");if(t=1,1===ge)Ge=s;else Ee=s;var i,f=[Ge];if(ye>0)if(void 0!==(i=Pe(ze,r,f,f,pe,be,0,0,0,0))&&\"string\"==typeof i)r=i;var n=He(xe,f,r,0,0);if(ye>0)if(void 0!==(i=Pe(je,n,f,f,pe,be,n.length,0,0,0))&&\"string\"!=typeof(n=i))t=0;return De=\"\",Ge=\"\",Ee=\"\",ke=0,pe=1,be=1,we*t==0?n:n.replace(c,\"\").replace(g,\"\").replace(A,\"$1\").replace(C,\"$1\").replace(w,\" \")}if(Te.use=function e(a){switch(a){case void 0:case null:ye=$e.length=0;break;default:if(\"function\"==typeof a)$e[ye++]=a;else if(\"object\"==typeof a)for(var r=0,c=a.length;r<c;++r)e(a[r]);else qe=0|!!a}return e},Te.set=Re,void 0!==a)Re(a);return Te});\n//# sourceMappingURL=stylis.min.js.map","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar React = _interopRequireWildcard(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _types = require('./types');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar EnhancerProvider = function (_React$Component) {\n  _inherits(EnhancerProvider, _React$Component);\n\n  function EnhancerProvider() {\n    _classCallCheck(this, EnhancerProvider);\n\n    return _possibleConstructorReturn(this, (EnhancerProvider.__proto__ || Object.getPrototypeOf(EnhancerProvider)).apply(this, arguments));\n  }\n\n  _createClass(EnhancerProvider, [{\n    key: 'getChildContext',\n    value: function getChildContext() {\n      var _ref;\n\n      return _ref = {}, _defineProperty(_ref, _types.ENHANCER_CONTEXT_NAME, this.props.enhancer), _defineProperty(_ref, _types.PROPS_DECORATOR_CONTEXT_NAME, this.props.propsDecorator), _ref;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      return React.Children.only(this.props.children);\n    }\n  }]);\n\n  return EnhancerProvider;\n}(React.Component);\n\nexports.default = EnhancerProvider;\n\n\nEnhancerProvider.propTypes = {\n  enhancer: _propTypes2.default.func,\n  propsDecorator: _propTypes2.default.func,\n  children: _propTypes2.default.element.isRequired\n};\n\nEnhancerProvider.childContextTypes = _types.ContextTypes;\n\nEnhancerProvider.displayName = 'EnhancerProvider';\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _utils = require('./utils');\n\nvar coerceSelection = function coerceSelection(select) {\n  if (!select) {\n    return [];\n  } else if (typeof select === 'string') {\n    return [select];\n  } else if (!Array.isArray(select)) {\n    var objSelect = select; // workaround for https://github.com/facebook/flow/issues/5781\n    return (0, _utils.keys)(select).reduce(function (acc, key) {\n      return acc.concat(objSelect[key] ? [key] : []);\n    }, []);\n  }\n  return select;\n};\nexports.default = coerceSelection;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _utils = require('./utils');\n\nvar _defaultPropsDecorator = require('./defaultPropsDecorator');\n\nvar _defaultPropsDecorator2 = _interopRequireDefault(_defaultPropsDecorator);\n\nvar _pickStyles = require('./pickStyles');\n\nvar _filterKeys = require('./filterKeys');\n\nvar _coerceSelection = require('./coerceSelection');\n\nvar _coerceSelection2 = _interopRequireDefault(_coerceSelection);\n\nvar _memoize = require('./memoize');\n\nvar _memoize2 = _interopRequireDefault(_memoize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar guessBaseClassName = function guessBaseClassName(classNames) {\n  // all class names must start with the same prefix: the component's base class name\n  // which will finally go to the container element\n  var firstKey = classNames && (0, _utils.keys)(classNames)[0];\n  return firstKey && firstKey.split('__')[0].split('--')[0];\n};\n\nvar deriveClassNames = function deriveClassNames(className, elementKeys, modifierKeys) {\n  // do not derive class names, if the user did not specify any class name\n  if (!className) {\n    return undefined;\n  }\n\n  // derive class names based using the passed modifier/element keys\n  var firstClassName = className.split(' ')[0];\n  var derivedClassNames = [].concat(_toConsumableArray(elementKeys.length === 0 ? modifierKeys.map(function (key) {\n    return firstClassName + '--' + key.substring(1);\n  }) : []), _toConsumableArray(elementKeys.map(function (key) {\n    return firstClassName + '__' + key;\n  })));\n\n  // also use the provided `className` if there is no sub-element selection\n  return elementKeys.length === 0 ? [className].concat(_toConsumableArray(derivedClassNames)) : derivedClassNames;\n};\n\nfunction createSubstyle(_ref) {\n  var style = _ref.style,\n      className = _ref.className,\n      classNames = _ref.classNames;\n  var propsDecorator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _defaultPropsDecorator2.default;\n\n  var baseClassName = className || guessBaseClassName(classNames);\n\n  var substyle = typeof style === 'function' ? style : (0, _memoize2.default)(function (select, defaultStyle) {\n    var selectedKeys = (0, _coerceSelection2.default)(select);\n\n    (0, _invariant2.default)(Array.isArray(selectedKeys), 'First parameter must be a string, an array of strings, ' + 'a plain object with boolean values, or a falsy value.');\n\n    (0, _invariant2.default)(!defaultStyle || (0, _utils.isPlainObject)(defaultStyle), 'Optional second parameter must be a plain object.');\n\n    var modifierKeys = selectedKeys.filter(_filterKeys.isModifier);\n    var elementKeys = selectedKeys.filter(_filterKeys.isElement);\n\n    var collectElementStyles = elementKeys.length > 0 ? function (fromStyle) {\n      return (0, _utils.values)((0, _pickStyles.pickNestedStyles)(fromStyle, elementKeys));\n    } : function (fromStyle) {\n      return [fromStyle];\n    };\n\n    var collectSelectedStyles = function collectSelectedStyles() {\n      var fromStyle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      return collectElementStyles((0, _pickStyles.hoistModifierStylesRecursive)(fromStyle, modifierKeys));\n    };\n\n    var derivedClassNames = deriveClassNames(baseClassName, elementKeys, modifierKeys);\n\n    return createSubstyle(_extends({}, (style || defaultStyle) && {\n      style: _utils.merge.apply(undefined, [{}].concat(_toConsumableArray(collectSelectedStyles(defaultStyle)), _toConsumableArray(collectSelectedStyles(style))))\n    }, derivedClassNames && {\n      className: derivedClassNames.join(' ')\n    }, classNames && { classNames: classNames }), propsDecorator);\n  });\n\n  // $FlowFixMe Flow does not believe that also a function can be spread\n  var styleProps = _extends({}, typeof style === 'function' ? style : { style: style });\n\n  var classNameSplit = [].concat(_toConsumableArray(styleProps.className ? styleProps.className.split(' ') : []), _toConsumableArray(baseClassName ? baseClassName.split(' ') : []));\n  var mappedClassNames = classNames ? (0, _utils.compact)(classNameSplit.map(function (singleClassName) {\n    return classNames[singleClassName];\n  })) : classNameSplit;\n\n  var propsForSpread = propsDecorator(_extends({}, styleProps, mappedClassNames.length > 0 ? {\n    className: mappedClassNames.join(' ')\n  } : {}));\n\n  // assign `style` and/or `className` props to the return function object\n  (0, _utils.assign)(substyle, propsForSpread);\n  return substyle;\n}\n\nexports.default = createSubstyle;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _pickStyles = require('./pickStyles');\n\n// many css-in-js libs process keyframes objects as the value for `animationName`\nvar defaultObjectPropsWhitelist = ['animationName'];\n\nvar defaultPropsDecorator = function defaultPropsDecorator(_ref) {\n  var style = _ref.style,\n      className = _ref.className;\n  return _extends({}, style ? { style: (0, _pickStyles.pickDirectStyles)(style, defaultObjectPropsWhitelist) } : {}, className ? { className: className } : {});\n};\n\nexports.default = defaultPropsDecorator;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = require('react');\n\nvar _hoistNonReactStatics = require('hoist-non-react-statics');\n\nvar _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics);\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _utils = require('./utils');\n\nvar _createSubstyle = require('./createSubstyle');\n\nvar _createSubstyle2 = _interopRequireDefault(_createSubstyle);\n\nvar _types = require('./types');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar isStatelessFunction = function isStatelessFunction(Component\n// $FlowFixMe\n) {\n  return Component.prototype && !Component.prototype.render;\n};\n\nvar createDefaultStyle = function createDefaultStyle(defaultStyle, getModifiers) {\n  var shouldUpdate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {\n    return true;\n  };\n  return function (WrappedComponent) {\n    var WithDefaultStyle = function (_Component) {\n      _inherits(WithDefaultStyle, _Component);\n\n      function WithDefaultStyle(props, context) {\n        _classCallCheck(this, WithDefaultStyle);\n\n        var _this = _possibleConstructorReturn(this, (WithDefaultStyle.__proto__ || Object.getPrototypeOf(WithDefaultStyle)).call(this, props, context));\n\n        _this.setWrappedInstance = function (ref) {\n          _this.wrappedInstance = ref;\n          var innerRef = _this.props.innerRef;\n\n          if (typeof innerRef === 'function') {\n            innerRef(ref);\n          } else if (innerRef && typeof innerRef !== 'string') {\n            innerRef.current = ref;\n          }\n        };\n\n        var style = props.style,\n            className = props.className,\n            classNames = props.classNames,\n            _ = props.innerRef,\n            rest = _objectWithoutProperties(props, ['style', 'className', 'classNames', 'innerRef']);\n\n        _this.substyle = (0, _createSubstyle2.default)({ style: style, className: className, classNames: classNames }, _this.context[_types.PROPS_DECORATOR_CONTEXT_NAME]);\n\n        if (typeof defaultStyle === 'function') {\n          _this.defaultStyle = defaultStyle(rest);\n        }\n        return _this;\n      }\n\n      _createClass(WithDefaultStyle, [{\n        key: 'shouldComponentUpdate',\n        value: function shouldComponentUpdate(_ref) {\n          var style = _ref.style,\n              className = _ref.className,\n              classNames = _ref.classNames,\n              rest = _objectWithoutProperties(_ref, ['style', 'className', 'classNames']);\n\n          var _props = this.props,\n              prevStyle = _props.style,\n              prevClassName = _props.className,\n              prevClassNames = _props.classNames,\n              _ = _props.innerRef,\n              prevRest = _objectWithoutProperties(_props, ['style', 'className', 'classNames', 'innerRef']);\n\n          if (style !== prevStyle || className !== prevClassName || classNames !== prevClassNames) {\n            this.substyle = (0, _createSubstyle2.default)({ style: style, className: className, classNames: classNames }, this.context[_types.PROPS_DECORATOR_CONTEXT_NAME]);\n          }\n\n          if (typeof defaultStyle === 'function') {\n            if (shouldUpdate(rest, prevRest)) {\n              this.defaultStyle = defaultStyle(rest);\n            }\n          }\n\n          return true;\n        }\n      }, {\n        key: 'render',\n        value: function render() {\n          var _props2 = this.props,\n              innerRef = _props2.innerRef,\n              _0 = _props2.style,\n              _1 = _props2.className,\n              _2 = _props2.classNames,\n              rest = _objectWithoutProperties(_props2, ['innerRef', 'style', 'className', 'classNames']);\n\n          var EnhancedWrappedComponent = this.getWrappedComponent();\n          var modifiers = getModifiers ? getModifiers(rest) : [];\n          return (0, _react.createElement)(EnhancedWrappedComponent, _extends({\n            style: this.substyle(modifiers, this.defaultStyle || defaultStyle),\n            ref: isStatelessFunction(EnhancedWrappedComponent) ? undefined : // $FlowFixMe\n            this.setWrappedInstance\n          }, rest));\n        }\n      }, {\n        key: 'getWrappedComponent',\n        value: function getWrappedComponent() {\n          var _context$ENHANCER_CON = this.context[_types.ENHANCER_CONTEXT_NAME],\n              enhance = _context$ENHANCER_CON === undefined ? _utils.identity : _context$ENHANCER_CON;\n\n\n          if (this.memoizedEnhance !== enhance) {\n            this.memoizedEnhance = enhance;\n            this.enhancedWrappedComponent = enhance(WrappedComponent);\n            if (this.enhancedWrappedComponent.propTypes) {\n              this.enhancedWrappedComponent.propTypes = _extends({}, this.enhancedWrappedComponent.propTypes, {\n                style: _types.PropTypes.style\n              });\n            }\n          }\n\n          return this.enhancedWrappedComponent || WrappedComponent;\n        }\n      }, {\n        key: 'getWrappedInstance',\n        value: function getWrappedInstance() {\n          (0, _warning2.default)(true, '`getWrappedInstance()` is deprecated and will be removed with the next major release. ' + 'Instead, use the `innerRef` prop to get a ref to the wrapped instance.');\n          return this.wrappedInstance;\n        }\n      }]);\n\n      return WithDefaultStyle;\n    }(_react.Component);\n\n    var wrappedComponentName = WrappedComponent.displayName || WrappedComponent.name;\n    WithDefaultStyle.displayName = 'withDefaultStyle(' + wrappedComponentName + ')';\n\n    // define prop types based on WrappedComponent's prop types\n    WithDefaultStyle.propTypes = _extends({}, WrappedComponent.propTypes, _types.PropTypes);\n\n    WithDefaultStyle.contextTypes = _types.ContextTypes;\n\n    // expose WrappedComponent, e.g., for testing purposes\n    WithDefaultStyle.WrappedComponent = WrappedComponent;\n\n    return (0, _hoistNonReactStatics2.default)(WithDefaultStyle, WrappedComponent);\n  };\n};\n\nexports.default = createDefaultStyle;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar isModifier = exports.isModifier = function isModifier(key) {\n  return key[0] === '&';\n};\nvar isElement = exports.isElement = function isElement(key) {\n  return !isModifier(key);\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.defaultPropsDecorator = exports.defaultStyle = exports.EnhancerProvider = exports.createSubstyle = undefined;\n\nvar _createSubstyle = require('./createSubstyle');\n\nvar _createSubstyle2 = _interopRequireDefault(_createSubstyle);\n\nvar _defaultStyle = require('./defaultStyle');\n\nvar _defaultStyle2 = _interopRequireDefault(_defaultStyle);\n\nvar _EnhancerProvider = require('./EnhancerProvider');\n\nvar _EnhancerProvider2 = _interopRequireDefault(_EnhancerProvider);\n\nvar _defaultPropsDecorator = require('./defaultPropsDecorator');\n\nvar _defaultPropsDecorator2 = _interopRequireDefault(_defaultPropsDecorator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.createSubstyle = _createSubstyle2.default;\nexports.EnhancerProvider = _EnhancerProvider2.default;\nexports.defaultStyle = _defaultStyle2.default;\nexports.defaultPropsDecorator = _defaultPropsDecorator2.default;\nexports.default = (0, _defaultStyle2.default)();","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _coerceSelection = require('./coerceSelection');\n\nvar _coerceSelection2 = _interopRequireDefault(_coerceSelection);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar EMPTY = {};\n\n\nvar memoize = function memoize(substyle) {\n  return function (select, defaultStyle) {\n    var cacheKey = defaultStyle || EMPTY;\n    substyle.memoize = substyle.memoize || new WeakMap();\n    var mapEntry = void 0;\n    if (!substyle.memoize.has(cacheKey)) {\n      mapEntry = {};\n      substyle.memoize.set(cacheKey, mapEntry);\n    } else {\n      mapEntry = substyle.memoize.get(cacheKey);\n    }\n    var selectHash = (0, _coerceSelection2.default)(select).join(' ');\n    return selectHash in mapEntry ? mapEntry[selectHash] : mapEntry[selectHash] = substyle(select || [], defaultStyle);\n  };\n};\n\nexports.default = memoize;\nmodule.exports = exports['default'];","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.hoistModifierStylesRecursive = exports.pickNestedStyles = exports.pickDirectStyles = undefined;\n\nvar _utils = require('./utils');\n\nvar _filterKeys = require('./filterKeys');\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nvar camelize = function camelize(key) {\n  return key.replace(/-(\\w)/g, function (m, c) {\n    return c.toUpperCase();\n  });\n};\n\nvar pickDirectStyles = exports.pickDirectStyles = function pickDirectStyles(style) {\n  var objectPropertiesWhitelist = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n  var styleKeys = (0, _utils.keys)(style);\n  var result = {};\n  for (var i = 0, l = styleKeys.length; i < l; i += 1) {\n    var key = styleKeys[i];\n    var isDirect = Object.prototype.toString.call(style[key]) !== '[object Object]' || // style defs\n    key[0] === ':' || // pseudo selectors\n    key[0] === '@' || // @media / @keyframes / @supports / @font-face\n    objectPropertiesWhitelist.indexOf(key) >= 0; // whitelisted object-type properties\n\n    if (isDirect) {\n      result[key] = style[key];\n    }\n  }\n  return result;\n};\n\nvar pickNestedStyles = exports.pickNestedStyles = function pickNestedStyles(style, keysToPick) {\n  var camelizedKeysToPick = keysToPick.map(camelize);\n  var styleKeys = (0, _utils.keys)(style);\n  var result = {};\n  for (var i = 0, l = styleKeys.length; i < l; i += 1) {\n    var key = styleKeys[i];\n    if (keysToPick.indexOf(key) >= 0 || camelizedKeysToPick.indexOf(camelize(key)) >= 0) {\n      result[key] = style[key];\n    }\n  }\n  return result;\n};\n\n// breadth-first hoisting of selected modifier style subtrees\n// does not traverse into element, :pseudo-selector or @directive subtrees\nvar hoistModifierStylesRecursive = exports.hoistModifierStylesRecursive = function hoistModifierStylesRecursive(style, modifierKeysToPick) {\n  // hoist styles for selected modifiers on current level\n  var result = _utils.merge.apply(undefined, [{}, (0, _utils.omit)(style, modifierKeysToPick)].concat(_toConsumableArray((0, _utils.values)(pickNestedStyles(style, modifierKeysToPick)))));\n\n  // traverse nested styled for ALL modifiers\n  var modifierKeys = (0, _utils.keys)(result).filter(_filterKeys.isModifier);\n  for (var i = 0, l = modifierKeys.length; i < l; i += 1) {\n    var key = modifierKeys[i];\n    var subresult = hoistModifierStylesRecursive(result[key], modifierKeysToPick);\n    if (modifierKeysToPick.indexOf(key) >= 0) {\n      // selected modifier: hoist subresult\n      delete result[key];\n      result = (0, _utils.merge)({}, result, subresult);\n    } else {\n      // non-selected modifier: replace with subresult\n      result[key] = subresult;\n    }\n  }\n\n  return result;\n};","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ContextTypes = exports.PropTypes = exports.PROPS_DECORATOR_CONTEXT_NAME = exports.ENHANCER_CONTEXT_NAME = undefined;\n\nvar _ContextTypes;\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nvar _react = require('react');\n\nvar React = _interopRequireWildcard(_react);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar ENHANCER_CONTEXT_NAME = exports.ENHANCER_CONTEXT_NAME = '__substyle__enhancer';\nvar PROPS_DECORATOR_CONTEXT_NAME = exports.PROPS_DECORATOR_CONTEXT_NAME = '__substyle__propsDecorator';\n\nvar StylePT = _propTypes2.default.oneOfType([_propTypes2.default.func, _propTypes2.default.object]);\n\nvar ClassNamesPT = _propTypes2.default.objectOf(_propTypes2.default.string);\n\nvar PropTypes = exports.PropTypes = {\n  style: StylePT,\n  className: _propTypes2.default.string,\n  classNames: ClassNamesPT,\n  innerRef: _propTypes2.default.oneOfType([_propTypes2.default.func, _propTypes2.default.shape({\n    current: typeof Element === 'undefined' ? _propTypes2.default.any : _propTypes2.default.instanceOf(Element)\n  })])\n};\n\nvar ContextTypes = exports.ContextTypes = (_ContextTypes = {}, _defineProperty(_ContextTypes, ENHANCER_CONTEXT_NAME, _propTypes2.default.func), _defineProperty(_ContextTypes, PROPS_DECORATOR_CONTEXT_NAME, _propTypes2.default.func), _ContextTypes);","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar keys = exports.keys = function keys(obj) {\n  return obj === Object(obj) ? Object.keys(obj) : [];\n};\n\nvar values = exports.values = function values(obj) {\n  return obj === Object(obj) ? Object.values(obj) : [];\n};\n\nfunction mergeDeep(target, source) {\n  var output = assign({}, target);\n  if (isPlainObject(target) && isPlainObject(source)) {\n    keys(source).forEach(function (key) {\n      if (isPlainObject(source[key])) {\n        if (!(key in target)) assign(output, _defineProperty({}, key, source[key]));else output[key] = mergeDeep(target[key], source[key]);\n      } else {\n        assign(output, _defineProperty({}, key, source[key]));\n      }\n    });\n  }\n  return output;\n}\n\nvar merge = exports.merge = function merge(target) {\n  for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    sources[_key - 1] = arguments[_key];\n  }\n\n  return sources.reduce(function (t, s) {\n    return mergeDeep(t, s);\n  }, target);\n};\n\nvar assign = exports.assign = function assign(target) {\n  for (var _len2 = arguments.length, sources = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n    sources[_key2 - 1] = arguments[_key2];\n  }\n\n  return Object.assign.apply(Object, [target].concat(sources));\n};\n\nvar identity = exports.identity = function identity(value) {\n  return value;\n};\n\nvar omit = function omit(obj, keys) {\n  var _obj = _extends({}, obj),\n      other = _objectWithoutProperties(_obj, []);\n\n  if (keys) {\n    var _iteratorNormalCompletion = true;\n    var _didIteratorError = false;\n    var _iteratorError = undefined;\n\n    try {\n      for (var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n        var key = _step.value;\n\n        delete other[key];\n      }\n    } catch (err) {\n      _didIteratorError = true;\n      _iteratorError = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion && _iterator.return) {\n          _iterator.return();\n        }\n      } finally {\n        if (_didIteratorError) {\n          throw _iteratorError;\n        }\n      }\n    }\n  }\n  return other;\n};\n\nexports.omit = omit;\nvar isPlainObject = exports.isPlainObject = function isPlainObject(obj) {\n  return obj === Object(obj) && !(obj instanceof Date) && !Array.isArray(obj);\n};\n\nvar compact = exports.compact = function compact(arr) {\n  return (arr || []).filter(Boolean);\n};","var candidateSelectors = [\n  'input',\n  'select',\n  'textarea',\n  'a[href]',\n  'button',\n  '[tabindex]',\n  'audio[controls]',\n  'video[controls]',\n  '[contenteditable]:not([contenteditable=\"false\"])',\n];\nvar candidateSelector = candidateSelectors.join(',');\n\nvar matches = typeof Element === 'undefined'\n  ? function () {}\n  : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nfunction tabbable(el, options) {\n  options = options || {};\n\n  var elementDocument = el.ownerDocument || el;\n  var regularTabbables = [];\n  var orderedTabbables = [];\n\n  var untouchabilityChecker = new UntouchabilityChecker(elementDocument);\n  var candidates = el.querySelectorAll(candidateSelector);\n\n  if (options.includeContainer) {\n    if (matches.call(el, candidateSelector)) {\n      candidates = Array.prototype.slice.apply(candidates);\n      candidates.unshift(el);\n    }\n  }\n\n  var i, candidate, candidateTabindex;\n  for (i = 0; i < candidates.length; i++) {\n    candidate = candidates[i];\n\n    if (!isNodeMatchingSelectorTabbable(candidate, untouchabilityChecker)) continue;\n\n    candidateTabindex = getTabindex(candidate);\n    if (candidateTabindex === 0) {\n      regularTabbables.push(candidate);\n    } else {\n      orderedTabbables.push({\n        documentOrder: i,\n        tabIndex: candidateTabindex,\n        node: candidate,\n      });\n    }\n  }\n\n  var tabbableNodes = orderedTabbables\n    .sort(sortOrderedTabbables)\n    .map(function(a) { return a.node })\n    .concat(regularTabbables);\n\n  return tabbableNodes;\n}\n\ntabbable.isTabbable = isTabbable;\ntabbable.isFocusable = isFocusable;\n\nfunction isNodeMatchingSelectorTabbable(node, untouchabilityChecker) {\n  if (\n    !isNodeMatchingSelectorFocusable(node, untouchabilityChecker)\n    || isNonTabbableRadio(node)\n    || getTabindex(node) < 0\n  ) {\n    return false;\n  }\n  return true;\n}\n\nfunction isTabbable(node, untouchabilityChecker) {\n  if (!node) throw new Error('No node provided');\n  if (matches.call(node, candidateSelector) === false) return false;\n  return isNodeMatchingSelectorTabbable(node, untouchabilityChecker);\n}\n\nfunction isNodeMatchingSelectorFocusable(node, untouchabilityChecker) {\n  untouchabilityChecker = untouchabilityChecker || new UntouchabilityChecker(node.ownerDocument || node);\n  if (\n    node.disabled\n    || isHiddenInput(node)\n    || untouchabilityChecker.isUntouchable(node)\n  ) {\n    return false;\n  }\n  return true;\n}\n\nvar focusableCandidateSelector = candidateSelectors.concat('iframe').join(',');\nfunction isFocusable(node, untouchabilityChecker) {\n  if (!node) throw new Error('No node provided');\n  if (matches.call(node, focusableCandidateSelector) === false) return false;\n  return isNodeMatchingSelectorFocusable(node, untouchabilityChecker);\n}\n\nfunction getTabindex(node) {\n  var tabindexAttr = parseInt(node.getAttribute('tabindex'), 10);\n  if (!isNaN(tabindexAttr)) return tabindexAttr;\n  // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n  // so if they don't have a tabindex attribute specifically set, assume it's 0.\n  if (isContentEditable(node)) return 0;\n  return node.tabIndex;\n}\n\nfunction sortOrderedTabbables(a, b) {\n  return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n}\n\n// Array.prototype.find not available in IE.\nfunction find(list, predicate) {\n  for (var i = 0, length = list.length; i < length; i++) {\n    if (predicate(list[i])) return list[i];\n  }\n}\n\nfunction isContentEditable(node) {\n  return node.contentEditable === 'true';\n}\n\nfunction isInput(node) {\n  return node.tagName === 'INPUT';\n}\n\nfunction isHiddenInput(node) {\n  return isInput(node) && node.type === 'hidden';\n}\n\nfunction isRadio(node) {\n  return isInput(node) && node.type === 'radio';\n}\n\nfunction isNonTabbableRadio(node) {\n  return isRadio(node) && !isTabbableRadio(node);\n}\n\nfunction getCheckedRadio(nodes) {\n  for (var i = 0; i < nodes.length; i++) {\n    if (nodes[i].checked) {\n      return nodes[i];\n    }\n  }\n}\n\nfunction isTabbableRadio(node) {\n  if (!node.name) return true;\n  // This won't account for the edge case where you have radio groups with the same\n  // in separate forms on the same page.\n  var radioSet = node.ownerDocument.querySelectorAll('input[type=\"radio\"][name=\"' + node.name + '\"]');\n  var checked = getCheckedRadio(radioSet);\n  return !checked || checked === node;\n}\n\n// An element is \"untouchable\" if *it or one of its ancestors* has\n// `visibility: hidden` or `display: none`.\nfunction UntouchabilityChecker(elementDocument) {\n  this.doc = elementDocument;\n  // Node cache must be refreshed on every check, in case\n  // the content of the element has changed. The cache contains tuples\n  // mapping nodes to their boolean result.\n  this.cache = [];\n}\n\n// getComputedStyle accurately reflects `visibility: hidden` of ancestors\n// but not `display: none`, so we need to recursively check parents.\nUntouchabilityChecker.prototype.hasDisplayNone = function hasDisplayNone(node, nodeComputedStyle) {\n  if (node.nodeType !== Node.ELEMENT_NODE) return false;\n\n    // Search for a cached result.\n    var cached = find(this.cache, function(item) {\n      return item === node;\n    });\n    if (cached) return cached[1];\n\n    nodeComputedStyle = nodeComputedStyle || this.doc.defaultView.getComputedStyle(node);\n\n    var result = false;\n\n    if (nodeComputedStyle.display === 'none') {\n      result = true;\n    } else if (node.parentNode) {\n      result = this.hasDisplayNone(node.parentNode);\n    }\n\n    this.cache.push([node, result]);\n\n    return result;\n}\n\nUntouchabilityChecker.prototype.isUntouchable = function isUntouchable(node) {\n  if (node === this.doc.documentElement) return false;\n  var computedStyle = this.doc.defaultView.getComputedStyle(node);\n  if (this.hasDisplayNone(node, computedStyle)) return true;\n  return computedStyle.visibility === 'hidden';\n}\n\nmodule.exports = tabbable;\n","export default function(e,n){return n=n||{},new Promise(function(t,r){var s=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(s.status/100|0),statusText:s.statusText,status:s.status,url:s.responseURL,text:function(){return Promise.resolve(s.responseText)},json:function(){return Promise.resolve(s.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([s.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var l in s.open(n.method||\"get\",e,!0),s.onload=function(){s.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm,function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+\",\"+t:t}),t(a())},s.onerror=r,s.withCredentials=\"include\"==n.credentials,n.headers)s.setRequestHeader(l,n.headers[l]);s.send(n.body||null)})}\n//# sourceMappingURL=unfetch.module.js.map\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n  // lazy load so that environments that need to polyfill have a chance to do so\n  if (!getRandomValues) {\n    // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n    // find the complete implementation of crypto (msCrypto) on IE11.\n    getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n    if (!getRandomValues) {\n      throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n    }\n  }\n\n  return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n  return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n  byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n  // Note: Be careful editing this code!  It's been tuned for performance\n  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n  var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID.  If this throws, it's likely due to one\n  // of the following:\n  // - One or more input array values don't map to a hex octet (leading to\n  // \"undefined\" in the uuid)\n  // - Invalid input values for the RFC `version` or `variant` fields\n\n  if (!validate(uuid)) {\n    throw TypeError('Stringified UUID is invalid');\n  }\n\n  return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || new Array(16);\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n\n  if (node == null || clockseq == null) {\n    var seedBytes = options.random || (options.rng || rng)();\n\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n    }\n\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n  var msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n  var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n\n\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n  if (nsecs >= 10000) {\n    throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n  msecs += 12219292800000; // `time_low`\n\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff; // `time_mid`\n\n  var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff; // `time_high_and_version`\n\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n  b[i++] = clockseq & 0xff; // `node`\n\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  var v;\n  var arr = new Uint8Array(16); // Parse ########-....-....-....-............\n\n  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;\n  arr[1] = v >>> 16 & 0xff;\n  arr[2] = v >>> 8 & 0xff;\n  arr[3] = v & 0xff; // Parse ........-####-....-....-............\n\n  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;\n  arr[5] = v & 0xff; // Parse ........-....-####-....-............\n\n  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;\n  arr[7] = v & 0xff; // Parse ........-....-....-####-............\n\n  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;\n  arr[9] = v & 0xff; // Parse ........-....-....-....-############\n  // (Use \"/\" to avoid 32-bit truncation when bit-shifting high-order bytes)\n\n  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;\n  arr[11] = v / 0x100000000 & 0xff;\n  arr[12] = v >>> 24 & 0xff;\n  arr[13] = v >>> 16 & 0xff;\n  arr[14] = v >>> 8 & 0xff;\n  arr[15] = v & 0xff;\n  return arr;\n}\n\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n  str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n  var bytes = [];\n\n  for (var i = 0; i < str.length; ++i) {\n    bytes.push(str.charCodeAt(i));\n  }\n\n  return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n  function generateUUID(value, namespace, buf, offset) {\n    if (typeof value === 'string') {\n      value = stringToBytes(value);\n    }\n\n    if (typeof namespace === 'string') {\n      namespace = parse(namespace);\n    }\n\n    if (namespace.length !== 16) {\n      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    } // Compute hash of namespace and value, Per 4.3\n    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =\n    // hashfunc([...namespace, ... value])`\n\n\n    var bytes = new Uint8Array(16 + value.length);\n    bytes.set(namespace);\n    bytes.set(value, namespace.length);\n    bytes = hashfunc(bytes);\n    bytes[6] = bytes[6] & 0x0f | version;\n    bytes[8] = bytes[8] & 0x3f | 0x80;\n\n    if (buf) {\n      offset = offset || 0;\n\n      for (var i = 0; i < 16; ++i) {\n        buf[offset + i] = bytes[i];\n      }\n\n      return buf;\n    }\n\n    return stringify(bytes);\n  } // Function#name is not settable on some platforms (#270)\n\n\n  try {\n    generateUUID.name = name; // eslint-disable-next-line no-empty\n  } catch (err) {} // For CommonJS default export support\n\n\n  generateUUID.DNS = DNS;\n  generateUUID.URL = URL;\n  return generateUUID;\n}","/*\n * Browser-compatible JavaScript MD5\n *\n * Modification of JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\nfunction md5(bytes) {\n  if (typeof bytes === 'string') {\n    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = new Uint8Array(msg.length);\n\n    for (var i = 0; i < msg.length; ++i) {\n      bytes[i] = msg.charCodeAt(i);\n    }\n  }\n\n  return md5ToHexEncodedArray(wordsToMd5(bytesToWords(bytes), bytes.length * 8));\n}\n/*\n * Convert an array of little-endian words to an array of bytes\n */\n\n\nfunction md5ToHexEncodedArray(input) {\n  var output = [];\n  var length32 = input.length * 32;\n  var hexTab = '0123456789abcdef';\n\n  for (var i = 0; i < length32; i += 8) {\n    var x = input[i >> 5] >>> i % 32 & 0xff;\n    var hex = parseInt(hexTab.charAt(x >>> 4 & 0x0f) + hexTab.charAt(x & 0x0f), 16);\n    output.push(hex);\n  }\n\n  return output;\n}\n/**\n * Calculate output length with padding and bit length\n */\n\n\nfunction getOutputLength(inputLength8) {\n  return (inputLength8 + 64 >>> 9 << 4) + 14 + 1;\n}\n/*\n * Calculate the MD5 of an array of little-endian words, and a bit length.\n */\n\n\nfunction wordsToMd5(x, len) {\n  /* append padding */\n  x[len >> 5] |= 0x80 << len % 32;\n  x[getOutputLength(len) - 1] = len;\n  var a = 1732584193;\n  var b = -271733879;\n  var c = -1732584194;\n  var d = 271733878;\n\n  for (var i = 0; i < x.length; i += 16) {\n    var olda = a;\n    var oldb = b;\n    var oldc = c;\n    var oldd = d;\n    a = md5ff(a, b, c, d, x[i], 7, -680876936);\n    d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n    c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n    b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n    a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n    d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n    c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n    b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n    a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n    d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n    c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n    b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n    a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n    d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n    c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n    b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n    a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n    d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n    c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n    b = md5gg(b, c, d, a, x[i], 20, -373897302);\n    a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n    d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n    c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n    b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n    a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n    d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n    c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n    b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n    a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n    d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n    c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n    b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n    a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n    d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n    c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n    b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n    a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n    d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n    c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n    b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n    a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n    d = md5hh(d, a, b, c, x[i], 11, -358537222);\n    c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n    b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n    a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n    d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n    c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n    b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n    a = md5ii(a, b, c, d, x[i], 6, -198630844);\n    d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n    c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n    b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n    a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n    d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n    c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n    b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n    a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n    d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n    c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n    b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n    a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n    d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n    c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n    b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n    a = safeAdd(a, olda);\n    b = safeAdd(b, oldb);\n    c = safeAdd(c, oldc);\n    d = safeAdd(d, oldd);\n  }\n\n  return [a, b, c, d];\n}\n/*\n * Convert an array bytes to an array of little-endian words\n * Characters >255 have their high-byte silently ignored.\n */\n\n\nfunction bytesToWords(input) {\n  if (input.length === 0) {\n    return [];\n  }\n\n  var length8 = input.length * 8;\n  var output = new Uint32Array(getOutputLength(length8));\n\n  for (var i = 0; i < length8; i += 8) {\n    output[i >> 5] |= (input[i / 8] & 0xff) << i % 32;\n  }\n\n  return output;\n}\n/*\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\n * to work around bugs in some JS interpreters.\n */\n\n\nfunction safeAdd(x, y) {\n  var lsw = (x & 0xffff) + (y & 0xffff);\n  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n  return msw << 16 | lsw & 0xffff;\n}\n/*\n * Bitwise rotate a 32-bit number to the left.\n */\n\n\nfunction bitRotateLeft(num, cnt) {\n  return num << cnt | num >>> 32 - cnt;\n}\n/*\n * These functions implement the four basic operations the algorithm uses.\n */\n\n\nfunction md5cmn(q, a, b, x, s, t) {\n  return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\n\nfunction md5ff(a, b, c, d, x, s, t) {\n  return md5cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction md5gg(a, b, c, d, x, s, t) {\n  return md5cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction md5hh(a, b, c, d, x, s, t) {\n  return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction md5ii(a, b, c, d, x, s, t) {\n  return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n  options = options || {};\n  var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n  rnds[6] = rnds[6] & 0x0f | 0x40;\n  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n  if (buf) {\n    offset = offset || 0;\n\n    for (var i = 0; i < 16; ++i) {\n      buf[offset + i] = rnds[i];\n    }\n\n    return buf;\n  }\n\n  return stringify(rnds);\n}\n\nexport default v4;","// Adapted from Chris Veness' SHA1 code at\n// http://www.movable-type.co.uk/scripts/sha1.html\nfunction f(s, x, y, z) {\n  switch (s) {\n    case 0:\n      return x & y ^ ~x & z;\n\n    case 1:\n      return x ^ y ^ z;\n\n    case 2:\n      return x & y ^ x & z ^ y & z;\n\n    case 3:\n      return x ^ y ^ z;\n  }\n}\n\nfunction ROTL(x, n) {\n  return x << n | x >>> 32 - n;\n}\n\nfunction sha1(bytes) {\n  var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n  var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n  if (typeof bytes === 'string') {\n    var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n    bytes = [];\n\n    for (var i = 0; i < msg.length; ++i) {\n      bytes.push(msg.charCodeAt(i));\n    }\n  } else if (!Array.isArray(bytes)) {\n    // Convert Array-like to Array\n    bytes = Array.prototype.slice.call(bytes);\n  }\n\n  bytes.push(0x80);\n  var l = bytes.length / 4 + 2;\n  var N = Math.ceil(l / 16);\n  var M = new Array(N);\n\n  for (var _i = 0; _i < N; ++_i) {\n    var arr = new Uint32Array(16);\n\n    for (var j = 0; j < 16; ++j) {\n      arr[j] = bytes[_i * 64 + j * 4] << 24 | bytes[_i * 64 + j * 4 + 1] << 16 | bytes[_i * 64 + j * 4 + 2] << 8 | bytes[_i * 64 + j * 4 + 3];\n    }\n\n    M[_i] = arr;\n  }\n\n  M[N - 1][14] = (bytes.length - 1) * 8 / Math.pow(2, 32);\n  M[N - 1][14] = Math.floor(M[N - 1][14]);\n  M[N - 1][15] = (bytes.length - 1) * 8 & 0xffffffff;\n\n  for (var _i2 = 0; _i2 < N; ++_i2) {\n    var W = new Uint32Array(80);\n\n    for (var t = 0; t < 16; ++t) {\n      W[t] = M[_i2][t];\n    }\n\n    for (var _t = 16; _t < 80; ++_t) {\n      W[_t] = ROTL(W[_t - 3] ^ W[_t - 8] ^ W[_t - 14] ^ W[_t - 16], 1);\n    }\n\n    var a = H[0];\n    var b = H[1];\n    var c = H[2];\n    var d = H[3];\n    var e = H[4];\n\n    for (var _t2 = 0; _t2 < 80; ++_t2) {\n      var s = Math.floor(_t2 / 20);\n      var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 0;\n      e = d;\n      d = c;\n      c = ROTL(b, 30) >>> 0;\n      b = a;\n      a = T;\n    }\n\n    H[0] = H[0] + a >>> 0;\n    H[1] = H[1] + b >>> 0;\n    H[2] = H[2] + c >>> 0;\n    H[3] = H[3] + d >>> 0;\n    H[4] = H[4] + e >>> 0;\n  }\n\n  return [H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff];\n}\n\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n  if (!validate(uuid)) {\n    throw TypeError('Invalid UUID');\n  }\n\n  return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","function valueOf(obj) {\n  return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);\n}\n\nfunction valueEqual(a, b) {\n  // Test for strict equality first.\n  if (a === b) return true;\n\n  // Otherwise, if either of them == null they are not equal.\n  if (a == null || b == null) return false;\n\n  if (Array.isArray(a)) {\n    return (\n      Array.isArray(b) &&\n      a.length === b.length &&\n      a.every(function(item, index) {\n        return valueEqual(item, b[index]);\n      })\n    );\n  }\n\n  if (typeof a === 'object' || typeof b === 'object') {\n    var aValue = valueOf(a);\n    var bValue = valueOf(b);\n\n    if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n\n    return Object.keys(Object.assign({}, a, b)).every(function(key) {\n      return valueEqual(a[key], b[key]);\n    });\n  }\n\n  return false;\n}\n\nexport default valueEqual;\n","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n    var target = {}\n\n    for (var i = 0; i < arguments.length; i++) {\n        var source = arguments[i]\n\n        for (var key in source) {\n            if (hasOwnProperty.call(source, key)) {\n                target[key] = source[key]\n            }\n        }\n    }\n\n    return target\n}\n","module.exports = XDate;","module.exports = evite.exports.React;","module.exports = evite.exports.ReactDom;","module.exports = evite.exports.ReactRouter;","module.exports = evite.exports.mobx;","module.exports = evite.exports.mobxReact;","module.exports = window.evite;","module.exports = window.evite.urls;","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","export default function _arrayLikeToArray(arr, len) {\n  if (len == null || len > arr.length) len = arr.length;\n  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n  return arr2;\n}","export default function _assertThisInitialized(self) {\n  if (self === void 0) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return self;\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n  try {\n    var info = gen[key](arg);\n    var value = info.value;\n  } catch (error) {\n    reject(error);\n    return;\n  }\n  if (info.done) {\n    resolve(value);\n  } else {\n    Promise.resolve(value).then(_next, _throw);\n  }\n}\nexport default function _asyncToGenerator(fn) {\n  return function () {\n    var self = this,\n      args = arguments;\n    return new Promise(function (resolve, reject) {\n      var gen = fn.apply(self, args);\n      function _next(value) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n      }\n      function _throw(err) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n      }\n      _next(undefined);\n    });\n  };\n}","export default function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n  }\n}\nexport default function _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", {\n    writable: false\n  });\n  return Constructor;\n}","export default function _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}","export default function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  })();\n}","import getPrototypeOf from \"./getPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn.js\";\nexport default function _createSuper(Derived) {\n  var hasNativeReflectConstruct = isNativeReflectConstruct();\n  return function _createSuperInternal() {\n    var Super = getPrototypeOf(Derived),\n      result;\n    if (hasNativeReflectConstruct) {\n      var NewTarget = getPrototypeOf(this).constructor;\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n    return possibleConstructorReturn(this, result);\n  };\n}","import _typeof from \"./typeof.js\";\nimport assertThisInitialized from \"./assertThisInitialized.js\";\nexport default function _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  } else if (call !== void 0) {\n    throw new TypeError(\"Derived constructors may only return object or undefined\");\n  }\n  return assertThisInitialized(self);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n  key = toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}","export default function _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  Object.defineProperty(subClass, \"prototype\", {\n    writable: false\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  setPrototypeOf(subClass, superClass);\n}","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nexport default function _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n  if (source == null) return {};\n  var target = objectWithoutPropertiesLoose(source, excluded);\n  var key, i;\n  if (Object.getOwnPropertySymbols) {\n    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n    for (i = 0; i < sourceSymbolKeys.length; i++) {\n      key = sourceSymbolKeys[i];\n      if (excluded.indexOf(key) >= 0) continue;\n      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n      target[key] = source[key];\n    }\n  }\n  return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}","import _typeof from \"./typeof.js\";\nexport default function _regeneratorRuntime() {\n  \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n  _regeneratorRuntime = function _regeneratorRuntime() {\n    return e;\n  };\n  var t,\n    e = {},\n    r = Object.prototype,\n    n = r.hasOwnProperty,\n    o = Object.defineProperty || function (t, e, r) {\n      t[e] = r.value;\n    },\n    i = \"function\" == typeof Symbol ? Symbol : {},\n    a = i.iterator || \"@@iterator\",\n    c = i.asyncIterator || \"@@asyncIterator\",\n    u = i.toStringTag || \"@@toStringTag\";\n  function define(t, e, r) {\n    return Object.defineProperty(t, e, {\n      value: r,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }), t[e];\n  }\n  try {\n    define({}, \"\");\n  } catch (t) {\n    define = function define(t, e, r) {\n      return t[e] = r;\n    };\n  }\n  function wrap(t, e, r, n) {\n    var i = e && e.prototype instanceof Generator ? e : Generator,\n      a = Object.create(i.prototype),\n      c = new Context(n || []);\n    return o(a, \"_invoke\", {\n      value: makeInvokeMethod(t, r, c)\n    }), a;\n  }\n  function tryCatch(t, e, r) {\n    try {\n      return {\n        type: \"normal\",\n        arg: t.call(e, r)\n      };\n    } catch (t) {\n      return {\n        type: \"throw\",\n        arg: t\n      };\n    }\n  }\n  e.wrap = wrap;\n  var h = \"suspendedStart\",\n    l = \"suspendedYield\",\n    f = \"executing\",\n    s = \"completed\",\n    y = {};\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  var p = {};\n  define(p, a, function () {\n    return this;\n  });\n  var d = Object.getPrototypeOf,\n    v = d && d(d(values([])));\n  v && v !== r && n.call(v, a) && (p = v);\n  var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n  function defineIteratorMethods(t) {\n    [\"next\", \"throw\", \"return\"].forEach(function (e) {\n      define(t, e, function (t) {\n        return this._invoke(e, t);\n      });\n    });\n  }\n  function AsyncIterator(t, e) {\n    function invoke(r, o, i, a) {\n      var c = tryCatch(t[r], t, o);\n      if (\"throw\" !== c.type) {\n        var u = c.arg,\n          h = u.value;\n        return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n          invoke(\"next\", t, i, a);\n        }, function (t) {\n          invoke(\"throw\", t, i, a);\n        }) : e.resolve(h).then(function (t) {\n          u.value = t, i(u);\n        }, function (t) {\n          return invoke(\"throw\", t, i, a);\n        });\n      }\n      a(c.arg);\n    }\n    var r;\n    o(this, \"_invoke\", {\n      value: function value(t, n) {\n        function callInvokeWithMethodAndArg() {\n          return new e(function (e, r) {\n            invoke(t, n, e, r);\n          });\n        }\n        return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n      }\n    });\n  }\n  function makeInvokeMethod(e, r, n) {\n    var o = h;\n    return function (i, a) {\n      if (o === f) throw new Error(\"Generator is already running\");\n      if (o === s) {\n        if (\"throw\" === i) throw a;\n        return {\n          value: t,\n          done: !0\n        };\n      }\n      for (n.method = i, n.arg = a;;) {\n        var c = n.delegate;\n        if (c) {\n          var u = maybeInvokeDelegate(c, n);\n          if (u) {\n            if (u === y) continue;\n            return u;\n          }\n        }\n        if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n          if (o === h) throw o = s, n.arg;\n          n.dispatchException(n.arg);\n        } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n        o = f;\n        var p = tryCatch(e, r, n);\n        if (\"normal\" === p.type) {\n          if (o = n.done ? s : l, p.arg === y) continue;\n          return {\n            value: p.arg,\n            done: n.done\n          };\n        }\n        \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n      }\n    };\n  }\n  function maybeInvokeDelegate(e, r) {\n    var n = r.method,\n      o = e.iterator[n];\n    if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n    var i = tryCatch(o, e.iterator, r.arg);\n    if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n    var a = i.arg;\n    return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n  }\n  function pushTryEntry(t) {\n    var e = {\n      tryLoc: t[0]\n    };\n    1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n  }\n  function resetTryEntry(t) {\n    var e = t.completion || {};\n    e.type = \"normal\", delete e.arg, t.completion = e;\n  }\n  function Context(t) {\n    this.tryEntries = [{\n      tryLoc: \"root\"\n    }], t.forEach(pushTryEntry, this), this.reset(!0);\n  }\n  function values(e) {\n    if (e || \"\" === e) {\n      var r = e[a];\n      if (r) return r.call(e);\n      if (\"function\" == typeof e.next) return e;\n      if (!isNaN(e.length)) {\n        var o = -1,\n          i = function next() {\n            for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n            return next.value = t, next.done = !0, next;\n          };\n        return i.next = i;\n      }\n    }\n    throw new TypeError(_typeof(e) + \" is not iterable\");\n  }\n  return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n    value: GeneratorFunctionPrototype,\n    configurable: !0\n  }), o(GeneratorFunctionPrototype, \"constructor\", {\n    value: GeneratorFunction,\n    configurable: !0\n  }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n    var e = \"function\" == typeof t && t.constructor;\n    return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n  }, e.mark = function (t) {\n    return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t;\n  }, e.awrap = function (t) {\n    return {\n      __await: t\n    };\n  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n    return this;\n  }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n    void 0 === i && (i = Promise);\n    var a = new AsyncIterator(wrap(t, r, n, o), i);\n    return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n      return t.done ? t.value : a.next();\n    });\n  }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n    return this;\n  }), define(g, \"toString\", function () {\n    return \"[object Generator]\";\n  }), e.keys = function (t) {\n    var e = Object(t),\n      r = [];\n    for (var n in e) r.push(n);\n    return r.reverse(), function next() {\n      for (; r.length;) {\n        var t = r.pop();\n        if (t in e) return next.value = t, next.done = !1, next;\n      }\n      return next.done = !0, next;\n    };\n  }, e.values = values, Context.prototype = {\n    constructor: Context,\n    reset: function reset(e) {\n      if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);\n    },\n    stop: function stop() {\n      this.done = !0;\n      var t = this.tryEntries[0].completion;\n      if (\"throw\" === t.type) throw t.arg;\n      return this.rval;\n    },\n    dispatchException: function dispatchException(e) {\n      if (this.done) throw e;\n      var r = this;\n      function handle(n, o) {\n        return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n      }\n      for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n        var i = this.tryEntries[o],\n          a = i.completion;\n        if (\"root\" === i.tryLoc) return handle(\"end\");\n        if (i.tryLoc <= this.prev) {\n          var c = n.call(i, \"catchLoc\"),\n            u = n.call(i, \"finallyLoc\");\n          if (c && u) {\n            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n          } else if (c) {\n            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n          } else {\n            if (!u) throw new Error(\"try statement without catch or finally\");\n            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n          }\n        }\n      }\n    },\n    abrupt: function abrupt(t, e) {\n      for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n        var o = this.tryEntries[r];\n        if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n          var i = o;\n          break;\n        }\n      }\n      i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n      var a = i ? i.completion : {};\n      return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n    },\n    complete: function complete(t, e) {\n      if (\"throw\" === t.type) throw t.arg;\n      return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n    },\n    finish: function finish(t) {\n      for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n        var r = this.tryEntries[e];\n        if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n      }\n    },\n    \"catch\": function _catch(t) {\n      for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n        var r = this.tryEntries[e];\n        if (r.tryLoc === t) {\n          var n = r.completion;\n          if (\"throw\" === n.type) {\n            var o = n.arg;\n            resetTryEntry(r);\n          }\n          return o;\n        }\n      }\n      throw new Error(\"illegal catch attempt\");\n    },\n    delegateYield: function delegateYield(e, r, n) {\n      return this.delegate = {\n        iterator: values(e),\n        resultName: r,\n        nextLoc: n\n      }, \"next\" === this.method && (this.arg = t), y;\n    }\n  }, e;\n}","export default function _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n  return _setPrototypeOf(o, p);\n}","import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nexport default function _slicedToArray(arr, i) {\n  return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n  if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = !0,\n      o = !1;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) {\n        if (Object(t) !== t) return;\n        f = !1;\n      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = !0, n = r;\n    } finally {\n      try {\n        if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}","export default function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","export default function _taggedTemplateLiteral(strings, raw) {\n  if (!raw) {\n    raw = strings.slice(0);\n  }\n  return Object.freeze(Object.defineProperties(strings, {\n    raw: {\n      value: Object.freeze(raw)\n    }\n  }));\n}","import arrayWithoutHoles from \"./arrayWithoutHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableSpread from \"./nonIterableSpread.js\";\nexport default function _toConsumableArray(arr) {\n  return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _arrayWithoutHoles(arr) {\n  if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}","export default function _iterableToArray(iter) {\n  if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}","export default function _nonIterableSpread() {\n  throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : String(i);\n}","import _typeof from \"./typeof.js\";\nexport default function toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}","export default function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nexport default function _unsupportedIterableToArray(o, minLen) {\n  if (!o) return;\n  if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n  var n = Object.prototype.toString.call(o).slice(8, -1);\n  if (n === \"Object\" && o.constructor) n = o.constructor.name;\n  if (n === \"Map\" || n === \"Set\") return Array.from(o);\n  if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}","var isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n    if (condition) {\n        return;\n    }\n    if (isProduction) {\n        throw new Error(prefix);\n    }\n    var provided = typeof message === 'function' ? message() : message;\n    var value = provided ? \"\".concat(prefix, \": \").concat(provided) : prefix;\n    throw new Error(value);\n}\n\nexport { invariant as default };\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n  return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose;\n    if (async) {\n        if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n        dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n        if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n        dispose = value[Symbol.dispose];\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  function next() {\n    while (env.stack.length) {\n      var rec = env.stack.pop();\n      try {\n        var result = rec.dispose && rec.dispose.call(rec.value);\n        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n      }\n      catch (e) {\n          fail(e);\n      }\n    }\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"evite:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"chunk.\" + chunkId + \"--\" + \"f410ddc\" + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"//g0.evitecdn.com/static/_build/webpack_bundles/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2118: 0,\n\t6744: 0,\n\t9013: 0,\n\t5649: 0,\n\t7272: 0,\n\t1248: 0,\n\t3203: 0,\n\t1447: 0,\n\t6705: 0,\n\t9163: 0,\n\t488: 0,\n\t2777: 0,\n\t2581: 0,\n\t7856: 0,\n\t1066: 0,\n\t7122: 0,\n\t6681: 0,\n\t176: 0,\n\t4448: 0,\n\t2531: 0,\n\t1653: 0,\n\t2147: 0,\n\t7111: 0,\n\t3131: 0,\n\t6445: 0,\n\t5344: 0,\n\t106: 0,\n\t9965: 0,\n\t5037: 0,\n\t5720: 0,\n\t1292: 0,\n\t794: 0,\n\t7991: 0,\n\t7297: 0,\n\t6629: 0,\n\t5712: 0,\n\t4725: 0,\n\t4523: 0,\n\t615: 0,\n\t8060: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkevite\"] = self[\"webpackChunkevite\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","/* public-path Sets the cdn path of the chunks.  Must come first in this file */\nimport '~/common/public-path';\n\nimport {useEffect, useState} from 'react';\nimport ReactDom from 'react-dom';\nimport {useSelector, Provider} from 'react-redux';\nimport {Router, Route, Switch, Redirect, useLocation} from 'react-router-dom';\nimport {ToastContainer, toast} from 'react-toastify';\nimport {ModalProvider} from 'react-modal-hook';\nimport {TransitionGroup} from 'react-transition-group';\nimport {Confirmation} from './routes/Confirmation';\nimport {LandingPage} from './routes/Landing';\nimport {PickGiftKeywords} from './routes/Gifts';\nimport {reducer as giftKeywordsReducer} from '../common/gift-keywords/reducer';\nimport {Photos} from './routes/Photos/Photos';\nimport {AllComments} from './routes/Photos/AllComments';\nimport {createInvitationStore} from './reducers';\nimport {initInvitationSummary, fetchAvatars} from './reducers/apiActions';\nimport {initUser} from './reducers/user';\nimport {initCoverData} from './reducers/coverData';\nimport {initPremiumDesign} from './reducers/premiumDesign';\nimport {initRsvp} from './reducers/rsvp';\nimport 'react-toastify/dist/ReactToastify.min.css';\nimport {Messages} from './routes/Messages';\nimport {authenticateToTsunami} from '~/messaging/utils/tsunamiAuth';\nimport {useTrackPages, trackRouteChange, extractTab} from './utils/trackPages';\nimport {history} from './history';\nimport {preloadROKT} from '~/ViewInvitation/common/ROKT';\nimport {isPreview} from '~/ViewInvitation/utils';\nimport {StickyEditEvent} from '~/ViewInvitation/common/StickyEditEvent';\nimport {selectEventHasRsvp, setEviteEvent} from './reducers/eventDetails';\n\nconst store = createInvitationStore({});\n\ninitInvitationSummary(store);\nstore.dispatch(initUser(window.viewingUser));\nstore.dispatch(initCoverData(window.cover_data));\nstore.dispatch(setEviteEvent(window.evite_event));\nstore.dispatch(initRsvp(window.evite_event.rsvp));\nstore.dispatch(fetchAvatars());\nstore.dispatch(giftKeywordsReducer);\nif (window.evite_event?.origin === 21) {\n  if (window.evite_event?.options?.design) {\n    store.dispatch(initPremiumDesign({premiumDesign: window.evite_event.options.design}));\n  }\n} else if (window.inviteData) {\n  store.dispatch(initPremiumDesign({inviteData: window.inviteData}));\n}\nauthenticateToTsunami();\n\nfunction TrackRouteChanges() {\n  useTrackPages();\n  return null;\n}\n\nfunction Redirector() {\n  // Redirect based on query parameters on first render.\n  const location = useLocation();\n  const [firstRender, setFirstRender] = useState(true);\n  const eventHasRsvp = useSelector(selectEventHasRsvp);\n  const hasRsvpd = useSelector((store) => store.rsvp?.hasRsvpd);\n  useEffect(() => {\n    const tab = extractTab(location.pathname);\n    trackRouteChange(tab);\n    setFirstRender(false);\n  }, []);\n\n  const [showStickyRsvp, setShowStickyRsvp] = useState();\n  useEffect(() => {\n    if (location.pathname !== '/messages' && !location.pathname.startsWith('/messages/')) {\n      setShowStickyRsvp(false);\n    } else if (!showStickyRsvp) {\n      // this condition is here so we don't auto-remove the sticky RSVP when\n      // the guest RSVP's; this is to make sure the redirect in RSVPModal\n      // still occurs\n      setShowStickyRsvp(!preview && eventHasRsvp && !hasRsvpd);\n    }\n  }, [hasRsvpd, preview, location.pathname, eventHasRsvp]);\n\n  // If not in preview mode, AND in messages module, AND can RSVP, and has NOT RSVP'd, auto-show sticky RSVP and auto-open RSVP modal\n  const preview = isPreview();\n  if (showStickyRsvp) {\n    return <StickyEditEvent forceShow />;\n  }\n\n  if (firstRender) {\n    const params = new URLSearchParams(location.search);\n    const utm_campaign = params.get('utm_campaign');\n    const state = {fromEmail: true};\n\n    if (location.pathname === '/gifts' && !window.evite_event?.is_host_viewing)\n      // Mobile Guests are redirected away from the gift page url...\n      return (\n        <Redirect\n          to={{\n            pathname: '/#gift-keywords',\n            search: params.toString(),\n            state,\n          }}\n        />\n      );\n\n    if (eventHasRsvp && utm_campaign) {\n      for (const response of ['yes', 'maybe', 'no'])\n        if (utm_campaign.indexOf(`${response}_bt`) >= 0) state.rsvp = response;\n\n      if (state.rsvp) {\n        params.delete('utm_campaign');\n        return <Redirect to={{pathname: '/rsvp', search: params.toString(), state}} />;\n      }\n    }\n  }\n  return null;\n}\n\nfunction ViewInvitationApp({readonly}) {\n  useEffect(() => {\n    preloadROKT();\n  }, []);\n\n  return (\n    <Provider store={store}>\n      <ModalProvider rootComponent={TransitionGroup}>\n        <Router history={history}>\n          <TrackRouteChanges />\n          {/* <StickyRSVP /> */}\n          <Redirector />\n          <Switch>\n            <Route path=\"/gifts\" component={PickGiftKeywords} />\n            <Route path=\"/messages\" component={Messages} />\n            <Route path=\"/frp/:type\" component={Confirmation} />\n            <Route path=\"/photos?:query\" component={AllComments} />\n            {/* <Route path=\"/photos/select-photos\" component={StagedPhotos} /> */}\n            {/* <Route */}\n            {/*  path=\"/photos/select-photos?:query\" */}\n            {/*  component={StagedPhotos} */}\n            {/* /> */}\n            <Route path=\"/photos/:postId\" component={AllComments} />\n            <Route path=\"/photos/:postId/?:query\" component={AllComments} />\n            <Route path=\"/photos\" component={Photos} />\n            <Route\n              path=\"/\"\n              render={(props) => (\n                <LandingPage {...props} readonly={readonly} isViewInvitationPage />\n              )}\n            />\n            <Route\n              path=\"*\"\n              render={(props) => {\n                toast(<p>URL {props.match.url} not found - redirecting</p>);\n                return <Redirect to=\"/\" />;\n              }}\n            />\n          </Switch>\n        </Router>\n        <ToastContainer\n          position=\"bottom-right\"\n          autoClose={6000}\n          hideProgressBar\n          newestOnTop={false}\n          closeOnClick\n          rtl={false}\n          pauseOnFocusLoss\n          draggable\n          pauseOnHover\n        />\n      </ModalProvider>\n    </Provider>\n  );\n}\nwindow.toast = toast;\n\nReactDom.render(<ViewInvitationApp readonly />, document.getElementById('inviteRoot'));\n"],"names":["compose","funcs","_i","arguments","length","arg","reduce","a","b","args","apply","toHashMapString","obj","Object","keys","forEach","k","JSON","stringify","String","toHashMap","isError","error","message","getStacktrace","stacktrace","_a","split","filter","line","stack","_b","urlEncode","object","map","key","concat","encodeURIComponent","join","isNodeEnv","prototype","toString","call","process","getGlobalObject","g","window","self","Serializable","data","this","_data","toJSON","serialize","Environment","transport","origin","globals","location","protocol","hostname","jest","XDomainRequest","XMLHttpRequest","fetch","supportsPromises","resolve","Promise","r","XDomainTransport","url","send","_this","reject","req","rx","RegExp","onload","open","replace","setTimeout","e","XHRTransport","req_1","onreadystatechange","readyState","DONE","FetchTransport","headers","res","statusText","label","method","body","sent","ok","NodeTransport","https","options","then","request","on","write","end","catch","reason","console","warn","PushApi","_uri","uri","_apiKey","_clientVersion","version","_transport","_createTransport","_url","push","span","auth","_authorization","api_key","Span","_super","timestamp","Math","round","Date","getTime","namespace","name","backtrace","setAction","action","setNamespace","setError","setTags","tags","setParams","params","setBreadcrumbs","breadcrumbs","Queue","clear","values","item","Array","isArray","drain","shift","Dispatcher","queue","api","_retries","_timerID","_duration","_api","_queue","limit","initialDuration","reset","schedule","time","expDuration","e_2_1","e_2","_c","_d","trys","next","done","value","floor","pow","return","Appsignal","VERSION","ignored","_breadcrumbs","_hooks","decorators","overrides","_env","revision","ignoreErrors","info","_dispatcher","_options","tagsOrFn","Error","some","el","test","error_1","_createSpanFromError","sendError","use","plugin","createSpan","fn","environment","wrap","e_1","addDecorator","decorator","addOverride","override","demo","path","demo_sample","addBreadcrumb","breadcrumb","crumb","metadata","category","pop","unshift","event","__assign","assign","t","s","i","n","p","hasOwnProperty","ctx","opts","onerror","onunhandledrejection","prev","onError","unhandledRejection","source","lineno","colno","_reasonFromEvent","seenValue","seenKey","indexOf","abs","fromCharCode","trim","pattern","replacement","indexof","search","index","charCodeAt","begin","slice","array","column","position","character","characters","node","root","parent","type","props","children","peek","caret","token","alloc","dealloc","delimit","delimiter","whitespace","escaping","count","commenter","identifier","COMMENT","callback","output","element","compile","parse","rule","rules","rulesets","pseudo","points","declarations","offset","atrule","property","previous","variable","scanning","ampersand","reference","comment","declaration","ruleset","post","size","j","x","y","z","identifierWithPointTracking","fixedElements","WeakMap","compat","isImplicitRule","get","set","parsed","toRules","getRules","parentRules","removeLabel","hash","defaultStylisPlugins","exec","createCache","ssrStyles","document","querySelectorAll","getAttribute","head","appendChild","setAttribute","container","_insert","stylisPlugins","inserted","nodesToHydrate","attrib","currentSheet","collection","finalizingPlugins","insert","serializer","selector","serialized","sheet","shouldCache","styles","cache","nonce","speedy","prepend","insertionPoint","registered","hydrate","murmur2","str","h","len","reactPropsRegex","prop","undefined","memoize","create","EmotionCacheContext","HTMLElement","CacheProvider","Provider","withEmotionCache","func","forwardRef","ref","useContext","ThemeContext","typePropName","createEmotionProps","newProps","Insertion","_ref","isStringTag","Emotion$1","cssProp","css","WrappedComponent","registeredStyles","className","jsx","argsLength","createElementArgArray","E","c","_len","_key","keyframes","insertable","anim","classnames","cls","toAdd","serializedArr","ClassNames","w","content","cx","_len2","_key2","rawClassName","merge","theme","T","ele","unitlessKeys","animationIterationCount","aspectRatio","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","fontWeight","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","WebkitLineClamp","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","toLowerCase","processStyleValue","match","p1","p2","cursor","handleInterpolation","mergedProps","interpolation","__emotion_styles","string","interpolated","createStringFromObject","previousCursor","result","cached","labelPattern","serializeStyles","stringMode","strings","raw","lastIndex","identifierName","StyleSheet","_insertTag","tag","before","nextSibling","firstChild","insertBefore","isSpeedy","ctr","_proto","nodes","createElement","createTextNode","createStyleElement","styleSheets","ownerNode","sheetForTag","insertRule","cssRules","flush","parentNode","removeChild","useInsertionEffect","useInsertionEffectAlwaysWithSyncFallback","getRegisteredStyles","classNames","registerStyles","insertStyles","current","exports","React","emptyFunction","emptyFunctionWithReset","resetWarningCache","module","propTypes","shim","propName","componentName","propFullName","secret","err","getShim","isRequired","ReactPropTypes","bool","number","symbol","any","arrayOf","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","factoryWithThrowingShims","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","_objectSpread2","target","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","Symbol","iterator","constructor","configurable","writable","_slicedToArray","arr","_arrayWithHoles","_s","_e","_arr","_n","_iterableToArrayLimit","o","minLen","_arrayLikeToArray","from","_unsupportedIterableToArray","TypeError","_nonIterableRest","arr2","usePrevious","useRef","useEffect","isUnknownObject","PLAIN_OBJECT_STR","isEqual","left","right","leftArray","leftPlainObject","leftKeys","rightKeys","keySet","allKeys","l","every","extractAllowedOptionsUpdates","prevOptions","immutableKeys","newOptions","isUpdated","includes","validateStripe","maybeStripe","elements","createToken","createPaymentMethod","confirmCardPayment","parseStripeProp","isPromise","stripePromise","stripe","ElementsContext","createContext","displayName","Elements","rawStripeProp","useMemo","_React$useState2","useState","setContext","isMounted","safeSetContext","prevStripe","updates","update","anyStripe","_registerWrapper","registerAppInfo","useElementsContextWithUseCase","useCaseMessage","useCase","parseElementsContext","ElementsConsumer","_ref2","useCallbackReference","cb","noop","createElementComponent","isServer","charAt","toUpperCase","Element","id","_ref$options","_ref$onBlur","onBlur","_ref$onFocus","onFocus","_ref$onReady","onReady","_ref$onChange","onChange","_ref$onEscape","onEscape","_ref$onClick","onClick","_ref$onLoadError","onLoadError","_ref$onLoaderStart","onLoaderStart","elementRef","domNode","callOnReady","callOnBlur","callOnFocus","callOnClick","callOnChange","callOnEscape","callOnLoadError","callOnLoaderStart","useLayoutEffect","mount","destroy","__elementType","AuBankAccountElement","CardElement","CardNumberElement","CardExpiryElement","CardCvcElement","FpxBankElement","IbanElement","IdealBankElement","P24BankElement","EpsBankElement","PaymentElement","PaymentRequestButtonElement","LinkAuthenticationElement","ShippingAddressElement","AffirmMessageElement","AfterpayClearpayMessageElement","useElements","useStripe","factory","isMobile","disableAutoOpenEditor","dispatch","useDispatch","useCallback","section","UPDATE_DESIGN_OPTIONS","payload","currentSection","editingMobile","CARD_DESIGN","ENVELOPE_LINER","STAMP","BACKGROUND","KEYBOARD","FONT_STYLE","FONT_SIZE","TEXT_FORMAT","SPACING","COLOR","UYO","family","image","style","weight","rsvpDrawer","eventId","eviteType","guestId","saveReactionCallback","reacted","setReacted","selectReaction","setSelectReaction","viewerIsNotHost","animate","useEmojiBurstAnimation","submit","useRecipientReaction","handleReaction","reaction","querySelector","paddingBottom","toastAlert","icon","PB_AlertLine","Button","variant","fullWidth","evite","cookie","accept","credentials","guest_id","response","json","animMatrix","ang","scale","matchMedia","smallAndUp","matches","getElementById","getBoundingClientRect","top","clientY","newElement","cssText","innerHTML","transition","classList","remove","useLocation","history","useHistory","URLSearchParams","append","pathname","state","saveReaction","AddToCalendar","isButton","isPreview","preview","text","title","ratio","menuOpen","setMenuOpen","menuTop","setMenuTop","scrollY","setScrollY","browserWidth","useBrowserWidth","browserHeight","useBrowserHeight","handleSelectAppleOrOutlookCalendar","preventDefault","utils","downloadCalendarEvent","createAddToCalendarModal","show","href","event_id","EviteModal","width","urls","evite_event","url_parameters","is_mobile","watchCalendarMenuClick","calendarOptionsMenu","contains","timeoutId","watchScrollY","clearTimeout","addEventListener","removeEventListener","offsetY","offsetTop","innerHeight","disabled","PB_CalendarLine","color","pebble","tanzanite","Typography","calendar_urls","google_cal_url","Google","Apple","Outlook","defaultProps","Avatar","colors","userId","avatar","useSelector","selectAvatar","shallowEqual","AMP_SEPARATED_PATTERN","initials","guestName","strippedGuestName","after","strParts","firstLetter","lastLetter","getAvatarInitials","icon_id","AVATAR_COLORS","eviteBlue","border","backgroundImage","backgroundColor","to","dataQaId","InvitationLink","ArrowIconReinvention","direction","padNumber","num","getDateDelta","countdown","date_format","log","intervalID","setInterval","tick","clearInterval","nextProps","nextState","startTime","setState","date","days","hours","minutes","seconds","expired","milliseconds","XDate","mobile","fontFamily","mobile_font_family","mobile_position","fontSize","mobile_font_size","mobile_font_color","rel","Component","hasRsvpd","setUpdatingRsvp","setWipRsvpStatus","setRsvpOverlayOpen","isPremium","setShowSwirl","commentId","showCount","dataQaIdModifier","handleSetEditing","showEditIfAllowed","store","useStore","selectPost","userIdFromStore","user","hasRSVPd","rsvp","whenPosted","when","canUserEdit","showIconRow","commenterName","likedBy","likeCount","TimeSince","deletePost","LikeButton","postId","Link","isOpen","onClose","optionsList","showCancel","extraProps","Modal","destructive","showDontShowAgain","showRemindMeLater","cookieName","storage","getStorage","now","storageItem","isHidden","getItem","parseInt","dismissedGroundHogs","pushedNotification","dataLayer","dismissModal","duration","setTime","setItem","hideModal","onExited","bodyOpenClassName","features","GHM_TIMEOUT","parseFloat","combinedProps","defaultModalProps","overlayClassName","closeTimeoutMS","ReactModal","setAppElement","PollChoiceOverlay","add","choice","guests","PB_CloseLine","Divider","guest","guest_name","word","generateGuestInitials","classname","_ROKT_PRELOADED","preloadROKT","_","_ROKT_","lc","it","onLoaded","async","src","getElementsByTagName","rokt","init","skipInitialSelection","onFailure","iframe","pageIdentifier","attributes","clientData","cd","client_data","setAttributes","emailmd5","emailMd5","emailsha256","emailSha256","gender","user_gender","zipcode","user_zip_code","city","geo_city","geo_region","country","geo_country","conversiontype","event_type","clientcustomerid","eventid","eventcity","event_city","eventstate","event_state","eventzipcode","event_zip","eventdate","event_day","distance","event_guest_distance","userstatus","event_step","daysaway","event_days_until","sandbox","roktSandbox","onPositiveEngagement","email","triggerPageChange","closeAll","RSVPModal","largeScreens","useMatchQuery","largishAndUp","isSMSInvite","inviteMethod","guestEmail","showNotifyMarketing","rsvpdAdults","totalAdults","rsvpdKids","totalKids","rsvpdOptin","optin","rsvpdOutout","optout","notificationOptions","notifications","allowKids","eventDetails","maxAdditionalGuests","maxGuests","allowGuestsToBringMoreGuests","allowGuests","allowGuestsToInviteMore","allowInviteMore","allowGuestsToInvite","guestOf","isPrivateGuestlist","whoIsComing","usedAs","isSaveTheDate","isSaveTheDateByUsedAs","notificationsSubscribed","push_new_comments","push_new_rsvp","email_new_comments","notify_only_my_activity","replyAsName","setReplyAsName","replyAsEmail","setReplyAsEmail","rsvpComment","setRsvpComment","eventNotifications","setEventNotifications","marketingNotifications","setMarketingNotifications","email_new_rsvp","notifyGuestRSVPs","setNotifyGuestRSVPs","editOn","setEditOn","notYou","setNotYou","forceRSVPForm","setForceRSVPForm","numAdults","setNumAdults","numKids","setNumKids","rsvpDone","setRsvpDone","marginTop","marginBottom","status","Input","placeholder","Counter","onPlus","onMinus","Checkbox","checked","processingChildren","validateEmail","valid","adults_in_party","kids_in_party","comments","notification_options","notify_only_my_activity_push","notify_game","onSubmitRSVP","RegistryVendor","iconUrl","registry","icon_url","vendorName","vendor_name","registryUrl","alt","displayText","doneLoading","_savedPositions","scrollTo","startsWith","scrollX","EVENT_REMINDER_CHOICES","SettingsOverlay","notifyActivityInvolvingMe","setNotifyActivityInvolvingMe","notifyEventActivities","setNotifyEventActivities","showAddAnotherReminder","setShowAddAnotherReminder","enableAnotherReminder","setEnableAnotherReminder","reminder1","setReminder1","reminder2","setReminder2","remindersDisabled","eviteEvent","event_option_disable_event_reminders","notificationDefaults","activityInvolvingMe","eventActivities","guestRSVPs","reminders","reminder","find","filterForUpcomingTimes","eventDate","isHost","Select","v","option","onSave","forceShow","hostIds","host_ids","pendingHostIds","pending_host_ids","isCohost","user_id","isHostOrCohost","host_id","rsvpOff","isWebview","gid","userData","getUserData","userName","hasGuestReacted","hideGuestReactions","setHideGuestReactions","eventStatus","used_as","rsvpResponse","ctaWordings","getUsedAsTypeName","loadedDefaultRsvp","updatingRsvp","showSwirl","wipRsvpStatus","showRsvpOverlayOnLoad","rsvpOverlayOpen","eventHasPassed","selectEventHasPassed","eventIsCanceled","isCanceled","hideMore","setHideMore","atTop","setAtTop","toggleShowRSVP","substring","showReaction","showStickyBar","MoreDetailsIndicator","Swirl","qaId","GuestReaction","PB_CheckmarkCircle","emerald","PB_CloseCircle","feedbackNo","PB_QuestionCircle","feedbackMaybe","yes","maybe","no","GuestRsvpActions","as","submitRSVP","successCallback","failureCallback","getState","results","inverted","setInverted","intersectionCallback","entries","entry","isIntersecting","intersectionOptions","rootMargin","threshold","footer","observer","IntersectionObserver","observe","unobserve","eventHasRsvp","selectEventHasRsvp","extraClasses","require","rsvpButton","removeRsvpGateClass","innerText","inline","insertAt","formatTimestamp","utc_timestamp","getTimeSinceUTCDate","getTimeSince","val","substr","VendorDiscContent","disableClick","reversed","reversedClassName","LinkOut","gray6","active","bgAlpha","themeColor","lgWindow","checkForNewMessages","ptr","experiments","inVariation","showNotification","newMessages","hasNewMessages","colorToRgb","bgLightness","backToList","pendingSelections","isEditing","onAssign","onUnassign","processing","setProcessing","removeSelection","WTB_UPDATE_SELECTIONS","PB_Checkmark","autoClose","hideProgressBar","closeOnClick","pauseOnHover","draggable","progress","handleSaveSelections","assignPromises","selectedQuantity","all","PB_Arrow","EditSelectionItem","quantity","setQuantity","handleDropdownChange","optionsLength","optionsArr","existingSignup","selections","sel","max","remaining","PB_Delete","WtbOverlaySection","items","handleEditBtn","selected","setSelected","first_name","WhatToBringOverlay","loading","setLoading","whatToBring","mySignups","selection","sortedItems","sort","signup","WTB_TOGGLE_EDITING","EditSelection","WTB_RESET_SELECTIONS","last_name","NumGuests","replaceAll","WhoIsComingHeader","no_reply","query","onQueryChange","startAdornment","PB_SearchLine","allowAddGuests","addGuestsUrl","WhoIsComingOverlay","setQuery","openCommentEditor","setOpenCommentEditor","removeAds","yesRsvp","guestList","rsvpCounts","maybeRsvp","noRsvp","undecided","includeMaybe","replies","fetchGuestlist","d","event_option_allow_invite_more","isPast","showInviteMore","invite_more_url","Guestlist","rsvpDetails","preivew","eviteGold","eviteOrange","eviteMagenta","evitePurple","eviteTeal","darkBlue","darkOrange","darkMagenta","darkPurple","darkTeal","instanceCount","handleBlur","hasFocus","handleFocus","focus","handlePost","handleCommentSubmit","clearComment","handleChange","newValue","newPlainTextValue","mentions","plainValue","mentionUtils","toOurMentionFormat","hasChanged","fetchUsers","search_term","Accept","suggestions","display","primary_name","Raven","captureException","initialValue","fromOurMentions","initialContent","initialMentions","publicRef","clearFromParent","autoFocus","setComment","sortMentions","focusPlaceholder","singleLineInput","isOldStyle","defaultPlaceholder","defaultFocusPlaceholder","isEnabled","placeholderText","disablePostButton","list","minWidth","suggestionsOnTop","overflow","bottom","MentionsInput","singleLine","allowSpaceInQuery","Mention","trigger","appendSpaceOnAdd","first","last","newComment","PureComponent","start_end","mention","start","sortDir","ret","plainTextIndex","getWidth","innerWidth","documentElement","clientWidth","startingScale","stepSize","resolution","setWidth","resizeListener","debounce","useCurrentWidth","prevScale","minScale","isDone","maxScale","prevWidth","newIsDone","isOverflow","scrollHeight","offsetHeight","newMax","newMin","delta","min","createBrowserHistory","basename","getMessages","responseText","SET_NEW_MESSAGES","getAPI","apiFetcher","DELETE_POST","EDIT_POST","SET_AVATARS","actions","UPDATE_GUESTLIST","FETCH_PHOTOS","FETCH_SINGLE_PHOTO_POST","FETCH_WTB","summary","UPDATE_INVITATION_SUMMARY","summaryCallback","LIKED_POST","POST_REPLY","wtbListId","itemId","itemName","WTB_UPDATED","refresh","WTB_REMOVE_OTHER","WTB_REMOVE_USER_SIGNUP","isReaction","trackSubmitedRSVP","SUBMIT_RSVP","updateGuestId","updateUserId","updateRsvp","trackInviteRSVP","fetchAvatarsByUserId","fetchInvitationSummary","SUBMIT_RSVP_FAILED","UNLIKED_POST","settings","GUEST_NOTIFICATIONS_UPDATED","pollId","pollAction","POLL_VOTE_UPDATED","variation","getOrSetVariation","FETCH_INVITATION_SUMMARY_STARTED","FETCH_INVITATION_SUMMARY_FAILED","user_ids","UPDATE_AVATARS","dispatchActions","actionPayload","resource","startAction","successAction","failureAction","retries","contentType","initialState","avatars","data_layer","userAvatars","avatarsFetched","cover_data","INIT_COVER_DATA","template","donation","donations","DONATION_MADE","donationAddedCents","donationUrl","findIndex","donation_url","amount_raised_cents","total_donors","TURN_ON_DONATION_LOADING","TURN_OFF_DONATION_LOADING","SET_EVITE_EVENT","event_reminder_0","event_reminder_1","_evite_event","allowGifts","event_option_show_gifting","event_option_allow_guest_number","event_option_allow_kids","design","eventType","fabric_design_data","fabricDesignWithTextBorderObjectsRemoved","fabricDesignWithCrossOriginUpdates","hasDonations","Boolean","pledgeling_id","pledgeling_purpose","hasPassed","event_has_passed","is_fabric_premium","event_option_max_guest_number","maxTotalGuests","event_option_max_guests","pledgeling_data","pledgeling_added","pledgeling_beneficiary","pledgeling_beneficiary_type","pledgeling_category","pledgeling_goal","privateGuestlist","event_option_private_guestlist","registriesData","gift_registries_data","remove_ads","rsvp_off","rsvpStyle","rsvp_style","shortLink","shortlink","videoId","event_videos_id","widgets","isInvite","is_invite","host_name","sentTo","details","event_details","hostName","hostUserId","host_user_id","locationName","location_name","messageFromHost","message_from_host","streetAddress","street_address","zipCode","zip_code","guestsOfHonor","guests_of_honor","phoneNumber","host_phone","EVENT_REMINDERS_UPDATED","TURN_ON_READONLY_PREVIEW","readonly","isRsvpOff","who","isProUser","isPartyPassUser","EVENT_OPTIONS_UPDATED","SET_FABRIC_DESIGN","originalFabricArt","fabricArt","backgroundId","silver","stampId","envelopeId","linerId","envelopeStickers","Sections","loaded","touched","pristine","pristineUyo","hasTextbox","editingUyoMobile","textAreaOpen","savingStep","forceShowOnboardingModal","uyoImageId","uyoImagePath","_first_matching_art","art","category_list","fabricDesign","premiumFeaturesPristine","premiumFeaturesWarning","ignorePremiumWarning","editorDisabled","fabricTemplate","allEnvelopes","envelope","allStamps","stamp","allLiners","liner","allBackgrounds","bg","editable_art","category_event_type","background","backgrounds","background_color","stamps","envelopes","liners","envelope_fabric_stickers","custom_image_id","gifting","messaging","stores","YES","NO","MAYBE","canGuestsShare","rsvp_details","rsvp_counts","adults_yes","adults_maybe","kids_yes","kids_maybe","createStoreWithMiddleware","rootReducer","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","applyMiddleware","thunk","composeEnhancers","createStore","orderedModules","display_order","m","idx","splice","displayOrder","has_unread","photos","posts","post_type","more","photoPostIds","photo","ADD_PENDING_PHOTO","photosToUpload","file","ADD_STAGED_PHOTO","staged","failed","photoId","stagedCount","counter","SET_FILE_FAILED","stagedWithFailed","errorCount","CLEAR_PENDING_PHOTOS","TOGGLE_PHOTO_SELECTED","newStaged","INIT_APP","event_widgets","polls","CREATE_EDIT_POLL","hasSubmittedRSVP","poll","question","Id","optionSelectedByUser","newPosts","_rsvpsFromGuestList","post_id","_extractPost","reply","parentPostId","parentPost","replyPost","replyId","replyIds","updatedPost","filteredReplies","objects","singlePost","parentId","liked_by","creator","photoUrl","creator_id","rsvp_comment","creatorName","viewDate","date_viewed","rsvp_when","comment_when","created","parent_id","postType","INIT_PREMIUM_DESIGN","premiumDesign","inviteData","name_style","openBack","envelope_flap_up","closedBack","envelope_flap_down","closedFront","envelope_front","stamp_image","imageDesktop","background_image_desktop","imageMobile","background_image_mobile","liner_image","invitation","customImage","inserts","combineReducers","moduleOrder","whatToBringSummary","photoPosts","photoSummary","coverData","giftKeywords","photoUploads","gift_registry","registries","INIT_RSVP","evc_h","evc_s256l","number_of_adults","number_of_kids","inGuestlist","invite_method","email_md5","email_sha256","photoIds","photoComment","captcha","doPostPhotos","formData","FormData","uploadXhr","$","ajax","processData","fail","jqXHR","textStatus","errorThrown","handleCaptcha","fetchSinglePhotoPost","photoCount","always","GCS_PATH_IDS","feed_photos","photo_id","redirect","mimetype","request_access","upload_request","upload_file_gcs","getImageKeyFromPath","gcs_path","finally","viewingUser","INIT_FROM_CLIENT_DATA","isRegistered","is_registered_user","wtb","wtb_lists","creatorId","allowOther","allow_other_items","foundSelection","updatedSelections","filteredSelections","WTB_ADDED_OTHER","participantsList","what_to_bring","listId","list_id","wtbItems","participants","item_id","wic","who_is_coming","private_guestlist","guestPreviews","guest_previews","adults","kids","rsvpWhen","guestOfHonor","guest_of_honor","ed","roktAttributes","viewInvitationUrl","viewInvitationUrlWithGuest","isFuneral","heading","eventHasRegistry","hasRegistry","showCheckList","triggerROKTOverlay","cleanupROKTOverlay","ScrollToTopOnMount","SuccessHeader","ctaText","cta","showImage","textClass","Checklist","isReskin","selectRsvp","addToCalendarUrl","CalendarReinvention","useParams","setReaction","URL","searchParams","has","theReaction","RSVPConfirmation","ReactionConfirmation","keywords","selectGiftKeywords","editKeywords","setEditKeywords","saving","setSaving","hasGiftKeywords","handleSave","types","DONE_SAVE_GIFT_KEYWORDS","renderAjaxErrorModal","Heading","keyword","maxLength","getGiftKeywordPlaceHolder","tmp","handleDel","handleAdd","onCommentEditorOpen","onCommentEditorClose","showAd","Fragment","ParentPost","isCommentOpen","copy","getAttendeeCopy","handleCommentClick","commentCount","postIdOfComment","handleClearComment","isEditingComment","editingIsFinished","handleCommentClose","shouldClearComment","hideClear","commentToPost","setCommentToPost","setClearComment","stickyHeader","currentComment","MentionEditor","addClass","editPostComment","postReply","removeClass","handleCommentOpen","setCommentPostId","isParentPost","isReply","isEditingThisComment","setIsEditingThisComment","thisPostId","currentUserId","smoothScroll","AttendeeCopy","LastViewedCopy","showViewDate","CommentButton","rsvps","filteredGuests","RsvpLabel","AllGuestPosts","trimmedDate","getLastViewedCopy","likedByThisUser","toggleLike","unlikePost","likePost","animateRSVPButton","PB_FavoritesFill","rose","PB_FavoritesLine","cloud","setPostIdOfComment","setIsEditingComment","initialComment","Guest","Replies","postIdToEdit","postBeingEdited","CommentEditor","Reply","ViewMoreRepliesButton","remainingReplyCount","showDeleteModal","setShowDeleteModal","deleteConfirmed","setDeleteConfirmed","ActionSheetModal","onAfterClose","rsvpCount","displayLabel","customLabel","selectRsvpStyle","hasCustomLabel","adultsCopy","hasKids","kidsCopy","viewMoreRepliesCopy","viewButton","hiddenPosts","showRemoveButton","connectCTA","showHeader","adUnit","mediumAndUp","GoogleAdUnitDesktop","GoogleAdUnitMW","elem","Diamond","showPremiumWebview","subscriptionPlanName","customImageURL","image_url","ViewCoverMobile","bonusClassNames","snake_template","assets","uyo","designTypeName","design_type_name","eventTitleColor","event_title_color","informationColor","information_color","specialFeatures","special_features","mobileImage","custom_css","customFonts","custom_fonts","uyoImageElement","useFitContainer","fitContainerRef","designHeight","setDesignHeight","designTemplateRef","dateTimesWithCurrentYear","start_formatted","end_formatted","eventImageStyle","designType","mediumScreens","setDesign","editArtworkClicked","setEditArtworkClicked","getFallbackImageUrl","thumb_slider","mobileImage_special_features","getRenderedPremiumImageUrl","rendered_image_url","distFromTop","theHeight","line_count","phone_number","end_datetime","showCustomLogo","custom_logo","logoHasBeenPaid","logoImgProps","layout","clickable","fonts","font","f","PremiumCarousel","height","Card","isFree","role","navigateToRoute","PB_EditLine","cf","CustomLogoImage","main_image_background","cityAddressLine","start_datetime","FreeEventCountdown","convertToIso","flexDirection","justifyContent","textAlign","endDate","startDate","_guestsOfHonor","justNames","guestsOfHonorLabel","timezoneAbbr","known_timezone_abbr","link","Label","FormattedDateString","LocationBlock","marginLeft","marginRight","HostMessage","pretty_format_phone_number","DonationSegment","found","firstName","lastName","hasDonation","tempUrl","pledgelingHost","partnerKey","onMessage","objMessage","amount","refreshFundraiser","script","PB_DeleteBinLine","isLoading","propDonation","isCreationFlow","sortedDonations","setSortedDonations","fundraiser_type","localeCompare","dateFirstLine","dateSecondLine","getFormattedDateStrings","calendarIconRatio","startDateTime","endDateTime","dateOptions","weekday","month","year","day","toLocaleDateString","endTime","giftingType","setIsOpen","experimentsEligibility","GroundhogModal","ToastModalHeading","RegistryModule","locationPrefix","inModal","RenderGifting","GiftingModule","vendorDiscDataQaId","isBottomSheet","showGiftKeywords","selectEvent","forceShowCTA","onRemove","restored","onPropagateRestore","giftingData","giftingOptions","gift_registry_urls","has_gift_registries","widget_type","hasWidget","getShowGiftKeywords","showGuestGiftlist","gift_list_url","getDiscDisplayText","targetURL","getTargetURL","GuestGiftlist","GuestKeywordsWidget","moduleTitle","getModuleHeaderText","Vendor","showAsRectangle","KeywordList","filledKeywords","lst","getGiftKeywordAmazonSearchLink","gift_keywords","VendorRect","VendorDisc","pristineHostMessage","readMoreRef","showReadMore","setShowReadMore","expanded","setExpanded","ResizeObserver","contentRect","disconnect","amazonTags","asc_campaign","asc_source","modifiedHostMessage","putAffiliateTags","sanitizeString","PB_Chevron","addressDataQaValue","PB_LocationAddressNavigationLine","moduleName","isLast","impressionEvent","acyclicalProps","tracking","trackingRef","useImpression","cloneElement","fileUploadRef","fileInputValue","setFileInputValue","handleError","handlePhotoUpload","click","images","files","stageAPhoto","multiple","isIcon","CameraAddIcon","buttonCopy","PB_AddPhotosLine","response_count","allowOtherOptions","allow_other_options","totalResponseCount","total_response_count","voted","option_selected_by_user","hasRSVPed","showMealOptions","isMealOptionsEventType","selectedChoice","setSelectedChoice","changingChoice","setChangingChoice","pollOverlayChoice","pollOverlayOpen","setPollOverlayOpen","guestsWhoVotedThis","PB_MealOptions","PB_PollLine","Radio","trackPollVote","voteForPollOption","noTextWrap","noOverlay","pollOptions","showMealOptionsEventType","isMealOptions","selectIsMealOptionsEventType","setInitialState","setPollOverlayChoice","setGuestsWhoVotedThis","changeChoice","relevantGuests","userChoice","response_user_ids","relevantGuestNames","allRsvps","filteredGuest","animationData","isStopped","isPaused","bodymovinAnimation","bodymovinAssets","LottiAnimation","fetchAnimationData","prevProps","prevState","snapshot","renderedTextImg","renderedTextImgStyle","lottiStyle","innerRef","loop","autoplay","renderer","rendererSettings","preserveAspectRatio","eventListeners","eventName","onLoadedHandler","Lottie","asset","u","invitee","isLotti","yourInvitationRef","yourInvitationSizeRef","inviteContainerRef","desktopInviteRef","envelopeWidthRef","fabricCardRef","stickerContainerRef","envelopeLoaded","setEnvelopeLoaded","isCard","inviteImg","contHeight","containerHeight","isFabric","scaleClass","imageRef","onLoad","CanvasStickers","configJson","setCanvas","page","setPage","firstRender","alreadyRanAnimation","containerRef","numPages","doSetPage","scrollLeft","replayButtonRef","replayAnimation","editArtworkBtn","webviewAnimReplay","envelopeAnimation","webviewAnimStart","animationFinished","webviewAnimFinish","onScroll","newPage","PremiumDesign","PremiumInsert","Video","CarouselDots","currentPage","PB_Triangle","pages","imageSize","detects","isIE","isEdge","MainAssetSlide","inviteImgHeight","inviteImgWidth","card_type","TextAsset","PhotoAsset","imageKey","image_key","textMarkup","linkifyHtml","dangerouslySetInnerHTML","__html","event_context","setIsLoading","videoData","setVideoData","fetchVideoData","segments","segment","CircleLoader","rendered_video","VideoPlayer","VideoRendering","is_viewable","published_video","preview_image_url","videoContRef","maxWidth","maxHeight","vidWidth","setVidWidth","videoPlaying","setVideoPlaying","playlist_url","content_type","progressReport","StyledPlayerWrapper","StyledBgDiv","backgroundImgUrl","StyledVideo","playing","onProgress","played","controls","light","styled","div","handleClickToPause","play","pause","lottie","loadAnimation","registerEvents","deRegisterEvents","stop","playSegments","setSpeed","setDirection","speed","eventListener","initial","ariaRole","ariaLabel","isClickToPauseDisabled","lottieStyles","margin","outline","onClickHandler","tabIndex","webkit","messageHandlers","animationStarted","postMessage","alert","webview","animationReplay","registryName","hasMultiple","urlParams","overlayOpen","setOverlayOpen","originalSettings","PB_SettingsLine","updateGuestNotificationSettings","responseJSON","dfp","inFrame","adOverride","googletag","cmd","pubads","slideshowSideAd","ad_override","Picture","srcSet","invitationPhotoAd","adSlotWidth","adSlotHeight","REFRESH_KEY","REFRESH_VALUE","defineSlot","compactUrl","DESKTOP_ID","DESKTOP_SLOT_1","DESKTOP_SLOT_2","setTargeting","addService","slot","getTargeting","SECONDS_TO_WAIT_AFTER_VIEWABILITY","inViewPercentage","viewability","trackAd","changeCorrelator","fetchWhatToBring","postWhatToBringSignup","PB_WhatToBringLine","ready","urlPieces","alignItems","placement","overlay","PB_Info","CrownIcon","hideDesign","hideRSVP","hideTabs","forceShowGuestOptions","showReturnToEdit","onReturnToEdit","hidePreviewBanner","hideGoogleAd","contentPanelWidth","contentPanelHeight","ctasToForceShow","isViewInvitationPage","backgroundRef","backgroundStyles","showGuestPoll","keysToComponentMap","DetailsModule","WhosComingModule","DonationsModule","PollModule","PollModuleHost","WhatToBringModule","PhotosModule","SettingsModule","TrackableModules","isVideo","isAllowedVideoFormat","hasAds","ViewInvitationGoogleAd","RestoreScrollPosition","ViewInvitationTabs","StickyEditEvent","AdPanel","DesignTemplate","getComponentFromKey","Module","GiftingModal","Messaging","keepHeaderSpacer","fetchInProgress","setFetchInProgress","postAvailable","reversedReplyIds","reverse","BackLink","Spinner","center","InlineComment","setDoneLoading","useInView","endPhotosRef","endPhotosInView","inView","fetchMorePhotos","PhotoUploadButton","updateStateWithFiles","SinglePhoto","imageHasLoaded","setImageHasLoaded","isPrimaryOpen","setIsPrimaryOpen","isSecondaryOpen","setIsSecondaryOpen","hasReplies","hasMoreComments","initialComments","thisPhotoPost","MoreIcon","onRequestClose","track_event","invite_rsvp_response","invite_rsvp_optin","pollEvent","colorStr","alpha","sqrt","getContext","fillStyle","RGBA","xhr","CaptchaDialog","challenge","onSubmit","responseJson","_response","captchaResponse","is_host_viewing","is_premium","is_mobile_site","is_card","hasStatus","isServerError","responseTextMessage","consoleTitle","modal_ajax_error_handler","is_preview","storageAvailable","removeItem","_storage","localStorage","sessionStorage","extractTab","components","trackRouteChange","tab","destination_url","previousTab","allowEmpty","fabricCreateOnNav","mountedRef","disableProcessing","stopPropagation","dataClipboardText","tight","onMouseEnter","onMouseLeave","formSubmit","htmlFor","plusDisabled","minusDisabled","PB_Minus","coin","charcoal","PB_Plus","DropdownIndicator","SingleValue","selectProps","getValue","CustomInput","readOnly","isClearable","times","setTimes","setTimeQAData","timeRef","inputRef","dataset","required","showOptionalLabel","tooltipContent","getTooltipContainer","provided","control","isFocused","isDisabled","paddingLeft","paddingRight","borderColor","feedbackError","borderWidth","fog","linen","indicatorSeparator","opt","menuPlacement","isSearchable","isValidNewOption","endAdornment","onKeyDown","autoComplete","rows","onKeyPress","onPaste","success","thickness","buttonClass","Overlay","overlayRef","modalId","handleClose","escHandler","closeOnEscKeyPress","handleOutsideClick","closeOnClickOutside","fullPage","popupWidth","overlayCloseBtnDataQAId","overlayDataImpressionTracking","srcSetArray","lastIndexOf","dropdownProps","Option","optionProps","selectOption","setOpen","onControlTouchEnd","userIsDragging","isCreatable","defaultValue","aquamarine","boxShadow","ghost","customStyles","textOverflow","whiteSpace","menu","borderRadius","padding","menuList","valueContainer","singleValue","isSelected","cottonCandy","menuHover","blur","Control","controlProps","innerProps","onMenuClose","menuIsOpen","onMenuOpen","Toast","buttonText","onButtonClick","onDismiss","inToastButtonConfig","toastFunc","toast","toastId","v4","dismiss","Colors","fontColor","mexican_opal","StyledDynamicComponent","DEFAULT_VIDEO_OPTIONS","autoPlay","muted","playsInline","videoRef","srcArray","reload","load","defaultMuted","preload","onCanPlay","saveUserDataToLocalStorage","full_name","isAuthenticated","subscription_plan_name","avatarDisk","avatar_disk","imgUrl","userDataObj","checkIfUserDataIsValid","isUserAuthenticated","isAdminNotLoggedIn","isAdmin","checkIfAdminIsLoggedIn","CaptchaWrapper","ttl","loadUserDataFromLocalStorage","user_initials","user_avatar_disk","user_img_url","captcha_event","retry","submitLogin","password","dataType","onCancel","submitRegistration","resp","numCaptchas","expires","canvasEl","canvasInstance","fabric","Canvas","includeDefaultValues","setZoom","initAligningGuidelines","setCurrentDimensions","canvasSizer","offsetWidth","getZoom","setDimensions","setViewportTransform","onChangeHandler","reviver","util","requestAnimFrame","render","renderAll","loadFromJSON","loadCanvas","dispose","redirectTo","useCanvasImage","isDesktop","isImageLoaded","setIsImageLoaded","isUyo","hasKeyword","hasTitleUyo","hasImgId","navigate","useNavigator","dynamicBgStyle","getImgBackgroundImage","backgroundSize","backgroundRepeat","backgroundImageUrl","originalUrl","isInCustomizeStep","isAnimated","endsWith","generateImage","dataUrl","delay","frameWidth","framesLength","imgOptions","Gif","fromURL","img","sprite","getElement","framesIndex","performance","naturalHeight","mode","_render","drawImage","dirty","getStatus","gif","maxDuration","gifToSprite","reader","FileReader","readAsArrayBuffer","arrayBuffer","frames","decompressFrames","parseGIF","dataCanvas","dataCtx","frameCanvas","frameCtx","spriteCanvas","spriteCtx","dims","acc","cur","ceil","frame","frameImageData","createImageData","patch","putImageData","disposalType","clearRect","toDataURL","canvas","getSelectionContext","aligningLineWidth","aligningLineColor","viewportTransform","drawHorizontalLine","coords","drawLine","x1","x2","y1","y2","save","lineWidth","strokeStyle","beginPath","moveTo","lineTo","stroke","restore","isInRange","value1","value2","verticalLines","horizontalLines","activeObject","canvasObjects","getObjects","activeObjectCenter","getCenterPoint","activeObjectLeft","activeObjectTop","activeObjectBoundingRect","getBoundingRect","activeObjectHeight","activeObjectWidth","horizontalInTheRange","verticalInTheRange","objectCenter","objectLeft","objectTop","objectBoundingRect","objectHeight","objectWidth","setPositionByOrigin","Point","clearContext","offsetX","cursorStyle","mouseUpHandler","eventData","transform","textsQty","clone","cloned","letterCasing","_originalObject","setActiveObject","canvasShowTextBordersAndIcons","canvasAddTextBorderAndIcon","renderIcon","PB_Duplicate","cornerSize","touchSizeX","touchSizeY","sizeX","sizeY","canvasRemoveTextBordersAndIcons","allObjects","allActiveObjects","getActiveObjects","rectObject","filterTextBoxes","containPicture","texts","textObjectsToBeRemoved","fill","fire","textObj","discardActiveObject","canvasAddTextBordersAndIcons","withConnection","actionName","PB_Rotation","actionHandler","controlsUtils","rotationWithSnapping","extend","Textbox","fromObject","stylesFromArray","objCopy","promises","allSettled","_fromObject","createClass","Image","initialize","extra","callSuper","toObject","propertiesToInclude","loadImage","fabricGif","capitalize","upper","lower","enterEditing","hiddenTextarea","_originalText","exitEditing","operation","TextBorder","Rect","textBorder","selectedTextbox","canvasObjs","textEditIcon","textbox","iconLeft","angle","editIcon","scaleX","scaleY","default","imgElement","activeObj","getActiveObject","isActive","matchingObject","fabricBorder","strokeDashArray","selectable","fabricImage","bringToFront","matchingObjects","totalMatchingObjects","textOrIcon","UYOImage","uyoImage","clipPath","klass","getKlass","setControlsVisibility","tl","mt","tr","ml","mr","bl","mb","br","mtr","hoverCursor","moveCursor","touchCornerSize","editingBorderColor","rotationControl","removeControl","cloneControl","transparentCorners","cornerStrokeColor","cornerColor","white","_renderBackgroundOrOverlay","StaticCanvas","_originalElement","jsonConfig","defaultDesktopHeight","DEFAULT_HEIGHT_DESKTOP","DEFAULT_WIDTH_DESKTOP","preserveObjectStacking","controlsAboveOverlay","DEFAULT_CARD_ZOOM","setImage","setLoaded","useCanvas","enableRetinaScaling","styleOverride","fabricObject","arc","PI","translate","rotate","degreesToRadians","discList","headerText","checklistData","gift_registry_vendors","defaultVendordisc","featuredUrl","checklistItems","PB_ClickOutLine","disc","classModifier","StyledDiv","_modalCount","onCloseClick","handleInsideClick","handleDocKeyUp","keyCode","dispatchEvent","CustomEvent","cssClass","modalClassName","centered","outerStyle","simpleStyle","wholePage","MountComponentOnBody","componentId","onMouseDown","animateButton","inlineInnerStyle","hideCloseButton","isEvent","video_id","ajaxVideoState","checkVideoState","progressTimeout","HighFiveIcon","ProvidedProvider","portalElement","provider","componentDidUpdate","unmountComponentAtNode","ORIGIN_DICT","AG","CEC","CMM","AOLMAIL","VISAFT","YMAIL","EVT","NEO","EVITE","SPD","IOS","POSTMARK","PLANS","ANDROID","GENESIS","IOS2","ANDROID2","GIFTING","GREETINGCARD2","FABRIC","FABRICGREETINGCARD","sq_icon_url","email_reg_button_url","domains","preConditions","original","abTestPreCondition","useAddGuestsCondition","eventStepsType","PREMIUM","PREMIUM_ADD_GUESTS_AFTER","FREEMIUM","FREEMIUM_WITH_GUESTS","FREE","FREE_WITH_GUESTS","addGuestsPreCondition","conditions","premium","review","shareableLinkPremiumUpsell","hasGuests","addGuestsPreConditionsMet","CREATE_EDIT_WTB","whatToBrings","isMealOptionsOnViewInvitation","mealOptionsEventTypes","isMealOptionsOnCreateFlow","ALLOWED_VIDEO_FORMATS","birthday","birthday_forteens","birthday_forher","birthday_forhim","birthday_milestones","birthday_save_the_date","birthday_forkids","$set","GIFT_KEYWORD_PLACEHOLDERS","amazon_search_url_template","escape","appsignal","app_signal_api_key","findAncestor","parentElement","handleDropdownFocus","dropdownParent","hasClass","handleDropdownFocusOut","buttons","dropdowns","ddParent","getHeight","clientHeight","setHeight","setIntersecting","hasFired","setHasFired","listeners","windowSizeQuery","setMatches","handleWindowResize","addListener","removeListener","listener","__webpack_public_path__","config","nodeType","getWindow","allowHorizontalScroll","onlyScrollIfNeeded","alignWithTop","alignWithLeft","offsetLeft","offsetBottom","offsetRight","isWin","isWindow","elemOffset","containerOffset","ch","cw","containerScroll","diffTop","diffBottom","win","winScroll","ww","wh","eh","outerHeight","ew","outerWidth","scrollTop","pos","isNaN","currentPos","screenTop","BOX_MODELS","CONTENT_INDEX","PADDING_INDEX","BORDER_INDEX","cssShow","visibility","getScroll","getScrollLeft","getScrollTop","getOffset","box","doc","ownerDocument","docElem","clientLeft","clientTop","getClientPosition","defaultView","parentWindow","getComputedStyle","computedStyle_","computedStyle","getPropertyValue","isBorderBoxFn","getPBMWidth","which","domUtils","getWH","viewportWidth","viewportHeight","docWidth","docHeight","borderBoxValue","isBorderBox","cssBoxValue","Number","borderBoxValueOrIsBorderBox","getWHIgnoreDisplay","old","swap","refWin","documentElementProp","compatMode","includeMargin","setOffset","anonymous_image","event_video","event_custom_logo","video_preview_image","user_profile_photo","event_photo_insert","event_custom_image","premium_custom_stamp","gcsPath","gcsPathId","forceImageKey","uploadRequest","access_url","upload_path","imageType","dimensions","form_data","customXHR","upload_url","upload_form","upload","onprogress","viewBox","xmlns","dataId","strokeLinejoin","strokeLinecap","pointerEvents","fillRule","roseWebText","gray4","pathStyle","eviteGreen","rotateFromRight","clipRule","cy","diffMinutes","pluralize","DeprecationError","logIfNotDeprecated","idString","capitalizeFirstLetter","insertAfter","newNode","isEventMoreThanTwoWeeksAgo","setDate","getDate","toISOString","htmlFromString","isEmpty","popupWindow","defaultOptions","resizable","scrollbars","toolbar","dependent","window_name","location_bar","status_bar","align","left_position","top_position","screen","align_value","eval","MAX_EMAIL_LENGTH","valid_email","is_valid","error_code","error_message","ret_email_invalid","validate_name_or_email","field","parse_us_phone_number","phone_number_text","digits","_get_digits_from","is_standard_length","is_1_prefixed_standard_length","formatted","_format_to_us_phone_number","normalize_phone_number","phone_number_string","string_with_digits","phone_digits_string","getURLParameter","mock_location_search","decodeURIComponent","hasStringInUrl","urlArr","parseParams","re","decodeRE","decode","stringifyParams","paramList","Set","addParamsToUrl","currentQuery","paramsToAdd","keyNames","isFunction","Function","formatTimezoneOffset","isJson","isStringEmptyOrAllWhitespace","inputString","numberWithCommas","areEqual","otherArray","isValidURL","url_string","httpsIfyUrl","pad","createUtcOffsetFromDate","sign","getTimezoneOffset","getTimezone","TIMEZONES","localUtcOffset","utc_offset","timezoneId","timezone_id","timezone_abbr","registry_urls","registry_name","qa_id","changePage","page_title","page_path","virtualPageview","pageTitle","removeNestedProperty","propertyName","html","htmlString","renderToStaticMarkup","aTags","extractHtmlATags","aTag","owner","getURLOwner","newUrl","affiliatesTags","hrefRegex","parseHTML","affiliates","AMAZON","WALMART","TARGET","addAmazonAffiliateTag","addAffiliateTag","urlObj","affiliateUrl","domainToOwner","CARD_ORIGINS","LEGACY_GRC_ORIGINS","FABRIC_GRC_ORIGINS","FABRIC_EVENT_ORIGINS","LEGACY_PREMIUM_ORIGINS","prettyStatus","updated","crossOrigin","fabricArtByCategoryKeys","updatedFabricArt","escapeHtml","DOMPurify","sanitize","unsafe","logoData","showEditLogoDialog","EXCLUDED_CATEGORIES","styleModifiers","childModifiers","dateFormat","getFullYear","timezone","templateDates","cents","neg","cityZip","dateTimeStr","hour","sec","_startDateTime","_endDateTime","timeFormat","startDateStr","dateFormatStr","timeFormatStr","isValidStart","isValidEnd","startTimeStr","datesLineOne","datesLineTwo","endDateStr","endTimeStr","textareaChanged","cols","headingText","is_plus","eventLabel","event_label","transactionData","transaction_data","offer","line_items","isProPurchase","what_the_user_received","isPartyPassPurchase","is_party_pass","isALaCartePurchase","is_standalone_purchase","defaultHeading","num_sends_provided","subText","GuestPageDisplayCondition","showSubtext","guestsLink","animation","CTAButton","Subheading","giftlistType","getGiftlistType","GuestHeading","GuestCopy","GiftlistImage","GuestCTA","eventOwnerName","showFullDetails","BIRTHDAY_CATEGORIES","HOLIDAY_CATEGORIES","blockConversation","updateApprovalStatus","eventValue","acceptConversation","onBlockClicked","showDeclineModal","onCancelDecline","messagingStore","groupId","onAcceptDeclineChanged","approvalStatusPath","serverPaths","approvalStatusDoc","rtdb","onDisconnect","approvalStatus","profiles","createdBy","sender","attendingCTA","openBanner","onBannerClose","showCloseBtn","bannerClass","mobxObserver","isValidPrivateConversation","participantsUserIds","groupType","isCoHost","hostId","toogleModal","isModalOpen","lockConversationRender","pendingApproval","blocked","setReadTimeStampCatchAndUpdate","routeBase","getBanner","bannerText","isArchived","Banner","PB_LockFill","setReadTimeStamp","readAsOf","TIMESTAMP","guestDoc","guestPath","isPrivateGuestList","getGroup","blockNyrSmsUser","group","groupValues","groupPath","messages","onValues","mounted","authUsers","bannerType","base","destroySlots","oopSlots","adhesionDiv","consumableDivs","adhesion","autoAds","ad","slotId","registerOopSlot","initAdhesion","close","cancel","getParticipants","isPrivateMessage","hideForm","MessageForm","database","participantCount","trimmedParticipants","getProfiles","AcceptDecline","qs","MessageErrorBoundary","MessageHeader","backLink","messagingPathname","onSwitchModal","MessageList","orderByChild","limitToLast","renderForm","renderAcceptDecline","collectionObserver","archiveConversation","conversationKey","updateConversationPath","forceUpdate","hasConversations","showSpinner","conv","groupCategory","conversationsItems","conversations","SingleConversation","onConversationArchived","conversation","onDisabledConvoClick","desktop","onDesktopConversationClick","onDesktopNewConversationClick","renderSpinner","isRead","messageStub","h2gMessage","users","userIds","messageToHost","isCreateNew","collectionError","getRightContent","isDeleteDisabled","messageDate","getDateString","isConversationEnabled","getDisabledConversation","messageTitle","userProfiles","getProfileInfo","StackedAvatars","maxShown","getGroupType","getConversationLink","convModClass","conversationLink","headingCopy","profilesToShow","names","isUserAHost","participantNames","getNameString","isCustomBroadcast","avatarType","rsvpCopy","messageId","component","PB_MessagesLine","groupName","onLinkClick","actualNumOfGuests","maxNumOfGuests","profileIndex","profilesToRender","profile","profileObj","UserAvatar","disableButton","leaveGroup","toggleLeaveGroupView","getNewGuestMessage","createdAt","showTimestamp","MessageTimeStamp","classes","avatarUrl","avatarCls","StyledBubble","isMsgFromSender","getRsvpMessage","showRsvp","changeRsvp","reinvention","onMessageEducationClick","showMessageEducation","seenBy","setSeenBy","newMessage","showSeenBy","getProfile","SeenBy","onShowModal","bubbleRadius","bgHex","colorId","widget","widgetPath","widgetId","widgetDoc","exception","Poll","pollValues","senderId","iconClass","messageEducation","PB_BroadcastLine","hasError","logError","errorMessage","openModal","closeModal","onTextareaChange","beforeSend","sending","messageQueue","clearMessageQueue","isBroadcast","virtualGroups","virtual_groups","group_id","getBroadcast","messageGroupType","pushH2G","isPollsSwitchOn","CreateEditPollModalContent","TextareaAutosize","maxRows","initialHeight","textAreaClass","autoCapitalize","textarea","paddingTop","ctrlKey","input","shiftKey","resizeTextarea","initialInputHeight","currScrollHeight","prevScrolledHeight","createRef","focusOnMount","restOfProps","StyledTextArea","hostMessage","handleGroupNameChange","newGroupName","handleMuteChange","muteNotifications","selectedSnoozeOption","handleParticipantsClick","viewParticipants","handleBackClick","handleSnoozeChange","handleCancelClick","updateSnooze","snoozeDuration","snoozeMap","newNotifyTime","notifyIfAfter","errorMsg","updateGroupName","handleKeyPress","handleSaveClick","confirm","handleLeaveGroup","showLeaveGroup","reqOptions","isG2g","isGroupCreator","onlyParticipants","isMuted","SNOOZE_OPTIONS","headingCount","isSpecialBroadcast","ParticipantsList","titleLabel","LeaveGroup","handleGroupedAvatarsClick","renderParticipants","groupsDoc","renderBroadcastHeader","groupsPath","isGuestAndH2g","modalChildren","InfoModalContent","GroupedAvatars","PB_InformationFill","feedbackInformation","activeElement","redirectToNewConversation","handleGroupCreated","is_broadcast","postGroup","getGuestView","messageType","banner","messageTypeSelected","bannerCls","baseUrl","optionsUrl","getRightActions","isUnknownUser","editing","messageHubPath","showVirtualGroups","VirtualGroups","ConversationList","rsvpGroups","linkName","showModal","sentToProfiles","bodyOverWrite","modalType","isPoll","backLabel","isSeenByModal","canMessageUsers","handleMessageUsersClick","pollData","ModalContent","handleCloseModal","bodyCopy","cancelCopy","actionCopy","scrollCollection","listRef","lastScrollPosition","scrollBottom","fetchingPage","messageList","MessageFromHost","lastMessageIndex","isEventPast","getLastRsvpIndex","currentMessageTS","prevMessateTS","toDateString","Widget","createdByName","Message","seenKeys","today","eventStateDate","diffDays","currLen","ProductEd","messageCount","isUserUnknown","MessageHub","DatabaseLoader","handleActionCall","bind","doTheThing","getGuests","searchString","updateGuestsLoading","perPage","searchObj","per_page","searchProfiles","newGuests","hasMore","allGuest","deletePreviousGuests","updatedGuests","shouldShowMoreBtn","getNextPage","nextPage","handleHeaderClick","isExpanded","injectStores","onHandleToggleGuest","recipients","guestlistStore","guestlist","GuestListContext","Consumer","isSelectEnabled","SingleGuest","ShowMoreBtn","handleOnClick","searchChanged","onSearchChanged","isSearch","showSearch","isSearchShowing","onSearchNav","hideSearch","rsvpFilter","onApplyFilter","emeraldWebText","FiltersOptions","Search","searchText","placeHolder","yes_count","invitees_yes","no_count","invitees_no","undecided_count","invitees_undecided","maybe_count","invitees_maybe","totalCount","totalInviteesCount","checked_in_count","user_has_active_premium_pass","is_non_fabric_premium","is_fabric","rsvpFilterVal","checked_in","rsvpClass","guestlistData","rsvpValue","updateCurrentPage","eventOrigin","contextValue","addAllRecipients","removeAllRecipients","showGuestsLoading","shouldShowHostActions","HostActions","VideoProcessing","shouldShowPlainStyle","AllGuests","hideAttended","GuestByRSVP","defaultValues","handleSelectAllClick","isSelectAll","getDesktopGroupChatButton","maxGroupCount","disableGroupChat","isGuestListPrivate","onGroupChatClick","getMobileButtons","guestCount","onMessageTypeSelected","onBroadcastClick","groupChatDisabled","messaging_group_limit","inject","handleTextareaChanged","getBroadcastType","allGroups","rsvpResponses","allSize","eventStore","validate","handleSend","q_message_type","guestListArr","recipient","guest_list","responseData","sentPage","isPro","modal","cancelText","MessageTextArea","toggleModal","goBack","removeRecipient","newRecipients","guestIndex","updateAllGroupOnRemove","rsvpGroup","findRsvpGroup","groupIndex","getRecipientsInGroup","recipientsInGroup","guestInfo","getRecipientsAfterRemoveAll","currGuestList","currGuest","foundIndex","setSearch","switchTabs","applyFilter","scrollableDiv","setRef","gotoMessageType","handleBroadcast","isMessageTypeShowing","backToRecipients","createGroup","getNewConversationContent","showGroupLimitWarning","getGuestLimitWarningBanner","isLoadedInModal","NewConversationHeader","backAction","fetchingGuestlist","StatusAnimation","RecipientList","onRecipientRemoved","Filters","showFilters","GuestList","handleToggleGuest","MessageGuestBtn","ModalActions","MessageType","closeWarningBanner","evt","getLeftActions","includesMaybe","fetchGuestlistData","updateIsLoadedInModal","addRecipient","currTab","guestsToRemove","currTabIndex","hasPreselectedRecipients","badge","isMe","isPendingHost","shouldShowCount","numberOfAdults","numberOfKids","ReplyStatus","dateReplied","dateViewed","startIndex","endIndex","participantsToRequest","newProfiles","toggleBroadcastListView","selectedList","participantsObj","sentToOrSeenBy","groupParticipants","participantValues","groupLength","noSearchResults","sortedParticipants","nameA","nameB","onGoBack","groupParticipantsUrl","getHeadingCopy","getBroadcastLink","virtualGroupNames","getBroadcastDescription","getDescription","privateMsgParticipant","participantsModalOpen","firstMessageClass","broadcastLink","getSeenBy","seenByProfiles","seenByCount","seenByUserIds","seenByStr","recipientCount","getSeenByText","curr","currName","commaSeparator","numOfGuests","nameShown","guestsToRender","handleAllowOtherOptionsChange","allow_other_option","minOptions","handleQuestionChange","newState","handleOptionChange","hasDuplicateOptions","optionsArray","closeInternalModal","showInternalModal","onShowInternalModal","btnDisabled","handleFormSubmit","validationErrors","editingPoll","poll_widget","formatEditPayload","submitForm","widget_id","create_widget_url","edit_widget_url","postPoll","handleAddClick","maxOptions","$push","autofocus","handleRemoveOption","hasVotes","filtered","deletePoll","voteCount","formattedOptions","original_poll_data","showAddOptionLink","option_nodes","optionNum","inputRequired","canRemove","inputTabIndex","DeleteOptionLink","onConfirmClick","nextIndexAfterOptions","noValidate","modified_poll_options","new_options","edited_options","deleted_options","original_poll_data_hash","option_obj","new_option","poll_add_options","poll_delete_options","poll_edit_options","getNonVoters","nonVoterProfiles","nonVoterCount","nonVoterStr","getPollForGuest","StyledWidget","PollContent","totalVoteCount","votes","votesByUser","showNonVoters","NonVoters","userHasVoted","hasVoted","getVoters","voteKey","voterList","votesByOption","handleChangeVote","wantsToChangeVote","getVoteResults","mostVotes","vote","showVoteCountButton","winner","titleLabelCopy","optionalClass","voteCopy","getVoteButtons","handleVoteAction","otherBtn","handleAddOption","handleNewOptionTextChanged","newText","currentTarget","newOptionText","bodyContent","newOptionTextError","handleNewOptionAdded","poll_add_other_option","option_id","castVote","voterProfiles","createdByThisUser","pollHeading","groups","showResults","otherRtdb","otherPaths","initRunning","initDatabase","authenticateToTsunami","fire_config","refs","temp","RTDatabase","signInWithCustomToken","provideStores","resolved","MessagingRouter","_valuesPromise","_messagingHistory","setMessagingBasePathname","Switch","Route","ConversationLoader","ParticipantsWithDatabaseLoader","ParticipantsWrapperHOC","participantsWrapper","previousHeaderSpacerSize","getMainComponent","NewConversation","Conversation","MessagingStore","populate","host_message","is_cohost_viewing","_requestedProfiles","_requestProfiles","newIds","uid","_mergeProfiles","updateSummary","delete","param","name_filter","rsvp_filter","has_more","BroadcastGroup","groupMixin","code","observable","Map","selectedGuests","forcefullShowTime","currentDate","yesterday","addDays","endtime","total","maxCharacters","separator","strToRet","remainingCharacters","remaingNames","lastStrToInsert","callBack","validTimeStamp","_authenticating","_authenticatedGuestId","messagingBasePathname","vg","errorstr","modalBody","modalTitle","ModalAjaxError","popup","PopupModal","dialog","clickOutside","defaults","modalInner","modalContent","closeAction","dataAttribute","class","loadClass","closeKeys","transitions","transitionEnd","onBeforeOpen","onBeforeClose","onOpen","allowClose","throwError","getNode","skipError","cn","allMatches","currentInstance","parser","openCloseQueue","closeTransitionHandler","resolveTransition","loader","EviteLoadingModal","DOMParser","closeKeyHandler","outsideClickHandler","delegateOpen","delegateClose","listen","ModalBase","modalInstance","filteredArray","dom","getDomNodes","addLoadedCssClass","removeAttribute","releaseNode","getElementContext","captureNode","setOpenId","lastInput","hasTransition","detectTransition","closeModalWithTransition","removeOpenId","childNodes","doCancel","closeNode","matchedNode","isListening","unlisten","useSettings","page_event","on_response","onResponse","modalHead","buttonLocators","buttonsDataImpression","fetchContent","forceDesktop","_query_string","parseContent","parseFromString","injectContent","parseDependencies","scripts","scriptTag","buildScriptTag","buildFromResponse","serverResponse","modalDom","respond","guid","getInstance","buildContainer","overwrites","ow","closeBtn","parent_url","encodeUrlParams","buttonMarkup","button_markup","button","buttonLocator","buttonDataImpression","buttonId","dataImpression","respondToPopup","buttonsEl","msg","htmlResponse","buildPopup","buildRemote","loadingModalDefaults","setMessage","contents","subject","hydrateFeedPosts","cursorValue","errorDefault","failedFetchModal","hydratingFeed","postFeedComment","postData","handleCaptchaJsonResponse","user_submitted","ActivityFeedStore","activityFeedApi","eventOptionDisableFeed","event_option_disable_feed","photosStore","initial_single_post_data","singlePostOptions","visible","deleted","initial_message_data","feedPosts","storeUtils","updateAllPosts","addSinglePost","deletePostById","getMorePosts","isVisible","messageNotification","ActivityFeedApi","activityFeedStore","activityFeed","checkNewMessages","hydrated","hydratePhotoPosts","hydrateWhatToBring","hydratePolls","experiment_variations","allow_videos","hydrateSponsoredRegistry","app","router","preventScroll","pageYOffset","invite_height","scrollPage","renderState","appRendered","trackTabRender","pageViewCount","refreshAds","isValidRoute","assert","isCurrentRoute","tabUrl","eventTabUrlPath","browserHistory","UnconnectedUserAvatar","onAvatarClick","getAvatarLetters","newColors","letters","currentAvatar","disabledClass","diskNumber","diskClass","connect","ADD_AVATARS","SimpleModal","GET_NEW_MESSAGES","gift_registry_name","alphabetical","hostFound","youFound","respType","getNameOfGuestWithId","GuestlistStore","attended","guest_names","totalCountWithPlusOnes","isInModal","SET_MESSAGE_MODAL_VISIBLE","fetchingPhotos","getPhotoPostsById","postIds","deletePhotos","addPhotos","PhotosStore","photosApi","appendPosts","addMultiplePosts","newPhotoPost","getPostIndex","PhotosApi","CANCEL_EDIT_POLL","CREATE_POLL","DELETE_POLL","EDIT_POLL","SAVE_POLL","isHostVoting","SET_VOTED","choiceId","otherOption","other_option","ADD_RESPONSE","hasPoll","fetchingPoll","getPollIndex","$merge","failIfBeyondMax","emailEntered","getPlusOneEditText","updateErrorMessage","getPlusOneEmails","getGuestEmail","getPlusOneAlreadyOnGuestListMessageFor","errMsg","currNumEmailsAllowed","emails","numEmails","maxNumEmails","getMaxAdultCount","setTotalAdults","setPlusOneEmails","_addPlusOneEmail","setPlusOneEditText","getPlusOneErrors","_numPlusOnesThatCanBeAdded","setPlusOneErrors","canDecrementTotalAdults","getTotalAdults","canDecrementTotalKids","setTotalKids","getTotalKids","rsvpState","altGuestName","PLUSONES_OVERALL_ERROR_KEY","getCleanedPlusOnesData","PLUS_ONES_WARNING_MESSAGE","HIDE_INLINE_FORM","HIDE_INTERSTITIAL","numPlusOnes","getNumPlusOnes","canIncrementTotalAdults","_getPlusOneDataAtIndex","plusOnesData","getPlusOnesData","setPlusOnesData","SET_ACTIVE_RSVP_BUTTON","SET_ALT_GUEST_NAME","SET_EDITING_GUEST_NAME","SET_GUEST_EMAIL","SET_GUEST_NAME","SET_INCOMPLETE_GUEST","SET_NOT_YOU","notify","SET_NOTIFY_MARKETING","newEmail","p1Data","_setPlusOneDataAtIndex","newName","SET_RSVP_ACTION","SET_RSVP_COMMENT","SET_RSVP_INTERSTITIAL","SET_RSVP_RESPONSE","SHOW_RSVP_FORM","SHOW_RSVP_MODAL_OVERLAY","SUBMIT_CONFIRMATION","submitRsvp","onRsvp","rsvpAction","setFormSubmitting","showInterstitial","updateRsvpFromGuest","showRsvpError","TOGGLE_CHANGE_RSVP_VISIBLE","TOGGLE_RSVP_FORM_VISIBLE","TOGGLE_VIDEO_MODAL_VISIBILITY","UNSET_NOT_YOU","UPDATE_NOTIFICATIONS","SHOW_INTERSTITIAL","isRegisteredUser","invalidate","UPDATE_RSVP_FROM_GUEST","SHOW_RSVP_ERROR","submitting","SET_FORM_SUBMITTING","int","getMaxKidCount","getMinAdultCount","areKidsAllowed","adultCount","maxCount","minCount","SET_TOTAL_ADULTS","addEmptyPlusOnesIfNeeded","evaluatePlusOneNamesEmailsForErrors","kidCount","SET_TOTAL_KIDS","keepIDs","cleanedP1Data","p1_data","doErrorChecking","SET_PLUSONE_DATA","plus_ones_data","random","emailAddress","addEmptyPlusOnes","numToAdd","maxThatCanBeAdded","plusOnesErrors","SET_PLUSONE_ERRORS","clearPlusOnesWarningMessage","p1Errors","indexesOfEmailAddresses","indexes","maxNumPlusOnes","numPlusOnesNeededToRemove","setPlusOnesWarningMessage","warningMessage","plusOneEditText","editTextStr","SET_PLUSONE_EDIT_TEXT","event_options","showForm","has_rsvpd","rsvpInterstitialVariation","showVideoModal","video","eventHasDisplayableVideo","showChangeRsvp","preventRsvp","formSubmitting","activeRsvpButton","user_is_registered","storedGuestId","storedGuestName","storedGuestEmail","promptForGuestCount","guest_of","plusOnesAllowed","_addIDsToPlusOnesData","plus_one_data","notifyMarketing","isAnonymous","editingName","rsvpErrors","showRsvpModalOverlay","showConfirmation","reduceReducers","inGuestList","modalReducer","TOGGLE_SLIDESHOW_VISIBLE","commentsVisible","overlayAdVisible","CHANGE_SLIDE","TOGGLE_COMMENTS_VISIBLE","SET_COMMENTS_VISIBLE","SET_COMMENT_PADDING","commentPadding","SET_OVERLAY_AD_VISIBLE","getUrlFor","UPDATE_SPONSORED_REGISTRY","sponsoredRegistry","getWidget","actionStr","fetching","doUpdatePosts","newPost","updatedPosts","postIndex","eventViewReducer","avatarsReducer","pollsReducer","rsvpReducer","slideshow","slideshowReducer","sponsoredregistry","sponsoredRegistryReducer","whattobring","whatToBringReducer","newMessagesReducer","giftKeywordsReducer","isGuest","itemUserId","urlPart","urlHash","toFixed","storeName","show_knot","KNOT_EVENT_TYPES","showKnot","show_bump","BUMP_EVENT_TYPES","showBump","guidPrefix","guidIndex","amazon_store_front","userAgent","isBreakPoint","is_poll_meal_options","navigator","platform","reducers","viewable","viewmap","views","toggleVideoModalVisibility","isChrome","chrome","sources","onEnded","videoFinished","ADD_ITEM","UPDATE_WHAT_TO_BRING","DELETE_WHAT_TO_BRING","REMOVE_ITEM","TOGGLE_ALLOW","TOGGLE_EDIT","UPDATE_ITEM_NAME","UPDATE_ITEM_QTY","isDuplicate","UPDATE_ITEM_VALIDATION","UPDATE_OTHER_NAME","UPDATE_OTHER_QTY","hasWhatToBring","fetchingWhatToBring","emptyState","other","CANCEL_OTHER","clsx","isMergeableObject","isNonNullObject","stringValue","$$typeof","REACT_ELEMENT_TYPE","isReactElement","isSpecial","for","cloneUnlessOtherwiseSpecified","deepmerge","defaultArrayMerge","getKeys","propertyIsEnumerable","getEnumerableOwnPropertySymbols","propertyIsOnObject","arrayMerge","sourceIsArray","destination","propertyIsUnsafe","customMerge","getMergeFunction","mergeObject","deepmerge_1","vendorPrefix","jsCssMap","Webkit","Moz","ms","O","getVendorPrefix","getTransitionName","getTransformName","setTransitionProperty","transitionProperty","setTransform","getComputedStyleX","matrix2d","matrix3d","forceRelayout","originalStyle","getDocument","_RE_NUM_NO_PX","RE_POS","CURRENT_STYLE","RUNTIME_STYLE","LEFT","getOffsetDirection","dir","useCssRight","useCssBottom","oppositeOffsetDirection","setLeftTop","presetH","presetV","horizontalProperty","verticalProperty","oppositeHorizontalProperty","oppositeVerticalProperty","originalTransition","originalOffset","preset","off","_dir","_off","each","cs","rsLeft","pixelLeft","getParent","host","ex","mix","ignoreShake","oriOffset","oLeft","oTop","tLeft","tTop","useCssTransform","originalXY","matrix","getTransformXY","resultXY","xy","match2d","setTransformXY","setTransform$1","getWindowScrollLeft","getWindowScrollTop","getOffsetParent","positionStyle","nodeName","getParent$1","getVisibleRectForElement","alwaysByViewport","visibleRect","Infinity","originalPosition","documentWidth","scrollWidth","documentHeight","bodyStyle","overflowX","overflowY","isAncestorFixed","maxVisibleWidth","maxVisibleHeight","getRegion","getAlignOffset","region","V","H","getElFuturePos","elRegion","refNodeRegion","targetOffset","diff","isFailX","elFuturePos","isFailY","flip","reg","flipOffset","convertOffset","offsetLen","normalizeOffset","doAlign","tgtRegion","isTgtRegionVisible","newOverflowCfg","newElRegion","adjustX","adjustY","newPoints","newOffset","newTargetOffset","isCompleteFailX","_newPoints","_newOffset","_newTargetOffset","isCompleteFailY","isStillFailX","isStillFailY","_newPoints2","resizeWidth","resizeHeight","adjustForViewport","alignElement","refNode","isTargetNotOutOfVisible","targetRegion","isOutOfVisibleRect","alignPoint","tgtPoint","pageX","pageY","clientX","pointInView","__getOffsetParent","__getVisibleRectForElement","_setPrototypeOf","setPrototypeOf","__proto__","_construct","Parent","Class","Reflect","construct","sham","Proxy","valueOf","_isNativeReflectConstruct","instance","_toConsumableArray","_arrayWithoutHoles","iter","_iterableToArray","_nonIterableSpread","isFrozen","getPrototypeOf","freeze","seal","fun","thisValue","Func","arrayForEach","unapply","arrayPop","arrayPush","stringToLowerCase","stringMatch","stringReplace","stringIndexOf","stringTrim","regExpTest","typeErrorCreate","thisArg","addToSet","transformCaseFunc","lcElement","newObject","lookupGetter","desc","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","getGlobal","createDOMPurify","removed","isSupported","originalDocument","DocumentFragment","HTMLTemplateElement","Node","NodeFilter","_window$NamedNodeMap","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","trustedTypes","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","trustedTypesPolicy","createPolicy","suffix","ATTR_NAME","currentScript","hasAttribute","policyName","createHTML","createScriptURL","scriptUrl","_createTrustedTypesPolicy","emptyHTML","_document","implementation","createNodeIterator","createDocumentFragment","importNode","documentMode","hooks","createHTMLDocument","PARSER_MEDIA_TYPE","MUSTACHE_EXPR$1","ERB_EXPR$1","DATA_ATTR$1","ARIA_ATTR$1","IS_SCRIPT_OR_DATA$1","ATTR_WHITESPACE$1","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","SAFE_FOR_TEMPLATES","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","SUPPORTED_PARSER_MEDIA_TYPES","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_forceRemove","outerHTML","_removeAttribute","attribute","getAttributeNode","_initDocument","leadingWhitespace","dirtyPayload","createDocument","_createIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","_isNode","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","elm","textContent","namespaceURI","tagName","allowedTags","hasChildNodes","firstElementChild","_basicCustomElementTest","parentTagName","_checkValidNamespace","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attr","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","_attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","importedNode","oldNode","returnNode","toStaticHTML","nodeIterator","shadowroot","serializedHTML","doctype","setConfig","clearConfig","isValidAttribute","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","canUseDOM","ExecutionEnvironment","canUseWorkers","Worker","canUseEventListeners","attachEvent","canUseViewport","global","atan2","PiBy180","PiBy2","couldUseAttachEvent","touchEvents","parseEl","supportsOpacity","supportsFilters","reOpacity","setOpacity","proto","originXOffset","originYOffset","multipleSpacesRegex","HTMLDocument","Document","virtualWindow","JSDOM","FetchExternalResources","resources","jsdomImplForWrapper","nodeCanvas","copyGLTo2DDrawImage","gl","pipelineState","glCanvas","targetCanvas","sourceY","copyGLTo2DPutImageData","dWidth","destinationWidth","dHeight","destinationHeight","numBytes","u8","Uint8Array","imageBuffer","u8Clamped","Uint8ClampedArray","readPixels","UNSIGNED_BYTE","imgData","ImageData","isTouchSupported","maxTouchPoints","isLikelyNode","Buffer","SHARED_ATTRIBUTES","DPI","reNum","commaWsp","rePathCommand","reNonWord","fontPaths","iMatrix","svgNS","perfLimitSizeTotal","maxCacheSideLimit","minCacheSideLimit","charWidthsCache","textureSize","disableStyleCopyPaste","enableGLFiltering","devicePixelRatio","webkitDevicePixelRatio","mozDevicePixelRatio","browserShadowBlurConstant","arcToSegmentsCache","boundsOfCurveCache","cachesBoundsOfCurve","forceGLPutImageData","initFilterBackend","isWebglSupported","maxTextureSize","WebglFilterBackend","tileSize","Canvas2dFilterBackend","_removeEventListener","handler","__eventListeners","_once","_handler","Observable","listenersForEvent","once","Collection","_objects","_onObjectAdded","renderOnAddRemove","requestRenderAll","nonSplicing","somethingRemoved","_onObjectRemoved","forEachObject","context","deep","complexity","memo","CommonMethods","_setOptions","_initGradient","filler","colorStops","Gradient","_initPattern","Pattern","_setObject","_set","toggle","cos","sin","removeFromArray","getRandomInt","degrees","radiansToDegrees","radians","rotatePoint","point","newPoint","rotateVector","addEquals","vector","createVector","calcAngleBetweenVectors","acos","hypot","getHatVector","multiply","getBisector","A","B","C","AB","AC","phi","projectStrokeOnPoints","openPath","strokeUniformScalar","strokeUniform","getStrokeHatVector","scalar","miterVector","bisector","bisectorVector","strokeLineJoin","strokeMiterLimit","subtract","SQRT2","transformPoint","ignoreOffset","makeBoundingBoxFromPoints","xPoints","minX","yPoints","minY","invertTransform","fractionDigits","parseUnit","unit","Text","DEFAULT_SVG_FONT_SIZE","falseFunction","camelize","resolveNamespace","getSvgAttributes","parts","createImage","onLoadCallback","loadImageInDom","enlivenObjects","enlivenedObjects","numLoadedObjects","numTotalObjects","enlivenObjectEnlivables","enlivenProps","ENLIVEN_PROPS","enlivedProps","enlivenPatterns","patterns","numLoadedPatterns","numPatterns","enlivenedPatterns","groupSVGElements","sourcePath","centerPoint","Group","populateWithProperties","properties","createCanvasElement","copyCanvasElement","newCanvas","format","quality","multiplyTransformMatrices","is2x2","qrDecompose","denom","skewX","skewY","translateX","translateY","calcRotateMatrix","theta","calcDimensionsMatrix","scaleMatrix","flipX","flipY","tan","composeMatrix","resetObjectTransform","saveObjectTransform","isTransparent","tolerance","_isTransparent","imageData","getImageData","parsePreserveAspectRatioAttribute","meetOrSlice","aspectRatioAttrs","alignX","alignY","clearFabricFontCache","limitDimsByArea","ar","maximumArea","roughWidth","perfLimitSizeY","capValue","findScaleToFit","findScaleToCover","matrixToSVG","NUM_FRACTION_DIGITS","removeTransformFromObject","finalTransform","calcOwnMatrix","applyTransformToObject","addTransformToObject","sizeAfterTransform","dimX","dimY","transformMatrix","bbox","mergeClipPaths","c1","c2","calcTransformMatrix","hasStyleChanged","prevStyle","thisStyle","forTextSpans","fontStyle","deltaY","overline","underline","linethrough","stylesToArray","textLines","charIndex","stylesArray","styleIndex","stylesObject","_join","commandLengths","q","repeatedCommands","M","segmentToBezier","th2","th3","cosTh","sinTh","ry","cx1","cy1","mT","fromX","fromY","costh2","sinth2","costh3","sinth3","toX","toY","calcVectorAngle","ux","uy","vx","vy","ta","tb","fromArcToBeziers","fx","fy","rot","large","sweep","segsNorm","rotateX","th","px","py","rx2","ry2","py2","px2","pl","mTheta","dtheta","mDelta","arcToSegments","calcLineLength","getPointOnCubicBezierIterator","p1x","p1y","p2x","p2y","p3x","p3y","p4x","p4y","pct","CB2","c3","CB3","c4","CB4","getTangentCubicIterator","invT","tangentX","tangentY","getPointOnQuadraticBezierIterator","QB2","QB3","getTangentQuadraticIterator","pathIterator","perc","tempP","tmpLen","getPathSegmentsInfo","tempInfo","angleFinder","totalLength","command","destX","destY","joinPath","pathData","parsePath","pathString","currentPath","coordsStr","rNumber","rNumberCommaWsp","rFlagCommaWsp","regArcArgumentSequence","coordsParsed","jlen","commandLength","repeatedCommand","klen","makePathSimpler","converted","controlX","controlY","destinationPath","getSmoothPathFromPoints","correction","multSignX","multSignY","manyPoints","eq","midPoint","midPointFrom","getBoundsOfCurve","x0","y0","x3","y3","argsString","t1","t2","b2ac","sqrtb2ac","tvalues","bounds","getPointOnPath","infos","segInfo","segPercent","lerp","nextLen","lastPerc","nextStep","findPercentageForDistance","transformPath","pathOffset","pathSegment","newSegment","byProperty","condition","invoke","getWholeChar","firstLetterOnly","escapeXml","graphemeSplit","textstring","chr","graphemes","IS_DONTENUM_BUGGY","addMethods","superclass","returnValue","Subclass","methodName","parentMethod","superClassMethod","subclasses","getPointer","scroll","getScrollLeftTop","_evt","touchProp","changedTouches","getTouchInfo","isTouchEvent","pointerType","es","currentStyle","hasLayout","setStyle","elementStyle","normalizedProperty","styleFloat","setProperty","sliceCanConvertNodelists","getElementStyle","selectProp","_slice","toArray","arrayLike","makeElement","docElement","makeElementUnselectable","onselectstart","unselectable","makeElementSelectable","setImageSmoothing","imageSmoothingEnabled","webkitImageSmoothingEnabled","mozImageSmoothingEnabled","msImageSmoothingEnabled","oImageSmoothingEnabled","getById","wrapElement","wrapper","replaceChild","getElementOffset","scrollLeftTop","offsetAttributes","borderLeftWidth","borderTopWidth","getNodeCanvas","impl","_canvas","_image","cleanUpJsdomNode","_currentSrc","_attributes","_classList","emptyFn","onComplete","parameters","addParamToUrl","setRequestHeader","RUNNING_ANIMATIONS","defaultEasing","cancelAll","animations","cancelByCanvas","cancelled","cancelByTarget","findAnimationsByTarget","findAnimationIndex","cancelFunc","findAnimation","_requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","_cancelAnimFrame","cancelAnimationFrame","removeFromRegistry","runningAnimations","currentValue","startValue","completionRate","durationRate","finish","abort","easing","isMany","endValue","byValue","onStart","ticktime","currentTime","timePerc","_value","valuePerc","cancelAnimFrame","calculateColor","animateColor","fromColor","toColor","startColor","Color","getSource","endColor","originalOnComplete","originalOnChange","colorEasing","normalize","asin","elastic","easeInBounce","easeOutBounce","ease","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInOutBounce","attributesMap","colorAttributes","fSize","cPath","normalizeAttr","normalizeValue","parentAttributes","parseTransformAttribute","fillIndex","strokeIndex","getSvgRegex","_getMultipleNodes","nodeNames","nodeList","nodeArray","elementMatchesRule","selectors","firstMatching","parentMatching","selectorMatches","doesSomeParentMatch","matcher","elementById","nodelist","svgValidTagNamesRegEx","svgViewBoxElementsRegEx","svgInvalidAncestorsRegEx","svgValidParentsRegEx","gradientDefs","clipPaths","skewMatrix","reTransformList","reTransform","attributeValue","matrices","translateMatrix","rotateMatrix","multiplierX","multiplierY","combinedMatrix","reViewBoxAttrValue","applyViewboxTransform","viewBoxWidth","viewBoxHeight","viewBoxAttr","widthAttr","heightAttr","missingViewBox","missingDimAttr","toBeParsed","parsedDim","widthDiff","heightDiff","createElementNS","recursivelyParseGradientsXlink","gradient","xlinkAttr","referencedGradient","referenceClone","parseSVGDocument","parsingOptions","xlinkAttribute","attrs","xlink","el2","currentTrans","oldLength","el3","nodeValue","parseUseDirectives","svgUid","__uid","descendants","selectNodes","hasAncestorWithNodeName","getGradientDefs","getCSSRules","parseElements","instances","reFontDeclaration","parseFontDeclaration","oStyle","elList","parseAttributes","parentFontSize","ownAttributes","cssAttrs","getGlobalStylesForElement","parseStyleAttribute","normalizedAttr","normalizedValue","normalizedStyle","mergedAttrs","setAlpha","getAlpha","toRgba","_setStrokeFillOpacity","ElementsParser","chunk","pair","parseStyleString","parseStyleObject","parsePointsAttribute","parsedPoints","allRules","styleContents","ruleObj","propertyValuePairs","_rule","loadSVGFromURL","responseXML","allElements","loadSVGFromString","regexUrl","numElements","createObjects","createObject","findTag","fromElement","createCallback","checkIfDone","resolveGradient","_removeTransformMatrix","resolveClipPath","extractPropertyDefinition","regex","gradientDef","opacityAttr","createClipPathCallback","_newObj","usingElement","objTransformInv","gTransform","clipPathTag","clipPathOwner","that","scalarAdd","scalarAddEquals","subtractEquals","scalarSubtract","scalarSubtractEquals","multiplyEquals","divide","divideEquals","lt","lte","gt","gte","distanceFrom","dx","dy","setXY","setX","setY","setFromPoint","Intersection","appendPoint","appendPoints","intersectLineLine","a1","a2","b1","b2","uaT","ubT","uB","ua","ub","intersectLinePolygon","inter","intersectPolygonPolygon","points1","points2","intersectPolygonRectangle","r1","r2","topRight","bottomLeft","inter1","inter2","inter3","inter4","_tryParsingColor","setSource","hue2rgb","colorNameMap","sourceFromHex","sourceFromRgb","sourceFromHsl","_rgbToHsl","_source","toRgb","toHsl","hsl","toHsla","toHex","toHexa","toGrayscale","average","currentAlpha","toBlackWhite","overlayWith","otherColor","otherSource","reRGBa","reHSLa","reHex","aliceblue","antiquewhite","aqua","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellow","yellowgreen","fromRgb","fromSource","fromRgba","fromHsl","fromHsla","fromHex","isShortNotation","isRGBa","oColor","scaleMap","skewMap","TOP","RIGHT","BOTTOM","CENTER","opposite","findCornerQuadrant","cornerAngle","fireEvent","canvasOptions","scaleIsProportional","uniformIsToggled","uniScaleKey","uniformScaling","isTransformCentered","originX","originY","scalingIsForbidden","by","scaleProportionally","lockX","lockScalingX","lockY","lockScalingY","commonEventInfo","pointer","wrapWithFixedAnchor","constraint","translateToOriginPoint","actionPerformed","wrapWithFireEvent","getLocalPoint","corner","localPoint","toLocalPoint","targetHasOneFlip","compensateScaleForSkew","oppositeSkew","scaleToCompensate","axis","_getTransformedDimensions","skewObjectX","newSkew","dimNoSkew","totalSkewSize","currentSkew","hasSkewed","dimBeforeSkewing","skewObjectY","scaleObject","dim","signX","signY","forbidScaling","gestureScale","lockScalingFlip","oldScaleX","oldScaleY","scaleCursorStyleHandler","skewCursorStyleHandler","notAllowed","lockSkewingY","lockSkewingX","scaleSkewCursorStyleHandler","altActionKey","pivotPoint","lockRotation","hasRotated","lastAngle","ey","curAngle","snapAngle","snapThreshold","rightAngleLocked","leftAngleLocked","scalingEqually","scalingX","scalingY","scalingYOrSkewingX","skewHandlerX","scalingXOrSkewingY","skewHandlerY","changeWidth","strokePadding","multiplier","oldWidth","newWidth","finalHandler","dragHandler","newLeft","newTop","moveX","moveY","scaleOrSkewActionName","isAlternative","rotationStyleHandler","renderCircleControl","xSize","ySize","myLeft","myTop","renderSquareControl","xSizeBy2","ySizeBy2","strokeRect","mouseDownHandler","getActionHandler","getMouseDownHandler","getMouseUpHandler","cursorStyleHandler","getActionName","getVisibility","controlKey","objectVisibility","_controlsVisibility","setVisibility","positionHandler","finalMatrix","calcCornerCoords","objectAngle","objectCornerSize","centerX","centerY","isTouch","cosHalfOffset","sinHalfOffset","cosHalfOffsetComp","sinHalfOffsetComp","controlTriangleAngle","cornerHypotenuse","newTheta","newThetaComp","cornerStyle","getColorStop","colorAlpha","keyValuePairs","gradientTransform","gradientUnits","addColorStop","toSVG","markup","commonAttributes","needsSwap","withViewport","additionalTransform","minRadius","percentageShift","colorStop","toLive","createLinearGradient","createRadialGradient","svgOptions","colorStopEls","getLinearCoords","getRadialCoords","propValue","finalValue","__convertPercentUnitsToValues","repeat","patternTransform","setOptions","patternSource","patternWidth","patternHeight","patternOffsetX","patternOffsetY","patternImgSrc","complete","naturalWidth","createPattern","Shadow","affectStroke","nonScaling","_parseShadow","shadow","shadowStr","offsetsAndBlur","reOffsetsAndBlur","fBoxX","fBoxY","CANVAS_INIT_ERROR","renderAndResetBound","renderAndReset","requestRenderAllBound","_initStatic","overlayColor","overlayImage","stateful","allowTouchScrolling","backgroundVpt","overlayVpt","vptCoords","skipOffscreen","_createLowerCanvas","_initOptions","interactive","_initRetinaScaling","setOverlayImage","setBackgroundImage","setBackgroundColor","setOverlayColor","calcOffset","_isRetinaScaling","getRetinaScaling","scaleRatio","__initRetinaScaling","lowerCanvasEl","contextContainer","upperCanvasEl","contextTop","_offset","__setBgOverlayImage","__setBgOverlayColor","_createCanvasElement","_originalCanvasStyle","_applyCanvasStyle","cssValue","cssOnly","_setBackstoreDimension","hasLostContext","backstoreOnly","_setCssDimension","_isCurrentlyDrawing","freeDrawingBrush","_setBrushStyles","cacheCanvasEl","wrapperEl","vpt","_activeObject","backgroundObject","overlayObject","setCoords","calcViewportBoundaries","zoomToPoint","absolutePan","relativePan","setupState","_hasITextHandlers","_mouseUpITextHandler","_iTextInstances","canvasToDrawOn","renderCanvas","isRendering","iVpt","cancelRequestedRender","_renderBackground","_renderObjects","drawControls","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","globalCompositeOperation","zoomX","zoomY","_cacheCanvas","cacheTranslationX","cacheTranslationY","needsVpt","closePath","getCenter","centerObjectH","_centerObject","centerObjectV","centerObject","viewportCenterObject","vpCenter","getVpCenter","viewportCenterObjectH","viewportCenterObjectV","toDatalessJSON","toDatalessObject","_toObjectMethod","_toObjects","excludeFromExport","_toObject","__serializeBgOverlay","originalValue","bgImage","bgColor","svgViewportTransformation","_setSVGPreamble","_setSVGHeader","clipPathId","_setSVGBgOverlayColor","_setSVGBgOverlayImage","_setSVGObjects","suppressPreamble","encoding","createSVGFontFacesMarkup","createSVGRefElementsMarkup","createSVGClipPathMarkup","toClipPathSVG","shouldTransform","row","rowIndex","fontList","_setSVGObject","finalWidth","finalHeight","sendToBack","objs","activeSelection","sendBackwards","intersecting","newIdx","objsMoved","_findNewLowerIndex","intersectsWithObject","isContainedWithinObject","bringForward","_findNewUpperIndex","DataURLExporter","EMPTY_JSON","supports","setLineDash","createPNGStream","createJPEGStream","BaseBrush","strokeLineCap","limitedToCanvasSize","lineCap","miterLimit","lineJoin","_saveAndTransform","_setShadow","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","needsFullRender","_resetShadow","_isOutSideCanvas","PencilBrush","decimate","drawStraightLine","straightLineKey","_points","_hasStraightLine","_drawSegment","quadraticCurveTo","_isMainEvent","_prepareForDrawing","_captureDrawingPath","onMouseMove","oldEnd","onMouseUp","_finalizeAndAddPath","_reset","_addPoint","pointerPoint","convertPointsToSVGPath","_isEmptySVGPath","createPath","Path","decimatePoints","adjustedDistance","lastPoint","CircleBrush","drawDot","addPoint","dot","radius","originalRenderOnAddRemove","circles","circle","Circle","circleRadius","circleColor","SprayBrush","density","dotWidth","dotWidthVariance","randomOpacity","optimizeOverlapping","sprayChunks","addSprayChunk","sprayChunkPoints","rects","ilen","sprayChunk","rect","_getOptimizedRects","uniqueRects","uniqueRectsArray","globalAlpha","fillRect","PatternBrush","getPatternSrc","patternCanvas","patternCtx","getPatternSrcFunction","getPattern","topLeft","_getLeftTopCoords","_initInteractive","_createCacheCanvas","centeredScaling","centeredRotation","centeredKey","selectionKey","altSelectionKey","selectionColor","selectionDashArray","selectionBorderColor","selectionLineWidth","selectionFullyContained","defaultCursor","freeDrawingCursor","notAllowedCursor","containerClass","perPixelTargetFind","targetFindTolerance","skipTargetFind","isDrawingMode","stopContextMenu","fireRightClick","fireMiddleClick","targets","enablePointerEvents","_hoveredTarget","_hoveredTargets","_currentTransform","_groupSelector","_initWrapperElement","_createUpperCanvas","_initEventListeners","_chooseObjectsToRender","objsToRender","activeGroupObjects","activeObjects","contextTopDirty","renderTopLayer","_drawSelection","renderTop","_normalizePointer","invertedM","vptPointer","restorePointerVpt","isTargetTransparent","normalizedPointer","targetRelativeX","targetRelativeY","_cacheContext","contextCache","originalColor","selectionBackgroundColor","_isSelectionKeyPressed","_shouldClearSelection","evented","_shouldCenterTransform","altKey","centerTransform","_getOriginFromCorner","_getActionFromCorner","alreadySelected","_setupCurrentTransform","__corner","lastX","lastY","_beforeTransform","setCursor","viewportStart","viewportExtent","extent","maxX","maxY","strokeOffset","_setLineDash","findTarget","skipGroup","activeTarget","activeTargetSubs","aObjects","shouldLookForActive","_findTargetCorner","_searchPossibleTargets","_checkTarget","globalPointer","containsPoint","subTarget","objToCheck","pointerToUse","subTargetCheck","ignoreZoom","_absolutePointer","_pointer","cssScale","boundsWidth","boundsHeight","retinaScaling","lowerCanvasClass","_copyCanvasStyle","getTopContext","fromEl","toEl","getSelectionElement","_discardActiveObject","_fireSelectionEvents","oldObjects","somethingChanged","added","oldObject","deselected","currentActives","_setActiveObject","onSelect","onDeselect","removeListeners","_renderControls","originalProperties","_realizeGroupTransformOnObject","_unwindGroupTransformOnObject","originalValues","clearContextTop","addEventOptions","passive","checkClick","mainTouchId","_bindEvents","addOrRemove","_getEventPrefix","functor","eventjsFunctor","canvasElement","eventTypePrefix","_onResize","_onMouseDown","_onMouseMove","_onMouseOut","_onMouseEnter","_onMouseWheel","_onContextMenu","_onDoubleClick","_onDragOver","_onDragEnter","_onDragLeave","_onDrop","_onTouchStart","eventjs","_onGesture","_onDrag","_onOrientationChange","_onShake","_onLongPress","_onMouseUp","_onTouchEnd","eventsBound","_simpleEventHandler","__onTransformGesture","__onDrag","__onMouseWheel","_target","__onOrientationChange","__onShake","__onLongPress","_fireEnterLeaveEvents","_cacheTransformEventData","_handleEvent","_resetTransformEventData","getPointerId","pointerId","isPrimary","touches","__onMouseDown","__onMouseUp","_willAddMouseDown","__onMouseMove","_shouldRender","groupSelector","shouldRender","isClick","_onMouseUpInDrawingMode","_finalizeCurrentTransform","targetWasActive","_maybeGroupObjects","activeOn","isMoving","originalControl","originalMouseUpHandler","_setCursorFromEvent","subTargets","absolutePointer","currentSubTargets","_scaling","hasStateChanged","_fire","_onMouseDownInDrawingMode","_onMouseMoveInDrawingMode","_previousPointer","shouldGroup","_shouldGroup","_handleGrouping","saveState","_transformObject","_fireOverOutEvents","fireSyntheticInOutEvents","oldTarget","evtOut","canvasEvtOut","evtIn","canvasEvtIn","_draggedoverTarget","inOpt","outOpt","inFires","targetChanged","previousTarget","nextTarget","_performTransformAction","getCornerCursor","_updateActiveSelection","_createActiveSelection","currentActiveObjects","removeWithUpdate","addWithUpdate","_createGroup","groupObjects","ActiveSelection","_groupSelectedObjects","aGroup","_collectObjects","currentObject","selectionX1Y1","selectionX2Y2","allowIntersect","intersectsWithRect","isContainedWithinRect","toCanvasElement","cropping","scaledWidth","scaledHeight","originalWidth","originalHeight","newZoom","vp","originalInteractive","newVp","originalRetina","originalContextTop","_enlivenObjects","_setBgOverlay","enlivenedCanvasClip","__setupCanvas","cbIfLoaded","__setBgOverlay","enlivedObject","_toDataURL","_toDataURLWithMultiplier","toDataURLWithMultiplier","cloneWithoutData","backgroundImageOpacity","backgroundImageStretch","objectCaching","borderDashArray","cornerDashArray","strokeDashOffset","borderOpacityWhenMoving","borderScaleFactor","minScaleLimit","hasControls","hasBorders","lockMovementX","lockMovementY","statefullCache","noScaleCache","paintFirst","stateProperties","cacheProperties","colorProperties","absolutePositioned","_cacheProperties","_updateCacheCanvas","_limitCacheSize","limitedDims","capped","_getCacheCanvasDimensions","objectScale","getTotalObjectScaling","neededX","neededY","drawingWidth","drawingHeight","minCacheSize","dimensionsChanged","cacheWidth","cacheHeight","zoomChanged","shouldRedraw","additionalWidth","additionalHeight","shouldResizeCanvas","canvasWidth","canvasHeight","sizeGrowing","getHeightOfLine","needFullTransform","_removeDefaultValues","getObjectScaling","retina","getObjectOpacity","shouldConstrainValue","isChanged","groupNeedsUpdate","_constrainScale","isOnACache","setOnGroup","getViewportTransform","isNotVisible","isOnScreen","_setupCompositeOperation","drawSelectionBackground","_setOpacity","drawCacheOnCanvas","_removeCacheCanvas","drawObject","propertySet","isCacheDirty","hasStroke","hasFill","needsItsOwnCache","ownCaching","willDrawShadow","drawClipPathOnCache","originalFill","originalStroke","_setClippingProperties","_drawClipPath","skipCanvas","_getNonTransformedDimensions","_removeShadow","_setStrokeStyles","decl","lineDashOffset","_applyPatternForTransformedGradient","_applyPatternGradientTransform","_setFillStyles","dashArray","drawBorders","forActiveSelection","drawBordersInGroup","scaling","multX","multY","_renderPaintInOrder","_renderStroke","_renderFill","pCtx","pCanvas","_findCenterFromElement","_assignTransformMatrixProps","preserveAspectRatioOptions","cropX","cropY","objectForm","cloneAsImage","origParams","originalGroup","originalShadow","withoutTransform","withoutShadow","boundingRect","shadowOffset","originalCanvas","isType","shouldCenterOrigin","_setOriginToCenter","_resetOrigin","centerH","viewportCenterH","centerV","viewportCenterV","viewportCenter","getLocalPointer","pClicked","objectLeftTop","createAccessors","extraParam","translateToGivenOrigin","fromOriginX","fromOriginY","toOriginX","toOriginY","translateToCenterPoint","leftTop","getPointByOrigin","adjustPosition","offsetFrom","offsetTo","hypotFull","getScaledWidth","xFull","yFull","_originalOriginX","_originalOriginY","originPoint","multiplyMatrices","oCoords","aCoords","lineCoords","ownMatrixCache","matrixCache","_getCoords","absolute","calculate","calcACoords","calcLineCoords","getCoords","pointTL","pointBR","otherCoords","lines","_getImageLines","_findCrossPoints","_containsCenterOfCanvas","isPartiallyOnScreen","topline","rightline","bottomline","leftline","xi","iLine","xcount","lineKey","getScaledHeight","scaleToWidth","boundingRectFactor","scaleToHeight","cosP","sinP","cosPSinP","cosPMinusSinP","calcOCoords","_calcRotateMatrix","_calcTranslateMatrix","startMatrix","_calculateCurrentDimensions","forEachControl","skipCorners","_setCornerCoords","transformMatrixKey","sep","prefix","tMatrix","noSkew","_finalizeDimensions","getSvgColorString","getSvgStyles","skipShadow","getSvgFilter","getSvgSpanStyles","useWhiteSpace","term","textDecoration","getSvgTextDecoration","decoration","getSvgCommons","getSvgTransform","full","_setSVGBg","textBgRects","_getFillAttributes","_createBaseSVGMarkup","_toSVG","_createBaseClipPathSVGMarkup","objectMarkup","commonPieces","clipPathMarkup","noStyle","styleInfo","shadowInfo","withShadow","vectorEffect","absoluteClipPath","addPaintOrder","originalSet","saveProps","tmpObj","_isEqual","origValue","firstPass","dashedPropertySet","forTouch","isControlVisible","touchCorner","controlObject","shouldStroke","setControlVisible","FX_DURATION","fxCenterObjectH","callbacks","empty","fxCenterObjectV","fxRemove","skipCallbacks","propsToAnimate","out","_animate","propPair","propIsColor","valueProgress","timeProgress","coordProps","makeEdgeToOriginGetter","propertyNames","originValues","axis1","axis2","dimension","nearest","farthest","Line","_setWidthHeight","_getLeftToOriginX","_getTopToOriginY","calcLinePoints","origStrokeStyle","xMult","yMult","ATTRIBUTE_NAMES","parsedAttributes","startAngle","endAngle","setRadius","svgString","getRadiusX","getRadiusY","Triangle","widthBy2","heightBy2","piBy2","Ellipse","getRx","getRy","_initRxRy","isRounded","bezierCurveTo","Polyline","exactBoundingBox","_setPositionDimensions","_projectStrokeOnPoints","correctLeftTop","calcDim","_calcDimensions","correctSize","fromSVG","diffX","diffY","commonRender","fromElementGenerator","_class","Polygon","_setPath","_renderPathCommands","subpathStartX","subpathStartY","_getOffsetTransform","aX","aY","pathUrl","elivenedObjects","useSetOnGroup","isAlreadyGrouped","_updateObjectsACoords","_calcBounds","_updateObjectsCoords","_updateObjectCoords","nested","_restoreObjectsState","_includeDefaultValues","objsToObject","originalDefaults","_obj","ownCache","groupMatrix","toActiveSelection","ungroupOnCanvas","setObjectsCoords","onlyWidthHeight","iLen","jLen","_getBounds","minXY","maxXY","toGroup","newGroup","childrenOverride","srcFromAttribute","_lastScaleX","_lastScaleY","_filterScalingX","_filterScalingY","minimumScaleTrigger","cacheKey","imageSmoothing","filters","_initElement","_element","setElement","removeTexture","_initConfig","applyFilters","resizeFilter","applyResizeFilters","backend","filterBackend","evictCachesForKey","getCrossOrigin","getOriginalSize","_stroke","filterObj","getSrc","hasCrop","strokeSvg","imageMarkup","imageRendering","getSvgSrc","origFill","setSrc","minimumScale","elementToFilter","_filteredEl","sourceWidth","sourceHeight","isNeutralState","_needsResize","elementToDraw","elWidth","elHeight","sX","sY","sW","sH","maxDestW","maxDestH","_resetWidthHeight","CSS_CANVAS","_initFilters","pAR","rWidth","rHeight","pWidth","pHeight","_object","resizeFilters","_getAngleValueForStraighten","straighten","fxStraighten","straightenObject","fxStraightenObject","testPrecision","precision","fragmentSource","fragmentShader","createShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","setupGLContext","captureGPUInfo","getParameter","MAX_TEXTURE_SIZE","precisions","webGlPrecision","createWebGLCanvas","aPosition","Float32Array","chooseFastestCopyGLTo2DMethod","canUseImageData","canMeasurePerf","canUseArrayBuffer","ArrayBuffer","canUseUint8Clamped","copyGLTo2D","drawImageTime","testContext","glOptions","premultipliedAlpha","depth","stencil","antialias","clearColor","cachedTexture","getCachedTexture","sourceTexture","createTexture","targetTexture","originalTexture","passes","webgl","programCache","pass","tempFbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","applyTo","resizeCanvasIfNeeded","bindTexture","TEXTURE_2D","deleteTexture","deleteFramebuffer","clearWebGLCaches","textureCache","textureImageSource","texture","texParameteri","TEXTURE_MAG_FILTER","NEAREST","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","texImage2D","uniqueId","gpuInfo","vendor","ext","getExtension","UNMASKED_RENDERER_WEBGL","UNMASKED_VENDOR_WEBGL","sourceElement","originalEl","originalImageData","BaseFilter","vertexSource","createProgram","vertexShader","VERTEX_SHADER","getShaderInfoLog","program","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","attributeLocations","getAttributeLocations","uniformLocations","getUniformLocations","uStepW","getUniformLocation","uStepH","getAttribLocation","sendAttributeData","aPositionData","attributeLocation","buffer","createBuffer","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bufferData","STATIC_DRAW","_setupFrameBuffer","framebufferTexture2D","COLOR_ATTACHMENT0","_swapTextures","main","mainParameter","applyToWebGL","applyTo2d","retrieveShader","shader","useProgram","uniform1f","sendUniformData","viewport","drawArrays","TRIANGLE_STRIP","bindAdditionalTexture","textureUnit","activeTexture","TEXTURE0","unbindAdditionalTexture","getMainParameter","setMainParameter","createHelpLayer","helpLayer","mainP","ColorMatrix","colorsOnly","uColorMatrix","uConstants","constants","uniformMatrix4fv","uniform4fv","Brightness","brightness","uBrightness","Convolute","opaque","Convolute_3_1","Convolute_3_0","Convolute_5_1","Convolute_5_0","Convolute_7_1","Convolute_7_0","Convolute_9_1","Convolute_9_0","dstOff","scx","scy","srcOff","wt","weights","side","halfSide","sw","sh","dst","alphaFac","uMatrix","uOpaque","uHalfSize","uSize","uniform1fv","Grayscale","lightness","luminosity","uMode","uniform1i","Invert","invert","uInvert","Noise","noise","rand","uNoise","uSeed","Pixelate","blocksize","_j","_iLen","_jLen","uBlocksize","RemoveColor","useAlpha","lowC","highC","uLow","uHigh","Brownie","Vintage","Kodachrome","Technicolor","Polaroid","Sepia","BlackWhite","BlendColor","lighten","darken","exclusion","tint","buildSource","tg","alpha1","uColor","BlendImage","mask","TEXTURE1","calculateMatrix","canvas1","blendData","blendImage","uTransformMatrix","uImage","uniformMatrix3fv","Resize","resizeType","lanczosLobes","uDelta","uTaps","uniform2fv","horizontal","taps","filterWindow","getFilterWindow","generateShader","tempScale","getTaps","lobeFunction","lanczosCreate","offsets","fragmentSourceTOP","dW","dH","lobes","xx","rcpScaleX","rcpScaleY","newData","oW","oH","sliceByTwo","hermiteFastResize","bilinearFiltering","lanczosResize","tmpCanvas","mult","doneW","doneH","stepW","stepH","dX","dY","srcData","destImg","destData","lanczos","ratioX","ratioY","rcpRatioX","rcpRatioY","range2X","range2Y","cacheLanc","icenter","fX","fY","xDiff","yDiff","chnl","origPix","w4","pixels","destImage","destPixels","ratioW","ratioH","ratioWHalf","ratioHHalf","img2","data2","weightsAlpha","gxR","gxG","gxB","gxA","yy","w0","Contrast","contrast","contrastF","uContrast","Saturation","saturation","adjust","uSaturation","Vibrance","vibrance","avg","amt","uVibrance","Blur","simpleBlur","canvas2","blurLayer1","blurLayer2","percent","ctx1","ctx2","newImageData","chooseRightDelta","blurScale","Gamma","gamma","rInv","gInv","bInv","rVals","gVals","bVals","uGamma","uniform3fv","Composed","subFilters","HueRotation","rotation","rad","aThird","aThirdSqtSin","OneMinusCos","additionalProps","_dimensionAffectingProps","_reNewline","_reSpacesAndTabs","_reSpaceAndTab","_reWords","superscript","baseline","subscript","textBackgroundColor","pathStartOffset","pathSide","pathAlign","_fontSizeFraction","_fontSizeMult","charSpacing","_measuringContext","_styleProperties","__charBounds","CACHE_FONT_SIZE","MIN_TEXT_WIDTH","__skipDimension","setPathInfo","initDimensions","segmentsInfo","getMeasuringContext","_splitText","newLines","_splitTextIntoLines","_textLines","graphemeLines","_unwrappedTextLines","_unwrappedLines","_text","graphemeText","_clearCache","calcTextWidth","cursorWidth","calcTextHeight","enlargeSpaces","diffSpace","currentLineWidth","numberOfSpaces","accumulatedSpace","charBound","spaces","isEndOfWrapping","getLineWidth","kernedWidth","lineIndex","missingNewlineOffset","_setTextStyles","_renderTextLinesBackground","_renderTextDecoration","_renderText","_renderTextStroke","_renderTextFill","charStyle","forMeasuring","textBaseline","_getFontDeclaration","_renderTextLine","_renderChars","styleHas","heightOfLine","lineLeftOffset","lastColor","charBox","currentColor","drawStart","leftOffset","_getLeftOffset","lineTopOffset","_getTopOffset","boxStart","boxWidth","_getLineLeftOffset","getValueOfPropertyAt","renderLeft","getFontCache","cacheProp","_measureChar","_char","previousChar","prevCharStyle","coupleWidth","previousWidth","fontCache","couple","stylesAreEqual","fontMultiplier","measureText","getHeightOfChar","measureLine","lineInfo","_measureLine","_getWidthOfCharSpacing","grapheme","prevGrapheme","graphemeInfo","startingPoint","totalPathLength","lineBounds","positionInPath","_getGraphemeBox","_setGraphemeOnPath","numOfSpaces","centerPosition","skipLeft","getCompleteStyleDeclaration","previousBox","__lineHeights","_renderTextCommon","lineHeights","isEmptyStyles","actualStyle","nextStyle","timeToRender","drawingLeft","isJustify","charsToRender","shortCut","isLtr","currentDirection","_renderChar","_applyPatternGradientTransformText","handleFiller","fillOffsets","strokeOffsets","_getStyleDeclaration","fullDecl","shouldFill","fillText","strokeText","setSuperscript","_setScript","setSubscript","schema","loc","get2DCursorLocation","setSelectionStyles","lineDiff","__lineWidths","_shouldClearDimensionCache","shouldClear","_forceClearCache","_size","_dy","lastDecoration","currentDecoration","currentFill","lastFill","topOffset","styleObject","fontIsGeneric","genericFonts","newLine","allProperties","needsDims","isAddingPath","parsedAnchor","textAnchor","originalStrokeWidth","textHeightScaleFactor","scaledDiff","textHeight","offX","objectCopy","textInstance","pathInstance","p3","cleanStyle","letterCount","stylePropertyValue","stylesCount","allStyleObjectPropertiesMatch","graphemeCount","removeStyle","lineNum","charNum","_extendStyles","_getLineStyle","_setLineStyle","_setStyleDeclaration","selectionStart","skipWrapping","getSelectionStyles","selectionEnd","getStyleAtPosition","lineStyle","_deleteStyleDeclaration","_deleteLineStyle","parseDecoration","IText","editable","cursorColor","cursorDelay","cursorDuration","caching","hiddenTextareaContainer","_reSpace","_currentCursorOpacity","_selectionDirection","_abortCursorAnimation","__widthOfSpace","inCompositionMode","initBehavior","setSelectionStart","_updateAndFire","setSelectionEnd","_fireSelectionChanged","_updateTextarea","initDelayedCursor","cursorOffsetCache","renderCursorOrSelection","skipRestore","_clearTextArea","boundaries","_getCursorBoundaries","renderCursor","renderSelection","_getCursorBoundariesOffsets","cursorPosition","bound","cursorLocation","charHeight","__isMousedown","startLine","endLine","startChar","endChar","realLineHeight","lineOffset","boxEnd","drawWidth","drawHeight","extraTop","compositionColor","getCurrentCharFontSize","cp","_getCurrentCharIndex","getCurrentCharColor","initAddedHandler","initRemovedHandler","initCursorSelectionHandlers","initDoubleClickSimulation","mouseMoveHandler","_initCanvasHandlers","_removeCanvasHandlers","_tick","_currentTickState","_animateCursor","targetOpacity","completeMethod","tickState","isAborted","_onTickComplete","_cursorTimeout1","_currentTickCompleteState","restart","abortCursorAnimation","_cursorTimeout2","selectAll","getSelectedText","findWordBoundaryLeft","startFrom","findWordBoundaryRight","findLineBoundaryLeft","findLineBoundaryRight","searchWordBoundary","selectWord","newSelectionStart","newSelectionEnd","selectLine","exitEditingOnOthers","initHiddenTextarea","_saveEditingProps","_setEditingProps","_textBeforeEdit","initMouseMoveHandler","getSelectionStartFromPointer","currentStart","currentEnd","__selectionStartOnMouseDown","restartCursorIfNeeded","fromStringToGraphemeSelection","smallerTextStart","graphemeStart","smallerTextEnd","fromGraphemeToStringSelection","newSelection","updateTextareaPosition","updateFromTextArea","_calcTextareaPosition","desiredPosition","compositionStart","upperCanvas","upperCanvasWidth","upperCanvasHeight","_savedProps","_restoreEditingProps","isTextChanged","_removeExtraneousStyles","removeStyleFromTo","styleObj","cursorStart","cursorEnd","lineStart","charStart","lineEnd","charEnd","shiftLineStyles","numericChar","clonedStyles","numericLine","insertNewlineStyleObject","qty","copiedStyle","currentCharStyle","newLineStyles","somethingAdded","isEndOfLine","numIndex","styleCarriedOver","insertCharStyleObject","currentLineStyles","currentLineStylesCloned","numericIndex","newStyle","insertNewStyleBlock","insertedText","cursorLoc","addedLines","linesLength","setSelectionStartEndWithShift","setSelectionInBoundaries","__lastClickTime","__lastLastClickTime","__lastPointer","__newClickTime","newPointer","isTripleClick","_stopEvent","__lastIsEditing","__lastSelected","initMousedownHandler","initMouseupHandler","initClicks","doubleClickHandler","tripleClickHandler","_mouseDownHandler","setCursorByClick","_mouseDownHandlerBefore","currentActive","mouseOffset","_getNewSelectionStartFromOffset","distanceBtwLastCharAndCursor","distanceBtwNextCharAndCursor","onKeyUp","onInput","paste","onCompositionStart","onCompositionUpdate","onCompositionEnd","_clickHandlerInitialized","keysMap","keysMapRtl","ctrlKeysMapUp","ctrlKeysMapDown","keyMap","metaKey","stopImmediatePropagation","_copyDone","fromPaste","removedText","removeFrom","removeTo","nextText","charCount","nextCharCount","charDiff","textareaSelection","backDelete","copiedText","copiedTextStyle","compositionEnd","_getClipboardData","clipboardData","_getWidthBeforeCursor","widthBeforeCursor","getDownCursorOffset","isRight","selectionProp","_getSelectionForOffset","indexOnOtherLine","_getIndexOnLine","getUpCursorOffset","textBeforeCursor","charWidth","foundMatch","widthOfCharsOnLine","indexOnLine","leftEdge","rightEdge","offsetFromLeftEdge","moveCursorDown","_moveCursorUpOrDown","moveCursorUp","moveCursorWithShift","moveCursorWithoutShift","moveCursorLeft","_moveCursorLeftOrRight","_move","_moveLeft","_moveRight","moveCursorLeftWithoutShift","change","moveCursorLeftWithShift","moveCursorRight","moveCursorRightWithShift","moveCursorRightWithoutShift","changed","removeChars","insertChars","_getSVGLeftTopOffsets","textAndBg","_getSVGTextAndBg","textTop","textLeft","_wrapSVGTextAndBg","lineTop","textSpans","textTopOffset","textLeftOffset","_setSVGTextLineBg","_setSVGTextLineText","_createTextCharSpan","styleDecl","shouldUseWhitespace","styleProps","fillStyles","dySpan","_pushTextBgRect","fillColor","_getSVGLineTopOffset","lastHeight","dynamicMinWidth","__cachedLines","_wordJoiners","splitByGrapheme","_styleMap","_generateStyleMap","textInfo","realLineCount","realLineCharCount","isWrapping","nextOffset","shouldLimit","mapNextLine","_wrapText","desiredWidth","wrapped","_wrapLine","_measureWord","charOffset","_line","reservedSpace","words","infix","wordWidth","infixWidth","largestWordWidth","lineJustStarted","additionalSpace","getMinWidth","linesToKeep","scaleSkewStyleHandler","scaleStyleHandler","objectControls","textBoxControls","assertion","assertionError","stringToByteArray$1","base64","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","ENCODED_VALS","ENCODED_VALS_WEBSAFE","HAS_NATIVE_SUPPORT","atob","encodeByteArray","webSafe","init_","byteToCharMap","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","encodeString","btoa","decodeString","bytes","byteArrayToString","decodeStringToByteArray","charToByteMap","byte4","base64Encode","utf8Bytes","base64urlEncodeWithoutPadding","base64Decode","deepExtend","Deferred","promise","wrapCallback","getUA","isMobileCordova","isNode","isBrowserExtension","runtime","browser","isReactNative","isIndexedDBAvailable","indexedDB","FirebaseError","customData","super","captureStackTrace","ErrorFactory","service","serviceName","errors","fullCode","PATTERN","replaceTemplate","fullMessage","jsonEval","header","claims","signature","safeGet","contextObj","aKeys","bKeys","aProp","bProp","isObject","thing","querystring","querystringParams","arrayVal","querystringDecode","extractQuerystring","queryStart","fragmentStart","Sha1","chain_","buf_","W_","pad_","inbuf_","total_","blockSize","compress_","buf","W","lengthMinusBlock","inbuf","digest","totalBits","createSubscribe","executor","onNoObservers","proxy","ObserverProxy","subscribe","observers","unsubscribes","observerCount","task","finalized","forEachObserver","nextOrObserver","methods","implementsAnyMethods","unsub","unsubscribeOne","finalError","sendOne","validateArgCount","fnName","argCount","argError","errorPrefix","argName","validateCallback","argumentName","optional","validateContextObject","stringLength","_delegate","instanceFactory","multipleInstances","serviceProps","instantiationMode","onInstanceCreated","setInstantiationMode","setMultipleInstances","setServiceProps","setInstanceCreatedCallback","DEFAULT_ENTRY_NAME","instancesDeferred","instancesOptions","onInitCallbacks","normalizedIdentifier","normalizeInstanceIdentifier","deferred","isInitialized","shouldAutoInitialize","getOrInitializeService","instanceIdentifier","getImmediate","getComponent","setComponent","isComponentEager","instanceDeferred","clearInstance","services","INTERNAL","_delete","isComponentSet","getOptions","onInit","existingCallbacks","existingInstance","invokeOnInitCallbacks","ComponentContainer","providers","addComponent","getProvider","addOrOverwriteComponent","getProviders","LogLevel","levelStringToEnum","DEBUG","VERBOSE","INFO","WARN","ERROR","SILENT","defaultLogLevel","ConsoleMethod","defaultLogHandler","logType","logLevel","Logger","_logLevel","_logHandler","_userLogHandler","setLogLevel","logHandler","userLogHandler","debug","instanceOfAny","constructors","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","receiver","IDBTransaction","objectStoreNames","objectStore","transformCachableValue","IDBDatabase","transaction","IDBCursor","advance","continue","continuePrimaryKey","unwrap","storeNames","tx","DOMException","cacheDonePromiseForTransaction","IDBObjectStore","IDBIndex","IDBRequest","promisifyRequest","readMethods","writeMethods","cachedMethods","getMethod","targetFuncName","useIndex","isWrite","oldTraps","PlatformLoggerServiceImpl","getPlatformInfoString","isVersionServiceProvider","library","logString","name$o","version$1","logger","PLATFORM_LOG_STRING","_apps","_components","_addComponent","_addOrOverwriteComponent","_registerComponent","heartbeatController","triggerHeartbeat","_removeServiceInstance","_clearComponents","ERROR_FACTORY","FirebaseAppImpl","_isDeleted","_config","_name","_automaticDataCollectionEnabled","automaticDataCollectionEnabled","_container","checkDestroyed","isDeleted","appName","SDK_VERSION","initializeApp","rawConfig","existingApp","newApp","getApps","deleteApp","registerVersion","libraryKeyOrName","libraryMismatch","versionMismatch","warning","onLog","logCallback","customLogLevel","level","setUserLogHandler","inst","DB_NAME","DB_VERSION","STORE_NAME","dbPromise","getDbPromise","upgrade","blocking","terminated","openPromise","oldVersion","newVersion","db","openDB","createObjectStore","originalErrorMessage","writeHeartbeatsToIndexedDB","heartbeatObject","put","computeKey","idbGetError","appId","HeartbeatServiceImpl","_heartbeatsCache","HeartbeatStorageImpl","_heartbeatsCachePromise","read","agent","getUTCDateString","lastSentHeartbeatDate","heartbeats","singleDateHeartbeat","hbTimestamp","overwrite","getHeartbeatsHeader","heartbeatsToSend","unsentEntries","heartbeatsCache","maxSize","heartbeatEntry","hb","dates","countBytes","extractHeartbeatsForHeader","headerString","_canUseIndexedDBPromise","runIndexedDBEnvironmentCheck","preExist","DB_CHECK_NAME","onsuccess","deleteDatabase","onupgradeneeded","readHeartbeatsFromIndexedDB","heartbeatsObject","existingHeartbeatsObject","firebase","removeApp","_getService","firebase$1","createFirebaseNamespace","firebaseAppImpl","apps","__esModule","appCompat","registerComponent","componentNameWithoutCompat","serviceNamespace","appArg","useAsService","modularAPIs","createFirebaseNamespaceCore","extendNamespace","sdkVersion","ProviderId","FACEBOOK","GITHUB","GOOGLE","PASSWORD","PHONE","TWITTER","debugErrorMap","prodErrorMap","_DEFAULT_AUTH_ERROR_FACTORY","logClient","_logError","_fail","authOrCode","rest","createErrorInternal","_createError","_errorWithCustomMessage","errorMap","_assertInstanceOf","fullParams","_errorFactory","_assert","debugFail","failure","debugAssert","instanceCache","_getInstance","_getCurrentUrl","_isHttpOrHttps","_getCurrentScheme","Delay","shortDelay","longDelay","onLine","_emulatorUrl","emulator","FetchProvider","fetchImpl","headersImpl","responseImpl","Headers","Response","SERVER_ERROR_MAP","DEFAULT_API_TIMEOUT_MS","_addTidIfNecessary","tenantId","_performApiRequest","customErrorMap","_performFetchWithErrorHandling","apiKey","_getAdditionalHeaders","languageCode","_getFinalTarget","apiHost","referrerPolicy","fetchFn","_canInitEmulator","networkTimeout","NetworkTimeout","race","clearNetworkTimeout","_makeTaggedError","serverErrorCode","serverErrorMessage","authError","_performSignInRequest","_serverResponse","apiScheme","timer","errorParams","_tokenResponse","utcTimestampToDateString","utcTimestamp","toUTCString","secondsStringToMilliseconds","_parseToken","algorithm","decoded","_logoutIfInvalidated","bypassAuthState","isUserInvalidated","currentUser","signOut","ProactiveRefresh","isRunning","timerId","errorBackoff","_start","_stop","getInterval","wasError","interval","stsTokenManager","expirationTime","iteration","getIdToken","UserMetadata","lastLoginAt","_initializeTime","lastSignInTime","creationTime","_copy","_reloadWithoutSaving","idToken","getAccountInfo","coreAccount","_notifyReloadListener","newProviderData","providerUserInfo","providerId","rawId","photoURL","providerData","deduped","mergeProviderData","oldIsAnonymous","newIsAnonymous","passwordHash","localId","emailVerified","StsTokenManager","refreshToken","accessToken","isExpired","updateFromServerResponse","expiresIn","parsedToken","exp","iat","_tokenExpiresIn","updateTokensAndExpiration","getToken","forceRefresh","clearRefreshToken","oldToken","tokenApiHost","access_token","expires_in","refresh_token","requestStsToken","expiresInSec","fromJSON","manager","_assign","_clone","_performRefresh","assertStringOrUndefined","UserImpl","proactiveRefresh","reloadUserInfo","reloadListener","_persistUserIfCurrent","_notifyListenersIfCurrent","getIdTokenResult","userInternal","auth_time","signInProvider","authTime","issuedAtTime","signInSecondFactor","userInfo","_onReload","_startProactiveRefresh","_stopProactiveRefresh","_updateTokensIfNecessary","tokensRefreshed","deleteAccount","_redirectEventId","_fromJSON","_f","_g","_h","plainObjectTokenManager","_fromIdTokenResponse","idTokenResponse","InMemoryPersistence","_isAvailable","_get","_remove","_addListener","_listener","_removeListener","inMemoryPersistence","_persistenceKeyName","PersistenceUserManager","persistence","userKey","fullUserKey","fullPersistenceKey","boundEventHandler","_onStorageEvent","setCurrentUser","getCurrentUser","blob","removeCurrentUser","savePersistenceForRedirect","setPersistence","newPersistence","persistenceHierarchy","availablePersistences","selectedPersistence","userToMigrate","migrationHierarchy","_shouldAllowMigration","_getBrowserName","_isIEMobile","_isFirefox","_isBlackBerry","_isWebOS","_isSafari","_isChromeIOS","_isAndroid","_isIOS","_isMobileBrowser","_getClientVersion","clientPlatform","frameworks","reportedPlatform","reportedFrameworks","AuthMiddlewareQueue","pushCallback","onAbort","wrappedCallback","runMiddleware","nextUser","onAbortStack","beforeStateCallback","originalMessage","AuthImpl","heartbeatServiceProvider","emulatorConfig","operations","authStateSubscription","Subscription","idTokenSubscription","beforeStateQueue","redirectUser","isProactiveRefreshEnabled","_isInitialized","_deleted","_initializationPromise","_popupRedirectResolver","lastNotifiedUid","appVerificationDisabledForTesting","clientVersion","sdkClientVersion","_initializeWithPersistence","popupRedirectResolver","persistenceManager","_shouldInitProactively","_initialize","initializeCurrentUser","assertedPersistence","_currentUser","_updateCurrentUser","previouslyStoredUser","futureCurrentUser","needsTocheckMiddleware","authDomain","getOrInitRedirectPersistenceManager","redirectUserEventId","storedUserEventId","tryRedirectSignIn","directlySetCurrentUser","_overrideRedirectResult","reloadAndSetCurrentUserOrClear","redirectResolver","_completeRedirectFn","_setRedirectUser","useDeviceLanguage","navigatorLanguage","languages","language","_getUserLanguage","updateCurrentUser","userExtern","skipBeforeStateCallbacks","notifyAuthListeners","redirectPersistenceManager","_getPersistence","_updateErrorMap","onAuthStateChanged","completed","registerStateListener","beforeAuthStateChanged","onIdTokenChanged","redirectManager","resolver","_redirectPersistence","_redirectUserForId","currentUid","subscription","addObserver","_logFramework","framework","_getFrameworks","heartbeatsHeader","_castAuth","extractProtocol","protocolEnd","parsePort","portStr","port","AuthCredential","signInMethod","_getIdTokenResponse","_auth","_linkToIdToken","_idToken","_getReauthenticationResolver","resetPassword","updateEmailPassword","sendOobCode","EmailAuthCredential","_email","_password","_tenantId","_fromEmailAndPassword","_fromEmailAndCode","oobCode","signInWithPassword","returnSecureToken","signInWithEmailLink$1","signInWithEmailLinkForLinking","signInWithIdp","OAuthCredential","pendingToken","_fromParams","cred","oauthToken","oauthTokenSecret","buildRequest","autoCreate","requestUri","postBody","VERIFY_PHONE_NUMBER_FOR_EXISTING_ERROR_MAP_","PhoneAuthCredential","_fromVerification","verificationId","verificationCode","_fromTokenResponse","temporaryProof","signInWithPhoneNumber$1","_makeVerificationRequest","linkWithPhoneNumber$1","verifyPhoneNumberForExisting","sessionInfo","ActionCodeURL","actionLink","parseMode","continueUrl","parseLink","doubleDeepLink","iOSDeepLink","parseDeepLink","EmailAuthProvider","PROVIDER_ID","credential","credentialWithLink","emailLink","actionCodeUrl","EMAIL_PASSWORD_SIGN_IN_METHOD","EMAIL_LINK_SIGN_IN_METHOD","FederatedAuthProvider","defaultLanguageCode","customParameters","setDefaultLanguage","setCustomParameters","customOAuthParameters","getCustomParameters","BaseOAuthProvider","scopes","addScope","scope","getScopes","OAuthProvider","credentialFromJSON","_credential","rawNonce","credentialFromResult","userCredential","oauthCredentialFromTaggedObject","credentialFromError","tokenResponse","oauthIdToken","oauthAccessToken","FacebookAuthProvider","FACEBOOK_SIGN_IN_METHOD","credentialFromTaggedObject","GoogleAuthProvider","GOOGLE_SIGN_IN_METHOD","GithubAuthProvider","GITHUB_SIGN_IN_METHOD","SAMLAuthCredential","_create","SAMLAuthProvider","samlCredentialFromTaggedObject","TwitterAuthProvider","TWITTER_SIGN_IN_METHOD","signUp","UserCredentialImpl","operationType","providerIdForResponse","_forOperation","MultiFactorError","_fromErrorAndOperation","_processCredentialSavingMfaContextIfNecessary","providerDataAsNames","pid","_link$1","_assertLinkedStatus","expected","_reauthenticate","sub","_signInWithCredential","signInWithCredential","linkWithCredential","reauthenticateWithCredential","MultiFactorInfoImpl","factorId","mfaEnrollmentId","enrollmentTime","enrolledAt","_fromServerResponse","enrollment","PhoneMultiFactorInfoImpl","phoneInfo","_setActionCodeSettingsOnRequest","actionCodeSettings","dynamicLinkDomain","canHandleCodeInApp","handleCodeInApp","iOS","bundleId","iOSBundleId","android","packageName","androidInstallApp","installApp","androidMinimumVersionCode","minimumVersion","androidPackageName","checkActionCode","authModular","requestType","mfaInfo","multiFactorInfo","previousEmail","updateEmailOrPassword","GenericAdditionalUserInfo","isNewUser","FederatedAdditionalUserInfoWithUsername","username","FacebookAdditionalUserInfo","GithubAdditionalUserInfo","login","GoogleAdditionalUserInfo","TwitterAdditionalUserInfo","screenName","getAdditionalUserInfo","rawUserInfo","kind","MultiFactorSessionImpl","_fromIdtoken","_fromMfaPendingCredential","mfaPendingCredential","multiFactorSession","pendingCredential","MultiFactorResolverImpl","session","hints","signInResolver","_fromError","authExtern","mfaResponse","_process","resolveSignIn","assertionExtern","MultiFactorUserImpl","enrolledFactors","_fromUser","getSession","enroll","finalizeMfaResponse","unenroll","infoOrUid","multiFactorUserCache","STORAGE_AVAILABLE_KEY","BrowserPersistenceClass","storageRetriever","BrowserLocalPersistence","onStorageEvent","localCache","pollTimer","safariLocalStorageNotSynced","_iframeCannotSyncWebStorage","_isIframe","fallbackToPolling","forAllChangedKeys","oldValue","_oldValue","notifyListeners","detachListener","stopPolling","storedValue","triggerListeners","startPolling","StorageEvent","attachListener","browserLocalPersistence","BrowserSessionPersistence","browserSessionPersistence","Receiver","eventTarget","handlersMap","handleEvent","receivers","isListeningto","newInstance","messageEvent","handlers","ports","fulfilled","_allSettled","_subscribe","eventHandler","_unsubscribe","_generateEventId","Sender","removeMessageHandler","messageChannel","port1","_send","timeout","MessageChannel","completionTimer","ackTimer","port2","_window","_isWorker","DB_OBJECTSTORE_NAME","DB_DATA_KEYPATH","DBPromise","toPromise","getObjectStore","isReadWrite","_openDatabase","keyPath","_deleteDatabase","_putObject","_deleteObject","IndexedDBLocalPersistence","pendingWrites","serviceWorkerReceiverAvailable","activeServiceWorker","_workerInitializationPromise","initializeServiceWorkerMessaging","_openDb","_withRetries","op","numAttempts","initializeReceiver","initializeSender","_origin","keyProcessed","_poll","serviceWorker","_getActiveServiceWorker","notifyServiceWorker","controller","_withPendingWrite","getObject","getAllRequest","getAll","keysInResult","fbase_key","localKey","indexedDBLocalPersistence","_loadJS","charset","_generateCallbackName","_WIDGET_ID_START","MockReCaptcha","_widgets","MockWidget","optWidgetId","getResponse","execute","containerOrId","responseToken","clickHandler","checkIfDeleted","chars","allowedChars","generateRandomAlphaNumericString","expiredCallback","_JSLOAD_CALLBACK","NETWORK_TIMEOUT_DELAY","ReCaptchaLoaderImpl","hostLanguage","librarySeparatelyLoaded","grecaptcha","hl","isHostLanguageValid","shouldResolveImmediately","recaptcha","clearedOneInstance","MockReCaptchaLoaderImpl","RECAPTCHA_VERIFIER_TYPE","DEFAULT_PARAMS","destroyed","tokenChangeListeners","renderPromise","isInvisible","makeTokenCallback","_recaptchaLoader","validateStartingState","verify","assertNotDestroyed","getAssertedRecaptcha","tokenChange","makeRenderPromise","sitekey","existing","globalFunc","guaranteedEmpty","domReady","siteKey","recaptchaSiteKey","getRecaptchaParams","ConfirmationResultImpl","onConfirmation","authCredential","_verifyPhoneNumber","verifier","recaptchaToken","phoneInfoOptions","startEnrollPhoneMfa","phoneEnrollmentInfo","phoneSessionInfo","multiFactorHint","multiFactorUid","startSignInPhoneMfa","phoneSignInInfo","phoneResponseInfo","sendPhoneVerificationCode","verifyPhoneNumber","phoneOptions","applicationVerifier","_withDefaultResolver","resolverOverride","PHONE_SIGN_IN_METHOD","IdpCredential","_buildIdpRequest","sessionId","returnIdpCredential","_signIn","_reauth","_link","AbstractPopupRedirectOperation","pendingPromise","eventManager","onExecution","registerConsumer","onAuthEvent","urlResponse","getIdpTask","unregisterAndCleanUp","unregisterConsumer","cleanUp","_POLL_WINDOW_CLOSE_TIMEOUT","PopupOperation","authWindow","currentPopupAction","executeNotNull","_openPopup","associatedEvent","_originValidation","_isIframeWebStorageSupported","pollUserCancellation","closed","PENDING_REDIRECT_KEY","redirectOutcomeMap","RedirectAction","readyOutcome","pendingRedirectKey","resolverPersistence","hasPendingRedirect","_getAndClearPendingRedirectStatus","_setPendingRedirectStatus","_getRedirectResult","resolverExtern","authInternal","prepareUserForRedirect","AuthEventManager","cachedEventUids","consumers","queuedRedirectEvent","hasHandledPotentialRedirect","lastProcessedEventTime","authEventConsumer","isEventForConsumer","sendToConsumer","saveEventToCache","onEvent","hasEventBeenHandled","handled","consumer","isNullRedirectEvent","isRedirectEvent","eventIdMatches","eventUid","_getProjectConfig","IP_ADDRESS_REGEX","HTTP_REGEX","matchDomain","currentUrl","ceUrl","escapedDomainPattern","NETWORK_TIMEOUT","resetUnloadedGapiModules","beacon","___jsl","hint","L","CP","cachedGApiLoader","_loadGapi","loadGapiIframe","gapi","iframes","ontimeout","Iframe","cbName","loadGapi","PING_TIMEOUT","IFRAME_ATTRIBUTES","tabindex","EID_FROM_APIHOST","getIframeUrl","eid","fw","BASE_POPUP_OPTIONS","statusbar","AuthPopup","WIDGET_PATH","EMULATOR_WIDGET_PATH","_getRedirectUrl","authType","redirectUrl","additionalParams","tid","paramsDict","getHandlerBase","WEB_STORAGE_SUPPORT_KEY","browserPopupRedirectResolver","eventManagers","originValidationPromises","availHeight","availWidth","optionsString","accum","standalone","_isIOSStandalone","createEvent","initMouseEvent","openAsNewWindowIOS","newWin","_open","_openRedirect","initAndGetManager","where","messageHandlersFilter","CROSS_ORIGIN_IFRAMES_FILTER","dontclear","restyle","setHideOnLeave","networkError","networkErrorTimer","clearTimerAndResolve","ping","_openIframe","register","iframeEvent","authEvent","authorizedDomains","domain","_validateOrigin","MultiFactorAssertionImpl","_finalizeEnroll","_finalizeSignIn","PhoneMultiFactorAssertionImpl","_fromCredential","finalizeEnrollPhoneMfa","phoneVerificationInfo","finalizeSignInPhoneMfa","PhoneMultiFactorGenerator","FACTOR_ID","AuthInterop","internalListeners","getUid","assertAuthConfigured","addAuthTokenListener","unsubscribe","updateProactiveRefresh","removeAuthTokenListener","_cordovaWindow","deps","authInstance","hierarchy","_initializeAuthInstance","_instanceIdentifier","_instance","getVersionForPlatform","CordovaAuthEventManager","passiveListeners","initPromise","resolveInialized","addPassiveListener","removePassiveListener","resetRedirect","initialized","_getAndRemoveEvent","persistenceKey","generateSessionId","searchParamsOrEmpty","cordovaPopupRedirectResolver","attachCallbackListeners","_k","universalLinks","missingPlugin","BuildInfo","cordova","plugins","browsertab","openUrl","isAvailable","InAppBrowser","_checkCordovaConfiguration","_generateNewEvent","_savePartialEvent","sessionDigest","TextEncoder","encode","buff","view","stringToArrayBuffer","crypto","subtle","padStart","computeSha256","_generateHandlerUrl","iabRef","cleanup","onCloseTimer","authEventSeen","closeBrowserTab","resumed","visibilityChanged","visibilityState","_waitForAppResume","handlerUrl","browserTabIsAvailable","_isIOS7Or8","_performRedirect","_cb","iosBundleId","handleOpenURL","noEventTimeout","generateNoEvent","universalLinksCb","partialEvent","finalEvent","callbackUrl","_getDeepLinkFromCallback","errorObject","parseJsonOrNull","_eventFromPartialAndUrl","existingHandleOpenURL","packagePrefix","_isAndroidOrIosCordovaScheme","_isWebStorageSupported","_isEdge","_isLocalStorageNotSynchronized","_isPopupRedirectSupported","_isLikelyCordova","Persistence","LOCAL","NONE","SESSION","_assert$3","PERSISTENCE_KEY","_savePersistenceForRedirect","getSessionStorageIfAvailable","_assert$2","CompatPopupRedirectResolver","browserResolver","cordovaResolver","underlyingResolver","selectUnderlyingResolver","assertedUnderlyingResolver","isCordova","_isCordova","credentialFromObject","convertCredential","credentialPromise","MultiFactorResolver","errorInternal","credErr","attachExtraErrorFields","additionalUserInfo","User","getOrCreate","convertConfirmationResult","confirmationResultPromise","confirmationResultExp","multiFactor","userModular","USER_MAP","linkAndRetrieveDataWithCredential","linkWithPhoneNumber","appVerifier","linkWithPopup","resolverInternal","linkWithRedirect","_linkWithRedirect","reauthenticateAndRetrieveDataWithCredential","reauthenticateWithPhoneNumber","reauthenticateWithPopup","reauthenticateWithRedirect","_reauthenticateWithRedirect","sendEmailVerification","sendEmailVerification$1","unlink","deleteLinkedAccounts","deleteProvider","providersLeft","pd","updateEmail","updatePassword","newPassword","updatePhoneNumber","phoneCredential","updateProfile","profileRequest","updateProfile$1","passwordProvider","verifyBeforeUpdateEmail","verifyAndChangeEmail","_assert$1","Auth","linkUnderlyingAuth","buildPersistenceHierarchy","useEmulator","disableWarnings","authority","hostAndPort","bracketedIPv6","extractHostAndPort","attachBanner","sty","emitEmulatorWarning","applyActionCode","applyActionCode$1","confirmPasswordReset","createUserWithEmailAndPassword","fetchProvidersForEmail","fetchSignInMethodsForEmail","continueUri","signinMethods","createAuthUri","isSignInWithEmailLink","getRedirectResult","addFrameworkForLogging","errorFn","wrapObservers","sendSignInLinkToEmail","sendSignInLinkToEmail$1","sendPasswordResetEmail","sendPasswordResetEmail$1","_validatePersistenceArgument","signInAndRetrieveDataWithCredential","signInAnonymously","customToken","signInWithCustomToken$1","signInWithEmailAndPassword","signInWithEmailLink","signInWithPhoneNumber","signInWithPopup","signInWithRedirect","_signInWithRedirect","verifyPasswordResetCode","oldNext","persistences","_getPersistencesFromRedirect","PhoneAuthProvider","authProvider","ActionCodeInfo","Operation","EMAIL_SIGNIN","PASSWORD_RESET","RECOVER_EMAIL","REVERT_SECOND_FACTOR_ADDITION","VERIFY_AND_CHANGE_EMAIL","VERIFY_EMAIL","RecaptchaVerifier","setSDKVersion","DOMStorageWrapper","domStorage_","prefix_","prefixedName_","storedVal","MemoryStorage","cache_","isInMemoryStorage","createStoragefor","domStorageName","domStorage","PersistentStorage","SessionStorage","LUIDGenerator","sha1","high","stringToByteArray","sha1Bytes","buildLogMessage_","varArgs","firstLog_","enableLogging$1","logger_","persistent","logWrapper","fatal","isInvalidJSONNumber","POSITIVE_INFINITY","NEGATIVE_INFINITY","MIN_NAME","MAX_NAME","nameCompare","aAsInt","tryParseInt","bAsInt","stringCompare","requireKey","ObjectToUniqueKey","splitStringBySize","segsize","dataSegs","doubleToIEEE754String","ln","LN2","bits","hexByteString","hexByte","INTEGER_REGEXP_","INTEGER_32_MIN","INTEGER_32_MAX","intVal","exceptionGuard","setTimeoutNonBlocking","AppCheckTokenProvider","appName_","appCheckProvider","appCheck","addTokenChangeListener","addTokenListener","notifyForInvalidToken","FirebaseAuthTokenProvider","firebaseOptions_","authProvider_","auth_","removeTokenChangeListener","EmulatorTokenProvider","OWNER","PROTOCOL_VERSION","FORGE_DOMAIN_RE","APP_CHECK_TOKEN_PARAM","WEBSOCKET","LONG_POLLING","RepoInfo","secure","webSocketOnly","nodeAdmin","includeNamespaceInQueryParams","_host","_domain","internalHost","isCacheableHost","isCustomHost","newHost","toURLString","repoInfoConnectionURL","repoInfo","connURL","repoInfoNeedsQueryParam","pairs","StatsCollection","counters_","incrementCounter","collections","reporters","statsManagerGetCollection","hashString","PacketReceiver","onMessage_","pendingResponses","currentResponseNum","closeAfterResponse","closeAfter","responseNum","handleResponse","requestNum","toProcess","FIREBASE_LONGPOLL_START_PARAM","BrowserPollConnection","connId","applicationId","appCheckToken","authToken","transportSessionId","lastSessionId","bytesSent","bytesReceived","everConnected_","log_","stats_","urlFn","curSegmentNum","onDisconnect_","myPacketOrderer","isClosed_","connectTimeoutTimer_","onClosed_","called","wrappedFn","executeWhenDOMReady","scriptTagHolder","FirebaseIFrameScriptHolder","arg1","arg2","arg3","arg4","incrementIncomingBytes_","sendNewPolls","pN","uniqueCallbackIdentifier","connectURL","addTag","startLongPoll","addDisconnectPingFrame","forceAllow","forceAllow_","forceDisallow","forceDisallow_","Windows","UI","markConnectionHealthy","shutdown_","myDisconnFrame","dataStr","base64data","MAX_URL_DATA_SIZE","enqueueSegment","pw","commandCB","onMessageCB","outstandingRequests","pendingSegs","currentSerial","myIFrame","createIFrame_","iframeContents","contentWindow","contentDocument","alive","myID","myPW","newRequest_","theURL","curDataString","theSeg","seg","ts","addLongPollTag_","segnum","totalsegs","serial","doNewRequest","keepaliveTimeout","loadCB","newScript","rstate","WebSocketImpl","MozWebSocket","WebSocket","WebSocketConnection","keepaliveTimer","totalFrames","connectionURL_","CONSTANTS","mySock","onopen","onclose","onmessage","handleIncomingFrame","isOldAndroid","oldAndroidRegex","oldAndroidMatch","previouslyFailed","appendFrame_","fullMess","jsonMess","handleNewFrameCount_","frameCount","extractFrameCount_","mess","resetKeepAlive","remainingData","sendString_","responsesRequiredToBeHealthy","healthyTimeout","TransportManager","initTransports_","ALL_TRANSPORTS","IS_TRANSPORT_INITIALIZED","globalTransportInitialized_","isWebSocketsAvailable","isSkipPollConnection","transports_","transports","initialTransport","upgradeTransport","Connection","repoInfo_","applicationId_","appCheckToken_","authToken_","onReady_","onKill_","connectionCount","pendingDataMessages","state_","transportManager_","start_","conn","conn_","nextTransportId_","primaryResponsesRequired_","onMessageReceived","connReceiver_","onConnectionLost","disconnReceiver_","tx_","rx_","secondaryConn_","isHealthy_","healthyTimeoutMS","healthyTimeout_","everConnected","onConnectionLost_","onSecondaryConnectionLost_","onPrimaryMessageReceived_","onSecondaryMessageReceived_","sendRequest","dataMsg","sendData_","tryCleanupConnection","onSecondaryControl_","controlData","upgradeIfSecondaryHealthy_","secondaryResponsesRequired_","parsedData","layer","proceedWithUpgrade_","onControl_","onDataMessage_","onPrimaryResponse_","onHandshake_","onConnectionShutdown_","onReset_","sendPingOnPrimaryIfNecessary_","handshake","onConnectionEstablished_","tryStartUpgrade_","startUpgrade_","closeConnections_","ServerActions","refreshAuthToken","refreshAppCheckToken","onDisconnectPut","onDisconnectMerge","onDisconnectCancel","reportStats","stats","EventEmitter","allowedEvents_","listeners_","validateEventType_","getInitialEvent","et","OnlineMonitor","online_","currentlyOnline","pathOrString","pieceNum","pieces_","copyTo","pieceNum_","newEmptyPath","pathGetFront","pathGetLength","pathPopFront","pathGetBack","pathSlice","pathParent","pieces","pathChild","childPathObj","childPieces","pathIsEmpty","newRelativePath","outerPath","innerPath","outer","inner","pathCompare","cmp","pathEquals","pathContains","ValidationPath","errorPrefix_","parts_","byteLength_","validationPathCheckValid","validationPath","validationPathToErrorString","VisibilityMonitor","hidden","visibilityChange","visible_","RECONNECT_MIN_DELAY","PersistentConnection","onDataUpdate_","onConnectStatus_","onServerInfoUpdate_","authTokenProvider_","appCheckTokenProvider_","authOverride_","nextPersistentConnectionId_","interruptReasons_","listens","outstandingPuts_","outstandingGets_","outstandingPutCount_","outstandingGetCount_","onDisconnectRequestQueue_","connected_","reconnectDelay_","maxReconnectDelay_","securityDebugCallback_","establishConnectionTimer_","requestCBHash_","requestNumber_","realtime_","forceTokenRefresh_","invalidAuthTokenCount_","invalidAppCheckTokenCount_","firstConnection_","lastConnectionAttemptTime_","lastConnectionEstablishedTime_","onVisible_","onOnline_","curReqNum","initConnection_","outstandingGet","_path","_queryObject","sendGet_","currentHashFn","queryId","_queryIdentifier","_queryParams","isDefault","loadsAllData","listenSpec","hashFn","sendListen_","warnOnListenWarnings_","removeListen_","warnings","indexSpec","getIndex","indexPath","tryAuth","reduceReconnectDelayIfAdminCredential_","tryAppCheck","authMethod","isValidFormat","requestData","onAuthRevoked_","onAppCheckRevoked_","sendUnlisten_","queryObj","sendOnDisconnect_","putInternal","sendPut_","queued","errorReason","reqNum","onDataPush_","onListenRevoked_","onSecurityDebugPacket_","handleTimestamp_","sendConnectStats_","restoreState_","scheduleConnect_","establishConnection_","online","onRealtimeDisconnect_","cancelSentTransactions_","shouldReconnect_","timeSinceLastConnectAttempt","reconnectDelay","onDataMessage","nextConnectionId_","canceled","connection","closeFn","sendRequestFn","interrupt","resume","serverTimeOffset","normalizedPathString","statusCode","explanation","queries","clientName","NamedNode","Wrap","Index","getCompare","compare","indexedValueChanged","oldWrapped","newWrapped","minPost","MIN","__EMPTY_NODE","KeyIndex","isDefinedOn","maxPost","makePost","indexValue","KEY_INDEX","SortedMapIterator","startKey","comparator","isReverse_","resultGenerator_","nodeStack_","getNext","hasNext","LLRBNode","RED","SortedMap","EMPTY_NODE","inorderTraversal","reverseTraversal","min_","minKey","maxKey","fixUp_","removeMin_","isRed_","moveRedLeft_","smallest","rotateRight_","moveRedRight_","rotateLeft_","colorFlip_","nl","nr","checkMaxDepth_","blackDepth","check_","BLACK","comparator_","root_","getPredecessorKey","rightParent","getIterator","resultGenerator","getIteratorFrom","getReverseIteratorFrom","getReverseIterator","NAME_ONLY_COMPARATOR","NAME_COMPARATOR","MAX_NODE$2","priorityHashText","priority","validatePriorityNode","priorityNode","isLeafNode","getPriority","__childrenNodeConstructor","nodeFromJSON$1","MAX_NODE$1","LeafNode","value_","priorityNode_","lazyHash_","updatePriority","newPriorityNode","getImmediateChild","childName","getChild","hasChild","getPredecessorChildName","childNode","updateImmediateChild","newChildNode","updateChild","front","numChildren","forEachChild","exportFormat","toHash","compareTo","compareToLeafNode_","otherLeaf","otherLeafType","thisLeafType","otherIndex","VALUE_TYPE_ORDER","thisIndex","withIndex","isIndexed","equals","PRIORITY_INDEX","aPriority","bPriority","indexCmp","LOG_2","Base12Num","current_","bits_","nextBitIsOne","buildChildSet","childList","keyFn","mapSortFn","buildBalancedTree","low","namedNode","middle","base12","buildPennant","chunkSize","childTree","attachPennant","pennant","isOne","buildFrom12Array","_defaultIndexMap","fallbackObject","IndexMap","indexes_","indexSet_","Default","indexKey","sortedMap","hasIndex","indexDefinition","addIndex","existingChildren","sawIndexedValue","newIndex","indexName","newIndexSet","newIndexes","addToIndexes","indexedChildren","existingSnap","newChildren","removeFromIndexes","ChildrenNode","children_","indexMap_","child","newIndexMap","newPriority","newImmediateChild","numKeys","allIntegerKeys","childHash","resolveIndex_","predecessor","getFirstChildName","getFirstChild","getLastChildName","getLastChild","wrappedNode","startPost","endPost","MAX_NODE","otherChildrenNode","thisIter","otherIter","thisCurrent","otherCurrent","MAX","USE_HINZE","nodeFromJSON","childData","childrenHavePriority","childSet","sortedChildSet","setNodeFromJSON","PathIndex","indexPath_","extractChild","snap","aChild","bChild","valueNode","VALUE_INDEX","PUSH_CHARS","nextPushId","lastPushTime","lastRandChars","duplicateTime","timeStampChars","successor","keyAsInt","sourcePlusOne","changeValue","snapshotNode","changeChildAdded","changeChildRemoved","changeChildChanged","oldSnap","IndexedFilter","index_","newChild","affectedPath","optChangeAccumulator","oldChild","trackChildChange","updateFullNode","newSnap","filtersNodes","getIndexedFilter","RangedFilter","indexedFilter_","startPost_","getStartPost_","endPost_","getEndPost_","getStartPost","getEndPost","hasStart","startName","getIndexStartName","getIndexStartValue","hasEnd","endName","getIndexEndName","getIndexEndValue","LimitedFilter","rangedFilter_","limit_","getLimit","reverse_","isViewFromLeft","fullLimitUpdateChild_","inRange","indexCompare","foundStartPost","childKey","childSnap","changeAccumulator","oldEventCache","newChildNamedNode","windowBoundary","oldChildSnap","nextChild","getChildAfterChild","compareNext","newEventCache","QueryParams","limitSet_","startSet_","startNameSet_","startAfterSet_","endSet_","endNameSet_","endBeforeSet_","viewFrom_","indexStartValue_","indexStartName_","indexEndValue_","indexEndName_","hasStartAfter","hasEndBefore","hasLimit","hasAnchoredLimit","queryParamsStartAt","queryParams","newParams","queryParamsEndAt","queryParamsOrderBy","queryParamsToRestQueryStringParameters","orderBy","queryParamsGetQueryObject","viewFrom","ReadonlyRestClient","listens_","getListenId_","listenId","thisListen","queryStringParameters","restRequest_","SnapshotHolder","rootNode_","updateSnapshot","newSnapshotNode","newSparseSnapshotTree","sparseSnapshotTreeRemember","sparseSnapshotTree","sparseSnapshotTreeForget","tree","sparseSnapshotTreeForEachTree","prefixPath","sparseSnapshotTreeForEachChild","StatsListener","collection_","last_","newStats","stat","StatsReporter","server_","statsToReport_","statsListener_","reportStats_","reportedStats","haveStatsToReport","OperationType","newOperationSourceServerTaggedQuery","fromUser","fromServer","tagged","AckUserWrite","affectedTree","revert","ACK_USER_WRITE","operationForChild","subtree","ListenComplete","LISTEN_COMPLETE","Overwrite","OVERWRITE","Merge","MERGE","CacheNode","node_","fullyInitialized_","filtered_","isFullyInitialized","isFiltered","isCompleteForPath","isCompleteForChild","EventGenerator","query_","eventGeneratorGenerateEventsForType","eventGenerator","events","changes","registrations","eventCache","filteredChanges","aWrapped","bWrapped","eventGeneratorCompareChanges","materializedChange","prevName","eventGeneratorMaterializeSingleChange","registration","respondsTo","newViewCache","serverCache","viewCacheUpdateEventSnap","viewCache","eventSnap","viewCacheUpdateServerSnap","serverSnap","viewCacheGetCompleteEventSnap","viewCacheGetCompleteServerSnap","emptyChildrenSingleton","ImmutableTree","EmptyChildren","childPath","findRootMostMatchingPathAndValue","relativePath","predicate","childExistingPathAndValue","findRootMostValueAndPath","toSet","setTree","newTree","fold","fold_","pathSoFar","findOnPath","findOnPath_","pathToFollow","foreachOnPath","foreachOnPath_","currentRelativePath","foreach","foreach_","foreachChild","CompoundWrite","writeTree_","compoundWriteAddWrite","compoundWrite","rootmost","rootMostPath","newWriteTree","compoundWriteAddWrites","newWrite","compoundWriteRemoveWrite","compoundWriteHasCompleteWrite","compoundWriteGetCompleteNode","compoundWriteGetCompleteChildren","compoundWriteChildCompoundWrite","shadowingNode","compoundWriteIsEmpty","compoundWriteApply","applySubtreeWrite","writeTree","priorityWrite","writeTreeChildWrites","newWriteTreeRef","writeTreeRecordContainsPath_","writeRecord","writeTreeDefaultFilter_","writeTreeLayerTree_","writes","treeRoot","writePath","deepNode","writeTreeCalcCompleteEventCache","treePath","completeServerCache","writeIdsToExclude","includeHiddenWrites","visibleWrites","writeId","allWrites","subMerge","writeTreeRefCalcCompleteEventCache","writeTreeRef","writeTreeRefCalcCompleteEventChildren","completeServerChildren","completeChildren","topLevelSet","writeTreeCalcCompleteEventChildren","writeTreeRefCalcEventCacheAfterServerOverwrite","existingEventSnap","existingServerSnap","childMerge","writeTreeCalcEventCacheAfterServerOverwrite","writeTreeRefShadowingWrite","writeTreeShadowingWrite","writeTreeRefCalcCompleteChild","existingServerCache","writeTreeCalcCompleteChild","writeTreeRefChild","ChildChangeAccumulator","changeMap","oldChange","oldType","getChanges","NO_COMPLETE_CHILD_SOURCE","getCompleteChild","WriteTreeCompleteChildSource","writes_","viewCache_","optCompleteServerCache_","serverNode","completeServerData","toIterate","writeTreeCalcIndexedSlice","writeTreeRefCalcIndexedSlice","viewProcessorGenerateEventCacheAfterServerEvent","viewProcessor","changePath","writesCache","accumulator","oldEventSnap","completeEventChildren","completeNode","oldEventNode","updatedPriority","childChangePath","newEventChild","eventChildUpdate","viewProcessorApplyServerOverwrite","oldViewCache","changedSnap","completeCache","filterServerNode","oldServerSnap","newServerCache","serverFilter","newServerNode","viewProcessorApplyUserOverwrite","viewProcessorCacheHasChild","viewProcessorApplyMerge","viewProcessorApplyServerMerge","changedChildren","viewMergeTree","curViewCache","childMergeTree","isUnknownDeepMerge","View","initialViewCache","eventRegistrations_","indexFilter","processor_","newViewProcessor","initialServerCache","initialEventCache","eventGenerator_","viewGetCompleteServerCache","viewIsEmpty","viewRemoveEventRegistration","eventRegistration","cancelError","cancelEvents","maybeEvent","createCancelEvent","hasAnyCallback","viewApplyOperation","viewProcessorApplyUserMerge","ackUserWrite","serverChildren","viewProcessorRevertUserWrite","ackPath","mergePath","serverCachePath","viewProcessorAckUserWrite","oldServerNode","viewProcessorListenComplete","isLeafOrEmpty","oldCompleteSnap","viewProcessorMaybeAddValueEvent","viewProcessorApplyOperation","viewGenerateEventsForChanges_","eventRegistrations","moves","eventGeneratorGenerateEventsForChanges","referenceConstructor$1","referenceConstructor","SyncPoint","syncPointApplyOperation","syncPoint","optCompleteServerCache","syncPointGetView","serverCacheComplete","eventCacheComplete","syncPointGetQueryViews","syncPointGetCompleteServerCache","syncPointViewForQuery","syncPointGetCompleteView","syncPointViewExistsForQuery","syncPointHasCompleteView","syncTreeNextQueryTag_","SyncTree","listenProvider_","syncPointTree_","pendingWriteTree_","lastWriteId","tagToQueryMap","queryToTagMap","syncTreeApplyUserOverwrite","syncTree","writeTreeAddOverwrite","syncTreeApplyOperationToSyncPoints_","syncTreeAckUserWrite","record","writeTreeGetWrite","writeToRemove","removedWriteWasVisible","removedWriteOverlapsWithOtherWrites","currentWrite","writeTreeResetTree_","writeTreeRemoveWrite","syncTreeApplyServerOverwrite","syncTreeRemoveEventRegistration","maybeSyncPoint","removedAndEvents","hadCompleteView","viewQueryId","_repo","syncPointRemoveEventRegistration","removingDefault","covered","parentSyncPoint","newViews","maybeChildSyncPoint","childMap","childViews","syncTreeCollectDistinctViewsForSubTree_","newQuery","syncTreeCreateListenerForView_","startListening","syncTreeQueryForListening_","syncTreeTagForQuery_","defaultTag","stopListening","queryToRemove","tagToRemove","syncTreeMakeQueryKey_","removedQuery","removedQueryKey","removedQueryTag","syncTreeRemoveTags_","syncTreeApplyTaggedQueryOverwrite","queryKey","syncTreeQueryKeyForTag_","syncTreeParseQueryKey_","queryPath","syncTreeApplyTaggedOperation_","syncTreeRegisterSyncPoint","foundAncestorDefaultView","pathToSyncPoint","sp","childSyncPoint","viewAlreadyExists","syncTreeAddEventRegistration","viewAddEventRegistration","initialChanges","viewGetInitialEvents","syncPointAddEventRegistration","queriesToStop","childQueries","queryToStop","syncTreeSetupListener_","syncTreeCalcCompleteEventCache","syncTreeApplyOperationHelper_","syncPointTree","syncTreeApplyOperationDescendantsHelper_","childOperation","childServerCache","childWritesCache","viewGetServerCache","syncTreeApplyTaggedListenComplete","syncTreeApplyListenComplete","errorForServerCode","splitIndex","ExistingValueProvider","DeferredValueProvider","syncTree_","path_","generateWithValues","resolveDeferredLeafValue","existingVal","serverValues","resolveScalarDeferredValue","resolveComplexDeferredValue","unused","existingNode","resolveDeferredValueTree","resolveDeferredValue","resolveDeferredValueSnapshot","rawPri","leafNode","childrenNode","Tree","childCount","treeSubTree","pathObj","treeGetValue","treeSetValue","treeUpdateParents","treeHasChildren","treeForEachChild","treeForEachDescendant","includeSelf","childrenFirst","treeGetPath","childEmpty","treeIsEmpty","childExists","treeUpdateChild","INVALID_KEY_REGEX_","INVALID_PATH_REGEX_","MAX_LEAF_SIZE_","isValidPathString","isValidPriority","validateFirebaseDataArg","validateFirebaseData","hasDotValue","hasActualChild","validationPathPush","validationPathPop","validateFirebaseMergeDataArg","errorPrefix$1","mergePaths","curPath","prevPath","validateFirebaseMergePaths","validatePriority","validateKey","validatePathString","validateRootPathString","validateWritablePath","validateUrl","parsedUrl","isValidRootPathString","EventQueue","eventLists_","recursionDepth_","eventQueueQueueEvents","eventQueue","eventDataList","currList","getPath","eventQueueRaiseEventsAtPath","eventQueueRaiseQueuedEventsMatchingPredicate","eventPath","eventQueueRaiseEventsForChangedPath","changedPath","sentAll","eventList","eventListRaise","eventFn","getEventRunner","INTERRUPT_REASON","MAX_TRANSACTION_RETRIES","Repo","forceRestClient_","appCheckProvider_","dataUpdateCount","eventQueue_","nextWriteId_","interceptServerDataCallback_","transactionQueueTree_","persistentConnection_","repoStart","repo","authOverride","isMerge","repoOnDataUpdate","repoOnConnectStatus","connectStatus","repoUpdateInfo","repoOnServerInfoUpdate","statsReporter_","creatorFunction","statsManagerGetOrCreateReporter","infoData_","infoSyncTree_","infoEvents","serverSyncTree_","repoServerTime","repoGenerateServerValues","taggedChildren","changeTree","syncTreeApplyTaggedQueryMerge","taggedSnap","syncTreeApplyServerMerge","repoRerunTransactions","repoLog","resolvedOnDisconnectTree","repoAbortTransactions","repoRunOnDisconnectEvents","repoGetNextWriteId","repoGetValue","serverCacheNode","syncTreeGetServerValue","syncTreeRegisterQuery","repoSetWithPriority","newVal","newNodeUnresolved","clearEvents","repoCallOnCompleteCallback","repoOnDisconnectCancel","repoOnDisconnectSet","repoRemoveEventCallbackForQuery","repoInterrupt","repoGetLatestState","excludeSets","repoSendReadyTransactions","repoPruneCompletedTransactionsBelowNode","repoBuildTransactionQueue","setsToIgnore","txn","currentWriteId","latestState","snapToSend","latestHash","retryCount","currentOutputSnapshotRaw","dataToSend","pathToSend","currentOutputSnapshotResolved","unwatcher","abortReason","repoSendTransactionQueue","rootMostTransactionNode","repoGetAncestorTransactionNode","abortTransaction","currentInputSnapshot","newDataNode","oldWriteId","newNodeResolved","applyLocally","repoRerunTransactionQueue","transactionNode","transactionQueue","repoAggregateTransactionQueuesForNode","nodeQueue","treeForEachAncestor","repoAbortTransactionsOnNode","lastSent","parseRepoInfo","dataURL","parseDatabaseURL","scheme","subdomain","colonInd","slashInd","questionMarkInd","pathStringDecoded","piece","decodePath","queryString","kv","decodeQuery","hostWithoutPort","dotInd","DataEvent","getEventType","exportVal","CancelEvent","CallbackContext","snapshotCallback","cancelCallback","onValue","expDataSnapshot","previousChildName","hasCancelCallback","userCallback","OnDisconnect","setWithPriority","repoOnDisconnectSetWithPriority","childrenToMerge","repoOnDisconnectUpdate","QueryImpl","_orderByCalled","ReferenceImpl","sameRepo","samePath","sameQueryIdentifier","pathToUrlEncodedString","validateNoPreviousOrderByCall","validateQueryEndpoints","startNode","endNode","tooManyArgsError","wrongArgTypeError","validateLimit","parentPath","DataSnapshot","_node","_index","childRef","exists","hasChildren","_checkNotDeleted","_root","refFromURL","parsedURL","changedKey","changedValue","writeTreeAddMerge","syncTreeApplyUserMerge","repoUpdate","ValueEventRegistration","callbackContext","ChildEventRegistration","eventToCheck","cancelCallbackOrListenOptions","onlyOnce","onceCallback","dataSnapshot","repoAddEventCallbackForQuery","onChildAdded","onChildChanged","onChildMoved","onChildRemoved","expCallback","QueryConstraint","QueryEndAtConstraint","_apply","QueryEndBeforeConstraint","queryParamsEndBefore","QueryStartAtConstraint","QueryStartAfterConstraint","queryParamsStartAfter","QueryLimitToFirstConstraint","_limit","newLimit","queryParamsLimitToFirst","QueryLimitToLastConstraint","queryParamsLimitToLast","QueryOrderByChildConstraint","parsedPath","QueryOrderByKeyConstraint","QueryOrderByPriorityConstraint","QueryOrderByValueConstraint","QueryEqualToValueConstraint","queryConstraints","queryImpl","syncPointSetReferenceConstructor","syncTreeSetReferenceConstructor","repos","repoManagerDatabaseFromApp","dbUrl","databaseURL","projectId","isEmulator","dbEmulatorHost","authTokenProvider","appRepos","repoManagerCreateRepo","Database","_repoInternal","_instanceStarted","_rootInternal","repoManagerDeleteRepo","apiName","checkTransportInit","forceWebSockets","forceLongPolling","enableLogging","TransactionResult","committed","runTransaction","transactionUpdate","currentState","queueNode","priorityForNode","repoStartTransaction","simpleListen","echo","onEcho","registerDatabase","objectToMerge","newObjectToMerge","_database","getRef","Reference","Query","cancelCallbackOrContext","getCancelAndContextArgs_","valueCallback","expSnapshot","validateEventType","failureCallbackOrContext","limitToFirst","orderByKey","orderByPriority","orderByValue","startAt","startAfter","endAt","endBefore","equalTo","cancelOrContext","getKey","getRoot","validateBoolean","transactionResult","setPriority","expPromise","thennablePushRef","pushRef","expRef","tokenProvider","mockUserToken","project","iss","aud","sign_in_provider","identities","alg","createMockUserToken","repoManagerApplyEmulatorSettings","connectDatabaseEmulator","goOffline","goOnline","ServerValue","increment","initStandalone","customAuthImpl","databaseExp","throw","__error","pendingViews","addPendingView","removePendingView","_onValueHandler","_resolveValues","_listeners","_onErrorHandler","_rejectValues","_valuePromise","fdb","_documents","authPersistence","_fireRender","_originalRender","isReactClass","isPrototypeOf","contextTypes","runQuery","listenToQuery","onQueryError","setLimitToLast","setLimitToFirst","componentDidMount","componentWillUnmount","_createClass","descriptor","Constructor","protoProps","staticProps","ReactDOM","createFocusTrap","FocusTrap","_React$Component","_classCallCheck","ReferenceError","_possibleConstructorReturn","setFocusTrapElement","focusTrapElement","previouslyFocusedElement","subClass","superClass","_inherits","specifiedFocusTrapOptions","focusTrapOptions","tailoredFocusTrapOptions","returnFocusOnDeactivate","optionName","focusTrapElementDOMNode","findDOMNode","focusTrap","_createFocusTrap","activate","paused","returnFocus","deactivate","unpause","_this2","Children","only","trapQueue","tabbable","xtend","activeFocusTraps","activateTrap","trap","activeTrap","trapIndex","deactivateTrap","userOptions","escapeDeactivates","firstTabbableNode","lastTabbableNode","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","activateOptions","updateTabbableNodes","onActivate","addListeners","deactivateOptions","onDeactivate","tryFocus","getInitialFocusNode","checkFocusIn","checkPointerDown","checkKey","getNodeForOption","optionValue","clickOutsideDeactivates","isFocusable","isEscapeEvent","isTabEvent","checkTab","tabbableNodes","select","isSelectableInput","deinterlace","newPixels","cpRow","toRow","fromRow","fromPixels","steps","decompressFrame","_gif","_jsBinarySchemaParser","_uint","_deinterlace","_lzw","byteData","buildStream","gct","buildImagePatch","totalPixels","lzw","minCodeSize","blocks","lct","interlaced","resultImage","colorTable","gce","extras","disposal","transparentColorGiven","transparentIndex","transparentColorIndex","patchData","colorIndex","generatePatch","parsedGif","buildImagePatches","pixelCount","available","code_mask","code_size","end_of_information","in_code","old_code","data_size","datum","pi","bi","MAX_STACK_SIZE","npix","dstPixels","pixelStack","addLeadingSlash","stripLeadingSlash","stripBasename","hasBasename","stripTrailingSlash","hashIndex","searchIndex","createLocation","currentLocation","decodeURI","URIError","locationsAreEqual","createTransitionManager","prompt","setPrompt","nextPrompt","confirmTransitionTo","getUserConfirmation","appendListener","getConfirmation","PopStateEvent","HashChangeEvent","getHistoryState","globalHistory","canUseHistory","needsHashChangeListener","_props","_props$forceRefresh","_props$getUserConfirm","_props$keyLength","keyLength","getDOMLocation","historyState","_window$location","createKey","transitionManager","handlePopState","isExtraneousPopstateEvent","handlePop","handleHashChange","forceNextPop","fromLocation","toLocation","toIndex","fromIndex","go","revertPop","initialLocation","createHref","listenerCount","checkDOMListeners","isBlocked","pushState","prevIndex","nextKeys","replaceState","goForward","block","unblock","HashChangeEvent$1","HashPathCoders","hashbang","encodePath","noslash","slash","stripHash","getHashPath","replaceHashPath","createHashHistory","_props$hashType","hashType","_HashPathCoders$hashT","ignorePath","encodedPath","prevLocation","allPaths","baseTag","pushHashPath","nextPaths","clamp","lowerBound","upperBound","createMemoryHistory","_props$initialEntries","initialEntries","_props$initialIndex","initialIndex","nextIndex","nextEntries","canGo","reactIs","REACT_STATICS","childContextTypes","contextType","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","TYPE_STATICS","getStatics","isMemo","ForwardRef","Memo","getOwnPropertyNames","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","CASE_SENSITIVE_TAG_NAMES","HTML","HEAD","BODY","FIRST_TAG_REGEX","HEAD_TAG_REGEX","BODY_TAG_REGEX","parseFromDocument","domParser","parseFromTemplate","firstTagName","domparser","formatDOM","DIRECTIVE_REGEX","directive","domhandler","Comment","ProcessingInstruction","caseSensitiveTagNamesMap","formatAttributes","formatTagName","getCaseSensitiveTagName","ElementType","Doctype","CDATA","Tag","Style","Script","Directive","Root","isTag","extendStatics","__extends","__","isDocument","isDirective","isComment","isText","isCDATA","NodeWithChildren","DataNode","domelementtype_1","nodeTypes","recursive","attribs","cloneChildren","clone_1","clone_2","clone_3","instruction","sourceCodeLocation","childs","domToReact","attributesToProps","htmlToDOM","domParserOptions","lowerCaseAttributeNames","HTMLReactParser","htmlparser2","reactProperty","utilities","getPropName","attributeName","possibleStandardNames","attributeNameLowerCased","propertyInfo","inputIsValueOnly","isCustomAttribute","getPropertyInfo","BOOLEAN","OVERLOADED_BOOLEAN","PRESERVE_CUSTOM_ATTRIBUTES","setStyleProp","canTextBeChildOfNode","skipAttributesToProps","isCustomComponent","isWhitespace","replaceElement","isValidElement","hasReplace","styleToJS","styleToJSOptions","reactCompat","elementsWithNoTextChildren","invertObject","isOverridePresent","is","__createBinding","k2","__exportStar","DomHandler","node_1","reWhitespace","defaultOpts","normalizeWhitespace","withStartIndices","withEndIndices","xmlMode","elementCB","tagStack","lastNode","onparserinit","onreset","onend","handleCallback","onclosetag","onopentag","addNode","ontext","oncomment","oncommentend","oncdatastart","oncdataend","onprocessinginstruction","previousSibling","stringifiable","isProduction","invariant","getAllKeys","Context","commands","defaultCommands","isEquals","newContext","$spec","spec","$apply","nextObject","objectWasNextObject","nextValueForKey","nextObjectValue","invariantPushAndUnshift","$unshift","$splice","originalObject","invariantSplice","invariantSplices","_nextObject","invariantSet","$toggle","invariantSpecArray","nextObjectCopy","$unset","_spec","$add","invariantMapOrSet","$remove","specValue","defaultContext","typeOfTarget","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","EMPTY_STRING","updatePosition","Position","errorsList","filename","silent","decls","IntersectionObserverEntry","intersectionRatio","THROTTLE_TIMEOUT","POLL_INTERVAL","USE_MUTATION_OBSERVER","_observationTargets","_registerInstance","_monitorIntersections","_checkForIntersections","_unmonitorIntersections","_unregisterInstance","takeRecords","records","_queuedEntries","_initThresholds","opt_threshold","_parseRootMargin","opt_rootMargin","margins","_monitoringIntersections","_monitoringInterval","addEvent","_domObserver","MutationObserver","characterData","removeEvent","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","targetRect","rootContainsTarget","_rootContainsTarget","oldEntry","intersectionRect","_computeTargetAndRootIntersection","newEntry","boundingClientRect","rootBounds","_hasCrossedThreshold","_callback","rect1","rect2","atRoot","parentRect","parentComputedStyle","_expandRectByRootMargin","_rootMarginValues","newRect","oldRatio","newRatio","thresholds","containsDeep","targetArea","intersectionArea","opt_options","opt_useCapture","detatchEvent","assignedSlot","argIndex","framesToPop","getType","isPlainObject","isSymbol","conditional","stream","partSchema","conditionFunc","continueFunc","lastStreamPos","newParent","readBits","readArray","readUnsigned","readString","peekBytes","readBytes","peekByte","readByte","uint8Data","subarray","littleEndian","byteSize","totalOrFunc","_byte","def","subBitsTotal","subBlocksSchema","chunks","streamSize","availableSize","gceSchema","codes","future","userInput","terminator","imageSchema","textSchema","preData","applicationSchema","application","commentSchema","_default","lsd","backgroundColorIndex","pixelAspectRatio","nextCode","tokens","_simpleHtmlTokenizer2","tokenize","linkifiedTokens","linkified","Options","StartTag","Chars","linkifedChars","linkifyChars","ignoreTags","preskipLen","skipTagTokens","_token","attrsToStrings","EndTag","linkify","newObj","_interopRequireWildcard","nl2br","selfClosing","isLink","check","_opts$resolve","formattedHref","attributeArray","skippedTokens","stackCount","attrStrs","_attrs$i","_react2","linkifyReactElement","elementId","linkId","stringToElements","Linkify","scanner","inherits","run","TOKENS","State","_state","_multi","MULTI_TOKENS","makeState","tokenClass","TokenState","S_START","S_PROTOCOL","S_MAILTO","S_PROTOCOL_SLASH","S_PROTOCOL_SLASH_SLASH","S_DOMAIN","S_DOMAIN_DOT","S_TLD","S_TLD_COLON","S_TLD_PORT","S_URL","S_URL_NON_ACCEPTING","S_URL_OPENBRACE","S_URL_OPENBRACKET","S_URL_OPENANGLEBRACKET","S_URL_OPENPAREN","S_URL_OPENBRACE_Q","S_URL_OPENBRACKET_Q","S_URL_OPENANGLEBRACKET_Q","S_URL_OPENPAREN_Q","S_URL_OPENBRACE_SYMS","S_URL_OPENBRACKET_SYMS","S_URL_OPENANGLEBRACKET_SYMS","S_URL_OPENPAREN_SYMS","S_EMAIL_DOMAIN","S_EMAIL_DOMAIN_DOT","S_EMAIL","EMAIL","S_EMAIL_COLON","S_EMAIL_PORT","S_MAILTO_EMAIL","MAILTOEMAIL","S_MAILTO_EMAIL_NON_ACCEPTING","S_LOCALPART","S_LOCALPART_AT","S_LOCALPART_DOT","S_NL","NL","PROTOCOL","MAILTO","SLASH","TLD","DOMAIN","LOCALHOST","NUM","DOT","COLON","qsAccepting","AT","PLUS","POUND","UNDERSCORE","SYM","AMPERSAND","qsNonAccepting","QUERY","PUNCTUATION","CLOSEBRACE","CLOSEBRACKET","CLOSEANGLEBRACKET","CLOSEPAREN","OPENBRACE","OPENBRACKET","OPENANGLEBRACKET","OPENPAREN","localpartAccepting","multis","textTokens","secondState","multiLength","latestAccepting","sinceAccepts","accepts","TEXT","MULTI","emit","tlds","NUMBERS","ALPHANUM","WHITESPACE","domainStates","CharacterState","S_NUM","S_DOMAIN_HYPHEN","S_WS","WS","newStates","stateify","partialProtocolFileStates","partialProtocolFtpStates","partialProtocolHttpStates","partialProtocolMailtoStates","S_PROTOCOL_FILE","S_PROTOCOL_FTP","S_PROTOCOL_HTTP","S_PROTOCOL_SECURE","S_FULL_PROTOCOL","S_FULL_MAILTO","partialLocalhostStates","defaultTransition","lowerStr","tokenLength","TOKEN","BaseState","tClass","jump","charOrRegExp","endToken","defaultToken","createTokenClass","Base","_createTokenClass","MultiToken","toHref","hasProtocol","hasSlashSlash","TextToken","inheritsToken","extended","defaultProtocol","formatHref","linkAttributes","linkClass","ignoredTags","operator","_html5NamedCharRefs2","_interopRequireDefault","_entityParser2","_eventedTokenizer2","_tokenizer2","_tokenize2","HTML5Tokenizer","HTML5NamedCharRefs","EntityParser","EventedTokenizer","Tokenizer","named","HEXCHARCODE","CHARCODE","NAMED","entity","_utils","delegate","entityParser","tagLine","tagColumn","tokenizePart","tokenizeEOF","preprocessInput","states","flushData","finishData","consume","char","consumeCharRef","markTagStart","tagOpen","beforeData","beginData","appendToData","isAlpha","beginStartTag","appendToTagName","markupDeclaration","beginComment","commentStart","finishComment","appendToCommentData","commentStartDash","commentEndDash","commentEnd","isSpace","finishTag","beforeAttributeName","beginAttribute","appendToAttributeName","beginAttributeValue","finishAttributeValue","afterAttributeName","beforeAttributeValue","appendToAttributeValue","attributeValueDoubleQuoted","attributeValueSingleQuoted","attributeValueUnquoted","afterAttributeValueQuoted","selfClosingStartTag","markTagAsSelfClosing","endTagOpen","beginEndTag","nbsp","startColumn","tokenizer","addLocInfo","_currentAttribute","isQuoted","WSP","ALPHA","CRLF","stdOnEnd","ieOnEnd","DataView","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","setCacheAdd","setCacheHas","SetCache","__data__","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","iteratee","resIndex","baseTimes","isArguments","isBuffer","isIndex","isTypedArray","inherited","isArr","isArg","isBuff","skipIndexes","baseAssignValue","objValue","copyObject","keysIn","arrayEach","assignValue","baseAssign","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeysIn","getTag","initCloneArray","initCloneByTag","initCloneObject","isMap","isSet","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","customizer","isDeep","isFlat","isFull","isFunc","stacked","subValue","objectCreate","baseCreate","isFlattenable","baseFlatten","isStrict","castPath","toKey","keysFunc","symbolsFunc","getRawTag","objectToString","symToStringTag","toStringTag","baseGetTag","isObjectLike","baseIsEqualDeep","baseIsEqual","equalArrays","equalByTag","equalObjects","arrayTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","isMasked","toSource","reIsHostCtor","funcProto","objectProto","funcToString","reIsNative","isLength","typedArrayTags","isPrototype","nativeKeys","nativeKeysIn","isProto","constant","identity","baseSetToString","arrayMap","symbolProto","symbolToString","baseToString","isKey","stringToPath","byteLength","freeExports","freeModule","allocUnsafe","cloneArrayBuffer","dataView","byteOffset","reFlags","regexp","symbolValueOf","typedArray","isNew","getSymbols","getSymbolsIn","coreJsData","arraySome","cacheHas","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","setToArray","convert","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","flatten","overRest","setToString","freeGlobal","baseGetAllKeys","isKeyable","baseIsNative","getPrototype","overArg","nativeObjectToString","isOwn","unmasked","arrayFilter","stubArray","nativeGetSymbols","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","Ctor","ctorString","nativeCreate","cloneDataView","cloneRegExp","cloneSymbol","cloneTypedArray","spreadableSymbol","isConcatSpreadable","reIsUint","reIsDeepProp","reIsPlainProp","maskSrcKey","IE_PROTO","assocIndexOf","getMapData","freeProcess","nodeUtil","binding","nativeMax","otherArgs","baseGet","baseSlice","freeSelf","shortOut","nativeNow","lastCalled","LARGE_ARRAY_SIZE","memoizeCapped","rePropName","reEscapeChar","quote","subString","baseIsArguments","stubFalse","nativeIsFinite","isFinite","baseIsMap","baseUnary","nodeIsMap","objectCtorString","baseIsSet","nodeIsSet","baseIsTypedArray","nodeIsTypedArray","arrayLikeKeys","baseKeys","isArrayLike","baseKeysIn","memoized","Cache","baseUnset","customOmitClone","flatRest","omit","paths","CLONE_DEEP_FLAG","baseValues","locationHref","_useWebWorker","initialDefaultFrame","setWebWorker","flag","getWebWorker","setLocationHref","getLocationHref","createTag","extendPrototype","sourcePrototype","getDescriptor","createProxyFunction","ProxyFunction","audioControllerFactory","AudioController","audioFactory","audios","_volume","_isMuted","addAudio","audio","setRate","rateValue","createAudio","assetPath","Howl","isPlaying","seek","rate","setVolume","setAudioFactory","_updateVolume","mute","unmute","getVolume","volume","createTypedArray","createRegularArray","Int16Array","createSizedArray","_typeof$6","subframeEnabled","expressionsPlugin","idPrefix$1","isSafari","_shouldRoundValues","bmPow","bmSqrt","bmFloor","bmMax","bmMin","BMMath","ProjectInterface$1","absArr","defaultCurveSegments","degToRads","roundCorner","roundValues","bmRnd","styleDiv","transformOrigin","webkitTransformOrigin","backfaceVisibility","webkitBackfaceVisibility","transformStyle","webkitTransformStyle","mozTransformStyle","BMEnterFrameEvent","totalTime","frameMultiplier","BMCompleteEvent","BMCompleteLoopEvent","totalLoops","currentLoop","BMSegmentStartEvent","firstFrame","BMDestroyEvent","BMRenderFrameErrorEvent","nativeError","BMConfigErrorEvent","BMAnimationConfigErrorEvent","createElementID","_count","HSVtoRGB","RGBtoHSV","addSaturationToRGB","hsv","addBrightnessToRGB","addHueToRGB","rgbToHex","hex","colorMap","setSubframeEnabled","getSubframeEnabled","setExpressionsPlugin","getExpressionsPlugin","setDefaultCurveSegments","getDefaultCurveSegments","setIdPrefix","getIdPrefix","createNS","_typeof$5","dataManager","workerFn","workerInstance","_counterId","processes","workerProxy","_workerSelf","setupWorker","Blob","createObjectURL","createWorker","completeLayers","layers","comps","layerData","kLen","tt","td","hasMask","maskProps","masksProperties","pt","convertPathsToAbsoluteValues","ty","findCompLayers","refId","completeShapes","shapes","comp","findComp","__used","ks","checkVersion","minimum","animVersionString","animVersion","checkText","iterateLayers","textLayer","documentData","checkChars","charData","ip","st","sr","sk","sa","checkPathProperties","checkColors","iterateShapes","checkShapes","completeClosingShapes","cl","moduleOb","__complete","completeChars","dataFunctionManager","assetLoader","formatResponse","contentTypeHeader","getResponseHeader","responseType","fullPath","errorCallback","completeData","createProcess","processId","loadData","completeAnimation","ImagePreloader","proxyImage","imageLoaded","loadedAssets","totalImages","loadedFootagesCount","totalFootages","imagesLoadedCb","footageLoaded","getAssetsPath","assetData","assetsPath","originalPath","imagePath","testImageLoaded","intervalId","getBBox","_imageLoaded","createFootageData","ob","footageData","_footageLoaded","ImagePreloaderFactory","loadAssets","_createImageData","setAssetsPath","setPath","loadedImages","loadedFootages","getAsset","createImgData","_elementHelper","setCacheType","elementHelper","BaseEvent","triggerEvent","_cbs","markerParser","parsePayloadLines","keysCount","_markers","markers","_marker","markerData","tm","dr","cm","ProjectInterface","registerComposition","compositions","_thisProjectFunction","nm","prepareFrame","xt","currentFrame","compInterface","renderers","registerRenderer","getRenderer","_typeof$4","AnimationItem","isLoaded","currentRawFrame","frameRate","frameMult","playSpeed","playDirection","playCount","animationID","timeCompleted","segmentPos","isSubframeEnabled","_idle","_completedLoop","projectInterface","imagePreloader","audioController","configAnimation","onSetupError","onSegmentComplete","drawnFrameEvent","animType","RendererClass","globalData","defs","setProjectInterface","autoloadSegments","initialSegment","setupAnimation","fileName","setData","wrapperAttributes","getNamedItem","prerender","includeLayers","newLayers","fontManager","addChars","addFonts","initExpressions","loadNextSegment","segmentPath","loadSegments","imagesLoaded","checkLoaded","preloadImages","animData","fr","searchExtraCompositions","updaFrameModifier","waitForFontsLoaded","triggerConfigError","rendererType","initItems","gotoFrame","resize","updateContainerSize","setSubframe","renderFrame","triggerRenderFrameError","togglePause","setCurrentRawFrameValue","getMarkerData","markerName","marker","goToAndStop","isFrame","numValue","frameModifier","goToAndPlay","advanceTime","nextValue","_isComplete","checkSegments","adjustSegment","setSegment","pendingFrame","forceFlag","resetSegments","onEnterFrame","onLoopComplete","onSegmentStart","onDestroy","getAssetData","hide","getDuration","updateDocumentData","getElementByPath","animationManager","registeredAnimations","initTime","playingAnimationsNum","_stopped","_isFrozen","removeElement","ev","animItem","subtractPlayingCount","registerAnimation","addPlayingCount","nowTime","elapsedTime","searchAnimations","animElements","getElementsByClassName","lenAnims","unfreeze","getRegisteredAnimations","BezierFactory","beziers","bezEasing","BezierEasing","kSplineTableSize","kSampleStepSize","float32ArraySupported","aA1","aA2","calcBezier","aT","getSlope","_p","_mSampleValues","_precomputed","mX1","mY1","mX2","mY2","_precompute","_getTForX","_calcSampleValues","mSampleValues","intervalStart","currentSample","lastSample","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","pooling","poolFactory","initialLength","_release","_length","_maxLength","pool","release","bezierLengthPool","addedLength","percents","lengths","segmentsLengthPool","bezFunction","math","pointOnLine2D","det1","getBezierLength","pt1","pt2","pt3","pt4","ptCoord","ptDistance","curveSegments","lengthData","BezierData","segmentLength","PointData","partial","partialLength","storedData","buildBezierData","bezierName","bezierData","getDistancePerc","initPos","lengthPos","lPerc","bezierSegmentPoints","getSegmentsLength","shapeData","segmentsLength","pathV","pathO","pathI","getNewSegment","startPerc","endPerc","t0","u0","u1","u0u0u0","t0u0u0_3","t0t0u0_3","t0t0t0","u0u0u1","t0u0u1_3","t0t0u1_3","t0t0t1","u0u1u1","t0u1u1_3","t0t1u1_3","t0t1t1","u1u1u1","t1u1u1_3","t1t1u1_3","t1t1t1","getPointInSegment","pointOnLine3D","z1","z2","z3","diffDist","dist1","dist2","dist3","bez","PropertyFactory","initFrame","mathAbs","interpolateValue","frameNum","offsetTime","propType","pv","keyData","nextKeyData","keyframeMetadata","fnc","iterationIndex","keyframesMetadata","quat","qx","qy","qz","qw","attitude","bank","nextKeyTime","keyTime","ti","ind","__fnct","getBezierEasing","segmentPerc","distanceInLine","lastFrame","_lastKeyframeIndex","_lastAddedLength","_lastPoint","outX","outY","inX","inY","keyValue","omega","cosom","sinom","scale0","scale1","ax","ay","az","aw","bx","bz","bw","slerp","createQuaternion","s1","s2","s3","getValueAtCurrentTime","renderedFrame","_caching","renderResult","setVValue","multipliedValue","_mdf","processEffectsSequence","frameId","effectsSequence","lock","_isFirstFrame","kf","addEffect","effectFunction","addDynamicProperty","ValueProperty","vel","MultiDimensionalProperty","KeyframedValueProperty","KeyframedMultidimensionalProperty","arrLen","getProp","DynamicPropertyContainer","dynamicProperties","_isAnimated","iterateDynamicProperties","initDynamicPropertyContainer","pointPool","ShapePath","setPathData","setLength","doubleArrayLength","setXYAt","setTripleAt","vX","vY","oX","oY","iX","iY","newPath","vertices","outPoints","inPoints","cnt","shapePool","shapePath","ShapeCollection","addShape","releaseShapes","shapeCollectionPool","newShapeCollection","shapeCollection","ShapePropertyFactory","interpolateShape","previousValue","keyPropS","keyPropE","isHold","vertexValue","interpolateShapeCurrentTime","resetShape","localShapeCollection","shape1","shape2","shapesEqual","ShapeProperty","KeyframedShapeProperty","EllShapeProperty","cPoint","EllShapePropertyFactory","convertEllToPath","p0","s0","_cw","_v","StarShapeProperty","StarShapePropertyFactory","sy","ir","convertToPath","convertStarToPath","convertPolygonToPath","or","os","roundness","perimSegment","numPts","longFlag","longRad","shortRad","longRound","shortRound","longPerimSegment","shortPerimSegment","currentAng","ox","oy","RectShapeProperty","RectShapePropertyFactory","convertRectToPath","v0","v1","Matrix","_cos","_sin","_tan","_rnd","mCos","mSin","_t","rotateY","rotateZ","shear","sx","skew","skewFromAxis","sz","tz","d2","e2","f2","g2","h2","i2","j2","l2","m2","n2","o2","_identityCalculated","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","isIdentity","_identity","matr","cloneFromProps","applyToPoint","applyToX","applyToY","applyToZ","getInverseMatrix","determinant","inverseMatrix","inversePoint","applyToPointArray","inversePoints","pts","retPts","applyToTriplePoints","p4","p5","p12","p13","applyToPointStringified","toCSS","roundMatrixProperty","to2dCSS","_typeof$3","setLocation","setSubframeRendering","setPrefix","setQuality","inBrowser","installPlugin","getFactory","checkReady","readyStateCheckInterval","getQueryVariable","vars","useWebWorker","setIDPrefix","__getFactory","myScript","ShapeModifiers","modifiers","registerModifier","getModifier","ShapeModifier","TrimModifier","PuckerAndBloatModifier","initModifierProperties","addShapeToModifier","setAsAnimated","processKeys","sValue","eValue","pathsData","calculateShapeEdges","shapeLength","totalModifierLength","segmentOb","shapeSegments","shapeS","shapeE","releasePathsData","processShapes","shapePaths","totalShapeLength","edges","newShapesData","addShapes","lastShape","addPaths","newPaths","addSegment","newShape","addSegmentFromArray","shapeSegment","currentLengthData","segmentCount","processPath","pathLength","clonedPath","TransformPropertyFactory","defaultVector","TransformProperty","pre","appliedTransformations","pz","rz","_isDirty","applyToMatrix","mat","forceRender","precalculateMatrix","autoOriented","v2","getValueAtTime","autoOrient","_addDynamicProperty","getTransformProperty","RepeaterModifier","RoundCornersModifier","getFontProperties","fontData","fStyle","fWeight","so","eo","pMatrix","rMatrix","sMatrix","applyTransforms","inv","elemsData","_currentCopies","_elements","_groups","resetElements","_processed","cloneElements","newElements","changeGroupRender","renderFlag","itemsTransform","cont","hasReloaded","copies","ix","reloadShapes","elems","transformData","offsetModulo","roundOffset","pProps","rProps","sProps","mProps","rd","currentV","currentI","currentO","closerV","newPosPerc","FontManager","emptyChar","combinedCharacters","surrogateModifiers","zeroWidthJoiner","setUpNode","fontVariant","letterSpacing","familyArray","enabledFamilies","trimFontOptions","createHelper","helper","engine","fontProps","tHelper","fFamily","fClass","tCanvasHelper","OffscreenCanvas","getComputedTextLength","Font","typekitLoaded","_warned","setIsLoadedBinded","setIsLoaded","checkLoadedFontsBinded","checkLoadedFonts","isModifier","firstCharCode","secondCharCode","sum","isZeroWidthJoiner","isCombinedCharacter","_char3","fontPrototype","fontArr","_pendingFonts","loadedSelector","shouldLoadFont","monoCase","sansCase","fPath","fOrigin","sc","getCharData","getFontByName","fName","_char2","fontName","doubleSize","singleSize","loadedCount","RenderableElement","initRenderable","renderableComponents","addRenderableComponent","removeRenderableComponent","prepareRenderableFrame","checkLayerLimits","checkTransparency","mProp","renderConfig","hideOnTransparent","renderRenderable","sourceRectAtTime","getLayerSize","textData","MaskManagerInterface","MaskInterface","_mask","maskManager","_masksInterfaces","viewData","ExpressionPropertyInterface","defaultUnidimensionalValue","defaultMultidimensionalValue","completeProperty","expressionValue","getVelocityAtTime","valueProp","valueAtTime","speedAtTime","getSpeedAtTime","velocityAtTime","propertyGroup","defaultGetter","UnidimensionalPropertyInterface","MultidimensionalPropertyInterface","TransformExpressionInterface","_thisFunction","xRotation","yRotation","xPosition","yPosition","zPosition","anchorPoint","_px","_py","_pz","_transformFactory","LayerExpressionInterface","getMatrix","toWorldMat","_elem","toWorldVec","applyPoint","toWorld","fromWorldVec","invertPoint","fromWorld","fromComp","sampleImage","transformInterface","_thisLayerFunction","shapeInterface","effect","textInterface","toComp","anchorPointDescriptor","hasParent","layerInterface","anchor_point","inPoint","outPoint","registerMaskInterface","registerEffectsInterface","effects","propertyGroupFactory","interfaceFunction","parentPropertyGroup","PropertyInterface","EffectsExpressionInterface","createGroupInterface","groupInterface","ef","mn","effectElements","_propertyGroup","createValueInterface","numProperties","np","enabled","en","expressionProperty","setGroupProperty","createEffectsInterface","effectsManager","effectsData","CompExpressionInterface","pixelAspect","compSize","frameDuration","displayStartTime","numLayers","ShapePathInterface","propertyIndex","ShapeExpressionInterface","iterateElements","groupInterfaceFactory","fillInterfaceFactory","strokeInterfaceFactory","trimInterfaceFactory","ellipseInterfaceFactory","starInterfaceFactory","rectInterfaceFactory","roundedInterfaceFactory","repeaterInterfaceFactory","gradientFillInterfaceFactory","interfaces","transformInterfaceFactory","cix","contentsInterfaceFactory","startPoint","endPoint","_dashPropertyGroup","dashOb","addPropertyToDashOb","dataProps","dash","skewAxis","outerRadius","outerRoundness","innerRoundness","innerRadius","_interfaceFunction","TextExpressionInterface","_prevValue","_sourceText","sourceText","textProperty","currentData","getBlendMode","blendModeEnums","SliderEffect","AngleEffect","ColorEffect","PointEffect","LayerIndexEffect","MaskIndexEffect","CheckboxEffect","NoValueEffect","EffectsManager","effectItem","GroupEffect","BaseElement","FrameElement","_typeof$2","eff","checkMasks","effectsInterface","shapesData","itemsData","setBlendMode","blendModeValue","bm","baseElement","layerElement","initBaseData","layerId","prepareProperties","_isParent","FootageInterface","dataInterfaceFactory","outlineInterface","currentPropertyName","currentProperty","getFootageData","searchProperty","propertyNameIndex","outlineInterfaceFactory","dataInterface","FootageElement","imageLoader","AudioElement","_isPlaying","_canPlay","_currentTime","_volumeMultiplier","_previousVolume","_placeholder","lv","au","BaseRenderer","TransformElement","MaskElement","maskElement","solidPath","expansor","feMorph","currentMasks","maskType","maskRef","getShapeProp","lastPath","filterID","expan","lastOperator","filterId","lastRadius","createLayerSolidPath","invRect","drawPath","maskedElement","getBaseElement","timeRemapped","totalVolume","volumeValue","checkLayers","buildItem","checkPendingElements","createItem","createComp","createSolid","createNull","createShape","createText","createCamera","createFootage","buildAllItems","pInterface","progressiveLoad","buildElementParenting","parentName","setAsParent","setHierarchy","addPendingElement","pendingElements","pathValue","setupGlobalData","fontsContainer","animationItem","initTransform","_matMdf","_opMdf","ao","renderTransform","finalMat","globalToLocal","transforms","ptNew","mHelper","getMaskProperty","isFirstFrame","getMaskelement","pathNodes","pathShapeValue","filtersFactory","filId","skipCoordinates","fil","feColorMatrix","featureSupport","registeredEffects","idPrefix","SVGEffects","filterManager","createFilter","Effect","countsAsEffect","registerEffect","SVGBaseElement","HierarchyElement","RenderableDOMElement","IImageElement","initElement","sourceRect","ProcessedElement","IShapeElement","initRendererElement","createContainerElements","matteElement","transformedElement","_sizeChanged","gg","layerElementParent","masker","createAlphaToLuminanceFilter","maskGroup","maskGrouper","feCTr","feFunc","alphaRect","hd","clipId","cpGroup","renderElement","destroyBaseElement","createRenderableComponents","renderableEffectsManager","setMatte","initHierarchy","checkParenting","createContent","renderInnerContent","innerElem","pr","imagePreserveAspectRatio","addShapeToModifiers","shapeModifiers","isShapeInAnimatedModifiers","isAnimatedWithShape","renderModifiers","searchProcessedElement","processedElements","addProcessedElement","lineCapEnum","lineJoinEnum","SVGShapeData","transformers","caches","lStr","lvl","SVGStyleData","pElem","msElem","DashProperty","dashStr","dashoffset","SVGStrokeStyleData","styleOb","SVGFillStyleData","SVGNoStyleData","GradientProperty","cLength","_cmdf","_omdf","_collapsable","checkCollapsable","_hasOpacity","SVGGradientFillStyleData","initGradientData","SVGGradientStrokeStyleData","ShapeGroupData","prevViewData","gr","SVGTransformData","comparePoints","stops","setGradientData","setGradientOpacity","pathElement","gradientId","gfill","gf","cst","opacityId","maskId","opFill","lj","of","ost","buildShapeString","_o","shapeString","SVGElementsRenderer","_identityMatrix","_matrixHelper","renderContentTransform","styleData","itemData","renderNoop","renderPath","pathStringTransformed","redraw","iterations","lLen","renderFill","styleElem","renderGradientStroke","renderGradient","renderStroke","hasOpacity","attr1","attr2","cValues","oValues","dist","createRenderFunction","SVGShapeElement","stylesList","animatedContents","LetterProps","fc","TextProperty","_frameId","keysIndex","canResize","minimumFontSize","ascent","defaultBoxWidth","justifyOffset","lh","lineWidths","ls","ps","fillColorAnim","strokeColorAnim","strokeWidthAnim","yOffset","finalSize","finalText","finalLineHeight","copyData","completeTextData","initSecondaryElement","identityMatrix","buildExpressionInterface","searchShapes","filterUniqueShapes","tempShapes","areAnimated","setShapesAsAnimated","elementData","addToAnimatedContents","createGroupElement","createTransformElement","transformProperty","createShapeElement","ownTransformers","setElementStyles","currentTransform","modifier","processedPos","ownStyles","ownModifiers","renderShape","animatedContent","setCurrentData","searchKeyframes","getKeyframeValue","_finalValue","currentIndex","textKeys","buildFinalText","charCode","charactersArray","shouldCombine","newLineFlag","anchorGrouping","currentSize","currentLine","maxLineWidth","trackingOffset","currentHeight","boxHeight","lastSpaceIndex","currentChar","uncollapsedSpaces","an","anIndexes","animatorJustifyOffset","animatorData","letterData","based","animators","fh","fs","fb","rn","totalChars","newInd","currentInd","dData","recalculate","canResizeFont","_canResize","setMinimumFontSize","_fontValue","TextSelectorProp","TextSelectorPropFactory","_currentTextLength","finalS","finalE","xe","ne","sm","getMult","easer","tot","smoothness","newCharsFlag","divisor","getTextSelectorProp","TextAnimatorDataProperty","animatorProps","defaultData","textAnimatorAnimatables","TextAnimatorProperty","renderType","_hasMaskedPath","_textData","_renderType","_animatorsData","_pathData","_moreOptions","alignment","renderedLetters","lettersChangedFlag","ITextElement","searchProperties","getMeasures","xPos","yPos","pathInfo","currentLength","currentPoint","pointInd","segmentInd","prevPoint","tanAngle","matrixHelper","renderedLettersCount","tLength","letterValue","yOff","firstLine","offf","xPathPos","yPathPos","elemOpacity","letterSw","letterSc","letterFc","letterO","initPathPos","initSegmentInd","initPointInd","letterM","letterP","defaultPropsArray","animatorFirstCharOffset","justifyOffsetMult","isNewLine","animatorOffset","atan","textAnimator","buildNewText","createPathShape","shapeStr","_fontSize","applyTextPropertiesToMatrix","lineNumber","buildColor","colorData","emptyProp","emptyShapeData","SVGTextLottieElement","ISolidElement","NullElement","SVGRendererBase","ICompElement","SVGCompElement","supports3d","SVGRenderer","svgElement","titleElement","titleId","description","descElement","descId","contentVisibility","viewBoxOnly","viewBoxSize","focusable","filterSize","CVContextData","saved","cArrPos","cTr","cO","savedOp","ShapeTransformManager","sequences","sequenceList","transform_key_count","CVEffects","CVMaskElement","hasMasks","CVBaseElement","CVShapeData","transformsManager","styledShapes","styledShape","addTransformSequence","trNodes","CVShapeElement","CVTextElement","currentRender","sWidth","fValue","CVImageElement","CVSolidElement","CanvasRendererBase","clearCanvas","dpr","currentGlobalAlpha","contextData","transformMat","CVCompElement","CanvasRenderer","HBaseElement","HSolidElement","HShapeElement","shapesContainer","currentBBox","HTextElement","textPaths","HCameraElement","pe","_prevMat","HImageElement","HybridRendererBase","threeDElements","camera","HCompElement","HybridRenderer","singleShape","textContainer","buildTextContents","textArray","textContents","currentTextContent","buildShapeData","shapeItem","tSpan","usesGlyphs","cachedSpansLength","childSpan","glyph","glyphElement","_debug","tElement","justify","textBox","renderedLetter","textSpan","appendElementInPos","nextElement","setElements","getElements","destroyElements","duplicate","newLength","currentSavedOp","sequence","processSequence","processSequences","getNewKey","canvasContext","clip","createElements","blendMode","hideElement","showElement","forceRealStack","ctxTransform","ctxOpacity","transformHelper","dashResetter","preTransforms","co","wi","da","addTransformToStyleList","removeTransformFromStyleList","closeStyles","ownTransforms","renderShapeTransform","parentTransform","groupTransform","drawLayer","coOp","grd","isMain","renderGradientFill","renderStyledShape","shapeNodes","groupTransformMat","pathArr","commandsCounter","lastStroke","lastStrokeW","widthCrop","heightCrop","imgW","imgH","imgRel","canvasRel","par","cProps","trProps","actionFlag","popped","containerStyle","mozTransformOrigin","transformCanvas","isDashed","elementWidth","elementHeight","elementRel","animationRel","fillType","checkBlendMode","transformedElementStyle","matrixValue","webkitTransform","addEffects","_renderShapeFrame","shapeCont","getTransformedPoint","calculateShapeBoundingBox","boundingBox","vPoint","oPoint","nextIPoint","nextVPoint","checkBounds","shapeBoundingBox","xMax","yMax","tempBoundingBox","calculateF","calculateBoundingBox","expandStrokeBoundingBox","widthProperty","kfw","currentBoxContains","shapeStyle","shapeTransform","compW","compH","innerElemStyle","textColor","tParent","tCont","tContStyle","tContTranslation","tStyle","tSpanTranslation","svgStyle","translation","textPath","svgTransform","setup","perspectiveStyle","perspectiveElem","perspective","webkitPerspective","mTransf","diffVector","mag","lookDir","lookLengthOnXZ","mRotationX","mRotationY","hasMatrixChanged","matValue","imageElem","newDOMElement","ddd","addTo3dContainer","nextDOMElement","nextLayer","getThreeDContainerByPos","startPos","endPos","createThreeDContainer","threeDContainerData","build3dContainers","lastThreeDContainerData","currentContainer","resizerElem","cWidth","cHeight","floatingContainer","_createBaseContainerElements","Expressions","registers","pushExpression","popExpression","releaseInstances","registerExpressionProperty","expression","_typeof$1","seedRandom","nodecrypto","rngname","startdenom","significance","ARC4","keylen","me","S","typ","mixkey","seed","smear","stringseed","tostring","shortseed","entropy","msCrypto","getRandomValues","autoseed","arc4","prng","int32","quick","is_math_call","initialize$2","SHAPE","ExpressionManager","$bm_isInstanceOfArray","isNumerable","tOfV","$bm_neg","tOfA","lenA","retArr","easeInBez","easeOutBez","easeInOutBez","tOfB","lenB","mul","mod","$bm_sum","$bm_sub","$bm_mul","$bm_div","$bm_mod","mm","radians_to_degrees","degrees_to_radians","helperLengthArray","arr1","vec","rgbToHsl","hslToRgb","linear","tMin","tMax","_tMin","rnd","inTangents","outTangents","inVertexPoint","outVertexPoint","arrPlaceholder","initiateExpression","needsVelocity","_needsRandom","elemType","$bm_transform","thisProperty","loopIn","loop_in","loopOut","loop_out","smooth","fromCompToSurface","thisLayer","thisComp","scoped_bm_rt","expression_function","wiggle","freq","amp","iWiggle","lenWiggle","addedAmps","periods","loopInDuration","loopOutDuration","velocity","textIndex","textTotal","selectorValue","lookAt","elem1","elem2","fVec","pitch","easeOut","val1","val2","applyEase","easeIn","iKey","lenKey","nearestKey","obKey","framesToTime","fps","timeToFrames","seedrandom","randSeed","posterizeTime","framesPerSecond","executeExpression","frameExpressionId","__preventDeadCodeRemoval","expressionHelpers","searchExpressions","_cachingAtTime","getStaticValueAtTime","addPropertyDecorator","durationFlag","cycleDuration","firstKeyFrame","lastKeyFrame","initV","endV","repeats","lastValue","nextLastValue","firstValue","nextFirstValue","samples","sampleValue","sampleFrequency","getTransformValueAtTime","_transformCachingAtTime","anchor","rotationZ","rotationY","rotationX","orientation","positionX","positionY","positionZ","getTransformStaticValueAtTime","propertyGetProp","ShapePropertyConstructorFunction","getConstructorFunction","KeyframedShapePropertyConstructorFunction","getKeyframedConstructorFunction","ShapeExpressions","isClosed","pointOnPath","_segmentsLength","accumulatedLength","initIndex","vectorOnPath","vectorType","xLength","yLength","magnitude","tangentOnPath","normalOnPath","shapeValue","lastTime","propertyGetShapeProp","trims","initialize$1","getExpressionValue","calculateExpression","isKeyframed","hasExpressions","SVGComposableEffect","SVGTintFilter","matrixFilter","feMerge","createMergeNode","SVGFillFilter","SVGStrokeEffect","SVGTritoneFilter","feComponentTransfer","feFuncR","feFuncG","feFuncB","SVGProLevelsFilter","createFeFunc","feFuncA","feFuncRComposed","feFuncGComposed","feFuncBComposed","SVGDropShadowEffect","globalFilterSize","feGaussianBlur","feOffset","feFlood","feComposite","resultId","ins","feMergeNode","colorBlack","colorWhite","elemChildren","pathMasker","dasharrayValue","getTotalLength","lineLength","units","color1","color2","color3","tableR","tableG","tableB","getTableValue","inputBlack","inputWhite","outputBlack","outputWhite","colorValue","outputDelta","inputDelta","col","_svgMatteSymbols","SVGMatte3Effect","filterElem","SVGGaussianBlurEffect","findSymbol","replaceInParent","symbolId","useElem","setElementAsMask","sigma","sigmaX","sigmaY","edgeMode","safeIsNaN","areInputsEqual","newInputs","lastInputs","second","resultFn","lastThis","lastResult","lastArgs","calledOnce","newArgs","__spreadArrays","il","jl","assignProp","carry","mergeRecursively","newComer","extensions","targetVal","newComers","contentMargin","contentPadding","errorBg","errorColor","eviteBlueDark","eviteBlueLight","eviteGreenDark","eviteMagentaDark","eviteOrangeDark","eviteProBlue","evitePurpleDark","eviteTealDark","gray1","gray2","gray3","gray5","infoBg","infoColor","inviteMaybe","inviteNo","inviteYes","largeShadow","linkColor","linkHoverColor","pampersColor","spacing12","spacing16","spacing24","spacing32","spacing4","spacing8","successBg","successColor","virtualPartyBlue","virtualPartyLightBlue","virtualPartyRed","warningBg","warningColor","bubbleGum","citrine","citrineWebText","feedbackErrorBg","feedbackErrorSubtle","feedbackInformationBg","feedbackInformationSuble","feedbackNoReply","feedbackSuccess","feedbackSuccessBg","feedbackSuccessSubtle","feedbackWarning","feedbackWarningBg","feedbackWarningSubtle","feedbackYes","formBorderDisabled","largeAndUp","mexicanOpal","mexicanOpalWebText","mintChip","popoverColor","popoverTextColor","rsvpMaybe","rsvpNo","rsvpYes","spacingLg","spacingMd","spacingSm","tanzaniteWebText","tigersEye","tooltipColor","tooltipTextColor","vanilla","waffle","appleColor","facebookColor","googleColor","maybeGold","paleBlue","paleBlueLight","twitterColor","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","ReactPropTypesSecret","bigint","raf","caf","handle","rafUUID","rafIds","wrapperRaf","callRef","leftTimes","realId","SVGElement","isDOM","fillRef","composeRef","refList","supportRef","nodeOrComponent","_type$prototype","_nodeOrComponent$prot","addEventListenerWrap","canUseDom","didUpdate","getContainer","parentRef","useImperativeHandle","initRef","_containerRef$current","isPointsEq","isAlignPoint","DomWrapper","useSafeState","destroyRef","_React$useState","setValue","updater","ignoreDestroy","STATUS_NONE","STATUS_APPEAR","STATUS_ENTER","STATUS_LEAVE","STEP_NONE","STEP_PREPARE","STEP_START","STEP_ACTIVE","STEP_ACTIVATED","STEP_PREPARED","makePrefixMap","styleProp","prefixes","domSupport","vendorPrefixes","animationend","transitionend","_document$createEleme","prefixedEventNames","getVendorPrefixedEventName","prefixMap","stylePropList","internalAnimationEndName","internalTransitionEndName","supportTransition","animationEndName","transitionEndName","transitionName","transitionType","FULL_STEP_QUEUE","SIMPLE_STEP_QUEUE","step","transitionSupport","CSSMotion","_props$visible","_props$removeOnLeave","removeOnLeave","motionName","leavedClassName","eventProps","supportMotion","contextMotion","isSupportTransition","motion","nodeRef","wrapperNodeRef","_useStatus","_ref$motionEnter","motionEnter","_ref$motionAppear","motionAppear","_ref$motionLeave","motionLeave","motionDeadline","motionLeaveImmediately","onAppearPrepare","onEnterPrepare","onLeavePrepare","onAppearStart","onEnterStart","onLeaveStart","onAppearActive","onEnterActive","onLeaveActive","onAppearEnd","onEnterEnd","onLeaveEnd","onVisibleChanged","_useState","_useState2","asyncVisible","setAsyncVisible","_useState3","_useState4","setStatus","_useState5","_useState6","deadlineRef","getDomElement","activeRef","updateMotionEndStatus","onInternalMotionEnd","deadline","canEnd","_useDomMotionEvents","cacheElementRef","callbackRef","removeMotionEvents","useDomMotionEvents","patchMotionEvents","getEventHandlers","targetStatus","_ref3","_ref4","eventHandlers","_useStepQueue","prepareOnly","setStep","_useNextFrame","nextFrameRef","cancelNextFrame","nextFrame","nextFrameId","useNextFrame","_useNextFrame2","STEP_QUEUE","doNext","useStepQueue","newStep","onPrepare","_eventHandlers$step","_useStepQueue2","startStep","nextStatus","nextEventHandlers","firstMountChangeRef","mergedStyle","useStatus","_useStatus2","statusStep","statusStyle","mergedVisible","renderedRef","motionChildren","setNodeRef","_classNames","statusSuffix","motionCls","STATUS_ADD","STATUS_KEEP","STATUS_REMOVE","STATUS_REMOVED","wrapKeyToObject","keyObj","parseKeys","_excluded2","MOTION_PROP_NAMES","CSSMotionList","keyEntities","removeKey","nextKeyEntities","_this$props","_onVisibleChanged","onAllRemoved","restProps","motionProps","changedVisible","parsedKeyObjects","mixedKeyEntities","prevKeys","currentKeys","currentLen","prevKeyObjects","currentKeyObjects","hit","currentKeyObj","matchKey","diffKeys","prevEntity","_ref5","getMotion","prefixCls","Mask","maskMotion","maskAnimation","maskTransitionName","warned","preWarningFns","note","warningOnce","preMessage","resetWarned","noteOnce","useInternalLayoutEffect","firstMountRef","monitorResize","prevHeight","resizeObserver","_target$getBoundingCl","fixedWidth","fixedHeight","getPoint","Align","onAlign","monitorWindowResize","_ref$monitorBufferTim","monitorBufferTime","cacheRef","forceAlignPropsRef","_useBuffer","calledRef","timeoutRef","cancelTrigger","force","_forceAlignPropsRef$c","latestDisabled","latestTarget","latestAlign","latestOnAlign","_result","_point","offsetParent","_getBBox","_element$getBoundingC","_width","_height","restoreFocus","useBuffer","_useBuffer2","_forceAlign","cancelForceAlign","_React$useState3","_React$useState4","setPoint","obj1","obj2","shallow","refSet","deepEqual","circular","newLevel","forceAlign","RcAlign","StatusQueue","PopupInner","stretch","destroyPopupOnHide","getRootDomNode","getClassNameFromAlign","onTouchStart","alignRef","alignedClassName","setAlignedClassName","_useStretchStyle","targetSize","setTargetSize","sizeStyle","minHeight","tgtWidth","tgtHeight","useStretchStyle","_useStretchStyle2","stretchStyle","measureStretchStyle","_useVisibleStatus","doMeasure","setInternalStatus","rafRef","cancelRaf","mark","_callee","_context","useVisibleStatus","_useVisibleStatus2","goNextStatus","alignTimes","setAlignTimes","prepareResolveRef","_alignRef$current","onInternalAlign","popupDomNode","matchAlign","nextAlignedClassName","_prepareResolveRef$cu","onShowPrepare","originHandler","alignDisabled","motionRef","motionClassName","motionStyle","mergedClassName","onMouseDownCapture","onTouchStartCapture","MobilePopupInner","_props$mobile","popupClassName","popupStyle","_props$mobile$popupMo","popupMotion","popupRender","Popup","innerVisible","serInnerVisible","inMobile","setInMobile","cloneProps","opera","popupNode","ALL_HANDLERS","PortalComponent","Trigger","_popupVisible","mouseEnterDelay","fireEvents","delaySetPopupVisible","mouseLeaveDelay","clearDelayTimer","_this$popupRef$curren","relatedTarget","popupRef","isFocusToShow","focusTime","focusDelay","preClickTime","preTouchTime","isBlurToHide","blurDelay","setPopupVisible","isContextMenuToShow","preTime","isClickToShow","isClickToHide","nextVisible","popupVisible","_this$context","hasPopupMouseDown","mouseDownTimeout","onPopupMouseDown","maskClosable","getPopupDomNode","isContextMenuOnly","getTriggerDOMNode","triggerRef","popupPlacement","builtinPlacements","getPopupClassNameFromAlign","placements","getAlignPopupClassName","_this$props2","onPopupAlign","popupAnimation","popupTransitionName","onPopupClick","_this$state","getPopupAlign","mouseProps","isMouseEnterToShow","onPopupMouseEnter","isMouseLeaveToHide","onPopupMouseLeave","popupContainer","attachId","mountNode","_this$props3","getPopupContainer","attachParent","portalContainer","prevPopupVisible","afterPopupVisibleChange","defaultPopupVisible","currentDocument","clickOutsideHandler","onDocumentClick","touchOutsideHandler","contextMenuOutsideHandler1","onContextMenuClose","contextMenuOutsideHandler2","clearOutsideHandler","_this$popupRef$curren2","popupAlign","placementStr","baseAlign","getAlignFromPlacement","onPopupVisibleChange","delayS","delayTimer","childPros","_this$props4","showAction","_this$props5","_this$props6","hideAction","_this$props7","_this$props8","_this$props9","_this$props10","_this$popupRef$curren3","childCallback","_this$props11","autoDestroy","newChildProps","onContextMenu","createTwoChains","childrenClassName","portal","handlePortalUpdate","triggerContextValue","autoAdjustOverflow","rightTop","bottomRight","rightBottom","leftBottom","showArrow","arrowContent","overlayInnerStyle","Tooltip","_props$trigger","_props$mouseEnterDela","_props$mouseLeaveDela","overlayStyle","_props$prefixCls","onVisibleChange","afterVisibleChange","_props$placement","_props$align","_props$destroyTooltip","destroyTooltipOnHide","defaultVisible","domRef","destroyTooltip","keepParent","aa","ba","ca","ea","fa","ha","ia","ja","ka","la","ma","_status","D","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentDispatcher","ReactCurrentBatchConfig","suspense","oa","_threadCount","_currentValue2","F","Uint16Array","qa","ra","J","acceptsBooleans","attributeNamespace","mustUseProperty","sanitizeURL","K","xlinkHref","xa","N","ya","va","wa","Aa","P","Q","R","U","Ba","memoizedState","Ca","Da","Ea","Fa","Ga","Ha","X","Ia","readContext","useReducer","useDebugValue","useResponder","responder","useDeferredValue","useTransition","Ja","Ka","La","area","embed","hr","keygen","meta","track","wbr","Ma","menuitem","Y","gridArea","lineClamp","Na","Oa","Pa","Z","Qa","Ra","listing","Sa","Ta","Ua","Wa","Xa","suppressContentEditableWarning","suppressHydrationWarning","Ya","$a","domNamespace","childIndex","threadID","exhausted","currentSelectValue","previousWasTextNode","makeStaticMarkup","suspenseDepth","contextIndex","contextStack","contextValueStack","clearProviders","pushProvider","popProvider","I","G","fallbackFrame","isReactComponent","pa","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","UNSAFE_componentWillMount","componentWillMount","getChildContext","Za","renderDOM","_ctor","na","defaultChecked","Va","ab","renderToString","renderToNodeStream","renderToStaticNodeStream","_extends","observerMap","RootIds","rootId","unsupportedValue","defaultFallbackInView","fallbackInView","_createObserver","optionsToId","_elements$get","trackVisibility","createObserver","_excluded","isPlainChildren","InView","_unobserveCb","handleNode","triggerOnce","skip","initialInView","observeNode","excluded","sourceKeys","_objectWithoutPropertiesLoose","_temp","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","componentWillReceiveProps","componentWillUpdate","__reactInternalSnapshotFlag","__reactInternalSnapshot","getSnapshotBeforeUpdate","polyfill","foundWillMountName","foundWillReceivePropsName","foundWillUpdateName","UNSAFE_componentWillReceiveProps","UNSAFE_componentWillUpdate","newApiName","maybeSnapshot","__suppressDeprecationWarning","PLACEHOLDERS","numericComparator","MAX_VALUE","escapeRegex","markupToRegex","markupPattern","spliceString","getComputedStyleLengthProp","forElement","getPositionOfCapturingGroup","parameterName","indexDisplay","indexId","indexType","sortedIndices","countCapturingGroups","iterateMentionsMarkup","textIteratee","markupIteratee","displayTransform","displayPos","idPos","typePos","currentPlainTextIndex","mapPlainTextIndex","indexInPlainText","inMarkupCorrection","substrPlainTextIndex","mentionPlainTextIndex","lastMentionEndIndex","getPlainText","getMentions","countSuggestions","getSuggestions","mentionType","Suggestion","_Component","renderContent","suggestion","focused","getDisplay","highlightedDisplay","renderHighlightedDisplay","renderSuggestion","_props2","spinnerStyle","SuggestionsOverlay","suggestionsRef","scrollFocusedIntoView","_suggestionsRef$child","focusIndex","topContainer","renderSuggestions","renderLoadingIndicator","_this3","_this4","getID","mentionDescriptor","handleMouseEnter","listStyleType","onAdd","Highlighter","lastPosition","notifyCaretPosition","caretRef","onCaretPositionChange","inputStyle","caretPositionInMarkup","resultComponents","componentKeys","substringComponentKey","renderSubstring","usedKeys","_generateComponentKey","getMentionComponentForMatch","renderHighlighterCaret","childrenCount","foundChild","wordWrap","_initialiseProps","KEY","TAB","RETURN","ESC","UP","DOWN","isComposing","suggestionsPortalHost","caretPosition","suggestionsPosition","renderControl","renderSuggestionsOverlay","updateSuggestionsPosition","setSelectionAfterMentionChange","setSelection","getInputProps","isTextarea","handleSelect","handleKeyDown","handleCompositionStart","handleCompositionEnd","updateHighlighterScroll","inputProps","renderHighlighter","renderInput","renderTextarea","setInputRef","suggestionsNode","addMention","handleSuggestionsMouseDown","_props3","highlighterRef","executeOnChange","_props4","_props$valueLink","valueLink","requestChange","_props5","plainTextValue","selectionStartBeforeChange","selectionEndBeforeChange","selectionEndAfterChange","oldPlainTextValue","lengthDelta","spliceStart","spliceEnd","mappedSpliceStart","mappedSpliceEnd","controlSpliceStart","controlSpliceEnd","willRemoveMention","controlPlainTextValue","applyChangeToValue","startOfMention","foundMention","findStartOfMentionInPlainText","eventMock","updateMentionsQueries","clearSuggestions","suggestionsCount","suggestionsComp","shiftFocus","selectFocused","_state2","_getSuggestion","clickedSuggestion","_suggestionsMouseDown","highlighter","caretOffsetParentRect","caretHeight","viewportRelative","_left","setSelectionRange","createTextRange","range","collapse","moveEnd","moveStart","_queryId","_props6","positionInValue","substringStartIndex","lastMention","getEndOfLastMention","escapedTriggerChar","_getTriggerRegex","querySequenceStart","queryData","querySequenceEnd","provideData","snycResult","updateSuggestions","_extends2","_props7","makeMentionsMarkup","displayValue","newCaretPosition","isMobileSafari","boxSizing","invariantViolation","ModalContext","ModalRenderer","__rest","ModalRoot","modals","RootComponent","setMountNode","ModalProvider","rootComponent","setModals","newModals","generateModalKey","useModal","inputs","isShown","setShown","portalClassName","_react","_reactDom2","_propTypes2","_ModalPortal2","ariaAppHider","_safeHTMLElement","_safeHTMLElement2","_reactLifecyclesCompat","isReact16","createPortal","createHTMLElement","getCreatePortal","unstable_renderSubtreeIntoContainer","getParentElement","parentSelector","removePortal","portalRef","renderPortal","defaultStyles","prevParent","nextParent","closesAt","beforeClose","closeWithTimeout","htmlOpenClassName","afterOpen","appElement","SafeHTMLCollection","SafeNodeList","onAfterOpen","ariaHideApp","shouldFocusAfterRender","shouldCloseOnOverlayClick","shouldReturnFocusAfterClose","aria","contentLabel","shouldCloseOnEsc","contentRef","overlayElement","contentElement","contentEl","WebkitOverflowScrolling","focusManager","_scopeTab2","_portalOpenInstances2","CLASS_NAMES","ariaHiddenInstances","ModalPortal","setOverlayRef","setContentRef","afterClose","teardownScopedFocus","popWithoutFocus","deregister","beforeOpen","closeTimer","setupScopedFocus","markForFocusLater","openAnimationFrame","overlayEl","closeWithoutTimeout","focusContent","contentHasFocus","requestClose","handleOverlayOnClick","shouldClose","ownerHandlesClose","handleContentOnMouseUp","handleOverlayOnMouseDown","handleContentOnClick","handleContentOnMouseDown","shouldBeClosed","buildClassName","additional","attributesFromObject","moveFromContentToOverlay","contentStyles","overlayStyles","overlayProps","contentProps","testId","resetState","globalElement","assertNodeList","useElement","validateElement","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","documentNotReadyOrSSRTesting","_warning2","HTMLCollection","NodeList","_arr2","_i2","openInstances","lastChild","htmlElement","htmlClassList","_cls","docBodyClassList","at","classString","classListRef","incrementReference","decrementReference","focusLaterElements","toFocus","modalElement","detachEvent","_tabbable2","needToFocus","portalOpenInstances","PortalOpenInstances","openInstance","subscribers","subscriber","EE","SafeHTMLElement","tail","getActiveElement","checkSafari","shadowRoot","findTabbableDescendants","finished","tabbableNode","hidesContents","zeroSize","isTabIndexNaN","isTabIndexNotNaN","rootNode","getRootNode","_Modal2","_getRequireWildcardCache","hasPropertyDescriptor","_defineProperties","_assertThisInitialized","_getPrototypeOf","Player","Derived","Super","NewTarget","_args","player","isReady","playedSeconds","getCurrentTime","loadedSeconds","getSecondsLoaded","prevPlayed","prevLoaded","progressFrequency","progressInterval","loadOnReady","handleDurationCheck","onPlay","playbackRate","startOnPlay","setPlaybackRate","seekOnPlay","seekTo","onPause","activePlayer","loopOnEnded","durationCheckTimeout","onDurationCalled","onDuration","disablePIP","pip","forceLoad","enablePIP","setLoop","handleReady","handlePlay","handlePause","handleEnded","handleLoaded","_objectSpread","ICON_SIZE","Preview","fetchImage","thumbnail_url","playIcon","flexCenter","backgroundPosition","borderStyle","defaultPlayIcon","_FilePlayer","_YouTube","_SoundCloud","_Vimeo","_Facebook","_Streamable","_Wistia","_Twitch","_DailyMotion","_Mixcloud","_players","_Player4","_Preview","_preload","SUPPORTED_PROPS","customPlayers","ReactPlayer","getConfig","showPreview","getInternalPlayer","fraction","_Player","canPlay","FilePlayer","activePlayerRef","Wrapper","otherProps","DEPRECATED_CONFIG_PROPS","getActivePlayer","renderedActivePlayer","renderActivePlayer","preloadPlayers","players","sortPlayers","handleClickPreview","wrapperRef","_i3","_arr3","_Player3","canEnablePIP","DailyMotion","_singlePlayer","MATCH_URL","callPlayer","parseStartTime","getSDK","DM","dailymotion","apiready","seeked","onSeek","video_end","durationchange","onDurationChange","waiting","onBuffer","bufferedTime","Facebook","SDK_URL","SDK_GLOBAL_READY","facebook","playerId","randomString","FB","XFBML","xfbml","Event","playerID","onBufferEnd","MSStream","AUDIO_EXTENSIONS","VIDEO_EXTENSIONS","HLS_EXTENSIONS","DASH_EXTENSIONS","MATCH_DROPBOX_URL","normalCompletion","didErr","_e2","_createForOfIteratorHelper","isMediaStream","supportsWebKitPresentationMode","webkitSupportsPresentationMode","webkitSetPresentationMode","onEnablePIP","onDisablePIP","webkitPresentationMode","prevPlayer","shouldUseAudio","hls","playsinline","onPresentationModeChange","forceVideo","poster","forceAudio","forceHLS","forceDASH","_this$props$config$fi","hlsVersion","dashVersion","shouldUseHLS","Hls","hlsOptions","Events","loadSource","attachMedia","shouldUseDASH","dashjs","MediaPlayer","getDebug","setLogToBrowserConsole","srcObject","requestPictureInPicture","pictureInPictureElement","exitPictureInPicture","_this$player","seekable","buffered","useHLS","useDASH","renderSourceElement","tracks","renderTrack","pictureInPictureEnabled","Mixcloud","PlayerWidget","ended","mixcloud","feed","frameBorder","SoundCloud","SC","_SC$Widget$Events","PLAY","PLAY_PROGRESS","PAUSE","FINISH","currentPosition","fractionLoaded","loadedProgress","soundcloud","allow","Streamable","playerjs","secondsLoaded","scrolling","allowFullScreen","Twitch","MATCH_VIDEO_URL","MATCH_CHANNEL_URL","twitch","isChannel","setChannel","setVideo","channel","_Twitch$Player","READY","PLAYING","ENDED","ONLINE","OFFLINE","Vimeo","MATCH_FILE_URL","vimeo","playerOptions","refreshDuration","Wistia","_onReady","_wq","silentAutoPlay","controlsVisibleOnLoad","wistia","unbind","YouTube","MATCH_PLAYLIST","parsePlaylist","listType","_window$SDK_GLOBAL$Pl","PlayerState","PAUSED","BUFFERING","CUED","isPlaylist","_onError","_config$youtube","youtube","playerVars","embedOptions","loadPlaylist","cueVideoById","startSeconds","endSeconds","parseEndTime","YT","onStateChange","PRELOAD_PLAYERS","configKey","_propTypes","visual","buying","liking","download","sharing","show_comments","show_playcount","showinfo","iv_load_policy","modestbranding","autopause","byline","portrait","hide_cover","SinglePlayer","_this$config$file","skipCanPlay","parseTimeParam","MATCH_START_QUERY","MATCH_END_QUERY","sdkGlobal","sdkReady","fetchScript","_loadScript","requests","sdk","previousOnReady","showWarning","_deepmerge","_e3","arrays","omitKeys","_keys","_Object$keys","MediaStream","MATCH_START_STAMP","MATCH_NUMERIC","_array2","period","parseTimeString","PropertyInfoRecord","removeEmptyString","CAMELIZE","_require","CAMELCASE","SAME","possibleStandardNamesOptimized","standardName","BOOLEANISH_STRING","NUMERIC","POSITIVE_NUMERIC","RESERVED","STRING","acceptCharset","accessKey","autoCorrect","autoSave","capture","cellPadding","cellSpacing","charSet","cite","classID","colSpan","contentEditable","contextMenu","controlsList","dateTime","defer","disablePictureInPicture","disableRemotePlayback","encType","enterKeyHint","form","formMethod","formAction","formEncType","formNoValidate","formTarget","hrefLang","httpEquiv","inputMode","integrity","itemID","itemProp","itemRef","itemScope","itemType","keyParams","keyType","lang","manifest","marginWidth","marginHeight","media","mediaGroup","minLength","noModule","optimum","radioGroup","rowSpan","scoped","seamless","sizes","spellCheck","srcDoc","srcLang","useMap","wmode","about","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bias","calcMode","capHeight","clipPathUnits","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","datatype","decelerate","descent","diffuseConstant","dominantBaseline","dur","elevation","enableBackground","exponent","externalResourcesRequired","filterRes","filterUnits","floodColor","fontSizeAdjust","fontStretch","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","hanging","horizAdvX","horizOriginX","ideographic","in2","in","inlist","intercept","k3","k4","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","numOctaves","orient","overlinePosition","overlineThickness","paintOrder","panose1","patternContentUnits","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","primitiveUnits","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","security","shapeRendering","slope","spacing","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","strikethroughPosition","strikethroughThickness","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","textRendering","typeof","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","vMathematical","vocab","widths","wordSpacing","writingMode","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlnsXlink","xmlSpace","yChannelSelector","zoomAndPan","ReactReduxContext","batch","getBatch","nullListeners","createSubscription","parentSub","handleChangeWrapper","trySubscribe","addNestedSub","isSubscribed","createListenerCollection","notifyNestedSubs","tryUnsubscribe","getListeners","useIsomorphicLayoutEffect","previousState","EMPTY_ARRAY","NO_SUBSCRIPTION_ARRAY","storeStateUpdatesReducer","updateCount","useIsomorphicLayoutEffectWithArgs","effectFunc","effectArgs","dependencies","captureWrapperProps","lastWrapperProps","lastChildProps","renderIsScheduled","wrapperProps","actualChildProps","childPropsFromStoreUpdate","subscribeUpdates","shouldHandleStateChanges","childPropsSelector","forceComponentUpdateDispatch","didUnsubscribe","lastThrownError","checkForUpdates","latestStoreState","initStateUpdates","connectAdvanced","selectorFactory","_ref2$getDisplayName","getDisplayName","_ref2$methodName","_ref2$renderCountProp","renderCountProp","_ref2$shouldHandleSta","_ref2$storeKey","storeKey","_ref2$forwardRef","withRef","_ref2$context","connectOptions","wrappedComponentName","selectorFactoryOptions","pure","usePureOnlyMemo","ConnectFunction","_useMemo","reactReduxForwardedRef","propsContext","ContextToUse","didStoreComeFromProps","createChildSelector","_useMemo2","overriddenContextValue","_useReducer","previousStateUpdateResult","renderedWrappedComponent","Connect","forwarded","objA","objB","keysA","keysB","wrapMapToPropsConstant","getConstant","constantSelector","dependsOnOwnProps","getDependsOnOwnProps","mapToProps","wrapMapToPropsFunc","stateOrDispatch","ownProps","mapDispatchToProps","actionCreators","boundActionCreators","_loop","actionCreator","bindActionCreators","mapStateToProps","defaultMergeProps","stateProps","dispatchProps","mergeProps","areMergedPropsEqual","hasRunOnce","nextMergedProps","wrapMergePropsFunc","impureFinalPropsSelectorFactory","pureFinalPropsSelectorFactory","areStatesEqual","areOwnPropsEqual","areStatePropsEqual","hasRunAtLeastOnce","nextOwnProps","nextStateProps","statePropsChanged","propsChanged","stateChanged","handleSubsequentCalls","finalPropsSelectorFactory","initMapStateToProps","initMapDispatchToProps","initMergeProps","factories","strictEqual","createConnect","_ref$connectHOC","connectHOC","_ref$mapStateToPropsF","mapStateToPropsFactories","_ref$mapDispatchToPro","mapDispatchToPropsFactories","_ref$mergePropsFactor","mergePropsFactories","_ref$selectorFactory","_ref3$pure","_ref3$areStatesEqual","_ref3$areOwnPropsEqua","_ref3$areStatePropsEq","_ref3$areMergedPropsE","extraOptions","createStoreHook","useReduxContext","createDispatchHook","refEquality","createSelectorHook","equalityFn","_useReduxContext","selectedState","contextSub","latestSubscriptionCallbackError","latestSelector","latestSelectedState","storeState","newSelectedState","newStoreState","_newSelectedState","useSelectorWithStoreAndSubscription","newBatch","BrowserRouter","Router","HashRouter","resolveToLocation","normalizeToLocation","forwardRefShim","LinkAnchor","forwardedRef","_onClick","defaultPrevented","isModifiedEvent","_ref2$component","__RouterContext","isDuplicateNavigation","forwardRefShim$1","forwardRef$1","NavLink","_ref$ariaCurrent","ariaCurrent","_ref$activeClassName","activeClassName","activeStyle","classNameProp","isActiveProp","locationProp","sensitive","strict","escapedPath","matchPath","joinClassnames","compareOption","accessors","candidate","getOptionValue","optionLabel","getOptionLabel","builtins","formatCreateLabel","inputValue","selectValue","selectOptions","getNewOptionData","__isNew__","useCreatable","_ref$allowCreateWhile","allowCreateWhileLoading","_ref$createOptionPosi","createOptionPosition","_ref$formatCreateLabe","_ref$isValidNewOption","_ref$getNewOptionData","onCreateOption","propsOptions","propsOnChange","restSelectProps","_restSelectProps$getO","getOptionValue$1","_restSelectProps$getO2","getOptionLabel$1","isMulti","newOption","actionMeta","valueArray","newOptionData","newActionMeta","A11yText","defaultAriaLiveMessages","guidance","tabSelectsValue","_props$label","labels","_props$label2","getArrayIndex","onFilter","resultsMessage","LiveRegion","ariaSelection","focusedOption","focusedValue","focusableOptions","ariaLiveMessages","isOptionDisabled","screenReaderStatus","ariaLive","ariaSelected","selectedOptions","removedValue","removedValues","multiSelected","onChangeProps","ariaFocused","focusMsg","onFocusProps","ariaResults","resultsMsg","ariaGuidance","guidanceMsg","ariaContext","ScreenReaderText","isInitialFocus","diacritics","anyDiacritic","diacriticToBase","diacritic","stripDiacritics","memoizedStripDiacriticsForInput","trimString","defaultStringify","rawInput","_ignoreCase$ignoreAcc","ignoreCase","ignoreAccents","matchFrom","DummyInput","filteredProps","caretColor","STYLE_KEYS","LOCK_STYLES","preventTouchMove","allowTouchMove","preventInertiaScroll","totalScroll","currentScroll","isTouchDevice","activeScrollLocks","listenerOptions","blurSelectInput","ScrollManager","lockEnabled","_ref$captureEnabled","captureEnabled","setScrollCaptureTarget","onBottomArrive","onBottomLeave","onTopArrive","onTopLeave","isBottom","isTop","touchStart","scrollTarget","handleEventDelta","_scrollTarget$current","isDeltaPositive","availableScroll","shouldCancelScroll","cancelScroll","onWheel","onTouchMove","notPassive","useScrollCapture","setScrollLockTarget","_ref$accountForScroll","accountForScrollbars","originalStyles","addScrollLock","touchScrollTarget","targetStyle","currentPadding","adjustedPadding","removeScrollLock","useScrollLock","clearIndicator","dropdownIndicator","groupHeading","indicatorsContainer","loadingIndicator","loadingMessage","menuPortal","multiValue","multiValueLabel","multiValueRemove","noOptionsMessage","mergeStyles","keyAsString","rsCss","defaultTheme","primary","primary75","primary50","primary25","danger","dangerLight","neutral0","neutral5","neutral10","neutral20","neutral30","neutral40","neutral50","neutral60","neutral70","neutral80","neutral90","baseUnit","controlHeight","menuGutter","backspaceRemovesValue","blurInputOnSelect","captureMenuScroll","closeMenuOnSelect","closeMenuOnScroll","controlShouldRenderValue","escapeClearsValue","filterOption","formatGroupLabel","isRtl","maxMenuHeight","minMenuHeight","menuPosition","menuShouldBlockScroll","menuShouldScrollIntoView","openMenuOnFocus","openMenuOnClick","pageSize","toCategorizedOption","_isOptionDisabled","_isOptionSelected","buildCategorizedOptions","groupOrOption","groupOrOptionIndex","categorizedOptions","optionIndex","categorizedOption","buildFocusableOptionsFromCategorizedOptions","optionsAccumulator","_props$inputValue","shouldHideSelectedOptions","_filterOption","isOptionSelected","hideSelectedOptions","instanceId","inputIsHidden","clearFocusValueOnUpdate","prevWasFocused","inputIsHiddenAfterUpdate","blockOptionHover","commonProps","initialTouchX","initialTouchY","instancePrefix","openAfterFocus","scrollToFocusedOptionOnUpdate","controlRef","getControlRef","focusedOptionRef","getFocusedOptionRef","menuListRef","getMenuListRef","getInputRef","focusInput","blurInput","ariaOnChange","onInputChange","prevInputValue","removeValue","newValueArray","clearValue","popValue","lastSelectedValue","classNamePrefix","getStyles","custom","getElementId","getComponents","getCategorizedOptions","buildFocusableOptions","getFocusableOptions","onMenuMouseDown","onMenuMouseMove","onControlMouseDown","openMenu","onDropdownIndicatorMouseDown","onClearIndicatorMouseDown","touch","deltaX","onTouchEnd","onClearIndicatorTouchEnd","onDropdownIndicatorTouchEnd","handleInputChange","onInputFocus","onInputBlur","onOptionHover","focusValue","focusOption","startListeningComposition","startListeningToTouch","stopListeningComposition","stopListeningToTouch","_this$state2","openAtIndex","selectedIndex","_this$state3","focusedIndex","nextFocus","hasValue","getTheme","formatOptionLabel","_inputValue","_selectValue","inputId","_this$state4","ariaAttributes","_this$getComponents2","MultiValue","MultiValueContainer","MultiValueLabel","MultiValueRemove","Placeholder","_this$state5","isOptionFocused","Container","Remove","removeProps","ClearIndicator","LoadingIndicator","_this$getComponents5","IndicatorSeparator","_this$getComponents7","GroupHeading","Menu","MenuList","MenuPortal","LoadingMessage","NoOptionsMessage","_this$props12","menuPortalTarget","onMenuScrollToTop","onMenuScrollToBottom","menuUI","onHover","optionId","onMouseOver","hasOptions","headingId","headingProps","_message","menuPlacementProps","menuElement","_ref4$placerProps","placerProps","scrollTargetRef","appendTo","controlElement","_this5","_this$props13","_this$state6","_this$getComponents8","IndicatorsContainer","SelectContainer","ValueContainer","_this$props14","getCommonProps","renderLiveRegion","renderPlaceholderOrValue","renderClearIndicator","renderIndicatorSeparator","renderDropdownIndicator","renderMenu","renderFormField","newMenuOptionsState","nextSelectValue","lastFocusedIndex","getNextFocusedValue","lastFocusedOption","getNextFocusedOption","newInputIsHiddenState","newAriaSelection","hasKeptFocus","_createSuper","hasNativeReflectConstruct","_excluded$3","applyPrefixToName","cleanValue","cleanCommonProps","isDocumentElement","animatedScrollTo","animateScroll","scrollIntoView","menuEl","focusedEl","menuRect","focusedRect","overScroll","isTouchCapable","isMobileDevice","passiveOptionAccessed","supportsPassiveEvents","notNullish","valueTernary","singleValueAsValue","multiValueAsValue","propsObj","coercePlacement","menuCSS","_ref2$theme","alignToControl","PortalPlacementContext","getPortalPlacement","MenuPlacer","getPlacement","isFixedPosition","shouldScroll","scrollParent","excludeStaticParent","overflowRx","getScrollParent","defaultState","_menuEl$getBoundingCl","menuBottom","menuHeight","containerTop","viewHeight","viewSpaceAbove","viewSpaceBelow","scrollSpaceAbove","scrollSpaceBelow","scrollDown","scrollUp","scrollDuration","_constrainedHeight","spaceAbove","_constrainedHeight2","getMenuPlacement","getUpdatedProps","menuListCSS","noticeCSS","_ref5$theme","noOptionsMessageCSS","loadingMessageCSS","_templateObject","menuPortalCSS","_ref6","_Component2","_super2","_ref7","isFixed","getBoundingClientObj","scrollDistance","menuWrapper","containerCSS","valueContainerCSS","flexWrap","indicatorsContainerCSS","alignSelf","_excluded$2","Svg","CrossIcon","DownChevron","baseCSS","_ref3$theme","dropdownIndicatorCSS","clearIndicatorCSS","indicatorSeparatorCSS","_ref4$theme","loadingDotAnimations","loadingIndicatorCSS","verticalAlign","LoadingDot","indicator","css$1","_ref$theme","_excluded$1","groupCSS","groupHeadingCSS","textTransform","inputCSS","spacingStyle","gridTemplateColumns","multiValueCSS","multiValueLabelCSS","cropWithEllipsis","multiValueRemoveCSS","MultiValueGeneric","optionCSS","userSelect","WebkitTapHighlightColor","placeholderCSS","_cleanCommonProps","indicators","inputClassName","emotionCx","defaultComponents","StateManagedSelect","baseSelectProps","NonceProvider","createEmotionCache","emotionCache","useStateManager","_ref$defaultInputValu","defaultInputValue","_ref$defaultMenuIsOpe","defaultMenuIsOpen","_ref$defaultValue","propsInputValue","propsMenuIsOpen","propsOnInputChange","propsOnMenuClose","propsOnMenuOpen","propsValue","stateInputValue","setStateInputValue","stateMenuIsOpen","setStateMenuIsOpen","stateValue","setStateValue","enter","exit","appendPosition","collapseDuration","preventExitTransition","isIn","containerId","emitQueue","cancelEmit","spinner","toastKey","displayedToast","isToastActive","getToast","toastContent","toastProps","staleId","enableMultiContainer","updateId","closeToast","toastClassName","bodyClassName","progressClassName","deleteToast","iconOut","closeButton","getToastToRender","newestOnTop","targetTouches","removalDistance","canCloseOnClick","canDrag","didMove","nativeEvent","draggableDirection","draggablePercent","pauseOnFocusLoss","playToast","pauseToast","toastRef","controlledProgress","rtl","animationDuration","animationPlayState","defaultClassName","progressStyle","pending","dark","clearWaitingQueue","POSITION","TOP_LEFT","TOP_RIGHT","TOP_CENTER","BOTTOM_LEFT","BOTTOM_RIGHT","BOTTOM_CENTER","TYPE","SUCCESS","WARNING","DEFAULT","Bounce","Flip","Icons","Slide","ToastContainer","Zoom","collapseToast","cssTransition","useToast","useToastContainer","getChildMapping","mapFn","mapper","getNextChildMapping","prevChildMapping","nextChildMapping","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","nextKey","pendingNextKey","mergeChildMappings","hasPrev","prevChild","isLeaving","TransitionGroup","handleExited","isMounting","appear","currentChildMapping","childFactory","TransitionGroupContext","replaceClassName","origClass","classToRemove","forceReflow","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","initialStatus","appearStatus","unmountOnExit","mountOnEnter","nextCallback","updateStatus","cancelNextCallback","getTimeouts","mounting","performEnter","performExit","appearing","maybeNode","maybeAppearing","timeouts","enterTimeout","safeSetState","onEntered","onEnter","onEntering","onTransitionEnd","onExit","onExiting","setNextCallback","doesNotHaveTimeoutOrListener","addEndListener","maybeNextCallback","childProps","baseVal","CSSTransition","appliedClasses","_this$resolveArgument","resolveArguments","removeClasses","_this$resolveArgument2","_this$resolveArgument3","getClassNames","isStringClassNames","baseClassName","doneClassName","phase","_addClass","_this$appliedClasses$","ReplaceTransition","handleEnter","handleLifecycle","handleEntering","_len3","_key3","handleEntered","_len4","_key4","handleExit","_len5","_key5","handleExiting","_len6","_key6","_len7","_key7","originalArgs","_child$props","inProp","_React$Children$toArr","_leaveRenders","_enterRenders","modes","callHook","_element$props","leaveRenders","changeState","enterRenders","SwitchTransition","appeared","oldChildren","createThunkMiddleware","extraArgument","withExtraArgument","formatProdErrorMessage","$$observable","ActionTypes","INIT","REPLACE","PROBE_UNKNOWN_ACTION","reducer","preloadedState","enhancer","currentReducer","currentListeners","nextListeners","isDispatching","ensureCanMutateNextListeners","replaceReducer","nextReducer","outerSubscribe","observeState","legacy_createStore","reducerKeys","finalReducers","shapeAssertionError","finalReducerKeys","assertReducerShape","previousStateForKey","nextStateForKey","bindActionCreator","middlewares","_dispatch","middlewareAPI","chain","middleware","MapShim","class_1","__entries__","isBrowser","global$1","requestAnimationFrame$1","transitionKeys","mutationObserverSupported","ResizeObserverController","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","leadingCall","trailingCall","lastCallTime","resolvePending","timeoutCallback","timeStamp","throttle","connect_","removeObserver","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","instance_","defineConfigurable","getWindowOf","emptyRect","createRectInit","toFloat","getBordersSize","positions","isSVGGraphicsElement","SVGGraphicsElement","getContentRect","getSVGContentRect","paddings","positions_1","getPaddings","horizPad","vertPad","vertScrollbar","horizScrollbar","getHTMLElementContentRect","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","broadcastRect","ResizeObserverEntry","rectInit","Constr","DOMRectReadOnly","ResizeObserverSPI","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","observations","clearActive","observation","isAbsolute","spliceOne","hasTrailingSlash","toParts","fromParts","isToAbs","isFromAbs","mustEndAbs","up","part","__importDefault","style_to_object_1","utilities_1","camelCase","CUSTOM_PROPERTY_REGEX","HYPHEN_REGEX","NO_HYPHEN_REGEX","VENDOR_PREFIX_REGEX","MS_VENDOR_PREFIX_REGEX","trimHyphen","skipCamelCase","hasIterator","interleave","interpolations","classCallCheck","possibleConstructorReturn","EMPTY_OBJECT","getComponentName","isStyledComponent","styledComponentId","SC_ATTR","REACT_APP_SC_ATTR","SC_VERSION_ATTR","IS_BROWSER","DISABLE_SPEEDY","SC_DISABLE_SPEEDY","REACT_APP_SC_DISABLE_SPEEDY","STATIC_EXECUTION_CONTEXT","StyledComponentsError","_Error","SC_COMPONENT_ID","extractComps","maybeCSS","existingComponents","matchIndex","nextComp","cssFromDOM","stylisSplitter","cascade","keyframe","compress","semicolon","stylis","parsingRules","returnRulesPlugin","parsedRules","parseRulesPlugin","_componentId","_selector","_selectorRegexp","selfReferenceReplacer","splitByRules","stringifyRules","flatCSS","cssStr","MAX_SIZE","getNonce","addNameForId","resetIdNames","hasNameForId","stringifyNames","safeInsertRule","cssRule","maxIndex","makeTextMarker","addUpUntilIndex","totalUpToIndex","wrapAsHtmlTag","additionalAttrs","wrapAsElement","getIdsFromMarkersFactory","makeTextNode","targetDocument","makeServerTag","namesArg","markersArg","insertMarker","cssForId","namesClone","cloneNames","markersClone","getIds","insertRules","removeRules","sealed","styleTag","toElement","toHTML","makeTag","tagEl","forceServer","getImportRuleTag","makeStyleTag","extractImport","usedImportRuleTag","importRules","cssRulesSize","mayHaveImport","appendData","newMarker","makeBrowserTag","insertIndex","injectedRules","isConnected","removalIndex","deleteRule","deleteRules","makeSpeedyTag","SPLIT_REGEX","sheetRunningId","master","importRuleTag","firstTag","tagMap","rehydratedNames","ignoreRehydratedNames","capacity","clones","rehydrate","els","extracted","isStreamed","nodesSize","elNames","elNamesSize","extractedSize","_extracted$i","ids","newTag","sealAllTags","lastEl","getTagForId","hasId","deferredInject","toReactElements","Keyframes","styleSheet","getName","uppercasePattern","msPattern","hyphenateStyleName","isFalsish","objToCssArray","executionContext","ruleSet","constructWithOptions","componentConstructor","templateFunction","withConfig","murmurhash","charsLength","getAlphabeticChar","generateAlphabeticName","isStaticRules","hasFunctionObjectKey","_TYPE_STATICS","hasher","ComponentStyle","isStatic","generateAndInjectStyles","lastClassName","generateName","determineTheme","fallbackTheme","isDefaultTheme","dashesAtEnds","defineProperty$1","_Object$getOwnPropert","arrayPrototype","ThemeConsumer","ThemeProvider","renderInner","outerTheme","ServerStyleSheet","masterSheet","collectStyles","StyleSheetManager","getStyleTags","getStyleElement","interleaveWithNodeStream","readableStream","StyleSheetContext","StyleSheetConsumer","identifiers","StyledComponent","renderOuter","forwardedComponent","componentStyle","generatedClassName","_props$forwardedCompo","foldedComponentIds","elementToBeCreated","isTargetTag","propsForElement","computedProps","buildExecutionContext","attrDef","resolvedAttrDef","attrDefWasFn","_props$forwardedCompo2","warnTooManyClasses","createStyledComponent","isTargetStyledComp","isClass","_options$displayName","generateDisplayName","_options$componentId","_ComponentStyle","_displayName","parentComponentId","generateId","_options$ParentCompon","ParentComponent","_options$attrs","finalAttrs","WrappedStyledComponent","withComponent","previousComponentId","optionsToCopy","objectWithoutProperties","newComponentId","_foldedDefaultProps","domElement","GlobalStyle","createStyles","removeStyles","renderStyles","createGlobalStyle","GlobalStyleComponent","_this$constructor","globalStyle","scCGSHMRCache","replaceWhitespace","withTheme","Component$$1","WithTheme","themeProp","__DO_NOT_USE_OR_YOU_WILL_BE_HAUNTED_BY_SPOOKY_GHOSTS","needle","toSheet","parents","ns","ee","ae","ce","se","te","ie","fe","le","oe","he","ue","de","be","ke","ge","Ae","Ce","we","ve","$e","ye","Oe","je","ze","Ne","Se","Fe","We","qe","Be","De","Ee","Ge","He","Je","Re","Te","Ue","Ve","Xe","Ye","Qe","Ie","Pe","Me","Le","Ke","_types","EnhancerProvider","ENHANCER_CONTEXT_NAME","PROPS_DECORATOR_CONTEXT_NAME","propsDecorator","ContextTypes","objSelect","_invariant2","_defaultPropsDecorator2","_pickStyles","_filterKeys","_coerceSelection2","_memoize2","createSubstyle","firstKey","guessBaseClassName","substyle","defaultStyle","selectedKeys","modifierKeys","elementKeys","collectElementStyles","fromStyle","pickNestedStyles","collectSelectedStyles","hoistModifierStylesRecursive","derivedClassNames","firstClassName","deriveClassNames","classNameSplit","mappedClassNames","compact","singleClassName","propsForSpread","defaultObjectPropsWhitelist","pickDirectStyles","_hoistNonReactStatics2","_createSubstyle2","_objectWithoutProperties","getModifiers","shouldUpdate","WithDefaultStyle","setWrappedInstance","wrappedInstance","prevClassName","prevClassNames","prevRest","EnhancedWrappedComponent","getWrappedComponent","_context$ENHANCER_CON","enhance","memoizedEnhance","enhancedWrappedComponent","_defaultStyle2","_EnhancerProvider2","EMPTY","mapEntry","selectHash","objectPropertiesWhitelist","styleKeys","keysToPick","camelizedKeysToPick","modifierKeysToPick","subresult","_ContextTypes","StylePT","ClassNamesPT","mergeDeep","candidateSelectors","candidateSelector","msMatchesSelector","webkitMatchesSelector","candidateTabindex","regularTabbables","orderedTabbables","untouchabilityChecker","UntouchabilityChecker","candidates","includeContainer","isNodeMatchingSelectorTabbable","getTabindex","documentOrder","sortOrderedTabbables","isNodeMatchingSelectorFocusable","isInput","isRadio","getCheckedRadio","isTabbableRadio","isNonTabbableRadio","isHiddenInput","isUntouchable","isTabbable","focusableCandidateSelector","tabindexAttr","isContentEditable","elementDocument","hasDisplayNone","nodeComputedStyle","ELEMENT_NODE","responseURL","getAllResponseHeaders","withCredentials","rnds8","rng","uuid","byteToHex","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","nsecs","dt","tmh","hashfunc","generateUUID","unescape","stringToBytes","DNS","getOutputLength","inputLength8","safeAdd","lsw","md5cmn","md5ff","md5gg","md5hh","md5ii","v35","length32","hexTab","md5ToHexEncodedArray","olda","oldb","oldc","oldd","wordsToMd5","length8","Uint32Array","bytesToWords","rnds","ROTL","_t2","valueEqual","aValue","bValue","ReactDom","ReactRouter","mobx","mobxReact","hasOwn","appendClass","parseValue","newClass","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","assertThisInitialized","_inheritsLoose","sourceSymbolKeys","_regeneratorRuntime","asyncIterator","define","Generator","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","_invoke","AsyncIterator","__await","callInvokeWithMethodAndArg","maybeInvokeDelegate","_sent","dispatchException","abrupt","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","isGeneratorFunction","awrap","rval","delegateYield","unsupportedIterableToArray","_taggedTemplateLiteral","arrayLikeToArray","toPropertyKey","toPrimitive","__awaiter","_arguments","generator","rejected","__generator","ops","verb","__values","__read","__spreadArray","pack","SuppressedError","__webpack_module_cache__","leafPrototypes","getProto","inProgress","dataWebpackPrefix","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO","getter","definition","chunkId","miniCssF","globalThis","needAttach","nc","onScriptComplete","doneFns","nmd","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","chunkLoadingGlobal","createInvitationStore","TrackRouteChanges","useTrackPages","Redirector","setFirstRender","showStickyRsvp","setShowStickyRsvp","utm_campaign","fromEmail","Redirect","ViewInvitationApp","PickGiftKeywords","Messages","Confirmation","AllComments","Photos","LandingPage","initInvitationSummary","initUser","initCoverData","setEviteEvent","initRsvp","fetchAvatars","initPremiumDesign"],"sourceRoot":""}