{"version":3,"sources":["webpack:///./guest-payment-components/DonateGiftAidHowItWorksOverlay.js","webpack:///./guest-payment-components/DonateGiftAid.js","webpack:///./components/amount/amountValidationError.js","webpack:///./components/amount/calculator.js","webpack:///./components/amount/PresetAmountRow.js","webpack:///./components/amountWrapper.js","webpack:///./react-card-security-code/index.js","webpack:///./components/threeDS/ThreeDSSpinner.js","webpack:///./components/threeDS/ThreeDSDeviceDataCollection.js","webpack:///./components/threeDS/ThreeDSIframe.js","webpack:///./components/threeDS/ThreeDSContainer.js","webpack:///./components/guest/WithDonate.js","webpack:///./utility/card-utils.js","webpack:///./components/NoteFieldError.js","webpack:///./components/note.js","webpack:///./components/anonymousDonation/anonymousCheckbox.js","webpack:///./utility/bootstrap.js","webpack:///./components/nextButton.js","webpack:////home/jenkins/agent/workspace/donate-gro-release/lib/geoUtils.js","webpack:///./components/landing/OneTouchNextButton.js","webpack:///./components/guestButton.js","webpack:///./components/recurring-checkbox/RecurringInfo.js","webpack:///./components/recurring-checkbox/recurring-checkbox.js","webpack:///./components/programs/Programs.js","webpack:///./components/recurring-checkbox/RecurringOverlay.js","webpack:///./components/NotTaxDeductibleLegalText.js","webpack:///./components/coverFee/coverFeeCheckbox.js","webpack:///./pages/landing/landing.js","webpack:///./components/WhosDonatedBanner.js","webpack:///./components/Flyout.js","webpack:///./components/hooks/useInterval.js","webpack:///./utility/donorWall.js","webpack:///./pages/landing/campaignLanding.js","webpack:///./setup/clientConstants.js","webpack:///./containers/cvv-component.js","webpack:///./pages/guest/guestReviewComponents/PaymentInformation.js","webpack:///./components/currencyConversion/CurrencyConversionModal.js","webpack:///./utility/accessibilityUtils.js","webpack:///./pages/guest/guestReviewComponents/CrossBorder.js","webpack:///./pages/guest/guestReviewComponents/FeePricing.js","webpack:///./pages/guest/GuestReview.js","webpack:///./pages/guest/confirmation.js","webpack:///./pages/error/FullPageError.js","webpack:///./pages/error/paymentError.js","webpack:///./pages/error/UnilateralError.js","webpack:///./pages/error/threeDSError.js","webpack:///./components/CaptureOrder.js","webpack:///./components/CancelAndRedirectOrder.js","webpack:///./routes/router.js","webpack:///./utility/lazyLoader.js"],"names":["styles","StyleSheet","create","modalContent","maxWidth","margin","okButton","marginTop","msgMargin","DonateGiftAidHowItWorksOverlay","props","orgName","className","overpanel","title","isOpen","onClose","closeOverlay","hideLogo","closeOnBackgroundClick","id","css","src","appendCdnHostName","size","onClick","propTypes","PropTypes","string","bool","func","DonateGiftAid","isAlreadyEnrolled","isChecked","handleGiftAidOption","addressData","showAddress","giftaidInfo","useState","showHelp","setShowHelp","checked","setChecked","isHowItWorksOverlayOpen","setIsHowItWorksOverlayOpen","donateGiftPercentage","donationCode","currency","amount","useEffect","value","openHowItWorksOverlay","alt","extraAmount","normalizeNumber","toFixed","formatCurrency","type","tertiary","label","name","onChange","env","checkedValue","target","strong","fullName","address1","address2","city","state","zip","openOverlay","any","object","isMember","STYLES","error","color","PAYPAL_THEME","sysColorUnselectedContrast","fontSize","criticalIcon","position","marginRight","AmountValidationError","this","errorSourceField","errorString","errorCode","trackErrorIM","errorMessage","fieldName","style","role","data-testid","Component","donationAmount","messages","localsMessages","container","padding","zIndex","calcRow","display","width","verticalAlign","calcRowLeft","calcRowRight","calcLabel","inputCol","input","outlineOffset","paddingLeft","inputLeft","paddingRight","inputRight","fromCode","right","top","height","borderTop","borderRight","borderBottom","toCode","lineHeight","conversion","textAlign","paddingTop","disabled","opacity","inputCurrencyLeft","marginLeft","hasError","Calculator","symbol","currencySymbols","setState","fromSymbol","length","document","getElementById","ev","callback","val","match","validateAmount","handleFromChange","handleToChange","handleFromCurrencyChange","setFromSymbol","event","handleAmountFocus","replace","decimalPoint","youDonate","charityGet","youDonateLabel","charityGetLabel","conversionLabel","placeholder","getLocalizedAmount","fromAmount","toAmount","conversionRate","calcLabelStyle","toError","fromDisabled","bind","onFocus","availableCurrencies","map","c","key","toDisabled","charityAmountSymbol","toErrorMessage","React","array","isRequired","PresetAmountRow","worldready","useContext","WorldReadyContext","presetOther","MessageFormat","format","placeholderOtherAmount","templateData","presetAmounts","setPresetAmounts","AppStore","getDonationAmountType","getDonationAmount","selectedOption","setSelectedOption","showOtherAmount","setShowOtherAmount","handlePresetAmountClick","selectedAmount","getNormalizedNumber","handleAmountChange","hideValidationError","AppActions","amountBeforeFee","getAmountBeforeFee","isOptInCoverFee","shouldSelectPresetAmount","values","charityAmountCode","rightSymbol","result","amountFieldValue","Number","charityAmount","presetOptions","getCurrencyParts","$","formatAmountFromServerDNW","noDecimals","secondaryLabel","isAmountEditable","showValidationError","validationErrorMessage","checkValue","parseFloat","trackLinkClick","LINK_NAME","PRESET_AMOUNT","additionalData","FPTI_TAGS","SELECTED_PRESET_BUTTON_ID","normalizedAmount","griffin","getGriffin","clientMetadata","__getInitialData","coverFeeOptInStatus","getCoverFeeOptInStatus","isPreview","validationErrorCode","AmountWrapper","dispatcherCharityAmount","AppDispatcher","register","payload","action","actionType","item","addFeature","FEATURES","DONATION_AMOUNT_EDITABLE","unregister","window","location","pathname","includes","undefined","getParameterByName","isNaN","exchangeRate","base_currency_code","userAmountCode","quote_amount","params","getConversionRequest","_debounce","st","par","fn","queryParams","fromCountry","userCountry","fromCurrency","toCurrency","normalizeAmount","conversionStatus","Promise","resolve","fetcher","method","body","JSON","stringify","then","response","json","catch","source","exchange_rate","isCalculator","setAppAmount","isAtLandingPage","setFeeAmountInStore","updateFeeAmount","optOutCoverFee","snapshot","userAmount","charityDisabled","getConversion","getConversionRate","currencyCode","userDisabled","presetAmountsCondition","TemplateData","enablePresetAmounts","isGuestReviewPage","PRESET","validateDonationAmount","worldReady","getWorldReady","selectedRecurringFrequency","parse","innerHTML","currencyLists","currencies","symbols","html","getElementsByTagName","directionality","getAttribute","donorIpCountry","US","getDonationCode","isEditable","donationAmountEditable","getDonationSymbol","donationDecimalPoint","nextProps","shouldShowPresetAmounts","renderPresetAmounts","handleUserAmountChange","handleUserCurrencyChange","handleCharityAmountChange","currencySymbol","handleAmount","handleTrackError","getDonationRecurring","getRecurringLabel","CardSecurityCode","showIsRequiredError","securityCode","handleCheckForValue","handleChangeSecurityCode","cardSpec","fields","csc","required","handleFocus","handleBlur","cscSpecs","maxLength","maxlength","pattern","onBlur","errorText","dir","helperText","cardSpecPropType","LOADING_GIF_SOURCE","spinnerAlign","cardImg","ThreeDSSpinner","fundingOptions","getFundingOptions","_get","network","getPaymentCardNetwork","myData","getAllData","_isEmpty","cardType","toLowerCase","hideSpinnerOverlay","setNetworkDetails","context","contextType","withTheme","ThreeDSDeviceDataCollection","data","exception","messageType","onDDCComplete","trackThreeDsDdcFailure","STATUS","console","log","onThreeDSDDCComplete","contingencies","_find","addEventListener","handleDDCEvent","threeDS2ReferenceId","getThreeDSParams","three_ds_reference_id","refs","submit","e","removeEventListener","deviceDataCollectionUrl","device_data_collection_url","jwt","ref","withRouter","ThreeDSIframe","handleIframeMessage","confirmationStatus","CHALLENGE_STATUS","trackThreeDSIframeIM","threeDSRespDuration","CHALLENGE_END_TIME","Date","getTime","onStepUpAuthComplete","hideModal","element","formRef","setTimeout","requestTextMsgFmt","threeDS2Contingency","getThreeDSContingency","redirectLink","md","redirectMethod","requestText","frameBorder","setFormRef","submitForm","CHALLENGE_START_TIME","hideTitle","getModalBody","icon","ThreeDSContainer","showThreeDSDeviceDataCollection","threeDSDCCEndTime","fptiData","THREE_DS_DCC_START_TIME","threeDSDCCStartTime","THREE_DS_DCC_END_TIME","THREE_DS_SPINNER_START_TIME","THREE_DS_SPINNER_END_TIME","trackThreeDsDdcComplete","resolveThreeDSContingency","trackThreeDsLookupStart","THREE_DS_LOOKUP_START_TIME","token","onboardingEnabled","hideThreeDSSpinner","threeDSContingency","resolved","trackThreeDsLookupComplete","timestamp","THREE_DS_LOOKUP_END_TIME","CONTINGENCY_RESOLVED","URL","ACTION","onThreeDSStepUpAuthNotRequired","showThreeDSIframe","hideThreeDSIframe","onThreeDSFailure","onThreeDSStepUpAuthSuccess","onThreeDSStepUpAuthFailure","showThreeDSSpinner","onRef","startTime","trackThreeDsDdcStart","handleThreeDSDDCComplete","handleThreeDSStepUpAuthComplete","toggleSpinner","initialData","getInitialData","ERROR_ELEMENT_SELECTOR","join","withDonate","WrappedComponent","country","DonateAppActions","CHANGE_COUNTRY","COUNTRY","signUp","url","handleGuestCountryChange","isSpinner","showSpinnerOverlay","scrollElementIntoView","language","note","getDonationNote","fundingOptionId","email","getEmail","billingAddress","getBillingAddress","giftAidItFlag","getGiftaidItFlagStatus","card","getSelectedRecurringFrequency","code","history","push","status","href","clientState","encodeURIComponent","confirmationData","startCustomCPLTrackingForConfirmationPage","objectOrArrayToQueryString","confirmation","isOfacPending","isEmpty","cartUrl","orderToken","donateToken","payerID","selectedCountry","getFormData","formData","getParametersFromUrl","showErrorOnLoad","errorMsgs","serverErrors","handleCountryChange","handleScrollToError","getDonateGuestUrl","getInitialFormData","saveFormData","doFulfilment","captureOrder","createOrder","defaultCardSpec","ccNumber","expirationDate","minlength","getSpecificCardSpec","cardNumber","cardTypes","RegExp","autodetect","test","PAYMENT_CARDS","NoteFieldError","NoteComponent","lengthLimit","campaignsLabel","providedLabel","isCampaigns","charityNoteEnabled","charityNoteLabel","donationNote","setDonationNote","initialNoteLabel","showLabel","setShowLabel","showError","setShowError","noteLabel","setNoteLabel","textAreaEl","useRef","isNoteTextPresent","current","focus","isNotePreview","contextLocalityDir","isExternalFlow","htmlFor","NOTE_PAD","eventName","EVENT_NAME","DW_GIVING_DONATE_SETUP_COMMENT_PRESSED","svgIconComponent","buttonType","aria-hidden","maxRows","minRows","showCharacterCounter","maxCharacters","addClass","removeClass","trim","AnonymousCheckbox","content","optInStatus","handleAnonymousDonationChange","ANONYMOUS","tooltip","checkboxStatus","anonymousStatus","labelIcon","description","onOpen","ANONYMOUS_TOOLTIP","DW_GIVING_DONATE_SETUP_TOOLTIP_PRESSED","setAttribute","NextButtonComponent","branded","handleNext","getCdnHostName","OneTouchNextButton","GuestButton","GUEST","secondary","handleGuest","RecurringInfo","orgname","donationName","isLTR","isLeftToRight","isContinue","wrapper","centered","justifyContent","toolWrapper","paddingBottom","animationWrapper","animationContainer","transform","recurringButton","borderRadius","marginBottom","borderOnly","background","divider","dividerContent","backgroundColor","verticalCentered","alignItems","RecurringCheckBox","dispatcherToken","updateAmount","RECURRING","continue","formatedAmount","formatAmount","showhelp","chkBxStatus","loadAnimation","recurring","RECURRING_CHECKBOX","CHECKBOX","handleChange","__html","loadBodyMovin","isAnimating","animationData","heartsAnimationData","bodymovinLibrary","bodymovin","renderer","loop","autoplay","destroy","sanitizeOrgName","defaultProps","Programs","programNames","isDisabled","selectedProgram","handleSelect","programLabelMsgFmt","Array","isArray","getProgramOptions","options","forEach","programName","primaryText","programOption","findIndex","program","appStore","getSelectedProgram","PROGRAM_SELECTED","CAMPAIGN","RecurringOverlay","closeRecurringOverlay","onMakeOneTimeDonation","onContinue","secondDialogLabel","dialogp2","center","isInContext","BackButton","handleClose","noCloseButton","containerClassName","noThanks_closeModal","disclaimerWrapper","disclaimer","disclaimerCaptionText","NotTaxDeductibleLegalText","dispatcherMessages","isPPCC","setIsPPCC","AppConstants","CoverFeeCheckbox","handleCoverFeeChange","formatedFeeAmount","CTF","checkbox_content","coverFee","LandingPageComponent","onload","cpl","CPL_PAGE_SPEC","LANDING_PAGE","currentPage","paymentStatus","recurringStatus","restoreDonationAmount","trackLandingPageIM","noteFieldDisplayed","shouldShowNote","recurringEnabled","waitForOnload","isLoggedInUser","registerAppDispatcherMessages","amountUtils","trackDonateWithCardClick","is_recurring","fee_type","coverFeeEnabled","addShake","preventDefault","recurringModalStatus","memberMandatory","openRecurringOverlay","validateAmountAndNavigateToGuestPage","PAYPAL","analytics","startCPLTracking","page","uicomp","uitype","trackDonateWithPayPalClick","handleLogIn","trackNextClickForCheckout","orderParams","prepareOrderParams","feeAmount","getFeeAmount","computeAmountAfterFee","updateDonationAmount","validationResult","donateDisabled","rpContinue","anonymousOptInStatus","trackAnonymousCheckboxClick","trackCoverFeeCheckboxClick","getFormatedFeeAmount","isRecurringOverlayOpen","isOldButtonFactory","supportedRecurringFrequencies","selectedTabIdx","rpContentHelper","totalAmount","formattedTotalAmount","subHeaderLabel","isCheckoutRail","handleNextForCheckout","isAuthenticated","showNoteCondition","CHARITY_NOTE","personalizedMessages","getPersonalizedMessages","GN_CONTENT_TOUCHPOINT","amountRaised","campaignTotalAmountRaised","campaignStatus","campaignTargetAmount","campaignEndTime","tabIdx","handleRecurringChange","trackRecurringFrequencySelectionClick","anonymousStatusInStore","getAnonymousStatus","hasLogo","charityName","donationId","guestRedirectUrl","recurringHelpText","recurringLabel","isAuthenticatedUser","donateContext","program_names","isVoucherFlow","offerProgram","feePayer","anonymousEnabled","hasDisclaimer","hasPersonalizedMessages","classNames","gn_donate_wrapper","bannerUrl","donate_wrapper","context_gn_wrapper","shouldShowUserBanner","mobile_view","isMobileOrInContext","showUserBanner","showSupportText","shouldShowSupportText","showNoDonationText","shouldShowNoDonationText","freq","receiverCountryEligible","landingClass","UserDetailsBanner","userDetails","CloseButton","inverse","DonateHeader","isLanding","campaigns","tabs","option","panelId","selectFrequencyTab","tabId","updateConversionSataus","renderProgramsDropdown","getPersonalizedAnonymousContent","getPersonalizedNoteToPayeeLabel","showNote","selectedTab","success","renderDisclaimer","renderDonateButtons","hasPartnerSource","handleRecurringOverlayContinue","handleRecurringOverlayMakeOneTimeDonation","Disclaimer","getPersonalizedContent","organizationName","returnUrl","charityReturnUrl","LandingPage","withWorldReady","Landing","displayLanding","currentState","business","hostedButtonId","campaignId","search","handleTokenReuse","addTokenToUrlIfMissing","WhosDonatedBanner","numberOfContributors","contributionsList","isLoading","donorName","donor_name","donatedAmount","donor","donorOneName","donorTwoName","slice","showAnonymousAvatar","shareDonorInfo","photo","photos","isAnonymousAvatar","number","Flyout","delay","intervalRef","savedCallback","startShowing","setStartShowing","showFlyouts","setShowFlyouts","randomContribution","setRandomContribution","getRandomContribution","max","Math","floor","random","flyoutTimer","clearTimeout","setInterval","clearInterval","hideInterval","formatNumber","currency_code","formatFeatured","contributions","totalContributions","formattedList","first","find","badge","toUpperCase","selfItem","LandingDonorWall","reactLazy","LandingRichTextDisplay","isPaymentCardOpen","setIsPaymentCardOpen","targetAmount","campaignTotalNumberOfTxn","amountRaisedWithCurrencySymbol","roundUpAndFormatCurrency","featured","list","setContributionsList","contributionsError","setContributionsError","setCurrentPage","setIsLoading","retry","setRetry","enableReadMore","setEnableReadMore","descriptionHeight","setDescriptionHeight","originalDescriptionHeight","setOriginalDescriptionHeight","stickToTop","isMobile","setIsMobile","checkDeviceType","innerWidth","throttledFn","throttle","fetchData","productId","handleShowMore","goalAmtWithCurrencySymbol","campaignGoalTitle","goalAmount","getCampaignMessage","formatObj","advancedEndDateBadgeContent","minute","minutes","hour","hours","day","days","month","months","year","years","endsInContent","duration","unit","endedContent","date","renderEndDateBadge","endTime","currentTime","formatDate","parseDateOnly","renderTitle","campaignTitle","renderGoalProgressMeter","round","steps","headerClasses","sticky","renderDonorWall","endDate","totalNumberOfTransactions","setHours","renderContributionsError","stickyHeader","social_title","getSocialMessage","incrementDescription","incrementedHeight","Content","maxHeight","descriptionContainer","clientHeight","fallback","campaignDescription","ConfirmationSocialShare","social","emailSubject","emailBody","mobileText","facebookMessage","twitterMessage","whatsappMessage","copyLinkHeader","copyLinkSubheaderBefore","copyLinkSubheader","copiedText","copyText","subheader","shareGeneric","donationEmail","lg","trackDonateLandingButtonClick","mobileFixedHeight","wrapperClassName","skipFormFocus","CVVComponent","getCardSpec","errorMessageCSC","handleSecurityCodeChange","fieldRequired","fieldInvalid","newErrorState","validateInputValue","cscLen","cscMax","cscLabel","handleFieldFocus","handleFieldBlur","PaymentInformation","paymentDigits","paymentType","issuer","isPaypalCurrencyConversion","funds","paymentLogo","setPaymentLogo","transformText","str","charAt","payment_card","thumbnail_logo_url","CDN_HOST_NAME","split","CurrencyConversionOption","isSelected","aria-checked","tabIndex","handleOptionSelection","onKeyDown","doFunction","which","KEY_DOWN","SPACE","ENTER","checkKeyPressed","PaypalAppIcon","CreditCardIcon","rate","as","CurrencyConversionModal","withPaypaltitle","withPaypalRate","withPaypalmessage","withCardtitle","withCardmessage","CURRENCY_CONVERSION_OPTIONS","isPayPalSelected","setPaypalSelected","ISSUER","CrossBorder","fundingSources","lastFundingSource","tags","currencyConversionOption","getLocalizedCurrency","stateCurrency","hasFees","inCurrency","exchangeRateDecimalPoints","amountDecimalPoint","inSymbol","outCurrency","currencyConversionOpen","setCurrencyConversionOpen","CURRENCY_CONVERSION","pageSpec","PAGE_SPEC","CROSS_BORDER_PAGE","sources","_includes","getUserCountry","finally","handleCurrencyConversionClick","FeePricing","feeAmounts","openHelperSheet","setOpenHelperSheet","paymentAmount","payment_amount","totalFee","total_fee","totalAmountPaid","total_amount_paid","getGiftAidItExtraAmount","GuestReview","spinnerOverlay","endCPLTracking","observeUntilEventObserved","attributes","observer","disconnect","formatCurrencyAsString","showCurrencyConversionModal","isCurrencyConversionModalOpen","showCVVField","cvv","childCVVInfo","getElementsByClassName","processDonation","threeDSContainer","initializeThreeDS","trackGuestReviewPageDonateClick","isCvvSend","giftAidState","track3DSProceedToPayment","isRecurring","stateConversionWithPayPal","getStateForConversionWithPayPal","endCustomCPLTracking","paymentNetwork","last_4","currency_conversion","toString","fundsIn","funds_in","fundsOut","funds_out","fee_amount","paymentCard","issuerName","inAmount","outAmount","outSymbol","currencyConversion","fundingCode","getStateForConversionWithIssuer","currencyConversionType","paymentCardId","preferences","payment_card_id","validity","consentShareAddress","getShareAddress","hasCvvContingency","isCvvContingencyResolved","updateFundingOptionsState","giftaidFlag","isGiftaiditEnabled","form","isPPUnlistedCampaign","handleDonateClick","handleThreeDSStepUpAuthSuccess","handleThreeDSFailure","GuestConfirmationPending","withPageTrack","withPostTransactionRequest","PendingView","GuestConfirmationSuccess","SuccessView","body2","linkLabel","handleLinkClick","buttonLabel","handleButtonClick","showCloseButton","centerBody","PaymentError","ERROR_CODE","getPaymentError","trackErrorPageIM","GUEST_FAILURE_PAGE","WENT_WRONG","TEMP_GLITCH","tryagain","getErrorMessage","customerServiceLink","handleTryAgain","UnilateralError","UNILATERAL_ERROR_PAGE","noAccountErrorMessage","align","Illustration","ConfirmationBody","message","ThreeDSError","ConfirmationTitle","CaptureOrder","orderStatus","getOrderStatus","isMemberFlow","isOneTouchUser","handlePaymentSuccess","handleConfirmation","flow","trackCaptureOrderPageIM","accessToken","isSubmitted","backBtnVisible","responseData","wTransactionEntry","requestError","timerCount","CancelAndReturnOrder","waitForXProps","xprops","close","charityCancelUrl","locality","setShouldRTL","currentUserState","isUnilateralAccount","GuestPage","reactLazyPreload","FallbackSpinner","userCookied","isOneTouch","isGNC","isPPCampaign","preload","parseUrlQuery","signup","getPageToRender","CampaignLandingPage","RouterWithWorldReady","exact","path","component","CancelAndRedirectOrder","Review","MemberConfirmationSuccess","MemberConfirmationPending","ReactDOM","render","all","loadScript","loadSlickProgressiveOnboarding","scriptPath","reject","nonce","script","createElement","appendChild","onerror","readyState","importStatement","lazyComponent"],"mappings":";;;;;;;;;;;;;;;;;;mXAQMA,EAASC,aAAWC,OAAO,CAC/BC,aAAc,CACZC,SAAU,IACVC,OAAQ,UAEVC,SAAU,CACRC,UAAW,IAEbC,UAAW,CACTD,UAAW,UAIA,SAASE,EAA+BC,GACrD,IAAQC,EAAYD,EAAZC,QAER,OACE,uBACEC,UAAU,+BACVC,WAAS,EACTC,MAAM,GACNC,OAAQL,EAAMK,OACdC,QAASN,EAAMO,aACfC,UAAQ,EACRC,wBAAwB,GAExB,yBAAKP,UAAU,aAAaQ,GAAG,kBAC7B,yBAAKR,UAAU,IACb,yBAAKA,UAAS,UAAKS,cAAIrB,EAAOG,cAAhB,mBACZ,2BACE,uBAAKS,UAAU,qBACb,yBACEA,UAAU,gBACVU,IAAKC,YACH,8CAKR,2BACE,uBAAKX,UAAU,eACb,uBAAaY,KAAK,MAChB,kBAAC,IAAD,CAASJ,GAAG,6CAIlB,2BACE,2BACE,uBAAUR,UAAWS,cAAIrB,EAAOQ,YAC9B,kBAAC,IAAD,CACEY,GAAG,qCACHT,QAASA,OAKjB,2BACE,2BACE,uBAAUC,UAAWS,cAAIrB,EAAOQ,YAC9B,kBAAC,IAAD,CACEY,GAAG,qCACHT,QAASA,OAKjB,2BACE,2BACE,uBAAUC,UAAWS,cAAIrB,EAAOQ,YAC9B,kBAAC,IAAD,CAASY,GAAG,0CAIlB,2BACE,2BACE,uBAAUR,UAAWS,cAAIrB,EAAOQ,YAC9B,kBAAC,IAAD,CAASY,GAAG,0CAKlB,2BACE,2BACE,yBAAKR,UAAS,UAAKS,cAAIrB,EAAOM,UAAhB,iBACZ,uBAAQM,UAAU,WAAWa,QAASf,EAAMO,cAC1C,kBAAC,IAAD,CAASG,GAAG,0CAYhCX,EAA+BiB,UAAY,CACzCf,QAASgB,IAAUC,OACnBb,OAAQY,IAAUE,KAClBZ,aAAcU,IAAUG,M,4BClGpBC,EAAgB,YAOhB,IANJC,EAMI,EANJA,kBACAC,EAKI,EALJA,UACAC,EAII,EAJJA,oBACAC,EAGI,EAHJA,YACAC,EAEI,EAFJA,YACAC,EACI,EADJA,YAEA,EAAgCC,mBAASL,GAAzC,WAAOM,EAAP,KAAiBC,EAAjB,KACA,EAA8BF,mBAASL,GAAvC,WAAOQ,EAAP,KAAgBC,EAAhB,KACA,EAA8DJ,oBAAS,GAAvE,WAAOK,EAAP,KAAgCC,EAAhC,KACQC,EACNR,EADMQ,qBAAsBC,EAC5BT,EAD4BS,aAAcC,EAC1CV,EAD0CU,SAAUC,EACpDX,EADoDW,OAAQrC,EAC5D0B,EAD4D1B,QAG9DsC,qBAAU,WACJjB,GACFQ,GAAY,KAEb,CAACR,IASJ,IASQkB,EATFC,EAAwB,WAC5BP,GAA2B,IAa7B,OACE,yBAAKhC,UAAU,kBACb,yBAAKA,UAAU,WACb,yBACEA,UAAU,gBACVU,IAAKC,YAAkB,0CACvB6B,IAAI,cAEN,kBAAC,IAAD,CAAUxC,UAAU,gBAClB,kBAAC,IAAD,CACEQ,GAAG,uCACH2B,SAAUA,EACVC,OAAQA,EACRK,aAlBFH,GAASL,EAAuBS,YAAgBN,IAASO,QAAQ,GACnDC,YAAe,CAAEN,QAAOH,SAAUD,OAmBhD,uBACEW,KAAK,SACLhC,QAAS0B,EACTvC,UAAU,oBACV8C,UAAQ,GAER,kBAAC,IAAD,CAAStC,GAAG,2CAIfY,GACC,yBAAKpB,UAAU,mBACb,yBACEA,UAAU,eACVU,IAAKC,YACH,4DAGJ,kBAAC,IAAD,KACE,kBAAC,IAAD,CAASH,GAAG,8CAIhBY,GACA,uBACE2B,MAAO,kBAAC,IAAD,CAASvC,GAAG,0CACnBwC,KAAK,kBACLxC,GAAG,kBACHR,UAAU,eACViD,SAjEa,SAACC,GACtB,IAAIC,EAAeD,EAAIE,OAAOvB,QAC9BC,EAAWqB,GACXvB,EAAYuB,GACZ7B,EAAoB6B,IA8DZtB,QAASA,IAIZF,GACC,6BACE,yBAAK3B,UAAU,aACb,uBAAaA,UAAU,gBACrB,kBAAC,IAAD,CACEQ,GAAG,0CACHT,QAASA,MAIdyB,GACC,yBAAKxB,UAAU,eACb,uBAAaqD,QAAM,GACjB,kBAAC,IAAD,CAAS7C,GAAG,yCAEd,wBAAIR,UAAU,gBACZ,4BAAKuB,EAAY+B,UACjB,4BAAK/B,EAAYgC,UACjB,4BAAKhC,EAAYiC,UACjB,4BAAKjC,EAAYkC,MACjB,4BACGlC,EAAYmC,MADf,KACwBnC,EAAYoC,OAK1C,yBAAK3D,UAAU,aACb,2BACE,kBAAC,IAAD,CAASQ,GAAG,8CAMpB,kBAACX,EAAD,CACEM,OAAQ4B,EACR6B,YAAarB,EACblC,aAhGuB,WAC7B2B,GAA2B,IAgGrBjC,QAASA,OAOnBoB,EAAcL,UAAY,CACxBM,kBAAmBL,IAAUE,KAC7BO,YAAaT,IAAUE,KACvBM,YAAaR,IAAU8C,IACvBxC,UAAWN,IAAUE,KACrBK,oBAAqBP,IAAUG,KAC/BO,YAAaV,IAAU+C,OACvBC,SAAUhD,IAAUE,MAGPE,O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ggDCrJf,IAEM6C,EAAS,CACbC,MAAO,CACLC,MAJmCC,IAA/BC,2BAKJC,SAAU,QAEZC,aAAc,CACZJ,MAAO,UACPK,SAAU,WACVF,SAAU,QACVG,YAAa,QAOXC,E,qIACJ,WACE,MAAqDC,KAAK5E,MAAlD6E,EAAR,EAAQA,iBAAkBC,EAA1B,EAA0BA,YAAaC,EAAvC,EAAuCA,UAEvCC,YAAa,CACXD,UAAWA,GAAa,mCACxBE,aAAcH,EACdI,UAAWL,M,oBAGf,WACE,IAAQC,EAAgBF,KAAK5E,MAArB8E,YAER,OAAKA,EAKH,8BACE,kBAAC,IAAD,CAAchE,KAAK,KAAKqE,MAAK,KAAOjB,EAAOM,gBAC3C,0BACEY,KAAK,QACLD,MAAOjB,EAAOC,MACdkB,cAAY,2BAEXP,IAXE,S,GAduBQ,aAgCpCX,EAAsB3D,UAAY,CAChC8D,YAAa7D,IAAUC,OACvB2D,iBAAkB5D,IAAUC,OAC5B6D,UAAW9D,IAAUC,OACrBqE,eAAgBtE,IAAUC,QAGbyD,Q,8+BC1Df,IAAMa,EAAWC,YAAe,qBAE1BvB,EAAS,CACbwB,UAAW,CACTC,QAAS,gBACTC,OAAQ,GAEVC,QAAS,CACPC,QAAS,eACTC,MAAO,MACPC,cAAe,OAEjBC,YAAa,CACXtG,OAAQ,aAEVuG,aAAc,CACZvG,OAAQ,aAEVwG,UAAW,CACTR,QAAS,eAEXS,SAAU,CACR3B,SAAU,YAEZ4B,MAAO,CACLC,cAAe,OACf/B,SAAU,GACVgC,YAAa,IAEfC,UAAW,CACTC,aAAc,SAEhBC,WAAY,CACVD,aAAc,QAEhBE,SAAU,CACRlC,SAAU,WACVmC,MAAO,MACPC,IAAK,MACLC,OAAQ,OACRf,MAAO,OACPgB,UAAW,EACXC,YAAa,EACbC,aAAc,GAEhBC,OAAQ,CACNzC,SAAU,WACVmC,MAAO,OACPC,IAAK,EACLM,WAAY,QAEdC,WAAY,CACVC,UAAW,SACXC,WAAY,QAEdC,SAAU,CACRC,QAAS,OAEXC,kBAAmB,CACjBhD,SAAU,WACV5E,UAAW,GACX6H,WAAY,GACZnD,SAAU,IAEZoD,SAAU,CACRvD,MAAO,QAILwD,E,gCACJ,aAAc,kBACZ,eADY,4BAeE,SAACV,GACf,IAAMW,EACH,EAAK7H,MAAM8H,iBAAmB,EAAK9H,MAAM8H,gBAAgBZ,IAAY,GACxE,EAAKa,SAAS,CACZC,WAAYH,IAGd,IAAIlC,EAA0B,GAAhBkC,EAAOI,OAAc,GACnCC,SAASC,eAAe,cAAchD,MAAMoB,YAA5C,UAA6DZ,EAA7D,SAvBY,6BA0BG,SAACyC,EAAIC,GACpB,IAAIC,EAAMF,EAAG9E,OAAOd,MAGR,MAAR8F,GAAuB,MAARA,GAAgBA,EAAIC,MAF7B,+BAKVF,EAASC,MAjCG,+BAoCK,SAACF,GAClB,EAAKI,eAAeJ,EAAI,EAAKpI,MAAMyI,qBArCvB,6BAwCG,SAACL,GAChB,EAAKI,eAAeJ,EAAI,EAAKpI,MAAM0I,mBAzCvB,uCA4Ca,SAACN,GAC1B,IAAIE,EAAMF,EAAG9E,OAAOd,MACpB,EAAKxC,MAAM2I,yBAAyBL,GACpC,EAAKM,cAAcN,MA/CP,gCAkDM,SAACO,GACnB,EAAK7I,MAAM8I,kBAAkBD,MAnDjB,iCAsDO,SAACvG,GACpB,MAAO,UAAGA,GAASyG,QAAQ,SAAU,EAAK/I,MAAMgJ,iBArDhD,OACExD,GAAY,IADNvC,MAASgG,GAAjB,aAAuD,GAAvD,GAAiBA,UAAWC,EAA5B,EAA4BA,WAAY9B,EAAxC,EAAwCA,WAF5B,OAIZ,EAAKxD,MAAQ,CACXuF,eAAgBF,EAChBG,gBAAiBF,EACjBG,gBAAiBjC,GAPP,E,6CAWd,WACExC,KAAKgE,cAAchE,KAAK5E,MAAMkH,U,oBA8ChC,WACE,IAAMoC,EAAc1E,KAAK2E,mBAAmB,QACtCC,EAAa5E,KAAK2E,mBAAmB3E,KAAK5E,MAAMwJ,YAChDC,EAAW7E,KAAK2E,mBAAmB3E,KAAK5E,MAAMyJ,UAC9CC,EAAiB,GAAH,OAAM9E,KAAK2E,mBAAmB,QAA9B,YAClB3E,KAAK5E,MAAM2G,SADO,cAEd/B,KAAK2E,mBAAmB3E,KAAK5E,MAAM0J,gBAFrB,YAGlB9E,KAAK5E,MAAMkH,QAGPyC,EAAiB,OAClBzF,EAAOiC,WACNvB,KAAK5E,MAAM4J,QAAU1F,EAAOyD,SAAW,IAG7C,OACE,yBACEzH,UAAU,qDACViF,MAAOjB,EAAOwB,WAEd,yBAAKxF,UAAU,eACb,yBACEiF,MACEP,KAAK5E,MAAM6J,aAAX,SAES3F,EAAO2B,SACP3B,EAAO+B,aACP/B,EAAOqD,UAJhB,OAMSrD,EAAO2B,SAAY3B,EAAO+B,cAGrC,yBAAKd,MAAOjB,EAAOiC,WAAYvB,KAAKhB,MAAMuF,gBAC1C,yBAAKhE,MAAOjB,EAAOkC,UACjB,yBAAKlG,UAAU,2CACb,0BAAMiF,MAAOjB,EAAOuD,mBACjB7C,KAAKhB,MAAMoE,YAEd,2BACEjF,KAAK,OACLP,MAAOgH,EACP9I,GAAG,aACHyC,SAAUyB,KAAK6D,iBAAiBqB,KAAKlF,MACrCO,MAAK,OAAOjB,EAAOmC,OAAUnC,EAAOsC,WACpCe,SAAU3C,KAAK5E,MAAM6J,aACrBP,YAAaA,EACbS,QAASnF,KAAKkE,qBAGlB,4BACEtG,MAAOoC,KAAK5E,MAAM2G,SAClBxD,SAAUyB,KAAK+D,yBAAyBmB,KAAKlF,MAC7CO,MAAOjB,EAAOyC,UAEb/B,KAAK5E,MAAMgK,oBAAoBC,KAAI,SAACC,GAAD,OAClC,4BAAQC,IAAKD,GAAIA,SAKzB,yBACE/E,MACEP,KAAK5E,MAAMoK,WAAX,SAESlG,EAAO2B,SACP3B,EAAOgC,cACPhC,EAAOqD,UAJhB,OAMSrD,EAAO2B,SAAY3B,EAAOgC,eAGrC,yBAAKf,MAAOwE,GAAiB/E,KAAKhB,MAAMwF,iBACxC,yBAAKjE,MAAOjB,EAAOkC,UACjB,yBAAKlG,UAAU,2CACb,0BAAMiF,MAAOjB,EAAOuD,mBACjB7C,KAAK5E,MAAMqK,qBAEd,2BACEtH,KAAK,OACLP,MAAOiH,EACP/I,GAAG,WACHyC,SAAUyB,KAAK8D,eAAeoB,KAAKlF,MACnCO,MAAK,OAAOjB,EAAOmC,OAAUnC,EAAOwC,YACpCa,SAAU3C,KAAK5E,MAAMoK,WACrBd,YAAaA,EACbS,QAASnF,KAAKkE,qBAGlB,0BAAM3D,MAAOjB,EAAOgD,QAAStC,KAAK5E,MAAMkH,SAEzCtC,KAAK5E,MAAM4J,SACV,kBAAC,EAAD,CACE9E,YAAaF,KAAK5E,MAAMsK,eACxBzF,iBAAkB,WAClBU,eAAgBkE,MAMvB7E,KAAK5E,MAAM0J,gBACV,yBACEvE,MACEP,KAAK5E,MAAM6J,cAAgBjF,KAAK5E,MAAMoK,WAAtC,OACSlG,EAAOkD,YAAelD,EAAOqD,UAClCrD,EAAOkD,YAGZxC,KAAKhB,MAAMyF,gBAPd,IAOgCK,Q,GAvKjBa,IAAMjF,WA+K/BsC,EAAW5G,UAAY,CACrBgJ,oBAAqB/I,IAAUuJ,MAAMC,WACrC3C,gBAAiB7G,IAAU+C,OAAOyG,WAClCzB,aAAc/H,IAAUC,OAAOuJ,WAC/Bf,eAAgBzI,IAAUC,OAAOuJ,WACjCjB,WAAYvI,IAAUC,OAAOuJ,WAC7B9D,SAAU1F,IAAUC,OAAOuJ,WAC3BZ,aAAc5I,IAAUE,KAAKsJ,WAC7BhB,SAAUxI,IAAUC,OAAOuJ,WAC3BvD,OAAQjG,IAAUC,OAAOuJ,WACzBL,WAAYnJ,IAAUE,KAAKsJ,WAC3BhC,iBAAkBxH,IAAUG,KAAKqJ,WACjC9B,yBAA0B1H,IAAUG,KAAKqJ,WACzC/B,eAAgBzH,IAAUG,KAAKqJ,WAC/BJ,oBAAqBpJ,IAAUC,OAC/B4H,kBAAmB7H,IAAUG,KAC7BwI,QAAS3I,IAAUE,KACnBmJ,eAAgBrJ,IAAUC,QAGb0G,Q,gIC3Pf,SAAS8C,GAAgB1K,GACvB,IAAM2K,EAAaC,qBAAWC,MAC1BC,EAAc,IAAIC,KAAcJ,EAAY,CAC9CjK,GAAI,qCACHsK,SACCC,EAAyB,IAAIF,KAAcJ,EAAY,CACzDjK,GAAI,gDACHsK,SAWH,EAA0CpJ,mBACtCsJ,IAAaC,eADjB,WAAOA,EAAP,KAAsBC,EAAtB,OAGwCxJ,mBAXG,WAArCyJ,IAASC,wBACJD,IAASE,oBAC8B,cAArCF,IAASC,wBACX,QAEF,IAGT,WAGGE,EAHH,KAGmBC,EAHnB,OAI0C7J,mBACD,cAArCyJ,IAASC,yBALb,WAIGI,EAJH,KAIoBC,EAJpB,KAQMC,EAA0B,SAACpJ,GAE/B,GADAiJ,EAAkBjJ,GACJ,UAAVA,EAAmB,CAIrB,IAAMqJ,EAAiBC,YAAoBtJ,GAC3CxC,EAAM+L,mBAAN,UAA4BF,IAE5BF,GAAmB,GACnBP,EAAiBF,IAAaC,eAE9BnL,EAAMgM,sBAENC,IAAoC,eAEpCjM,EAAM+L,mBAAmB,IACzBJ,GAAmB,IAIvBpJ,qBAAU,WAIR,IAAM2J,EAAkBb,IAASc,qBAC7BD,GAAmBE,eACjBC,YAAyBH,IAC3BN,EAAwBM,KAG3B,IA+DH,IAlC0BI,EAAQzE,EAAQ0E,EACxC,IACMC,EACAC,EA+BFC,EACiC,WAArCrB,IAASC,wBACL,GACAxI,YAAe,CACbT,SAAUrC,EAAMuM,kBAChB/J,MAAOmK,OAAO3M,EAAM4M,iBAEtBC,GAzCoBP,EA0CxBnB,EA1CgCtD,EA2ChC7H,EAAMqK,oBA3CkCkC,EA4CxCvM,EAAMuM,kBA3CN,EAA0BO,cAA1B,cACMN,EAA+B,iBADrC,MAAoB,GAApB,GAC+BO,EACzBN,EAASH,EAAOrC,KAAI,SAACzH,GAmBzB,MAAO,CACLS,MAlBEuJ,EACmB3E,EAAM,UACpBmF,YAA0BxK,EAAO+J,EAAmB,CACrDU,YAAY,IAFS,YAGjBpF,GAHiB,UAIpBmF,YAA0BxK,EAAO+J,EAAmB,CACrDU,YAAY,KAGGpF,EAAM,UACpBA,GADoB,OACXmF,YAA0BxK,EAAO+J,EAAmB,CAC9DU,YAAY,KAFS,UAIpBD,YAA0BxK,EAAO+J,EAAmB,CACrDU,YAAY,KAKlBC,eAAgBX,EAChB/J,MAAOwK,YAA0BxK,EAAO+J,OAGrC,GAAP,WAAWE,GAAX,CAAmB,CAAExJ,MAAO6H,EAAatI,MAAO,YAmBlD,OACE,oCACE,uBACEqK,cAAeA,EACfrB,eAAgBA,EAChBI,wBAAyBA,EACzBF,gBAAiBA,EACjBgB,iBAAkBA,EAClBrC,oBAAqBrK,EAAMqK,oBAC3BkC,kBAAmBvM,EAAMuM,kBACzBvD,aAAchJ,EAAMgJ,aACpBmE,iBAAkBnN,EAAMmN,iBACxBC,oBAAqBpN,EAAMoN,oBAC3B5H,SAAU,CACR6H,uBAAwBrN,EAAMqN,uBAC9BpC,0BAEFc,mBA3FqB,SAACzJ,GAC1B,IAAIgL,EAAaC,WAAWjL,EAAOyG,QAAQ,IAAK,KAAKA,QAAQ,IAAK,KAYlE,GAVyC,WAArCsC,IAASC,yBAAwCgC,EAAa,IAChErB,IAAwC,SACxCA,IAAoC,aACpCjM,EAAM+L,mBAAmB,QACzByB,YAAeC,IAAUC,cAAe,CACtCC,eAAgB,OACbC,IAAUC,0BAA4B,YAIzCP,EAAa,EAAG,CAClBrB,IAAoC,aAIpC,IAAM6B,EAAmBhC,YAAoBxJ,GAC7CtC,EAAM+L,mBAAN,UAA4B+B,MAyE1BhF,kBArEoB,WACxB9I,EAAM8I,qBAqEFoD,gBAAiBb,IAASc,qBAC1B4B,QAASC,cACTC,eAAgBC,cAAmBD,eACnCE,oBAAqB9C,IAAS+C,yBAC9BjD,cAAeA,EACfkD,WAAW,KAMnB3D,GAAgB1J,UAAY,CAC1BgL,oBAAqB/K,IAAUG,KAC/B2K,mBAAoB9K,IAAUG,KAC9B0H,kBAAmB7H,IAAUG,KAC7BwL,cAAe3L,IAAUC,OACzBkM,oBAAqBnM,IAAUE,KAC/BkJ,oBAAqBpJ,IAAUC,OAC/BqL,kBAAmBtL,IAAUC,OAC7B8H,aAAc/H,IAAUC,OACxBiM,iBAAkBlM,IAAUE,KAC5BkM,uBAAwBpM,IAAUC,OAClCoN,oBAAqBrN,IAAUC,QAElBwJ,U,2iCCxKT6D,G,iCACJ,WAAYvO,GAAO,kBACjB,cAAMA,GADW,gCA0DC,WAIlB,EAAKwO,wBAA0BC,KAAcC,UAAS,SAACC,GACrD,GAAIA,EAAQC,QAAwC,kBAA9BD,EAAQC,OAAOC,WAAgC,CACnE,MAAuDF,EAA/CC,OAAR,gBAAgD,GAAhD,GAAkBE,KAAlB,gBAAyC,GAAzC,GAA0BxM,cAA1B,MAAmC,EAAnC,EACA,EAAKyF,SAAS,CACZ6E,cAAetK,QAKjB,EAAKsB,MAAMuJ,kBACb4B,aAAWC,IAASC,6BAxEL,mCA4EI,WACrBR,KAAcS,WAAW,EAAKV,4BA7Eb,gCAgFC,WAClB,OACEW,OAAOC,SAASC,SAASC,SAAS,WACjC,MAACC,EAAW,MAAMD,SAASE,aAAmB,cAnFhC,8BAuFD,SAAClN,GACjB,OAAOmN,MAAMnN,GAAU,EAAIA,KAxFV,2BA2FJ,SAACA,GACd2J,IAAwB,CACtB3J,cA7Fe,gCAiGC,SAACsB,EAAO8L,GAK1B,OAHEA,EAAaC,qBAAuB/L,EAAMgM,eACtCF,EAAaG,aACb,EAAIH,EAAaG,cACXhN,QAAQ,MAtGH,mCAyGI,SAACe,EAAOkM,EAAQzH,GACrC,EAAK0H,qBAAuBC,KAAU,SAACC,EAAIC,EAAKC,GAC9C,IAAMC,EAAc,IAClBC,YAAaJ,EAAGK,YAChBC,aAAcN,EAAGL,eACjBY,WAAYP,EAAG1D,mBACZ2D,GAGDE,EAAY5G,WACd4G,EAAY5G,WAAa,EAAKiH,gBAAgBL,EAAY5G,YAE1D4G,EAAY3G,SAAW,EAAKgH,gBAAgBL,EAAY3G,UAG1D,EAAKzJ,MAAM0Q,kBAAiB,GAC5BC,QAAQC,QACNC,YAHU,qCAGG,CACXC,OAAQ,OACRC,KAAMC,KAAKC,UAAUb,MAGtBc,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,YAAgB,IAAbzE,EAAa,EAAbA,OACP,EAAKzM,MAAM0Q,kBAAiB,GAC5BP,EAAG1D,MAEJ4E,OAAM,WACL,EAAKrR,MAAM0Q,kBAAiB,GAC5B,IAAIpO,EAAS8N,EAAY5G,YAAc4G,EAAY3G,UAAY,GAE/D0G,EAAG,CACD7M,OAAQ,CAAEd,MAFZF,GAAU,IAGRgP,OAAQ,CAAE9O,MAAOF,GACjBiP,cAAe,CACb5B,mBAAoBS,EAAYR,eAChCC,aAAc,UAIrB,KAEH,EAAKE,qBAAqBnM,EAAOkM,EAAQzH,MAnJxB,4BA0JH,SAACzE,EAAOkM,EAAQK,GAE9B,GAAIvM,EAAM4N,aACR,EAAKzB,qBAAqBnM,EAAOkM,EAAQK,OACpC,CACL,IAAM7N,EAASwN,EAAOtG,YAAcsG,EAAOrG,UAAY,GACvD0G,EAAG,CACD7M,OAAQ,CAAEd,MAAOF,GACjBgP,OAAQ,CAAE9O,MAAOF,GACjBiP,cAAe,CACb5B,mBAAoB/L,EAAMgM,eAC1BC,aAAc,SArKH,iCA2KE,SAACvN,GACpB,EAAKyF,SAAS,CAAE6E,cAAetK,IAC/B,EAAKmP,aAAanP,GAWdoP,eAEFC,cAEA,EAAK3R,MAAM4R,oBAKPxF,eACFyF,cAMuC,WAArCxG,IAASC,yBACXW,IAAoC,iBAzMvB,qCAkNM,SAAC3J,GACxB,IAAIwP,EAAW,CACbC,WAAYzP,EACZ0P,iBAAiB,GAEfpO,EAAQ,SAAK,EAAKA,OAAUkO,GAChC,EAAK/J,SAAS+J,GAEd,EAAKG,cACHrO,EACA,CACE4F,WAAY5F,EAAMmO,aAEpB,YAA+B,IAA5BzO,EAA4B,EAA5BA,OAAQiO,EAAoB,EAApBA,cACT,EAAKxJ,SAAS,CACZ2B,eAAgB,EAAKwI,kBAAkBtO,EAAO2N,GAC9C3E,cAAetJ,EAAOd,MACtBwP,iBAAiB,IAEnB,EAAKP,aAAanO,EAAOd,aArOZ,uCA0OQ,SAAC2P,GAC1B,IAAIL,EAAW,CACblC,eAAgBuC,EAChBH,iBAAiB,GAEfpO,EAAQ,SAAK,EAAKA,OAAUkO,GAChC,EAAK/J,SAAS+J,GAEd,EAAKG,cACHrO,EACA,CACE4F,WAAY5F,EAAMmO,aAEpB,YAA+B,IAA5BzO,EAA4B,EAA5BA,OAAQiO,EAAoB,EAApBA,cACT3N,EAAMgJ,cAAgBtJ,EAAOd,MAC7B,EAAKuF,SAAS,CACZ2B,eAAgB,EAAKwI,kBAAkBtO,EAAO2N,GAC9C3E,cAAehJ,EAAMgJ,cACrBoF,iBAAiB,IAEnB,EAAKP,aAAanO,EAAOd,aA9PZ,wCAmQS,SAACF,GAC3B,IAAIwP,EAAW,CACblF,cAAetK,EACf8P,cAAc,GAEZxO,EAAQ,SAAK,EAAKA,OAAUkO,GAChC,EAAK/J,SAAS+J,GAEd,EAAKG,cACHrO,EACA,CACE6F,SAAU7F,EAAMgJ,gBAElB,YAA+B,IAA5B0E,EAA4B,EAA5BA,OAAQC,EAAoB,EAApBA,cACT,EAAKxJ,SAAS,CACZ2B,eAAgB,EAAKwI,kBAAkBtO,EAAO2N,GAC9CQ,WAAYT,EAAO9O,MACnB4P,cAAc,IAEhB,EAAKX,aAAa7N,EAAMgJ,qBAtRX,+BA2RA,SAAC7H,EAAWD,EAAaD,GAC1CG,YAAa,CACXD,UAAWA,GAAa,mCACxBE,aAAcH,EACdI,UAAWL,OA/RI,sCAmSO,WAKxB,IAAMwN,EACJC,IAAaC,sBACZ,EAAK3O,MAAM4N,eACX,EAAKgB,oBAMR,OAJIH,GACFtD,aAAWC,IAASyD,QAGfJ,KAjTU,kCAoTG,WACpB,OACE,kBAAC,GAAD,CACEzF,cAAe,EAAKhJ,MAAMgJ,cAC1BvC,oBAAqB,EAAKzG,MAAMyG,oBAChCkC,kBAAmB,EAAK3I,MAAM2I,kBAC9BvD,aAAc,EAAKpF,MAAMoF,aACzBmE,iBAAkB,EAAKvJ,MAAMuJ,iBAC7BpB,mBAAoB,EAAKA,mBAAmBjC,KAAxB,QACpBhB,kBAAmB,EAAKA,kBAAkBgB,KAAvB,QACnBkC,oBAAqB,EAAKhM,MAAMgM,oBAChCoB,oBAAqB,EAAKxJ,MAAMwJ,oBAChCsF,uBAAwB,EAAK1S,MAAM0S,uBACnCrF,uBAAwB,EAAKzJ,MAAMyJ,uBACnCiB,oBAAqB,EAAK1K,MAAM0K,yBAlUnB,gCAuUC,WAClB,IAAMqE,EAAaC,eACnB,OAAQ,EAAK5S,MAAM6S,4BACjB,IAAK,OACH,OAAO,IAAI9H,KAAc4H,EAAY,CACnCjS,GAAI,kCACHsK,SACL,IAAK,QACH,OAAO,IAAID,KAAc4H,EAAY,CACnCjS,GAAI,mCACHsK,SACL,IAAK,OACH,OAAO,IAAID,KAAc4H,EAAY,CACnCjS,GAAI,kCACHsK,SACL,QACE,OAAO,SArVX,IAGA,EAHoBgG,KAAK8B,MACvB5K,SAASC,eAAe,iBAAiB4K,WAAa,KAGvC,GADGC,EAApB,EAAQC,WAAoCnL,EAA5C,EAAmCoL,QAE7BC,EAAOjL,SAASkL,qBAAqB,QAAQ,GACnD,EAAKC,eAAiBF,EAAKG,aAAa,OAExC,IAAIhD,EAAcgC,IAAaiB,eAC3BvJ,EAAsBgJ,EAAc1C,IAAgB0C,EAAcQ,GAClE5D,EAAiB5F,EAAoB,GACrCuC,EAAoBlB,IAASoI,kBAC7BC,IAAepB,IAAaqB,uBAdf,OAwBjB,EAAK/P,MAAQ,CACX2I,oBACAK,cAAevB,IAASE,qBAAuB,GAC/ClB,oBAAqBgB,IAASuI,oBAC9B5B,iBAAiB,EAEjB1B,cACAV,iBACAmC,WAAY,GACZK,cAAc,EAEdpI,sBACAlC,kBACA0J,cApBiB,EAqBjBxI,aAAcsJ,IAAauB,sBAAwB,IACnDnK,eAAgB,GAChByD,iBAAkBuG,EAElBtG,oBAAqBpN,EAAMoN,sBAAuB,EAClDC,uBAAwBrN,EAAMqN,wBAA0B,GACxDiB,oBAAqBtO,EAAMsO,qBAAuB,IA5CnC,E,4DAgDnB,SAAiCwF,GAC3BlP,KAAKhB,MAAMwJ,sBAAwB0G,EAAU1G,qBAC/CxI,KAAKmD,SAAS,CACZqF,oBAAqB0G,EAAU1G,oBAC/BC,uBAAwByG,EAAUzG,uBAClCiB,oBAAqBwF,EAAUxF,wB,+BAyJrC,WACE1J,KAAK5E,MAAM+J,Y,oBA4Ib,WACE,OAAInF,KAAKmP,0BAEL,yBAAK7T,UAAU,yBACZ0E,KAAKoP,uBAMV,yBAAK9T,UAAU,kBACZ0E,KAAKhB,MAAM4N,aACV,kBAAC,EAAD,CACExH,oBAAqBpF,KAAKhB,MAAMoG,oBAChCK,oBAAqBzF,KAAKhB,MAAMyG,oBAChCvC,gBAAiBlD,KAAKhB,MAAMkE,gBAC5BkB,aAAcpE,KAAKhB,MAAMoF,aACzBU,eAAgB9E,KAAKhB,MAAM8F,eAC3BF,WAAY5E,KAAKhB,MAAMmO,WACvBpL,SAAU/B,KAAKhB,MAAMgM,eACrB/F,aAAcjF,KAAKhB,MAAMwO,aACzB3I,SAAU7E,KAAKhB,MAAMgJ,cACrB1F,OAAQtC,KAAKhB,MAAM2I,kBACnBnC,WAAYxF,KAAKhB,MAAMoO,gBACvBvJ,iBAAkB7D,KAAKqP,uBAAuBnK,KAAKlF,MACnD+D,yBAA0B/D,KAAKsP,yBAAyBpK,KAAKlF,MAC7D8D,eAAgB9D,KAAKuP,0BAA0BrK,KAAKlF,MACpDgF,QAAShF,KAAKhB,MAAMwJ,oBACpB9C,eAAgB1F,KAAKhB,MAAMyJ,uBAC3BvE,kBAAmBlE,KAAKkE,kBAAkBgB,KAAKlF,QAGjD,oCACE,yBACE1E,UAAS,iBACN0E,KAAKhB,MAAMwJ,oBAAmC,GAAb,aAGpC,uBACE9K,OAAQsC,KAAKhB,MAAMgJ,cACnBuF,aAAcvN,KAAKhB,MAAM2I,kBACzB6H,eAAgBxP,KAAKhB,MAAMyG,oBAC3BgK,aAAczP,KAAKmH,mBAAmBjC,KAAKlF,MAC3CwI,oBAAqBxI,KAAKhB,MAAMwJ,oBAChCC,uBAAwBzI,KAAKhB,MAAMyJ,uBACnCqG,WAAY9O,KAAKhB,MAAMuJ,iBACvBrE,kBAAmBlE,KAAKkE,kBAAkBgB,KAAKlF,MAC/CuH,mBAAoBd,IAASc,mBAC7BC,gBAAiBA,IACjBsF,gBAAiBA,IACjBzD,eAAgBC,cAAmBD,eACnCqG,iBAAkB1P,KAAK0P,iBACvBhG,oBAAqB1J,KAAKhB,MAAM0K,oBAChC+E,eAAgBzO,KAAKyO,iBAEc,YAApChI,IAASkJ,wBACR,uBAAUhR,QAAM,GAAEqB,KAAK4P,4B,GApZXjK,IAAMjF,WA8ZlCiJ,GAAcvN,UAAY,CACxB0P,iBAAkBzP,IAAUG,KAC5BgM,oBAAqBnM,IAAUE,KAC/B6K,oBAAqB/K,IAAUG,KAC/BiM,uBAAwBpM,IAAUC,OAClCoN,oBAAqBrN,IAAUC,OAC/BwR,uBAAwBzR,IAAUG,KAClC2I,QAAS9I,IAAUG,KACnBwQ,gBAAiB3Q,IAAUG,KAC3ByR,2BAA4B5R,IAAUC,QAGzBqN,Q;;;;;ylCC3bTkG,E,oMAiBI,CAAEjS,MAAO,GAAIkS,qBAAqB,I,uCAOf,YAAyC,IAArBC,EAAqB,EAAtCrR,OAAUd,MAKtC,OAJAmS,EAAeA,EAAa5L,QAAQ,OAAQ,IAC5C,EAAKhB,SAAS,CAAEvF,MAAOmS,IACvB,EAAKC,oBAAoBD,GACzB,EAAK3U,MAAM6U,yBAAyBF,GAC7BA,K,kCAQa,SAACA,GACrB,IACMlK,EADW,EAAKzK,MAAM8U,SAASC,OAAOC,IAChBC,SAC5B,EAAKlN,SAAS,CAAE2M,oBAAqBjK,IAAekK,O,0BAOxC,SAACA,GACb,EAAK3U,MAAMkV,YAAYP,M,yBAOZ,YAAyC,IAArBA,EAAqB,EAAtCrR,OAAUd,MACxB,EAAKoS,oBAAoBD,GACzB,EAAK3U,MAAMmV,WAAWR,M,oCAGxB,WACE,IAAMS,EAAWxQ,KAAK5E,MAAM8U,SAASC,OAAOC,IAEtC/P,EAAiBL,KAAK5E,MAAtBiF,aAEN,OACE,yBAAKE,MAAO,CAAExF,OAAQ,WAAY8E,SAAU,aAC1C,uBACE1B,KAAK,MACLrC,GAAG,eACHwC,KAAK,eACLV,MAAOoC,KAAKhB,MAAMpB,MAClBS,MAAO2B,KAAK5E,MAAMiD,MAClBoS,UAAWD,EAASE,UACpBC,QAASH,EAASG,QAClBN,SAAUG,EAASH,SACnB9R,SAAUyB,KAAKiQ,yBACf9K,QAASnF,KAAKsQ,YACdM,OAAQ5Q,KAAKuQ,WACbM,UAAWxQ,EACXyQ,IAAK9Q,KAAK5E,MAAM0V,IAChBC,WAAY/Q,KAAK5E,MAAM2V,kB,GAjFFpL,IAAMjF,W,IAA/BmP,E,YACe,CACjBK,SAAUc,mBACV3S,MAAOhC,IAAUC,OAAOuJ,WACxBxF,aAAchE,IAAUC,OACxB2T,yBAA0B5T,IAAUG,KAAKqJ,WACzCyK,YAAajU,IAAUG,KACvB+T,WAAYlU,IAAUG,KACtBsU,IAAKzU,IAAUC,OACfyU,WAAY1U,IAAUC,S,IATpBuT,E,eAYkB,CACpBS,YAAa,aACbC,WAAY,eA0EDV,O;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;g+BCpFf,IAAMoB,EAAqBhV,YACzB,wDAGIqD,EAAS3E,aAAWC,OAAO,CAC/BsW,aAAc,CACZnW,OAAQ,kBAEVoW,QAAS,CACPlW,UAAW,UAITmW,E,gCACJ,WAAYhW,GAAO,yBACjB,cAAMA,GADW,gCAQC,WAClB,IAAMiW,EAAiB5K,IAAS6K,oBAC5BH,EAAUI,IACZF,EACA,qDAEEG,EAAUC,YACZF,IAAKF,EAAgB,4BAEnBK,EAASjL,IAASkL,cAAgB,GACtC,GACc,OAAZR,GACAS,IAAST,SACU,IAAZA,EACP,CACA,IAAMU,EAAWN,IAAKG,EAAQ,yBAA0B,IACrDvN,QAAQ,kBAAmB,IAC3BA,QAAQ,SAAU,KAClB2N,cACHX,EAAUlV,YAAkB,iDAAD,OACwB4V,EADxB,UAKf,OAAZL,GACAI,IAASJ,SACU,IAAZA,KAEPA,EAAUE,EAAOxB,SAASA,SAAS/R,KAAKgG,QAAQ,OAAQ,MAE1D,EAAKhB,SAAS,CAAEgO,UAASK,eApCzB,EAAKxS,MAAQ,CACXmS,QAAS,KACTK,QAAS,MAJM,E,6CAyCnB,WAGEO,cACA/R,KAAKgS,sB,oBAGP,WACE,IAAMjE,EAAa/N,KAAKiS,QACxB,OACE,yBAAK3W,UAAU,kCACb,yBAAKA,UAAU,kBACb,yBAAKA,UAAU,eAEb,yBAAKQ,GAAG,qBACN,yBAAKE,IAAKiV,EAAoB/O,OAAO,SAEvC,uBAAahG,KAAK,KAAKJ,GAAG,YACvB,IAAIqK,IAAc4H,EAAY,CAC7BjS,GAAI,uCACHsK,OAAO,CACRoL,QAASxR,KAAKhB,MAAMwS,WAGxB,yBAAKlW,UAAS,UAAKS,cAAIuD,EAAO6R,WAC3BnR,KAAKhB,MAAMmS,QACV,yBAAKnV,IAAKgE,KAAKhB,MAAMmS,QAASrT,IAAI,cAElC,IAGJ,yBAAKhC,GAAG,eACN,2BACG,IAAIqK,IAAc4H,EAAY,CAC7BjS,GAAI,qCACHsK,UAEL,2BACG,IAAID,IAAc4H,EAAY,CAC7BjS,GAAI,4CACHsK,kB,GAlFU1F,aA4F7B0Q,EAAec,YAAcjM,IAEdkM,kBAAUf,G,0eC/GnBgB,E,8MAmCa,SAACnO,GAEhB,GADoBsN,IAAKtN,EAAO,SAAU,IAC1ByG,SAAS,wBAAyB,CAChD,IAAI2H,EAAO,KACX,IACEA,EAAOjG,KAAK8B,MAAMjK,EAAMoO,MACxB,MAAOC,GAEPD,EAAO,GAGT,IAAME,EAAchB,IAAKc,EAAM,cAAe,IAC1B,sBAAhBE,EACF,EAAKC,cAAcvO,IAEnBwO,YAAuB,OACpBzJ,IAAU0J,OAASH,IAEtBI,QAAQC,IAAI,wCAAyCL,Q,4BAK3C,SAACtO,GACf,EAAK7I,MAAMyX,qBAAqB5O,M,8CAtDlC,WACE,IAAMoN,EAAiB5K,IAAS6K,oBAC1BwB,EAAgBvB,IAAKF,EAAgB,kBAAoB,GAK/D,OAHE0B,IAAMD,EAAe,CAAE9I,OAAQ,wCAC/B,K,+BAKJ,WAEEO,OAAOyI,iBAAiB,UAAWhT,KAAKiT,gBAExC,IAA+BC,EAC7BlT,KAAKmT,mBADCC,sBAGR,GAAIpT,KAAKqT,KAAKH,GACZ,IACElT,KAAKqT,KAAKH,GAAqBI,SAC/B,MAAOC,GACPZ,QAAQC,IAAI,KAAMW,M,kCAKxB,WACEhJ,OAAOiJ,oBAAoB,UAAWxT,KAAKiT,kB,oBA8B7C,WACE,MAIIjT,KAAKmT,mBAHqBM,EAD9B,EACEC,2BACAC,EAFF,EAEEA,IACuBT,EAHzB,EAGEE,sBAGF,OAAKK,EAKH,6BACE,4BAAQvR,OAAO,IAAIf,MAAM,IAAI7C,KAAK,eAClC,0BACEsV,IAAKV,EACLhH,OAAO,OACP5N,KAAK,aACLI,OAAO,aACPsL,OAAQyJ,GAER,2BAAOtV,KAAK,SAASG,KAAK,MAAMmC,cAAY,MAAM7C,MAAO+V,MAbtD,S,GAtE6BjT,a,IAApC0R,E,YACe,CACjBS,qBAAsBxW,IAAUG,OAwFrBqX,kBAAWzB,G,6bCrFpB0B,E,gNAoBe,WACjBvJ,OAAOyI,iBAAiB,UAAW,EAAKe,wB,kCAGpB,SAAC9P,GACrB,IAAMyI,EAAS6E,IAAKtN,EAAO,eACrB+P,EAAqBzC,IAAKtN,EAAO,2BACjC1E,EAAQgS,IAAKtN,EAAO,YAEX,WAAXyI,IAIAnN,GACFa,YAAa,CACXC,aAAcd,EACde,UAAW,aACXyI,eAAgB,OACbC,IAAUiL,iBAAmBD,KAKpCE,YAAqB,CACnBC,oBAAqB,OAClBnL,IAAUoL,oBAAqB,IAAIC,MAAOC,WAE7CN,uBAGF,EAAK5Y,MAAMmZ,qBAAqB,CAC9BP,qBACAzU,UAEF,EAAKnE,MAAMoZ,gB,yBAGA,SAACC,GACZ,EAAKC,QAAUD,K,yBAGJ,WACXE,YAAW,WACL,EAAKD,SACP,EAAKA,QAAQpB,WAEd,Q,2BAGU,WACb,IAAMvF,EAAa,EAAKkE,QAClB2C,EAAoB,IAAIzO,IAAc4H,EAAY,CACtDjS,GAAI,oCAIE+Y,GAFYpO,IAASqO,yBAA2B,IAEhDD,oBAEFE,EAAexD,IAAKsD,EAAqB,2BACzClB,EAAMpC,IAAKsD,EAAqB,OAChCxD,EAAiB5K,IAAS6K,oBAC1B0D,EAAKzD,IAAKF,EAAgB,KAAM,IAChC4D,EAAiB1D,IACrBsD,EACA,4BAGEK,EACFN,EAAkBxO,UAClB,mDAEF,OACE,yBAAK9K,UAAU,cACb,yBAAKA,UAAU,eACb,yBAAKA,UAAU,+BACb,yBAAKU,IAAKC,YAAkB,kCAE9B,uBAAaC,KAAK,KAAKJ,GAAG,WAAWR,UAAU,eAC5C4Z,GAEH,4BACE1Z,MAAM,gBACN8C,KAAK,SACLxC,GAAG,SACHqZ,YAAY,KAEZ,0BACEvB,IAAK,EAAKwB,WACV9W,KAAK,aACLxC,GAAG,aACH4C,OAAO,SACPwN,OAAQ+I,EACRjL,OAAQ+K,GAER,2BAAO5W,KAAK,SAASG,KAAK,MAAMV,MAAO+V,IACvC,2BAAOxV,KAAK,SAASG,KAAK,KAAKV,MAAOoX,W,mDAlHlD,WACE,OAAO,I,+BAGT,WACEhV,KAAKgT,mBACLhT,KAAKqV,aAELnB,YAAqB,CACnBC,oBAAqB,OAClBnL,IAAUsM,sBAAuB,IAAIjB,MAAOC,e,kCAKnD,WACE/J,OAAOiJ,oBAAoB,UAAWxT,KAAK+T,uB,oBA0G7C,WACE,OACE,uBACEzY,UAAU,6BACVE,MAAM,GACN+Z,WAAW,EACX9Z,OAAQuE,KAAK5E,MAAMK,OACnBC,QAASsE,KAAK5E,MAAMoZ,UACpB5Y,UAAQ,EACRC,wBAAwB,GAEvBmE,KAAKwV,oB,GAtIc9U,aA4I5BoT,EAAc5B,YAAcjM,IAE5B6N,EAAc1X,UAAY,CACxBmY,qBAAsBlY,IAAUG,KAChCiZ,KAAMpZ,IAAUC,OAChBkY,UAAWnY,IAAUG,KACrBf,OAAQY,IAAUE,KAClBb,QAASW,IAAUG,MAEN2V,kBAAU2B,G,udCjJnB4B,G,iCACJ,WAAYta,GAAO,yBACjB,cAAMA,GADW,uCAiCQ,WAAM,MAC/B,EAAK+H,SAAS,CACZwS,iCAAiC,IAGnC,IAAMC,GAAoB,IAAIvB,MAAOC,UAC/BuB,GAAQ,WACX7M,IAAU8M,wBAA0B,EAAK9W,MAAM+W,qBADpC,MAEX/M,IAAUgN,sBAAwBJ,GAFvB,MAGX5M,IAAUiN,4BAA8B,EAAKjX,MAAM+W,qBAHxC,MAIX/M,IAAUkN,0BAA4BN,GAJ3B,GAMdO,YAAwBN,GACxB,EAAKO,+BA9CY,wCAiDS,WAC1BC,YAAwB,OACrBrN,IAAUsN,4BAA6B,IAAIjC,MAAOC,YAGrDrI,YAAQ,4CAA6C,CACnDC,OAAQ,OACRC,KAAMC,KAAKC,UAAU,CACnBkK,MAAOjQ,KAAaiQ,MACpBC,kBAAmBlQ,KAAakQ,sBAGjClK,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAACzE,GAAW,MAChB,EAAK4O,qBAEL,IAAMC,EAAqBnF,IAAK1J,EAAQ,2BAClC8O,EAAWpF,IAAKmF,EAAoB,8BAE1CE,aAA0B,GACxBC,UAAW,OACR7N,IAAU8N,0BAA2B,IAAIzC,MAAOC,YAF3B,MAIvBtL,IAAU+N,qBAAuBJ,GAJV,MAKvB3N,IAAUgO,IAAMzF,IACfmF,EACA,gDAPsB,MASvB1N,IAAUiO,OAAS1F,IAClBmF,EACA,+BAXsB,IAetBC,EAEF,EAAKvb,MAAM8b,kCAKb7P,IAA6BqP,GAC7B,EAAKS,wBAEN1K,OAAM,WAELpF,IAA6B,IAC7B,EAAK+P,oBACL,EAAKhc,MAAMic,yBAjGE,8CAqGe,YAA2C,QAAxCrD,0BAAwC,WAAZzU,MAC3DyU,GAA6C,oBAAvBA,EACxB,EAAK5Y,MAAMkc,6BAEX,EAAKlc,MAAMmc,gCAzGI,gCA8GC,WAClB,EAAKpU,SAAS,CACZgU,mBAAmB,OAhHJ,gCAoHC,WAClB,EAAKhU,SAAS,CACZgU,mBAAmB,OAtHJ,iCA0HE,WACnB,EAAKhU,SAAS,CACZqU,oBAAoB,OA5HL,iCA+HE,WACnB,EAAKrU,SAAS,CACZqU,oBAAoB,OA/HtB,EAAKxY,MAAQ,CACXmY,mBAAmB,EACnBK,oBAAoB,EACpB7B,iCAAiC,EACjCI,oBAAqB,MANN,E,6CAUnB,WACE/V,KAAK5E,MAAMqc,MAAMzX,Q,kCAGnB,WACEA,KAAK5E,MAAMqc,WAAM9M,K,+BAGnB,WAAoB,MACd+M,GAAY,IAAIrD,MAAOC,UAC3BtU,KAAKmD,SAAS,CACZwS,iCAAiC,EACjC6B,oBAAoB,EACpBzB,oBAAqB2B,IAGvB,IAAM7B,GAAQ,WACX7M,IAAU8M,wBAA0B4B,GADzB,MAEX1O,IAAUiN,4BAA8ByB,GAF7B,GAIdC,YAAqB9B,K,oBAuGvB,WACE,OACE,6BACG7V,KAAKhB,MAAMwY,oBACV,kBAAC,IAAD,KACE,kBAAC,EAAD,OAIHxX,KAAKhB,MAAM2W,iCACV,kBAAC,EAAD,CACE9C,qBAAsB7S,KAAK4X,2BAI9B5X,KAAKhB,MAAMmY,mBACV,kBAAC,EAAD,CACE5C,qBAAsBvU,KAAK6X,gCAC3Bpc,QAAQ,EACR+Y,UAAWxU,KAAKoX,yB,GAzJG1W,aAiK/BgV,GAAiBtZ,UAAY,CAC3B8a,+BAAgC7a,IAAUG,KAC1C8a,2BAA4Bjb,IAAUG,KACtC+a,2BAA4Blb,IAAUG,KACtC6a,iBAAkBhb,IAAUG,KAC5Bib,MAAOpb,IAAUG,KACjBsb,cAAezb,IAAUG,MAGZkZ,Q;;;;;6lDCpKf,IAAMqC,EAAcC,cAEdC,EAAyB,CAC7B,6BACA,yBACAC,OAqPaC,IAnPf,SAAoBC,GAAkB,MAC9BrK,EAAaC,cAEnB,OAAO,EAAP,gCAKE,WAAY5S,GAAO,yBACjB,cAAMA,GADW,kCAKG,SAACid,GACrB,GAAIA,IAAY,EAAKA,QAAS,CAC5B,EAAKP,eAAc,GACnBQ,IAA+B,CAC7BD,QAASA,IAEX,EAAKA,QAAUA,EAGfzP,YAAeC,IAAU0P,eAAgB,CACvCxP,eAAgB,OACbC,IAAUwP,QAAUH,KAIzB,IAAM9B,EAA0BjQ,IAA1BiQ,MAAN,EAAgCjQ,IAAnBmS,OACTC,OADJ,SACgB,wBACKnC,EADL,kCACoC8B,EADpC,qBACwDA,GADxD,wBAEK9B,EAFL,sBAEwB8B,EAFxB,qBAE4CA,EAF5C,+DAE0G9B,GAE1HoC,YAAyBD,OAzBV,4BAgCH,WAAuB,IAAtBE,EAAsB,wDACjCA,EACFC,cAEA9G,iBApCe,kCAyCG,WACpB+G,YAAsBb,MA1CL,gCA8CC,WAClB,IAAQ1B,EAA6BjQ,IAA7BiQ,MAAO8B,EAAsB/R,IAAtB+R,QAASU,EAAazS,IAAbyS,SAEpBL,EAAM,uBAAH,OAA0BnC,GASjC,OARI8B,IACFK,GAAY,cAAH,OAAiBL,IAGxBA,GAAWU,IACbL,GAAY,aAAH,OAAgBL,EAAhB,YAA2BU,IAG/BL,KA1DU,2BAqGJ,WAAiB,IAAhBxN,EAAgB,uDAAP,GACf6E,EAAiB7E,EAAjB6E,aACR,EAAK+H,eAAc,GAEnB7L,YAAQ,4BAA6B,CACnCC,OAAQ,OACRC,KAAMC,KAAKC,UAAU,CACnBkK,MAAOjQ,IAAaiQ,MACpByC,KAAMvS,IAASwS,kBACfC,gBAAiBzS,IAAS6K,oBAAoBxV,GAC9Cqd,MAAO1S,IAAS2S,WAChBC,eAAgB5S,IAAS6S,oBACzBC,cAAe9S,IAAS+S,2BAA4B,EACpDC,KAAM,CAAE1J,gBACRyG,kBAAmBlQ,IAAakQ,kBAChCvI,2BAA4BxH,IAASiT,oCAGtCpN,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAACzE,GACL,GAAoB,uBAAhBA,EAAO8R,KACT,EAAK7B,eAAc,GACnB,EAAK1c,MAAMwe,QAAQC,KAAnB,sCACiCvT,IAAaiQ,aAGzC,GAAsB,aAAlB1O,EAAOiS,OAChB,EAAKhC,eAAc,GACnBvN,OAAOC,SAASuP,KAAOlS,EAAO6Q,SAEzB,GACW,oDAAhB7Q,EAAO8R,KACP,CAEA,IAAQpD,EAAmBjQ,IAAnBiQ,MAAO8B,EAAY/R,IAAZ+R,QAEX2B,EAAcC,mBAAmB,uBAAD,OACX1D,EADW,iCAGpChM,OAAOC,SAASuP,KAAhB,wBAAwCxD,EAAxC,sBAA2D8B,EAA3D,qBAA+EA,EAA/E,wBAAsG2B,QAEjG,GAAInS,EAAOwK,MAAQxK,EAAOwK,KAAK6H,iBAAkB,CACtDC,cACA,EAAKrC,eAAc,GACnB,IAAQvB,EAAUjQ,IAAViQ,MACJ2D,EAAmBrS,EAAOwK,KAAK6H,kBAAoB,GAC/CjM,EAA+BiM,EAA/BjM,2BACFzC,EAAc4O,YAA2B,CAC7C7D,QACAtI,+BAGFqK,IAAoC,CAClC+B,aAAcH,IAEZA,EAAiBI,cACnB,EAAKlf,MAAMwe,QAAQC,KAAnB,gCAAiDrO,IAEjD,EAAKpQ,MAAMwe,QAAQC,KAAnB,qCACgCrO,SAIlC,EAAKsM,eAAc,GACnB,EAAK1c,MAAMwe,QAAQC,KAAnB,sCACiCvT,IAAaiQ,WAIjD9J,OAAM,WACL,EAAKqL,eAAc,GACnB,EAAK1c,MAAMwe,QAAQC,KAAnB,sCACiCvT,IAAaiQ,cA7KjC,0BAkLL,SAACrL,GACb,IAAMqL,EAAQjQ,IAAaiQ,MAE3BtK,YAAQ,yBAAD,OAA0BsK,GAAS,CACxCrK,OAAQ,OACRC,KAAMC,KAAKC,UAAUnB,KAEpBoB,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAACzE,GACL8K,QAAQC,IAAI,UAAW/K,GAElB0S,IAAQ1S,EAAO2S,SAGlB,EAAKpf,MAAMwe,QAAQC,KAAnB,sCACiCvT,IAAaiQ,QAH9ChM,OAAOC,SAASuP,KAAOlS,EAAO2S,WAOjC/N,OAAM,WACL,EAAKqL,eAAc,GACnB,EAAK1c,MAAMwe,QAAQC,KAAnB,sCACiCvT,IAAaiQ,cAxMjC,2BA6MJ,SAACkE,EAAYC,EAAaC,GACvC,OAAO1O,YAAQ,kBAAD,OACMwO,EADN,2BACmCC,EADnC,oBAC0DC,GACtE,CACEzO,OAAQ,YA/MZ,EAAKmM,QAAUN,EAAY6C,gBAFV,EALrB,uCAkEE,WACE,OAAOnU,IAASoU,gBAnEpB,0BAsEE,SAAaC,GACXxC,IAA8BwC,KAvElC,6BA0EE,WACE,IAAMpC,EAAMnO,OAAOC,SAASuP,KACxB7O,EAAS6P,YAAqBrC,GAElC,GAAIxN,EAAO8P,iBACsB,gBAA3B9P,EAAO8P,gBAAmC,CAG5C,IAAIC,EAAY,CACd,CACE1V,IAAK,EACL3H,MAAO,IAAIuI,IAAc4H,EAAY,CACnCjS,GAAI,kBAAF,OALQ,qDAMTsK,WAKPuO,YACE,kBACE2D,IAAoC,CAAE4C,aAAcD,MACtD,QA/FV,oBA2NE,WACE,OACE,kBAAC7C,EAAD,OACMpY,KAAK5E,MADX,CAEE+f,oBAAqBnb,KAAKmb,oBAC1BrD,cAAe9X,KAAK8X,cACpBsD,oBAAqBpb,KAAKob,oBAC1BC,kBAAmBrb,KAAKqb,kBACxBC,mBAAoBtb,KAAKsb,mBACzBT,YAAa7a,KAAK6a,YAClBU,aAAcvb,KAAKub,aACnBP,gBAAiBhb,KAAKgb,gBACtBQ,aAAcxb,KAAKwb,aACnBC,aAAczb,KAAKyb,aACnBC,YAAa1b,KAAK0b,mBAzOnB,EAAP,CAAqBhb,aAArB,kBACqB,CACjBkZ,QAASvd,IAAU+C,SAFvB,I;;;;;6GClCF,uLASauc,EAAkB,CAC7Bxd,KAAM,OACNgS,OAAQ,CACNyL,SAAU,CACRvL,UAAU,EACVM,QAAS,0BACTD,UAAW,IAEbmL,eAAgB,CACdxL,UAAU,EACVM,QAAS,4CACTD,UAAW,GAEbN,IAAK,CACHC,UAAU,EACVM,QAAS,SACTD,UAAW,EACXoL,UAAW,KAWV,SAASC,EAAT,EAA4CC,GAAY,IAAzBC,EAAyB,EAAzBA,UAGpC,IAAK,IAAIxC,KAFTuC,EAAaA,EAAW7X,QAAQ,OAAQ,IAEvB8X,EAAW,CAC1B,IAAI/L,EAAW+L,EAAUxC,GACzB,GACE,IAAIyC,OAAJ,WAAehM,EAASC,OAAOyL,SAASO,WAAxC,MAAuDC,KAAKJ,GAE5D,OAAO9L,EAGX,OAAOyL,EAGT,IAAMU,EACE,OADFA,EAEQ,aAFRA,EAGS,cAHTA,EAIK,UAJLA,EAKE,OALFA,EAMM,WANNA,EAQa,kBAGZ,SAAS5K,EAAsB/E,GACpC,IAAMqB,EAAaC,cACnB,OAAQtB,EAAO8E,SACb,KAAK6K,EACH,OAAO,IAAIlW,IAAc4H,EAAY,CACnCjS,GAAI,yCACHsK,SACL,KAAKiW,EACL,KAAKA,EACH,OAAO,IAAIlW,IAAc4H,EAAY,CACnCjS,GAAI,+CACHsK,SACL,KAAKiW,EACH,OAAO,IAAIlW,IAAc4H,EAAY,CACnCjS,GAAI,4CACHsK,SACL,KAAKiW,EACH,OAAO,IAAIlW,IAAc4H,EAAY,CACnCjS,GAAI,yCACHsK,SACL,KAAKiW,EACH,OAAO,IAAIlW,IAAc4H,EAAY,CACnCjS,GAAI,6CACHsK,SACL,KAAKiW,EACH,OAAO,IAAIlW,IAAc4H,EAAY,CACnCjS,GAAI,oDACHsK,SACL,QACE,OAAOsG,EAAO8E,W;;;;;;;;;;;;;;;;;;;;;;;gaCvFL,SAAS8K,EAAelhB,GACrC,IAAMyV,EAAYzV,EAAMyV,UAExB,OAAKA,EAIH,yBAAKvV,UAAU,oBACb,8BACE,kBAAC,IAAD,CAAcY,KAAK,KAAKZ,UAAU,kBAClC,0BACEkF,KAAK,QACLlF,UAAU,aACVmF,cAAY,oBAEXoQ,KAXA,KAkBXyL,EAAelgB,UAAY,CACzByU,UAAWxU,IAAUC,Q,oDCNvB,SAASigB,EAAcnhB,GACrB,IAAM2S,EAAa/H,qBAAWC,KAE1B5H,EAAQ,IAAI8H,IAAc4H,EAAY,CACxCjS,GAAI,2BACHsK,SACCoW,EAAc,IAAIrW,IAAc4H,EAAY,CAC9CjS,GAAI,uCACHsK,SACCqW,EAAiB,IAAItW,IAAc4H,EAAY,CACjDjS,GAAI,qCACHsK,SAECsW,EAAgBC,cAAgBF,EAAiBpe,EAEjDiI,IAAasW,oBAAsBtW,IAAauW,mBAClDH,EAAgBpW,IAAauW,kBAG3BzhB,EAAMiD,QACRqe,EAAgBthB,EAAMiD,OAGxB,MAAwCrB,mBACtCyJ,IAASwS,mBAAqB3S,IAAawW,cAAgB,IAD7D,WAAOA,EAAP,KAAqBC,EAArB,KAGMC,EAAmBzC,IAAQuC,GAAgBJ,EAAgBI,EAEjE,EAAkC9f,oBAAS,GAA3C,WAAOigB,EAAP,KAAkBC,EAAlB,KACA,EAAkClgB,oBAAS,GAA3C,WAAOmgB,EAAP,KAAkBC,EAAlB,KACA,EAAkCpgB,mBAASggB,GAA3C,WAAOK,EAAP,KAAkBC,EAAlB,KACMC,EAAaC,iBAAO,MAEpBC,EAAoBX,EAAazZ,OAAS,EAEhD1F,qBAAU,WACHsf,GAAc1C,IAAQgD,IACzBA,EAAWG,QAAQC,UAEpB,CAACV,IACJtf,qBAAU,WACJ8f,GACFP,GAAa,KAEd,IACHvf,qBAAU,WACJvC,EAAMwiB,eACRN,EAAaN,KAEd,CAACA,IAEJ,IAAMvO,EAAiBnI,IAAauX,mBAgDpC,OACE,yBAAKviB,UAAU,mBACb,yBACEA,UAAS,UACPwiB,cAAmB,sBAAwB,wBAG5Cb,EACC,2BAAOc,QAAQ,OAAO5hB,QAtDV,WAClByM,YAAeC,IAAUmV,SAAU,CACjCC,UAAWH,cACPI,aAAWC,uCACX,KAENjB,GAAa,KAiDL,uBACEkB,iBAAgB,IAChBliB,KAAK,KACLqE,MAAO,CAAEf,MAAO,UAAWsD,WAAY,SACvCH,SAAUvH,EAAMwiB,gBAAiB,EACjCS,WAAW,YAEVhB,GAEH,uBAAU/hB,UAAU,kBAAkBgjB,cAAY,QAC/CjB,IAIL,yBAAK/hB,UAAU,aACb,uBACEQ,GAAG,OACHwC,KAAK,OACLigB,QAAS,EACTC,QAAS,EACT5gB,MAAOkf,EACP2B,sBAAoB,EACpBhO,UApIS,IAqITiO,cArIS,IAsITngB,SAhDW,SAAC0F,GACtB,IAAMrG,EAAQqG,EAAMvF,OAAOd,MAC3Bmf,EAAgBnf,GAEZA,GAASA,EAAMyF,QA1FA,KA2FjBsb,YAAS,aAAc,CAAC,WAAY,UACpChK,YAAW,WACTiK,YAAY,aAAc,CAAC,WAAY,YACtC,KAfLxB,GAAa,IAIbA,GAAa,IAoDHxM,OAvEO,SAAC3M,GAClB,IAAM+U,EAAO/U,EAAMvF,OAAOd,MAGrB2c,IAAQvB,IAAUuB,IAAQvB,EAAK6F,SAIlCxX,IAAsB,CAAE2R,KAAM,KAC9BsE,EAAaZ,GACbQ,GAAa,KALb7V,IAAsB,CAAE2R,SACxBsE,EAAatE,KAkELpF,IAAK2J,EACL1M,UAAWsM,EAAYX,EAAc,KACrCne,MAAOqe,EACP5L,IAAKrC,KAKV0O,GAAaF,GAAa,kBAACX,EAAD,CAAgBzL,UAAW2L,MAM9DD,EAAcngB,UAAY,CACxBiC,MAAOhC,IAAUC,OACjBshB,cAAevhB,IAAUE,MAGZggB,O;;;;;yaCrKTuC,EAAoB,YAIpB,IAHJC,EAGI,EAHJA,QACAC,EAEI,EAFJA,YACAC,EACI,EADJA,8BAuBA,OArBAthB,qBAAU,WACRwM,YAAWC,IAAS8U,aACnB,IAoBD,yBACE5jB,UAAS,qCACPyjB,WAASI,QAAU,eAAiB,KAGtC,uBACE7jB,UAAU,qBACVQ,GAAG,qBACH2E,cAAY,qBACZnC,KAAK,oBACLD,MAAO0gB,aAAF,EAAEA,EAAS1gB,MAChBT,MAAOohB,EACPzgB,SA9Be,SAAC0F,GACpB,IAAMtH,EAAYsH,EAAMvF,OAAOvB,QAC7BiiB,EAAiBziB,EAAY,UAAY,YAE3C0K,IAAiC,CAC/BgY,gBAAiBD,IAGnBH,EAA8BtiB,IAuB1BQ,QAAS6hB,EACTM,WACEP,aAAA,EAAAA,EAASI,UACP,uBACE7gB,KAAK,6BACLihB,YAAaR,aAAF,EAAEA,EAASI,QACtBK,OA1Ba,WACvB5W,YAAeC,IAAU4W,kBAAmB,CAC1CxB,UAAWC,aAAWwB,gDAiC5BZ,EAAkB1iB,UAAY,CAC5B2iB,QAAS1iB,IAAU+C,OACnB4f,YAAa3iB,IAAUE,KACvB0iB,8BAA+B5iB,IAAUG,MAG5BsiB,O;;;;;oFCrEbxb,SAASkL,qBAAqB,QAAQ,GAAGmR,aAAa,iBAAiB,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;q9FCKnEC,E,0HACJ,WACE,OACE,uBACEC,SAAO,EACPvkB,UAAU,uBACVQ,GAAG,YACH6G,SAAU3C,KAAK5E,MAAMuH,SACrBxG,QAAS6D,KAAK5E,MAAM0kB,YAEpB,yBACE9jB,KCfwB0c,EDeD,6CCdvB,WAAUlO,IAASuV,mBAAmBrH,KDetCnY,MAAO,CAAE2B,OAAQ,OAAQf,MAAO,OAAQrB,YAAa,SAEvD,kBAAC,IAAD,CAAShE,GAAG,mCClBc4c,U,GDIA/S,IAAMjF,WAoBxCkf,EAAoBxjB,UAAY,CAC9BiC,MAAOhC,IAAUC,OACjBqG,SAAUtG,IAAUE,KACpBujB,WAAYzjB,IAAUG,MAGTojB,Q,ibE3BTI,E,0HACJ,WACE,OACE,uBACE1kB,UAAU,WACVQ,GAAG,YACH6G,SAAU3C,KAAK5E,MAAMuH,SACrBxG,QAAS6D,KAAK5E,MAAM0kB,YAEpB,kBAAC,IAAD,CAAShkB,GAAG,qC,GATa6J,IAAMjF,WAevCsf,EAAmB5jB,UAAY,CAC7BiC,MAAOhC,IAAUC,OACjBqG,SAAUtG,IAAUE,KACpBujB,WAAYzjB,IAAUG,MAGTwjB,Q,qdCnBTC,E,qIACJ,WACE9V,YAAWC,IAAS8V,S,oBAGtB,WACE,OACE,uBACEC,WAAS,EACT7kB,UAAU,WACVQ,GAAG,eACH6G,SAAU3C,KAAK5E,MAAMuH,SACrBxG,QAAS6D,KAAK5E,MAAMglB,aAEpB,kBAAC,IAAD,CAAStkB,GAAG,+C,GAdM6J,IAAMjF,WAoBhCuf,EAAY7jB,UAAY,CACtBiC,MAAOhC,IAAUC,OACjBqG,SAAUtG,IAAUE,KACpB6jB,YAAa/jB,IAAUG,MAGVyjB,Q,sLC7BA,SAASI,GAAT,GAA4C,IAAnBhlB,EAAmB,EAAnBA,QAASqC,EAAU,EAAVA,OAC/C,OACE,wBAAOS,KAAK,OAAO7C,UAAU,kBAC3B,2BACE,kBAAC,KAAD,CACEQ,GAAG,yCACHT,QAASA,EACTqC,OAAQA,MAOlB2iB,GAAcjkB,UAAY,CACxBf,QAASgB,IAAUC,OACnBoB,OAAQrB,IAAUC,Q,4cCCpB,IAAMgkB,GAAU5S,IAAa6S,aAAe7S,IAAa6S,aAAe,GAClEC,GAAQC,cACVC,IAAa,EAEXhmB,GAASC,IAAWC,OAAO,CAC/B+lB,QAAS,GACTC,SAAU,CACR1f,QAAS,OACT2f,eAAgB,UAElBC,YAAa,CACX5f,QAAS,eACTrB,SAAU,WACV9E,OAAQ,IACRgmB,cAAe,QAEjBC,iBAAkB,CAChB7f,MAAO,OACPtB,SAAU,WACVqC,OAAQ,IACRjH,WAAY,KAEdgmB,mBAAoB,CAClBC,UAAWV,GAAQ,YAAc,aACjCte,OAAQ,IACRf,MAAO,IACP2B,YAAa,IAEfqe,gBAAiB,CACfhgB,MAAO,OACPJ,QAAS,GACTqgB,aAAc,OACdzhB,SAAU,GACV0hB,aAAc,GAEhBC,WAAY,CACVC,WAAY,cACZ/hB,MAAO,WAETgiB,QAAS,CACP3hB,SAAU,WACVwC,aAAc,iBACdI,UAAW,SACX1H,OAAQ,YAEV0mB,eAAgB,CACd5hB,SAAU,WACV4C,UAAW,SACXif,gBAAiB,OACjBxgB,QAAS,eACTnG,OAAQ,EACRkH,IAAK,EACLlB,QAAS,SACTpB,SAAU,IAEZgiB,iBAAkB,CAChBzgB,QAAS,OACT0gB,WAAY,YAIVC,G,iCACJ,WAAYzmB,GAAO,kBACjB,cAAMA,GADW,gCAUC,WAClB,EAAK0mB,gBAAkBjY,IAAcC,UAAS,SAACC,GAC7C,GAAIA,EAAQC,QAAwC,kBAA9BD,EAAQC,OAAOC,WAAgC,CACnE,MAAuDF,EAA/CC,OAAR,gBAAgD,GAAhD,GAAkBE,KAAlB,gBAAyC,GAAzC,GAA0BxM,cAA1B,MAAmC,EAAnC,EACA,EAAKqkB,aAAarkB,OAItByM,YAAWC,IAAS4X,cAlBH,mCAqBI,WACrBtB,GAAa,EAAKtlB,MAAM6mB,SACxBpY,IAAcS,WAAW,EAAKwX,oBAvBb,2BAgEJ,SAAClkB,GACd,IAAMH,EAAWgJ,IAASoI,mBAAqB,GAC/C,EAAK1L,SAAS,CAAE+e,eAAgBC,aAAa,CAAE1kB,WAAUG,eAlExC,2BAqEJ,SAAC4F,GACd,IAAM4e,EAAa,EAAKpjB,MAAlBojB,SACFzlB,EAAY6G,EAAG9E,OAAOvB,QACtBklB,EAAc1lB,EAAY,UAAY,YAE1C,EAAK2lB,cAAc3lB,GAEnB0K,IAA2B,CACzBkb,UAAWF,IAGbzZ,aAAeC,IAAU2Z,mBAAoB,CAC3CzZ,eAAgB,OACbC,IAAUyZ,SAAWJ,KAI1B,EAAKjnB,MAAMsnB,aAAa/lB,GAExB,EAAKwG,SAAS,CAAEif,SAAWA,GAAYA,OAxFtB,2BA2FJ,SAACrD,GACd,MAAO,CAAE4D,OAAQ5D,MA1FjB,IAAMrhB,EAAS+I,IAASE,qBAAuB,GACzClJ,EAAWgJ,IAASoI,mBAAqB,GAH9B,OAIjB,EAAK7P,MAAQ,CACXojB,SAAU,EAAKhnB,MAAM0e,OACrBoI,eAAgBC,aAAa,CAAE1kB,SAAUA,EAAUG,MAAOF,KAN3C,E,yCA0BnB,SAAcwD,GAAS,WAChBA,GAGL0hB,eAAgBtW,MAAK,WAInB,IAAI,EAAKtN,MAAM6jB,YAAf,CAGA,IAAMC,EAAgBvY,OAAOwY,oBACvBC,EAAmBzY,OAAO0Y,UAC3BD,GAAqBF,IAG1B,EAAK3f,SAAS,CACZ0f,aAAa,IAGfG,EAAiBV,cAAc,CAE7BxhB,UAAWwC,SAASC,eAAe,sBACnC2f,SAAU,MACVC,KAAM,EACNC,UAAU,EACVN,kBAGFnO,YAAW,WACTqO,EAAiBK,UACjB,EAAKlgB,SAAS,CACZ0f,aAAa,MAEd,Y,oBAmCP,WACE,IAAM1lB,EAAU,CAAEA,SAAS,GACvB6C,KAAK5E,MAAM0e,SACb3c,EAAQA,SAAU,GAEpB,IAAM4Q,EAAa/N,KAAKiS,QACxB,OACE,2BACE,yBACE3W,UAAU,0BACVQ,GAAG,8BAEH,2BACE,yBAAKR,UAAU,aACZolB,GACC,6BACE,8BACG,IAAIva,KAAc4H,EAAY,CAC7BjS,GAAI,0CACHsK,WAIP,6BACE,yBAAK9K,UAAWS,YAAIrB,GAAOomB,cACzB,yBACExlB,UAAWS,YAAIrB,GAAOsmB,kBACtBllB,GAAG,mBACHyE,MAAO,CACLW,QAASlB,KAAKhB,MAAM6jB,YAAc,QAAU,SAG9C,yBACEvnB,UAAWS,YAAIrB,GAAOumB,oBACtBnlB,GAAG,wBAGP,yBAAKR,UAAWS,YAAIrB,GAAOinB,mBACzB,2BACErmB,UAAU,eACV+C,MAAO,IAAI8H,KAAc4H,EAAY,CACnCjS,GAAI,iDACHsK,SACH9H,KAAK,oBACLxC,GAAG,oBACHyC,SAAUyB,KAAK0iB,aACf9kB,MAAOoC,KAAK5E,MAAM0e,QACd3c,SAQjB6C,KAAK5E,MAAM0e,SAAW4G,IACrB,2BACE,kBAACL,GAAD,CACEhlB,QAASioB,aAAgBhD,IACzB5iB,OAAQsC,KAAKhB,MAAMkjB,wB,GA3JHvc,IAAMjF,WAoKtCmhB,GAAkB3P,YAAcjM,IAEhC4b,GAAkBzlB,UAAY,CAC5BsmB,aAAcrmB,IAAUG,KACxBsd,OAAQzd,IAAUE,KAClB0lB,SAAU5lB,IAAUE,MAGtBslB,GAAkB0B,aAAe,CAC/Bb,aAAc,cAGDb,U,mPCxPT2B,GAAW,YAAkC,IAA/BC,EAA+B,EAA/BA,aAAcC,EAAiB,EAAjBA,WAC1B3V,EAAa/H,qBAAWC,KAC9B,EAAwCjJ,mBAAS,IAAjD,YAAO2mB,EAAP,KAAwBC,EAAxB,KACMC,EAAqB,IAAI1d,KAAc4H,EAAY,CACvDjS,GAAI,sCAIF2nB,IAAiBK,MAAMC,QAAQN,KACjCA,EAAe,CAACA,IAGlB,IAAMO,EAAoB,WACxB,IAAMC,EAAU,GAQhB,OAPAR,EAAaS,SAAQ,SAACC,GACpBF,EAAQpK,KAAK,CACXuK,YAAaD,EACbvmB,MAAOumB,OAIJF,GAmCT,OAnBAtmB,qBAAU,WACJ+lB,GACFE,EAAaH,EAAa,MAE3B,CAACrX,KAAKC,UAAUoX,KAEnB9lB,qBAAU,WACR,IAAI+lB,EAAJ,CAIA,IAAIW,EAAgBL,IAAoBM,WACtC,SAACC,GAAD,OAAaA,EAAQH,cAAgBI,IAASC,wBAGhDb,EAAaH,EADbY,GAAmC,IAAnBA,EAAuB,EAAIA,IAE3Chd,IAAiCoc,EAAaY,OAC7C,IAGD,kBAAC,KAAD,CACEvoB,GAAG,WACHR,UAAU,mBACV+C,MAAOwlB,EAAmBzd,SAC1B3F,cAAY,qBACZwjB,QAASD,IACTpmB,MAAO+lB,EACPplB,SAxCoB,SAAC0F,GACvB,IACYrG,EACRqG,EADFvF,OAAUd,MAEZgmB,EAAahmB,GACbyJ,IAAiCzJ,GACjCgL,aAAeC,IAAU6b,iBAAkB,CACzC3b,eAAgB,OACbC,IAAU2b,SAAW/mB,MAiCxB+E,SAAU+gB,IAAc,KAK9BF,GAASpnB,UAAY,CACnBqnB,aAAcpnB,IAAUuJ,MACxB8d,WAAYrnB,IAAUE,MAGTinB,U,qdCtEf,IAAMlD,GAAU5S,IAAa6S,aAAe7S,IAAa6S,aAAe,GAC3DqE,GAAb,4MACgB,WACZ,EAAKxpB,MAAMypB,2BAFf,kCAKwB,WACpB,EAAKzpB,MAAM0pB,2BANf,yBASe,WACX,EAAK1pB,MAAM2pB,gBAVf,oCAaE,WACE,IAAIC,EAAoB,WAExB,OAAQhlB,KAAK5E,MAAM6S,4BACjB,IAAK,OACH+W,EAAoB,eACpB,MACF,IAAK,OACHA,EAAoB,eACpB,MACF,QACEA,EAAoB,WAIxB,IAGMC,EAHiB,IAAI9e,KAAcnG,KAAKiS,QAAS,CACrDnW,GAAI,gCAAF,OAAkCkpB,KAEN5e,OAAO,CACrC/K,QAASioB,aAAgBhD,MAG3B,OACE,wBACE/K,WAAS,EACT2P,QAAM,EACNlb,OACEmb,eAAgB,kBAACC,GAAA,EAAD,CAAYjpB,QAAS6D,KAAKqlB,cAAkB,KAE9DC,cAAeH,eACf1pB,OAAQuE,KAAK5E,MAAMK,OACnBC,QAASsE,KAAKqlB,YACdxpB,wBAAwB,EACxBP,UAAU,6BACViqB,mBAAkB,UAChBJ,eAAgB,4BAA8B,KAGhD,yBAAK7pB,UAAU,cACb,6BACE,2BACE,2BACE,yBAAKA,UAAU,kBACb,yBACEU,IAAKC,aACH,uDAEF6B,IAAI,mBAKZ,2BACE,2BACE,uBAAa5B,KAAK,MAChB,kBAAC,IAAD,CAASJ,GAAG,iDAKlB,2BACE,2BACE,yBAAKR,UAAU,WACb,yBAAKA,UAAU,eACb,yBAAKA,UAAU,eAAf,KACA,uBAAUA,UAAU,eAClB,kBAAC,IAAD,CAASQ,GAAG,wDAGhB,yBAAKR,UAAU,eACb,yBAAKA,UAAU,eAAf,KACA,uBAAUA,UAAU,eAAe2pB,IAErC,yBAAK3pB,UAAU,eACb,yBAAKA,UAAU,eAAf,KACA,uBAAUA,UAAU,eAClB,kBAAC,IAAD,CAASQ,GAAG,+CAOtB,yBAAKR,UAAU,WACb,uBAAKA,UAAU,SACb,2BACE,uBAAQA,UAAU,WAAWa,QAAS6D,KAAK5E,MAAM2pB,YAC/C,kBAAC,IAAD,CAASjpB,GAAG,gDAKlB,2BACE,2BACE,uBACEqkB,WAAS,EACT7kB,UAAU,WACVQ,GAAG,WACHK,QAAS6D,KAAKwlB,qBAEd,kBAAC,IAAD,CAAS1pB,GAAG,wDAjHhC,GAAsC4E,aA4HtCkkB,GAAiB1S,YAAcjM,IAC/B2e,GAAiBxoB,UAAY,CAC3ByoB,sBAAuBxoB,IAAUG,KACjCsoB,sBAAuBzoB,IAAUG,KACjCuoB,WAAY1oB,IAAUG,KACtBf,OAAQY,IAAUE,KAClB0R,2BAA4B5R,IAAUC,QAGzBsoB,U,qCC9ITlqB,GAASC,cAAWC,OAAO,CAC/B6qB,kBAAmB,CACjB3qB,SAAU,IACVC,OAAQ,QAEV2qB,WAAY,CACV3qB,OAAQ,QAEV4qB,sBAAuB,CACrB1qB,UAAW,GACXuE,MAAO,UACPiD,UAAW,YAIA,SAASmjB,KACtB,IACIC,EADJ,EAA4B7oB,wBAAS2N,GAArC,YAAOmb,EAAP,KAAeC,EAAf,KAmBA,OANApoB,qBAAU,WAER,OAZAkoB,EAAqBhc,IAAcC,UAAS,SAACC,GAEzCA,EAAQC,QACRD,EAAQC,OAAOC,aAAe+b,uBAE9BD,EAAUhc,EAAQC,OAAOE,SAOtB,WACLL,IAAcS,WAAWub,MAE1B,IACCC,QAAqBnb,IAAXmb,EAA6B,KAEzC,yBAAKxqB,UAAS,WAAMS,eAAIrB,GAAO+qB,qBAC7B,uBAAanqB,UAAS,WAAMS,eAAIrB,GAAOirB,yBACrC,kBAAC,IAAD,CAAS7pB,GAAG,oD,8BCtCdmqB,GAAmB,YAKnB,IAJJC,EAII,EAJJA,qBACAlH,EAGI,EAHJA,YACAmH,EAEI,EAFJA,kBACAzC,EACI,EADJA,WAiBA,OAJA/lB,qBAAU,WACRwM,YAAWC,IAASgc,OACnB,IAGD,wBACE9qB,UAAU,4CACVQ,GAAG,qBACH2E,cAAY,qBACZnC,KAAK,WACL+nB,iBACE,kBAAC,KAAD,CACEvqB,GAAG,yBACH4B,OAAQyoB,IAGZvoB,MAAOohB,EACPzgB,SA5BiB,SAAC0F,GACpB,IAAMtH,EAAYsH,EAAMvF,OAAOvB,QAC7BiiB,EAAiBziB,EAAY,UAAY,YAE3C0K,IAA0B,CACxBif,SAAUlH,IAGZ8G,EAAqBvpB,IAqBnBQ,QAAS6hB,EACTrc,SAAU+gB,IAAc,KAK9BuC,GAAiB7pB,UAAY,CAC3B8pB,qBAAsB7pB,IAAUG,KAChCwiB,YAAa3iB,IAAUE,KACvB4pB,kBAAmB9pB,IAAUC,OAC7BonB,WAAYrnB,IAAUE,MAGT0pB,U,iiBCoDf,IAEMM,G,iCACJ,WAAYnrB,GAAmB,oBAC7B,cAAMA,GADuB,gCA0CX,WAClBmP,OAAOic,OAAS,WACd7R,YAAW,WACT8R,KAAmBC,IAAcC,gBAChC,IAGLtf,IAA6B,CAAEuf,YAAa,YAGT,aAA/BtgB,IAAaugB,eACf9U,cAIsC,YAApCtL,IAASkJ,wBACX,EAAKxM,SAAS,CAAE2jB,iBAAiB,IAI/Btf,iBACF,EAAKrE,SAAS,CAAEoG,qBAAqB,IACrCwd,gBAGFha,eACA,EAAKC,kBAELga,aAAmB,CAAEC,mBAAoB,EAAKC,mBAG1C5gB,IAAa6gB,kBACfC,eAAgB9a,MAAK,WACnBsW,kBAICyE,gBACHhgB,KAAgC,GAIlC,EAAKigB,mCApFwB,4CA2FC,WAC9B,EAAKzB,mBAAqBhc,IAAcC,UAAS,SAACC,GAChD,GAAIA,EAAQC,QAAwC,qBAA9BD,EAAQC,OAAOC,WAAmC,CACtE,IAAM9M,EAAUoU,KAAKxH,EAAQC,OAAQ,OAAQ,aAC7C,EAAK7G,SAAS,CACZ2jB,gBAA6B,YAAZ3pB,WAhGM,yBAsGlB,WACX,MAAO,CACLO,OAAQ+I,IAASE,oBACjBgT,KAAMlT,IAASoI,kBACf5L,OAAQwD,IAASuI,wBA1GU,mDA8GQ,WACrC,IAAIrO,EAAiB8F,IAASE,oBAE1B4gB,KAAoC5mB,IACtC6mB,aAAyB,CACvBP,mBAAoB,EAAKC,iBACzBrR,SAAU,CACR4R,aAAc,EAAKzoB,MAAM8nB,gBAAkB,KAAO,MAClDY,SAAU,EAAK1oB,MAAM2oB,gBAAkB,SAAW,UAGtD,EAAKvsB,MAAMwe,QAAQC,KAAnB,8BAA+CvT,IAAaiQ,SAE5DqR,iBA3H2B,0BA+HjB,SAAC3jB,GACbA,EAAM4jB,iBACNxgB,IAAsC,CACpCygB,qBAAsB,cAExB,IAAInnB,EAAiB,EAAKgG,oBACrB,EAAKmH,2BAINyZ,KAAoC5mB,KACX,EAAK3B,MAAM8nB,kBAEX,EAAK9nB,MAAM+oB,gBACpC,EAAKC,uBAEL,EAAKC,uCAIP1d,OAAO2d,OAAOC,UAAUC,iBAAiB,CACvCC,KAAM,2DACNre,OAAQ,oBACRse,OAAQ,YACRC,OAAQ,mBAvJiB,yBA4JlB,SAACtkB,GAEZ,GADAA,EAAM4jB,iBACD,EAAK/Z,yBAAV,CAIA,IAAInN,EAAiB,EAAKgG,oBACtB4gB,KAAoC5mB,KACtC6nB,aAA2B,CACzBvB,mBAAoB,EAAKC,iBACzBrR,SAAU,CACR4R,aAAc,EAAKzoB,MAAM8nB,gBAAkB,KAAO,MAClDY,SAAU,EAAK1oB,MAAM2oB,gBAAkB,SAAW,UAGtDc,mBA3K2B,oCA+KP,SAACxkB,GAEvB,GADAA,EAAM4jB,iBACD,EAAK/Z,yBAAV,CAIA4a,aAA0B,CAAEzB,mBAAoB,EAAKC,mBACrDrO,cACA,IAAM8P,EAAcC,eACpB,EAAKxtB,MAAMsgB,YAAYiN,OAxLM,gCA2LX,WAClB,IAAIhoB,EAAiB8F,IAASE,oBAE9B,GAAIa,eAAmB,CACrB,IAAMqhB,EAAYpiB,IAASqiB,eAE3BzhB,IAAiC,CAAEC,gBAAiB3G,IAEhDkoB,IACFloB,EAAiBooB,aAAsBpoB,EAAgBkoB,GACvDG,aAAqBroB,IAIzB,OAAOA,KAzMsB,kCA4MT,WACpB,EAAKwC,SAAS,CACZqF,qBAAqB,OA9MM,qCAkNN,WAAM,QACzBygB,EACF1B,KAA0C,iBAC5C,iBAAI0B,SAAJ,OAAI,EAAkBzgB,qBAOtB,UADAygB,EAAmB1B,cACnB,OAAI,EAAkB/e,qBANpB,EAAKrF,SAAS8lB,GACdrB,eACO,IAUT,EAAKzkB,SAAS8lB,IACP,MAnOsB,gCAsOX,WACd,EAAKjqB,MAAMwJ,qBACb,EAAKpB,yBAxOsB,qCA4ON,WAAoB,IAAnB0S,EAAmB,wDAC3C,EAAK3W,SAAS,CAAE+lB,eAAgBpP,OA7OH,oCAgPP,WAAoB,IAAnBA,EAAmB,wDAC1C,EAAK3W,SAAS,CAAE2jB,gBAAiBhN,OAjPJ,6CAoPE,WAC/B,EAAK3W,SAAS,CAAEgmB,YAAY,IAC5B,EAAKlB,0CAtPwB,wDAyPa,WAC1C5gB,IAA2B,CACzBkb,UAAW,cAEb,EAAK0F,0CA7PwB,4CAgQC,WAAoB,IAAnBnO,EAAmB,wDAClD,EAAK3W,SAAS,CAAEimB,qBAAsBtP,IACtCuP,aAA4BvP,MAlQC,mCAqQR,WAAoB,IAAnBA,EAAmB,wDACzC,EAAK3W,SAAS,CAAEoG,oBAAqBuQ,IACrCwP,aAA2BxP,MAvQE,8BA0Qb,WAChB,EAAK3W,SAAS,CACZ0lB,UAAWpiB,IAASqiB,eACpB3C,kBAAmB1f,IAAS8iB,4BA7QD,mCAiRR,WACrB,EAAKpmB,SAAS,CACZqmB,wBAAwB,OAnRG,oCAuRP,WACtB,EAAKrmB,SAAS,CACZqmB,wBAAwB,OAzRG,qCA6RN,WACvB,OAAIC,eAAwB7X,KAAS,EAAK5S,MAAMykB,cACvC,KAGF,kBAAC,GAAD,CAAUA,aAAc,EAAKzkB,MAAMykB,kBAlSb,+BAqSZ,WACjB,GACE,EAAKzkB,MAAM0qB,+BAET,aADF,EAAK1qB,MAAM0qB,8BAA8B,EAAK1qB,MAAM2qB,gBAGpD,OAAO,KAET,IAAIC,EAAkB,KACtB,OACE,EAAK5qB,MAAM0qB,+BACX,EAAK1qB,MAAM0qB,8BAA8B,EAAK1qB,MAAM2qB,iBAEpD,IAAK,OACHC,EAAkB,gBAClB,MACF,IAAK,QACHA,EAAkB,iBAClB,MACF,IAAK,OACHA,EAAkB,gBAClB,MACF,QACEA,EAAkB,KAItB,GAAIA,EAAiB,CACnB,IAAIC,EAAc,EAEhBA,EADE,EAAK7qB,MAAMuK,qBAEVxB,OAAOtB,IAASE,uBAChB3I,aAAgByI,IAASqiB,iBAEb/gB,OAAOtB,IAASE,qBAGjC,IAAMmjB,EAAuB3H,aAAa,CACxC1kB,SAAU6I,IAAa9I,aACvBI,MAAOisB,IAGT,OACE,uBAAavuB,UAAU,sBACrB,kBAAC,KAAD,CACEQ,GAAE,uCAAkC8tB,GACpCvuB,QAAS,EAAK2D,MAAM+qB,eACpBrsB,OAAQosB,KAKhB,OAAO,QAzVsB,kCA4VT,WACpB,OAAIE,eAEA,kBAAC,EAAD,CACErnB,UAAU,EACVmd,WAAY,EAAKmK,wBAKnB,EAAKjrB,MAAMkrB,gBAEX,kBAAC,EAAD,CACEvnB,SAAU,EAAK3D,MAAMkqB,eACrBpJ,WAAY,EAAKA,aAMrB,6BACE,yBAAKxkB,UAAU,SACb,kBAAC,EAAD,CACEqH,SAAU,EAAK3D,MAAMkqB,eACrBpJ,WAAY,EAAKA,cAGrB,kBAAC,EAAD,CACEnd,SAAU,EAAK3D,MAAMkqB,eACrB9I,YAAa,EAAKA,kBAzXK,6BAoYd,WACf,IAAM+J,EACJ7jB,IAAasW,qBACZ,EAAK5d,MAAM8nB,iBACZhJ,eAMF,OAJIqM,GACFhgB,YAAWC,IAASggB,cAGfD,KA9YsB,qCAiZN,WACvB,GAAIrM,eAAkB,CACpB,IAAMuM,EAAuBC,aAC3BC,0BAEF,OAAOF,aAAP,EAAOA,EAAsB3E,eAtZF,oCAoaP,WACtB,IAAM8E,EAAelkB,IAAamkB,2BAA6B,IAE/D,MACqB,aAFEnkB,IAAaokB,iBAGjCF,IAAiBlkB,IAAaqkB,wBAzaJ,uCA6aJ,WACzB,IAAMH,EAAelkB,IAAamkB,2BAA6B,IAE/D,MACqB,aAFEnkB,IAAaokB,kBAG/BpkB,IAAaskB,iBAAoC,MAAjBJ,GACA,KAAjClkB,IAAaskB,oBAnbY,iCAubV,SAACrX,EAAGsX,GACvB,IAAI5c,EAA6B,GACjC,OAAQ,EAAKjP,MAAM0qB,8BAA8BmB,IAC/C,IAAK,WACH5c,EAA6B,KAC7B,MACF,IAAK,OACHA,EAA6B,OAC7B,MACF,IAAK,QACHA,EAA6B,QAC7B,MACF,IAAK,OACHA,EAA6B,OAGjC5G,IAA4C,CAAE4G,+BACW,aAArD,EAAKjP,MAAM0qB,8BAA8BmB,GAC3CxjB,IAA2B,CACzBkb,UAAW,eAGblb,IAA2B,CACzBkb,UAAW,YAEb,EAAKuI,uBAAsB,IAE7B,EAAK3nB,SAAS,CAAEwmB,eAAgBkB,IAChCE,kBAjdA,IAAM/L,EAAcvY,IAAS+C,yBACvBwhB,EAAyBvkB,IAASwkB,qBAClC7B,EAAwB7O,KAAQyQ,GAElC1kB,IAAa+Y,kBAAmB,EADL,YAA3B2L,EALyB,OAQ7B,EAAKhsB,MAAQ,CACXksB,QAAS5kB,IAAa4kB,QACtBnB,eAAgBzjB,IAAaia,aAC7BllB,QAASiL,IAAa6kB,YACtBC,WAAY9kB,IAAa8kB,WACzBC,iBAAkB/kB,IAAa+kB,iBAC/BnC,gBAAgB,EAChB/B,iBAAkB7gB,IAAa6gB,iBAC/BL,gBAAkD,YAAjCxgB,IAAawgB,gBAC9B4C,8BAA+BpjB,IAAaojB,8BAC5C4B,kBAAmB,GACnBC,eAAgB,+BAChBpC,YAAY,EACZe,gBAAiBsB,eACjBzD,gBAAiBzhB,IAAayhB,gBAC9BtE,cACE,UAAAnd,IAAamlB,qBAAb,eAA4BC,gBAAiBplB,IAAamd,aAC5D+F,wBAAwB,EACxBmC,cAAerlB,IAAaqlB,cAC5BC,aAActlB,IAAaslB,aAC3BjE,gBAAiBrhB,IAAaqhB,gBAC9Bpe,yBACkBoB,IAAhBqU,EACoB,YAAhBA,EAC0B,aAA1B1Y,IAAaulB,SACnBhD,UAAW,GACX1C,kBAAmB,GACnB2F,iBAAkBxlB,IAAawlB,iBAC/B1C,uBACA2C,cAAeC,aAAwBzB,0BACvCZ,eAAgB,GAtCW,E,gDAuF/B,WACE9f,IAAcS,WAAWtK,KAAK6lB,sB,0BAkUhC,WACE,OAAOoG,KAAW,CAChBC,kBAAmB5lB,IAAa6lB,UAChCC,gBAAiB9lB,IAAa6lB,UAC9BE,mBAAoBlH,eACpB,cAAemH,eACfC,YAAaC,mB,oBAsDjB,WAAS,aACDC,EAAiBH,eACjBI,EAAkB1sB,KAAK2sB,wBACvBC,EAAqB5sB,KAAK6sB,2BAC1B9e,EAAaC,eACb0b,GACJ,UAAA1pB,KAAKhB,MAAM0qB,qCAAX,eAA0CrkB,KAAI,SAACynB,GAC7C,OAAQA,GACN,IAAK,WACH,OAAO,IAAI3mB,KAAc4H,EAAY,CACnCjS,GAAI,mDACHsK,SACL,IAAK,OACH,OAAO,IAAID,KAAc4H,EAAY,CACnCjS,GAAI,kDACHsK,SACL,IAAK,OACH,OAAO,IAAID,KAAc4H,EAAY,CACnCjS,GAAI,kDACHsK,SACL,QACE,OAAO,IAAID,KAAc4H,EAAY,CACnCjS,GAAI,mDACHsK,eAEH,GAER,OAAKE,IAAaymB,wBAgBhB,6BACE,yBAAKzxB,UAAW0E,KAAKgtB,iBAClBP,GAAmBG,GAAuBF,EAEvC,KADF,kBAACO,GAAA,EAAD,CAAmBC,YAAa5mB,IAAa4mB,cAE9CpP,gBAAoB,kBAACqP,GAAA,EAAD,CAAaC,SAAO,IACzC,kBAACC,GAAA,EAAD,CAAcC,WAAW,IACvB,WAAM,MACN,QAAQ,GACN,KAAKZ,EACH,OACE,uBACExwB,KAAK,KACLZ,UAAU,gCAEV,kBAAC,IAAD,CAASQ,GAAG,mCAGlB,KAAK8wB,EACH,OACE,uBAAUtxB,UAAU,gCAClB,kBAAC,IAAD,CAASQ,GAAG,sCAGlB,QACE,OACE,yBACER,UAAW2wB,KAAW,CACpBnrB,WAAW,EACXysB,UAAW5Q,kBAGZ+M,GACCA,EAA8BrmB,OAAS,GACrC,uBACE/E,KAAK,aACLqrB,eAAgB,EAAK3qB,MAAM2qB,eAC3B6D,KAAM9D,EAA8BrkB,KAAI,SAACooB,GAAD,MAAa,CACnDpvB,MAAOovB,EACP3xB,GAAI,GAAF,OAAK2xB,EAAL,OACFC,QAAS,GAAF,OAAKD,EAAL,gBAETtxB,QAAS,EAAKwxB,mBACdryB,UAAU,qBAETouB,EAA8BrkB,KAAI,SAACooB,GAAD,OACjC,uBACE3xB,GAAE,UAAK2xB,EAAL,YACFG,MAAK,UAAKH,EAAL,OACLloB,IAAG,UAAKkoB,EAAL,kBAMb,kBAAC,IAAD,CACE3hB,iBAAkB,EAAK+hB,uBACvB/f,uBAAwB,EAAKA,uBAC7BtF,oBAAqB,EAAKxJ,MAAMwJ,oBAChCpB,oBAAqB,EAAKA,oBAC1BqB,uBAAwB,EAAKzJ,MAAMyJ,uBACnCiB,oBAAqB,EAAK1K,MAAM0K,oBAChCvE,QAAS,EAAKjB,kBACd8I,gBAAiB,EAAKA,kBAEvB,EAAK8gB,0BACJnR,gBAAiB,EAAK3d,MAAM8sB,kBAC5B,kBAAC,KAAD,CACE/M,QAASgP,eACT/O,YAAa,EAAKhgB,MAAMoqB,qBACxBnK,8BACE,EAAKA,gCAIV,EAAKiI,kBACJ,kBAAC,KAAD,CACE7oB,MAAO2vB,iBAGV,EAAKhvB,MAAM2oB,iBACV,kBAAC,GAAD,CACEzB,qBAAsB,EAAKA,qBAC3BlH,YAAa,EAAKhgB,MAAMuK,oBACxB4c,kBAAmB,EAAKnnB,MAAMmnB,oBAGjC,EAAKnnB,MAAMmoB,kBAC+B,IAAzCuC,EAA8BrmB,QAC5B,kBAAC,GAAD,CACEyW,OAAQ,EAAK9a,MAAM8nB,gBACnBpE,aAAc,EAAKoI,sBACnBmD,UAAU,EACVhM,SAAU,EAAKjjB,MAAMmqB,WACrB+E,YAAa,EAAKlvB,MAAM2qB,iBAG7B,EAAK3qB,MAAM2sB,eACV,kBAAC,KAAD,CACEC,aAAc,EAAK5sB,MAAM4sB,aACzBuC,SAAS,IAGZ,EAAKC,mBACL,EAAKC,sBACL,EAAKrvB,MAAM2sB,eAAiB,kBAAC,KAAD,MAC5B2C,gBAAuB,EAAKtvB,MAAM2sB,eACjC,kBAAC/F,GAAD,MAEF,kBAAC,GAAD,CACEb,WAAY,EAAKwJ,+BACjBzJ,sBACE,EAAK0J,0CAEP/yB,OAAQ,EAAKuD,MAAMwqB,uBACnBxB,qBAAsB,EAAKA,qBAC3BnD,sBAAuB,EAAKA,sBAC5B5W,2BAA0B,UACxB,EAAKjP,MAAM0qB,qCADa,aACxB,EACE,EAAK1qB,MAAM2qB,kBAIhB,EAAK3qB,MAAM+sB,eACV,kBAAC0C,GAAA,EAAD,CAAY1P,QAAS,EAAK2P,6BArHpC,IA4HJ,kBAAC,IAAD,OAjJA,yBACEpzB,UAAS,6DACPkxB,eAAwB,cAAgB,KAG1C,kBAAC,KAAD,CACEmC,iBAAkBroB,IAAaia,aAC/BqO,UAAWtoB,IAAauoB,wB,GA3fDlpB,IAAMjF,WA2oBzC6lB,GAAqBnqB,UAAY,CAC/Bwd,QAASvd,IAAU+C,QAGrBmnB,GAAqBrU,YAAcjM,IAEnC,IAAM6oB,GAAcjb,YAClBkb,aAAe5W,aAAWhG,aAAUoU,OAGhCyI,G,iCACJ,WAAY5zB,GAAO,0BACjB,cAAMA,IACD4D,MAAQ,CACXiwB,gBAAiB3oB,IAAa4oB,cAHf,E,kDAYnB,WACE,IAAM3Y,EAAQ3L,aAAmB,SAC3BukB,EAAWvkB,aAAmB,YAC9BwkB,EAAiBxkB,aAAmB,oBACpCykB,EAAazkB,aAAmB,eAEjC2L,GAAU4Y,GAAaC,GAAmBC,GAC7CrvB,KAAK5E,MAAMwe,QAAQzV,QAAQ,CACzBsG,SAAU,UACV6kB,OAAQ,UAAF,OAAYhpB,IAAaiQ,W,+BAKrC,WACOvW,KAAKhB,MAAMiwB,eAGdM,cAFAvvB,KAAK5E,MAAMwe,QAAQC,KAAKvT,IAAa4oB,cAIvClvB,KAAKwvB,2B,oBAGP,WACE,OAAO,6BAAMxvB,KAAKhB,MAAMiwB,eAAiB,kBAAC,GAAD,MAAkB,U,GArCzCtpB,IAAMjF,WAyC5BsuB,GAAQ5yB,UAAY,CAClBwd,QAASvd,IAAU+C,QAGNyU,mBAAWmb,I,0MCxyBpBS,GAAoB,YAIpB,MACApxB,EAJJqxB,EAGI,EAHJA,qBACAC,EAEI,EAFJA,kBACAC,EACI,EADJA,UAGM7hB,EAAaC,eAEnB,GAA6B,IAAzB0hB,EAA4B,aACxBG,EAAS,UAAGF,SAAH,iBAAG,EAAoB,UAAvB,aAAG,EAAwBG,WACpCC,EAAa,UAAGJ,SAAH,iBAAG,EAAoB,UAAvB,aAAG,EAAwBjyB,OAE9CW,EAAQuT,KAASie,GACb,IAAI1pB,KAAc4H,EAAY,CAC5BjS,GAAI,+CACHsK,SACH,IAAID,KAAc4H,EAAY,CAC5BjS,GAAI,sCACHsK,OAAO,CACR4pB,MAAOH,EACPnyB,OAAQqyB,SAET,GAA6B,IAAzBL,EAA4B,aAC/BO,EAAY,UAAGN,SAAH,iBAAG,EAAoB,UAAvB,aAAG,EAAwBG,WACvCI,EAAY,UAAGP,SAAH,iBAAG,EAAoB,UAAvB,aAAG,EAAwBG,WAE7CzxB,EACEuT,KAASqe,IAAiBre,KAASse,GAC/B,IAAI/pB,KAAc4H,EAAY,CAC5BjS,GAAI,mCACHsK,OAAO,CACRspB,qBAAsBA,IAExB,IAAIvpB,KAAc4H,EAAY,CAC5BjS,GAAI,uCACHsK,OAAO,CACR6pB,aAAcA,EACdC,aAAcA,SAGtB7xB,EAAQ,IAAI8H,KAAc4H,EAAY,CACpCjS,GAAI,mCACHsK,OAAO,CACRspB,qBAAsBA,IAExBC,EAAoBA,EAAkBQ,MAAM,EAAG,GAEjD,OACE,qCACIP,IAA8B,QAAjB,EAAAD,SAAA,eAAmBtsB,QAAS,GACzC,wBACEhF,MAAOA,EACPnC,KAAK,KACLuE,cAAY,iCAEXkvB,EAAkBtqB,KAAI,SAACgN,GAAgB,QAChC+d,GAAuB/d,EAAKge,eAClC,OACE,wBACEC,MAAOje,SAAF,UAAEA,EAAMke,cAAR,iBAAE,EAAe,UAAjB,aAAE,EAAmB7X,IAC1BlZ,MAAO6S,EAAK7S,MACZlB,KAAM+T,aAAF,EAAEA,EAAMyd,WACZU,kBAAmBJ,EACnBl0B,KAAK,aAUrBuzB,GAAkBrzB,UAAY,CAC5BszB,qBAAsBrzB,IAAUo0B,OAChCd,kBAAmBtzB,IAAUuJ,MAC7BgqB,UAAWvzB,IAAUE,MAGRkzB,UC1Ef,SAASiB,GAAT,GAAuC,QCXHjtB,EAAUktB,EACtCC,EACAC,EDSUlB,EAAqB,EAArBA,kBAChB,EAAwC3yB,oBAAS,GAAjD,YAAO8zB,EAAP,KAAqBC,EAArB,KACA,EAAsC/zB,oBAAS,GAA/C,YAAOg0B,EAAP,KAAoBC,EAApB,KACA,EAAoDj0B,mBAAS,IAA7D,YAAOk0B,EAAP,KAA2BC,EAA3B,KAEA,SAASC,IACP,OAAOzB,GAVW0B,EAUoB1B,EAAkBtsB,OATnDiuB,KAAKC,MAAMD,KAAKE,SAAWH,KADpC,IAAsBA,EAoEpB,OAtDA1zB,qBAAU,WACR,IAAM8zB,EAAc9c,YAAW,WAC7Boc,GAAgB,GAChBE,GAAe,GACfE,EAAsBC,OACrB,KACH,OAAO,kBAAMM,aAAaD,MACzB,IC5B+BhuB,EDiChC,WACEwtB,GAAe,GACfE,EAAsBC,MCnCkBT,EDqC1CG,EAAe,IAAQ,KCpCnBF,EAAcpT,iBAAO,MACrBqT,EAAgBrT,iBAAO/Z,GAC7B9F,qBAAU,WACRkzB,EAAcnT,QAAUja,IACvB,CAACA,IACJ9F,qBAAU,WAER,GAAqB,iBAAVgzB,EAET,OADAC,EAAYlT,QAAUnT,OAAOonB,aAFlB,kBAAMd,EAAcnT,YAEgBiT,GACxC,kBAAMpmB,OAAOqnB,cAAchB,EAAYlT,YAE/C,CAACiT,ID6BJhzB,qBAAU,WACR,GAAIqzB,EAAa,CACf,IAAMa,EAAeld,YAAW,WAC9Bsc,GAAe,KACd,KACH,OAAO,kBAAMS,aAAaG,OAE3B,CAACb,KA2BCF,GAAgBvW,KAAQ2W,GACpB,KAIP,yBAAKp1B,GAAG,SAASR,UAAS,UAAK01B,EAAc,UAAY,aACvD,6BACE,wBACEV,MAAK,UAAEY,EAAmBX,cAArB,iBAAE,EAA4B,UAA9B,aAAE,EAAgC7X,IACvClZ,MAAO0xB,EAAmB1xB,MAC1BlB,KAAM4yB,EAAmBpB,WACzBU,kBAAmBU,YAAoBb,eACvC/0B,UAAU,SACVY,KAAK,QAGT,2BAxCEg1B,EAAmBpB,WAEnB,kBAAC,KAAD,CACEh0B,GAAG,wCACH+zB,UAAWqB,EAAmBpB,WAC9BpyB,OAAQykB,aAAa,CACnBvkB,MAAOk0B,aAAaZ,EAAmBxzB,QACvCD,SAAUyzB,EAAmBa,mBAIY,IAAtCb,EAAmBb,eAE1B,kBAAC,KAAD,CACEv0B,GAAG,qCACH4B,OAAQykB,aAAa,CACnBvkB,MAAOk0B,aAAaZ,EAAmBxzB,QACvCD,SAAUyzB,EAAmBa,uBAN9B,IAkCXrB,GAAOt0B,UAAY,CACjBuzB,kBAAmBtzB,IAAUuJ,OAGhB8qB,UEjGR,SAASsB,GAAeC,EAAeC,GAC5C,IAAIC,EAAgB,GAEpB,GAA6B,IAAzBF,EAAc5uB,OAChB,OAAO8uB,EAGT,IAAMC,EAAQH,EAAcI,MAAK,SAAC/sB,GAAD,MAAiC,UAA1BA,EAAEgtB,MAAMC,iBAC1CtwB,EAAMgwB,EAAcI,MAAK,SAAC/sB,GAAD,MAAiC,QAA1BA,EAAEgtB,MAAMC,iBACxCC,EAAWP,EAAcI,MAAK,SAAC/sB,GAAD,MAAiC,SAA1BA,EAAEgtB,MAAMC,iBAgBnD,OAdIC,IACEA,aAAA,EAAAA,EAAU12B,OAAOmG,aAAjB,EAAiBA,EAAKnG,MAAM02B,aAAA,EAAAA,EAAU12B,OAAOs2B,aAAjB,EAAiBA,EAAOt2B,KACtDq2B,EAActY,KAAK2Y,GAGnBvwB,GAAOiwB,EAAqB,IAC9BC,EAActY,KAAK5X,GAEjBmwB,IACEA,aAAA,EAAAA,EAAOt2B,OAAOmG,aAAd,EAAcA,EAAKnG,KACrBq2B,EAActY,KAAKuY,GAIhBD,E,qnNCYT,IAAMM,GAAmBC,gBAAU,kBACjC,oIAKIC,GAAyBD,gBAAU,kBACvC,iJAcF,IAmaevgB,iBAnaS,WAAM,MACtBpE,EAAa/H,qBAAWC,KAC9B,EAAkDjJ,oBAAS,GAA3D,YAAO41B,EAAP,KAA0BC,EAA1B,KACMrI,EAAelkB,IAAamkB,2BAA6B,IACzDC,EAAiBpkB,IAAaokB,eAC9BoI,EAAexsB,IAAaqkB,qBAC5BC,EAAkBtkB,IAAaskB,gBAC/BmI,EAA2BzsB,IAAaysB,yBACxCC,EAAiCC,aACrCzI,EACAlkB,IAAa9I,cAET+iB,EAAY,UAAGja,IAAaia,oBAAhB,QAAgC,GAClD,EAAkDvjB,mBAAS,CACzDk2B,SAAU,GACVC,KAAM,KAFR,YAAOxD,EAAP,KAA0ByD,EAA1B,KAIA,EAAoDp2B,oBAAS,GAA7D,YAAOq2B,EAAP,KAA2BC,EAA3B,KACA,EAAsCt2B,mBAAS,GAA/C,YAAO4pB,EAAP,KAAoB2M,EAApB,KACA,EAAkCv2B,oBAAS,GAA3C,YAAO4yB,EAAP,KAAkB4D,EAAlB,KACA,EAA0Bx2B,mBAAS,GAAnC,YAAOy2B,EAAP,KAAcC,EAAd,KACA,EAA4C12B,oBAAS,GAArD,YAAO22B,EAAP,KAAuBC,EAAvB,KACA,EAAkD52B,mBA9BrB,KA8B7B,YAAO62B,EAAP,KAA0BC,EAA1B,KAGA,EAAkE92B,mBAAS,GAA3E,YAAO+2B,EAAP,KAAkCC,EAAlC,KAEMC,EAAa,aAAyB,KAE5C,GAAgCj3B,oBAAS,GAAzC,cAAOk3B,GAAP,MAAiBC,GAAjB,MAEMC,GAAkB,WACtBD,GAAY5pB,OAAO8pB,WCxFS,KDwFsB,MAGpD12B,qBAAU,WACR,IAAM22B,EAAcC,KAASH,GAAiB,KAE9C,OADA7pB,OAAOyI,iBAAiB,SAAUshB,GAC3B,WACL/pB,OAAOiJ,oBAAoB,SAAU8gB,MAEtC,IAEH32B,qBAAU,WACR,IAAM62B,EAAS,iCAAG,+GACKvoB,aAAQ,yBAAD,OACD3F,IAAamuB,UADZ,YACyB7N,EADzB,QAE1Bta,MAAK,SAACC,GAAD,OAAcA,EAASC,UAHd,QACV3E,EADU,QAILoqB,cACTmB,EAAqB,CACnBF,SACwC,IAAtCvD,EAAkBuD,SAAS7vB,OACvBssB,EAAkBuD,SAClBlB,GACEnqB,SADY,UACZA,EAAQoqB,qBADI,iBACZ,EAAuBA,qBADX,aACZ,EAAsCiB,SACtCH,GAERI,KAAM,GAAF,YACCxD,EAAkBwD,MADnB,eAEEtrB,SAFF,UAEEA,EAAQoqB,qBAFV,iBAEE,EAAuBA,qBAFzB,aAEE,EAAsCkB,YAFxC,QAEgD,OAItDG,GAAsB,GAExBE,GAAa,GArBG,2CAAH,qDAwBfA,GAAa,GACbF,GAAsB,GACtBkB,MACC,CAAC5N,EAAa6M,IAEjB,IAAMiB,GAAiB,WACrBnB,EAAe3M,EAAc,IAG/BjpB,qBAAU,WACRghB,aAAS,wCAAyC,CAAC,gBACnDA,aAAS,iBAAkB,CAAC,eAC5B5M,gBACC,IAEH,IAAM4iB,GAA4B1B,aAChCH,EACAxsB,IAAa9I,cAGXo3B,GAAoB,IAAIzuB,KAAc4H,EAAY,CACpDjS,GAAI,wCACHsK,OAAO,CACRyuB,WAAYF,KAGRG,GAAqB,SAACh5B,GAAD,IAAKi5B,EAAL,4DAAiBpqB,EAAjB,OACzB,IAAIxE,KAAc4H,EAAY,CAC5BjS,GAAI,qBAAF,OAAuBA,KACxBsK,OAAO2uB,IAENC,GAA8B,CAClCC,OAAQH,GAAmB,UAC3BI,QAASJ,GAAmB,WAC5BK,KAAML,GAAmB,QACzBM,MAAON,GAAmB,SAC1BO,IAAKP,GAAmB,OACxBQ,KAAMR,GAAmB,QACzBS,MAAOT,GAAmB,SAC1BU,OAAQV,GAAmB,UAC3BW,KAAMX,GAAmB,QACzBY,MAAOZ,GAAmB,SAC1Ba,cAAeb,GAAmB,gBAAiB,CACjDc,SAAU,aACVC,KAAM,WAERC,aAAchB,GAAmB,eAAgB,CAAEiB,KAAM,YAGrDC,GAAqB,kBACzB,yBAAK16B,UAAU,iBACb,wBACEovB,eAAgBA,EAChBuL,QAAS,IAAI5hB,KAAKuW,GAClB7L,QAASiW,GACTkB,YAAa,IAAI7hB,KACjB8hB,WAAYC,SAKZC,GAAc,SAACn6B,GAAD,OAClB,yBAAKZ,UAAU,iBACb,wBAAOY,KAAMA,EAAMV,MAAO8K,IAAagwB,kBAIrCC,GAA0B,kBAC9B,yBAAKj7B,UAAU,0BACb,wBACE+1B,IAAKyB,EACLl1B,MAAO0zB,KAAKkF,MAAMhM,GAClBiM,MAAOzD,EACPx3B,MAAOo5B,GACPt5B,UAAU,0BAwBVo7B,GAAgBzK,KAAW,CAC/B,kBAAkB,EAClB0K,OAAQ1C,IAaJ2C,GAAkB,WAAM,MA3LPC,EA4LrB,OACE,oCACE,kBAACpE,GAAD,CACE9C,kBAAmBA,EACnBC,UAAWA,EACXhJ,YAAaA,EACb8N,eAAgBA,GAChBoC,0BAA2B/D,IAET,WAAnBrI,MArMgBmM,EAsMA,IAAIxiB,KAAKuW,MApMnB,IAAIvW,MAAO0iB,SAAS,EAAG,EAAG,EAAG,IAAKF,aAAlC,EAAkCA,EAASE,SAAS,EAAG,EAAG,EAAG,OAqMpEpH,SAAA,UAAAA,EAAmBwD,YAAnB,eAAyB9vB,SAAU,GACjC,kBAAC,GAAD,CAAQssB,kBAAmBA,EAAkBwD,OAC3C,OAKJ6D,GAA2B,WAC/B,OACE,yBAAKz2B,MAAO,CAAEkC,UAAW,WACvB,2BACE,kBAAC,IAAD,CAAS3G,GAAG,iDAEd,uBAAUyE,MAAO,CAAEf,MAAO,YACxB,kBAAC,IAAD,CAAS1D,GAAG,gDAEd,uBACEsC,UAAQ,EACRjC,QAAS,WACPu3B,EAASD,EAAQ,KAGnB,kBAAC,IAAD,CAAS33B,GAAG,iDAqBdm7B,GAAehD,GACnB,yBAAK34B,UAAWo7B,IACd,yBAAKp7B,UAAU,kBACZ06B,KACAK,GAAY,MACZE,OAKDlM,GAAuB,CAC3B6M,aAAc,IAAI/wB,KAAc4H,EAAY,CAC1CjS,GAAI,6BACHsK,UAGC+wB,GAAmB,SAACr7B,EAAIoP,GAC5B,OAAO,IAAI/E,KAAc4H,EAAY,CACnCjS,GAAI,kBAAF,OAAoBA,KACrBsK,OAAO8E,IA0DZ,IAAMksB,GAAuB,SAACnzB,GAC5BA,EAAM4jB,iBACNiM,GAAqB,SAAC5xB,GACpB,IAAMm1B,EAAoBn1B,EApUD,IAuUzB,OAFIm1B,GAAqBtD,GACvBH,GAAkB,GACbyD,MAcX,OACE,yBAAK/7B,UAAU,8BACb,wBACEA,UAAU,0BACVU,IAAKsK,IAAa6lB,aAElB+H,IAAY+C,GACd,yBAAK37B,UAAU,qBACb,yBAAKA,UAAU,kBAAkBmF,cAAY,mBAC3C,uBAAM62B,QAAN,KACE,yBAAKh8B,UAAU,kBA3KvB,yBAAKA,UAAU,kBACZ06B,KACAK,GAAY,MA1Bf,yBAAK/6B,UAAU,wBACb,kBAAC,GAAD,CACEo0B,qBAAsBqD,EACtBpD,kBAAmBA,EAAkBwD,KACrCvD,UAAWA,KAMf,yBAAKt0B,UAAU,yBACb,2BACGilB,EACD,kBAAC,KAAD,QAgBDgW,OAuKK,yBACEj7B,UAAU,uBACViF,MAAO,CACLg3B,UACExD,GApWa,IAqWTF,EAAoB,KACpB,UAGR,yBACEjgB,IAAK,SAAC4jB,GAAD,OACHA,GACAxD,EACEwD,EAAqBC,gBAIzB,kBAAC,WAAD,CACEC,SACE,wBAAgBx7B,KAAK,KAAKqE,MAAO,CAAExF,OAAQ,aAG7C,kBAAC43B,GAAD,CACEgF,oBAAqBrxB,IAAaqxB,wBA3ClD5D,GA5U2B,KA6U3BJ,GACE,yBAAKr4B,UAAU,sBACb,uBAAQ8C,UAAQ,EAACjC,QAASi7B,IACxB,kBAAC,IAAD,CAASt7B,GAAG,kCA6CV,kBAAC,WAAD,CACE47B,SACE,wBAAgBx7B,KAAK,KAAKqE,MAAO,CAAExF,OAAQ,aAzJlDs4B,EAEsB,IAAhBzM,EACFoQ,KAIP,oCACGJ,KACAI,MARIJ,MA6JA7D,EAA2B,GAtFlC,yBAAKz3B,UAAU,wBACb,uBACEY,KAAK,KACLqE,MAAO,CAAEkC,UAAW,GAAF,OAAMyxB,GAAoB,SAAT,UAEnC,kBAAC,IAAD,CAASp4B,GAAG,iCAEd,kBAAC87B,GAAA,EAAD,CACEvI,WAAY/oB,IAAamuB,UACzB7zB,SA5CC,CACLi3B,OAAQ,CACNC,aAAcX,GAAiB,eAAgB,CAC7C5W,aAAc,mBAEhBwX,UAAWZ,GAAiB,YAAa,CACvC5W,aAAc,iBACd7H,IAAK,UAEPsf,WAAYb,GAAiB,aAAc,CACzC5W,aAAc,mBAEhB0X,gBAAiBd,GAAiB,kBAAmB,CACnD5W,aAAc,iBACd7H,IAAK,UAEPwf,eAAgBf,GAAiB,iBAAkB,CACjD5W,aAAc,mBAEhB4X,gBAAiBhB,GAAiB,kBAAmB,CACnD5W,aAAc,mBAEhB6X,eAAgBjB,GAAiB,kBACjCkB,wBAAyBlB,GAAiB,2BAC1CmB,kBAAmBnB,GAAiB,qBACpCoB,WAAYpB,GAAiB,cAC7BqB,SAAUrB,GAAiB,YAC3BsB,UAAWtB,GAAiB,aAC5BuB,aAAcvB,GAAiB,kBAiB7B9M,qBAAsBA,GACtBlR,MAAO7S,IAAaqyB,cACpBt9B,QAASiL,IAAa6kB,YACtBmC,WAAW,OA4EX4G,GAKA,oCACE,uBAAK0E,GAAG,KAAKt9B,UAAU,gBACrB,uBACEa,QAAS,WACP02B,GAAsBD,GACtBiG,aAA8B,CAAE5R,mBAAoB,SAGtD,kBAAC,IAAD,CAASnrB,GAAG,qCAGhB,wBACEL,OAAQm3B,EACRl3B,QAAS,aACTF,MAAO,IAAI2K,KAAc4H,EAAY,CACnCjS,GAAI,mCACHsK,SACH0yB,kBAAkB,KAClBx9B,UAAU,+BACVy9B,iBAAiB,wBACjBC,eAAa,GAEb,kBAAC,GAAD,QA1BJ,yBAAK19B,UAAU,eACb,kBAAC,GAAD,Y,4fEzbN29B,G,iCACJ,aAAc,0BACZ,gBACKj6B,MAAQ,CACX+Q,aAAc,GACdG,SAAUzJ,IAASyyB,cAAchpB,SACjCipB,gBAAiB,IALP,E,6CASd,WACEn5B,KAAK5E,MAAMqc,MAAMzX,Q,kCAGnB,WACEA,KAAK5E,MAAMqc,WAAM9M,K,sCAGnB,SAAyBoF,GACvB/P,KAAKmD,SAAS,CAAE4M,aAAcA,IAC9B/P,KAAK5E,MAAMg+B,yBAAyBrpB,K,8BAGtC,SAAiBzP,GACfN,KAAKmD,SAAL,OAAiB7C,EAAY,O,6BAM/B,SAAgB1C,EAAO0C,EAAW+4B,EAAeC,EAAcvrB,GAC7D,IAAIwrB,EAAgB,GAGlBA,EADE37B,EACc,OACb0C,EAAYN,KAAKw5B,mBAChB57B,EACA0C,EACAg5B,EACAvrB,IAIY,OACbzN,EAAY,IAAI6F,KAAc4H,EAAY,CACzCjS,GAAI,kBAAF,OAAoBu9B,KACrBjzB,UAIPpG,KAAKmD,SAASo2B,K,gCAMhB,SAAmB37B,EAAO0C,EAAWg5B,EAAcvrB,GACjD,MAII/N,KAAKhB,MAHPkR,SACEC,OAAUC,WAFd,MAEoB,GAFpB,EAMA,GAAkB,oBAAd9P,EAAiC,CACnC,IAAIm5B,EAAS77B,GAASA,EAAMyF,OACxBq2B,EAAStpB,EAAIM,UAGjB,KAAM+oB,IAFOrpB,EAAI0L,WAAa4d,IAEJD,GAAUC,GAClC,OAAO,IAAIvzB,KAAc4H,EAAY,CACnCjS,GAAI,kBAAF,OAAoBw9B,KACrBlzB,SAIP,MAAO,K,oBAGT,WAAS,WACDuzB,EAAW,IAAIxzB,KAAcnG,KAAKiS,QAAS,CAC/CnW,GAAI,8BACHsK,SAEH,OACE,yBAAK9K,UAAU,gBAAgBQ,GAAG,iBAChC,yBAAKR,UAAU,aACb,kBAAC,KAAD,CACEwU,qBAAqB,EACrBzR,MAAOs7B,EACPj1B,YAAa,IAAIyB,KAAcnG,KAAKiS,QAAS,CAC3CnW,GAAI,yCACHsK,SACH/F,aAAcL,KAAKhB,MAAMm6B,gBACzBlpB,yBAA0B,SAACrS,GAAD,OACxB,EAAKqS,yBAAyBrS,IAEhC0S,YAAa,kBAAW,EAAKspB,iBAAiB,oBAC9CrpB,WAAY,SAAC3S,GAAD,OACV,EAAKi8B,gBACHj8B,EACA,kBACA,yBACA,wBACA,EAAKqU,UAGT/B,SAAUlQ,KAAKhB,MAAMkR,SACrBa,WAAY,IAAI5K,KAAcnG,KAAKiS,QAAS,CAC1CnW,GAAI,kCACHsK,OAAO,CACRgK,IAAKupB,EAAS7nB,wB,GA9GDnM,IAAMjF,WAuHjCu4B,GAAa/mB,YAAcjM,IAEZgzB,U,uCCvHTa,GAAqB,YAQrB,IAPJptB,EAOI,EAPJA,OACAqtB,EAMI,EANJA,cACAC,EAKI,EALJA,YACAC,EAII,EAJJA,OACAC,EAGI,EAHJA,2BACAC,EAEI,EAFJA,MACAtoB,EACI,EADJA,SAEA,EAAsC7U,mBAAS,IAA/C,YAAOo9B,EAAP,KAAoBC,EAApB,KAEMC,EAAgB,SAACC,GACrB,OAAOA,EAAIC,OAAO,GAAGjI,cAAgBgI,EAAIpK,MAAM,IAmBjD,OAZAxyB,qBAAU,WAAM,UACVwT,EAAO,UAAGzE,SAAH,UAAGA,EAAQ+tB,oBAAX,iBAAG,EAAsBR,cAAzB,aAAG,EAA8BS,0BAAjC,QAAuD,MAEpD,OAAZvpB,GACAS,KAAST,SACU,IAAZA,KAEPA,EAAU,GAAH,OAAMwpB,iBAAN,yDAAoE9oB,EAApE,SAETwoB,EAAelpB,KACd,IAGD,yBAAK7V,UAAU,uDACb,yBAAKA,UAAU,gBACXsW,KAASwoB,GAGT,kBAAC,KAAD,CAAgBl+B,KAAK,QAFrB,yBAAKF,IAAKo+B,EAAa9+B,UAAU,eAAegjB,cAAY,SAI9D,yBAAKhjB,UAAU,YACZ2+B,GAAU,kBAAC,IAAD,KAxBVA,aAAP,EAAOA,EAAQnoB,cAAc8oB,MAAM,KAAKv1B,IAAIi1B,GAAepiB,KAAK,MAyB1D,kBAAC,IAAD,CAAa5c,UAAU,gBACrB,kBAAC,IAAD,CACEQ,GAAG,6CACHqC,KAAM67B,EACNvJ,OAAQsJ,MAGVG,GACA,kBAAC,KAAD,CAAO/7B,KAAK,WACV,kBAAC,IAAD,CAASrC,GAAG,yCAKpB,kBAAC,IAAD,KAAWq+B,KAKjBL,GAAmB19B,UAAY,CAC7BiV,eAAgBhV,IAAU+C,OAC1B26B,cAAe19B,IAAUC,OACzB09B,YAAa39B,IAAUC,OACvB29B,OAAQ59B,IAAUC,OAClB69B,MAAO99B,IAAUC,OACjB49B,2BAA4B79B,IAAUE,KACtCmQ,OAAQrQ,IAAU+C,OAClByS,SAAUxV,IAAUC,QAGPw9B,U,aClEf,IAAMe,GAA2B,SAACz/B,GAuBhC,OACE,kBAAC,KAAD,CACEE,UAAS,UAAKF,EAAME,UAAX,YACPF,EAAM0/B,WAAa,iBAAmB,kBAExCt6B,KAAK,WACLu6B,eAAc3/B,EAAM0/B,WACpBE,SAAS,IACT7+B,QAASf,EAAM6/B,sBACfC,UAAW,SAAC3nB,GAAD,OC5CV,SAAyBtP,EAAOk3B,GACrC,GAAIl3B,EAAMm3B,QAAUC,YAASC,OAASr3B,EAAMm3B,QAAUC,YAASE,MAC7D,OAAOJ,ID2CHK,CAAgBjoB,GAAG,WACjBnY,EAAM6/B,6BAIV,kBAAC,KAAK3D,QAAN,KACE,yBAAKh8B,UAAU,mBArCN,gBADQ6C,EAuCA/C,EAAM+C,MApCvB,wBACEkgB,WAAW,YACXniB,KAAK,KACLoC,KAAMH,EACNigB,iBAAkBqd,OAGJ,iBAATt9B,EAEP,wBACEkgB,WAAW,YACXniB,KAAK,KACLoC,KAAMH,EACNigB,iBAAkBsd,YANjB,EA8BD,yBAAKpgC,UAAU,WACb,kBAAC,IAAD,CAAUA,UAAU,QAAQqD,QAAM,GAC/BvD,EAAMI,OAERJ,EAAMugC,MAAQ,kBAAC,IAAD,CAAah9B,QAAM,GAAEvD,EAAMugC,MAC1C,kBAAC,IAAD,CAAaC,GAAG,QAAQxgC,EAAMmkB,cAEhC,kBAAC,KAAD,CACEjkB,UAAS,sBAAiBF,EAAM0/B,YAAc,aAC9C5+B,KAAK,UAjDO,IAACiC,GAyDzB08B,GAAyBz+B,UAAY,CACnC0+B,WAAYz+B,IAAUE,KACtBf,MAAOa,IAAUC,OACjBq/B,KAAMt/B,IAAUC,OAChBijB,YAAaljB,IAAUC,OACvBhB,UAAWe,IAAUC,OACrB2+B,sBAAuB5+B,IAAUG,KACjC2B,KAAM9B,IAAUC,QAGlB,IAAMu/B,GAA0B,SAACzgC,GAC/B,IAAM2K,EAAaC,qBAAWC,KACtBW,EAAiCxL,EAAjCwL,eAAgBkE,EAAiB1P,EAAjB0P,aACpBgxB,EAAkB,IAAI31B,KAAcJ,EAAY,CAClDjK,GAAI,6CACHsK,SACC21B,EAAiB,IAAI51B,KAAcJ,EAAY,CACjDjK,GAAI,4CACHsK,OAAO,CACR1I,OAAQoN,IAENkxB,EAAoB,IAAI71B,KAAcJ,EAAY,CACpDjK,GAAI,+CACHsK,SACC61B,EAAgB,IAAI91B,KAAcJ,EAAY,CAChDjK,GAAI,2CACHsK,SACC81B,EAAkB,IAAI/1B,KAAcJ,EAAY,CAClDjK,GAAI,6CACHsK,SACH,EAA8CpJ,mBAC5C4J,IAAmBu1B,GAA4BjU,QADjD,YAAOkU,EAAP,KAAyBC,EAAzB,KAgBA,OACE,kBAAC,KAAD,CACE/gC,UAAU,4BACVE,MAAM,GACN+Z,WAAW,EACX9Z,OAAQL,EAAMK,OACdC,QAlBgB,WAClBN,EAAMoZ,cAmBJ,kBAAC,IAAD,CAAatY,KAAK,KAAKZ,UAAU,qBAC/B,kBAAC,IAAD,CAASQ,GAAG,wCAEd,kBAAC,IAAD,CAAUR,UAAU,wBAClB,kBAAC,IAAD,CAASQ,GAAG,2CAGd,kBAAC++B,GAAD,CACEC,WAAYsB,EACZ5gC,MAAOsgC,EACPH,KAAMI,EACNxc,YAAayc,EACbf,sBAAuB,kBAAMoB,GAAkB,IAC/C/gC,UAAU,gBACV6C,KAAK,eAEP,kBAAC08B,GAAD,CACEC,YAAasB,EACb5gC,MAAOygC,EACP1c,YAAa2c,EACbjB,sBAAuB,kBAAMoB,GAAkB,IAC/C/gC,UAAU,cACV6C,KAAK,iBAEP,yBAAK7C,UAAU,eACb,kBAAC,IAAD,CAAQA,UAAU,iBAAiBa,QAzChB,WACvBf,EAAM6/B,sBACJmB,EACID,GAA4BjU,OAC5BiU,GAA4BG,UAsC5B,kBAAC,IAAD,CAASxgC,GAAG,4CAOtB+/B,GAAwBz/B,UAAY,CAClC6+B,sBAAuB5+B,IAAUG,KAAKqJ,WACtC2O,UAAWnY,IAAUG,KACrBoK,eAAgBvK,IAAUC,OAC1BwO,aAAczO,IAAUC,OACxBb,OAAQY,IAAUE,MAGLs/B,UEvJTU,GAAc,YAQd,IAqCIC,EACAC,EACAC,EA9CRxC,EAOI,EAPJA,2BACAC,EAMI,EANJA,MACA7oB,EAKI,EALJA,kBACAqrB,EAII,EAJJA,yBACAC,EAGI,EAHJA,qBACAC,EAEI,EAFJA,cACAC,EACI,EADJA,QAEMzrB,EAAiB5K,IAAS6K,oBAG1BqqB,EAAO,GAAH,OAAMiB,EACd,OACAC,EAAcE,YAFN,aAGJC,aACJH,EAAc/xB,aACd+xB,EAAcI,mBACdJ,EAAcK,UANN,YAOLL,EAAcM,aAEnB,EAA4DngC,oBAAS,GAArE,YAAOogC,EAAP,KAA+BC,EAA/B,KA8BA,OACE,qCACIP,GACA,yBAAKxhC,UAAU,kBACb,uBAAUqD,QAAM,GACd,kBAAC,IAAD,CAAS7C,GAAG,yCAEd,uBAAU6C,QAAM,GAAEw7B,IAItB,yBAAK7+B,UAAU,qBACb,2BACG4+B,EACC,kBAAC,IAAD,CAASp+B,GAAG,6CAEZ,kBAAC,IAAD,CAASA,GAAG,4CAGhB,uBACEsC,UAAQ,EACRjC,QAAS,WACPyM,aAAeC,IAAUy0B,oBAAqB,CAC5CC,SAAUC,IAAUC,oBAEtBJ,GAA0B,KAG5B,kBAAC,IAAD,CAASvhC,GAAG,mDAGfo+B,GACC,2BACE,kBAAC,IAAD,CAASp+B,GAAG,qCAAqC4B,OAAQi+B,MAvCzDa,EAAiBnrB,EAAeqsB,SAAW,GAC3CjB,EAAoBD,EAAeA,EAAen5B,OAAS,GAC3Dq5B,EAAOnrB,KAAKkrB,EAAmB,QAC9BkB,KAAUjB,EAtCqB,gCA+ElC,yBAAKphC,UAAU,sBACZ4+B,EACC,2BACiC,OAA9BzzB,IAASm3B,iBACR,kBAAC,IAAD,CAAS9hC,GAAG,mCAEZ,kBAAC,IAAD,CAASA,GAAG,iCAGd,OAIR,kBAAC,GAAD,CACEL,OAAQ2hC,EACRtyB,aAAc6wB,EACdV,sBAlFwB,SAACxN,GAGzBkP,IAA6BlP,GAC/B4P,GAA0B,GAC1BxkB,cACAvH,EAAkBmc,GAAQoQ,SAAQ,WAChC9rB,kBAGF4C,YAAW,WACT0oB,GAA0B,KACzB,MAuED7oB,UAAW,kBAAM6oB,GAA0B,IAC3Cz2B,eAAgB+1B,MAMxBJ,GAAYngC,UAAY,CACtB89B,2BAA4B79B,IAAUE,KACtC49B,MAAO99B,IAAUC,OACjBwhC,8BAA+BzhC,IAAUG,KACzCsO,aAAczO,IAAUC,OACxBwgC,QAASzgC,IAAUE,MAGNggC,UCzHTwB,GAAa,YAA0C,4BAAvCC,EAAuC,EAAvCA,WAAYpB,EAA2B,EAA3BA,qBAC1B7uB,EAAa/H,qBAAWC,KAC9B,EAA8CjJ,oBAAS,GAAvD,YAAOihC,EAAP,KAAwBC,EAAxB,KAEIC,EAAgBvB,GAClBoB,SAAA,UAAAA,EAAYI,sBAAZ,eAA4BxgC,QAAS,QACrCogC,SAAA,UAAAA,EAAYI,sBAAZ,eAA4B3gC,WAAY,OAGtC4gC,EAAWzB,GACboB,SAAA,UAAAA,EAAYM,iBAAZ,eAAuB1gC,QAAS,QAChCogC,SAAA,UAAAA,EAAYM,iBAAZ,eAAuB7gC,WAAY,OAGjC8gC,EAAkB3B,GACpBoB,SAAA,UAAAA,EAAYQ,yBAAZ,eAA+B5gC,QAAS,QACxCogC,SAAA,UAAAA,EAAYQ,yBAAZ,eAA+B/gC,WAAY,OAG7C,OACE,oCACE,yBAAKnC,UAAU,gBACb,2BACE,kBAAC,IAAD,CAASQ,GAAG,+BAEd,2BACG6hC,KAAUQ,EAAeH,SAAhB,UAAgBA,EAAYI,sBAA5B,aAAgB,EAA4B3gC,UAArD,UACM0gC,GADN,UAEMA,EAFN,YAEuBH,SAFvB,UAEuBA,EAAYI,sBAFnC,aAEuB,EAA4B3gC,YAGxD,yBAAKnC,UAAU,gBACb,uBAAUA,UAAU,eAClB,kBAAC,IAAD,CAASQ,GAAG,yBACZ,wBACER,UAAU,sBACV+iB,WAAW,WACXD,iBAAgB,KAChBliB,KAAK,KACLC,QAAS,kBAAM+hC,GAAmB,KAElC,kBAAC,IAAD,CAASpiC,GAAG,mCAGhB,2BACG6hC,KAAUU,EAAUL,SAAX,UAAWA,EAAYM,iBAAvB,aAAW,EAAuB7gC,UAA3C,UACM4gC,GADN,UAEMA,EAFN,YAEkBL,SAFlB,UAEkBA,EAAYM,iBAF9B,aAEkB,EAAuB7gC,YAG9C,yBAAKnC,UAAU,gBACb,uBAAUqD,QAAM,GACd,kBAAC,IAAD,CAAS7C,GAAG,4BAEd,uBAAU6C,QAAM,GACbg/B,KAAUY,EAAiBP,SAAlB,UAAkBA,EAAYQ,yBAA9B,aAAkB,EAA+B/gC,UAA1D,UACM8gC,GADN,UAEMA,EAFN,YAEyBP,SAFzB,UAEyBA,EAAYQ,yBAFrC,aAEyB,EAA+B/gC,YAI7D,wBACEnC,UAAU,uBACVQ,GAAG,uBACHN,MAAO,IAAI2K,KAAc4H,EAAY,CACnCjS,GAAI,iCACHsK,SACHmP,WAAW,EACX9Z,OAAQwiC,EACRviC,QAAS,kBAAMwiC,GAAmB,KAElC,uBAAU5iC,UAAU,2BAClB,kBAAC,IAAD,CAASQ,GAAG,wCAEd,yBAAKR,UAAU,eACb,uBACEsgC,GAAG,IACHl9B,OAAO,SACPqb,KAAK,2BACLvZ,KAAK,SACL2f,WAAS,GAET,kBAAC,IAAD,CAASrkB,GAAG,uCAQxBiiC,GAAW3hC,UAAY,CACrB4hC,WAAY3hC,IAAU+C,OACtBw9B,qBAAsBvgC,IAAUG,MAGnBuhC,U,m/BCzDf,IAAMxgC,GAAuBkJ,IAASg4B,0BAEzBtC,GAA8B,CACzCjU,OAAQ,SACRoU,OAAQ,UAGJoC,G,iCACJ,WAAYtjC,GAAO,kBACjB,cAAMA,GADW,mCAsBI,WACrB,IAAMujC,EAAiBr7B,SAASC,eAAe,kBAEV,SAAjCo7B,EAAep+B,MAAMW,QAEvBqJ,OAAO2d,OAAOC,UAAUyW,eAAe,CACrCvW,KAAM,0CACNre,OAAQ,0BACRse,OAAQ,cACRC,OAAQ,SAIVsW,YACEF,EACA,CAAEG,YAAY,IACd,SAACC,GACsC,SAAjCJ,EAAep+B,MAAMW,UACvBqJ,OAAO2d,OAAOC,UAAUyW,eAAe,CACrCvW,KAAM,0CACNre,OAAQ,0BACRse,OAAQ,cACRC,OAAQ,SAGVwW,EAASC,oBA/CA,mCAkJI,SAACthC,EAAQD,GAC9B,IAAIykB,EAAiB,CACnBtkB,MAAO+K,WAAWjL,GAAQO,QAAQ,GAClCR,SAAUA,GAGZ,OADgBwhC,aAAuB/c,MAvJtB,4CA2Ja,WAC9BtZ,aAAeC,IAAUy0B,oBAAqB,CAC5CC,SAAUC,IAAUC,oBAEtB,EAAKyB,iCA/JY,0CAkKW,WAC5B,EAAK/7B,SAAS,CACZg8B,+BAA+B,OApKhB,0CAwKW,WAC5B,EAAKh8B,SAAS,CACZg8B,+BAA+B,OA1KhB,gCA8KC,WAClB,GAAI,EAAKngC,MAAMogC,aAAc,CAC3B,IAAMC,EAAM/7B,SAASC,eAAe,gBAAgB3F,MACpD,EAAK0hC,aAAazF,gBAChBwF,EACA,kBACA,yBACA,yBAGF,IAAIt8B,EACFO,SAASi8B,uBAAuB,6BAA6Bl8B,OAAS,EACxE,IAAKg8B,GAAOt8B,EACV,OAGJ,IAAMsO,EAAiB5K,IAAS6K,oBAC1BwB,EAAgBvB,KAAKF,EAAgB,kBAAoB,GACzDqF,EACJ3D,KAAMD,EAAe,CAAE9I,OAAQ,wCAC/B,GAEG4H,KAAS8E,GAMd,EAAK8oB,kBALH,EAAKC,iBAAiBC,uBArMP,8BA6MD,WAAM,MAOtB,OANA7mB,cAEA8mB,aAAgC,CAC9BC,WAAW,YAAK5gC,MAAM+Q,oBAAX,eAAyB1M,QAAS,IAGxC,EAAKjI,MAAMogB,aAAa,CAC7BzL,aAAc,EAAK/Q,MAAM+Q,kBArNV,kCAyNG,SAAC8vB,GACrBx4B,IAA+B,CAAEkS,cAAesmB,OA1N/B,uCAqTQ,SAAC9vB,GAC1B,EAAK5M,SAAS,CACZ4M,aAAcA,OAvTC,6CA2Tc,WAAM,MACrC,EAAK3U,MAAM0c,eAAc,GAEzBgoB,aAAyB,CACvBF,WAAW,YAAK5gC,MAAM+Q,oBAAX,eAAyB1M,QAAS,IAG/C,EAAKjI,MAAMogB,aAAa,CACtBzL,aAAc,EAAK/Q,MAAM+Q,kBAnUV,6CAuUc,WAE/B,EAAK3U,MAAMwe,QAAQC,KAAK,4BAzUP,mCA4UI,WAErB,EAAKze,MAAMwe,QAAQC,KAAK,4BA3UxB,IAAIkmB,EAAkD,YAApCt5B,IAASkJ,uBACrBqwB,EAA4B,EAAKC,kCAJtB,OAMjB,EAAKjhC,MAAL,OACE+qB,eAAgBrc,IAAa6S,aAC7B6K,WAAY3kB,IAASge,sBAAwB/W,IAAa0d,WAC1D/vB,QAASqS,IAAayd,YACtB8R,mBAAoBvvB,IAAauB,sBAAwB,IACzD7K,aAAcsJ,IAAauB,sBAAwB,IACnD8wB,eACGC,GAPL,IAQEZ,cAAc,EACdrvB,aAAc,GACdovB,+BAA+B,EAC/BlxB,2BAA4BxH,IAASiT,kCAEvC,EAAKpI,kBAAoB,EAAKA,kBAAkBpM,KAAvB,QAnBR,E,6CAuDnB,WACElF,KAAKkgC,yB,6CAGP,WAAkC,cAC5B7uB,EAAiB5K,IAAS6K,oBAC1BI,EAASjL,IAASkL,cAAgB,GAChCE,EAAWN,KAAKG,EAAQ,yBAA0B,IACrDvN,QAAQ,kBAAmB,IAC3BA,QAAQ,SAAU,KAClB2N,cACH,EAAuBT,EAAiBA,EAAeqsB,QAAU,GAA5DlB,EAAL,aACI2D,EAAiB3D,EAAe/B,aAAajpB,QAAQM,cACzDquB,EACEA,EAAe3F,OAAO,GAAGjI,cAAgB4N,EAAehQ,MAAM,GAChE,IAAI4J,EAAgByC,EAAe/B,aAAa2F,OAC5CpG,GAAc,UAACwC,SAAD,UAACA,EAAgB/B,oBAAjB,aAAC,EAA8Bt8B,YAA/B,QAAuC,IAAI2T,cAC7DkoB,EACEA,GAAeA,EAAYQ,OAAO,GAAGjI,cAAgByH,EAAY7J,MAAM,GACzE,IAAI8J,EAASuC,EAAe/B,aAAaR,OAAO37B,KAC5CwM,EAAenC,YACjB,UAAA0I,EAAegvB,2BAAf,eAAoC1zB,gBAAiB,QACrD2zB,WACEC,GAAU,UAAAlvB,EAAegvB,2BAAf,eAAoCG,WAAY,OAC1DC,GAAW,UAAApvB,EAAegvB,2BAAf,eAAoCK,YAAa,OAC5D1C,EAAa3sB,EAAesvB,YAAc,KAC1CjjC,EAASsC,KAAK48B,qBAChBJ,EAAe/B,aAAa/8B,OAAOE,MACnC4+B,EAAe/B,aAAa/8B,OAAOD,UAGrC,MAAO,CACLqN,eACA81B,YAAa,GAAF,OAAKT,EAAL,cAAyBpG,GACpCA,gBACAC,cACAttB,OAAQ8vB,EACRqE,WAAY5G,EACZ6G,SAAUP,EAAQ3iC,MAClBm/B,WAAYwD,EAAQ9iC,SACpBy/B,SAAUqD,EAAQt9B,OAClB89B,UAAWN,EAAS7iC,MACpBu/B,YAAasD,EAAShjC,SACtBujC,UAAWP,EAASx9B,OACpB05B,yBAA0BR,GAA4BjU,OACtDrW,WACAmsB,aACAiD,mBAAoB5vB,EAAegvB,oBACnCa,YAActvB,KAASP,EAAegvB,qBAElC,YADA,eAEJ9yB,aAAc8D,EAAe9D,aAC7B7P,OAAQigC,KAAUjgC,EAAQ8+B,EAAe/B,aAAa/8B,OAAOD,UAArD,UACDC,GADC,UAEDA,EAFC,YAES8+B,EAAe/B,aAAa/8B,OAAOD,a,6CAIxD,WACE,IAAI4T,EAAiB5K,IAAS6K,oBAC9B,EAAuBD,EAAiBA,EAAeqsB,QAAU,GAA5DlB,EAAL,aACI9+B,EAASsC,KAAK48B,qBAChBJ,EAAe/B,aAAa/8B,OAAOE,MACnC4+B,EAAe/B,aAAa/8B,OAAOD,UAEjCwF,EAASwD,IAASuI,oBAClBvR,EAAWgJ,IAASoI,kBACpBmvB,EAAa3sB,EAAesvB,YAAc,KAG9C,MAAO,CACLjjC,OAAQigC,KAAUjgC,EAAQ8+B,EAAe/B,aAAa/8B,OAAOD,UAArD,UACDC,GADC,UAEDA,EAFC,YAES8+B,EAAe/B,aAAa/8B,OAAOD,UACpDwF,SACAxF,WACAk/B,yBAA0BR,GAA4BG,OACtD2E,mBAAoB5vB,EAAegvB,oBACnCrC,gB,uCAIJ,WACuBv3B,IAAS6K,oBACV+uB,oBAGlBrgC,KAAKmD,SAASnD,KAAKigC,mCAFnBjgC,KAAKmD,SAASnD,KAAKmhC,qC,+BAiFvB,SAAkBC,GAAwB,WACpC/vB,EAAiB5K,IAAS6K,oBACxBkrB,EAAiBnrB,EAAeqsB,SAAW,GAC3CjB,EAAoBD,EAAeA,EAAen5B,OAAS,GAC3Dg+B,EAAgB9vB,KAAKkrB,EAAmB,mBAE9C,OAAOxwB,aAAQ,+BAAgC,CAC7CC,OAAQ,OACRC,KAAMC,KAAKC,UAAU,CACnB3O,OAAQ+I,IAASE,oBACjBgT,KAAMlT,IAASoI,kBACfqK,gBAAiBzS,IAAS6K,oBAAoBxV,GAC9CwlC,YAAa,CACXjB,oBAAqB,CACnB,CACEkB,gBAAiBF,EACjBljC,KAAMijC,EACNI,SAAU,iBAIhBC,oBAAqBh7B,IAASi7B,kBAC9BnrB,MAAO7I,IAAa6I,MACpBC,kBAAmB9I,IAAa8I,sBAGjClK,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAACzE,GAgBL,GAfA8K,QAAQC,IAAI,+BAAgC/K,GAO1CwJ,EADE+vB,IAA2BjF,GAA4BG,OACxC/qB,KAAK1J,EAAQ,sBAGb0J,KAAK1J,EAAQ,kBAK5B+J,KAASP,GAQX,OAPAjR,aAAa,CACXD,UAAWihC,EACX/gC,aAAc,2CAEhB,EAAKjF,MAAMwe,QAAQC,KAAnB,sCACiCnM,IAAa6I,QAOhD,IAAMzD,EAAgBvB,KAAKF,EAAgB,iBACrCswB,EAAoB5uB,KAAMD,EAAe,CAC7C9I,OAAQ,iBAEJ43B,EAA2BrwB,KAC/B1J,EACA,2DACA,GAGF,EAAK1E,SAAS,CACZi8B,aAAcuC,IAAsBC,IAItCv6B,IAAgC,CAAEgK,mBAElC,EAAKwwB,4BAELlvB,QAAQC,IAAI/K,MAEb4E,OAAM,WACLkG,QAAQC,IAAI,UACZ,EAAKxX,MAAMwe,QAAQC,KAAnB,sCACiCnM,IAAa6I,WAG/CsnB,SAAQ,WACP9rB,mB,oBAgCN,WAAS,WACDhE,EAAa/N,KAAKiS,QAClB6uB,EAAW9gC,KAAK48B,qBACpB58B,KAAKhB,MAAM8hC,SACX9gC,KAAKhB,MAAM+9B,YAEPgE,EAAY/gC,KAAK48B,qBACrB58B,KAAKhB,MAAM+hC,UACX/gC,KAAKhB,MAAMm+B,aAEPoD,EAAU5C,KAAUmD,EAAU9gC,KAAKhB,MAAM+9B,YAA/B,UACT+D,GADS,UAETA,EAFS,YAEG9gC,KAAKhB,MAAM+9B,YACxB0D,EAAW9C,KAAUoD,EAAW/gC,KAAKhB,MAAMm+B,aAAhC,UACV4D,GADU,UAEVA,EAFU,YAEG/gC,KAAKhB,MAAMm+B,aAE3B2E,EAAcr7B,IAAS+S,yBAenB4lB,EAAiBp/B,KAAKhB,MAAtBogC,aAER,OACE,yBACE9jC,UAAS,UACPoS,IAAaye,UAAY,oBAAsB,iBADxC,YAELhH,eAAgB,qBAAuB,KAE3C,kBAACkI,GAAA,EAAD,MACC+R,GACC,uBAAK9jC,UAAU,wBACb,wBAAO6C,KAAK,WACV,kBAAC,IAAD,CACErC,GAAG,mCACHsU,IAAK,IAAIjK,KAAc4H,EAAY,CACjCjS,GAAI,8BAEHsK,SACA0L,kBAKVgM,gBACC,oCACE,kBAACsH,GAAA,EAAD,CAAYgI,SAAO,IACnB,kBAACD,GAAA,EAAD,CAAaC,SAAO,KAIxB,yBAAKtxB,GAAG,uBAAuBR,UAAU,gBACtCoS,IAAaq0B,oBACZ,kBAACtlC,GAAA,EAAD,CACEC,kBAAmBolC,EACnBhlC,aAAa,EACbD,YAAY,GACZF,UAAWmlC,EACXllC,oBAAqBoD,KAAKpD,oBAC1BG,YAAa,CACXU,SAAUuC,KAAKhB,MAAMgiC,UACrBtjC,OAAQsC,KAAKhB,MAAM+hC,UACnB1lC,QAAS2E,KAAKhB,MAAM+qB,eACpBxsB,qBAAsBA,GACtBC,aAAciJ,IAASoI,qBAI7B,2BACE,uBAAKmzB,KAAK,QACR,uBAAUzhC,MAAO,CAAExF,OAAQ,WACzB,kBAAC,IAAD,CAASe,GAAG,4CAIlB,kBAAC,GAAD,CACEuV,eAAgB5K,IAAS6K,oBACzByoB,cAAe/5B,KAAKhB,MAAM+6B,cAC1BC,YAAah6B,KAAKhB,MAAMg7B,YACxBttB,OAAQ1M,KAAKhB,MAAM0N,OACnButB,OAAQj6B,KAAKhB,MAAM6hC,WACnB3G,2BACEl6B,KAAKhB,MAAM29B,2BACXR,GAA4BjU,OAE9BiS,MAAOn6B,KAAKhB,MAAMtB,OAClBmU,SAAU7R,KAAKhB,MAAM6S,WAGtButB,GACC,kBAAC,GAAD,CACE3nB,MAAO,SAAC7D,GAAD,OAAU,EAAK0rB,aAAe1rB,GACrCwlB,yBAA0Bp5B,KAAKo5B,2BAIlC6I,iBAA2BrwB,KAAS5R,KAAKhB,MAAMg/B,aAC9C,kBAAC,GAAD,CACEA,WAAYh+B,KAAKhB,MAAMg/B,WACvBpB,qBAAsB58B,KAAK48B,uBAIH,iBAA3B58B,KAAKhB,MAAMkiC,aACV,kBAAC,GAAD,CACEpE,SAAUlrB,KAAS5R,KAAKhB,MAAMg/B,YAC9B9D,2BACEl6B,KAAKhB,MAAM29B,2BACXR,GAA4BjU,OAE9BiS,MACEn6B,KAAKhB,MAAM29B,2BACXR,GAA4BjU,OACxBqY,EACAvgC,KAAKhB,MAAMtB,OAEjB4T,kBAAmBtR,KAAKsR,kBACxBqrB,yBAA0B38B,KAAKhB,MAAM29B,yBACrCC,qBAAsB58B,KAAK48B,qBAC3B/1B,kBAAmB,SAACu6B,GAAD,OACjB,EAAKj+B,SAAS,CACZw5B,yBAA0ByE,KAG9BvE,cAAe,CACbE,WAAY/8B,KAAKhB,MAAM+9B,WACvBjyB,aAAc9K,KAAKhB,MAAM8L,aACzBmyB,mBAAoBj9B,KAAKhB,MAAMi+B,mBAC/BC,SAAUl9B,KAAKhB,MAAMk+B,SACrBC,YAAan9B,KAAKhB,MAAMm+B,eAK9B,yBAAK7hC,UAAU,0BACb,2BACE,kBAAC,KAAD,CACEQ,GAAG,mCACHuc,QAAS3K,IAAa2K,YAK5B,yBAAK/c,UAAU,eACb,uBACEA,UAAU,WACVQ,GAAG,gBACH6G,SAAU3C,KAAK5E,MAAMuH,SACrBxG,QAAS6D,KAAKkiC,mBAEbliC,KAAKhB,MAAM+gC,YACV,kBAAC,IAAD,CACEjkC,GAAE,gCAhJU,WACxB,OAAQ,EAAKkD,MAAMiP,4BACjB,IAAK,OACH,MAAO,sBACT,IAAK,QACH,MAAO,uBACT,IAAK,OACH,MAAO,sBACT,QACE,MAAO,wBATa,IAiJZvQ,OAAQ+iC,IAGV,kBAAC,IAAD,CAAS3kC,GAAG,sCAIlB,yBAAKR,UAAU,8BACb,kBAAC,IAAD,OAGF,kBAACoa,GAAA,EAAD,CACEwB,+BAAgClX,KAAKmiC,+BACrC7qB,2BAA4BtX,KAAKmiC,+BACjC5qB,2BAA4BvX,KAAKoiC,qBACjC/qB,iBAAkBrX,KAAKoiC,qBACvB3qB,MAAO,SAAC7D,GAAD,OAAU,EAAK6rB,iBAAmB7rB,W,GAtgB3BjO,IAAMjF,WA8gBhCg+B,GAAYtiC,UAAY,CACtBof,aAAcnf,IAAUG,KACxBod,QAASvd,IAAU+C,OACnB0Y,cAAezb,IAAUG,KACzBmG,SAAUtG,IAAUE,MAGtBmiC,GAAYxsB,YAAcjM,IAEX4N,mBAAWkb,aAAe5W,aAAWhG,aAAUusB,O,oDC5kBjD2D,GAA2BC,aACtCC,aAA2BC,KAHA,iCADhB,QAMX,WAGWC,GAA2BH,aACtCC,aAA2BG,KATA,iCADhB,QAYX,W,aC8CavwB,qBApDf,YAUG,IATD3W,EASC,EATDA,MACA2Q,EAQC,EARDA,KACAw2B,EAOC,EAPDA,MACAC,EAMC,EANDA,UACAC,EAKC,EALDA,gBACAC,EAIC,EAJDA,YACAC,EAGC,EAHDA,kBAGC,IAFDC,uBAEC,aADDC,kBACC,SAMD,OALAtlC,qBAAU,WACJwnB,gBACFxG,aAAS,wCAAyC,CAAC,kBAEpD,IAED,yBACErjB,UAAS,yBACPkxB,eAAwB,cAAgB,GADjC,YAELrH,eAAgB,oBAAsB,GAFjC,mBAIRrH,gBAAoBklB,GAAmB,kBAAC7V,GAAA,EAAD,MACxC,uBAAajxB,KAAK,KAAKZ,UAAU,SAC9BE,GAEF2Q,EACC,uBAAU7Q,UAAS,eAAU2nC,EAAa,cAAgB,KACvD92B,GAED,KACHw2B,EACC,uBAAUrnC,UAAS,eAAU2nC,EAAa,cAAgB,KACvDN,GAED,KAEHG,EACC,uBAAQ3iB,WAAS,EAAChkB,QAAS4mC,EAAmBznC,UAAU,OACrDwnC,GAED,KAEHF,EACC,wBAAMtnC,UAAU,MAAMa,QAAS0mC,GAC5BD,GAED,S,kbC3CJM,G,iCAGJ,aAAc,yBACZ,eADY,8BAKI,SAACpnC,EAAIoP,GACrB,OAAO,IAAI/E,KAAc,EAAK8L,QAAS,CACrCnW,GAAI,6BAAF,OAA+BA,KAChCsK,OAAO8E,MARE,gCAWM,WAClByT,aAAS,eAAgB,CAAC,oBAC1B5M,cACA,IAAMoxB,EAAa18B,IAAS28B,mBAAqB,GACjDC,aAAiB,CACf9F,SAAUC,IAAU8F,mBACpBnjC,UAAWgjC,OAjBD,6BAyBG,WACf,EAAK/nC,MAAMwe,QAAQC,KAAnB,wBAAyCvT,IAAaiQ,WAxBtD,EAAKvX,MAAQ,GAFD,E,gDAqBd,WACE4f,aAAY,eAAgB,CAAC,sB,oBAO/B,WACE,IAAMukB,EAAa18B,IAAS28B,mBAAqB,GAE7CG,EAAa,GACfC,EAAc,GACdC,EAAW,GAIb,OAAQN,GACN,IAAK,qBACHI,EAAa,kBAAC,IAAD,CAASznC,GAAG,2CACzB0nC,EACE,kBAAC,IAAD,CAAS1nC,GAAG,gDAEd2nC,EAAW,kBAAC,IAAD,CAAS3nC,GAAG,0CACvB,MACF,IAAK,sBACHynC,EACE,kBAAC,IAAD,CAASznC,GAAG,oDAEd0nC,EAAcxjC,KAAK0jC,gBAAgB,sBAArB,OACX,0BAA4Bp9B,IAAaia,eACzCpc,QAAQ,4BAA6BmC,IAAaia,cACrD,MACF,IAAK,2BACHgjB,EACE,kBAAC,IAAD,CAASznC,GAAG,qDAEd0nC,EACE,kBAAC,KAAD,CACE1nC,GAAG,gDACH6nC,oBAAqB,mBAQ7B,OACE,6BACE,kBAAC,GAAD,CACEnoC,MACE+nC,GACA,+DAEFp3B,KACEq3B,GACA,8DAEFV,YA5C4B,6BAAfK,EA4Ca,KAAOM,GAAY,mBAC7CV,kBAAmB/iC,KAAK4jC,eACxBZ,iBAAiB,S,GArFAr9B,IAAMjF,W,IAA3BwiC,G,cACiBj9B,KA2FR4N,mBAAW1B,aAAU+wB,K,4cC/F9BW,G,iCACJ,aAAc,yBACZ,eADY,gCAKM,WAClB9xB,cAEAsxB,aAAiB,CACf9F,SAAUC,IAAUsG,sBACpB3jC,UAAW,wBARb,EAAKnB,MAAQ,GAFD,E,kCAcd,WACE,IAAM+kC,EAAwB,IAAI59B,KAAcnG,KAAKiS,QAAS,CAC5DnW,GAAI,uCACHsK,SACH,OACE,yBACE9K,UAAS,sCACPkxB,eAAwB,cAAgB,KAG1C,uBAAKwX,MAAM,UACT,kBAACC,GAAA,EAAD,CAAc9lC,KAAK,aAErB,2BACE,uBAAK7C,UAAU,eACb,kBAAC4oC,GAAA,EAAD,CACEC,QAC4B,uCAA1BJ,EACI,qFACAA,W,GAlCUp+B,IAAMjF,WA2CpCmjC,GAAgB3xB,YAAcjM,IACf4N,mBAAW1B,aAAU0xB,K,4cCzC9BO,G,kNACgB,WAClBryB,iB,6BAGe,WACf,EAAK3W,MAAMwe,QAAQC,KAAnB,wBAAyCvT,IAAaiQ,W,oCAGxD,WACE,OACE,6BACE,yBACEjb,UAAS,sCACPkxB,eAAwB,cAAgB,KAGzC1O,gBAAoB,kBAACqP,GAAA,EAAD,MACrB,2BACE,uBAAK6W,MAAM,UACT,kBAACC,GAAA,EAAD,CAAc9lC,KAAK,cAGvB,2BACE,uBAAK7C,UAAU,eACb,kBAAC+oC,GAAA,EAAD,CACEF,QAAS,kBAAC,IAAD,CAASroC,GAAG,yCAI3B,2BACE,uBAAKR,UAAU,eACb,kBAAC4oC,GAAA,EAAD,CACEC,QAAS,kBAAC,IAAD,CAASroC,GAAG,qCAK3B,2BACE,uBAAKR,UAAU,eACb,uBACEA,UAAU,WACVQ,GAAG,WACHK,QAAS6D,KAAK4jC,gBAEd,kBAAC,IAAD,CAAS9nC,GAAG,yC,GA7CD6J,IAAMjF,WAuDlBquB,gBAAelb,YAAW1B,aAAUiyB,M,kbC1D7CE,G,iCACJ,WAAYlpC,GAAO,yBACjB,cAAMA,GADW,2BAsBJ,SAACqf,EAAYC,EAAaC,GACvC,IAAQ4pB,GAAgB99B,IAAS+9B,kBAAoB,IAA7CD,YACAhuB,EAAUjQ,IAAViQ,MAEY,cAAhBguB,EAKJ,EAAKnpC,MACFqgB,aAAahB,EAAYC,EAAaC,GACtCrO,MAAK,SAACC,GAAD,OAAcA,EAASC,UAC5BF,MAAK,SAACzE,GAIL,GAFE0J,KAAK1J,EAAQ,6CACb0J,KAAK1J,EAAQ,6CACf,CAKAR,IAA6B,CAAEk9B,YAAa,cAE5C,IAAME,EAAepd,gBAAoBqd,eACnCxqB,EAAmB3I,KAAK1J,EAAQ,wBAAyB,IAC/D,EAAK88B,qBAAqBzqB,EAAkBuqB,QAR1C,EAAKrpC,MAAMwe,QAAQC,KAAnB,sCAAuDtD,OAU1D9J,OAAM,WACL,EAAKrR,MAAMwe,QAAQC,KAAnB,sCAAuDtD,OAvBzDhM,OAAOC,SAASuP,KAAhB,wCAAwDxD,MA3BzC,mCAsDI,SAAChK,EAAUk4B,GAChCp9B,IAA8B,CAAEgT,aAAc9N,IAC9C,EAAKq4B,mBAAmBr4B,EAAUk4B,MAxDjB,iCA2DE,SAACl4B,EAAUk4B,GAC9B,IAAQluB,EAAUjQ,IAAViQ,MACFsuB,EAAOJ,EAAe,SAAW,QACjCpc,EAAO9b,EAAS+N,cAAgB,UAAY,eAC5C5B,EAAMnC,EAAK,kBACFsuB,EADE,YACMxc,EADN,mBACqB9R,GADrB,kBAEFsuB,EAFE,YAEMxc,GAEvByc,aAAwB,CACtBD,OACA3qB,iBAAkB3N,IAGpB,EAAKnR,MAAMwe,QAAQC,KAAKnB,MAtExB,EAAK1Z,MAAQ,CACXuX,MAAO,GACPwuB,YAAa,GACbC,aAAa,EACbC,gBAAgB,EAChBC,aAAc,GACdC,kBAAmB,GACnBC,aAAc,IATC,E,6CAanB,WACEplC,KAAK5E,MAAM0c,eAAc,GACzB,IAAM4C,EAAc9P,aAAmB,UACjC6P,EAAa7P,aAAmB,SAChC+P,EAAU/P,aAAmB,WAEnC5K,KAAKyb,aAAahB,EAAYC,EAAaC,K,oBAwD7C,WACE,OAAO,S,GA7EgBja,aAiF3B4jC,GAAaloC,UAAY,CACvB0b,cAAezb,IAAUG,KACzBif,aAAcpf,IAAUG,KACxBod,QAASvd,IAAU+C,QAGN2vB,oBAAe5W,aAAWmsB,KChGrCe,GAAa,EACF,SAASC,KAmCtB,OA3BA3nC,qBAAU,YAYV,SAAS4nC,EAAc9hC,GAErB,KADA4hC,GACiB,GAEf,YADA5hC,IAGG8G,OAAOi7B,OAKVj7B,OAAOi7B,OAAOC,QAJd9wB,YAAW,WACT4wB,EAAc9hC,KACb,KAjBL8hC,EAAc,WAXY,IAClBG,KAAqBp/B,IAArBo/B,oBAENn7B,OAAOC,SAASuP,KAAO2rB,QAcxB,IAiBI,K,0eCOT,OAAsDp/B,IAA9Cq/B,SAAR,mBAA+C,GAA/C,IAAoBl3B,uBAApB,OAAqC,MAArC,GACAm3B,YAAgC,QAAnBn3B,IAEb,IAAQo3B,GAAyDv/B,IAAzDu/B,iBAAkBC,GAAuCx/B,IAAvCw/B,oBAAqBjf,GAAkBvgB,IAAlBugB,cAEzCkf,GAAYC,cAAiB,kBACjC,4FAGF,SAASC,KAKP,OAJAtoC,qBAAU,WACRkb,gBACC,IAEI,qC,IAGHiW,G,iCACJ,WAAY1zB,GAAO,0BACjB,cAAMA,IACD4D,MAAQ,CACXknC,YAAkC,YAArBL,GACbM,WAAYzB,gBAJG,E,6CAQnB,WACQ0B,gBAAWC,gBACf1nB,aAAS,eAAgB,CAAC,iBAGxBmnB,GACFlsB,IAAQC,KAAK,4BAIX7Z,KAAKhB,MAAMknC,aAAiC,aAAlBrf,KAEvBvgB,IAAakQ,mBAChBzE,eAICyZ,gBACHua,GAAUO,a,kCAGd,WACQF,gBAAWC,gBACfznB,aAAY,eAAgB,CAAC,mB,6BAIjC,WAGE,QADwB2nB,eAAgBC,OAE/B,kBAACT,GAAD,MAEF,kBAAC,GAAD,Q,oBAGT,WACE,OAAO,6BAAM/lC,KAAKymC,uB,GA9CI/lC,aAkD1B,SAASgmC,KAUP,OAAO,qCAPmBH,eAAgBC,OAIjC,kBAAC,GAAD,MAFE,kBAACT,GAAD,OAQb,IAkDMY,GAAuB5X,cAlDV,kBACjB,kBAAC,IAAD,CAAQnV,QAASA,KACf,kBAAC,WAAD,CAAU8d,SAAU,kBAACuO,GAAD,OAClB,kBAAC,IAAD,KACE,kBAAC,IAAD,CACEW,OAAK,EACLC,KAAK,UACLC,UAAWnqB,eAAgB+pB,GAAsB5X,KAEnD,kBAAC,IAAD,CAAO8X,OAAK,EAACC,KAAK,kBAAkBC,UAAWxC,KAC/C,kBAAC,IAAD,CACEsC,OAAK,EACLC,KAAK,wBACLC,UAAWC,KAEb,kBAAC,IAAD,CAAOH,OAAK,EAACC,KAAK,gBAAgBC,UAAWf,KAC7C,kBAAC,IAAD,CAAOa,OAAK,EAACC,KAAK,4BAA4BC,UAAWE,KACzD,kBAAC,IAAD,CACEJ,OAAK,EACLC,KAAK,6BACLC,UAAWrE,KAEb,kBAAC,IAAD,CACEmE,OAAK,EACLC,KAAK,wBACLC,UAAWzE,KAEb,kBAAC,IAAD,CACEuE,OAAK,EACLC,KAAK,8BACLC,UAAWG,OAEb,kBAAC,IAAD,CACEL,OAAK,EACLC,KAAK,yBACLC,UAAWI,OAEb,kBAAC,IAAD,CAAON,OAAK,EAACC,KAAK,wBAAwBC,UAAW5D,KACrD,kBAAC,IAAD,CACE0D,OAAK,EACLC,KAAK,0BACLC,UAAWjD,KAEb,kBAAC,IAAD,CAAO+C,OAAK,EAACC,KAAK,wBAAwBC,UAAW1C,OAGzD,kBAAC,KAAD,UAMJ+C,IAASC,OACP,kBAACT,GAAD,MACArjC,SAASC,eAAe,mB;;;;;gICpL1B,uOAOO,SAASqf,IACd,YAC8B,IAArBrY,OAAO0Y,gBACwB,IAA/B1Y,OAAOwY,oBAEPhX,QAAQC,QAAQ,CAACzB,OAAO0Y,UAAW1Y,OAAOwY,sBAE5ChX,QAAQs7B,IAAI,CACjBC,EACE,mEAEFA,EAAW,8DACV76B,OAAM,SAAClN,GACRa,YAAa,CACXD,UAAW,mBACXE,aAAcd,EACde,UAAW,iBAQV,SAASinC,IACd,OAAOx7B,QAAQs7B,IAAI,CACjB,4GAGC56B,OAAM,SAAClN,GACRa,YAAa,CACXD,UAAW,mBACXE,aAAcd,EACde,UAAW,yBAMjB,SAASgnC,EAAWE,GAClB,OAAO,IAAIz7B,SAAQ,SAACC,EAASy7B,GAC3B,IAAMC,EAAQh6B,IAAag6B,MACvBC,EAASrkC,SAASskC,cAAc,UACpCtkC,SAASkL,qBAAqB,QAAQ,GAAGq5B,YAAYF,GACrDA,EAAOnhB,OAAS,SAAUtb,GACxBc,EAAQd,IAEVy8B,EAAOG,QAAU,SAAU58B,GACzBu8B,EAAOv8B,IAETy8B,EAAOD,MAAQA,EACfC,EAAO3rC,IAAMwrC,KAIV,SAASpgB,IACd,OAAO,IAAIrb,SAAQ,SAACC,GACU,aAAxB1I,SAASykC,WACX/7B,IAEAzB,OAAOyI,iBAAiB,QAAQ,WAC9BhH,UASD,SAASg6B,EAAiBgC,GAC/B,IAAMC,EAAgBvV,eAAUsV,GAEhC,OADAC,EAAc3B,QAAU0B,EACjBC,K","file":"donate.87ad5646a39acf8fa34c.bundle.js","sourcesContent":["import React from 'react';\nimport { Sheet, BodyText, Button, HeadingText } from '@paypalcorp/pp-react';\nimport { StyleSheet, css } from 'aphrodite';\nimport PropTypes from 'prop-types';\nimport { Row, Col } from '@paypalcorp/pp-react';\nimport { appendCdnHostName } from '../utility/geoUtils';\nimport { Message } from '@paypalcorp/worldready-react';\n\nconst styles = StyleSheet.create({\n modalContent: {\n maxWidth: 600,\n margin: '0 auto',\n },\n okButton: {\n marginTop: 36,\n },\n msgMargin: {\n marginTop: '24px',\n },\n});\n\nexport default function DonateGiftAidHowItWorksOverlay(props) {\n const { orgName } = props;\n\n return (\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n
\n \n
\n \n
\n
\n
\n
\n \n );\n}\n\nDonateGiftAidHowItWorksOverlay.propTypes = {\n orgName: PropTypes.string,\n isOpen: PropTypes.bool,\n closeOverlay: PropTypes.func,\n};\n","import PropTypes from 'prop-types';\nimport React, { useState, useEffect } from 'react';\nimport { Checkbox, CaptionText, Button } from '@paypalcorp/pp-react';\nimport DonateGiftAidHowItWorksOverlay from './DonateGiftAidHowItWorksOverlay';\nimport { appendCdnHostName } from '../utility/geoUtils';\nimport { BodyText } from '@paypalcorp/pp-react-text';\nimport MessageWithHTML from '../components/MessageWithHtml';\nimport { Message } from '@paypalcorp/worldready-react';\nimport { normalizeNumber, formatCurrency } from '../utility/formator';\n\nconst DonateGiftAid = ({\n isAlreadyEnrolled,\n isChecked,\n handleGiftAidOption,\n addressData,\n showAddress,\n giftaidInfo,\n}) => {\n const [showHelp, setShowHelp] = useState(isChecked);\n const [checked, setChecked] = useState(isChecked);\n const [isHowItWorksOverlayOpen, setIsHowItWorksOverlayOpen] = useState(false);\n const { donateGiftPercentage, donationCode, currency, amount, orgName } =\n giftaidInfo;\n\n useEffect(() => {\n if (isAlreadyEnrolled) {\n setShowHelp(false);\n }\n }, [isAlreadyEnrolled]);\n\n const handleCheckbox = (env) => {\n let checkedValue = env.target.checked;\n setChecked(checkedValue);\n setShowHelp(checkedValue);\n handleGiftAidOption(checkedValue);\n };\n\n const openHowItWorksOverlay = () => {\n setIsHowItWorksOverlayOpen(true);\n };\n\n const closeHowItWorksOverlay = () => {\n setIsHowItWorksOverlayOpen(false);\n };\n\n const getGiftAidExtraAmount = () => {\n const value = (donateGiftPercentage * normalizeNumber(amount)).toFixed(2);\n const extraAmount = formatCurrency({ value, currency: donationCode });\n return extraAmount;\n };\n\n return (\n
\n
\n \n \n \n \n \n \n \n\n {isAlreadyEnrolled && (\n
\n \n \n \n \n
\n )}\n {!isAlreadyEnrolled && (\n }\n name=\"giftaidCheckbox\"\n id=\"giftaidCheckbox\"\n className=\"inline-block\"\n onChange={handleCheckbox}\n checked={checked}\n />\n )}\n\n {showHelp && (\n
\n
\n \n \n \n
\n {showAddress && (\n
\n \n \n \n
    \n
  • {addressData.fullName}
  • \n
  • {addressData.address1}
  • \n
  • {addressData.address2}
  • \n
  • {addressData.city}
  • \n
  • \n {addressData.state}, {addressData.zip}\n
  • \n
\n
\n )}\n
\n \n \n \n
\n
\n )}\n\n \n
\n
\n );\n};\n\nDonateGiftAid.propTypes = {\n isAlreadyEnrolled: PropTypes.bool,\n showAddress: PropTypes.bool,\n addressData: PropTypes.any,\n isChecked: PropTypes.bool,\n handleGiftAidOption: PropTypes.func,\n giftaidInfo: PropTypes.object,\n isMember: PropTypes.bool,\n};\n\nexport default DonateGiftAid;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { CriticalIcon } from '@paypalcorp/pp-react-icons';\nimport { PAYPAL_THEME } from '@paypalcorp/pp-react-theme';\nimport { trackErrorIM } from '../../fpti/fpti';\n\nconst { sysColorUnselectedContrast } = PAYPAL_THEME;\n\nconst STYLES = {\n error: {\n color: sysColorUnselectedContrast,\n fontSize: '13px',\n },\n criticalIcon: {\n color: '#D20000',\n position: 'relative',\n fontSize: 'unset',\n marginRight: '5px',\n },\n};\n\n/**\n * Component for displaying amount validation error message\n */\nclass AmountValidationError extends Component {\n componentDidMount() {\n const { errorSourceField, errorString, errorCode } = this.props;\n\n trackErrorIM({\n errorCode: errorCode || 'DONATION_AMOUNT_VALIDATION_ERROR',\n errorMessage: errorString,\n fieldName: errorSourceField,\n });\n }\n render() {\n const { errorString } = this.props;\n\n if (!errorString) {\n return null;\n }\n\n return (\n \n \n \n {errorString}\n \n \n );\n }\n}\n\nAmountValidationError.propTypes = {\n errorString: PropTypes.string,\n errorSourceField: PropTypes.string,\n errorCode: PropTypes.string,\n donationAmount: PropTypes.string,\n};\n\nexport default AmountValidationError;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { localsMessages } from '../../utility/getTemplateData';\nimport AmountValidationError from './amountValidationError.js';\n\nconst messages = localsMessages('guest/crossBorder');\n\nconst STYLES = {\n container: {\n padding: '30px 0 30px 0',\n zIndex: 1,\n },\n calcRow: {\n display: 'inline-block',\n width: '40%',\n verticalAlign: 'top',\n },\n calcRowLeft: {\n margin: '0 1% 0 9%',\n },\n calcRowRight: {\n margin: '0 9% 0 1%',\n },\n calcLabel: {\n padding: '0 0 8px 5px',\n },\n inputCol: {\n position: 'relative',\n },\n input: {\n outlineOffset: '-1px',\n fontSize: 14,\n paddingLeft: 20,\n },\n inputLeft: {\n paddingRight: '100px',\n },\n inputRight: {\n paddingRight: '60px',\n },\n fromCode: {\n position: 'absolute',\n right: '1px',\n top: '1px',\n height: '40px',\n width: '90px',\n borderTop: 0,\n borderRight: 0,\n borderBottom: 0,\n },\n toCode: {\n position: 'absolute',\n right: '15px',\n top: 0,\n lineHeight: '42px',\n },\n conversion: {\n textAlign: 'center',\n paddingTop: '30px',\n },\n disabled: {\n opacity: '0.5',\n },\n inputCurrencyLeft: {\n position: 'absolute',\n marginTop: 12,\n marginLeft: 10,\n fontSize: 14,\n },\n hasError: {\n color: 'red',\n },\n};\n\nclass Calculator extends React.Component {\n constructor() {\n super();\n const { label: { youDonate, charityGet, conversion } = {} } =\n messages || {};\n this.state = {\n youDonateLabel: youDonate,\n charityGetLabel: charityGet,\n conversionLabel: conversion,\n };\n }\n\n componentDidMount() {\n this.setFromSymbol(this.props.toCode);\n }\n\n setFromSymbol = (toCode) => {\n const symbol =\n (this.props.currencySymbols && this.props.currencySymbols[toCode]) || '';\n this.setState({\n fromSymbol: symbol,\n });\n\n let padding = symbol.length * 10 + 10;\n document.getElementById('fromAmount').style.paddingLeft = `${padding}px`;\n };\n\n validateAmount = (ev, callback) => {\n let val = ev.target.value;\n let rgx = /^[0-9]*[.|,]?[0-9]?[0-9]?$/;\n\n if (val === '.' || val === ',' || !val.match(rgx)) {\n return;\n }\n callback(val);\n };\n\n handleFromChange = (ev) => {\n this.validateAmount(ev, this.props.handleFromChange);\n };\n\n handleToChange = (ev) => {\n this.validateAmount(ev, this.props.handleToChange);\n };\n\n handleFromCurrencyChange = (ev) => {\n let val = ev.target.value;\n this.props.handleFromCurrencyChange(val);\n this.setFromSymbol(val);\n };\n\n handleAmountFocus = (event) => {\n this.props.handleAmountFocus(event);\n };\n\n getLocalizedAmount = (amount) => {\n return `${amount}`.replace(/[.|,]/i, this.props.decimalPoint);\n };\n\n render() {\n const placeholder = this.getLocalizedAmount('0.00');\n const fromAmount = this.getLocalizedAmount(this.props.fromAmount);\n const toAmount = this.getLocalizedAmount(this.props.toAmount);\n const conversionRate = `${this.getLocalizedAmount('1.00')} ${\n this.props.fromCode\n } = ${this.getLocalizedAmount(this.props.conversionRate)} ${\n this.props.toCode\n }`;\n\n const calcLabelStyle = {\n ...STYLES.calcLabel,\n ...(this.props.toError ? STYLES.hasError : {}),\n };\n\n return (\n \n
\n \n
{this.state.youDonateLabel}
\n
\n
\n \n {this.state.fromSymbol}\n \n \n
\n \n {this.props.availableCurrencies.map((c) => (\n \n ))}\n \n
\n
\n \n
{this.state.charityGetLabel}
\n
\n
\n \n {this.props.charityAmountSymbol}\n \n \n
\n {this.props.toCode}\n
\n {this.props.toError && (\n \n )}\n \n \n\n {this.props.conversionRate && (\n \n {this.state.conversionLabel} {conversionRate}\n \n )}\n \n );\n }\n}\n\nCalculator.propTypes = {\n availableCurrencies: PropTypes.array.isRequired,\n currencySymbols: PropTypes.object.isRequired,\n decimalPoint: PropTypes.string.isRequired,\n conversionRate: PropTypes.string.isRequired,\n fromAmount: PropTypes.string.isRequired,\n fromCode: PropTypes.string.isRequired,\n fromDisabled: PropTypes.bool.isRequired,\n toAmount: PropTypes.string.isRequired,\n toCode: PropTypes.string.isRequired,\n toDisabled: PropTypes.bool.isRequired,\n handleFromChange: PropTypes.func.isRequired,\n handleFromCurrencyChange: PropTypes.func.isRequired,\n handleToChange: PropTypes.func.isRequired,\n charityAmountSymbol: PropTypes.string,\n handleAmountFocus: PropTypes.func,\n toError: PropTypes.bool,\n toErrorMessage: PropTypes.string,\n};\n\nexport default Calculator;\n","import React, { useState, useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { PresetAmounts } from '@paypalcorp/donate-react';\nimport templateData from '../../utility/getTemplateData';\nimport * as AppActions from '../../actions/AppActions';\nimport AppStore from '../../stores/AppStore';\nimport {\n isOptInCoverFee,\n shouldSelectPresetAmount,\n} from '../coverFee/feeUtils';\nimport { formatCurrency, getCurrencyParts } from '../../utility/formator';\nimport { formatAmountFromServerDNW, getNormalizedNumber } from './amountUtils';\nimport { getGriffin, __getInitialData } from '../../utility/formator';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FPTI_TAGS, LINK_NAME } from '../../fpti/fptiConstants';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\n\nfunction PresetAmountRow(props) {\n const worldready = useContext(WorldReadyContext);\n let presetOther = new MessageFormat(worldready, {\n id: 'common.amount.amount.presetOther',\n }).format();\n let placeholderOtherAmount = new MessageFormat(worldready, {\n id: 'common.amount.amount.placeholderOtherAmount',\n }).format();\n\n const getSelectedOption = () => {\n if (AppStore.getDonationAmountType() === 'preset') {\n return AppStore.getDonationAmount();\n } else if (AppStore.getDonationAmountType() === 'userinput') {\n return 'Other';\n }\n return '';\n };\n\n const [presetAmounts, setPresetAmounts] = useState(\n templateData.presetAmounts\n ),\n [selectedOption, setSelectedOption] = useState(getSelectedOption()),\n [showOtherAmount, setShowOtherAmount] = useState(\n AppStore.getDonationAmountType() === 'userinput' ? true : false\n );\n\n const handlePresetAmountClick = (value) => {\n setSelectedOption(value);\n if (value !== 'Other') {\n // To be consistent with the hero currency component\n // we need to update donationAmount in store with only\n // normalized number\n const selectedAmount = getNormalizedNumber(value);\n props.handleAmountChange(`${selectedAmount}`);\n // Highlight the selected button\n setShowOtherAmount(false);\n setPresetAmounts(templateData.presetAmounts);\n // Clear the errors from amount field\n props.hideValidationError();\n\n AppActions.updateDonationAmountType('preset');\n } else {\n props.handleAmountChange('');\n setShowOtherAmount(true);\n }\n };\n\n useEffect(() => {\n // In case user opts in for cover fee and goes back to\n // landing page from guest page, we need to restore back\n // user's original entered amount\n const amountBeforeFee = AppStore.getAmountBeforeFee();\n if (amountBeforeFee && isOptInCoverFee()) {\n if (shouldSelectPresetAmount(amountBeforeFee)) {\n handlePresetAmountClick(amountBeforeFee);\n }\n }\n }, []);\n\n const handleAmountChange = (amount) => {\n let checkValue = parseFloat(amount.replace(',', '.').replace(' ', ''));\n\n if (AppStore.getDonationAmountType() === 'preset' && checkValue > 0) {\n AppActions.updateSelectedPresetButtonId('other');\n AppActions.updateDonationAmountType('userinput');\n props.handleAmountChange('0.00');\n trackLinkClick(LINK_NAME.PRESET_AMOUNT, {\n additionalData: {\n [FPTI_TAGS.SELECTED_PRESET_BUTTON_ID]: 'other',\n },\n });\n }\n if (checkValue > 0) {\n AppActions.updateDonationAmountType('userinput');\n // To be consistent with the hero currency component\n // we need to update donationAmount in store with only\n // normalized number\n const normalizedAmount = getNormalizedNumber(amount);\n props.handleAmountChange(`${normalizedAmount}`);\n }\n };\n\n const handleAmountFocus = () => {\n props.handleAmountFocus();\n };\n\n const getPresetOptions = (values, symbol, charityAmountCode) => {\n const [firstParts = {}] = getCurrencyParts();\n const rightSymbol = firstParts.$ !== 'symbol';\n const result = values.map((value) => {\n let amountDisplayValue;\n if (rightSymbol) {\n amountDisplayValue = symbol\n ? `${formatAmountFromServerDNW(value, charityAmountCode, {\n noDecimals: true,\n })} ${symbol}`\n : `${formatAmountFromServerDNW(value, charityAmountCode, {\n noDecimals: true,\n })}`;\n } else {\n amountDisplayValue = symbol\n ? `${symbol}${formatAmountFromServerDNW(value, charityAmountCode, {\n noDecimals: true,\n })}`\n : `${formatAmountFromServerDNW(value, charityAmountCode, {\n noDecimals: true,\n })}`;\n }\n return {\n label: amountDisplayValue,\n secondaryLabel: charityAmountCode,\n value: formatAmountFromServerDNW(value, charityAmountCode),\n };\n });\n return [...result, { label: presetOther, value: 'Other' }];\n };\n\n // Since only normalized amount is being saved in store\n // we need to format the amount before displaying in the\n // other amount field\n const amountFieldValue =\n AppStore.getDonationAmountType() === 'preset'\n ? ''\n : formatCurrency({\n currency: props.charityAmountCode,\n value: Number(props.charityAmount),\n });\n const presetOptions = getPresetOptions(\n presetAmounts,\n props.charityAmountSymbol,\n props.charityAmountCode\n );\n\n return (\n <>\n \n \n );\n}\n\nPresetAmountRow.propTypes = {\n hideValidationError: PropTypes.func,\n handleAmountChange: PropTypes.func,\n handleAmountFocus: PropTypes.func,\n charityAmount: PropTypes.string,\n showValidationError: PropTypes.bool,\n charityAmountSymbol: PropTypes.string,\n charityAmountCode: PropTypes.string,\n decimalPoint: PropTypes.string,\n isAmountEditable: PropTypes.bool,\n validationErrorMessage: PropTypes.string,\n validationErrorCode: PropTypes.string,\n};\nexport default PresetAmountRow;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport _debounce from 'lodash/debounce';\nimport AppStore from '../stores/AppStore';\nimport * as AppActions from '../actions/AppActions';\nimport TemplateData from '../utility/getTemplateData';\nimport { fetcher } from '../utility/domUtils';\nimport { SingleAmount } from '@paypalcorp/donate-react';\nimport { BodyText } from '@paypalcorp/pp-react';\nimport Calculator from '../components/amount/calculator';\nimport PresetAmountRow from './amount/PresetAmountRow';\nimport {\n setFeeAmountInStore,\n optOutCoverFee,\n isAtLandingPage,\n isOptInCoverFee,\n} from './coverFee/feeUtils';\nimport AppDispatcher from '../dispatcher/AppDispatcher';\nimport { getParameterByName } from '../utility/queryStringHelper';\nimport { __getInitialData } from '../utility/formator';\nimport { trackErrorIM } from '../fpti/fpti';\nimport { addFeature } from '../fpti/helper';\nimport { FEATURES } from '../fpti/fptiConstants';\nimport { getWorldReady } from '../utility/worldReadyUtils';\nimport { MessageFormat } from '@paypalcorp/worldready';\n\nclass AmountWrapper extends React.Component {\n constructor(props) {\n super(props);\n const currencyObj = JSON.parse(\n document.getElementById('currencyLists').innerHTML || {}\n );\n const { currencies: currencyLists, symbols: currencySymbols } =\n currencyObj || {};\n const html = document.getElementsByTagName('html')[0];\n this.directionality = html.getAttribute('dir');\n\n let userCountry = TemplateData.donorIpCountry;\n let availableCurrencies = currencyLists[userCountry] || currencyLists.US;\n let userAmountCode = availableCurrencies[0];\n let charityAmountCode = AppStore.getDonationCode();\n let isEditable = !!TemplateData.donationAmountEditable;\n // let showCBCalculator = TemplateData.pxp && TemplateData.pxp.calculator && TemplateData.pxp.calculator.experiment || false;\n\n let isCalculator = false;\n // Disabled Calculator\n // let isCalculator =\n // \tisEditable &&\n // \tuserAmountCode !== charityAmountCode &&\n // \t(showCBCalculator || TemplateData.isCorpIp);\n\n this.state = {\n charityAmountCode,\n charityAmount: AppStore.getDonationAmount() || '',\n charityAmountSymbol: AppStore.getDonationSymbol(),\n charityDisabled: false,\n\n userCountry,\n userAmountCode,\n userAmount: '',\n userDisabled: false,\n\n availableCurrencies,\n currencySymbols,\n isCalculator,\n decimalPoint: TemplateData.donationDecimalPoint || '.',\n conversionRate: '',\n isAmountEditable: isEditable,\n\n showValidationError: props.showValidationError || false,\n validationErrorMessage: props.validationErrorMessage || '',\n validationErrorCode: props.validationErrorCode || '',\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (this.state.showValidationError !== nextProps.showValidationError) {\n this.setState({\n showValidationError: nextProps.showValidationError,\n validationErrorMessage: nextProps.validationErrorMessage,\n validationErrorCode: nextProps.validationErrorCode,\n });\n }\n }\n\n componentDidMount = () => {\n // Watch for amount change for the case that donor opts in to cover fee\n // and clicks back button to go back to landing page\n // as we need to restore donor's original entered amount\n this.dispatcherCharityAmount = AppDispatcher.register((payload) => {\n if (payload.action && payload.action.actionType === 'CHANGE_AMOUNT') {\n const { action: { item: { amount = 0 } = {} } = {} } = payload;\n this.setState({\n charityAmount: amount,\n });\n }\n });\n\n if (this.state.isAmountEditable) {\n addFeature(FEATURES.DONATION_AMOUNT_EDITABLE);\n }\n };\n\n componentWillUnmount = () => {\n AppDispatcher.unregister(this.dispatcherCharityAmount);\n };\n\n isGuestReviewPage = () => {\n return (\n window.location.pathname.includes('guest') ||\n ![undefined, null].includes(getParameterByName('signup'))\n );\n };\n\n normalizeAmount = (amount) => {\n return isNaN(amount) ? 0 : amount;\n };\n\n setAppAmount = (amount) => {\n AppActions.changeAmount({\n amount,\n });\n };\n\n getConversionRate = (state, exchangeRate) => {\n let rate =\n exchangeRate.base_currency_code === state.userAmountCode\n ? exchangeRate.quote_amount\n : 1 / exchangeRate.quote_amount;\n return rate.toFixed(2);\n };\n\n getConversionRequest = (state, params, callback) => {\n this.getConversionRequest = _debounce((st, par, fn) => {\n const queryParams = {\n fromCountry: st.userCountry,\n fromCurrency: st.userAmountCode,\n toCurrency: st.charityAmountCode,\n ...par,\n };\n\n if (queryParams.fromAmount) {\n queryParams.fromAmount = this.normalizeAmount(queryParams.fromAmount);\n } else {\n queryParams.toAmount = this.normalizeAmount(queryParams.toAmount);\n }\n const url = '/donate/calculate-foreign-exchange';\n this.props.conversionStatus(true);\n Promise.resolve(\n fetcher(url, {\n method: 'POST',\n body: JSON.stringify(queryParams),\n })\n )\n .then((response) => response.json())\n .then(({ result }) => {\n this.props.conversionStatus(false);\n fn(result);\n })\n .catch(() => {\n this.props.conversionStatus(false);\n let amount = queryParams.fromAmount || queryParams.toAmount || '';\n amount += '';\n fn({\n target: { value: amount },\n source: { value: amount },\n exchange_rate: {\n base_currency_code: queryParams.userAmountCode,\n quote_amount: 1,\n },\n });\n });\n }, 500);\n\n this.getConversionRequest(state, params, callback);\n };\n\n /*\n * getConversion\n * Getting conversion rate for calculator\n */\n getConversion = (state, params, fn) => {\n // Conversion is only required for calculator\n if (state.isCalculator) {\n this.getConversionRequest(state, params, fn);\n } else {\n const amount = params.fromAmount || params.toAmount || '';\n fn({\n target: { value: amount },\n source: { value: amount },\n exchange_rate: {\n base_currency_code: state.userAmountCode,\n quote_amount: 1,\n },\n });\n }\n };\n\n handleAmountChange = (amount) => {\n this.setState({ charityAmount: amount });\n this.setAppAmount(amount);\n\n // let recurringStatus = AppStore.getDonationRecurring() === 'checked';\n // if (recurringStatus) {\n // if (isAmountGreaterThanZero(amount)) {\n // $('#donateNowAmt').html(this.state.charityAmountSymbol + amount);\n // } else {\n // $('#donateNowAmt').html(' ');\n // }\n // }\n\n if (isAtLandingPage()) {\n // Compute fee amount and update store\n setFeeAmountInStore();\n // Let landing page know that fee amount displayed needs to be updated\n this.props.updateFeeAmount();\n } else {\n // Since user updates the amount in the guest page\n // we should opt user out for cover the fee in case\n // they go back to landing page\n if (isOptInCoverFee()) {\n optOutCoverFee();\n }\n\n // In case user selects a preset button but update the amount\n // in review page, the donation amount type should now be\n // \"userinput\"\n if (AppStore.getDonationAmountType() === 'preset') {\n AppActions.updateDonationAmountType('userinput');\n }\n }\n };\n\n handleAmountFocus() {\n this.props.onFocus();\n }\n\n handleUserAmountChange = (amount) => {\n let snapshot = {\n userAmount: amount,\n charityDisabled: true,\n };\n let state = { ...this.state, ...snapshot };\n this.setState(snapshot);\n\n this.getConversion(\n state,\n {\n fromAmount: state.userAmount,\n },\n ({ target, exchange_rate }) => {\n this.setState({\n conversionRate: this.getConversionRate(state, exchange_rate),\n charityAmount: target.value,\n charityDisabled: false,\n });\n this.setAppAmount(target.value);\n }\n );\n };\n\n handleUserCurrencyChange = (currencyCode) => {\n let snapshot = {\n userAmountCode: currencyCode,\n charityDisabled: true,\n };\n let state = { ...this.state, ...snapshot };\n this.setState(snapshot);\n\n this.getConversion(\n state,\n {\n fromAmount: state.userAmount,\n },\n ({ target, exchange_rate }) => {\n state.charityAmount = target.value;\n this.setState({\n conversionRate: this.getConversionRate(state, exchange_rate),\n charityAmount: state.charityAmount,\n charityDisabled: false,\n });\n this.setAppAmount(target.value);\n }\n );\n };\n\n handleCharityAmountChange = (amount) => {\n let snapshot = {\n charityAmount: amount,\n userDisabled: true,\n };\n let state = { ...this.state, ...snapshot };\n this.setState(snapshot);\n\n this.getConversion(\n state,\n {\n toAmount: state.charityAmount,\n },\n ({ source, exchange_rate }) => {\n this.setState({\n conversionRate: this.getConversionRate(state, exchange_rate),\n userAmount: source.value,\n userDisabled: false,\n });\n this.setAppAmount(state.charityAmount);\n }\n );\n };\n\n handleTrackError = (errorCode, errorString, errorSourceField) => {\n trackErrorIM({\n errorCode: errorCode || 'DONATION_AMOUNT_VALIDATION_ERROR',\n errorMessage: errorString,\n fieldName: errorSourceField,\n });\n };\n\n shouldShowPresetAmounts = () => {\n // Should only show preset amount options in landing\n // page not review page to make the experience consistent\n // with member flow. It works better for cover the fees as well\n\n const presetAmountsCondition =\n TemplateData.enablePresetAmounts &&\n !this.state.isCalculator &&\n !this.isGuestReviewPage();\n\n if (presetAmountsCondition) {\n addFeature(FEATURES.PRESET);\n }\n\n return presetAmountsCondition;\n };\n\n renderPresetAmounts = () => {\n return (\n \n );\n };\n\n getRecurringLabel = () => {\n const worldReady = getWorldReady();\n switch (this.props.selectedRecurringFrequency) {\n case 'Week':\n return new MessageFormat(worldReady, {\n id: 'guest.guestForm.label.perWeek',\n }).format();\n case 'Month':\n return new MessageFormat(worldReady, {\n id: 'guest.guestForm.label.perMonth',\n }).format();\n case 'Year':\n return new MessageFormat(worldReady, {\n id: 'guest.guestForm.label.perYear',\n }).format();\n default:\n return null;\n }\n };\n\n render() {\n if (this.shouldShowPresetAmounts()) {\n return (\n
\n {this.renderPresetAmounts()}\n
\n );\n }\n\n return (\n
\n {this.state.isCalculator ? (\n \n ) : (\n <>\n \n \n {AppStore.getDonationRecurring() === 'checked' && (\n {this.getRecurringLabel()}\n )}\n
\n \n )}\n \n );\n }\n}\n\nAmountWrapper.propTypes = {\n conversionStatus: PropTypes.func,\n showValidationError: PropTypes.bool,\n hideValidationError: PropTypes.func,\n validationErrorMessage: PropTypes.string,\n validationErrorCode: PropTypes.string,\n validateDonationAmount: PropTypes.func,\n onFocus: PropTypes.func,\n updateFeeAmount: PropTypes.func,\n selectedRecurringFrequency: PropTypes.string,\n};\n\nexport default AmountWrapper;\n","/**\n * Card security code input used for adding a card\n */\nimport React from 'react';\nimport { TextInput } from '@paypalcorp/pp-react';\nimport PropTypes from 'prop-types';\n\nimport { cardSpecPropType } from 'prop-validators';\n\nclass CardSecurityCode extends React.Component {\n static propTypes = {\n cardSpec: cardSpecPropType,\n label: PropTypes.string.isRequired,\n errorMessage: PropTypes.string,\n handleChangeSecurityCode: PropTypes.func.isRequired,\n handleFocus: PropTypes.func,\n handleBlur: PropTypes.func,\n dir: PropTypes.string,\n helperText: PropTypes.string,\n };\n\n static defaultProps = {\n handleFocus: () => {},\n handleBlur: () => {},\n };\n\n state = { value: '', showIsRequiredError: false };\n\n /**\n * Handle changing the csc\n * @param {String} securityCode - the csc\n * @return {String} securityCode - numbers only\n */\n handleChangeSecurityCode = ({ target: { value: securityCode } }) => {\n securityCode = securityCode.replace(/\\D+/g, '');\n this.setState({ value: securityCode });\n this.handleCheckForValue(securityCode);\n this.props.handleChangeSecurityCode(securityCode);\n return securityCode;\n };\n\n /**\n * Check for a security code value\n * If the field is required, we should show that this field needs a value\n * @param {String} securityCode - the csc\n */\n handleCheckForValue = (securityCode) => {\n const cscSpecs = this.props.cardSpec.fields.csc;\n const isRequired = cscSpecs.required;\n this.setState({ showIsRequiredError: isRequired && !securityCode });\n };\n\n /**\n * Call parent's handleFocus\n * @param {String} securityCode - the csc\n */\n handleFocus = (securityCode) => {\n this.props.handleFocus(securityCode);\n };\n\n /**\n * Check for a security code value and call parent's handleBlur\n * @param {String} securityCode - the csc\n */\n handleBlur = ({ target: { value: securityCode } }) => {\n this.handleCheckForValue(securityCode);\n this.props.handleBlur(securityCode);\n };\n\n render() {\n const cscSpecs = this.props.cardSpec.fields.csc;\n // let helpText = '●'.repeat(cscSpecs.maxlength)\n let { errorMessage } = this.props;\n\n return (\n
\n \n
\n );\n }\n}\n\nexport default CardSecurityCode;\n","import React, { Component } from 'react';\nimport AppStore from '../../stores/AppStore';\nimport _get from 'lodash/get';\nimport { getPaymentCardNetwork } from '../../utility/card-utils';\nimport { StyleSheet, css } from 'aphrodite';\nimport _isEmpty from 'lodash/isEmpty';\nimport { hideSpinnerOverlay } from '../../utility/helper';\nimport { appendCdnHostName } from '../../utility/geoUtils';\nimport withTheme from '../../components/withTheme';\nimport { BodyText, HeadingText } from '@paypalcorp/pp-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\n\nconst LOADING_GIF_SOURCE = appendCdnHostName(\n '/ui-web/money-icons/partnerships/mbLoader_256_sm.gif'\n);\n\nconst STYLES = StyleSheet.create({\n spinnerAlign: {\n margin: '30px auto 30px',\n },\n cardImg: {\n marginTop: '24px',\n },\n});\n\nclass ThreeDSSpinner extends Component {\n constructor(props) {\n super(props);\n this.state = {\n cardImg: null,\n network: null,\n };\n }\n\n setNetworkDetails = () => {\n const fundingOptions = AppStore.getFundingOptions();\n let cardImg = _get(\n fundingOptions,\n 'sources[0].payment_card.issuer.thumbnail_logo_url'\n );\n let network = getPaymentCardNetwork(\n _get(fundingOptions, 'sources[0].payment_card')\n );\n let myData = AppStore.getAllData() || {};\n if (\n cardImg === null ||\n _isEmpty(cardImg) ||\n typeof cardImg === 'undefined'\n ) {\n const cardType = _get(myData, 'cardSpec.cardSpec.type', '')\n .replace(/[.,_]|\\s\\(.*\\)/g, '')\n .replace(/[\\s_]/g, '-')\n .toLowerCase();\n cardImg = appendCdnHostName(\n `/digitalassets/c/consumer/p2p/funding-sources/${cardType}.png`\n );\n }\n if (\n network === null ||\n _isEmpty(network) ||\n typeof network === 'undefined'\n ) {\n network = myData.cardSpec.cardSpec.type.replace(/[_]/g, ' ');\n }\n this.setState({ cardImg, network });\n };\n\n componentDidMount() {\n // Hide the donate spinner in the background\n // to prevent double spinners\n hideSpinnerOverlay();\n this.setNetworkDetails();\n }\n\n render() {\n const worldReady = this.context;\n return (\n
\n
\n
\n {/*
*/}\n
\n \n
\n \n {new MessageFormat(worldReady, {\n id: 'common.threeDSecure.confirmingWith',\n }).format({\n network: this.state.network,\n })}\n \n
\n {this.state.cardImg ? (\n \"Card\n ) : (\n ''\n )}\n
\n
\n \n {new MessageFormat(worldReady, {\n id: 'common.threeDSecure.wontTakeLong',\n }).format()}\n \n \n {new MessageFormat(worldReady, {\n id: 'common.threeDSecure.DoNotCloseOrRefresh',\n }).format()}\n \n
\n
\n
\n
\n );\n }\n}\n\nThreeDSSpinner.contextType = WorldReadyContext;\n\nexport default withTheme(ThreeDSSpinner);\n","import React, { Component } from 'react';\nimport AppStore from '../../stores/AppStore';\nimport { withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport _get from 'lodash/get';\nimport _find from 'lodash/find';\nimport { trackThreeDsDdcFailure } from '../../fpti/fpti';\nimport { FPTI_TAGS } from '../../fpti/fptiConstants';\n\nclass ThreeDSDeviceDataCollection extends Component {\n static propTypes = {\n onThreeDSDDCComplete: PropTypes.func,\n };\n\n getThreeDSParams() {\n const fundingOptions = AppStore.getFundingOptions();\n const contingencies = _get(fundingOptions, 'contingencies') || [];\n const threeDSContingency =\n _find(contingencies, { action: '3D_SECURE_DATA_COLLECTION_REQUIRED' }) ||\n {};\n\n return threeDSContingency;\n }\n\n componentDidMount() {\n // 'message' is passed after 3DS Submit is completed\n window.addEventListener('message', this.handleDDCEvent);\n\n const { three_ds_reference_id: threeDS2ReferenceId } =\n this.getThreeDSParams();\n\n if (this.refs[threeDS2ReferenceId]) {\n try {\n this.refs[threeDS2ReferenceId].submit();\n } catch (e) {\n console.log('e ', e);\n }\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener('message', this.handleDDCEvent);\n }\n\n handleDDCEvent = (event) => {\n const eventOrigin = _get(event, 'origin', '');\n if (eventOrigin.includes('cardinalcommerce.com')) {\n let data = null;\n try {\n data = JSON.parse(event.data);\n } catch (exception) {\n // Error handler incase parsing goes wrong\n data = {};\n }\n\n const messageType = _get(data, 'MessageType', '');\n if (messageType === 'profile.completed') {\n this.onDDCComplete(event);\n } else {\n trackThreeDsDdcFailure({\n [FPTI_TAGS.STATUS]: messageType,\n });\n console.log('DDC not completed with message type: ', messageType);\n }\n }\n };\n\n onDDCComplete = (event) => {\n this.props.onThreeDSDDCComplete(event);\n };\n\n render() {\n const {\n device_data_collection_url: deviceDataCollectionUrl,\n jwt,\n three_ds_reference_id: threeDS2ReferenceId,\n } = this.getThreeDSParams();\n\n if (!deviceDataCollectionUrl) {\n return null;\n }\n\n return (\n
\n \n
\n \n );\n };\n\n render() {\n return (\n \n {this.getModalBody()}\n \n );\n }\n}\n\nThreeDSIframe.contextType = WorldReadyContext;\n\nThreeDSIframe.propTypes = {\n onStepUpAuthComplete: PropTypes.func,\n icon: PropTypes.string,\n hideModal: PropTypes.func,\n isOpen: PropTypes.bool,\n onClose: PropTypes.func,\n};\nexport default withTheme(ThreeDSIframe);\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Portal } from 'react-portal';\nimport ThreeDSSpinner from './ThreeDSSpinner';\nimport ThreeDSDeviceDataCollection from './ThreeDSDeviceDataCollection';\nimport ThreeDSIframe from './ThreeDSIframe';\nimport * as AppActions from '../../actions/AppActions';\nimport _get from 'lodash/get';\nimport { fetcher } from '../../utility/domUtils';\nimport { FPTI_TAGS } from '../../fpti/fptiConstants';\nimport templateData from '../../utility/getTemplateData';\nimport {\n trackThreeDsDdcComplete,\n trackThreeDsDdcStart,\n trackThreeDsLookupComplete,\n trackThreeDsLookupStart,\n} from '../../fpti/fpti';\n\nclass ThreeDSContainer extends Component {\n constructor(props) {\n super(props);\n this.state = {\n showThreeDSIframe: false,\n showThreeDSSpinner: false,\n showThreeDSDeviceDataCollection: false,\n threeDSDCCStartTime: null,\n };\n }\n\n componentDidMount() {\n this.props.onRef(this);\n }\n\n componentWillUnmount() {\n this.props.onRef(undefined);\n }\n\n initializeThreeDS() {\n let startTime = new Date().getTime();\n this.setState({\n showThreeDSDeviceDataCollection: true,\n showThreeDSSpinner: true,\n threeDSDCCStartTime: startTime,\n });\n\n const fptiData = {\n [FPTI_TAGS.THREE_DS_DCC_START_TIME]: startTime,\n [FPTI_TAGS.THREE_DS_SPINNER_START_TIME]: startTime,\n };\n trackThreeDsDdcStart(fptiData);\n }\n\n handleThreeDSDDCComplete = () => {\n this.setState({\n showThreeDSDeviceDataCollection: false,\n });\n\n const threeDSDCCEndTime = new Date().getTime();\n const fptiData = {\n [FPTI_TAGS.THREE_DS_DCC_START_TIME]: this.state.threeDSDCCStartTime,\n [FPTI_TAGS.THREE_DS_DCC_END_TIME]: threeDSDCCEndTime,\n [FPTI_TAGS.THREE_DS_SPINNER_START_TIME]: this.state.threeDSDCCStartTime,\n [FPTI_TAGS.THREE_DS_SPINNER_END_TIME]: threeDSDCCEndTime,\n };\n trackThreeDsDdcComplete(fptiData);\n this.resolveThreeDSContingency();\n };\n\n resolveThreeDSContingency = () => {\n trackThreeDsLookupStart({\n [FPTI_TAGS.THREE_DS_LOOKUP_START_TIME]: new Date().getTime(),\n });\n\n fetcher('/donate/guest/resolve-threeds-contingency', {\n method: 'POST',\n body: JSON.stringify({\n token: templateData.token,\n onboardingEnabled: templateData.onboardingEnabled,\n }),\n })\n .then((response) => response.json())\n .then((result) => {\n this.hideThreeDSSpinner();\n\n const threeDSContingency = _get(result, 'data.threeDSContingency');\n const resolved = _get(threeDSContingency, 'threeDSContingencyResolved');\n\n trackThreeDsLookupComplete({\n timestamp: {\n [FPTI_TAGS.THREE_DS_LOOKUP_END_TIME]: new Date().getTime(),\n },\n [FPTI_TAGS.CONTINGENCY_RESOLVED]: resolved,\n [FPTI_TAGS.URL]: _get(\n threeDSContingency,\n 'threeDS2Contingency.3d_secure_redirect_link'\n ),\n [FPTI_TAGS.ACTION]: _get(\n threeDSContingency,\n 'threeDS2Contingency.action'\n ),\n });\n\n if (resolved) {\n // 3DS Contingency resolved without StepUp Auth\n this.props.onThreeDSStepUpAuthNotRequired();\n\n return;\n }\n // Save threeDS data and show 3DS iframe\n AppActions.updateThreeDSData(threeDSContingency);\n this.showThreeDSIframe();\n })\n .catch((e) => {\n // Clear 3DS data\n AppActions.updateThreeDSData({});\n this.hideThreeDSIframe();\n this.props.onThreeDSFailure();\n });\n };\n\n handleThreeDSStepUpAuthComplete = ({ confirmationStatus = false, error }) => {\n if (confirmationStatus && confirmationStatus === 'threeDS-success') {\n this.props.onThreeDSStepUpAuthSuccess();\n } else {\n this.props.onThreeDSStepUpAuthFailure();\n return;\n }\n };\n\n showThreeDSIframe = () => {\n this.setState({\n showThreeDSIframe: true,\n });\n };\n\n hideThreeDSIframe = () => {\n this.setState({\n showThreeDSIframe: false,\n });\n };\n\n showThreeDSSpinner = () => {\n this.setState({\n showThreeDSSpinner: true,\n });\n };\n hideThreeDSSpinner = () => {\n this.setState({\n showThreeDSSpinner: false,\n });\n };\n\n render() {\n return (\n
\n {this.state.showThreeDSSpinner && (\n \n \n \n )}\n\n {this.state.showThreeDSDeviceDataCollection && (\n \n )}\n\n {this.state.showThreeDSIframe && (\n \n )}\n
\n );\n }\n}\n\nThreeDSContainer.propTypes = {\n onThreeDSStepUpAuthNotRequired: PropTypes.func,\n onThreeDSStepUpAuthSuccess: PropTypes.func,\n onThreeDSStepUpAuthFailure: PropTypes.func,\n onThreeDSFailure: PropTypes.func,\n onRef: PropTypes.func,\n toggleSpinner: PropTypes.func,\n};\n\nexport default ThreeDSContainer;\n","import React, { Component } from 'react';\nimport templateData from '../../utility/getTemplateData';\nimport {\n handleGuestCountryChange,\n hideSpinnerOverlay,\n showSpinnerOverlay,\n} from '../../utility/helper';\nimport * as DonateAppActions from '../../actions/AppActions';\nimport { getInitialData } from '../../utility/formator';\nimport AppStore from '../../stores/AppStore';\nimport { getParametersFromUrl } from '../../utility/queryStringHelper';\nimport PropTypes from 'prop-types';\nimport { startCustomCPLTrackingForConfirmationPage } from '../../utility/cpl';\nimport {\n fetcher,\n scrollElementIntoView,\n objectOrArrayToQueryString,\n} from '../../utility/domUtils';\nimport isEmpty from 'lodash/isEmpty';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FPTI_TAGS, LINK_NAME } from '../../fpti/fptiConstants';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { getWorldReady } from '../../utility/worldReadyUtils';\n\nconst initialData = getInitialData();\n\nconst ERROR_ELEMENT_SELECTOR = [\n '.vx_has-error-with-message',\n '.service_error_holder',\n].join();\n\nfunction withDonate(WrappedComponent) {\n const worldReady = getWorldReady();\n\n return class extends Component {\n static propTypes = {\n history: PropTypes.object,\n };\n\n constructor(props) {\n super(props);\n this.country = initialData.selectedCountry;\n }\n\n handleCountryChange = (country) => {\n if (country !== this.country) {\n this.toggleSpinner(true);\n DonateAppActions.changeCountry({\n country: country,\n });\n this.country = country;\n\n // Beacons for country change\n trackLinkClick(LINK_NAME.CHANGE_COUNTRY, {\n additionalData: {\n [FPTI_TAGS.COUNTRY]: country,\n },\n });\n\n let { token, signUp = false } = templateData;\n let url = signUp\n ? `/donate?token=${token}&signup=true&country.x=${country}&locale.x=${country}`\n : `/donate?token=${token}&country.x=${country}&locale.x=${country}&countryChange=true&clientState=/donate/guest?token=${token}`;\n\n handleGuestCountryChange(url);\n }\n };\n\n /*\n * showing and hiding spinner\n */\n toggleSpinner = (isSpinner = false) => {\n if (isSpinner) {\n showSpinnerOverlay();\n } else {\n hideSpinnerOverlay();\n }\n };\n\n // handles scrolling screen to the error\n handleScrollToError = () => {\n scrollElementIntoView(ERROR_ELEMENT_SELECTOR);\n return;\n };\n\n getDonateGuestUrl = () => {\n const { token, country, language } = templateData;\n\n let url = `/donate/guest?token=${token}`;\n if (country) {\n url = url + `&country.x=${country}`;\n }\n\n if (country && language) {\n url = url + `&locale.x=${country}_${language}`;\n }\n\n return url;\n };\n\n getFormData() {\n return AppStore.getFormData();\n }\n\n saveFormData(formData) {\n DonateAppActions.saveFormData(formData);\n }\n\n showErrorOnLoad() {\n const url = window.location.href;\n let params = getParametersFromUrl(url);\n\n if (params.showErrorOnLoad) {\n if (params.showErrorOnLoad === 'fulfillment') {\n // TODO: update error code to the actual fullfilment error code\n let errorCode = 'WSM_TRANSACTION_FAILED_DUE_TO_INVALID_CARD_DATA';\n let errorMsgs = [\n {\n key: 0,\n value: new MessageFormat(worldReady, {\n id: `errors.service.${errorCode}`,\n }).format(),\n },\n ];\n\n // adding delay to wait for the dispatcher to get registered in ServerErrors\n setTimeout(\n () =>\n DonateAppActions.updateServerErrors({ serverErrors: errorMsgs }),\n 250\n );\n }\n // delete params.showErrorOnLoad;\n\n // const query = $.param(params);\n // const cleanedUrl = `/donate/guest/?${query}`;\n // window.history.replaceState({}, document.title, cleanedUrl);\n }\n }\n\n doFulfilment = (params = {}) => {\n const { securityCode } = params;\n this.toggleSpinner(true);\n\n fetcher('/donate/guest/fullfilment', {\n method: 'POST',\n body: JSON.stringify({\n token: templateData.token,\n note: AppStore.getDonationNote(),\n fundingOptionId: AppStore.getFundingOptions().id,\n email: AppStore.getEmail(),\n billingAddress: AppStore.getBillingAddress(),\n giftAidItFlag: AppStore.getGiftaidItFlagStatus() || false,\n card: { securityCode },\n onboardingEnabled: templateData.onboardingEnabled,\n selectedRecurringFrequency: AppStore.getSelectedRecurringFrequency(),\n }),\n })\n .then((response) => response.json())\n .then((result) => {\n if (result.code === 'WSM_PAYMENT_DENIED') {\n this.toggleSpinner(false);\n this.props.history.push(\n `/donate/error/payment?token=${templateData.token}`\n );\n return;\n } else if (result.status === 'redirect') {\n this.toggleSpinner(false);\n window.location.href = result.url;\n return;\n } else if (\n result.code === 'WSM_TRANSACTION_FAILED_DUE_TO_INVALID_CARD_DATA'\n ) {\n // fulfillment error\n const { token, country } = templateData;\n\n let clientState = encodeURIComponent(\n `/donate/guest?token=${token}&showErrorOnLoad=fulfillment`\n );\n window.location.href = `/donate?token=${token}&country.x=${country}&locale.x=${country}&clientState=${clientState}`;\n return;\n } else if (result.data && result.data.confirmationData) {\n startCustomCPLTrackingForConfirmationPage();\n this.toggleSpinner(false);\n const { token } = templateData;\n let confirmationData = result.data.confirmationData || {};\n const { selectedRecurringFrequency } = confirmationData;\n const queryParams = objectOrArrayToQueryString({\n token,\n selectedRecurringFrequency,\n });\n\n DonateAppActions.updateConfirmation({\n confirmation: confirmationData,\n });\n if (confirmationData.isOfacPending) {\n this.props.history.push(`/donate/guest/pending?${queryParams}`);\n } else {\n this.props.history.push(\n `/donate/guest/confirmation?${queryParams}`\n );\n }\n } else {\n this.toggleSpinner(false);\n this.props.history.push(\n `/donate/error/payment?token=${templateData.token}`\n );\n }\n })\n .catch(() => {\n this.toggleSpinner(false);\n this.props.history.push(\n `/donate/error/payment?token=${templateData.token}`\n );\n });\n };\n\n createOrder = (params) => {\n const token = templateData.token;\n\n fetcher(`/donate/orders?dtoken=${token}`, {\n method: 'POST',\n body: JSON.stringify(params),\n })\n .then((response) => response.json())\n .then((result) => {\n console.log('result ', result);\n\n if (!isEmpty(result.cartUrl)) {\n window.location.href = result.cartUrl;\n } else {\n this.props.history.push(\n `/donate/error/payment?token=${templateData.token}`\n );\n }\n })\n .catch(() => {\n this.toggleSpinner(false);\n this.props.history.push(\n `/donate/error/payment?token=${templateData.token}`\n );\n });\n };\n\n captureOrder = (orderToken, donateToken, payerID) => {\n return fetcher(\n `/donate/orders/${orderToken}/capture?dtoken=${donateToken}&PayerID=${payerID}`,\n {\n method: 'POST',\n }\n );\n };\n\n render() {\n return (\n \n );\n }\n };\n}\n\nexport default withDonate;\n","/**\n * Card Utilities\n * For use with linking a card\n *\n * - get card type [visa, mastercard, amex, discover, maestro, unionpay] based on the card number\n */\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { getWorldReady } from './worldReadyUtils';\n\nexport const defaultCardSpec = {\n type: 'card',\n fields: {\n ccNumber: {\n required: true,\n pattern: '4[0-9]{12}(?:[0-9]{3})?',\n maxlength: 19,\n },\n expirationDate: {\n required: true,\n pattern: '(0[1-9]|1[012])[/]((20)[0-9]{2}|[0-9]{2})',\n maxlength: 7,\n },\n csc: {\n required: true,\n pattern: '[0-9]*',\n maxlength: 3,\n minlength: 3,\n },\n },\n};\n\n/**\n * Get the card type based on the card number\n * @param {Object} cardSpecs - the card specifications based on user's locale\n * @param {String} cardNumber - the valid card number (numbers only)\n * @return {Object} cardType - the card type specs for a specific card\n */\nexport function getSpecificCardSpec({ cardTypes }, cardNumber) {\n cardNumber = cardNumber.replace(/\\D+/g, '');\n\n for (let card in cardTypes) {\n let cardSpec = cardTypes[card];\n if (\n new RegExp(`^${cardSpec.fields.ccNumber.autodetect}$`).test(cardNumber)\n ) {\n return cardSpec;\n }\n }\n return defaultCardSpec;\n}\n\nconst PAYMENT_CARDS = {\n VISA: 'VISA',\n MASTERCARD: 'MASTERCARD',\n MASTER_CARD: 'MASTER_CARD',\n MAESTRO: 'MAESTRO',\n AMEX: 'AMEX',\n DISCOVER: 'DISCOVER',\n JCB: 'JCB',\n CHINA_UNION_PAY: 'CHINA_UNION_PAY',\n};\n\nexport function getPaymentCardNetwork(source) {\n const worldReady = getWorldReady();\n switch (source.network) {\n case PAYMENT_CARDS.VISA:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.visa',\n }).format();\n case PAYMENT_CARDS.MASTERCARD:\n case PAYMENT_CARDS.MASTER_CARD:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.mastercard',\n }).format();\n case PAYMENT_CARDS.MAESTRO:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.maestro',\n }).format();\n case PAYMENT_CARDS.AMEX:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.amex',\n }).format();\n case PAYMENT_CARDS.DISCOVER:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.discover',\n }).format();\n case PAYMENT_CARDS.CHINA_UNION_PAY:\n return new MessageFormat(worldReady, {\n id: 'common.fundingTypes.fundingType.china_union_pay',\n }).format();\n default:\n return source.network;\n }\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CriticalIcon } from '@paypalcorp/pp-react-icons';\n\nexport default function NoteFieldError(props) {\n const errorText = props.errorText;\n\n if (!errorText) {\n return null;\n }\n return (\n
\n \n \n \n {errorText}\n \n \n
\n );\n}\n\nNoteFieldError.propTypes = {\n errorText: PropTypes.string,\n};\n","import React, { useState, useEffect, useRef, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport templateData from '../utility/getTemplateData';\nimport * as AppActions from '../actions/AppActions';\nimport AppStore from '../stores/AppStore';\nimport { addClass, removeClass } from '../utility/domUtils';\nimport {\n isExternalFlow,\n isCampaigns,\n} from '../utility/productIntegrationUtils';\nimport isEmpty from 'lodash/isEmpty';\nimport { EVENT_NAME } from '../utility/constants';\nimport { IconButton, TextArea, BodyText, AddIcon } from '@paypalcorp/pp-react';\nimport NoteFieldError from './NoteFieldError';\nimport { trackLinkClick } from '../fpti/fpti';\nimport { LINK_NAME } from '../fpti/fptiConstants';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\n\nconst MAX_CHAR_LIMIT = 250;\n\nfunction NoteComponent(props) {\n const worldReady = useContext(WorldReadyContext);\n\n let label = new MessageFormat(worldReady, {\n id: 'common.note.note.label',\n }).format();\n let lengthLimit = new MessageFormat(worldReady, {\n id: 'common.note.note.error.lengthLimit',\n }).format();\n let campaignsLabel = new MessageFormat(worldReady, {\n id: 'common.note.note.campaigns.label',\n }).format();\n\n let providedLabel = isCampaigns() ? campaignsLabel : label;\n\n if (templateData.charityNoteEnabled && templateData.charityNoteLabel) {\n providedLabel = templateData.charityNoteLabel;\n }\n\n if (props.label) {\n providedLabel = props.label;\n }\n\n const [donationNote, setDonationNote] = useState(\n AppStore.getDonationNote() || templateData.donationNote || ''\n );\n const initialNoteLabel = isEmpty(donationNote) ? providedLabel : donationNote;\n\n const [showLabel, setShowLabel] = useState(true);\n const [showError, setShowError] = useState(false);\n const [noteLabel, setNoteLabel] = useState(initialNoteLabel);\n const textAreaEl = useRef(null);\n\n const isNoteTextPresent = donationNote.length > 0 ? true : false;\n\n useEffect(() => {\n if (!showLabel && !isEmpty(textAreaEl)) {\n textAreaEl.current.focus();\n }\n }, [showLabel]);\n useEffect(() => {\n if (isNoteTextPresent) {\n setShowLabel(false);\n }\n }, []);\n useEffect(() => {\n if (props.isNotePreview) {\n setNoteLabel(initialNoteLabel);\n }\n }, [initialNoteLabel]);\n\n const directionality = templateData.contextLocalityDir;\n\n const handleClick = () => {\n trackLinkClick(LINK_NAME.NOTE_PAD, {\n eventName: isExternalFlow()\n ? EVENT_NAME.DW_GIVING_DONATE_SETUP_COMMENT_PRESSED\n : '',\n });\n setShowLabel(false);\n };\n\n const handleBlur = (event) => {\n const note = event.target.value;\n\n // Remove all whitespaces\n if (!isEmpty(note) && !isEmpty(note.trim())) {\n AppActions.changeNote({ note });\n setNoteLabel(note);\n } else {\n AppActions.changeNote({ note: '' });\n setNoteLabel(providedLabel);\n setShowLabel(true);\n }\n };\n\n const showNoteFieldError = () => {\n setShowError(true);\n };\n\n const hideNoteFieldError = () => {\n setShowError(false);\n };\n\n const handleOnChange = (event) => {\n const value = event.target.value;\n setDonationNote(value);\n\n if (value && value.length >= MAX_CHAR_LIMIT) {\n addClass('.note_wrap', ['animated', 'shake']);\n setTimeout(() => {\n removeClass('.note_wrap', ['animated', 'shake']);\n }, 1000);\n showNoteFieldError();\n } else {\n hideNoteFieldError();\n }\n };\n\n return (\n
\n \n {showLabel ? (\n \n ) : (\n
\n \n
\n )}\n\n {showError && showLabel && }\n
\n \n );\n}\n\nNoteComponent.propTypes = {\n label: PropTypes.string,\n isNotePreview: PropTypes.bool,\n};\n\nexport default NoteComponent;\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport * as AppActions from '../../actions/AppActions';\nimport { Checkbox, Tooltip } from '@paypalcorp/pp-react';\nimport { EVENT_NAME } from '../../utility/constants';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FEATURES, LINK_NAME } from '../../fpti/fptiConstants';\nimport { addFeature } from '../../fpti/helper';\n\nconst AnonymousCheckbox = ({\n content,\n optInStatus,\n handleAnonymousDonationChange,\n}) => {\n useEffect(() => {\n addFeature(FEATURES.ANONYMOUS);\n }, []);\n\n const handleChange = (event) => {\n const isChecked = event.target.checked,\n checkboxStatus = isChecked ? 'checked' : 'unchecked';\n\n AppActions.changeAnonymousStatus({\n anonymousStatus: checkboxStatus,\n });\n\n handleAnonymousDonationChange(isChecked);\n };\n\n const trackTooltipOpen = () => {\n trackLinkClick(LINK_NAME.ANONYMOUS_TOOLTIP, {\n eventName: EVENT_NAME.DW_GIVING_DONATE_SETUP_TOOLTIP_PRESSED,\n });\n };\n\n return (\n \n \n )\n }\n />\n \n );\n};\n\nAnonymousCheckbox.propTypes = {\n content: PropTypes.object,\n optInStatus: PropTypes.bool,\n handleAnonymousDonationChange: PropTypes.func,\n};\n\nexport default AnonymousCheckbox;\n","function setDonateLoaded() {\n document.getElementsByTagName('body')[0].setAttribute('donate-loaded', true);\n}\n\nsetDonateLoaded();\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from '@paypalcorp/pp-react';\nimport { appendCdnHostName } from '../../../lib/geoUtils';\nimport { Message } from '@paypalcorp/worldready-react';\n\nclass NextButtonComponent extends React.Component {\n render() {\n return (\n \n \n \n \n );\n }\n}\n\nNextButtonComponent.propTypes = {\n label: PropTypes.string,\n disabled: PropTypes.bool,\n handleNext: PropTypes.func,\n};\n\nexport default NextButtonComponent;\n","import location from '@paypalcorp/instance-location';\n\nexport const appendCdnHostName = (url) => {\n return `https://${location.getCdnHostName()}${url}`;\n};\n\nexport const getCdnHostName = () => {\n return `https://${location.getCdnHostName()}`;\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from '@paypalcorp/pp-react';\nimport { Message } from '@paypalcorp/worldready-react';\n\nclass OneTouchNextButton extends React.Component {\n render() {\n return (\n \n \n \n );\n }\n}\n\nOneTouchNextButton.propTypes = {\n label: PropTypes.string,\n disabled: PropTypes.bool,\n handleNext: PropTypes.func,\n};\n\nexport default OneTouchNextButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from '@paypalcorp/pp-react';\nimport { addFeature } from '../fpti/helper';\nimport { FEATURES } from '../fpti/fptiConstants';\nimport { Message } from '@paypalcorp/worldready-react';\n\nclass GuestButton extends React.Component {\n componentDidMount() {\n addFeature(FEATURES.GUEST);\n }\n\n render() {\n return (\n \n \n \n );\n }\n}\n\nGuestButton.propTypes = {\n label: PropTypes.string,\n disabled: PropTypes.bool,\n handleGuest: PropTypes.func,\n};\n\nexport default GuestButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { BodyText, Alert } from '@paypalcorp/pp-react';\nimport MessageWithHTML from '../MessageWithHtml';\nexport default function RecurringInfo({ orgName, amount }) {\n return (\n \n \n \n \n \n );\n}\n\nRecurringInfo.propTypes = {\n orgName: PropTypes.string,\n amount: PropTypes.string,\n};\n","/* eslint-disable */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { StyleSheet, css } from '../../utility/paypalAphrodite';\nimport * as AppActions from '../../actions/AppActions';\nimport AppStore from '../../stores/AppStore';\nimport AppDispatcher from '../../dispatcher/AppDispatcher';\nimport TemplateData from '../../utility/getTemplateData';\nimport { isLTR as isLeftToRight } from '../../utility/helper';\nimport { loadBodyMovin } from '../../utility/lazyLoader';\nimport { formatAmount } from '../../utility/formator';\nimport { sanitizeOrgName } from '../../utility/domUtils';\nimport RecurringInfo from './RecurringInfo';\nimport { Checkbox, Tooltip, Modal } from '@paypalcorp/pp-react';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FEATURES, FPTI_TAGS, LINK_NAME } from '../../fpti/fptiConstants';\nimport { Row, Col } from '@paypalcorp/pp-react';\nimport { addFeature } from '../../fpti/helper';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\n\nconst orgname = TemplateData.donationName ? TemplateData.donationName : '';\nconst isLTR = isLeftToRight();\nlet isContinue = false;\n\nconst styles = StyleSheet.create({\n wrapper: {},\n centered: {\n display: 'flex',\n justifyContent: 'center',\n },\n toolWrapper: {\n display: 'inline-block',\n position: 'relative',\n margin: '0',\n paddingBottom: '10px',\n },\n animationWrapper: {\n width: '100%',\n position: 'absolute',\n height: 125,\n marginTop: -125,\n },\n animationContainer: {\n transform: isLTR ? 'scaleX(1)' : 'scaleX(-1)',\n height: 250,\n width: 250,\n marginLeft: -35,\n },\n recurringButton: {\n width: '100%',\n padding: 20,\n borderRadius: '3rem',\n fontSize: 15,\n marginBottom: 0,\n },\n borderOnly: {\n background: 'transparent',\n color: '#0070ba',\n },\n divider: {\n position: 'relative',\n borderBottom: '1px solid #ccc',\n textAlign: 'center',\n margin: '0 0 20px',\n },\n dividerContent: {\n position: 'relative',\n textAlign: 'center',\n backgroundColor: '#fff',\n display: 'inline-block',\n margin: 0,\n top: 9,\n padding: '0 10px',\n fontSize: 18,\n },\n verticalCentered: {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nclass RecurringCheckBox extends React.Component {\n constructor(props) {\n super(props);\n const amount = AppStore.getDonationAmount() || '';\n const currency = AppStore.getDonationCode() || '';\n this.state = {\n showhelp: this.props.status,\n formatedAmount: formatAmount({ currency: currency, value: amount }),\n };\n }\n\n componentDidMount = () => {\n this.dispatcherToken = AppDispatcher.register((payload) => {\n if (payload.action && payload.action.actionType === 'CHANGE_AMOUNT') {\n const { action: { item: { amount = 0 } = {} } = {} } = payload;\n this.updateAmount(amount);\n }\n });\n\n addFeature(FEATURES.RECURRING);\n };\n\n componentWillUnmount = () => {\n isContinue = this.props.continue;\n AppDispatcher.unregister(this.dispatcherToken);\n };\n\n loadAnimation(display) {\n if (!display) {\n return;\n }\n loadBodyMovin().then(() => {\n // Animation is displayed after bodymovin files are downloaded\n // On slow connections, user may click the checkbox a few times before\n // the JS files are downloaded\n if (this.state.isAnimating) {\n return;\n }\n const animationData = window.heartsAnimationData;\n const bodymovinLibrary = window.bodymovin;\n if (!bodymovinLibrary || !animationData) {\n return;\n }\n this.setState({\n isAnimating: true,\n });\n\n bodymovinLibrary.loadAnimation({\n // eslint-disable-line\n container: document.getElementById('animationContainer'),\n renderer: 'svg',\n loop: 1,\n autoplay: true,\n animationData,\n });\n // Destroying with timeout\n setTimeout(() => {\n bodymovinLibrary.destroy(); // eslint-disable-line\n this.setState({\n isAnimating: false,\n });\n }, 1000);\n });\n }\n\n updateAmount = (value) => {\n const currency = AppStore.getDonationCode() || '';\n this.setState({ formatedAmount: formatAmount({ currency, value }) });\n };\n\n handleChange = (ev) => {\n let { showhelp } = this.state;\n let isChecked = ev.target.checked;\n let chkBxStatus = isChecked ? 'checked' : 'unchecked';\n\n this.loadAnimation(isChecked);\n\n AppActions.changeRecurring({\n recurring: chkBxStatus,\n });\n\n trackLinkClick(LINK_NAME.RECURRING_CHECKBOX, {\n additionalData: {\n [FPTI_TAGS.CHECKBOX]: chkBxStatus,\n },\n });\n\n this.props.handleChange(isChecked);\n\n this.setState({ showhelp: (showhelp = !showhelp) });\n };\n\n createMarkup = (content) => {\n return { __html: content };\n };\n\n render() {\n const checked = { checked: false };\n if (this.props.status) {\n checked.checked = true;\n }\n const worldReady = this.context;\n return (\n \n \n \n
\n {isContinue ? (\n
\n \n {new MessageFormat(worldReady, {\n id: 'common.recurring-checkbox.rp.perMonth',\n }).format()}\n \n
\n ) : (\n
\n
\n \n
\n
\n
\n \n
\n
\n \n )}\n \n \n {this.props.status && !isContinue && (\n \n \n \n )}\n \n
\n );\n }\n}\nRecurringCheckBox.contextType = WorldReadyContext;\n\nRecurringCheckBox.propTypes = {\n handleChange: PropTypes.func,\n status: PropTypes.bool,\n continue: PropTypes.bool,\n};\n\nRecurringCheckBox.defaultProps = {\n handleChange: () => {},\n};\n\nexport default RecurringCheckBox;\n","import React, { useState, useEffect, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { DropdownMenu } from '@paypalcorp/pp-react-dropdown-menu';\nimport * as AppActions from '../../actions/AppActions';\nimport appStore from '../../stores/AppStore';\nimport { trackLinkClick } from '../../fpti/fpti';\nimport { FPTI_TAGS, LINK_NAME } from '../../fpti/fptiConstants';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\n\nconst Programs = ({ programNames, isDisabled }) => {\n const worldReady = useContext(WorldReadyContext);\n const [selectedProgram, handleSelect] = useState('');\n const programLabelMsgFmt = new MessageFormat(worldReady, {\n id: 'common.programs.programs.optional',\n });\n // programNames is coming as a string sometimes\n // Convert it to an array\n if (programNames && !Array.isArray(programNames)) {\n programNames = [programNames];\n }\n\n const getProgramOptions = () => {\n const options = [];\n programNames.forEach((programName) => {\n options.push({\n primaryText: programName,\n value: programName,\n });\n });\n\n return options;\n };\n\n const updateProgramId = (event) => {\n const {\n target: { value },\n } = event;\n handleSelect(value);\n AppActions.updateSelectedProgram(value);\n trackLinkClick(LINK_NAME.PROGRAM_SELECTED, {\n additionalData: {\n [FPTI_TAGS.CAMPAIGN]: value,\n },\n });\n };\n\n useEffect(() => {\n if (isDisabled) {\n handleSelect(programNames[0]);\n }\n }, [JSON.stringify(programNames)]);\n\n useEffect(() => {\n if (isDisabled) {\n return;\n }\n\n let programOption = getProgramOptions().findIndex(\n (program) => program.primaryText === appStore.getSelectedProgram()\n );\n programOption = programOption === -1 ? 0 : programOption;\n handleSelect(programNames[programOption]);\n AppActions.updateSelectedProgram(programNames[programOption]);\n }, []);\n\n return (\n \n );\n};\n\nPrograms.propTypes = {\n programNames: PropTypes.array,\n isDisabled: PropTypes.bool,\n};\n\nexport default Programs;\n","import React, { Component } from 'react';\nimport { Button, Sheet, HeadingText, BodyText } from '@paypalcorp/pp-react';\nimport TemplateData from '../../utility/getTemplateData';\nimport PropTypes from 'prop-types';\nimport { appendCdnHostName } from '../../utility/geoUtils';\nimport { sanitizeOrgName } from '../../utility/domUtils';\nimport BackButton from '../../components/BackButton';\nimport { isInContext } from '../../utility/inContextDonation';\nimport { Row, Col } from '@paypalcorp/pp-react';\nimport {\n Message,\n Context as WorldReadyContext,\n} from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\n\nconst orgname = TemplateData.donationName ? TemplateData.donationName : '';\nexport class RecurringOverlay extends Component {\n handleClose = () => {\n this.props.closeRecurringOverlay();\n };\n\n noThanks_closeModal = (event) => {\n this.props.onMakeOneTimeDonation();\n };\n\n onContinue = (event) => {\n this.props.onContinue();\n };\n\n render() {\n let secondDialogLabel = 'dialogp2';\n\n switch (this.props.selectedRecurringFrequency) {\n case 'WEEK':\n secondDialogLabel = 'dialogp2Week';\n break;\n case 'YEAR':\n secondDialogLabel = 'dialogp2Year';\n break;\n default:\n secondDialogLabel = 'dialogp2';\n break;\n }\n\n const dialogp2MsgFmt = new MessageFormat(this.context, {\n id: `common.recurring-checkbox.rp.${secondDialogLabel}`,\n });\n const dialogp2 = dialogp2MsgFmt.format({\n orgName: sanitizeOrgName(orgname),\n });\n\n return (\n : null\n }\n noCloseButton={isInContext()}\n isOpen={this.props.isOpen}\n onClose={this.handleClose}\n closeOnBackgroundClick={false}\n className=\"recurring-signup-overpanel\"\n containerClassName={`${\n isInContext() ? 'incontext-guest-recurring' : ''\n }`}\n >\n
\n
\n \n \n
\n \n
\n \n
\n \n \n \n \n \n \n \n\n \n \n
\n
\n
\n \n \n \n
\n
\n
\n {dialogp2}\n
\n
\n
\n \n \n \n
\n
\n \n
\n\n
\n \n \n \n \n \n\n \n \n \n \n \n \n \n
\n
\n
\n \n );\n }\n}\nRecurringOverlay.contextType = WorldReadyContext;\nRecurringOverlay.propTypes = {\n closeRecurringOverlay: PropTypes.func,\n onMakeOneTimeDonation: PropTypes.func,\n onContinue: PropTypes.func,\n isOpen: PropTypes.bool,\n selectedRecurringFrequency: PropTypes.string,\n};\n\nexport default RecurringOverlay;\n","import React, { useEffect, useState } from 'react';\nimport { CaptionText } from '@paypalcorp/pp-react';\nimport { StyleSheet, css } from 'aphrodite';\nimport AppDispatcher from '../dispatcher/AppDispatcher';\nimport * as AppConstants from '../utility/constants';\nimport { Message } from '@paypalcorp/worldready-react';\n\nconst styles = StyleSheet.create({\n disclaimerWrapper: {\n maxWidth: 350,\n margin: 'auto',\n },\n disclaimer: {\n margin: 'auto',\n },\n disclaimerCaptionText: {\n marginTop: 12,\n color: '#687173',\n textAlign: 'center',\n },\n});\n\nexport default function NotTaxDeductibleLegalText() {\n const [isPPCC, setIsPPCC] = useState(undefined);\n let dispatcherMessages;\n const registerAppDispatcherMessages = () => {\n dispatcherMessages = AppDispatcher.register((payload) => {\n if (\n payload.action &&\n payload.action.actionType === AppConstants.UPDATE_PPCC_STATUS\n ) {\n setIsPPCC(payload.action.item);\n }\n });\n };\n\n useEffect(() => {\n registerAppDispatcherMessages();\n return function cleanup() {\n AppDispatcher.unregister(dispatcherMessages);\n };\n }, []);\n if (isPPCC || isPPCC === undefined) return null;\n return (\n
\n \n \n \n
\n );\n}\n","import React, { useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport * as AppActions from '../../actions/AppActions';\nimport { DonateCheckbox } from '@paypalcorp/donate-react';\nimport { addFeature } from '../../fpti/helper';\nimport { FEATURES } from '../../fpti/fptiConstants';\nimport MessageWithHTML from '../MessageWithHtml';\n\nconst CoverFeeCheckbox = ({\n handleCoverFeeChange,\n optInStatus,\n formatedFeeAmount,\n isDisabled,\n}) => {\n const handleChange = (event) => {\n const isChecked = event.target.checked,\n checkboxStatus = isChecked ? 'checked' : 'unchecked';\n\n AppActions.changeCoverFee({\n coverFee: checkboxStatus,\n });\n\n handleCoverFeeChange(isChecked);\n };\n\n useEffect(() => {\n addFeature(FEATURES.CTF);\n }, []);\n\n return (\n \n }\n value={optInStatus}\n onChange={handleChange}\n checked={optInStatus}\n disabled={isDisabled || false}\n />\n );\n};\n\nCoverFeeCheckbox.propTypes = {\n handleCoverFeeChange: PropTypes.func,\n optInStatus: PropTypes.bool,\n formatedFeeAmount: PropTypes.string,\n isDisabled: PropTypes.bool,\n};\n\nexport default CoverFeeCheckbox;\n","import React from 'react';\nimport '../../utility/csrf';\nimport AmountWrapper from '../../components/amountWrapper';\nimport NextButton from '../../components/nextButton';\nimport OneTouchNextButton from '../../components/landing/OneTouchNextButton';\nimport CancelAndReturn from '../../components/cancelAndReturn';\nimport GuestButton from '../../components/guestButton';\nimport RecurringCheckBox from '../../components/recurring-checkbox/recurring-checkbox';\nimport UserDetailsBanner from '../../components/onetouch/UserDetailsBanner';\nimport OfferDetail from '../../components/offerDetail';\nimport Disclaimer from '../../components/Disclaimer';\nimport VoucherFlowDisclaimer from '../../components/voucherFlowDisclaimer';\nimport CloseButton from '../../components/CloseButton';\nimport ReceiverEligibilityErrorTile from '../error/receiverEligibilityError';\nimport { formatAmount, normalizeNumber } from '../../utility/formator';\nimport {\n isInContext,\n isMobileOrInContext,\n} from '../../utility/inContextDonation';\nimport DonateHeader from '../../components/common/DonateHeader';\n\nimport templateData from '../../utility/getTemplateData';\nimport {\n hasPersonalizedMessages,\n getPersonalizedMessages,\n} from '../../utility/personalizedMessages';\n\nimport AppStore from '../../stores/AppStore';\nimport * as AppActions from '../../actions/AppActions';\nimport AppDispatcher from '../../dispatcher/AppDispatcher';\nimport * as cpl from '../../utility/cpl';\nimport { GN_CONTENT_TOUCHPOINT } from '../../utility/constants';\nimport PropTypes from 'prop-types';\nimport {\n handleLogIn,\n addShake,\n handleTokenReuse,\n hideSpinnerOverlay,\n showSpinnerOverlay,\n} from '../../utility/helper';\nimport {\n isAuthenticatedUser,\n shouldShowUserBanner,\n isLoggedInUser,\n} from '../../utility/authUtils';\nimport * as amountUtils from '../../components/amount/amountUtils';\n\nimport { withRouter } from 'react-router-dom';\nimport {\n isOldButtonFactory,\n hasPartnerSource,\n} from '../../utility/getTemplateData';\nimport { isCampaigns } from '../../utility/productIntegrationUtils';\nimport { loadBodyMovin, waitForOnload } from '../../utility/lazyLoader';\nimport _isEmpty from 'lodash/isEmpty';\nimport Programs from '../../components/programs/Programs';\nimport RecurringOverlay from '../../components/recurring-checkbox/RecurringOverlay';\nimport _get from 'lodash/get';\nimport NotTaxDeductibleLegalText from '../../components/NotTaxDeductibleLegalText';\nimport { getParameterByName } from '../../utility/queryStringHelper';\nimport CoverFeeCheckbox from '../../components/coverFee/coverFeeCheckbox';\nimport {\n computeAmountAfterFee,\n isOptInCoverFee,\n restoreDonationAmount,\n updateDonationAmount,\n setFeeAmountInStore,\n} from '../../components/coverFee/feeUtils';\nimport withDonate from '../../components/guest/WithDonate';\nimport withTheme from '../../components/withTheme';\nimport AnonymousCheckbox from '../../components/anonymousDonation/anonymousCheckbox';\nimport {\n getPersonalizedAnonymousContent,\n getPersonalizedNoteToPayeeLabel,\n isCheckoutRail,\n isExternalFlow,\n prepareOrderParams,\n} from '../../utility/productIntegrationUtils';\nimport NoteComponent from '../../components/note';\nimport isEmpty from 'lodash/isEmpty';\nimport {\n trackAnonymousCheckboxClick,\n trackCoverFeeCheckboxClick,\n trackDonateWithCardClick,\n trackDonateWithPayPalClick,\n trackLandingPageIM,\n trackNextClickForCheckout,\n trackRecurringFrequencySelectionClick,\n} from '../../fpti/fpti';\nimport { CPL_PAGE_SPEC, FEATURES } from '../../fpti/fptiConstants';\nimport classNames from 'classnames';\nimport {\n BodyText,\n HeadingText,\n CaptionText,\n SegmentedController,\n SegmentedControllerPanel,\n} from '@paypalcorp/pp-react';\nimport { addFeature } from '../../fpti/helper';\nimport withWorldReady from '../../components/withWorldReady';\nimport {\n Message,\n Context as WorldReadyContext,\n} from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { getWorldReady } from '../../utility/worldReadyUtils';\nimport MessageWithHTML from '../../components/MessageWithHtml';\n\nconst MERCHANT_PPCC_CONFIRMED_STATUS = 'CONFIRMED';\n\nclass LandingPageComponent extends React.Component {\n constructor(props, worldReady) {\n super(props);\n const optInStatus = AppStore.getCoverFeeOptInStatus();\n const anonymousStatusInStore = AppStore.getAnonymousStatus();\n const anonymousOptInStatus = !isEmpty(anonymousStatusInStore)\n ? anonymousStatusInStore === 'checked'\n : templateData.anonymousStatus || false;\n\n this.state = {\n hasLogo: templateData.hasLogo,\n subHeaderLabel: templateData.donationName,\n orgName: templateData.charityName,\n donationId: templateData.donationId,\n guestRedirectUrl: templateData.guestRedirectUrl,\n donateDisabled: false,\n recurringEnabled: templateData.recurringEnabled,\n recurringStatus: templateData.recurringStatus === 'checked',\n supportedRecurringFrequencies: templateData.supportedRecurringFrequencies,\n recurringHelpText: '',\n recurringLabel: 'Make this a monthly donation',\n rpContinue: false,\n isAuthenticated: isAuthenticatedUser(),\n memberMandatory: templateData.memberMandatory,\n programNames:\n templateData.donateContext?.program_names || templateData.programNames,\n isRecurringOverlayOpen: false,\n isVoucherFlow: templateData.isVoucherFlow,\n offerProgram: templateData.offerProgram,\n coverFeeEnabled: templateData.coverFeeEnabled,\n coverFeeOptInStatus:\n optInStatus !== undefined\n ? optInStatus === 'checked'\n : templateData.feePayer === 'consumer',\n feeAmount: '',\n formatedFeeAmount: '',\n anonymousEnabled: templateData.anonymousEnabled,\n anonymousOptInStatus,\n hasDisclaimer: hasPersonalizedMessages(GN_CONTENT_TOUCHPOINT),\n selectedTabIdx: 0,\n };\n }\n\n componentDidMount = () => {\n window.onload = function () {\n setTimeout(function () {\n cpl.logPerformance(CPL_PAGE_SPEC.LANDING_PAGE);\n }, 0);\n };\n\n AppActions.updateCurrentPage({ currentPage: 'landing' });\n\n // Do not hide spinner if coming to page with already completed payment token\n if (templateData.paymentStatus !== 'complete') {\n hideSpinnerOverlay();\n }\n\n // Checking for recurring status if coming from guest page\n if (AppStore.getDonationRecurring() === 'checked') {\n this.setState({ recurringStatus: true });\n }\n\n // Checking for cover fee preference if coming from guest page\n if (isOptInCoverFee()) {\n this.setState({ coverFeeOptInStatus: true });\n restoreDonationAmount();\n }\n\n setFeeAmountInStore();\n this.updateFeeAmount();\n\n trackLandingPageIM({ noteFieldDisplayed: this.shouldShowNote() });\n\n // Pre-load bodyMovin\n if (templateData.recurringEnabled) {\n waitForOnload().then(() => {\n loadBodyMovin();\n });\n }\n\n if (!isLoggedInUser()) {\n AppActions.showLanguageSelector(true);\n }\n\n // Register for App Dispatcher Messages\n this.registerAppDispatcherMessages();\n };\n\n componentWillUnmount() {\n AppDispatcher.unregister(this.dispatcherMessages);\n }\n\n registerAppDispatcherMessages = () => {\n this.dispatcherMessages = AppDispatcher.register((payload) => {\n if (payload.action && payload.action.actionType === 'CHANGE_RECURRING') {\n const checked = _get(payload.action, 'item', 'unchecked');\n this.setState({\n recurringStatus: checked === 'checked',\n });\n }\n });\n };\n\n getFPTDATA = () => {\n return {\n amount: AppStore.getDonationAmount(),\n code: AppStore.getDonationCode(),\n symbol: AppStore.getDonationSymbol(),\n };\n };\n\n validateAmountAndNavigateToGuestPage = () => {\n let donationAmount = AppStore.getDonationAmount();\n\n if (amountUtils.isAmountGreaterThanZero(donationAmount)) {\n trackDonateWithCardClick({\n noteFieldDisplayed: this.shouldShowNote(),\n fptiData: {\n is_recurring: this.state.recurringStatus ? 'on' : 'off',\n fee_type: this.state.coverFeeEnabled ? 'offset' : 'none',\n },\n });\n this.props.history.push(`/donate/guest?token=${templateData.token}`);\n } else {\n addShake();\n }\n };\n\n handleGuest = (event) => {\n event.preventDefault();\n AppActions.changeRecurringModalStatus({\n recurringModalStatus: 'notclosed',\n });\n let donationAmount = this.getDonationAmount();\n if (!this.validateDonationAmount()) {\n return;\n }\n\n if (amountUtils.isAmountGreaterThanZero(donationAmount)) {\n const isRecurringChecked = this.state.recurringStatus;\n\n if (isRecurringChecked && !this.state.memberMandatory) {\n this.openRecurringOverlay();\n } else {\n this.validateAmountAndNavigateToGuestPage();\n }\n\n // Start CPL tracking to get measurements to load guest form\n window.PAYPAL.analytics.startCPLTracking({\n page: 'main:donate:wps:guest:guestform:guestFormComponent:web::',\n action: 'guest_form_loaded',\n uicomp: 'guestForm',\n uitype: 'component',\n });\n }\n };\n\n handleNext = (event) => {\n event.preventDefault();\n if (!this.validateDonationAmount()) {\n return;\n }\n\n let donationAmount = this.getDonationAmount();\n if (amountUtils.isAmountGreaterThanZero(donationAmount)) {\n trackDonateWithPayPalClick({\n noteFieldDisplayed: this.shouldShowNote(),\n fptiData: {\n is_recurring: this.state.recurringStatus ? 'on' : 'off',\n fee_type: this.state.coverFeeEnabled ? 'offset' : 'none',\n },\n });\n handleLogIn();\n }\n };\n\n handleNextForCheckout = (event) => {\n event.preventDefault();\n if (!this.validateDonationAmount()) {\n return;\n }\n\n trackNextClickForCheckout({ noteFieldDisplayed: this.shouldShowNote() });\n showSpinnerOverlay();\n const orderParams = prepareOrderParams();\n this.props.createOrder(orderParams);\n };\n\n getDonationAmount = () => {\n let donationAmount = AppStore.getDonationAmount();\n\n if (isOptInCoverFee()) {\n const feeAmount = AppStore.getFeeAmount();\n // backup user's original entered amount in store\n AppActions.changeAmountBeforeFee({ amountBeforeFee: donationAmount });\n\n if (feeAmount) {\n donationAmount = computeAmountAfterFee(donationAmount, feeAmount);\n updateDonationAmount(donationAmount);\n }\n }\n\n return donationAmount;\n };\n\n hideValidationError = () => {\n this.setState({\n showValidationError: false,\n });\n };\n\n validateDonationAmount = () => {\n let validationResult =\n amountUtils.validateMinimumDonationAmount('common.amount');\n if (validationResult?.showValidationError) {\n this.setState(validationResult);\n addShake();\n return false;\n }\n\n validationResult = amountUtils.validateMaximumDonationAmount();\n if (validationResult?.showValidationError) {\n this.setState(validationResult);\n addShake();\n return false;\n }\n\n this.setState(validationResult);\n return true;\n };\n\n handleAmountFocus = () => {\n if (this.state.showValidationError) {\n this.hideValidationError();\n }\n };\n\n updateConversionSataus = (status = false) => {\n this.setState({ donateDisabled: status });\n };\n\n handleRecurringChange = (status = false) => {\n this.setState({ recurringStatus: status });\n };\n\n handleRecurringOverlayContinue = () => {\n this.setState({ rpContinue: true });\n this.validateAmountAndNavigateToGuestPage();\n };\n\n handleRecurringOverlayMakeOneTimeDonation = () => {\n AppActions.changeRecurring({\n recurring: 'unchecked',\n });\n this.validateAmountAndNavigateToGuestPage();\n };\n\n handleAnonymousDonationChange = (status = false) => {\n this.setState({ anonymousOptInStatus: status });\n trackAnonymousCheckboxClick(status);\n };\n\n handleCoverFeeChange = (status = false) => {\n this.setState({ coverFeeOptInStatus: status });\n trackCoverFeeCheckboxClick(status);\n };\n\n updateFeeAmount = () => {\n this.setState({\n feeAmount: AppStore.getFeeAmount(),\n formatedFeeAmount: AppStore.getFormatedFeeAmount(),\n });\n };\n\n openRecurringOverlay = () => {\n this.setState({\n isRecurringOverlayOpen: true,\n });\n };\n\n closeRecurringOverlay = () => {\n this.setState({\n isRecurringOverlayOpen: false,\n });\n };\n\n renderProgramsDropdown = () => {\n if (isOldButtonFactory() || _isEmpty(this.state.programNames)) {\n return null;\n }\n\n return ;\n };\n\n renderDisclaimer = () => {\n if (\n this.state.supportedRecurringFrequencies &&\n this.state.supportedRecurringFrequencies[this.state.selectedTabIdx] ===\n 'ONE_TIME'\n ) {\n return null;\n }\n let rpContentHelper = null;\n switch (\n this.state.supportedRecurringFrequencies &&\n this.state.supportedRecurringFrequencies[this.state.selectedTabIdx]\n ) {\n case 'WEEK':\n rpContentHelper = 'helpText1Week';\n break;\n case 'MONTH':\n rpContentHelper = 'helpText1Month';\n break;\n case 'YEAR':\n rpContentHelper = 'helpText1Year';\n break;\n default:\n rpContentHelper = null;\n break;\n }\n\n if (rpContentHelper) {\n let totalAmount = 0;\n if (this.state.coverFeeOptInStatus) {\n totalAmount =\n +Number(AppStore.getDonationAmount()) +\n +normalizeNumber(AppStore.getFeeAmount());\n } else {\n totalAmount = +Number(AppStore.getDonationAmount());\n }\n\n const formattedTotalAmount = formatAmount({\n currency: templateData.donationCode,\n value: totalAmount,\n });\n\n return (\n \n \n \n );\n }\n return null;\n };\n\n renderDonateButtons = () => {\n if (isCheckoutRail()) {\n return (\n \n );\n }\n\n if (this.state.isAuthenticated) {\n return (\n \n );\n }\n\n return (\n
\n
\n \n
\n \n
\n );\n };\n\n /**\n * Should show note on landing page when charityNote is enabled\n * and recurring is disabled for client flows\n * @return {Boolean} true to show note field\n */\n shouldShowNote = () => {\n const showNoteCondition =\n templateData.charityNoteEnabled &&\n !this.state.recurringStatus &&\n isExternalFlow();\n\n if (showNoteCondition) {\n addFeature(FEATURES.CHARITY_NOTE);\n }\n\n return showNoteCondition;\n };\n\n getPersonalizedContent = () => {\n if (isExternalFlow()) {\n const personalizedMessages = getPersonalizedMessages(\n GN_CONTENT_TOUCHPOINT\n );\n return personalizedMessages?.disclaimer;\n }\n };\n\n landingClass() {\n return classNames({\n gn_donate_wrapper: templateData.bannerUrl,\n donate_wrapper: !templateData.bannerUrl,\n context_gn_wrapper: isInContext(),\n 'user-banner': shouldShowUserBanner(),\n mobile_view: isMobileOrInContext(),\n });\n }\n\n shouldShowSupportText = () => {\n const amountRaised = templateData.campaignTotalAmountRaised || '0';\n const campaignStatus = templateData.campaignStatus;\n return (\n campaignStatus === 'INACTIVE' &&\n +amountRaised >= +templateData.campaignTargetAmount\n );\n };\n\n shouldShowNoDonationText = () => {\n const amountRaised = templateData.campaignTotalAmountRaised || '0';\n const campaignStatus = templateData.campaignStatus;\n return (\n campaignStatus === 'INACTIVE' &&\n ((!templateData.campaignEndTime && amountRaised === '0') ||\n templateData.campaignEndTime !== '')\n );\n };\n\n selectFrequencyTab = (e, tabIdx) => {\n let selectedRecurringFrequency = '';\n switch (this.state.supportedRecurringFrequencies[tabIdx]) {\n case 'ONE_TIME':\n selectedRecurringFrequency = null;\n break;\n case 'WEEK':\n selectedRecurringFrequency = 'Week';\n break;\n case 'MONTH':\n selectedRecurringFrequency = 'Month';\n break;\n case 'YEAR':\n selectedRecurringFrequency = 'Year';\n break;\n }\n AppActions.changeSelectedRecurringFrequency({ selectedRecurringFrequency });\n if (this.state.supportedRecurringFrequencies[tabIdx] === 'ONE_TIME') {\n AppActions.changeRecurring({\n recurring: 'unchecked',\n });\n } else {\n AppActions.changeRecurring({\n recurring: 'checked',\n });\n this.handleRecurringChange(true);\n }\n this.setState({ selectedTabIdx: tabIdx });\n trackRecurringFrequencySelectionClick();\n };\n\n render() {\n const showUserBanner = shouldShowUserBanner();\n const showSupportText = this.shouldShowSupportText();\n const showNoDonationText = this.shouldShowNoDonationText();\n const worldReady = getWorldReady();\n const supportedRecurringFrequencies =\n this.state.supportedRecurringFrequencies?.map((freq) => {\n switch (freq) {\n case 'ONE_TIME':\n return new MessageFormat(worldReady, {\n id: 'common.recurring-checkbox.rp.frequency.oneTime',\n }).format();\n case 'WEEK':\n return new MessageFormat(worldReady, {\n id: 'common.recurring-checkbox.rp.frequency.weekly',\n }).format();\n case 'YEAR':\n return new MessageFormat(worldReady, {\n id: 'common.recurring-checkbox.rp.frequency.yearly',\n }).format();\n default:\n return new MessageFormat(worldReady, {\n id: 'common.recurring-checkbox.rp.frequency.monthly',\n }).format();\n }\n }) || [];\n\n if (!templateData.receiverCountryEligible) {\n return (\n \n \n \n );\n }\n\n return (\n
\n
\n {showUserBanner && !showNoDonationText && !showSupportText ? (\n \n ) : null}\n {isExternalFlow() && }\n \n {(() => {\n switch (true) {\n case showSupportText:\n return (\n \n \n \n );\n case showNoDonationText:\n return (\n \n \n \n );\n default:\n return (\n \n {supportedRecurringFrequencies &&\n supportedRecurringFrequencies.length > 1 && (\n ({\n label: option,\n id: `${option}-id`,\n panelId: `${option}-panelid`,\n }))}\n onClick={this.selectFrequencyTab}\n className=\"frequency-options\"\n >\n {supportedRecurringFrequencies.map((option) => (\n \n ))}\n \n )}\n\n \n {this.renderProgramsDropdown()}\n {!isCampaigns() && this.state.anonymousEnabled && (\n \n )}\n {this.shouldShowNote() && (\n \n )}\n {this.state.coverFeeEnabled && (\n \n )}\n {this.state.recurringEnabled &&\n supportedRecurringFrequencies.length === 0 && (\n \n )}\n {this.state.isVoucherFlow && (\n \n )}\n {this.renderDisclaimer()}\n {this.renderDonateButtons()}\n {this.state.isVoucherFlow && }\n {hasPartnerSource() && !this.state.isVoucherFlow && (\n \n )}\n \n {this.state.hasDisclaimer && (\n \n )}\n
\n );\n }\n })()}\n
\n \n \n );\n }\n}\n\nLandingPageComponent.propTypes = {\n history: PropTypes.object,\n};\n\nLandingPageComponent.contextType = WorldReadyContext;\n\nconst LandingPage = withRouter(\n withWorldReady(withDonate(withTheme(LandingPageComponent)))\n);\n\nclass Landing extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n displayLanding: !templateData.currentState,\n };\n }\n\n /**\n * For DIRECT(nonWebscr) and POST integrations, there will not be a token in the URL\n * This will break page refresh.\n * Hence adding token here\n */\n addTokenToUrlIfMissing() {\n const token = getParameterByName('token');\n const business = getParameterByName('business');\n const hostedButtonId = getParameterByName('hosted_button_id');\n const campaignId = getParameterByName('campaign_id');\n\n if (!token && !business && !hostedButtonId && !campaignId) {\n this.props.history.replace({\n pathname: '/donate',\n search: `?token=${templateData.token}`,\n });\n }\n }\n\n componentDidMount() {\n if (!this.state.displayLanding) {\n this.props.history.push(templateData.currentState);\n } else {\n handleTokenReuse();\n }\n this.addTokenToUrlIfMissing();\n }\n\n render() {\n return
{this.state.displayLanding ? : null}
;\n }\n}\n\nLanding.propTypes = {\n history: PropTypes.object,\n};\n\nexport default withRouter(Landing);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { AvatarStack } from '@paypalcorp/pp-react';\nimport { DonorAvatar } from '@paypalcorp/donate-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { getWorldReady } from '../utility/worldReadyUtils';\nimport _isEmpty from 'lodash/isEmpty';\n\nconst WhosDonatedBanner = ({\n numberOfContributors,\n contributionsList,\n isLoading,\n}) => {\n let label;\n const worldReady = getWorldReady();\n\n if (numberOfContributors === 1) {\n const donorName = contributionsList?.[0]?.donor_name;\n const donatedAmount = contributionsList?.[0]?.amount;\n // checking for anonymous contributor\n label = _isEmpty(donorName)\n ? new MessageFormat(worldReady, {\n id: `landing.campaigns.oneAnonymousDonorMessage`,\n }).format()\n : new MessageFormat(worldReady, {\n id: `landing.campaigns.oneDonorMessage`,\n }).format({\n donor: donorName,\n amount: donatedAmount,\n });\n } else if (numberOfContributors === 2) {\n const donorOneName = contributionsList?.[0]?.donor_name;\n const donorTwoName = contributionsList?.[1]?.donor_name;\n // checking if any one of contributors is an anonymous contributor\n label =\n _isEmpty(donorOneName) || _isEmpty(donorTwoName)\n ? new MessageFormat(worldReady, {\n id: `landing.campaigns.donorMessage`,\n }).format({\n numberOfContributors: numberOfContributors,\n })\n : new MessageFormat(worldReady, {\n id: `landing.campaigns.twoDonorsMessage`,\n }).format({\n donorOneName: donorOneName,\n donorTwoName: donorTwoName,\n });\n } else {\n label = new MessageFormat(worldReady, {\n id: `landing.campaigns.donorMessage`,\n }).format({\n numberOfContributors: numberOfContributors,\n });\n contributionsList = contributionsList.slice(0, 3);\n }\n return (\n <>\n {!isLoading && contributionsList?.length > 0 && (\n \n {contributionsList.map((data, index) => {\n const showAnonymousAvatar = !data.shareDonorInfo;\n return (\n \n );\n })}\n \n )}\n \n );\n};\n\nWhosDonatedBanner.propTypes = {\n numberOfContributors: PropTypes.number,\n contributionsList: PropTypes.array,\n isLoading: PropTypes.bool,\n};\n\nexport default WhosDonatedBanner;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\nimport useInterval from './hooks/useInterval';\nimport { formatAmount, formatNumber } from '../utility/formator';\nimport { BodyText } from '@paypalcorp/pp-react';\nimport { DonorAvatar } from '@paypalcorp/donate-react';\nimport MessageWithHTML from './MessageWithHtml';\n\nfunction getRandomInt(max) {\n return Math.floor(Math.random() * max);\n}\n\nfunction Flyout({ contributionsList }) {\n const [startShowing, setStartShowing] = useState(false);\n const [showFlyouts, setShowFlyouts] = useState(false);\n const [randomContribution, setRandomContribution] = useState({});\n\n function getRandomContribution() {\n return contributionsList[getRandomInt(contributionsList.length)];\n }\n\n // Start showing flyouts after 10s\n useEffect(() => {\n const flyoutTimer = setTimeout(() => {\n setStartShowing(true);\n setShowFlyouts(true);\n setRandomContribution(getRandomContribution());\n }, 10000);\n return () => clearTimeout(flyoutTimer);\n }, []);\n\n // Get a new contribution and show flyout every 90s\n // Needs useInterval so that the contributionsList gets updated when more are loaded\n useInterval(\n () => {\n setShowFlyouts(true);\n setRandomContribution(getRandomContribution());\n },\n startShowing ? 90000 : null\n );\n\n // Hide flyout every 10s after setting showFlyouts to true\n useEffect(() => {\n if (showFlyouts) {\n const hideInterval = setTimeout(() => {\n setShowFlyouts(false);\n }, 10000);\n return () => clearTimeout(hideInterval);\n }\n }, [showFlyouts]);\n\n function getFlyoutText() {\n if (randomContribution.donor_name) {\n return (\n \n );\n } else if (randomContribution.shareDonorInfo === false) {\n return (\n \n );\n }\n }\n\n if (!startShowing || isEmpty(randomContribution)) {\n return null;\n }\n\n return (\n
\n
\n \n
\n {getFlyoutText()}\n
\n );\n}\n\nFlyout.propTypes = {\n contributionsList: PropTypes.array,\n};\n\nexport default Flyout;\n","import React, { useRef, useEffect } from 'react';\n\nexport default function useInterval(callback, delay) {\n const intervalRef = useRef(null);\n const savedCallback = useRef(callback);\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n useEffect(() => {\n const tick = () => savedCallback.current();\n if (typeof delay === 'number') {\n intervalRef.current = window.setInterval(tick, delay);\n return () => window.clearInterval(intervalRef.current);\n }\n }, [delay]);\n return intervalRef;\n}\n","/*\n Regular order is: SELF > TOP > FIRST.\n For donations > 10, TOP should be shown, if is the same person as SELF or FIRST then display TOP only\n For donations <= 10, if SELF is the same person as FIRST then FIRST should displayed only\n*/\nexport function formatFeatured(contributions, totalContributions) {\n let formattedList = [];\n\n if (contributions.length === 0) {\n return formattedList;\n }\n\n const first = contributions.find((c) => c.badge.toUpperCase() === 'FIRST');\n const top = contributions.find((c) => c.badge.toUpperCase() === 'TOP');\n const selfItem = contributions.find((c) => c.badge.toUpperCase() === 'SELF');\n\n if (selfItem) {\n if (selfItem?.id !== top?.id && selfItem?.id !== first?.id) {\n formattedList.push(selfItem);\n }\n }\n if (top && totalContributions > 10) {\n formattedList.push(top);\n }\n if (first) {\n if (first?.id !== top?.id) {\n formattedList.push(first);\n }\n }\n\n return formattedList;\n}\n","import React, { Suspense, useEffect, useState, useContext } from 'react';\nimport templateData from '../../utility/getTemplateData';\nimport PPCC from '../../components/ppcc/ppcc';\nimport {\n Card,\n Col,\n Button,\n Sheet,\n LoadingSpinner,\n BodyText,\n HeadingText,\n} from '@paypalcorp/pp-react';\nimport classNames from 'classnames';\n\nimport {\n GoalProgressMeter,\n useHasScrolledToPosition,\n CampaignImage,\n Title,\n AdvancedEndDateBadge,\n} from '@paypalcorp/donate-react';\nimport { hideSpinnerOverlay } from '../../utility/helper';\nimport Landing from './landing';\nimport withTheme from '../../components/withTheme';\nimport {\n roundUpAndFormatCurrency,\n parseDateOnly,\n} from '../../utility/formator';\nimport { lazy as reactLazy } from 'react';\nimport { addClass } from '../../utility/domUtils';\nimport WhosDonatedBanner from '../../components/WhosDonatedBanner';\nimport Flyout from '../../components/Flyout';\nimport { fetcher } from '../../utility/domUtils';\nimport { formatFeatured } from '../../utility/donorWall';\nimport ConfirmationSocialShare from '../../confirmation/ConfirmationSocialShare';\nimport { MAX_MOBILE_WIDTH } from '../../setup/clientConstants';\nimport throttle from 'lodash/throttle';\nimport { trackDonateLandingButtonClick } from '../../fpti/fpti';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nimport { Message } from '@paypalcorp/worldready-react';\n\nconst LandingDonorWall = reactLazy(() =>\n import(\n /* webpackChunkName: \"LandingDonorWall\" */ '../../components/LandingDonorWall'\n )\n);\n\nconst LandingRichTextDisplay = reactLazy(() =>\n import(\n /* webpackChunkName: \"LandingRichTextDisplay\" */ '../../components/LandingRichTextDisplay'\n )\n);\n\nconst MAX_HEIGHT_BANNER = 380;\nconst MAX_HEIGHT_DESCRIPTION = 800;\n\nfunction isCampaignEnded(endDate) {\n return (\n endDate && new Date().setHours(0, 0, 0, 0) > endDate?.setHours(0, 0, 0, 0)\n );\n}\n\nconst CampaignLanding = () => {\n const worldReady = useContext(WorldReadyContext);\n const [isPaymentCardOpen, setIsPaymentCardOpen] = useState(false);\n const amountRaised = templateData.campaignTotalAmountRaised || '0';\n const campaignStatus = templateData.campaignStatus;\n const targetAmount = templateData.campaignTargetAmount;\n const campaignEndTime = templateData.campaignEndTime;\n const campaignTotalNumberOfTxn = templateData.campaignTotalNumberOfTxn;\n const amountRaisedWithCurrencySymbol = roundUpAndFormatCurrency(\n amountRaised,\n templateData.donationCode\n );\n const donationName = templateData.donationName ?? '';\n const [contributionsList, setContributionsList] = useState({\n featured: [],\n list: [],\n });\n const [contributionsError, setContributionsError] = useState(false);\n const [currentPage, setCurrentPage] = useState(1);\n const [isLoading, setIsLoading] = useState(true);\n const [retry, setRetry] = useState(0);\n const [enableReadMore, setEnableReadMore] = useState(true);\n const [descriptionHeight, setDescriptionHeight] = useState(\n MAX_HEIGHT_DESCRIPTION\n );\n const [originalDescriptionHeight, setOriginalDescriptionHeight] = useState(0);\n\n const stickToTop = useHasScrolledToPosition(650);\n\n const [isMobile, setIsMobile] = useState(false);\n\n const checkDeviceType = () => {\n setIsMobile(window.innerWidth < MAX_MOBILE_WIDTH, 200);\n };\n\n useEffect(() => {\n const throttledFn = throttle(checkDeviceType, 200);\n window.addEventListener('resize', throttledFn);\n return () => {\n window.removeEventListener('resize', throttledFn);\n };\n }, []);\n\n useEffect(() => {\n const fetchData = async () => {\n const result = await fetcher(\n `/donate/api/donorwall/${templateData.productId}/${currentPage}/10`\n ).then((response) => response.json());\n if (result.contributions) {\n setContributionsList({\n featured:\n contributionsList.featured.length !== 0\n ? contributionsList.featured\n : formatFeatured(\n result?.contributions?.contributions?.featured,\n campaignTotalNumberOfTxn\n ),\n list: [\n ...contributionsList.list,\n ...(result?.contributions?.contributions?.list ?? []),\n ],\n });\n } else {\n setContributionsError(true);\n }\n setIsLoading(false);\n };\n\n setIsLoading(true);\n setContributionsError(false);\n fetchData();\n }, [currentPage, retry]);\n\n const handleShowMore = () => {\n setCurrentPage(currentPage + 1);\n };\n\n useEffect(() => {\n addClass('#mainWrapper header.donate_global_nav', ['hide-header']);\n addClass('#donateWrapper', ['is-landing']);\n hideSpinnerOverlay();\n }, []);\n\n const goalAmtWithCurrencySymbol = roundUpAndFormatCurrency(\n targetAmount,\n templateData.donationCode\n );\n\n let campaignGoalTitle = new MessageFormat(worldReady, {\n id: 'common.campaigns.campaignGoal.title',\n }).format({\n goalAmount: goalAmtWithCurrencySymbol,\n });\n\n const getCampaignMessage = (id, formatObj = undefined) =>\n new MessageFormat(worldReady, {\n id: `landing.campaigns.${id}`,\n }).format(formatObj);\n\n const advancedEndDateBadgeContent = {\n minute: getCampaignMessage('minute'),\n minutes: getCampaignMessage('minutes'),\n hour: getCampaignMessage('hour'),\n hours: getCampaignMessage('hours'),\n day: getCampaignMessage('day'),\n days: getCampaignMessage('days'),\n month: getCampaignMessage('month'),\n months: getCampaignMessage('months'),\n year: getCampaignMessage('year'),\n years: getCampaignMessage('years'),\n endsInContent: getCampaignMessage('endsInContent', {\n duration: '{duration}',\n unit: '{unit}',\n }),\n endedContent: getCampaignMessage('endedContent', { date: '{date}' }),\n };\n\n const renderEndDateBadge = () => (\n
\n \n
\n );\n\n const renderTitle = (size) => (\n
\n \n </div>\n );\n\n const renderGoalProgressMeter = () => (\n <div className=\"wrapper-progress-meter\">\n <GoalProgressMeter\n max={targetAmount}\n value={Math.round(amountRaised)}\n steps={amountRaisedWithCurrencySymbol}\n title={campaignGoalTitle}\n className=\"goal-progress-meter\"\n />\n </div>\n );\n\n const renderAvatarStack = () => (\n <div className=\"wrapper-avatar-stack\">\n <WhosDonatedBanner\n numberOfContributors={campaignTotalNumberOfTxn}\n contributionsList={contributionsList.list}\n isLoading={isLoading}\n />\n </div>\n );\n\n const renderDonationName = () => (\n <div className=\"wrapper-donation-name\">\n <BodyText>\n {donationName}\n <PPCC />\n </BodyText>\n </div>\n );\n\n const headerClasses = classNames({\n 'preview-header': true,\n sticky: stickToTop,\n });\n\n const renderHeader = () => (\n <div className=\"wrapper-header\">\n {renderEndDateBadge()}\n {renderTitle('lg')}\n {renderAvatarStack()}\n {renderDonationName()}\n {renderGoalProgressMeter()}\n </div>\n );\n\n const renderDonorWall = () => {\n return (\n <>\n <LandingDonorWall\n contributionsList={contributionsList}\n isLoading={isLoading}\n currentPage={currentPage}\n handleShowMore={handleShowMore}\n totalNumberOfTransactions={campaignTotalNumberOfTxn}\n />\n {campaignStatus === 'ACTIVE' &&\n !isCampaignEnded(new Date(campaignEndTime)) &&\n contributionsList?.list?.length >= 10 ? (\n <Flyout contributionsList={contributionsList.list} />\n ) : null}\n </>\n );\n };\n\n const renderContributionsError = () => {\n return (\n <div style={{ textAlign: 'center' }}>\n <BodyText>\n <Message id=\"landing.campaigns.contributions.error.title\" />\n </BodyText>\n <BodyText style={{ color: '#515354' }}>\n <Message id=\"landing.campaigns.contributions.error.body\" />\n </BodyText>\n <Button\n tertiary\n onClick={() => {\n setRetry(retry + 1);\n }}\n >\n <Message id=\"landing.campaigns.contributions.error.cta\" />\n </Button>\n </div>\n );\n };\n\n const renderContributions = () => {\n if (!contributionsError) {\n return renderDonorWall();\n } else if (currentPage === 1) {\n return renderContributionsError();\n }\n\n return (\n <>\n {renderDonorWall()}\n {renderContributionsError()}\n </>\n );\n };\n\n const stickyHeader = stickToTop && (\n <div className={headerClasses}>\n <div className=\"wrapper-header\">\n {renderEndDateBadge()}\n {renderTitle('sm')}\n {renderGoalProgressMeter()}\n </div>\n </div>\n );\n\n const personalizedMessages = {\n social_title: new MessageFormat(worldReady, {\n id: 'landing.social.subheader',\n }).format(),\n };\n\n const getSocialMessage = (id, params) => {\n return new MessageFormat(worldReady, {\n id: `landing.social.${id}`,\n }).format(params);\n };\n\n function buildSocialMessages() {\n return {\n social: {\n emailSubject: getSocialMessage('emailSubject', {\n donationName: '{donationName}',\n }),\n emailBody: getSocialMessage('emailBody', {\n donationName: '{donationName}',\n url: '{url}',\n }),\n mobileText: getSocialMessage('mobileText', {\n donationName: '{donationName}',\n }),\n facebookMessage: getSocialMessage('facebookMessage', {\n donationName: '{donationName}',\n url: '{url}',\n }),\n twitterMessage: getSocialMessage('twitterMessage', {\n donationName: '{donationName}',\n }),\n whatsappMessage: getSocialMessage('whatsappMessage', {\n donationName: '{donationName}',\n }),\n copyLinkHeader: getSocialMessage('copyLinkHeader'),\n copyLinkSubheaderBefore: getSocialMessage('copyLinkSubheaderBefore'),\n copyLinkSubheader: getSocialMessage('copyLinkSubheader'),\n copiedText: getSocialMessage('copiedText'),\n copyText: getSocialMessage('copyText'),\n subheader: getSocialMessage('subheader'),\n shareGeneric: getSocialMessage('shareGeneric'),\n },\n };\n }\n\n const socialContent = () => {\n return (\n <div className=\"social-share-wrapper\">\n <HeadingText\n size=\"sm\"\n style={{ textAlign: `${!isMobile ? 'left' : 'center'}` }}\n >\n <Message id=\"landing.social.shareGeneric\" />\n </HeadingText>\n <ConfirmationSocialShare\n campaignId={templateData.productId}\n messages={buildSocialMessages()}\n personalizedMessages={personalizedMessages}\n email={templateData.donationEmail}\n orgName={templateData.charityName}\n isLanding={true}\n />\n </div>\n );\n };\n\n const incrementDescription = (event) => {\n event.preventDefault();\n setDescriptionHeight((height) => {\n const incrementedHeight = height + MAX_HEIGHT_DESCRIPTION;\n if (incrementedHeight >= originalDescriptionHeight)\n setEnableReadMore(false);\n return incrementedHeight;\n });\n };\n\n const renderReadMore = () =>\n originalDescriptionHeight >= MAX_HEIGHT_DESCRIPTION &&\n enableReadMore && (\n <div className=\"campaign-read-more\">\n <Button tertiary onClick={incrementDescription}>\n <Message id=\"landing.campaigns.readMore\" />\n </Button>\n </div>\n );\n\n return (\n <div className=\"campaign-landing-container\">\n <CampaignImage\n className=\"campaign-landing-banner\"\n src={templateData.bannerUrl}\n />\n {!isMobile && stickyHeader}\n <div className=\"content-container\">\n <div className=\"campaignDetails\" data-testid=\"campaignDetails\">\n <Card.Content>\n <div className=\"campaign-title\">{renderHeader()}</div>\n <div\n className=\"campaign-description\"\n style={{\n maxHeight:\n originalDescriptionHeight >= MAX_HEIGHT_DESCRIPTION\n ? descriptionHeight + 'px'\n : 'unset',\n }}\n >\n <div\n ref={(descriptionContainer) =>\n descriptionContainer &&\n setOriginalDescriptionHeight(\n descriptionContainer.clientHeight\n )\n }\n >\n <Suspense\n fallback={\n <LoadingSpinner size=\"md\" style={{ margin: '0 auto' }} />\n }\n >\n <LandingRichTextDisplay\n campaignDescription={templateData.campaignDescription}\n />\n </Suspense>\n </div>\n {renderReadMore()}\n </div>\n <Suspense\n fallback={\n <LoadingSpinner size=\"md\" style={{ margin: '0 auto' }} />\n }\n >\n {renderContributions()}\n </Suspense>\n {campaignTotalNumberOfTxn > 0 && socialContent()}\n </Card.Content>\n </div>\n {!isMobile ? (\n <div className=\"paymentCard\">\n <Landing />\n </div>\n ) : (\n <>\n <Col lg=\"12\" className=\"mobileDonate\">\n <Button\n onClick={() => {\n setIsPaymentCardOpen(!isPaymentCardOpen);\n trackDonateLandingButtonClick({ noteFieldDisplayed: null });\n }}\n >\n <Message id=\"landing.campaigns.donateButton\" />\n </Button>\n </Col>\n <Sheet\n isOpen={isPaymentCardOpen}\n onClose={() => {}}\n title={new MessageFormat(worldReady, {\n id: 'landing.campaigns.donateButton',\n }).format()}\n mobileFixedHeight=\"90\"\n className=\"mobilePreview darkBackground\"\n wrapperClassName=\"mobilePreview-wrapper\"\n skipFormFocus\n >\n <Landing />\n </Sheet>\n </>\n )}\n </div>\n </div>\n );\n};\n\nexport default withTheme(CampaignLanding);\n","export const BTN_FACTORY_FORM = 'buttonFactory';\nexport const BTN_FACTORY_V3_FORM = 'buttonFactoryV3';\nexport const CAMPAIGNS_FORM = 'campaigns';\nexport const AUTH_STATE_ANONYMOUS = 'ANONYMOUS';\nexport const AUTH_STATE_LOGGEDIN = 'LOGGEDIN';\nexport const BTN_FACTORY_MAX_PROGRAMS = 10;\nexport const BTN_FACTORY_MAX_LENGTH_PROGRAMS = 127;\nexport const MAX_MOBILE_WIDTH = 1024;\nexport const MAX_CHARACTERS_RTE = 2500;\n\nexport const CAMPAIGN_STATUS = {\n ACTIVE: 'ACTIVE',\n INACTIVE: 'INACTIVE',\n};\n\nexport const COUNTRIES_AND_PERMIT_CURRENCY = {\n BR: 'BRL',\n};\n\nexport const ERRORS = {\n COUNTRY_NOT_SUPPORTED: 'COUNTRY_NOT_SUPPORTED',\n COMPLIANCE: 'COMPLIANCE',\n GENERIC: 'GENERIC',\n OFAC_HIT: 'OFAC_CAMPAIGN_SCAN_HIT',\n RESTRICTED_ACCOUNT: 'RESTRICTED_ACCOUNT',\n RESTRICTED_IMAGE: 'RESTRICTED_IMAGE',\n};\n","import React from 'react';\nimport CardSecurityCode from '../react-card-security-code';\nimport AppStore from '../stores/AppStore';\nimport * as AppActions from '../actions/AppActions';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\n\nclass CVVComponent extends React.Component {\n constructor() {\n super();\n this.state = {\n securityCode: '',\n cardSpec: AppStore.getCardSpec().cardSpec,\n errorMessageCSC: '',\n };\n }\n\n componentDidMount() {\n this.props.onRef(this);\n }\n\n componentWillUnmount() {\n this.props.onRef(undefined);\n }\n\n handleChangeSecurityCode(securityCode) {\n this.setState({ securityCode: securityCode });\n this.props.handleSecurityCodeChange(securityCode);\n }\n\n handleFieldFocus(fieldName) {\n this.setState({ [fieldName]: '' });\n }\n\n /*\n * Handle error message for selected field\n */\n handleFieldBlur(value, fieldName, fieldRequired, fieldInvalid, worldReady) {\n let newErrorState = {};\n\n if (value) {\n newErrorState = {\n [fieldName]: this.validateInputValue(\n value,\n fieldName,\n fieldInvalid,\n worldReady\n ),\n };\n } else {\n newErrorState = {\n [fieldName]: new MessageFormat(worldReady, {\n id: `errors.service.${fieldRequired}`,\n }).format(),\n };\n }\n\n this.setState(newErrorState);\n }\n\n /*\n * Validate input\n */\n validateInputValue(value, fieldName, fieldInvalid, worldReady) {\n let {\n cardSpec: {\n fields: { csc = {} },\n },\n } = this.state;\n\n if (fieldName === 'errorMessageCSC') {\n let cscLen = value && value.length;\n let cscMax = csc.maxlength;\n let cscMin = csc.minlength || cscMax;\n\n if (!(cscLen >= cscMin && cscLen <= cscMax)) {\n return new MessageFormat(worldReady, {\n id: `errors.service.${fieldInvalid}`,\n }).format();\n }\n }\n\n return '';\n }\n\n render() {\n const cscLabel = new MessageFormat(this.context, {\n id: 'guest.guestForm.label.csc',\n }).format();\n\n return (\n <div className=\"cvv_component\" id=\"cvv_component\">\n <div className=\"cvv_field\">\n <CardSecurityCode\n showIsRequiredError={true}\n label={cscLabel}\n placeholder={new MessageFormat(this.context, {\n id: 'guest.guestForm.label.cscplaceholder',\n }).format()}\n errorMessage={this.state.errorMessageCSC}\n handleChangeSecurityCode={(value) =>\n this.handleChangeSecurityCode(value)\n }\n handleFocus={(value) => this.handleFieldFocus('errorMessageCSC')}\n handleBlur={(value) =>\n this.handleFieldBlur(\n value,\n 'errorMessageCSC',\n 'REQUIRED_SECURITY_CODE',\n 'INVALID_SECURITY_CODE',\n this.context\n )\n }\n cardSpec={this.state.cardSpec}\n helperText={new MessageFormat(this.context, {\n id: 'guest.guestForm.label.cscnote',\n }).format({\n csc: cscLabel.toLowerCase(),\n })}\n />\n </div>\n </div>\n );\n }\n}\n\nCVVComponent.contextType = WorldReadyContext;\n\nexport default CVVComponent;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { CDN_HOST_NAME } from '../../../utility/constants';\nimport { BodyText, CaptionText } from '@paypalcorp/pp-react-text';\nimport { CreditCardIcon } from '@paypalcorp/pp-react-icons';\nimport _isEmpty from 'lodash/isEmpty';\nimport { Badge } from '@paypalcorp/pp-react-badge';\nimport { Message } from '@paypalcorp/worldready-react';\n\nconst PaymentInformation = ({\n source,\n paymentDigits,\n paymentType,\n issuer,\n isPaypalCurrencyConversion,\n funds,\n cardType,\n}) => {\n const [paymentLogo, setPaymentLogo] = useState('');\n\n const transformText = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n };\n\n const getIssuer = () => {\n return issuer?.toLowerCase().split(' ').map(transformText).join(' ');\n };\n\n useEffect(() => {\n let cardImg = source?.payment_card?.issuer?.thumbnail_logo_url ?? null;\n if (\n cardImg === null ||\n _isEmpty(cardImg) ||\n typeof cardImg === 'undefined'\n ) {\n cardImg = `${CDN_HOST_NAME}/digitalassets/c/consumer/p2p/funding-sources/${cardType}.png`;\n }\n setPaymentLogo(cardImg);\n }, []);\n\n return (\n <div className=\"cb-payment-information ppvx_justify-content-between\">\n <div className=\"payment-info\">\n {!_isEmpty(paymentLogo) ? (\n <img src={paymentLogo} className=\"payment-logo\" aria-hidden=\"true\" />\n ) : (\n <CreditCardIcon size=\"xl2\" />\n )}\n <div className=\"pay-info\">\n {issuer && <BodyText>{getIssuer()}</BodyText>}\n <CaptionText className=\"funding-info\">\n <Message\n id=\"guest.crossBorder.label.paymentInformation\"\n type={paymentType}\n number={paymentDigits}\n />\n </CaptionText>\n {!isPaypalCurrencyConversion && (\n <Badge type=\"success\">\n <Message id=\"guest.crossBorder.label.preferred\" />\n </Badge>\n )}\n </div>\n </div>\n <BodyText>{funds}</BodyText>\n </div>\n );\n};\n\nPaymentInformation.propTypes = {\n fundingOptions: PropTypes.object,\n paymentDigits: PropTypes.string,\n paymentType: PropTypes.string,\n issuer: PropTypes.string,\n funds: PropTypes.string,\n isPaypalCurrencyConversion: PropTypes.bool,\n source: PropTypes.object,\n cardType: PropTypes.string,\n};\n\nexport default PaymentInformation;\n","import React, { useState, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { CURRENCY_CONVERSION_OPTIONS } from '../../pages/guest/GuestReview';\nimport { Card } from '@paypalcorp/pp-react-card';\nimport { Sheet } from '@paypalcorp/pp-react-modal';\nimport { IconButton } from '@paypalcorp/pp-react';\nimport { BodyText, CaptionText, HeadingText } from '@paypalcorp/pp-react-text';\nimport { PaypalAppIcon, CreditCardIcon } from '@paypalcorp/pp-react-icons';\nimport { CheckmarkBackgroundIcon } from '@paypalcorp/pp-react-icons';\nimport { Button } from '@paypalcorp/pp-react-buttons';\nimport { checkKeyPressed } from '../../utility/accessibilityUtils';\nimport { Message } from '@paypalcorp/worldready-react';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nconst CurrencyConversionOption = (props) => {\n const getOptionIcon = (type) => {\n if (type === 'paypal-app') {\n return (\n <IconButton\n buttonType=\"secondary\"\n size=\"xl\"\n name={type}\n svgIconComponent={PaypalAppIcon}\n />\n );\n } else if (type === 'credit-cards') {\n return (\n <IconButton\n buttonType=\"secondary\"\n size=\"xl\"\n name={type}\n svgIconComponent={CreditCardIcon}\n />\n );\n }\n };\n\n return (\n <Card\n className={`${props.className} ${\n props.isSelected ? 'show-highlight' : 'border-default'\n }`}\n role=\"checkbox\"\n aria-checked={props.isSelected}\n tabIndex=\"0\"\n onClick={props.handleOptionSelection}\n onKeyDown={(e) =>\n checkKeyPressed(e, () => {\n props.handleOptionSelection();\n })\n }\n >\n <Card.Content>\n <div className=\"conversion-tile\">\n {getOptionIcon(props.type)}\n <div className=\"content\">\n <BodyText className=\"title\" strong>\n {props.title}\n </BodyText>\n {props.rate && <CaptionText strong>{props.rate}</CaptionText>}\n <CaptionText as=\"span\">{props.description}</CaptionText>\n </div>\n <CheckmarkBackgroundIcon\n className={`icon-check ${!props.isSelected && 'hide-icon'}`}\n size=\"sm\"\n />\n </div>\n </Card.Content>\n </Card>\n );\n};\n\nCurrencyConversionOption.propTypes = {\n isSelected: PropTypes.bool,\n title: PropTypes.string,\n rate: PropTypes.string,\n description: PropTypes.string,\n className: PropTypes.string,\n handleOptionSelection: PropTypes.func,\n type: PropTypes.string,\n};\n\nconst CurrencyConversionModal = (props) => {\n const worldready = useContext(WorldReadyContext);\n const { selectedOption, exchangeRate } = props;\n let withPaypaltitle = new MessageFormat(worldready, {\n id: 'guest.crossBorder.label.withPaypal.title',\n }).format();\n let withPaypalRate = new MessageFormat(worldready, {\n id: 'guest.crossBorder.label.withPayPal.rate',\n }).format({\n amount: exchangeRate,\n });\n let withPaypalmessage = new MessageFormat(worldready, {\n id: 'guest.crossBorder.label.withPayPal.message',\n }).format();\n let withCardtitle = new MessageFormat(worldready, {\n id: 'guest.crossBorder.label.withCard.title',\n }).format();\n let withCardmessage = new MessageFormat(worldready, {\n id: 'guest.crossBorder.label.withCard.message',\n }).format();\n const [isPayPalSelected, setPaypalSelected] = useState(\n selectedOption === CURRENCY_CONVERSION_OPTIONS.PAYPAL\n );\n\n const handleClose = () => {\n props.hideModal();\n };\n\n const handleNextButton = () => {\n props.handleOptionSelection(\n isPayPalSelected\n ? CURRENCY_CONVERSION_OPTIONS.PAYPAL\n : CURRENCY_CONVERSION_OPTIONS.ISSUER\n );\n };\n\n return (\n <Sheet\n className=\"currency-conversion-modal\"\n title=\"\"\n hideTitle={true}\n isOpen={props.isOpen}\n onClose={handleClose}\n >\n <HeadingText size=\"lg\" className=\"text-center title\">\n <Message id=\"guest.crossBorder.label.modalTitle\" />\n </HeadingText>\n <BodyText className=\"text-center subTitle\">\n <Message id=\"guest.crossBorder.label.modalSubTitle\" />\n </BodyText>\n\n <CurrencyConversionOption\n isSelected={isPayPalSelected}\n title={withPaypaltitle}\n rate={withPaypalRate}\n description={withPaypalmessage}\n handleOptionSelection={() => setPaypalSelected(true)}\n className=\"option-paypal\"\n type=\"paypal-app\"\n />\n <CurrencyConversionOption\n isSelected={!isPayPalSelected}\n title={withCardtitle}\n description={withCardmessage}\n handleOptionSelection={() => setPaypalSelected(false)}\n className=\"option-card\"\n type=\"credit-cards\"\n />\n <div className=\"text-center\">\n <Button className=\"btn-sheet-wide\" onClick={handleNextButton}>\n <Message id=\"guest.crossBorder.label.modalButton\" />\n </Button>\n </div>\n </Sheet>\n );\n};\n\nCurrencyConversionModal.propTypes = {\n handleOptionSelection: PropTypes.func.isRequired,\n hideModal: PropTypes.func,\n selectedOption: PropTypes.string,\n exchangeRate: PropTypes.string,\n isOpen: PropTypes.bool,\n};\n\nexport default CurrencyConversionModal;\n","import { KEY_DOWN } from './constants';\n\nexport function checkKeyPressed(event, doFunction) {\n if (event.which === KEY_DOWN.SPACE || event.which === KEY_DOWN.ENTER) {\n return doFunction();\n }\n}\n","import React, { useState } from 'react';\nimport AppStore from '../../../stores/AppStore';\nimport PropTypes from 'prop-types';\nimport { BodyText, CaptionText, Button } from '@paypalcorp/pp-react';\nimport {\n showSpinnerOverlay,\n hideSpinnerOverlay,\n} from '../../../utility/helper';\nimport { exchangeRateDecimalPoints } from '../../../utility/formator';\nimport { trackLinkClick } from '../../../fpti/fpti';\nimport { LINK_NAME, PAGE_SPEC } from '../../../fpti/fptiConstants';\nimport CurrencyConversionModal from '../../../components/currencyConversion/CurrencyConversionModal';\nimport _get from 'lodash/get';\nimport _includes from 'lodash/includes';\nimport { Message } from '@paypalcorp/worldready-react';\n\nconst CrossBorder = ({\n isPaypalCurrencyConversion,\n funds,\n getFundingOptions,\n currencyConversionOption,\n getLocalizedCurrency,\n stateCurrency,\n hasFees,\n}) => {\n const fundingOptions = AppStore.getFundingOptions();\n const DYNAMIC_CURRENCY_CONVERSION_TAG = 'DYNAMIC_CURRENCY_CONVERSION';\n\n const rate = `${getLocalizedCurrency(\n '1.00',\n stateCurrency.inCurrency\n )}= ${exchangeRateDecimalPoints(\n stateCurrency.exchangeRate,\n stateCurrency.amountDecimalPoint,\n stateCurrency.inSymbol\n )} ${stateCurrency.outCurrency}`;\n\n const [currencyConversionOpen, setCurrencyConversionOpen] = useState(false);\n\n const handleOptionSelection = (option) => {\n // const beforeOption = currencyConversionOption;\n // setSelectedOption(option)\n if (currencyConversionOption !== option) {\n setCurrencyConversionOpen(false);\n showSpinnerOverlay();\n getFundingOptions(option).finally(() => {\n hideSpinnerOverlay();\n });\n } else {\n setTimeout(() => {\n setCurrencyConversionOpen(false);\n }, 300);\n }\n };\n\n /**\n * Returns true if currency conversion options should be displayed\n * @param {Array} fundingSources Funding Sources\n * @return {Boolean} True if currency conversion options should be displayed\n */\n const shouldShowCurrencyConversionOptions = () => {\n const fundingSources = fundingOptions.sources || [];\n const lastFundingSource = fundingSources[fundingSources.length - 1];\n const tags = _get(lastFundingSource, 'tags');\n return _includes(tags, DYNAMIC_CURRENCY_CONVERSION_TAG);\n };\n\n return (\n <>\n {!hasFees && (\n <div className=\"total-donation\">\n <BodyText strong>\n <Message id=\"guest.crossBorder.label.youllDonate\" />\n </BodyText>\n <BodyText strong>{funds}</BodyText>\n </div>\n )}\n\n <div className=\"change-conversion\">\n <BodyText>\n {isPaypalCurrencyConversion ? (\n <Message id=\"guest.crossBorder.label.withPaypal.title\" />\n ) : (\n <Message id=\"guest.crossBorder.label.withCard.title\" />\n )}\n </BodyText>\n <Button\n tertiary\n onClick={() => {\n trackLinkClick(LINK_NAME.CURRENCY_CONVERSION, {\n pageSpec: PAGE_SPEC.CROSS_BORDER_PAGE,\n });\n setCurrencyConversionOpen(true);\n }}\n >\n <Message id=\"guest.crossBorder.label.changeCurrencyButton\" />\n </Button>\n </div>\n {isPaypalCurrencyConversion && (\n <CaptionText>\n <Message id=\"guest.crossBorder.label.conversion\" amount={rate} />\n </CaptionText>\n )}\n\n {shouldShowCurrencyConversionOptions() && (\n <div className=\"conversion-message\">\n {isPaypalCurrencyConversion ? (\n <CaptionText>\n {AppStore.getUserCountry() === 'US' ? (\n <Message id=\"guest.crossBorder.label.spread\" />\n ) : (\n <Message id=\"guest.crossBorder.label.fee\" />\n )}\n </CaptionText>\n ) : null}\n </div>\n )}\n\n <CurrencyConversionModal\n isOpen={currencyConversionOpen}\n exchangeRate={rate}\n handleOptionSelection={handleOptionSelection}\n hideModal={() => setCurrencyConversionOpen(false)}\n selectedOption={currencyConversionOption}\n />\n </>\n );\n};\n\nCrossBorder.propTypes = {\n isPaypalCurrencyConversion: PropTypes.bool,\n funds: PropTypes.string,\n handleCurrencyConversionClick: PropTypes.func,\n exchangeRate: PropTypes.string,\n hasFees: PropTypes.bool,\n};\n\nexport default CrossBorder;\n","import React, { useContext, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport _includes from 'lodash/includes';\nimport {\n BodyText,\n IconButton,\n QuestionSmIcon,\n Sheet,\n Button,\n} from '@paypalcorp/pp-react';\nimport {\n Message,\n Context as WorldReadyContext,\n} from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\n\nconst FeePricing = ({ feeAmounts, getLocalizedCurrency }) => {\n const worldReady = useContext(WorldReadyContext);\n const [openHelperSheet, setOpenHelperSheet] = useState(false);\n\n let paymentAmount = getLocalizedCurrency(\n feeAmounts?.payment_amount?.value || '0.00',\n feeAmounts?.payment_amount?.currency || 'USD'\n );\n\n let totalFee = getLocalizedCurrency(\n feeAmounts?.total_fee?.value || '0.00',\n feeAmounts?.total_fee?.currency || 'USD'\n );\n\n let totalAmountPaid = getLocalizedCurrency(\n feeAmounts?.total_amount_paid?.value || '0.00',\n feeAmounts?.total_amount_paid?.currency || 'USD'\n );\n\n return (\n <>\n <div className=\"fee-donation\">\n <BodyText>\n <Message id=\"guest.reviewFees.donation\" />\n </BodyText>\n <BodyText>\n {_includes(paymentAmount, feeAmounts?.payment_amount?.currency)\n ? `${paymentAmount}`\n : `${paymentAmount} ${feeAmounts?.payment_amount?.currency}`}\n </BodyText>\n </div>\n <div className=\"fee-donation\">\n <BodyText className=\"pricing-fee\">\n <Message id=\"guest.reviewFees.fee\" />\n <IconButton\n className=\"tooltip-icon-button\"\n buttonType=\"tertiary\"\n svgIconComponent={QuestionSmIcon}\n size=\"sm\"\n onClick={() => setOpenHelperSheet(true)}\n >\n <Message id=\"guest.reviewFees.helperTitle\" />\n </IconButton>\n </BodyText>\n <BodyText>\n {_includes(totalFee, feeAmounts?.total_fee?.currency)\n ? `${totalFee}`\n : `${totalFee} ${feeAmounts?.total_fee?.currency}`}\n </BodyText>\n </div>\n <div className=\"fee-donation\">\n <BodyText strong>\n <Message id=\"guest.reviewFees.total\" />\n </BodyText>\n <BodyText strong>\n {_includes(totalAmountPaid, feeAmounts?.total_amount_paid?.currency)\n ? `${totalAmountPaid}`\n : `${totalAmountPaid} ${feeAmounts?.total_amount_paid?.currency}`}\n </BodyText>\n </div>\n\n <Sheet\n className=\"pricing-helper-sheet\"\n id=\"pricing-helper-sheet\"\n title={new MessageFormat(worldReady, {\n id: 'guest.reviewFees.helperTitle',\n }).format()}\n hideTitle={false}\n isOpen={openHelperSheet}\n onClose={() => setOpenHelperSheet(false)}\n >\n <BodyText className=\"helper-text-description\">\n <Message id=\"guest.reviewFees.helperDescription\" />\n </BodyText>\n <div className=\"button-link\">\n <Button\n as=\"a\"\n target=\"_blank\"\n href=\"/webapps/mpp/paypal-fees\"\n role=\"button\"\n secondary\n >\n <Message id=\"guest.reviewFees.helperButton\" />\n </Button>\n </div>\n </Sheet>\n </>\n );\n};\n\nFeePricing.propTypes = {\n feeAmounts: PropTypes.object,\n getLocalizedCurrency: PropTypes.func,\n};\n\nexport default FeePricing;\n","import React from 'react';\nimport AppStore from '../../stores/AppStore';\nimport * as AppActions from '../../actions/AppActions';\nimport TemplateData from '../../utility/getTemplateData';\nimport PropTypes from 'prop-types';\nimport { showSpinnerOverlay, hideSpinnerOverlay } from '../../utility/helper';\nimport CancelAndReturn from '../../components/cancelAndReturn';\nimport _get from 'lodash/get';\nimport _includes from 'lodash/includes';\nimport _isEmpty from 'lodash/isEmpty';\nimport _find from 'lodash/find';\nimport DonateGiftAid from '../../guest-payment-components/DonateGiftAid';\nimport { formatCurrencyAsString } from '../../utility/formator';\nimport { withRouter } from 'react-router-dom';\nimport { observeUntilEventObserved } from '../../utility/helper';\nimport { fetcher } from '../../utility/domUtils';\nimport CVVComponent from '../../containers/cvv-component';\nimport withDonate from '../../components/guest/WithDonate';\nimport withTheme from '../../components/withTheme';\nimport ThreeDSContainer from '../../components/threeDS/ThreeDSContainer';\nimport {\n Alert,\n Button,\n BodyText,\n CaptionText,\n Row,\n Col,\n} from '@paypalcorp/pp-react';\nimport CloseButton from '../../components/CloseButton';\nimport BackButton from '../../components/BackButton';\nimport DonateHeader from '../../components/common/DonateHeader';\nimport PaymentInformation from './guestReviewComponents/PaymentInformation';\nimport CrossBorder from './guestReviewComponents/CrossBorder';\nimport FeePricing from './guestReviewComponents/FeePricing';\nimport {\n isExternalFlow,\n isPPUnlistedCampaign,\n} from '../../utility/productIntegrationUtils';\nimport { isInContext } from '../../utility/inContextDonation';\nimport {\n track3DSProceedToPayment,\n trackErrorIM,\n trackGuestReviewPageDonateClick,\n trackLinkClick,\n} from '../../fpti/fpti';\nimport { LINK_NAME, PAGE_SPEC } from '../../fpti/fptiConstants';\nimport withWorldReady from '../../components/withWorldReady';\nimport {\n Message,\n Context as WorldReadyContext,\n} from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport MessageWithHTML from '../../components/MessageWithHtml';\n\nconst donateGiftPercentage = AppStore.getGiftAidItExtraAmount();\n\nexport const CURRENCY_CONVERSION_OPTIONS = {\n PAYPAL: 'PAYPAL',\n ISSUER: 'ISSUER',\n};\n\nclass GuestReview extends React.Component {\n constructor(props) {\n super(props);\n\n let isRecurring = AppStore.getDonationRecurring() === 'checked';\n const stateConversionWithPayPal = this.getStateForConversionWithPayPal();\n\n this.state = {\n subHeaderLabel: TemplateData.donationName,\n donationId: AppStore.getSelectedProgram() || TemplateData.donationId,\n orgName: TemplateData.charityName,\n amountDecimalPoint: TemplateData.donationDecimalPoint || '.',\n decimalPoint: TemplateData.donationDecimalPoint || '.',\n isRecurring,\n ...stateConversionWithPayPal,\n showCVVField: false,\n securityCode: '',\n isCurrencyConversionModalOpen: false,\n selectedRecurringFrequency: AppStore.getSelectedRecurringFrequency(),\n };\n this.getFundingOptions = this.getFundingOptions.bind(this);\n }\n\n endCustomCPLTracking = () => {\n const spinnerOverlay = document.getElementById('spinnerOverlay');\n\n if (spinnerOverlay.style.display === 'none') {\n // From tesla flow we don't have the spinner\n window.PAYPAL.analytics.endCPLTracking({\n page: 'main:donate:wps:guest:crossBorder:web::',\n action: 'crossborder_page_loaded',\n uicomp: 'crossBorder',\n uitype: 'page',\n });\n } else {\n // From guest form we need to wait for the spinner to disappear\n observeUntilEventObserved(\n spinnerOverlay,\n { attributes: true },\n (observer) => {\n if (spinnerOverlay.style.display === 'none') {\n window.PAYPAL.analytics.endCPLTracking({\n page: 'main:donate:wps:guest:crossBorder:web::',\n action: 'crossborder_page_loaded',\n uicomp: 'crossBorder',\n uitype: 'page',\n });\n\n observer.disconnect();\n return;\n }\n }\n );\n }\n };\n\n componentDidMount() {\n this.endCustomCPLTracking();\n }\n\n getStateForConversionWithPayPal() {\n let fundingOptions = AppStore.getFundingOptions();\n let myData = AppStore.getAllData() || {};\n const cardType = _get(myData, 'cardSpec.cardSpec.type', '')\n .replace(/[.,_]|\\s\\(.*\\)/g, '')\n .replace(/[\\s_]/g, '-')\n .toLowerCase();\n let [fundingSources] = fundingOptions ? fundingOptions.sources : [];\n let paymentNetwork = fundingSources.payment_card.network.toLowerCase();\n paymentNetwork =\n paymentNetwork.charAt(0).toUpperCase() + paymentNetwork.slice(1);\n let paymentDigits = fundingSources.payment_card.last_4;\n let paymentType = (fundingSources?.payment_card?.type ?? '').toLowerCase();\n paymentType =\n paymentType && paymentType.charAt(0).toUpperCase() + paymentType.slice(1);\n let issuer = fundingSources.payment_card.issuer.name;\n let exchangeRate = parseFloat(\n fundingOptions.currency_conversion?.exchange_rate || '0.00'\n ).toString();\n let fundsIn = fundingOptions.currency_conversion?.funds_in || '0.00';\n let fundsOut = fundingOptions.currency_conversion?.funds_out || '0.00';\n let feeAmounts = fundingOptions.fee_amount || null;\n let amount = this.getLocalizedCurrency(\n fundingSources.payment_card.amount.value,\n fundingSources.payment_card.amount.currency\n );\n\n return {\n exchangeRate,\n paymentCard: `${paymentNetwork} x-${paymentDigits}`,\n paymentDigits,\n paymentType,\n source: fundingSources,\n issuerName: issuer,\n inAmount: fundsIn.value,\n inCurrency: fundsIn.currency,\n inSymbol: fundsIn.symbol,\n outAmount: fundsOut.value,\n outCurrency: fundsOut.currency,\n outSymbol: fundsOut.symbol,\n currencyConversionOption: CURRENCY_CONVERSION_OPTIONS.PAYPAL,\n cardType,\n feeAmounts,\n currencyConversion: fundingOptions.currency_conversion,\n fundingCode: !_isEmpty(fundingOptions.currency_conversion)\n ? 'CROSS_BORDER'\n : 'PAYER_FEE',\n currencyCode: fundingOptions.currencyCode,\n amount: _includes(amount, fundingSources.payment_card.amount.currency)\n ? `${amount}`\n : `${amount} ${fundingSources.payment_card.amount.currency}`,\n };\n }\n\n getStateForConversionWithIssuer() {\n let fundingOptions = AppStore.getFundingOptions();\n let [fundingSources] = fundingOptions ? fundingOptions.sources : [];\n let amount = this.getLocalizedCurrency(\n fundingSources.payment_card.amount.value,\n fundingSources.payment_card.amount.currency\n );\n let symbol = AppStore.getDonationSymbol();\n let currency = AppStore.getDonationCode();\n let feeAmounts = fundingOptions.fee_amount || null;\n\n // No currency_conversion. fundsIn and fundsOut will not be available.\n return {\n amount: _includes(amount, fundingSources.payment_card.amount.currency)\n ? `${amount}`\n : `${amount} ${fundingSources.payment_card.amount.currency}`,\n symbol,\n currency,\n currencyConversionOption: CURRENCY_CONVERSION_OPTIONS.ISSUER,\n currencyConversion: fundingOptions.currency_conversion,\n feeAmounts,\n };\n }\n\n updateFundingOptionsState() {\n let fundingOptions = AppStore.getFundingOptions();\n if (!fundingOptions.currency_conversion) {\n this.setState(this.getStateForConversionWithIssuer());\n } else {\n this.setState(this.getStateForConversionWithPayPal());\n }\n }\n\n getLocalizedCurrency = (amount, currency) => {\n let formatedAmount = {\n value: parseFloat(amount).toFixed(2),\n currency: currency,\n };\n let newAmount = formatCurrencyAsString(formatedAmount);\n return newAmount;\n };\n\n handleCurrencyConversionClick = () => {\n trackLinkClick(LINK_NAME.CURRENCY_CONVERSION, {\n pageSpec: PAGE_SPEC.CROSS_BORDER_PAGE,\n });\n this.showCurrencyConversionModal();\n };\n\n showCurrencyConversionModal = () => {\n this.setState({\n isCurrencyConversionModalOpen: true,\n });\n };\n\n hideCurrencyConversionModal = () => {\n this.setState({\n isCurrencyConversionModalOpen: false,\n });\n };\n\n handleDonateClick = () => {\n if (this.state.showCVVField) {\n const cvv = document.getElementById('securityCode').value;\n this.childCVVInfo.handleFieldBlur(\n cvv,\n 'errorMessageCSC',\n 'REQUIRED_SECURITY_CODE',\n 'INVALID_SECURITY_CODE'\n );\n\n let hasError =\n document.getElementsByClassName('vx_has-error-with-message').length > 0;\n if (!cvv || hasError) {\n return;\n }\n }\n const fundingOptions = AppStore.getFundingOptions();\n const contingencies = _get(fundingOptions, 'contingencies') || [];\n const threeDSContingency =\n _find(contingencies, { action: '3D_SECURE_DATA_COLLECTION_REQUIRED' }) ||\n {};\n\n if (!_isEmpty(threeDSContingency)) {\n this.threeDSContainer.initializeThreeDS();\n return;\n }\n\n // All contingencies resolved\n this.processDonation();\n };\n\n processDonation = () => {\n showSpinnerOverlay();\n\n trackGuestReviewPageDonateClick({\n isCvvSend: this.state.securityCode?.length > 0,\n });\n\n return this.props.doFulfilment({\n securityCode: this.state.securityCode,\n });\n };\n\n handleGiftAidOption = (giftAidState) => {\n AppActions.updateGiftaidItFlag({ giftAidItFlag: giftAidState });\n };\n\n getFundingOptions(currencyConversionType) {\n let fundingOptions = AppStore.getFundingOptions();\n const fundingSources = fundingOptions.sources || [];\n const lastFundingSource = fundingSources[fundingSources.length - 1];\n const paymentCardId = _get(lastFundingSource, 'payment_card.id');\n\n return fetcher('/donate/guest/fundingOptions', {\n method: 'POST',\n body: JSON.stringify({\n amount: AppStore.getDonationAmount(),\n code: AppStore.getDonationCode(),\n fundingOptionId: AppStore.getFundingOptions().id,\n preferences: {\n currency_conversion: [\n {\n payment_card_id: paymentCardId,\n type: currencyConversionType,\n validity: 'TRANSACTION',\n },\n ],\n },\n consentShareAddress: AppStore.getShareAddress(),\n token: TemplateData.token,\n onboardingEnabled: TemplateData.onboardingEnabled,\n }),\n })\n .then((response) => response.json())\n .then((result) => {\n console.log('getFundingOptions result :: ', result);\n\n // The funding options data format returned by the server is\n // different for ISSUER and PAYPAL. Handle it appropriately.\n\n // For conversion with 'ISSUER'\n if (currencyConversionType === CURRENCY_CONVERSION_OPTIONS.ISSUER) {\n fundingOptions = _get(result, 'data.fundingOpt[0]');\n } else {\n // For conversion with 'PAYPAL'\n fundingOptions = _get(result, 'fundingOpts[0]');\n }\n\n // Handle error case where fundingOptions call succeeds\n // but no data is returned\n if (_isEmpty(fundingOptions)) {\n trackErrorIM({\n errorCode: currencyConversionType,\n errorMessage: 'FUNDING_OPTIONS_EMPTY_CROSSBORDER',\n });\n this.props.history.push(\n `/donate/error/payment?token=${TemplateData.token}`\n );\n return;\n }\n\n // If CVV contingencies are present and has not been resolved,\n // then display cvv component\n const contingencies = _get(fundingOptions, 'contingencies');\n const hasCvvContingency = _find(contingencies, {\n action: 'CVV_REQUIRED',\n });\n const isCvvContingencyResolved = _get(\n result,\n 'data.contingencyResolutionStatus.cvvContingencyResolved',\n false\n );\n\n this.setState({\n showCVVField: hasCvvContingency && !isCvvContingencyResolved,\n });\n\n // Updating store with funding options\n AppActions.updateFundingOptions({ fundingOptions });\n\n this.updateFundingOptionsState();\n\n console.log(result);\n })\n .catch(() => {\n console.log('FAILED');\n this.props.history.push(\n `/donate/error/payment?token=${TemplateData.token}`\n );\n })\n .finally(() => {\n hideSpinnerOverlay();\n });\n }\n\n handleSecurityCodeChange = (securityCode) => {\n this.setState({\n securityCode: securityCode,\n });\n };\n\n handleThreeDSStepUpAuthSuccess = () => {\n this.props.toggleSpinner(true);\n\n track3DSProceedToPayment({\n isCvvSend: this.state.securityCode?.length > 0,\n });\n\n this.props.doFulfilment({\n securityCode: this.state.securityCode,\n });\n };\n\n handleThreeDSStepUpAuthFailure = () => {\n // Unrecoverable error !!\n this.props.history.push('/donate/error/payment');\n };\n\n handleThreeDSFailure = () => {\n // Unrecoverable error !!\n this.props.history.push('/donate/error/threeDS');\n };\n\n render() {\n const worldReady = this.context;\n const inAmount = this.getLocalizedCurrency(\n this.state.inAmount,\n this.state.inCurrency\n );\n const outAmount = this.getLocalizedCurrency(\n this.state.outAmount,\n this.state.outCurrency\n );\n const fundsIn = _includes(inAmount, this.state.inCurrency)\n ? `${inAmount}`\n : `${inAmount} ${this.state.inCurrency}`;\n const fundsOut = _includes(outAmount, this.state.outCurrency)\n ? `${outAmount}`\n : `${outAmount} ${this.state.outCurrency}`;\n\n let giftaidFlag = AppStore.getGiftaidItFlagStatus();\n\n const getRecurringLabel = () => {\n switch (this.state.selectedRecurringFrequency) {\n case 'Week':\n return 'donateNowRec.weekly';\n case 'Month':\n return 'donateNowRec.monthly';\n case 'Year':\n return 'donateNowRec.yearly';\n default:\n return 'donateNowRec.monthly';\n }\n };\n\n const { showCVVField } = this.state;\n\n return (\n <div\n className={`${\n TemplateData.bannerUrl ? 'gn_donate_wrapper' : 'donate_wrapper'\n } ${isInContext() ? 'context_gn_wrapper' : ''}`}\n >\n <DonateHeader />\n {showCVVField && (\n <Row className=\"alert-container mb-8\">\n <Alert type=\"warning\">\n <Message\n id=\"guest.guestForm.label.cscwarning\"\n csc={new MessageFormat(worldReady, {\n id: 'guest.guestForm.label.csc',\n })\n .format()\n .toLowerCase()}\n />\n </Alert>\n </Row>\n )}\n {isExternalFlow() && (\n <>\n <BackButton inverse />\n <CloseButton inverse />\n </>\n )}\n\n <div id=\"crossBorderContainer\" className=\"cross-border\">\n {TemplateData.isGiftaiditEnabled && (\n <DonateGiftAid\n isAlreadyEnrolled={giftaidFlag}\n showAddress={false}\n addressData=\"\"\n isChecked={giftaidFlag}\n handleGiftAidOption={this.handleGiftAidOption}\n giftaidInfo={{\n currency: this.state.outSymbol,\n amount: this.state.outAmount,\n orgName: this.state.subHeaderLabel,\n donateGiftPercentage: donateGiftPercentage,\n donationCode: AppStore.getDonationCode(),\n }}\n />\n )}\n <Row>\n <Col form=\"full\">\n <BodyText style={{ margin: '28px 0' }}>\n <Message id=\"guest.crossBorder.label.donatingFrom\" />\n </BodyText>\n </Col>\n </Row>\n <PaymentInformation\n fundingOptions={AppStore.getFundingOptions()}\n paymentDigits={this.state.paymentDigits}\n paymentType={this.state.paymentType}\n source={this.state.source}\n issuer={this.state.issuerName}\n isPaypalCurrencyConversion={\n this.state.currencyConversionOption ===\n CURRENCY_CONVERSION_OPTIONS.PAYPAL\n }\n funds={this.state.amount}\n cardType={this.state.cardType}\n />\n\n {showCVVField && (\n <CVVComponent\n onRef={(ref) => (this.childCVVInfo = ref)}\n handleSecurityCodeChange={this.handleSecurityCodeChange}\n />\n )}\n\n {isPPUnlistedCampaign() && !_isEmpty(this.state.feeAmounts) && (\n <FeePricing\n feeAmounts={this.state.feeAmounts}\n getLocalizedCurrency={this.getLocalizedCurrency}\n />\n )}\n\n {this.state.fundingCode === 'CROSS_BORDER' && (\n <CrossBorder\n hasFees={!_isEmpty(this.state.feeAmounts)}\n isPaypalCurrencyConversion={\n this.state.currencyConversionOption ===\n CURRENCY_CONVERSION_OPTIONS.PAYPAL\n }\n funds={\n this.state.currencyConversionOption ===\n CURRENCY_CONVERSION_OPTIONS.PAYPAL\n ? fundsIn\n : this.state.amount\n }\n getFundingOptions={this.getFundingOptions}\n currencyConversionOption={this.state.currencyConversionOption}\n getLocalizedCurrency={this.getLocalizedCurrency}\n setSelectedOption={(currencyConversionType) =>\n this.setState({\n currencyConversionOption: currencyConversionType,\n })\n }\n stateCurrency={{\n inCurrency: this.state.inCurrency,\n exchangeRate: this.state.exchangeRate,\n amountDecimalPoint: this.state.amountDecimalPoint,\n inSymbol: this.state.inSymbol,\n outCurrency: this.state.outCurrency,\n }}\n />\n )}\n\n <div className=\"legal-text text-center\">\n <CaptionText>\n <MessageWithHTML\n id=\"guest.crossBorder.label.policies\"\n country={TemplateData.country}\n />\n </CaptionText>\n </div>\n\n <div className=\"text-center\">\n <Button\n className=\"btn-wide\"\n id=\"donate-button\"\n disabled={this.props.disabled}\n onClick={this.handleDonateClick}\n >\n {this.state.isRecurring ? (\n <Message\n id={`guest.guestForm.label.${getRecurringLabel()}`}\n amount={fundsOut}\n />\n ) : (\n <Message id=\"guest.guestForm.label.donatenow\" />\n )}\n </Button>\n </div>\n <div className=\"cross-border-cancel-return\">\n <CancelAndReturn />\n </div>\n\n <ThreeDSContainer\n onThreeDSStepUpAuthNotRequired={this.handleThreeDSStepUpAuthSuccess}\n onThreeDSStepUpAuthSuccess={this.handleThreeDSStepUpAuthSuccess}\n onThreeDSStepUpAuthFailure={this.handleThreeDSFailure}\n onThreeDSFailure={this.handleThreeDSFailure}\n onRef={(ref) => (this.threeDSContainer = ref)}\n />\n </div>\n </div>\n );\n }\n}\n\nGuestReview.propTypes = {\n doFulfilment: PropTypes.func,\n history: PropTypes.object,\n toggleSpinner: PropTypes.func,\n disabled: PropTypes.bool,\n};\n\nGuestReview.contextType = WorldReadyContext;\n\nexport default withRouter(withWorldReady(withDonate(withTheme(GuestReview))));\n","import withPageTrack from '../../confirmation/withPageTrack';\nimport withPostTransactionRequest from '../../confirmation/withPostTransactionRequest';\nimport PendingView from '../../confirmation/PendingView';\nimport SuccessView from '../../confirmation/SuccessView';\n\nconst FLOW = 'guest';\nconst POST_TRANSACTION_URL = '/donate/guest/postTransaction';\n\nexport const GuestConfirmationPending = withPageTrack(\n withPostTransactionRequest(PendingView, POST_TRANSACTION_URL),\n FLOW,\n 'pending'\n);\n\nexport const GuestConfirmationSuccess = withPageTrack(\n withPostTransactionRequest(SuccessView, POST_TRANSACTION_URL),\n FLOW,\n 'success'\n);\n","import React, { useEffect } from 'react';\nimport { HeadingText, BodyText, Link, Button } from '@paypalcorp/pp-react';\nimport CloseButton from '../../components/CloseButton';\nimport {\n isInContext,\n isMobileOrInContext,\n} from '../../utility/inContextDonation';\nimport withTheme from '../../components/withTheme';\nimport { isExternalFlow } from '../../utility/productIntegrationUtils';\nimport { addClass } from '../../utility/domUtils';\n\nfunction FullPageError({\n title,\n body,\n body2,\n linkLabel,\n handleLinkClick,\n buttonLabel,\n handleButtonClick,\n showCloseButton = false,\n centerBody = false,\n}) {\n useEffect(() => {\n if (isInContext()) {\n addClass('#mainWrapper header.donate_global_nav', ['hide-header']);\n }\n }, []);\n return (\n <div\n className={`donate_wrapper ${\n isMobileOrInContext() ? 'mobile_view' : ''\n } ${isInContext() ? 'gn_donate_wrapper' : ''} fullPageError`}\n >\n {isExternalFlow() && showCloseButton && <CloseButton />}\n <HeadingText size=\"sm\" className=\"title\">\n {title}\n </HeadingText>\n {body ? (\n <BodyText className={`body ${centerBody ? 'text-center' : ''}`}>\n {body}\n </BodyText>\n ) : null}\n {body2 ? (\n <BodyText className={`body ${centerBody ? 'text-center' : ''}`}>\n {body2}\n </BodyText>\n ) : null}\n\n {buttonLabel ? (\n <Button secondary onClick={handleButtonClick} className=\"cta\">\n {buttonLabel}\n </Button>\n ) : null}\n\n {linkLabel ? (\n <Link className=\"cta\" onClick={handleLinkClick}>\n {linkLabel}\n </Link>\n ) : null}\n </div>\n );\n}\n\nexport default withTheme(FullPageError);\n","import React from 'react';\nimport AppStore from '../../stores/AppStore';\nimport { withRouter } from 'react-router-dom';\nimport withTheme from '../../components/withTheme';\nimport templateData from '../../utility/getTemplateData';\nimport { hideSpinnerOverlay } from '../../utility/helper';\nimport { trackErrorPageIM } from '../../fpti/fpti';\nimport { PAGE_SPEC } from '../../fpti/fptiConstants';\nimport { addClass, removeClass } from '../../utility/domUtils';\nimport FullPageError from './FullPageError';\nimport MessageWithHTML from '../../components/MessageWithHtml';\nimport { Message } from '@paypalcorp/worldready-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\n\nclass PaymentError extends React.Component {\n static contextType = WorldReadyContext;\n\n constructor() {\n super();\n this.state = {};\n }\n\n getErrorMessage = (id, params) => {\n return new MessageFormat(this.context, {\n id: `errors.paymentError.error.${id}`,\n }).format(params);\n };\n\n componentDidMount = () => {\n addClass('#mainWrapper', ['full-page-error']);\n hideSpinnerOverlay();\n const ERROR_CODE = AppStore.getPaymentError() || '';\n trackErrorPageIM({\n pageSpec: PAGE_SPEC.GUEST_FAILURE_PAGE,\n errorCode: ERROR_CODE,\n });\n };\n\n componentWillUnmount() {\n removeClass('#mainWrapper', ['full-page-error']);\n }\n\n handleTryAgain = () => {\n this.props.history.push(`/donate?token=${templateData.token}`);\n };\n\n render() {\n const ERROR_CODE = AppStore.getPaymentError() || '';\n\n let WENT_WRONG = '',\n TEMP_GLITCH = '',\n tryagain = '';\n\n const hideButton = ERROR_CODE === 'WSM_PAYER_LIMIT_EXCEEDED';\n\n switch (ERROR_CODE) {\n case 'WSM_PAYMENT_DENIED':\n WENT_WRONG = <Message id=\"errors.paymentError.error.DID_NOT_WORK\" />;\n TEMP_GLITCH = (\n <Message id=\"errors.paymentError.error.DIFF_CREDIT_DEBIT\" />\n );\n tryagain = <Message id=\"errors.paymentError.label.trydiffcard\" />;\n break;\n case 'WSM_CANNOT_PAY_SELF':\n WENT_WRONG = (\n <Message id=\"errors.paymentError.error.WSM_CANNOT_PAY_SELF_H\" />\n );\n TEMP_GLITCH = this.getErrorMessage('WSM_CANNOT_PAY_SELF', {\n ['data.htmlTagsProps.name']: templateData.donationName,\n }).replace('{data.htmlTagsProps.name}', templateData.donationName);\n break;\n case 'WSM_PAYER_LIMIT_EXCEEDED':\n WENT_WRONG = (\n <Message id=\"errors.paymentError.error.AmountLimitBreachError\" />\n );\n TEMP_GLITCH = (\n <MessageWithHTML\n id=\"errors.paymentError.error.CustomerCareMessage\"\n customerServiceLink={'/selfhelp/home'}\n />\n );\n break;\n default:\n break;\n }\n\n return (\n <div>\n <FullPageError\n title={\n WENT_WRONG ||\n 'We’re sorry that we are experiencing temporary difficulties.'\n }\n body={\n TEMP_GLITCH ||\n 'Please try again later. We apologize for the inconvenience.'\n }\n buttonLabel={hideButton ? null : tryagain || 'Return to PayPal'}\n handleButtonClick={this.handleTryAgain}\n showCloseButton={true}\n />\n </div>\n );\n }\n}\n\nexport default withRouter(withTheme(PaymentError));\n","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport withTheme from '../../components/withTheme';\nimport { hideSpinnerOverlay } from '../../utility/helper';\nimport Illustration from '../../components/illustrations/Illustration';\nimport ConfirmationBody from '../../confirmation/ConfirmationBody';\nimport { isMobileOrInContext } from '../../utility/inContextDonation';\nimport { trackErrorPageIM } from '../../fpti/fpti';\nimport { PAGE_SPEC } from '../../fpti/fptiConstants';\nimport { Row, Col } from '@paypalcorp/pp-react';\nimport { MessageFormat } from '@paypalcorp/worldready';\nimport { Context as WorldReadyContext } from '@paypalcorp/worldready-react';\nclass UnilateralError extends React.Component {\n constructor() {\n super();\n this.state = {};\n }\n\n componentDidMount = () => {\n hideSpinnerOverlay();\n\n trackErrorPageIM({\n pageSpec: PAGE_SPEC.UNILATERAL_ERROR_PAGE,\n errorCode: 'UNILATERAL_ERROR',\n });\n };\n\n render() {\n const noAccountErrorMessage = new MessageFormat(this.context, {\n id: 'errors.paymentError.noAccountError',\n }).format();\n return (\n <div\n className={`donate_wrapper confirmation ${\n isMobileOrInContext() ? 'mobile_view' : ''\n }`}\n >\n <Row align=\"center\">\n <Illustration type=\"warning\" />\n </Row>\n <Row>\n <Col className=\"text-center\">\n <ConfirmationBody\n message={\n noAccountErrorMessage === 'errors.paymentError.noAccountError'\n ? \"We can't complete this donation. The receiver doesn't have a valid PayPal account.\"\n : noAccountErrorMessage\n }\n />\n </Col>\n </Row>\n </div>\n );\n }\n}\nUnilateralError.contextType = WorldReadyContext;\nexport default withRouter(withTheme(UnilateralError));\n","import React from 'react';\nimport { withRouter } from 'react-router-dom';\nimport withTheme from '../../components/withTheme';\nimport templateData from '../../utility/getTemplateData';\nimport { hideSpinnerOverlay } from '../../utility/helper';\nimport { Button } from '@paypalcorp/pp-react';\nimport Illustration from '../../components/illustrations/Illustration';\nimport ConfirmationTitle from '../../confirmation/ConfirmationTitle';\nimport ConfirmationBody from '../../confirmation/ConfirmationBody';\nimport { isMobileOrInContext } from '../../utility/inContextDonation';\nimport { isExternalFlow } from '../../utility/productIntegrationUtils';\nimport CloseButton from '../../components/CloseButton';\nimport { Row, Col } from '@paypalcorp/pp-react';\nimport { Message } from '@paypalcorp/worldready-react';\nimport withWorldReady from '../../components/withWorldReady';\nclass ThreeDSError extends React.Component {\n componentDidMount = () => {\n hideSpinnerOverlay();\n };\n\n handleTryAgain = () => {\n this.props.history.push(`/donate?token=${templateData.token}`);\n };\n\n render() {\n return (\n <div>\n <div\n className={`donate_wrapper confirmation ${\n isMobileOrInContext() ? 'mobile_view' : ''\n }`}\n >\n {isExternalFlow() && <CloseButton />}\n <Row>\n <Col align=\"center\">\n <Illustration type=\"warning\" />\n </Col>\n </Row>\n <Row>\n <Col className=\"text-center\">\n <ConfirmationTitle\n message={<Message id=\"errors.threeDSError.errorMessage\" />}\n />\n </Col>\n </Row>\n <Row>\n <Col className=\"text-center\">\n <ConfirmationBody\n message={<Message id=\"errors.threeDSError.tryAgain\" />}\n />\n </Col>\n </Row>\n\n <Row>\n <Col className=\"text-center\">\n <Button\n className=\"btn-wide\"\n id=\"tryAgain\"\n onClick={this.handleTryAgain}\n >\n <Message id=\"errors.threeDSError.tryCard\" />\n </Button>\n </Col>\n </Row>\n </div>\n </div>\n );\n }\n}\n\nexport default withWorldReady(withRouter(withTheme(ThreeDSError)));\n","import { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { getParameterByName } from '../utility/queryStringHelper';\nimport withDonate from './guest/WithDonate';\nimport * as AppActions from '../actions/AppActions';\nimport AppStore from '../stores/AppStore';\nimport _get from 'lodash/get';\nimport templateData from '../utility/getTemplateData';\nimport { isLoggedInUser, isOneTouchUser } from '../utility/authUtils';\nimport { trackCaptureOrderPageIM } from '../fpti/fpti';\nimport withWorldReady from './withWorldReady';\n\nclass CaptureOrder extends Component {\n constructor(props) {\n super(props);\n this.state = {\n token: '',\n accessToken: '',\n isSubmitted: false,\n backBtnVisible: false,\n responseData: '',\n wTransactionEntry: '',\n requestError: '',\n };\n }\n\n componentDidMount() {\n this.props.toggleSpinner(true);\n const donateToken = getParameterByName('dtoken');\n const orderToken = getParameterByName('token');\n const payerID = getParameterByName('PayerID');\n\n this.captureOrder(orderToken, donateToken, payerID);\n }\n\n captureOrder = (orderToken, donateToken, payerID) => {\n const { orderStatus } = AppStore.getOrderStatus() || {};\n const { token } = templateData;\n\n if (orderStatus === 'COMPLETED') {\n window.location.href = `/donate/paymentComplete?token=${token}`;\n return;\n }\n\n this.props\n .captureOrder(orderToken, donateToken, payerID)\n .then((response) => response.json())\n .then((result) => {\n const confirmationNumber =\n _get(result, 'data.confirmationData.confirmationNumber') ||\n _get(result, 'data.confirmationData.postBackData.txn_id');\n if (!confirmationNumber) {\n this.props.history.push(`/donate/error/payment?token=${token}`);\n return;\n }\n\n AppActions.updateOrderStatus({ orderStatus: 'COMPLETED' });\n\n const isMemberFlow = isLoggedInUser() || isOneTouchUser();\n const confirmationData = _get(result, 'data.confirmationData', {});\n this.handlePaymentSuccess(confirmationData, isMemberFlow);\n })\n .catch(() => {\n this.props.history.push(`/donate/error/payment?token=${token}`);\n });\n };\n\n handlePaymentSuccess = (response, isMemberFlow) => {\n AppActions.updateConfirmation({ confirmation: response });\n this.handleConfirmation(response, isMemberFlow);\n };\n\n handleConfirmation = (response, isMemberFlow) => {\n const { token } = templateData;\n const flow = isMemberFlow ? 'member' : 'guest';\n const page = response.isOfacPending ? 'pending' : 'confirmation';\n const url = token\n ? `/donate/${flow}/${page}/?token=${token}`\n : `/donate/${flow}/${page}`;\n\n trackCaptureOrderPageIM({\n flow,\n confirmationData: response,\n });\n\n this.props.history.push(url);\n };\n\n render() {\n return null;\n }\n}\n\nCaptureOrder.propTypes = {\n toggleSpinner: PropTypes.func,\n captureOrder: PropTypes.func,\n history: PropTypes.object,\n};\n\nexport default withWorldReady(withDonate(CaptureOrder));\n","import { useEffect } from 'react';\nimport templateData from '../utility/getTemplateData';\n\nlet timerCount = 0;\nexport default function CancelAndReturnOrder() {\n const redirectToCancelUrl = () => {\n const { charityCancelUrl } = templateData;\n if (charityCancelUrl) {\n window.location.href = charityCancelUrl;\n }\n };\n\n useEffect(() => {\n // xprops takes a few miliseconds to be populated\n // because it has to set up the communication with host window\n // Wait a maximum of 2 seconds for the value\n waitForXProps(() => {\n // No xprops for 2 seconds\n // Maybe we are not inContext?\n // Redirect to cancel url\n redirectToCancelUrl();\n });\n }, []);\n\n function waitForXProps(callback) {\n timerCount++;\n if (timerCount > 10) {\n callback();\n return;\n }\n if (!window.xprops) {\n setTimeout(() => {\n waitForXProps(callback);\n }, 200);\n } else {\n window.xprops.close();\n }\n }\n\n return null;\n}\n","import './publicPath';\n\nimport 'consumerweb-shim';\nimport 'core-js/stable';\nimport 'regenerator-runtime/runtime';\nimport '../utility/bootstrap';\nimport React, { Component, Suspense, useEffect } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Route, Switch, Router } from 'react-router-dom';\nimport history from './configureHistory';\nimport CookiedUserPage from './../pages/landing/landing';\nimport CampaignLanding from '../pages/landing/campaignLanding';\nimport Review from './../pages/guest/GuestReview';\nimport {\n GuestConfirmationPending,\n GuestConfirmationSuccess,\n} from '../pages/guest/confirmation';\nimport PaymentError from './../pages/error/paymentError';\nimport UnilateralError from '../pages/error/UnilateralError';\nimport templateData from './../utility/getTemplateData';\nimport { isOneTouchUser, isAuthenticatedUser } from 'utility/authUtils';\nimport { parseUrlQuery } from '../utility/urlUtils';\nimport { setShouldRTL } from '../utility/paypalAphrodite';\nimport { showSpinnerOverlay, hideSpinnerOverlay } from '../utility/helper';\nimport ThreeDSError from '../pages/error/threeDSError';\nimport { reactLazyPreload } from '../utility/lazyLoader';\nimport CaptureOrder from '../components/CaptureOrder';\nimport CancelAndRedirectOrder from '../components/CancelAndRedirectOrder';\nimport {\n MemberConfirmationPending,\n MemberConfirmationSuccess,\n} from '../pages/member/confirmation';\nimport Footer from '../components/footer/footer';\n\nimport '../../css/ppvx.less';\nimport '../../css/ppvx-app.less';\nimport '../../css/portable-onboarding.less';\nimport { addClass, removeClass } from '../utility/domUtils';\nimport {\n isGNC,\n isPPCampaign,\n isCampaigns,\n} from '../utility/productIntegrationUtils';\nimport withWorldReady from '../components/withWorldReady';\n\n// set the direction for styles (whether to convert them to RTL)\nconst { locality: { directionality = 'ltr' } = {} } = templateData;\nsetShouldRTL(directionality !== 'rtl');\n\nconst { currentUserState, isUnilateralAccount, paymentStatus } = templateData;\n\nconst GuestPage = reactLazyPreload(() =>\n import(/* webpackChunkName: \"GuestPage\" */ './../pages/guest/guest')\n);\n\nfunction FallbackSpinner() {\n useEffect(() => {\n showSpinnerOverlay();\n }, []);\n\n return <></>;\n}\n\nclass LandingPage extends Component {\n constructor(props) {\n super(props);\n this.state = {\n userCookied: currentUserState === 'cookied',\n isOneTouch: isOneTouchUser(),\n };\n }\n\n componentDidMount() {\n if (!(isGNC() || isPPCampaign())) {\n addClass('#mainWrapper', ['landing-page']);\n }\n\n if (isUnilateralAccount) {\n history.push('/donate/error/noaccount');\n return;\n }\n // Only hiding spinner for cookied user and if payment token status is not complete\n if (this.state.userCookied && paymentStatus !== 'complete') {\n // In case of onboarding, guest.js will hide the spinner\n if (!templateData.onboardingEnabled) {\n hideSpinnerOverlay();\n }\n }\n\n if (!isAuthenticatedUser()) {\n GuestPage.preload();\n }\n }\n componentWillUnmount() {\n if (!(isGNC() || isPPCampaign())) {\n removeClass('#mainWrapper', ['landing-page']);\n }\n }\n\n getPageToRender() {\n // If `signup` param is present, render GuestPage\n const isSignupRoute = !!parseUrlQuery().signup;\n if (isSignupRoute) {\n return <GuestPage />;\n }\n return <CookiedUserPage />;\n }\n\n render() {\n return <div>{this.getPageToRender()}</div>;\n }\n}\n\nfunction CampaignLandingPage() {\n const getPageToRender = () => {\n // If `signup` param is present, render GuestPage\n const isSignupRoute = !!parseUrlQuery().signup;\n if (isSignupRoute) {\n return <GuestPage />;\n }\n return <CampaignLanding />;\n };\n\n return <>{getPageToRender()}</>;\n}\n\nconst MainRouter = () => (\n <Router history={history}>\n <Suspense fallback={<FallbackSpinner />}>\n <Switch>\n <Route\n exact\n path=\"/donate\"\n component={isCampaigns() ? CampaignLandingPage : LandingPage}\n />\n <Route exact path=\"/donate/capture\" component={CaptureOrder} />\n <Route\n exact\n path=\"/donate/orders/cancel\"\n component={CancelAndRedirectOrder}\n />\n <Route exact path=\"/donate/guest\" component={GuestPage} />\n <Route exact path=\"/donate/guest/crossborder\" component={Review} />\n <Route\n exact\n path=\"/donate/guest/confirmation\"\n component={GuestConfirmationSuccess}\n />\n <Route\n exact\n path=\"/donate/guest/pending\"\n component={GuestConfirmationPending}\n />\n <Route\n exact\n path=\"/donate/member/confirmation\"\n component={MemberConfirmationSuccess}\n />\n <Route\n exact\n path=\"/donate/member/pending\"\n component={MemberConfirmationPending}\n />\n <Route exact path=\"/donate/error/payment\" component={PaymentError} />\n <Route\n exact\n path=\"/donate/error/noaccount\"\n component={UnilateralError}\n />\n <Route exact path=\"/donate/error/threeDS\" component={ThreeDSError} />\n </Switch>\n </Suspense>\n <Footer />\n </Router>\n);\n\nconst RouterWithWorldReady = withWorldReady(MainRouter);\n\nReactDOM.render(\n <RouterWithWorldReady />,\n document.getElementById('donateWrapper')\n);\n","import TemplateData from './getTemplateData';\nimport { lazy as reactLazy } from 'react';\nimport { trackErrorIM } from '../fpti/fpti';\n\n/**\n * Loads bodymovin and hearts animation json\n */\nexport function loadBodyMovin() {\n if (\n typeof window.bodymovin !== 'undefined' &&\n typeof window.heartsAnimationData !== 'undefined'\n ) {\n return Promise.resolve([window.bodymovin, window.heartsAnimationData]);\n }\n return Promise.all([\n loadScript(\n 'https://www.paypalobjects.com/donate/bodymovin/bodymovin.min.js'\n ),\n loadScript('https://www.paypalobjects.com/donate/bodymovin/hearts.js'),\n ]).catch((error) => {\n trackErrorIM({\n errorCode: 'LAZY_LOAD_FAILED',\n errorMessage: error,\n fieldName: 'bodymovin',\n });\n });\n}\n\n/**\n * Load Progressive Onboarding component (Slick Version)\n */\nexport function loadSlickProgressiveOnboarding() {\n return Promise.all([\n import(\n /* webpackChunkName: 'ProgressiveonboardingSlick' */ 'portableonboarding'\n ),\n ]).catch((error) => {\n trackErrorIM({\n errorCode: 'LAZY_LOAD_FAILED',\n errorMessage: error,\n fieldName: 'progressive_slick',\n });\n });\n}\n\n// eslint-disable-next-line\nfunction loadScript(scriptPath) {\n return new Promise((resolve, reject) => {\n const nonce = TemplateData.nonce;\n var script = document.createElement('script');\n document.getElementsByTagName('head')[0].appendChild(script);\n script.onload = function (params) {\n resolve(params);\n };\n script.onerror = function (params) {\n reject(params);\n };\n script.nonce = nonce;\n script.src = scriptPath;\n });\n}\n\nexport function waitForOnload() {\n return new Promise((resolve) => {\n if (document.readyState === 'complete') {\n resolve();\n } else {\n window.addEventListener('load', () => {\n resolve();\n });\n }\n });\n}\n\n/**\n * Lazy load a React component and add preload option\n */\nexport function reactLazyPreload(importStatement) {\n const lazyComponent = reactLazy(importStatement);\n lazyComponent.preload = importStatement;\n return lazyComponent;\n}\n"],"sourceRoot":""}